[Opalvoip-svn] SF.net SVN: opalvoip:[21856] opal/trunk/src/sip/sipcon.cxx
Brought to you by:
csoutheren,
rjongbloed
From: <rjo...@us...> - 2008-12-22 03:57:18
|
Revision: 21856 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=21856&view=rev Author: rjongbloed Date: 2008-12-22 03:57:16 +0000 (Mon, 22 Dec 2008) Log Message: ----------- Fixed using correct session type on receiving a re-INVITE that changes it, e.g. on fax receive. Modified Paths: -------------- opal/trunk/src/sip/sipcon.cxx Modified: opal/trunk/src/sip/sipcon.cxx =================================================================== --- opal/trunk/src/sip/sipcon.cxx 2008-12-22 03:48:13 UTC (rev 21855) +++ opal/trunk/src/sip/sipcon.cxx 2008-12-22 03:57:16 UTC (rev 21856) @@ -771,8 +771,8 @@ } OpalMediaType mediaType = incomingMedia->GetMediaType(); - OpalMediaTypeDefinition * defn = mediaType.GetDefinition(); - if (defn == NULL) { + OpalMediaTypeDefinition * mediaDefinition = mediaType.GetDefinition(); + if (mediaDefinition == NULL) { PTRACE(1, "SIP\tUnknown media type " << mediaType << " in session " << rtpSessionId); return false; } @@ -800,7 +800,7 @@ OpalTransportAddress mediaAddress = incomingMedia->GetTransportAddress(); bool remoteChanged = false; - OpalMediaSession * mediaSession = NULL; + OpalMediaSession * mediaSession; if (mediaAddress.IsEmpty()) { // Hold aka pause media, should only occur on a re-INVITE. @@ -808,6 +808,7 @@ if (rtpSession == NULL) return false; localAddress = OpalTransportAddress(rtpSession->GetLocalAddress(), rtpSession->GetLocalDataPort()); + mediaSession = m_rtpSessions.GetMediaSession(rtpSessionId); remoteChanged = true; } else { @@ -818,21 +819,7 @@ return PFalse; } - mediaSession = m_rtpSessions.GetMediaSession(rtpSessionId); - - if (!defn->UsesRTP()) { - - // create media session if required - if (mediaSession == NULL) { - mediaSession = mediaType.GetDefinition()->CreateMediaSession(*this, rtpSessionId); - if (mediaSession != NULL) - m_rtpSessions.AddMediaSession(mediaSession, mediaType); - } - if (mediaSession != NULL) - localAddress = mediaSession->GetLocalMediaAddress(); - } - else - { + if (mediaDefinition->UsesRTP()) { // Create the RTPSession if required RTP_UDP * rtpSession = OnUseRTPSession(rtpSessionId, mediaType, mediaAddress, localAddress); if (rtpSession == NULL) { @@ -854,10 +841,25 @@ } } } + mediaSession = m_rtpSessions.GetMediaSession(rtpSessionId); } - mediaSession = m_rtpSessions.GetMediaSession(rtpSessionId); + else { + mediaSession = mediaDefinition->CreateMediaSession(*this, rtpSessionId); + if (mediaSession == NULL) { + PTRACE(1, "SIP\tCannot create session for " << mediaType); + return false; + } + m_rtpSessions.AddMediaSession(mediaSession, mediaType); + localAddress = mediaSession->GetLocalMediaAddress(); + } } + if (!PAssertNULL(mediaSession)) + return false; + + // For fax we have to translate the media type + mediaSession->mediaType = mediaType; + SDPMediaDescription * localMedia = NULL; OpalMediaFormatList sdpFormats = incomingMedia->GetMediaFormats(); @@ -881,8 +883,6 @@ // When sending an answer SDP, remove media formats that we do not support. remoteFormatList += sdpFormats; - - // construct a new media session list if ((localMedia = mediaSession->CreateSDPMediaDescription(localAddress)) == NULL) { PTRACE(1, "SIP\tCould not create SDP media description for media type " << mediaType); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |