src/jlibrtp/RTCPReceiverThread.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
import java.io.IOException;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    22
import java.net.DatagramPacket;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    23
import java.net.InetSocketAddress;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    24
import java.util.Enumeration;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    25
import java.util.Iterator;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    26
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    27
/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    28
 * This thread hangs on the RTCP socket and waits for new packets
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    29
 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    30
 * @author Arne Kepp
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    31
 *
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    32
 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    33
public class RTCPReceiverThread extends Thread {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    34
	/** Parent RTP Session */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    35
	private RTPSession rtpSession = null;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    36
	/** Parent RTCP Session */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    37
	private RTCPSession rtcpSession = null;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    38
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    39
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    40
	 * Constructor for new thread
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    41
	 * @param rtcpSession parent RTCP session
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    42
	 * @param rtpSession parent RTP session
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    43
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    44
	RTCPReceiverThread(RTCPSession rtcpSession, RTPSession rtpSession) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    45
		this.rtpSession = rtpSession;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    46
		this.rtcpSession = rtcpSession;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    47
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    48
		if(RTPSession.rtpDebugLevel > 1) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    49
			System.out.println("<-> RTCPReceiverThread created");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    50
		} 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    51
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    52
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    53
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    54
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    55
	 * Find out whether a participant with this SSRC is known.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    56
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    57
	 * If the user is unknown, and the system is operating in unicast mode,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    58
	 * try to match the ip-address of the sender to the ip address of a
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    59
	 * previously unmatched target
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    60
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    61
	 * @param ssrc the SSRC of the participant
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    62
	 * @param packet the packet that notified us
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    63
	 * @return the relevant participant, possibly newly created
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    64
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    65
	private Participant findParticipant(long ssrc, DatagramPacket packet) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    66
		Participant p = rtpSession.partDb.getParticipant(ssrc);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    67
		if(p == null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    68
			Enumeration<Participant> enu = rtpSession.partDb.getParticipants();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    69
			while(enu.hasMoreElements()) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    70
				Participant tmp = (Participant) enu.nextElement();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    71
				if(tmp.ssrc < 0 && 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    72
						(tmp.rtcpAddress.getAddress().equals(packet.getAddress())
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    73
						|| tmp.rtpAddress.getAddress().equals(packet.getAddress()))) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    74
					
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    75
					// Best guess
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    76
					System.out.println("RTCPReceiverThread: Got an unexpected packet from SSRC:" 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    77
							+ ssrc  + " @" + packet.getAddress().toString() + ", WAS able to match it." );
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    78
					
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    79
					tmp.ssrc = ssrc;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    80
					return tmp;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    81
				}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    82
			}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    83
			// Create an unknown sender
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    84
			System.out.println("RTCPReceiverThread: Got an unexpected packet from SSRC:" 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    85
					+ ssrc  + " @" + packet.getAddress().toString() + ", was NOT able to match it." );
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    86
			p = new Participant((InetSocketAddress) null, (InetSocketAddress) packet.getSocketAddress(), ssrc);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    87
			rtpSession.partDb.addParticipant(2,p);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    88
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    89
		return p;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    90
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    91
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    92
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    93
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    94
	 * Parse a received UDP packet
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    95
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    96
	 * Perform the header checks and extract the RTCP packets in it
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    97
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    98
	 * @param packet the packet to be parsed
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    99
	 * @return -1 if there was a problem, 0 if successfully parsed
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   100
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   101
	private int parsePacket(DatagramPacket packet) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   102
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   103
		if(packet.getLength() % 4 != 0) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   104
			if(RTPSession.rtcpDebugLevel > 2) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   105
				System.out.println("RTCPReceiverThread.parsePacket got packet that had length " + packet.getLength());
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   106
			}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   107
			return -1;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   108
		} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   109
			byte[] rawPkt = packet.getData();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   110
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   111
			// Parse the received compound RTCP (?) packet
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   112
			CompRtcpPkt compPkt = new CompRtcpPkt(rawPkt, packet.getLength(), 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   113
					(InetSocketAddress) packet.getSocketAddress(), rtpSession);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   114
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   115
			if(this.rtpSession.debugAppIntf != null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   116
				String intfStr; 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   117
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   118
				if(rtpSession.mcSession) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   119
					intfStr = this.rtcpSession.rtcpMCSock.getLocalSocketAddress().toString();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   120
				} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   121
					intfStr = this.rtpSession.rtpSock.getLocalSocketAddress().toString();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   122
				}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   123
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   124
				if( compPkt.problem == 0) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   125
					String str = new String("Received compound RTCP packet of size " + packet.getLength() + 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   126
							" from " + packet.getSocketAddress().toString() + " via " + intfStr
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   127
							+ " containing " + compPkt.rtcpPkts.size() + " packets" );
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   128
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   129
					this.rtpSession.debugAppIntf.packetReceived(1, 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   130
							(InetSocketAddress) packet.getSocketAddress(), str);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   131
				} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   132
					String str = new String("Received invalid RTCP packet of size " + packet.getLength() + 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   133
							" from " + packet.getSocketAddress().toString() + " via " +  intfStr
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   134
							+ ": " + this.debugErrorString(compPkt.problem) );
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   135
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   136
					this.rtpSession.debugAppIntf.packetReceived(-2, 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   137
							(InetSocketAddress) packet.getSocketAddress(), str);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   138
				}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   139
			}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   140
			
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   141
			if(RTPSession.rtcpDebugLevel > 5) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   142
				Iterator<RtcpPkt> iter = compPkt.rtcpPkts.iterator();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   143
				String str = " ";
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   144
				while(iter.hasNext()) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   145
					RtcpPkt aPkt = iter.next();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   146
					str += (aPkt.getClass().toString() + ":"+aPkt.itemCount+ ", ");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   147
				}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   148
				System.out.println("<-> RTCPReceiverThread.parsePacket() from " + packet.getSocketAddress().toString() + str);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   149
			}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   150
			
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   151
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   152
			//Loop over the information
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   153
			Iterator iter = compPkt.rtcpPkts.iterator();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   154
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   155
			long curTime = System.currentTimeMillis();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   156
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   157
			while(iter.hasNext()) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   158
				RtcpPkt aPkt = (RtcpPkt) iter.next();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   159
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   160
				// Our own packets should already have been filtered out.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   161
				if(aPkt.ssrc == rtpSession.ssrc) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   162
					System.out.println("RTCPReceiverThread() received RTCP packet" 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   163
							+ " with conflicting SSRC from " + packet.getSocketAddress().toString());
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   164
					rtpSession.resolveSsrcConflict();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   165
					return -1;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   166
				}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   167
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   168
				/**        Receiver Reports        **/
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   169
				if(	aPkt.getClass() == RtcpPktRR.class) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   170
					RtcpPktRR rrPkt = (RtcpPktRR) aPkt;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   171
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   172
					Participant p = findParticipant(rrPkt.ssrc, packet);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   173
					p.lastRtcpPkt = curTime;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   174
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   175
					if(rtpSession.rtcpAppIntf != null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   176
						rtpSession.rtcpAppIntf.RRPktReceived(rrPkt.ssrc, rrPkt.reporteeSsrc, 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   177
								rrPkt.lossFraction, rrPkt.lostPktCount, rrPkt.extHighSeqRecv,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   178
								rrPkt.interArvJitter, rrPkt.timeStampLSR, rrPkt.delaySR);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   179
					}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   180
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   181
					/**        Sender Reports        **/
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   182
				} else if(aPkt.getClass() == RtcpPktSR.class) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   183
					RtcpPktSR srPkt = (RtcpPktSR) aPkt;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   184
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   185
					Participant p = findParticipant(srPkt.ssrc, packet);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   186
					p.lastRtcpPkt = curTime;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   187
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   188
					if(p != null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   189
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   190
						if(p.ntpGradient < 0 && p.lastNtpTs1 > -1) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   191
							//Calculate gradient NTP vs RTP
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   192
							long newTime = StaticProcs.undoNtpMess(srPkt.ntpTs1, srPkt.ntpTs2);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   193
							p.ntpGradient = ((double) (newTime - p.ntpOffset))/((double) srPkt.rtpTs - p.lastSRRtpTs);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   194
							if(RTPSession.rtcpDebugLevel > 4) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   195
								System.out.println("RTCPReceiverThread calculated NTP vs RTP gradient: " + Double.toString(p.ntpGradient));
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   196
							}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   197
						} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   198
							// Calculate sum of ntpTs1 and ntpTs2 in milliseconds
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   199
							p.ntpOffset = StaticProcs.undoNtpMess(srPkt.ntpTs1, srPkt.ntpTs2);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   200
							p.lastNtpTs1 = srPkt.ntpTs1;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   201
							p.lastNtpTs2 = srPkt.ntpTs2;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   202
							p.lastSRRtpTs = srPkt.rtpTs;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   203
						}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   204
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   205
						// For the next RR
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   206
						p.timeReceivedLSR = curTime;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   207
						p.setTimeStampLSR(srPkt.ntpTs1,srPkt.ntpTs2);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   208
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   209
					}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   210
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   211
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   212
					if(rtpSession.rtcpAppIntf != null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   213
						if(srPkt.rReports != null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   214
							rtpSession.rtcpAppIntf.SRPktReceived(srPkt.ssrc, srPkt.ntpTs1, srPkt.ntpTs2, 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   215
									srPkt.rtpTs, srPkt.sendersPktCount, srPkt.sendersPktCount,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   216
									srPkt.rReports.reporteeSsrc, srPkt.rReports.lossFraction, srPkt.rReports.lostPktCount,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   217
									srPkt.rReports.extHighSeqRecv, srPkt.rReports.interArvJitter, srPkt.rReports.timeStampLSR,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   218
									srPkt.rReports.delaySR);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   219
						} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   220
							rtpSession.rtcpAppIntf.SRPktReceived(srPkt.ssrc, srPkt.ntpTs1, srPkt.ntpTs2, 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   221
									srPkt.rtpTs, srPkt.sendersPktCount, srPkt.sendersPktCount,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   222
									null, null, null,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   223
									null, null, null,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   224
									null);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   225
						}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   226
					}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   227
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   228
					/**        Source Descriptions       **/
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   229
				} else if(aPkt.getClass() == RtcpPktSDES.class) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   230
					RtcpPktSDES sdesPkt = (RtcpPktSDES) aPkt;				
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   231
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   232
					// The the participant database is updated
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   233
					// when the SDES packet is reconstructed by CompRtcpPkt	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   234
					if(rtpSession.rtcpAppIntf != null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   235
						rtpSession.rtcpAppIntf.SDESPktReceived(sdesPkt.participants);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   236
					}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   237
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   238
					/**        Bye Packets       **/
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   239
				} else if(aPkt.getClass() == RtcpPktBYE.class) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   240
					RtcpPktBYE byePkt = (RtcpPktBYE) aPkt;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   241
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   242
					long time = System.currentTimeMillis();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   243
					Participant[] partArray = new Participant[byePkt.ssrcArray.length];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   244
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   245
					for(int i=0; i<byePkt.ssrcArray.length; i++) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   246
						partArray[i] = rtpSession.partDb.getParticipant(byePkt.ssrcArray[i]);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   247
						if(partArray[i] != null)
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   248
							partArray[i].timestampBYE = time;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   249
					}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   250
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   251
					if(rtpSession.rtcpAppIntf != null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   252
						rtpSession.rtcpAppIntf.BYEPktReceived(partArray, new String(byePkt.reason));
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   253
					}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   254
					
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   255
					/**        Application specific Packets       **/
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   256
				} else if(aPkt.getClass() == RtcpPktAPP.class) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   257
					RtcpPktAPP appPkt = (RtcpPktAPP) aPkt;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   258
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   259
					Participant part = findParticipant(appPkt.ssrc, packet);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   260
					
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   261
					if(rtpSession.rtcpAppIntf != null) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   262
						rtpSession.rtcpAppIntf.APPPktReceived(part, appPkt.itemCount, appPkt.pktName, appPkt.pktData);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   263
					}
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
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   267
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   268
			}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   269
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   270
		return 0;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   271
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   272
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   273
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   274
	 * Returns a legible message when an error occurs
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   275
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   276
	 * @param errorCode the internal error code, commonly negative of packet type
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   277
	 * @return a string that is hopefully somewhat informative
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   278
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   279
	private String debugErrorString(int errorCode) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   280
		String aStr = "";
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   281
		switch(errorCode) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   282
			case -1: aStr = "The first packet was not of type SR or RR."; break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   283
			case -2: aStr = "The padding bit was set for the first packet."; break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   284
			case -200: aStr = " Error parsing Sender Report packet."; break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   285
			case -201: aStr = " Error parsing Receiver Report packet."; break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   286
			case -202: aStr = " Error parsing SDES packet"; break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   287
			case -203: aStr = " Error parsing BYE packet."; break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   288
			case -204: aStr = " Error parsing Application specific packet."; break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   289
			case -205: aStr = " Error parsing RTP Feedback packet."; break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   290
			case -206: aStr = " Error parsing Payload-Specific Feedback packet."; break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   291
		default:
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   292
			aStr = "Unknown error code " + errorCode + ".";
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   293
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   294
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   295
		return aStr;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   296
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   297
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   298
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   299
	 * Start the RTCP receiver thread.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   300
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   301
	 * It will
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   302
	 * 1) run when it receives a packet 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   303
	 * 2) parse the packet
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   304
	 * 3) call any relevant callback functions, update database
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   305
	 * 4) block until the next one arrives.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   306
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   307
	public void run() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   308
		if(RTPSession.rtcpDebugLevel > 1) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   309
			if(rtpSession.mcSession) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   310
				System.out.println("-> RTCPReceiverThread.run() starting on MC " + rtcpSession.rtcpMCSock.getLocalPort() );
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   311
			} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   312
				System.out.println("-> RTCPReceiverThread.run() starting on " + rtcpSession.rtcpSock.getLocalPort() );
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   313
			}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   314
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   315
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   316
		while(!rtpSession.endSession) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   317
			
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   318
			if(RTPSession.rtcpDebugLevel > 4) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   319
				if(rtpSession.mcSession) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   320
					System.out.println("-> RTCPReceiverThread.run() waiting for packet on MC " + rtcpSession.rtcpMCSock.getLocalPort() );
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   321
				} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   322
					System.out.println("-> RTCPReceiverThread.run() waiting for packet on " + rtcpSession.rtcpSock.getLocalPort() );
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   323
				}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   324
			}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   325
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   326
			// Prepare a packet
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   327
			byte[] rawPkt = new byte[1500];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   328
			DatagramPacket packet = new DatagramPacket(rawPkt, rawPkt.length);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   329
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   330
			// Wait for it to arrive
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   331
			if(! rtpSession.mcSession) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   332
				//Unicast
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   333
				try {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   334
					rtcpSession.rtcpSock.receive(packet);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   335
				} catch (IOException e) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   336
					if(!rtpSession.endSession) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   337
						e.printStackTrace();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   338
					} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   339
						continue;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   340
					}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   341
				}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   342
			} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   343
				//Multicast
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   344
				try {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   345
					rtcpSession.rtcpMCSock.receive(packet);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   346
				} catch (IOException e) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   347
					if(!rtpSession.endSession) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   348
						e.printStackTrace();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   349
					} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   350
						continue;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   351
					}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   352
				}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   353
			}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   354
			
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   355
			// Check whether this is one of our own
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   356
			if( (rtpSession.mcSession && ! packet.getSocketAddress().equals(rtcpSession.rtcpMCSock) )
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   357
					|| ! packet.getSocketAddress().equals(rtcpSession.rtcpSock) ) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   358
				//System.out.println("Packet received from: " + packet.getSocketAddress().toString());
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   359
				parsePacket(packet);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   360
				//rtpSession.partDb.debugPrint();
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
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   364
		if(RTPSession.rtcpDebugLevel > 1) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   365
			System.out.println("<-> RTCPReceiverThread terminating");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   366
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   367
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   368
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   369
}