[reSIProcate] Workaround for invalid SDP generated by Sonus_UAC

Dmitry Semyonov dsemyonov at dins.ru
Mon Feb 16 11:54:45 CST 2009


Hi All,

I recently discovered that some Sonus equipment (identified by 
Sonus_UAC in SDP) produces invalid SDP contents which reSIProcate is 
not capable of dealing with:

v=0
o=Sonus_UAC 19813 20746 IN IP4 192.168.0.1
s=SIP Media Capabilities
t=0 0
achieve this.
m=image 0 udptl t38
a=T38FaxVersion:0
a=T38MaxBitRate:14400
a=T38FaxRateManagement:transferredTCF
a=T38FaxMaxBuffer:4000
a=T38FaxMaxDatagram:1008
a=sendrecv
m=audio 6042 RTP/AVP 0
a=rtpmap:0 PCMU/8000
c=IN IP4 192.168.0.2
a=sendrecv
a=maxptime:20

The SDP is complete mess[1], but the main issue is 'a=' line *before* 
'c=' in the second media description. SdpContents parser simply 
ignores everything (including 'c=') after the first 'a='.

I most likely will be able to workaround this Sonus bug by playing 
with original offer SDP, but I'd also like to warn everyone on this 
list about the issue, and provide possible workaround idea for 
reSIProcate parser (untested).


[1] http://www.submityoursip.com/wiki/Sonus_NBS


Index: resip/stack/SdpContents.cxx
===================================================================
--- resip/stack/SdpContents.cxx	(revision 8413)
+++ resip/stack/SdpContents.cxx	(working copy)
@@ -1327,6 +1327,9 @@
        skipEol(pb);
     }

+  do { // workaround for broken SDP implementations (e.g. Sonus_UAC) that can put a= before c=
+   Pointer pos = pb.position();
+
     while (!pb.eof() && *pb.position() == 'c')
     {
        addConnection(Connection());
@@ -1392,6 +1395,8 @@
     }

     mAttributeHelper.parse(pb);
+
+  } while(!pb.eof() && pos != pb.position())
  }

  EncodeStream&


-- 
...Bye..Dmitry.



More information about the resiprocate-devel mailing list