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