--- a/src/jlibrtp/RtcpPktSDES.java Sat Jan 23 21:48:58 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,308 +0,0 @@
-/**
- * Java RTP Library (jlibrtp)
- * Copyright (C) 2006 Arne Kepp
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-package jlibrtp;
-
-import java.net.InetSocketAddress;
-
-/**
- * RTCP packets for Source Descriptions
- *
- * @author Arne Kepp
- */
-public class RtcpPktSDES extends RtcpPkt {
- /** Whether the RTP Session object should be inclduded */
- boolean reportSelf = true;
- /** The parent RTP Session object, holds participant database */
- RTPSession rtpSession = null;
- /** The participants to create SDES packets for */
- protected Participant[] participants = null;
-
- /**
- * Constructor to create a new SDES packet
- *
- * TODO: Currently the added participants are not actually encoded because
- * the library lacks some support for acting as mixer or relay in other
- * areas.
- *
- * @param reportThisSession
- * include information from RTPSession as a participant
- * @param rtpSession
- * the session itself
- * @param additionalParticipants
- * additional participants to include
- */
- protected RtcpPktSDES(boolean reportThisSession, RTPSession rtpSession,
- Participant[] additionalParticipants) {
- super.packetType = 202;
- // Fetch all the right stuff from the database
- reportSelf = reportThisSession;
- participants = additionalParticipants;
- this.rtpSession = rtpSession;
- }
-
- /**
- * Constructor that parses a received packet
- *
- * @param aRawPkt
- * the byte[] containing the packet
- * @param start
- * where in the byte[] this packet starts
- * @param socket
- * the address from which the packet was received
- * @param partDb
- * the participant database
- */
- protected RtcpPktSDES(byte[] aRawPkt, int start, InetSocketAddress socket,
- ParticipantDatabase partDb) {
- if (RTPSession.rtcpDebugLevel > 8) {
- System.out.println(" -> RtcpPktSDES(byte[], ParticipantDabase)");
- }
- rawPkt = aRawPkt;
-
- if (!super.parseHeaders(start) || packetType != 202) {
- if (RTPSession.rtpDebugLevel > 2) {
- System.out
- .println(" <-> RtcpPktSDES.parseHeaders() etc. problem");
- }
- super.problem = -202;
- } else {
- // System.out.println(" DECODE SIZE: " + super.length +
- // " itemcount " + itemCount );
-
- int curPos = 4 + start;
- int curLength;
- int curType;
- long ssrc;
- boolean endReached = false;
- boolean newPart;
- this.participants = new Participant[itemCount];
-
- // Loop over SSRC SDES chunks
- for (int i = 0; i < itemCount; i++) {
- ssrc = StaticProcs.bytesToUIntLong(aRawPkt, curPos);
- Participant part = partDb.getParticipant(ssrc);
- if (part == null) {
- if (RTPSession.rtcpDebugLevel > 1) {
- System.out
- .println("RtcpPktSDES(byte[], ParticipantDabase) adding new participant, ssrc:"
- + ssrc + " " + socket);
- }
-
- part = new Participant(socket, socket, ssrc);
- newPart = true;
- } else {
- newPart = false;
- }
-
- curPos += 4;
-
- // System.out.println("PRE endReached " + endReached +
- // " curPos: " + curPos + " length:" + this.length +
- // (!endReached && (curPos/4) < this.length));
-
- while (!endReached && (curPos / 4) <= this.length) {
- // System.out.println("endReached " + endReached +
- // " curPos: " + curPos + " length:" + this.length);
- curType = (int) aRawPkt[curPos];
-
- if (curType == 0) {
- curPos += 4 - (curPos % 4);
- endReached = true;
- } else {
- curLength = (int) aRawPkt[curPos + 1];
- // System.out.println("curPos:"+curPos+" curType:"+curType+" curLength:"+curLength+" read from:"+(curPos
- // + 1));
-
- if (curLength > 0) {
- byte[] item = new byte[curLength];
- // System.out.println("curPos:"+curPos+" arawPkt.length:"+aRawPkt.length+" curLength:"+curLength);
- System.arraycopy(aRawPkt, curPos + 2, item, 0,
- curLength);
-
- switch (curType) {
- case 1:
- part.cname = new String(item);
- break;
- case 2:
- part.name = new String(item);
- break;
- case 3:
- part.email = new String(item);
- break;
- case 4:
- part.phone = new String(item);
- break;
- case 5:
- part.loc = new String(item);
- break;
- case 6:
- part.tool = new String(item);
- break;
- case 7:
- part.note = new String(item);
- break;
- case 8:
- part.priv = new String(item);
- break;
- }
- // System.out.println("TYPE " + curType + " value:"
- // + new String(item) );
-
- } else {
- switch (curType) {
- case 1:
- part.cname = null;
- break;
- case 2:
- part.name = null;
- break;
- case 3:
- part.email = null;
- break;
- case 4:
- part.phone = null;
- break;
- case 5:
- part.loc = null;
- break;
- case 6:
- part.tool = null;
- break;
- case 7:
- part.note = null;
- break;
- case 8:
- part.priv = null;
- break;
- }
-
- }
- curPos = curPos + curLength + 2;
- }
- }
-
- // Save the participant
- this.participants[i] = part;
- if (newPart)
- partDb.addParticipant(2, part);
-
- // System.out.println("HEPPPPPP " + participants[i].cname );
- }
- }
- if (RTPSession.rtcpDebugLevel > 8) {
- System.out.println(" <- RtcpPktSDES()");
- }
- }
-
- /**
- * Encode the packet into a byte[], saved in .rawPkt
- *
- * CompRtcpPkt will call this automatically
- */
- protected void encode() {
- byte[] temp = new byte[1450];
- byte[] someBytes = StaticProcs.uIntLongToByteWord(this.rtpSession.ssrc);
- System.arraycopy(someBytes, 0, temp, 4, 4);
- int pos = 8;
-
- String tmpString = null;
- for (int i = 1; i < 9; i++) {
- switch (i) {
- case 1:
- tmpString = this.rtpSession.cname;
- break;
- case 2:
- tmpString = this.rtpSession.name;
- break;
- case 3:
- tmpString = this.rtpSession.email;
- break;
- case 4:
- tmpString = this.rtpSession.phone;
- break;
- case 5:
- tmpString = this.rtpSession.loc;
- break;
- case 6:
- tmpString = this.rtpSession.tool;
- break;
- case 7:
- tmpString = this.rtpSession.note;
- break;
- case 8:
- tmpString = this.rtpSession.priv;
- break;
- }
-
- if (tmpString != null) {
- someBytes = tmpString.getBytes();
- temp[pos] = (byte) i;
- temp[pos + 1] = (byte) someBytes.length;
- System.arraycopy(someBytes, 0, temp, pos + 2, someBytes.length);
- // System.out.println("i: "+i+" pos:"+pos+" someBytes.length:"+someBytes.length);
- pos = pos + someBytes.length + 2;
- // if(i == 1 ) {
- // System.out.println("trueeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" +
- // tmpString);
- // }
- }
- }
- int leftover = pos % 4;
- if (leftover == 1) {
- temp[pos] = (byte) 0;
- temp[pos + 1] = (byte) 1;
- pos += 3;
- } else if (leftover == 2) {
- temp[pos] = (byte) 0;
- temp[pos + 1] = (byte) 0;
- pos += 2;
- } else if (leftover == 3) {
- temp[pos] = (byte) 0;
- temp[pos + 1] = (byte) 3;
- pos += 5;
- }
-
- // TODO Here we ought to loop over participants, if we're doing SDES for
- // other participants.
-
- super.rawPkt = new byte[pos];
- itemCount = 1;
- // This looks wrong, but appears to be fine..
- System.arraycopy(temp, 0, super.rawPkt, 0, pos);
- writeHeaders();
- }
-
- /**
- * Debug purposes only
- */
- public void debugPrint() {
- System.out.println("RtcpPktSDES.debugPrint() ");
- if (participants != null) {
- for (int i = 0; i < participants.length; i++) {
- Participant part = participants[i];
- System.out.println(" part.ssrc: " + part.ssrc
- + " part.cname: " + part.cname + " part.loc: "
- + part.loc);
- }
- } else {
- System.out
- .println(" nothing to report (only valid for received packets)");
- }
- }
-}