[pjsip] Problem for Pjsip to read "Expires" value from some 200/OK REGISTER Replies

Tanguy Floc'h electrocut at gmail.com
Thu Apr 17 09:44:22 EDT 2008

I think I realized that the problem is not so simple.

The Fact is that I am using stun, so the Register message contains the
Public IP address :

REGISTER sip:ippi.fr SIP/2.0
Via: SIP/2.0/UDP 193.253.*.*:58540;rport;branch=z9hG4b..
Max-Forwards: 70
From: "login" <sip:login at ippi.fr <sip%3Alogin at ippi.fr>>;tag=a15177..
To: "login" <sip:login at ippi.fr <sip%3Alogin at ippi.fr>>
Call-ID: 7ec0346..
CSeq: 47136 REGISTER
User-Agent: PJSUA v0.8.0-trunk/win32
Contact: "login" <sip:login at 193.253.*.*:58540>
Expires: 3600
Authorization: Digest username="login", realm="ippi.fr", nonce="480749..",
uri="sip:ippi.fr", response="01e3c02.."
Content-Length:  0

I guess the Registrar is not OK with the IP:Port I sent, because the Reply
is the following one :
(I don't even know how the Registrar as discovered my private IP, since I was using STUN in the REGISTER message)

SIP/2.0 200 OK
Via: SIP/2.0/UDP;rport=58540;branch=z9hG4b..
From: "login" <sip:login at ippi.fr <sip%3Alogin at ippi.fr>>;tag=a15177..
To: "login" <sip:login at ippi.fr <sip%3Alogin at ippi.fr>>;tag=7de74f..
Call-ID: 7ec034..
CSeq: 47136 REGISTER
Contact: <sip:login at>;expires=3600
Server: OpenSER (1.2.1-notls (i386/linux))
Content-Length: 0

This message has two problems :

- there is no "Expires:" information
- the Contact field doesn't match anymore (that's why I need to disable the
PJSIP_REGISTER_CLIENT_CHECK_CONTACT option, if I want this to work),
so the ";expires=3600" won't be taken into account.

-> Finally, the Reply will be considered as a wrong succefull "UnRegister"

I don't know if I have to consider that the problem is server side, or if
it's Pjsip with is not able to deal with this situation.
I have the same problem with several providers.

Any idea about this ?

Bye !


On Thu, Apr 17, 2008 at 10:26 AM, Tanguy Floc'h <electrocut at gmail.com>

> Hi !
> I think there is a problem, when pjsip tries to get the Expire value, from
> the 200 OK
> Reply coming from a REGISTER Request.
> The problem is for SIP messages like these, when "Expires" value had not
> its own header field :
> SIP/2.0 200 OK
> Via: SIP/2.0/UDP;rport;branch=z9hG4b...
> To: <sip:101 at <sip%3A101 at>>
> From: <sip:101 at <sip%3A101 at>>;tag=c8b125...
> Call-ID: 99ed82...
> CSeq: 22778 REGISTER
> User-Agent: NCH Swift Sound Axon 1.30
> Contact: <sip:101 at>;expires=300;
> Content-Length: 0
> As you can see, expires value has not its own header field (like "Expires:
> 300"), but is put at the end of the "Contact" header field (.. ;
> expires=300;)
> That's what happen in this case :
> When receiving the 200 OK Reply, from the REGISTER Request, the function
> tsx_callback() in sig_reg.c tries to find the "Expires= ?" header field :
> (line 718)
> expires = (pjsip_expires_hdr*)pjsip_msg_find_hdr(msg, PJSIP_H_EXPIRES,
> NULL);
> but can't find this field in the SIP message.
> If PJSIP_REGISTER_CLIENT_CHECK_CONTACT Param is set to 1, it is not a
> problem if expire field can not be found in SIP 200/Ok Reply, because the
> previous (and lower) value
> (from the REGISTER Request) will be taken into account instead :
> (line 760)
> if (contact[i]->expires >= 0 && contact[i]->expires < expiration)
>     expiration = contact[i]->expires;
> But if PJSIP_REGISTER_CLIENT_CHECK_CONTACT Param is set to 0 (that's my
> case), expiration value is set to -1, just before the callback is called,
> line 810 in sig_reg.c
> Consequently, when the callback function regc_cb in pjsua_acc.c test the
> expiration value, it believes that it is a "succefful UNregistration",
> instead of Registration (because expiration < 1)
> A way to fix the problem could be :
> - To read expires value in "pjsip_contact_hdr->expires", if
> "pjsip_contact_hdr->ivalue" doesn't exist
> or
> - to compare the Expiration value, even if
> PJSIP_REGISTER_CLIENT_CHECK_CONTACT is disable, so the previous value will
> be taken into account instead.
> Thanks !
> Electrocut
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/attachments/20080417/26c0fa92/attachment.html>

More information about the pjsip mailing list