src/jlibrtp/RTCPReceiverThread.java
author Da Risk <darisk972@gmail.com>
Tue, 14 Apr 2009 16:56:20 +0200
changeset 105 c6e4728ac9f7
parent 13 e684f11070d5
permissions -rw-r--r--
Passage sous cupcake :) Peu de modification de code, il faut juste creer des fichier aidl pour les classes parcelables. Sinon les fichier de build.xml ont ete completement modifiés, j'ai remplacé par les nouveaux. (il doit y avoir un manque de precision dans le fichier build.properties)
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
}