Thread: [Opalvoip-svn] SF.net SVN: opalvoip:[20586] opal/trunk/src/sip/sdp.cxx
Brought to you by:
csoutheren,
rjongbloed
From: <rjo...@us...> - 2008-07-17 00:54:06
|
Revision: 20586 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=20586&view=rev Author: rjongbloed Date: 2008-07-17 00:54:14 +0000 (Thu, 17 Jul 2008) Log Message: ----------- Another attempt to fix problem with brain dead switch that sends illegal port of 65535 as well as the illegal address 255.255.255.255 Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2008-07-16 21:03:52 UTC (rev 20585) +++ opal/trunk/src/sip/sdp.cxx 2008-07-17 00:54:14 UTC (rev 20586) @@ -562,10 +562,9 @@ break; case 65535 : - PTRACE(2, "SDP\tIgnoring media session " << mediaType << " due to illegal port=65535"); - port = 0; - direction = Inactive; - break; + PTRACE(2, "SDP\tIllegal port=65535 in media session " << mediaType << ", trying to continue."); + port = 65534; + // Do next case default : PTRACE(4, "SDP\tMedia session port=" << port); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cso...@us...> - 2008-09-02 02:18:40
|
Revision: 20813 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=20813&view=rev Author: csoutheren Date: 2008-09-02 02:18:51 +0000 (Tue, 02 Sep 2008) Log Message: ----------- Set RawFMTP media option Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2008-09-01 20:29:44 UTC (rev 20812) +++ opal/trunk/src/sip/sdp.cxx 2008-09-02 02:18:51 UTC (rev 20813) @@ -213,7 +213,7 @@ if (GetMediaFormat().IsEmpty()) // Use GetMediaFormat() to force creation of member return; - mediaFormat.SetOptionString("RawFMTP", str); // Save the 'fmtp=' line so it is available at the application level. + mediaFormat.AddOption(new OpalMediaOptionString("RawFMTP", false, str), PTrue); // Save the 'fmtp=' line so it is available at the application level. // See if standard format OPT=VAL;OPT=VAL if (str.FindOneOf(";=") == P_MAX_INDEX) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cso...@us...> - 2008-09-03 01:14:27
|
Revision: 20825 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=20825&view=rev Author: csoutheren Date: 2008-09-03 01:14:36 +0000 (Wed, 03 Sep 2008) Log Message: ----------- Add more "intelligent" handling of the hex strings used for some SDP fmtp parameters, as some vendors insert spaces instead of 0 (i.e. they use %2x instead of %02x) Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2008-09-02 16:32:40 UTC (rev 20824) +++ opal/trunk/src/sip/sdp.cxx 2008-09-03 01:14:36 UTC (rev 20825) @@ -189,7 +189,6 @@ parameters = PString(PString::Unsigned, fmt.GetOptionInteger(OpalAudioFormat::ChannelsOption())); } - void SDPMediaFormat::SetFMTP(const PString & str) { if (str.IsEmpty()) @@ -255,8 +254,14 @@ } if (option != NULL) { PString value = str(sep2pos+1, sep1next-1); - if (value.Trim().IsEmpty()) - value = "1"; // Assume it is a boolean + if (dynamic_cast< OpalMediaOptionOctets * >(option) != NULL) { + if (str.GetLength() % 2 != 0) + value = value.Trim(); + } else { + value = value.Trim(); + if (value.IsEmpty()) + value = "1"; // Assume it is a boolean + } if (!option->FromString(value)) { PTRACE(2, "SDP\tCould not set FMTP parameter \"" << key << "\" to value \"" << value << '"'); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cso...@us...> - 2008-10-14 04:06:11
|
Revision: 21320 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=21320&view=rev Author: csoutheren Date: 2008-10-14 04:06:08 +0000 (Tue, 14 Oct 2008) Log Message: ----------- Deal with endpoints that use spaces and ; as seperators in the same FMTP string. Sheesh! Backport from Wolfbranch1 Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2008-10-14 03:59:29 UTC (rev 21319) +++ opal/trunk/src/sip/sdp.cxx 2008-10-14 04:06:08 UTC (rev 21320) @@ -229,10 +229,12 @@ // Parse the string for option names and values OPT=VAL;OPT=VAL PINDEX sep1prev = 0; do { + // find the next separator (' ' or ';') PINDEX sep1next = str.Find(sep, sep1prev); if (sep1next == P_MAX_INDEX) sep1next--; // Implicit assumption string is not a couple of gigabytes long ... + // find the next '='. If past the next separator, then ignore it PINDEX sep2pos = str.Find('=', sep1prev); if (sep2pos > sep1next) sep2pos = sep1next; @@ -258,6 +260,12 @@ if (str.GetLength() % 2 != 0) value = value.Trim(); } else { + // for non-octet string parameters, check for mixed separators + PINDEX brokenSep = str.Find(' ', sep2pos); + if (brokenSep < sep1next) { + sep1next = brokenSep; + value = str(sep2pos+1, sep1next-1); + } value = value.Trim(); if (value.IsEmpty()) value = "1"; // Assume it is a boolean This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yki...@us...> - 2008-11-23 22:16:23
|
Revision: 21604 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=21604&view=rev Author: ykiryanov Date: 2008-11-23 22:16:19 +0000 (Sun, 23 Nov 2008) Log Message: ----------- added checking for brackets if sdp media address is ipv6 Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2008-11-23 22:14:57 UTC (rev 21603) +++ opal/trunk/src/sip/sdp.cxx 2008-11-23 22:16:19 UTC (rev 21604) @@ -143,7 +143,7 @@ PIPSocket::Address ip; if (!address.IsEmpty() && address.GetIpAddress(ip) && ip.IsValid()) - str << "IN IP" << ip.GetVersion() << ' ' << ip; + str << "IN IP" << ip.GetVersion() << ' ' << ip.AsString(PTrue); else str << "IN IP4 0.0.0.0"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2009-03-04 01:57:57
|
Revision: 22146 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=22146&view=rev Author: rjongbloed Date: 2009-03-04 01:52:40 +0000 (Wed, 04 Mar 2009) Log Message: ----------- Fixed incorrect detection of remote SIP client putting local side on hold, thanks hongxing. Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2009-03-03 21:12:08 UTC (rev 22145) +++ opal/trunk/src/sip/sdp.cxx 2009-03-04 01:52:40 UTC (rev 22146) @@ -1305,7 +1305,7 @@ PINDEX i; for (i = 0; i < mediaDescriptions.GetSize(); i++) { SDPMediaDescription::Direction dir = mediaDescriptions[i].GetDirection(); - if ((dir == SDPMediaDescription::Undefined) || ((dir & SDPMediaDescription::SendOnly) != 0)) + if ((dir == SDPMediaDescription::Undefined) || ((dir & SDPMediaDescription::RecvOnly) != 0)) return false; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2009-03-31 04:53:48
|
Revision: 22344 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=22344&view=rev Author: rjongbloed Date: 2009-03-31 04:53:44 +0000 (Tue, 31 Mar 2009) Log Message: ----------- Fixed issue with GSM-AMR plug in getting bad audio. This is due to it only being able to do one frame/packet, because of the weird way RFC3267 packetises multiple frames. One day someone may implement it. However, right now we want a max frame per packet to be honoured on SIP calls, works fine for H.323. This required: * Restoring processing of ptime/maxptime received in SDP. In process, fixed rounding error, e.g. if got 30ms, GSM should be 1fpp, not 2. * Restored providing maxptime on outgoing SDP, with extra care about things like codecs with different frame sizes. Now we wait for interop issues (again) Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2009-03-31 04:48:48 UTC (rev 22343) +++ opal/trunk/src/sip/sdp.cxx 2009-03-31 04:53:44 UTC (rev 22344) @@ -367,8 +367,9 @@ void SDPMediaFormat::SetPacketTime(const PString & optionName, unsigned ptime) { if (mediaFormat.HasOption(optionName)) { - unsigned frameTime = mediaFormat.GetFrameTime(); - unsigned newCount = (ptime*mediaFormat.GetTimeUnits()+frameTime-1)/frameTime; + unsigned newCount = (ptime*mediaFormat.GetTimeUnits())/mediaFormat.GetFrameTime(); + if (newCount < 1) + newCount = 1; mediaFormat.SetOptionInteger(optionName, newCount); PTRACE(4, "SDP\tMedia format \"" << mediaFormat << "\" option \"" << optionName << "\" set to " << newCount << " packets from " << ptime << " milliseconds"); @@ -899,42 +900,57 @@ if (!SDPRTPAVPMediaDescription::PrintOn(str, connectString)) return false; -#ifdef HAVE_PTIME - // Fill in the ptime as maximum tx packets of all media formats - // and maxptime as minimum rx packets of all media formats - unsigned ptime = 0; + /* The ptime parameter is a recommendation to the remote that we want them + to send that number of milliseconds on audio in each RTP packet. OPAL + does not have an equivalent parameter anywhere, so we do not provide it + on outgoing SDP. We do try to honour it on incoing SDP, however. + + The maxptime parameter can be represented by the RxFramesPerPacketOption, + so we go through all the codecs offered and calculate a maxptime based on + the smallest maximum rx packets of the codecs. Allowance must be made for + maxptime to be at least big enough for 1 frame per packet for the largest + frame size of those codecs. + + In practice this generally means if we mix GSM and G.723.1 then the + maxptime cannot be smaller than 30ms even if GSM wants one frame per + packet. That should still work as teh remote cannot send 2fpp as it would + exceed the 30ms. + + However, certain combinations cannot be represented, e.g. if you want 2fpp + of G.729 (20ms) and 1fpp of G.723.1 (30ms) then the G.729 codec COULD + receive 3fpp. This is really a failing in SIP/SDP and the techniques for + woking around the limitation are for too complicated to be worth doing for + what should be rare cases. + */ + + unsigned largestFrameTime = 0; unsigned maxptime = UINT_MAX; // output attributes for each payload type - for (format = formats.begin(); format != formats.end(); ++format) { - const OpalMediaFormat & mediaFormat = formats[i].GetMediaFormat(); - if (mediaFormat.HasOption(OpalAudioFormat::TxFramesPerPacketOption())) { - unsigned ptime1 = txFrames*mediaFormat.GetFrameTime()/mediaFormat.GetTimeUnits(); - if (ptime < ptime1) - ptime = ptime1; - } + for (SDPMediaFormatList::const_iterator format = formats.begin(); format != formats.end(); ++format) { + const OpalMediaFormat & mediaFormat = format->GetMediaFormat(); if (mediaFormat.HasOption(OpalAudioFormat::RxFramesPerPacketOption())) { - unsigned maxptime1 = mediaFormat.GetOptionInteger(OpalAudioFormat::RxFramesPerPacketOption())*mediaFormat.GetFrameTime()/mediaFormat.GetTimeUnits(); + unsigned frameTime = mediaFormat.GetFrameTime()/mediaFormat.GetTimeUnits(); + if (largestFrameTime < frameTime) + largestFrameTime = frameTime; + + unsigned maxptime1 = mediaFormat.GetOptionInteger(OpalAudioFormat::RxFramesPerPacketOption())*frameTime; if (maxptime > maxptime1) maxptime = maxptime1; } } - // don't output ptime parameters, as some Cisco endpoints barf on it - // and it's not very well-defined anyway - //if (ptime > 0) - // str << "a=ptime:" << ptime << "\r\n"; - - if (maxptime < UINT_MAX) + if (maxptime < UINT_MAX) { + if (maxptime < largestFrameTime) + maxptime = largestFrameTime; str << "a=maxptime:" << maxptime << "\r\n"; -#endif // HAVE_PTIME + } return true; } void SDPAudioMediaDescription::SetAttribute(const PString & attr, const PString & value) { -#ifdef HAVE_PTIME if (attr *= "ptime") { SetPacketTime(OpalAudioFormat::TxFramesPerPacketOption(), value); return; @@ -944,7 +960,6 @@ SetPacketTime(OpalAudioFormat::RxFramesPerPacketOption(), value); return; } -#endif // HAVE_PTIME return SDPRTPAVPMediaDescription::SetAttribute(attr, value); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2009-09-07 11:56:26
|
Revision: 23357 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=23357&view=rev Author: rjongbloed Date: 2009-09-07 11:56:19 +0000 (Mon, 07 Sep 2009) Log Message: ----------- Changed so does not put both global and media specific connection addresses in SDP if they are the same. Due to a mindbogglingly stupid system that doesn't work when you do! Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2009-09-07 10:46:02 UTC (rev 23356) +++ opal/trunk/src/sip/sdp.cxx 2009-09-07 11:56:19 UTC (rev 23357) @@ -728,8 +728,6 @@ PIPSocket::Address commonIP, transportIP; if (transportAddress.GetIpAddress(transportIP) && commonAddr.GetIpAddress(commonIP) && commonIP != transportIP) connectString = GetConnectAddressString(transportAddress); - if (connectString.IsEmpty()) - connectString = GetConnectAddressString(transportAddress); PrintOn(strm, connectString); } @@ -1181,30 +1179,6 @@ void SDPSessionDescription::PrintOn(ostream & str) const { - OpalTransportAddress connectionAddress(defaultConnectAddress); - - // see common connect address is needed - { - OpalTransportAddress descrAddress; - PINDEX matched = 0; - PINDEX descrMatched = 0; - PINDEX i; - for (i = 0; i < mediaDescriptions.GetSize(); i++) { - if (i == 0) - descrAddress = mediaDescriptions[i].GetTransportAddress(); - if (mediaDescriptions[i].GetTransportAddress() == connectionAddress) - ++matched; - if (mediaDescriptions[i].GetTransportAddress() == descrAddress) - ++descrMatched; - } - if (connectionAddress != descrAddress) { - if ((descrMatched > matched)) - connectionAddress = descrAddress; - else - connectionAddress.MakeEmpty(); - } - } - /* encode mandatory session information, note the order is important according to RFC! Must be vosiuepcbzkatrm and within the m it is icbka */ str << "v=" << protocolVersion << "\r\n" @@ -1215,8 +1189,8 @@ << "\r\n" "s=" << sessionName << "\r\n"; - if (!connectionAddress.IsEmpty()) - str << "c=" << GetConnectAddressString(connectionAddress) << "\r\n"; + if (!defaultConnectAddress.IsEmpty()) + str << "c=" << GetConnectAddressString(defaultConnectAddress) << "\r\n"; str << bandwidth << "t=" << "0 0" << "\r\n"; @@ -1241,7 +1215,7 @@ // encode media session information for (PINDEX i = 0; i < mediaDescriptions.GetSize(); i++) { if (mediaDescriptions[i].PreEncode()) - mediaDescriptions[i].Encode(connectionAddress, str); + mediaDescriptions[i].Encode(defaultConnectAddress, str); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2010-01-11 23:59:21
|
Revision: 23921 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=23921&view=rev Author: rjongbloed Date: 2010-01-11 23:59:15 +0000 (Mon, 11 Jan 2010) Log Message: ----------- Fixed bug in new G.729 (actually multiple OpalMediaFormat per SDP encoding name) fixes, does not get correct secondary formats. Note the bug is mine not Teds! Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2010-01-11 23:44:43 UTC (rev 23920) +++ opal/trunk/src/sip/sdp.cxx 2010-01-11 23:59:15 UTC (rev 23921) @@ -365,7 +365,8 @@ void SDPMediaFormat::InitialiseMediaFormat(OpalMediaFormat & mediaFormat) const { - mediaFormat = OpalMediaFormat(payloadType, clockRate, encodingName, "sip"); + if (mediaFormat.IsEmpty()) { + mediaFormat = OpalMediaFormat(payloadType, clockRate, encodingName, "sip"); if (mediaFormat.IsEmpty()) mediaFormat = OpalMediaFormat(encodingName); if (mediaFormat.IsEmpty()) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2010-01-12 00:09:00
|
Revision: 23922 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=23922&view=rev Author: rjongbloed Date: 2010-01-12 00:08:54 +0000 (Tue, 12 Jan 2010) Log Message: ----------- Fix stupid compile error. Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2010-01-11 23:59:15 UTC (rev 23921) +++ opal/trunk/src/sip/sdp.cxx 2010-01-12 00:08:54 UTC (rev 23922) @@ -365,7 +365,7 @@ void SDPMediaFormat::InitialiseMediaFormat(OpalMediaFormat & mediaFormat) const { - if (mediaFormat.IsEmpty()) { + if (mediaFormat.IsEmpty()) mediaFormat = OpalMediaFormat(payloadType, clockRate, encodingName, "sip"); if (mediaFormat.IsEmpty()) mediaFormat = OpalMediaFormat(encodingName); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2010-04-07 07:39:04
|
Revision: 24206 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=24206&view=rev Author: rjongbloed Date: 2010-04-07 07:38:56 +0000 (Wed, 07 Apr 2010) Log Message: ----------- Fixed setting of media format information from SDP, seriously broken in an earlier check in. Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2010-04-07 07:37:39 UTC (rev 24205) +++ opal/trunk/src/sip/sdp.cxx 2010-04-07 07:38:56 UTC (rev 24206) @@ -425,8 +425,8 @@ bool SDPMediaFormat::PostDecode(unsigned bandwidth) { - // Use GetMediaFormat() to force creation of member - OpalMediaFormat mediaFormat = GetMediaFormat(); + // Use GetWritableMediaFormat() to force creation of member + OpalMediaFormat & mediaFormat = GetWritableMediaFormat(); if (mediaFormat.IsEmpty()) return false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2010-12-03 08:40:20
|
Revision: 24918 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=24918&view=rev Author: rjongbloed Date: 2010-12-03 08:40:14 +0000 (Fri, 03 Dec 2010) Log Message: ----------- Fixed nasty mistake in previous check in. Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2010-12-03 02:26:58 UTC (rev 24917) +++ opal/trunk/src/sip/sdp.cxx 2010-12-03 08:40:14 UTC (rev 24918) @@ -1610,7 +1610,7 @@ static void SanitiseName(PString & str) { PINDEX i = 0; - while (i < str.GetSize()) { + while (i < str.GetLength()) { if (isprint(str[i])) ++i; else This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2010-12-05 23:49:05
|
Revision: 24922 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=24922&view=rev Author: rjongbloed Date: 2010-12-05 23:48:59 +0000 (Sun, 05 Dec 2010) Log Message: ----------- Improvement to making sure SDP fields for session name and user name cannot be empty strings, thanks Dave Corrie. Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2010-12-04 21:39:24 UTC (rev 24921) +++ opal/trunk/src/sip/sdp.cxx 2010-12-05 23:48:59 UTC (rev 24922) @@ -1621,24 +1621,20 @@ void SDPSessionDescription::SetSessionName(const PString & v) { - if (v.IsEmpty()) + sessionName = v; + SanitiseName(sessionName); + if (sessionName.IsEmpty()) sessionName = '-'; - else { - sessionName = v; - SanitiseName(sessionName); - } } void SDPSessionDescription::SetUserName(const PString & v) { - if (v.IsEmpty()) + ownerUsername = v; + SanitiseName(ownerUsername); + ownerUsername.Replace(' ', '_', true); + if (ownerUsername.IsEmpty()) ownerUsername = '-'; - else { - ownerUsername = v; - SanitiseName(ownerUsername); - ownerUsername.Replace(' ', '_', true); - } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2010-12-22 07:54:22
|
Revision: 24975 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=24975&view=rev Author: rjongbloed Date: 2010-12-22 07:54:16 +0000 (Wed, 22 Dec 2010) Log Message: ----------- Some remotes return all of the media detail (a= lines) in SDP even though port is zero indicating the media is not to be used. So don't return these bogus media formats from SDP to the "remote media format list". Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2010-12-22 01:36:19 UTC (rev 24974) +++ opal/trunk/src/sip/sdp.cxx 2010-12-22 07:54:16 UTC (rev 24975) @@ -1586,6 +1586,12 @@ for (PINDEX i = 0; i < mediaDescriptions.GetSize(); ++i) { SDPMediaDescription & mediaDescription = mediaDescriptions[i]; + /* Some remotes return all of the media detail (a= lines) in SDP even though + port is zero indicating the media is not to be used. So don't return these + bogus media formats from SDP to the "remote media format list". */ + if (mediaDescription.GetPort() == 0) + continue; + formatList += mediaDescription.GetMediaFormats(); // Find the payload type and capabilities used for telephone-event, if present This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2012-03-26 05:46:09
|
Revision: 27318 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=27318&view=rev Author: rjongbloed Date: 2012-03-26 05:46:03 +0000 (Mon, 26 Mar 2012) Log Message: ----------- Fixed setting media format max bit rate to UINT_MAX if no TIAS in SDP. Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2012-03-26 03:12:09 UTC (rev 27317) +++ opal/trunk/src/sip/sdp.cxx 2012-03-26 05:46:03 UTC (rev 27318) @@ -443,7 +443,7 @@ m_mediaFormat.AddOption(new OpalMediaOptionString(SDPBandwidthPrefix + r->first, false, r->second), true); } - if (bandwidth > 0) { + if (bandwidth > 1000 && bandwidth < m_mediaFormat.GetOptionInteger(OpalMediaFormat::MaxBitRateOption())) { PTRACE(4, "SDP\tAdjusting format \"" << m_mediaFormat << "\" bandwidth to " << bandwidth); m_mediaFormat.SetOptionInteger(OpalMediaFormat::MaxBitRateOption(), bandwidth); } @@ -719,8 +719,11 @@ } unsigned bw = GetBandwidth(SDPSessionDescription::TransportIndependentBandwidthType()); - if (bw == 0) - bw = GetBandwidth(SDPSessionDescription::ApplicationSpecificBandwidthType())*1000; + if (bw == UINT_MAX) { + bw = GetBandwidth(SDPSessionDescription::ApplicationSpecificBandwidthType()); + if (bw < UINT_MAX/1000) + bw *= 1000; + } SDPMediaFormatList::iterator format = formats.begin(); while (format != formats.end()) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2012-03-26 05:55:19
|
Revision: 27320 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=27320&view=rev Author: rjongbloed Date: 2012-03-26 05:55:12 +0000 (Mon, 26 Mar 2012) Log Message: ----------- Fixed MSVC warning Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2012-03-26 05:46:40 UTC (rev 27319) +++ opal/trunk/src/sip/sdp.cxx 2012-03-26 05:55:12 UTC (rev 27320) @@ -443,7 +443,7 @@ m_mediaFormat.AddOption(new OpalMediaOptionString(SDPBandwidthPrefix + r->first, false, r->second), true); } - if (bandwidth > 1000 && bandwidth < m_mediaFormat.GetOptionInteger(OpalMediaFormat::MaxBitRateOption())) { + if (bandwidth > 1000 && bandwidth < (unsigned)m_mediaFormat.GetOptionInteger(OpalMediaFormat::MaxBitRateOption())) { PTRACE(4, "SDP\tAdjusting format \"" << m_mediaFormat << "\" bandwidth to " << bandwidth); m_mediaFormat.SetOptionInteger(OpalMediaFormat::MaxBitRateOption(), bandwidth); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2012-05-09 22:13:33
|
Revision: 27603 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=27603&view=rev Author: rjongbloed Date: 2012-05-09 22:13:26 +0000 (Wed, 09 May 2012) Log Message: ----------- Don't need to output c= line in SDP if port was zero. Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2012-05-09 11:43:10 UTC (rev 27602) +++ opal/trunk/src/sip/sdp.cxx 2012-05-09 22:13:26 UTC (rev 27603) @@ -860,13 +860,13 @@ << GetSDPTransportType() << GetSDPPortList() << "\r\n"; - if (!connectString.IsEmpty()) - str << "c=" << connectString << "\r\n"; - // If we have a port of zero, then shutting down SDP stream. No need for anything more if (port == 0) return false; + if (!connectString.IsEmpty()) + str << "c=" << connectString << "\r\n"; + str << m_bandwidth; OutputAttributes(str); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2012-06-07 02:19:32
|
Revision: 27778 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=27778&view=rev Author: rjongbloed Date: 2012-06-07 02:19:26 +0000 (Thu, 07 Jun 2012) Log Message: ----------- Fixed output of OpalBandwidth in SDP, don't use human readable form. Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2012-06-06 08:03:53 UTC (rev 27777) +++ opal/trunk/src/sip/sdp.cxx 2012-06-07 02:19:26 UTC (rev 27778) @@ -470,7 +470,7 @@ ostream & operator<<(ostream & out, const SDPBandwidth & bw) { for (SDPBandwidth::const_iterator iter = bw.begin(); iter != bw.end(); ++iter) - out << "b=" << iter->first << ':' << iter->second << "\r\n"; + out << "b=" << iter->first << ':' << (unsigned)iter->second << "\r\n"; return out; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2012-09-26 23:54:55
|
Revision: 28410 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=28410&view=rev Author: rjongbloed Date: 2012-09-26 23:54:49 +0000 (Wed, 26 Sep 2012) Log Message: ----------- Fixed incorrect inclusion of codecs in disabled SDP streams in media selection algorithm. In particular causes a problem with SRTP with clear fallback. Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2012-09-26 07:49:08 UTC (rev 28409) +++ opal/trunk/src/sip/sdp.cxx 2012-09-26 23:54:49 UTC (rev 28410) @@ -848,13 +848,15 @@ { OpalMediaFormatList list; - for (SDPMediaFormatList::const_iterator format = formats.begin(); format != formats.end(); ++format) { - OpalMediaFormat mediaFormat = format->GetMediaFormat(); - if (mediaFormat.IsValid()) - list += mediaFormat; - else { - PTRACE(2, "SDP\tRTP payload type " << format->GetPayloadType() - << ", name=" << format->GetEncodingName() << ", not matched to supported codecs"); + if (m_port != 0) { + for (SDPMediaFormatList::const_iterator format = formats.begin(); format != formats.end(); ++format) { + OpalMediaFormat mediaFormat = format->GetMediaFormat(); + if (mediaFormat.IsValid()) + list += mediaFormat; + else { + PTRACE(2, "SDP\tRTP payload type " << format->GetPayloadType() + << ", name=" << format->GetEncodingName() << ", not matched to supported codecs"); + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2013-03-12 08:55:59
|
Revision: 29251 http://sourceforge.net/p/opalvoip/code/29251 Author: rjongbloed Date: 2013-03-12 08:55:56 +0000 (Tue, 12 Mar 2013) Log Message: ----------- Fixeed GNU warning Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2013-03-12 01:08:11 UTC (rev 29250) +++ opal/trunk/src/sip/sdp.cxx 2013-03-12 08:55:56 UTC (rev 29251) @@ -1198,7 +1198,7 @@ bool SDPRTPAVPMediaDescription::Format::Initialise(const PString & portString) { - unsigned pt = portString.AsInteger(); + int pt = portString.AsInteger(); if (pt < 0 || pt > 127) return false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2013-04-30 17:08:34
|
Revision: 29614 http://sourceforge.net/p/opalvoip/code/29614 Author: rjongbloed Date: 2013-04-30 17:08:29 +0000 (Tue, 30 Apr 2013) Log Message: ----------- Fixed compile without SRTP. Fixed merge error from Eridani. Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2013-04-30 16:58:22 UTC (rev 29613) +++ opal/trunk/src/sip/sdp.cxx 2013-04-30 17:08:29 UTC (rev 29614) @@ -286,12 +286,6 @@ mediaFormat.SetPayloadType(m_payloadType); mediaFormat.SetOptionInteger(OpalAudioFormat::ChannelsOption(), m_parameters.IsEmpty() ? 1 : m_parameters.AsUnsigned()); -#if OPAL_VIDEO - // Save the RTCP feedback (RFC4585) capability. - if (m_rtcp_fb != OpalVideoFormat::e_NoRTCPFb && !m_parent.GetOptionStrings().GetBoolean(OPAL_OPT_FORCE_RTCP_FB)) - mediaFormat.SetOptionEnum(OpalVideoFormat::RTCPFeedbackOption(), m_rtcp_fb); -#endif - // Fill in the default values for (possibly) missing FMTP options for (PINDEX i = 0; i < mediaFormat.GetOptionCount(); i++) { OpalMediaOption & option = const_cast<OpalMediaOption &>(mediaFormat.GetOption(i)); @@ -1310,8 +1304,10 @@ SDPCryptoSuite * cryptoSuite = new SDPCryptoSuite(0); if (cryptoSuite->Decode(value)) { m_cryptoSuites.Append(cryptoSuite); +#if OPAL_SRTP if (m_transportType == OpalRTPSession::RTP_AVP()) m_transportType = OpalSRTPSession::RTP_SAVP(); +#endif } else { delete cryptoSuite; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2013-06-07 06:59:19
|
Revision: 29913 http://sourceforge.net/p/opalvoip/code/29913 Author: rjongbloed Date: 2013-06-07 06:59:16 +0000 (Fri, 07 Jun 2013) Log Message: ----------- Fixed spurious trace log on receiving "rtcp-mux" SDP attribute saying we don't udnerstand it when we do. Added the missing parse of the SDP "rtcp" attribute. Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2013-06-07 06:41:54 UTC (rev 29912) +++ opal/trunk/src/sip/sdp.cxx 2013-06-07 06:59:16 UTC (rev 29913) @@ -1339,9 +1339,16 @@ return; } - if (attr *= "rtcp-mux") + if (attr *= "rtcp-mux") { m_controlAddress = m_mediaAddress; + return; + } + if (attr *= "rtcp") { + m_controlAddress = ParseConnectAddress(value.Mid(value.Find(' ')+1), (WORD)value.AsUnsigned()); + return; + } + SDPMediaDescription::SetAttribute(attr, value); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2014-01-14 06:38:02
|
Revision: 31188 http://sourceforge.net/p/opalvoip/code/31188 Author: rjongbloed Date: 2014-01-14 06:37:58 +0000 (Tue, 14 Jan 2014) Log Message: ----------- Remove check of SDP transport type, some endpoint don't get it right (e.g. one that says RTP/SAVP but then does not provide security keys) and we can often still proceed. Be strict on what you send and forgiving on what you receive. Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2014-01-14 06:34:36 UTC (rev 31187) +++ opal/trunk/src/sip/sdp.cxx 2014-01-14 06:37:58 UTC (rev 31188) @@ -733,11 +733,6 @@ bool SDPMediaDescription::PostDecode(const OpalMediaFormatList & mediaFormats) { - if (m_transportType != GetSDPTransportType()) { - PTRACE(2, "SDP\tMedia session transport " << m_transportType << " not compatible with " << GetSDPTransportType()); - return false; - } - unsigned bw = GetBandwidth(SDPSessionDescription::TransportIndependentBandwidthType()); if (bw == UINT_MAX) { bw = GetBandwidth(SDPSessionDescription::ApplicationSpecificBandwidthType()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2014-01-18 06:16:17
|
Revision: 31220 http://sourceforge.net/p/opalvoip/code/31220 Author: rjongbloed Date: 2014-01-18 06:16:15 +0000 (Sat, 18 Jan 2014) Log Message: ----------- Use common string for SDP attribute name legal character set. Fixed SDP ssrc attribute validation and logging Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2014-01-18 06:14:49 UTC (rev 31219) +++ opal/trunk/src/sip/sdp.cxx 2014-01-18 06:16:15 UTC (rev 31220) @@ -55,6 +55,7 @@ #define SDP_MIN_PTIME 10 static char const CRLF[] = "\r\n"; +static char const TokenChars[] = "!#$%&'*+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz{|}~"; // From RFC4566 ///////////////////////////////////////////////////////// @@ -495,7 +496,7 @@ bool SDPBandwidth::Parse(const PString & param) { - PINDEX pos = param.FindSpan("!#$%&'*+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz{|}~"); // Legal chars from RFC + PINDEX pos = param.FindSpan(TokenChars); // Legal chars from RFC if (pos == P_MAX_INDEX || param[pos] != ':') { PTRACE(2, "SDP\tMalformed bandwidth attribute " << param); return false; @@ -524,7 +525,7 @@ void SDPCommonAttributes::ParseAttribute(const PString & value) { - PINDEX pos = value.FindSpan("!#$%&'*+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz{|}~"); // Legal chars from RFC + PINDEX pos = value.FindSpan(TokenChars); // Legal chars from RFC if (pos == P_MAX_INDEX) SetAttribute(value, "1"); else if (value[pos] == ':') @@ -1423,12 +1424,18 @@ if (attr *= "ssrc") { DWORD ssrc = value.AsUnsigned(); - PINDEX colon = value.Find(':'); - if (ssrc != 0 && colon != P_MAX_INDEX) - m_ssrcInfo[ssrc].SetAt(value(value.Find(' ') + 1, colon - 1).Trim(), value.Mid(colon + 1)); - else { + PINDEX space = value.Find(' '); + PINDEX endToken = value.FindSpan(TokenChars, space+1); + if (ssrc == 0 || space == P_MAX_INDEX || (endToken != P_MAX_INDEX && value[endToken] != ':')) { PTRACE(2, "SDP\tCannot decode ssrc attribute: \"" << value << '"'); } + else { + PCaselessString key = value(space + 1, endToken - 1); + PString val = value.Mid(endToken + 1); + m_ssrcInfo[ssrc].SetAt(key, val); + PTRACE_IF(4, key == "cname", "SDP\tSSRC: " << RTP_TRACE_SRC(ssrc) << " CNAME: " << val); + } + return; } SDPMediaDescription::SetAttribute(attr, value); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rjo...@us...> - 2014-01-22 09:42:20
|
Revision: 31252 http://sourceforge.net/p/opalvoip/code/31252 Author: rjongbloed Date: 2014-01-22 09:42:16 +0000 (Wed, 22 Jan 2014) Log Message: ----------- Be more forgiving on whitespace parseing SDP. Modified Paths: -------------- opal/trunk/src/sip/sdp.cxx Modified: opal/trunk/src/sip/sdp.cxx =================================================================== --- opal/trunk/src/sip/sdp.cxx 2014-01-22 09:02:11 UTC (rev 31251) +++ opal/trunk/src/sip/sdp.cxx 2014-01-22 09:42:16 UTC (rev 31252) @@ -55,6 +55,7 @@ #define SDP_MIN_PTIME 10 static char const CRLF[] = "\r\n"; +static PConstString const WhiteSpace(" \t\r\n"); static char const TokenChars[] = "!#$%&'*+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz{|}~"; // From RFC4566 @@ -183,7 +184,7 @@ static OpalTransportAddress ParseConnectAddress(const PString & str, WORD port = 0) { - PStringArray tokens = str.Tokenise(' '); + PStringArray tokens = str.Tokenise(WhiteSpace, false); // Spec says space only, but lets be forgiving return ParseConnectAddress(tokens, 0, port); } @@ -2085,14 +2086,14 @@ ////////////////////////////////////////////////////////////////////////////// SDPSessionDescription::SDPSessionDescription(time_t sessionId, unsigned version, const OpalTransportAddress & address) - : sessionName(SIP_DEFAULT_SESSION_NAME) + : protocolVersion(0) + , sessionName(SIP_DEFAULT_SESSION_NAME) , ownerUsername('-') , ownerSessionId(sessionId) , ownerVersion(version) , ownerAddress(address) , defaultConnectAddress(address) { - protocolVersion = 0; } @@ -2230,7 +2231,7 @@ OpalMediaType mediaType; OpalMediaTypeDefinition * defn; - PStringArray tokens = value.Tokenise(" "); + PStringArray tokens = value.Tokenise(WhiteSpace, false); // Spec says space only, but lets be forgiving if (tokens.GetSize() < 4) { PTRACE(1, "SDP\tMedia session has only " << tokens.GetSize() << " elements"); } @@ -2282,11 +2283,11 @@ void SDPSessionDescription::SetAttribute(const PString & attr, const PString & value) { if (attr *= "group") { - PStringArray words = value.Tokenise(" \t\r\n", false); // Spec says space only, but lets be forgiving - if (words.GetSize() > 2) { - PString name = words[0]; - words.RemoveAt(0); - m_groups.SetAt(name, new PStringArray(words)); + PStringArray tokens = value.Tokenise(WhiteSpace, false); // Spec says space only, but lets be forgiving + if (tokens.GetSize() > 2) { + PString name = tokens[0]; + tokens.RemoveAt(0); + m_groups.SetAt(name, new PStringArray(tokens)); } return; } @@ -2303,7 +2304,7 @@ void SDPSessionDescription::ParseOwner(const PString & str) { - PStringArray tokens = str.Tokenise(" "); + PStringArray tokens = str.Tokenise(WhiteSpace, false); // Spec says space only, but lets be forgiving if (tokens.GetSize() != 6) { PTRACE(2, "SDP\tOrigin has incorrect number of elements (" << tokens.GetSize() << ')'); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |