[pjsip] Parsing expires from REGISTER reply

Tanguy Floc'h electrocut at gmail.com
Sun May 4 12:41:33 EDT 2008


"If regc.check_contact is disabled, and no Expires header has been 
found, but the server does return one single Contact header, assumes 
that the server is broken/unable to return the correct Contact. In this 
case, get the expiration from the single Contact header in the response 
(thanks Alan Bond)"

Thanks a lot Benny for the fix ... it solve perfectly the problem I had 
described in the mailing list here : 
http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/2008-April/002687.html

 From now, it will be possible to register, if the Server returns a bad 
Contact header, even if the Server returns no Expire header.

Best Regards,

Electrocut


Benny Prijono wrote:
> Hi Alan,
>
> First of all, I think this issue has come up several times on this
> list, so I've just added this entry in the FAQ to explain the
> rationale why PJSIP behaves this way, and also few solutions to cope
> with it: http://trac.pjsip.org/repos/wiki/FAQ#regc
>
> I do like your solution. And while this is server problem (regardless
> of how popular it is; if it's broken, then it needs to be fixed, IMO),
> in the SVN trunk we already have couple of settings to deal with this,
> so if we want to handle this, why not go all the way. So I've just
> added the trick (to get the expiration value from the single Contact,
> if Expires header is not present) in the latest SVN version. Thanks
> for the suggestion.
>
> Now enjoy the bank holiday. :)
>
> Cheers
>  Benny
>
> On Sun, May 4, 2008 at 2:38 AM, Alan J. Bond <alan.bond at wintology.com> wrote:
>   
>>
>>
>> Hi again,
>>
>>
>>
>> Have done the debugging.  Here is the fix but remember I'm very new to this
>> code so please scrutinise carefully.   Comments for clarity only, please
>> amend per your normal standards.
>>
>>
>>
>> The value of expires= on the end of a Contact: header is indeed parsed
>> correctly and placed in the  pjsip_contact_hdr structure.  The problem is in
>> sip_reg.c toward the end of this function where it is discarded and not
>> passed to the callback handler.   This change assumes that any SIP servers
>> that exhibit this behaviour are only going to do so when returning a single
>> Contact: header.  You may know different.
>>
>>
>>
>> static void tsx_callback(void *token, pjsip_event *event)
>>
>> {
>>
>>                 :
>>
>>       :
>>
>>       :
>>
>>       V
>>
>>
>>
>>       }
>>
>>
>>
>>       /* Increment busy flag temporarily to prevent regc from
>>
>>        * being destroyed.
>>
>>        */
>>
>>       ++regc->busy;
>>
>>
>>
>>       /* Call callback. */
>>
>>
>>
>>       /* Change to cope with old SER implementations that append */
>>
>>       /* expires= to Contact: and do not create Expires: header  */
>>
>>       /* 20080504 BEGIN -----------------------------------------*/
>>
>>
>>
>>       /* if (expiration == NOEXP) expiration = -1;               */
>>
>>
>>
>>       if (expiration == NOEXP)
>>
>>         expiration = -1;
>>
>>       else if (expiration == 0 && contact_cnt == 1 && contact[0]->expires >
>> 0)
>>
>>         expiration = contact[0]->expires;
>>
>>
>>
>>       /* 20080504 END -------------------------------------------*/
>>
>>
>>
>>       call_callback(regc, PJ_SUCCESS, tsx->status_code,
>>
>>                     (rdata ? &rdata->msg_info.msg->line.status.reason
>>
>>                            : pjsip_get_status_text(tsx->status_code)),
>>
>>                     rdata, expiration,
>>
>>                     contact_cnt, contact);
>>
>>
>>
>>       /* Decrement busy flag */
>>
>>       --regc->busy;
>>
>>     }
>>
>>
>>
>>     /* Delete the record if user destroy regc during the callback. */
>>
>>     if (regc->_delete_flag && regc->busy==0) {
>>
>>       pjsip_regc_destroy(regc);
>>
>>     }
>>
>> }
>>
>>
>>
>> Please let me know if you think this will screw up other implementations.
>>
>>
>>
>> Best Regards,
>>
>> Alan.
>> _______________________________________________
>>  Visit our blog: http://blog.pjsip.org
>>
>>  pjsip mailing list
>>  pjsip at lists.pjsip.org
>>  http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>>
>>
>>     
>
> _______________________________________________
> Visit our blog: http://blog.pjsip.org
>
> pjsip mailing list
> pjsip at lists.pjsip.org
> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/attachments/20080504/6c9fe457/attachment.html>


More information about the pjsip mailing list