diff -r f5a5d9237d69 -r e8d6255306f8 src/jlibrtp/RtcpPktSDES.java --- 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)"); - } - } -}