diff -r e8d6255306f8 -r 4e40f3481f23 src/org/sipdroid/net/RtpPacket.java --- a/src/org/sipdroid/net/RtpPacket.java Sat Jan 23 22:19:43 2010 +0100 +++ b/src/org/sipdroid/net/RtpPacket.java Sun Jan 24 00:42:29 2010 +0100 @@ -19,300 +19,300 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -package src.org.sipdroid.net; +package org.sipdroid.net; -import org.zoolu.tools.Random; +import com.beem.project.beem.utils.Random; /** * RtpPacket implements a RTP packet. */ public class RtpPacket { - /* RTP packet buffer containing both the RTP header and payload */ - byte[] packet; + /* RTP packet buffer containing both the RTP header and payload */ + byte[] packet; - /* RTP packet length */ - int packet_len; + /* RTP packet length */ + int packet_len; - /* RTP header length */ - // int header_len; - /** Gets the RTP packet */ - public byte[] getPacket() { - return packet; - } + /* RTP header length */ + // int header_len; + /** Gets the RTP packet */ + public byte[] getPacket() { + return packet; + } - /** Gets the RTP packet length */ - public int getLength() { - return packet_len; - } + /** Gets the RTP packet length */ + public int getLength() { + return packet_len; + } - /** Gets the RTP header length */ - public int getHeaderLength() { - if (packet_len >= 12) - return 12 + 4 * getCscrCount(); - else - return packet_len; // broken packet - } + /** Gets the RTP header length */ + public int getHeaderLength() { + if (packet_len >= 12) + return 12 + 4 * getCscrCount(); + else + return packet_len; // broken packet + } - /** Gets the RTP header length */ - public int getPayloadLength() { - if (packet_len >= 12) - return packet_len - getHeaderLength(); - else - return 0; // broken packet - } + /** Gets the RTP header length */ + public int getPayloadLength() { + if (packet_len >= 12) + return packet_len - getHeaderLength(); + else + return 0; // broken packet + } - /** Sets the RTP payload length */ - public void setPayloadLength(int len) { - packet_len = getHeaderLength() + len; - } + /** Sets the RTP payload length */ + public void setPayloadLength(int len) { + packet_len = getHeaderLength() + len; + } - // version (V): 2 bits - // padding (P): 1 bit - // extension (X): 1 bit - // CSRC count (CC): 4 bits - // marker (M): 1 bit - // payload type (PT): 7 bits - // sequence number: 16 bits - // timestamp: 32 bits - // SSRC: 32 bits - // CSRC list: 0 to 15 items, 32 bits each + // version (V): 2 bits + // padding (P): 1 bit + // extension (X): 1 bit + // CSRC count (CC): 4 bits + // marker (M): 1 bit + // payload type (PT): 7 bits + // sequence number: 16 bits + // timestamp: 32 bits + // SSRC: 32 bits + // CSRC list: 0 to 15 items, 32 bits each - /** Gets the version (V) */ - public int getVersion() { - if (packet_len >= 12) - return (packet[0] >> 6 & 0x03); - else - return 0; // broken packet - } + /** Gets the version (V) */ + public int getVersion() { + if (packet_len >= 12) + return (packet[0] >> 6 & 0x03); + else + return 0; // broken packet + } - /** Sets the version (V) */ - public void setVersion(int v) { - if (packet_len >= 12) - packet[0] = (byte) ((packet[0] & 0x3F) | ((v & 0x03) << 6)); - } + /** Sets the version (V) */ + public void setVersion(int v) { + if (packet_len >= 12) + packet[0] = (byte) ((packet[0] & 0x3F) | ((v & 0x03) << 6)); + } - /** Whether has padding (P) */ - public boolean hasPadding() { - if (packet_len >= 12) - return getBit(packet[0], 5); - else - return false; // broken packet - } + /** Whether has padding (P) */ + public boolean hasPadding() { + if (packet_len >= 12) + return getBit(packet[0], 5); + else + return false; // broken packet + } - /** Set padding (P) */ - public void setPadding(boolean p) { - if (packet_len >= 12) - packet[0] = setBit(p, packet[0], 5); - } + /** Set padding (P) */ + public void setPadding(boolean p) { + if (packet_len >= 12) + packet[0] = setBit(p, packet[0], 5); + } - /** Whether has extension (X) */ - public boolean hasExtension() { - if (packet_len >= 12) - return getBit(packet[0], 4); - else - return false; // broken packet - } + /** Whether has extension (X) */ + public boolean hasExtension() { + if (packet_len >= 12) + return getBit(packet[0], 4); + else + return false; // broken packet + } - /** Set extension (X) */ - public void setExtension(boolean x) { - if (packet_len >= 12) - packet[0] = setBit(x, packet[0], 4); - } + /** Set extension (X) */ + public void setExtension(boolean x) { + if (packet_len >= 12) + packet[0] = setBit(x, packet[0], 4); + } - /** Gets the CSCR count (CC) */ - public int getCscrCount() { - if (packet_len >= 12) - return (packet[0] & 0x0F); - else - return 0; // broken packet - } + /** Gets the CSCR count (CC) */ + public int getCscrCount() { + if (packet_len >= 12) + return (packet[0] & 0x0F); + else + return 0; // broken packet + } - /** Whether has marker (M) */ - public boolean hasMarker() { - if (packet_len >= 12) - return getBit(packet[1], 7); - else - return false; // broken packet - } + /** Whether has marker (M) */ + public boolean hasMarker() { + if (packet_len >= 12) + return getBit(packet[1], 7); + else + return false; // broken packet + } - /** Set marker (M) */ - public void setMarker(boolean m) { - if (packet_len >= 12) - packet[1] = setBit(m, packet[1], 7); - } + /** Set marker (M) */ + public void setMarker(boolean m) { + if (packet_len >= 12) + packet[1] = setBit(m, packet[1], 7); + } - /** Gets the payload type (PT) */ - public int getPayloadType() { - if (packet_len >= 12) - return (packet[1] & 0x7F); - else - return -1; // broken packet - } + /** Gets the payload type (PT) */ + public int getPayloadType() { + if (packet_len >= 12) + return (packet[1] & 0x7F); + else + return -1; // broken packet + } - /** Sets the payload type (PT) */ - public void setPayloadType(int pt) { - if (packet_len >= 12) - packet[1] = (byte) ((packet[1] & 0x80) | (pt & 0x7F)); - } + /** Sets the payload type (PT) */ + public void setPayloadType(int pt) { + if (packet_len >= 12) + packet[1] = (byte) ((packet[1] & 0x80) | (pt & 0x7F)); + } - /** Gets the sequence number */ - public int getSequenceNumber() { - if (packet_len >= 12) - return getInt(packet, 2, 4); - else - return 0; // broken packet - } + /** Gets the sequence number */ + public int getSequenceNumber() { + if (packet_len >= 12) + return getInt(packet, 2, 4); + else + return 0; // broken packet + } - /** Sets the sequence number */ - public void setSequenceNumber(int sn) { - if (packet_len >= 12) - setInt(sn, packet, 2, 4); - } + /** Sets the sequence number */ + public void setSequenceNumber(int sn) { + if (packet_len >= 12) + setInt(sn, packet, 2, 4); + } - /** Gets the timestamp */ - public long getTimestamp() { - if (packet_len >= 12) - return getLong(packet, 4, 8); - else - return 0; // broken packet - } + /** Gets the timestamp */ + public long getTimestamp() { + if (packet_len >= 12) + return getLong(packet, 4, 8); + else + return 0; // broken packet + } - /** Sets the timestamp */ - public void setTimestamp(long timestamp) { - if (packet_len >= 12) - setLong(timestamp, packet, 4, 8); - } + /** Sets the timestamp */ + public void setTimestamp(long timestamp) { + if (packet_len >= 12) + setLong(timestamp, packet, 4, 8); + } - /** Gets the SSCR */ - public long getSscr() { - if (packet_len >= 12) - return getLong(packet, 8, 12); - else - return 0; // broken packet - } + /** Gets the SSCR */ + public long getSscr() { + if (packet_len >= 12) + return getLong(packet, 8, 12); + else + return 0; // broken packet + } - /** Sets the SSCR */ - public void setSscr(long ssrc) { - if (packet_len >= 12) - setLong(ssrc, packet, 8, 12); - } + /** Sets the SSCR */ + public void setSscr(long ssrc) { + if (packet_len >= 12) + setLong(ssrc, packet, 8, 12); + } - /** Gets the CSCR list */ - public long[] getCscrList() { - int cc = getCscrCount(); - long[] cscr = new long[cc]; - for (int i = 0; i < cc; i++) - cscr[i] = getLong(packet, 12 + 4 * i, 16 + 4 * i); - return cscr; - } + /** Gets the CSCR list */ + public long[] getCscrList() { + int cc = getCscrCount(); + long[] cscr = new long[cc]; + for (int i = 0; i < cc; i++) + cscr[i] = getLong(packet, 12 + 4 * i, 16 + 4 * i); + return cscr; + } - /** Sets the CSCR list */ - public void setCscrList(long[] cscr) { - if (packet_len >= 12) { - int cc = cscr.length; - if (cc > 15) - cc = 15; - packet[0] = (byte) (((packet[0] >> 4) << 4) + cc); - cscr = new long[cc]; - for (int i = 0; i < cc; i++) - setLong(cscr[i], packet, 12 + 4 * i, 16 + 4 * i); - // header_len=12+4*cc; - } + /** Sets the CSCR list */ + public void setCscrList(long[] cscr) { + if (packet_len >= 12) { + int cc = cscr.length; + if (cc > 15) + cc = 15; + packet[0] = (byte) (((packet[0] >> 4) << 4) + cc); + cscr = new long[cc]; + for (int i = 0; i < cc; i++) + setLong(cscr[i], packet, 12 + 4 * i, 16 + 4 * i); + // header_len=12+4*cc; } + } - /** Sets the payload */ - public void setPayload(byte[] payload, int len) { - if (packet_len >= 12) { - int header_len = getHeaderLength(); - for (int i = 0; i < len; i++) - packet[header_len + i] = payload[i]; - packet_len = header_len + len; - } + /** Sets the payload */ + public void setPayload(byte[] payload, int len) { + if (packet_len >= 12) { + int header_len = getHeaderLength(); + for (int i = 0; i < len; i++) + packet[header_len + i] = payload[i]; + packet_len = header_len + len; } + } - /** Gets the payload */ - public byte[] getPayload() { - int header_len = getHeaderLength(); - int len = packet_len - header_len; - byte[] payload = new byte[len]; - for (int i = 0; i < len; i++) - payload[i] = packet[header_len + i]; - return payload; - } + /** Gets the payload */ + public byte[] getPayload() { + int header_len = getHeaderLength(); + int len = packet_len - header_len; + byte[] payload = new byte[len]; + for (int i = 0; i < len; i++) + payload[i] = packet[header_len + i]; + return payload; + } - /** Creates a new RTP packet */ - public RtpPacket(byte[] buffer, int packet_length) { - packet = buffer; - packet_len = packet_length; - if (packet_len < 12) - packet_len = 12; - init(0x0F); - } + /** Creates a new RTP packet */ + public RtpPacket(byte[] buffer, int packet_length) { + packet = buffer; + packet_len = packet_length; + if (packet_len < 12) + packet_len = 12; + init(0x0F); + } - /** init the RTP packet header (only PT) */ - public void init(int ptype) { - init(ptype, Random.nextLong()); - } + /** init the RTP packet header (only PT) */ + public void init(int ptype) { + init(ptype, Random.nextLong()); + } - /** init the RTP packet header (PT and SSCR) */ - public void init(int ptype, long sscr) { - init(ptype, Random.nextInt(), Random.nextLong(), sscr); - } + /** init the RTP packet header (PT and SSCR) */ + public void init(int ptype, long sscr) { + init(ptype, Random.nextInt(), Random.nextLong(), sscr); + } - /** init the RTP packet header (PT, SQN, TimeStamp, SSCR) */ - public void init(int ptype, int seqn, long timestamp, long sscr) { - setVersion(2); - setPayloadType(ptype); - setSequenceNumber(seqn); - setTimestamp(timestamp); - setSscr(sscr); - } + /** init the RTP packet header (PT, SQN, TimeStamp, SSCR) */ + public void init(int ptype, int seqn, long timestamp, long sscr) { + setVersion(2); + setPayloadType(ptype); + setSequenceNumber(seqn); + setTimestamp(timestamp); + setSscr(sscr); + } - // *********************** Private and Static *********************** + // *********************** Private and Static *********************** - /** Gets int value */ - private static int getInt(byte b) { - return ((int) b + 256) % 256; - } + /** Gets int value */ + private static int getInt(byte b) { + return ((int) b + 256) % 256; + } - /** Gets long value */ - private static long getLong(byte[] data, int begin, int end) { - long n = 0; - for (; begin < end; begin++) { - n <<= 8; - n += data[begin]; - } - return n; + /** Gets long value */ + private static long getLong(byte[] data, int begin, int end) { + long n = 0; + for (; begin < end; begin++) { + n <<= 8; + n += data[begin]; } + return n; + } - /** Sets long value */ - private static void setLong(long n, byte[] data, int begin, int end) { - for (end--; end >= begin; end--) { - data[end] = (byte) (n % 256); - n >>= 8; - } + /** Sets long value */ + private static void setLong(long n, byte[] data, int begin, int end) { + for (end--; end >= begin; end--) { + data[end] = (byte) (n % 256); + n >>= 8; } + } - /** Gets Int value */ - private static int getInt(byte[] data, int begin, int end) { - return (int) getLong(data, begin, end); - } + /** Gets Int value */ + private static int getInt(byte[] data, int begin, int end) { + return (int) getLong(data, begin, end); + } - /** Sets Int value */ - private static void setInt(int n, byte[] data, int begin, int end) { - setLong(n, data, begin, end); - } + /** Sets Int value */ + private static void setInt(int n, byte[] data, int begin, int end) { + setLong(n, data, begin, end); + } - /** Gets bit value */ - private static boolean getBit(byte b, int bit) { - return (b >> bit) == 1; - } + /** Gets bit value */ + private static boolean getBit(byte b, int bit) { + return (b >> bit) == 1; + } - /** Sets bit value */ - private static byte setBit(boolean value, byte b, int bit) { - if (value) - return (byte) (b | (1 << bit)); - else - return (byte) ((b | (1 << bit)) ^ (1 << bit)); - } + /** Sets bit value */ + private static byte setBit(boolean value, byte b, int bit) { + if (value) + return (byte) (b | (1 << bit)); + else + return (byte) ((b | (1 << bit)) ^ (1 << bit)); + } }