[reSIProcate] Workaround for invalid SDP generated by Sonus_UAC

Dmitry Semyonov dsemyonov at dins.ru
Thu Mar 26 11:22:30 CDT 2009


On Mon, 16 Feb 2009 at 20:54 +0300, Dmitry Semyonov wrote:

> 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:
  [...]
> 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).

Well, it turned out that this patch became necessary for us to 
complete interoperability tests. So, actually working version is 
provided below.

It tolerates invalid ordering of c= b= k= a= lines within m= section 
of incoming SDP.


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

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

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

  EncodeStream&

-- 
...Bye..Dmitry.



More information about the resiprocate-devel mailing list