src/jlibrtp/RtpPkt.java
author nikita@nikita-rack
Thu, 09 Apr 2009 20:26:58 +0200
changeset 99 8de21ac527ce
parent 13 e684f11070d5
permissions -rw-r--r--
revert pour refaire un push propre
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     1
/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     2
 * Java RTP Library (jlibrtp)
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     3
 * Copyright (C) 2006 Arne Kepp
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     4
 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     5
 * This library is free software; you can redistribute it and/or
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     6
 * modify it under the terms of the GNU Lesser General Public
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     7
 * License as published by the Free Software Foundation; either
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     8
 * version 2.1 of the License, or (at your option) any later version.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     9
 *
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    10
 * This library is distributed in the hope that it will be useful,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    13
 * Lesser General Public License for more details.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    14
 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    15
 * You should have received a copy of the GNU Lesser General Public
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    16
 * License along with this library; if not, write to the Free Software
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    18
 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    19
package jlibrtp;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    20
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    21
/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    22
 * RtpPkt is the basic class for creating and parsing RTP packets.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    23
 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    24
 * There are two ways of instantiating an RtpPkt. One is for packets that you wish to send,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    25
 * which requires that you provide basic information about the packet and a payload. Upon calling
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    26
 * encode() the fields of the structure are written into a bytebuffer, in the form that it would
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    27
 * sent across the network, excluding the UDP headers.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    28
 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    29
 * The other way is by passing a bytebuffer. The assumption is that this is a packet
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    30
 * that has been received from the network, excluding UDP headers, and the bytebuffer will
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    31
 * be parsed into the correct fields. 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    32
 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    33
 * The class keeps track of changes. Therefore, modifications are possible after calling encode(),
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    34
 * if necessary, the raw version of the packet will be regenerated on subsequent requests.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    35
 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    36
 * @author Arne Kepp
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    37
 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    38
public class RtpPkt {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    39
	/** Whether the packet has been changed since encode() */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    40
	private boolean rawPktCurrent = false;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    41
	/** The version, always 2, 2 bits */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    42
	private int version = 2; 		//2 bits
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    43
	/** Whether the packet is padded, 1 bit */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    44
	private int padding; 			//1 bit
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    45
	/** Whether and extension is used, 1 bit */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    46
	private int extension = 0; 		//1 bit
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    47
	/** Whether the packet is marked, 1 bit */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    48
	private int marker = 0;			//1 bit
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    49
	/** What payload type is used, 7 bits */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    50
	private int payloadType;		//
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    51
	/** The sequence number, taken from RTP Session, 16 bits */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    52
	private int seqNumber;			//16 bits
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    53
	/** The RTP timestamp, 32bits */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    54
	private long timeStamp;			//32 bits
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    55
	/** The SSRC of the packet sender, 32 bits*/
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    56
	private long ssrc;				//32 bits
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    57
	/** SSRCs of contributing sources, 32xn bits, n<16 */ 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    58
	private long[] csrcArray = null;//
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    59
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    60
	/** Contains the actual data (eventually) */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    61
	private byte[] rawPkt = null;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    62
	/** The actual data, without any RTP stuff */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    63
	private byte[] payload = null;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    64
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    65
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    66
	 * Construct a packet-instance. The ByteBuffer required for UDP transmission can afterwards be obtained from getRawPkt(). If you need to set additional parameters, such as the marker bit or contributing sources, you should do so before calling getRawPkt;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    67
	 *
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    68
	 * @param aTimeStamp RTP timestamp for data
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    69
	 * @param syncSource the SSRC, usually taken from RTPSession
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    70
	 * @param seqNum Sequency number
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    71
	 * @param plt Type of payload
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    72
	 * @param pl Payload, the actual data
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    73
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    74
	protected RtpPkt(long aTimeStamp, long syncSource, int seqNum, int plt, byte[] pl){
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    75
		int test = 0;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    76
		test += setTimeStamp(aTimeStamp);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    77
		test += setSsrc(syncSource);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    78
		test += setSeqNumber(seqNum);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    79
		test += setPayloadType(plt);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    80
		test += setPayload(pl);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    81
		if(test != 0) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    82
			System.out.println("RtpPkt() failed, check with checkPkt()");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    83
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    84
		rawPktCurrent = true;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    85
		if( RTPSession.rtpDebugLevel > 5) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    86
			System.out.println("<--> RtpPkt(aTimeStamp, syncSource, seqNum, plt, pl)"); 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    87
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    88
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    89
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    90
	 * Construct a packet-instance from an raw packet (believed to be RTP). The UDP-headers must be removed before invoking this method. Call checkPkt on the instance to verify that it was successfully parsed.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    91
	 *
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    92
	 * @param aRawPkt The data-part of a UDP-packet believed to be RTP 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    93
	 * @param packetSize the number of valid octets in the packet, should be aRawPkt.length
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    94
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    95
	protected RtpPkt(byte[] aRawPkt, int packetSize){
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    96
		if( RTPSession.rtpDebugLevel > 5) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    97
			System.out.println("-> RtpPkt(aRawPkt)"); 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    98
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    99
		//Check size, need to have at least a complete header
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   100
		if(aRawPkt == null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   101
			System.out.println("RtpPkt(byte[]) Packet null");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   102
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   103
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   104
		int remOct = packetSize - 12;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   105
		if(remOct >= 0) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   106
			rawPkt = aRawPkt;	//Store it
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   107
			//Interrogate the packet
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   108
			sliceFirstLine();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   109
			if(version == 2) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   110
				sliceTimeStamp();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   111
				sliceSSRC();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   112
				if(remOct > 4 && getCsrcCount() > 0) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   113
					sliceCSRCs();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   114
					remOct -= csrcArray.length * 4; //4 octets per CSRC
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   115
				}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   116
				// TODO Extension
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   117
				if(remOct > 0) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   118
					slicePayload(remOct);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   119
				}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   120
			
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   121
				//Sanity checks
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   122
				checkPkt();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   123
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   124
				//Mark the buffer as current
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   125
				rawPktCurrent = true;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   126
			} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   127
				System.out.println("RtpPkt(byte[]) Packet is not version 2, giving up.");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   128
			}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   129
		} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   130
			System.out.println("RtpPkt(byte[]) Packet too small to be sliced");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   131
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   132
		rawPktCurrent = true;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   133
		if( RTPSession.rtpDebugLevel > 5) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   134
			System.out.println("<- RtpPkt(aRawPkt)");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   135
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   136
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   137
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   138
	/*********************************************************************************************************
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   139
	 *                                                Reading stuff 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   140
	 *********************************************************************************************************/
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   141
	protected int checkPkt() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   142
		//TODO, check for version 2 etc
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   143
		return 0;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   144
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   145
	protected int getHeaderLength() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   146
		//TODO include extension
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   147
		return 12 + 4*getCsrcCount();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   148
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   149
	protected int getPayloadLength() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   150
		return payload.length;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   151
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   152
	//public int getPaddingLength() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   153
	//	return lenPadding;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   154
	//}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   155
	protected int getVersion() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   156
		return version;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   157
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   158
	//public boolean isPadded() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   159
	//	if(lenPadding > 0) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   160
	//		return true;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   161
	//	}else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   162
	//		return false;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   163
	//	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   164
	//}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   165
	//public int getHeaderExtension() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   166
	//TODO
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   167
	//}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   168
	protected boolean isMarked() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   169
		return (marker != 0);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   170
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   171
	protected int getPayloadType() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   172
		return payloadType;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   173
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   174
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   175
	protected int getSeqNumber() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   176
		return seqNumber;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   177
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   178
	protected long getTimeStamp() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   179
		return timeStamp;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   180
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   181
	protected long getSsrc() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   182
		return ssrc;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   183
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   184
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   185
	protected int getCsrcCount() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   186
		if(csrcArray != null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   187
			return csrcArray.length;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   188
		}else{
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   189
			return 0;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   190
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   191
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   192
	protected long[] getCsrcArray() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   193
		return csrcArray;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   194
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   195
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   196
	/** 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   197
	 *  Encodes the a
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   198
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   199
	protected byte[] encode() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   200
		if(! rawPktCurrent || rawPkt == null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   201
			writePkt();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   202
		} 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   203
		return rawPkt;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   204
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   205
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   206
	/* For debugging purposes */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   207
	protected void printPkt() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   208
		System.out.print("V:" + version + " P:" + padding + " EXT:" + extension);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   209
		System.out.println(" CC:" + getCsrcCount() + " M:"+ marker +" PT:" + payloadType + " SN: "+ seqNumber);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   210
		System.out.println("Timestamp:" + timeStamp + "(long output as int, may be 2s complement)");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   211
		System.out.println("SSRC:" + ssrc + "(long output as int, may be 2s complement)");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   212
		for(int i=0;i<getCsrcCount();i++) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   213
			System.out.println("CSRC:" + csrcArray[i] + "(long output as int, may be 2s complement)");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   214
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   215
		//TODO Extension
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   216
		System.out.println("Payload, first four bytes: " + payload[0] + " " + payload[1] + " " + payload[2] + " " + payload[3]);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   217
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   218
	/*********************************************************************************************************
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   219
	 *                                                Setting stuff 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   220
	 *********************************************************************************************************/
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   221
	protected void setMarked(boolean mark) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   222
		rawPktCurrent = false;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   223
		if(mark) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   224
			marker = 1;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   225
		} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   226
			marker = 0;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   227
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   228
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   229
	//public int setHeaderExtension() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   230
	//TODO
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   231
	//}	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   232
	protected int setPayloadType(int plType) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   233
		int temp = (plType & 0x0000007F); // 7 bits, checks in RTPSession as well.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   234
		if(temp == plType) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   235
			rawPktCurrent = false;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   236
			payloadType = temp;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   237
			return 0;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   238
		} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   239
			return -1;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   240
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   241
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   242
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   243
	protected int setSeqNumber(int number) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   244
		if(number <= 65536 && number >= 0) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   245
			rawPktCurrent = false;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   246
			seqNumber = number;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   247
			return 0;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   248
		} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   249
			System.out.println("RtpPkt.setSeqNumber: invalid number");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   250
			return -1;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   251
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   252
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   253
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   254
	protected int setTimeStamp(long time) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   255
		rawPktCurrent = false;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   256
		timeStamp = time;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   257
		return 0;	//Naive for now
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   258
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   259
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   260
	protected int setSsrc(long source) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   261
		rawPktCurrent = false;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   262
		ssrc = source;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   263
		return 0;	//Naive for now
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   264
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   265
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   266
	protected int setCsrcs(long[] contributors) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   267
		if(contributors.length <= 16) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   268
			csrcArray = contributors;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   269
			return 0;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   270
		} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   271
			System.out.println("RtpPkt.setCsrcs: Cannot have more than 16 CSRCs");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   272
			return -1;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   273
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   274
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   275
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   276
	protected int setPayload(byte[] data) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   277
		// TODO Padding
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   278
		if(data.length < (1500 - 12)) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   279
			rawPktCurrent = false;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   280
			payload = data;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   281
			return 0;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   282
		} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   283
			System.out.println("RtpPkt.setPayload: Cannot carry more than 1480 bytes for now.");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   284
			return -1;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   285
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   286
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   287
	protected byte[] getPayload() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   288
		return payload;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   289
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   290
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   291
	/*********************************************************************************************************
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   292
	 *                                           Private functions 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   293
	 *********************************************************************************************************/
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   294
	//Generate a bytebyffer representing the packet, store it.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   295
	private void writePkt() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   296
		int bytes = getPayloadLength();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   297
		int headerLen = getHeaderLength();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   298
		int csrcLen = getCsrcCount();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   299
		rawPkt = new byte[headerLen + bytes];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   300
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   301
		// The first line contains, version and various bits
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   302
		writeFirstLine();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   303
		byte[] someBytes = StaticProcs.uIntLongToByteWord(timeStamp);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   304
		for(int i=0;i<4;i++) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   305
			rawPkt[i + 4] = someBytes[i];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   306
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   307
		//System.out.println("writePkt timeStamp:" + rawPkt[7]);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   308
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   309
		someBytes = StaticProcs.uIntLongToByteWord(ssrc);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   310
		System.arraycopy(someBytes, 0, rawPkt, 8, 4);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   311
		//System.out.println("writePkt ssrc:" + rawPkt[11]);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   312
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   313
		for(int i=0; i<csrcLen ; i++) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   314
			someBytes = StaticProcs.uIntLongToByteWord(csrcArray[i]);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   315
			System.arraycopy(someBytes, 0, rawPkt, 12 + 4*i, 4);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   316
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   317
		// TODO Extension
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   318
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   319
		//Payload
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   320
		System.arraycopy(payload, 0, rawPkt, headerLen, bytes);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   321
		rawPktCurrent = true;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   322
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   323
	//Writes the first 4 octets of the RTP packet
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   324
	private void writeFirstLine() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   325
		byte aByte = 0;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   326
		aByte |=(version << 6);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   327
		aByte |=(padding << 5);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   328
		aByte |=(extension << 4);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   329
		aByte |=(getCsrcCount());
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   330
		rawPkt[0] = aByte;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   331
		aByte = 0;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   332
		aByte |=(marker << 7);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   333
		aByte |= payloadType;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   334
		rawPkt[1] = aByte;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   335
		byte[] someBytes = StaticProcs.uIntIntToByteWord(seqNumber);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   336
		rawPkt[2] = someBytes[0];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   337
		rawPkt[3] = someBytes[1];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   338
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   339
	//Picks apart the first 4 octets of an RTP packet
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   340
	private void sliceFirstLine() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   341
		version = ((rawPkt[0] & 0xC0) >>> 6);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   342
		padding = ((rawPkt[0] & 0x20) >>> 5);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   343
		extension = ((rawPkt[0] & 0x10) >>> 4);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   344
		csrcArray = new long[(rawPkt[0] & 0x0F)];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   345
		marker = ((rawPkt[1] & 0x80) >> 7);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   346
		payloadType = (rawPkt[1] & 0x7F);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   347
		seqNumber = StaticProcs.bytesToUIntInt(rawPkt, 2);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   348
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   349
	//Takes the 4 octets representing the timestamp
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   350
	private void sliceTimeStamp() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   351
		timeStamp = StaticProcs.bytesToUIntLong(rawPkt, 4);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   352
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   353
	//Takes the 4 octets representing the SSRC
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   354
	private void sliceSSRC() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   355
		ssrc = StaticProcs.bytesToUIntLong(rawPkt,8);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   356
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   357
	//Check the length of the csrcArray (set during sliceFirstLine) 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   358
	private void  sliceCSRCs() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   359
		for(int i=0; i< csrcArray.length; i++) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   360
			ssrc = StaticProcs.bytesToUIntLong(rawPkt, i*4 + 12);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   361
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   362
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   363
	//Extensions //TODO
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   364
	private void slicePayload(int bytes) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   365
		payload = new byte[bytes];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   366
		int headerLen = getHeaderLength();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   367
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   368
		System.arraycopy(rawPkt, headerLen, payload, 0, bytes);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   369
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   370
}