r2747 - in trunk/libminisip: include/libminisip/mediahandler source/mediahandler

mikma at minisip.org mikma at minisip.org
Thu Sep 7 13:03:51 CEST 2006


Author: mikma
Date: 2006-09-07 13:03:50 +0200 (Thu, 07 Sep 2006)
New Revision: 2747

Modified:
   trunk/libminisip/include/libminisip/mediahandler/MediaStream.h
   trunk/libminisip/source/mediahandler/CallRecorder.cxx
   trunk/libminisip/source/mediahandler/MediaHandler.cxx
   trunk/libminisip/source/mediahandler/MediaStream.cxx
Log:
Add IPv6 support to MediaStreams.


Modified: trunk/libminisip/include/libminisip/mediahandler/MediaStream.h
===================================================================
--- trunk/libminisip/include/libminisip/mediahandler/MediaStream.h	2006-09-07 10:46:11 UTC (rev 2746)
+++ trunk/libminisip/include/libminisip/mediahandler/MediaStream.h	2006-09-07 11:03:50 UTC (rev 2747)
@@ -195,7 +195,7 @@
 		 */
 		MediaStreamReceiver( MRef<Media *> media, 
 				MRef<RtpReceiver *> rtpReceiver, 
-				MRef<IpProvider *> ipProvider );
+				MRef<RtpReceiver *> rtp6Receiver = NULL );
 
 #ifdef DEBUG_OUTPUT
 		virtual std::string getDebugString();
@@ -223,6 +223,14 @@
 		virtual uint16_t getPort();
 
 		/**
+		 * Used to query which port should be advertised as
+		 * the contact port in the session description.
+		 * @param addrType IP4 or IP6
+		 * @returns the port to use
+		 */
+		uint16_t getPort( const std::string &addrType );
+
+		/**
 		 * Handles incoming RTP packets, decrypts them
 		 * and send them to the corresponding media for
 		 * playback.
@@ -276,8 +284,8 @@
 	protected:
 		std::list<MRef<Codec *> > codecList;
 		MRef<RtpReceiver *> rtpReceiver;
+		MRef<RtpReceiver *> rtp6Receiver;
 		uint32_t id;
-		MRef<IpProvider *> ipProvider;
 		uint16_t externalPort;
 
 		void gotSsrc( uint32_t ssrc );
@@ -306,7 +314,8 @@
 		 * is created
 		 */
 		MediaStreamSender( MRef<Media *> media, 
-				   MRef<UDPSocket *> senderSock=NULL );
+				   MRef<UDPSocket *> senderSock=NULL,
+				   MRef<UDPSocket *> sender6Sock=NULL );
 
 #ifdef DEBUG_OUTPUT
 		virtual std::string getDebugString();
@@ -459,6 +468,7 @@
 	private:
 		uint32_t ssrc;
 		MRef<UDPSocket *> senderSock;
+		MRef<UDPSocket *> sender6Sock;
 		uint16_t remotePort;
 		uint16_t seqNo;
 		uint32_t lastTs;

Modified: trunk/libminisip/source/mediahandler/CallRecorder.cxx
===================================================================
--- trunk/libminisip/source/mediahandler/CallRecorder.cxx	2006-09-07 10:46:11 UTC (rev 2746)
+++ trunk/libminisip/source/mediahandler/CallRecorder.cxx	2006-09-07 11:03:50 UTC (rev 2747)
@@ -41,7 +41,7 @@
 CallRecorder::CallRecorder(  MRef<AudioMedia *> aMedia, 
 				MRef<RtpReceiver *> rtpReceiver,
 				MRef<IpProvider *> ipProvider ):
-		MediaStreamReceiver( (Media *)*aMedia, rtpReceiver, ipProvider ),
+		MediaStreamReceiver( (Media *)*aMedia, rtpReceiver ),
 		fileDev( NULL ),
 		audioMedia( aMedia) {
 	static int count = 0;

Modified: trunk/libminisip/source/mediahandler/MediaHandler.cxx
===================================================================
--- trunk/libminisip/source/mediahandler/MediaHandler.cxx	2006-09-07 10:46:11 UTC (rev 2746)
+++ trunk/libminisip/source/mediahandler/MediaHandler.cxx	2006-09-07 11:03:50 UTC (rev 2747)
@@ -126,7 +126,7 @@
 
 		if( media->receive ){
 			rtpReceiver = new RtpReceiver( ipProvider );
-			rStream = new MediaStreamReceiver( media, rtpReceiver, ipProvider );
+			rStream = new MediaStreamReceiver( media, rtpReceiver );
 			session->addMediaStreamReceiver( rStream );
 			if( (*i) == this->audioMedia ) {
 				CallRecorder * cr;

Modified: trunk/libminisip/source/mediahandler/MediaStream.cxx
===================================================================
--- trunk/libminisip/source/mediahandler/MediaStream.cxx	2006-09-07 10:46:11 UTC (rev 2746)
+++ trunk/libminisip/source/mediahandler/MediaStream.cxx	2006-09-07 11:03:50 UTC (rev 2747)
@@ -264,10 +264,10 @@
 #endif
 
 MediaStreamReceiver::MediaStreamReceiver( MRef<Media *> media,
-		MRef<RtpReceiver *> rtpReceiver, MRef<IpProvider *> ipProvider ):
+		MRef<RtpReceiver *> rtpReceiver, MRef<RtpReceiver *> rtp6Recv ):
 			MediaStream( media ),
 			rtpReceiver( rtpReceiver ),
-			ipProvider( ipProvider ){
+			rtp6Receiver( rtp6Recv ){
 	id = rand();
 	externalPort = 0;
 	running = false;
@@ -280,14 +280,20 @@
 
 void MediaStreamReceiver::start(){
 	if( !running ){
-		rtpReceiver->registerMediaStream( this );
+		if( rtpReceiver )
+			rtpReceiver->registerMediaStream( this );
+		if( rtp6Receiver )
+			rtp6Receiver->registerMediaStream( this );
 		running = true;
 	}
 }
 
 void MediaStreamReceiver::stop(){
 	list<uint32_t>::iterator i;
-	rtpReceiver->unregisterMediaStream( this );
+	if( rtpReceiver )
+		rtpReceiver->unregisterMediaStream( this );
+	if( rtp6Receiver )
+		rtp6Receiver->unregisterMediaStream( this );
 
 	ssrcListLock.lock();
 	for( i = ssrcList.begin(); i != ssrcList.end(); i++ ){
@@ -300,7 +306,7 @@
 }
 
 uint16_t MediaStreamReceiver::getPort(){
-	return rtpReceiver->getPort();
+	return rtpReceiver ? rtpReceiver->getPort() : ( rtp6Receiver ? rtp6Receiver->getPort() : 0 );
 }
 
 #ifdef ZRTP_SUPPORT
@@ -401,7 +407,17 @@
 	return codecList;
 }
 
-MediaStreamSender::MediaStreamSender( MRef<Media *> media, MRef<UDPSocket *> senderSocket ):
+
+uint16_t MediaStreamReceiver::getPort( const string &addrType ){
+	if( addrType == "IP4" && rtpReceiver )
+		return rtpReceiver->getPort();
+	else if( addrType == "IP6" && rtp6Receiver )
+		return rtp6Receiver->getPort();
+	return 0;
+}
+
+
+MediaStreamSender::MediaStreamSender( MRef<Media *> media, MRef<UDPSocket *> senderSocket, MRef<UDPSocket *> sender6Socket ):
 	MediaStream( media ){
 	selectedCodec = NULL;
 	remotePort = 0;
@@ -418,6 +434,8 @@
 		senderSock = new UDPSocket;
 		senderSock->setLowDelay();
 	}
+
+	this->sender6Sock = sender6Socket;
 }
 
 void MediaStreamSender::start(){
@@ -532,7 +550,11 @@
 
 	packet->protect( getCryptoContext( ssrc, seqNo - 1 ) );
 
-	packet->sendTo( **senderSock, **remoteAddress, remotePort );
+	if( remoteAddress->getAddressFamily() == AF_INET && senderSock )
+		packet->sendTo( **senderSock, **remoteAddress, remotePort );
+	else if( remoteAddress->getAddressFamily() == AF_INET6 && sender6Sock )
+		packet->sendTo( **sender6Sock, **remoteAddress, remotePort );
+		
 	delete packet;
 	senderLock.unlock();
 
@@ -571,7 +593,7 @@
 string MediaStreamReceiver::getDebugString() {
 	string ret;
 	ret = getMemObjectType() + " this=" + itoa(reinterpret_cast<int64_t>(this)) +
-		": listening port=" + itoa(rtpReceiver->getPort());
+		": listening port=" + itoa(getPort());
 	for( std::list<uint32_t>::iterator it = ssrcList.begin();
 				it != ssrcList.end();
 				it++) {



More information about the Minisip-devel mailing list