[pjsip] process_m_answer in sdp_neg.c

Ruud Klaver ruud at ag-projects.com
Thu Jul 24 05:34:05 EDT 2008

On 23 Jul 2008, at 15:27, Benny Prijono wrote:

> On Wed, Jul 23, 2008 at 12:51 PM, Ruud Klaver <ruud at ag-projects.com>  
> wrote:
> Hi,
> I'm trying to use the SDP negotiation part of pjmedia to process SDP
> related to MSRP (RFC 4975), but ran into some issues when it tried to
> complete the negotiation procedure. The process_m_answer function
> assumes that the formats in the m= line are integers and starts
> looking for rtpmap attributes, while for MSRP the formats aren't
> actually used and are set to a single "*".
> Actually it's not that bad, we have this in sdp_neg.c:618:
>         /* Find matching answer */
>         pt = pj_strtoul(fmt);
>         if (pt < 96) {
>           for (j=0; j<answer->desc.fmt_count; ++j) {
>                if (pj_strcmp(fmt, &answer->desc.fmt[j])==0)
>                  break;
>         }
> The idea is if pt is not a payload type number, pj_strtoul() should  
> return 0 and the "if (pt<96)" checking above will be executed and it  
> shouldn't need to check for rtpmap.
> But alas, there seems to be a bug in pj_strtoul(). Instead of  
> stopping when it finds a non-digit character, it continues to treat  
> the input as digit, causing it to return garbage value. I've just  
> fixed this in the latest SVN.

Great, you dug deeper than me. :)

Indeed it was some assertion in that branch that failed on me. Thanks  
for fixing it.

> Maybe there should be a check to see if the protocol field (called
> transport in pjsip) starts with RTP, as RFC 4566 states:
> I believe "proto" is shorthand  for "transport protocol", so calling  
> it transport is not too far off . :)
>       If the <proto> sub-field is "RTP/AVP" or "RTP/SAVP" the <fmt>
>       sub-fields contain RTP payload type numbers.
> But also:
>       If the <proto> sub-field is "udp" the <fmt> sub-fields MUST
>       reference a media type describing the format under the "audio",
>       "video", "text", "application", or "message" top-level media
>       types.
>       ...
>       For media using other transport protocols, the <fmt> field is
>       protocol specific.
> But then the question is, how would pjmedia declare the negotiation to
> have succeeded?
> Currently, if both media type and transport protocol match, and  
> there is matching format. That's probably good enough for MSRP.
> Cheers
>  Benny

That works for me. Anything beyond that should be handled by the  

Ruud Klaver
AG Projects

More information about the pjsip mailing list