[Users] The usrloc table, Oracle, and Asterisk

Juan Carlos Castro y Castro jcastro at instant.com.br
Fri Dec 15 13:38:54 CET 2006


Any way I could catch the final OK message instead of the REGISTER 
message? Right now, I'm using the code below. Now I see that's not good 
because I get the Expires from the client which may be higher than the 
real Expires.

        if( method=="REGISTER" ) {
                if (!www_authorize("myrealm", "sip_conf")) {
                        www_challenge("myrealm", "0");
                        exit;
                };

                save("location");
                avp_db_query("UPDATE sipfriends SET ipaddr='$si', 
port='$sp', regseconds=$Ts+$hdr(expires), useragent='$ua' WHERE 
name='$au'");
                exit;
        };


Bogdan-Andrei Iancu escreveu:
> Hi Jerome,
>
> you are right - a server may change the expire advertised by the 
> client. If it is the case or not, it's a matter of configuration in 
> OpenSER - see the min_expires and max_expires in the registrar module.
>    http://www.openser.org/docs/modules/1.2.x/registrar.html
>
> if this params are not set, there is no risk of using the value 
> advertised by the client.
>
> regards,
> bogdan
>
> Jerome Martin wrote:
>
>> On Thu, 2006-12-14 at 17:32 -0200, Juan Carlos Castro y Castro wrote:
>>  
>>
>>> Forget I said that! There's $Ts + $hdr("Expires")! That'll teach me 
>>> to always RTFA before answering!
>>>   
>>
>> Well, you need to be carefull about $hdr("Expires"). This is NOT the
>> only way a UA can specify an expiration delay for a REGISTER request.
>>
>> If you take a look at the relevant parts of rfc3261
>> ( http://www.ietf.org/rfc/rfc3261.txt ), you'll see that using an
>> Expires header is only one way of specifying a desired expired duration
>> for the REGISTER. The other way is by using a Contact header parameter
>> (page 60 of the rfc) :
>>
>>  
>>
>>> 10.2.1.1 Setting the Expiration Interval of Contact Addresses
>>>
>>>   When a client sends a REGISTER request, it MAY suggest an expiration
>>>   interval that indicates how long the client would like the
>>>   registration to be valid.  (As described in Section 10.3, the
>>>   registrar selects the actual time interval based on its local
>>>   policy.)
>>>
>>>   There are two ways in which a client can suggest an expiration
>>>   interval for a binding: through an Expires header field or an
>>>   "expires" Contact header parameter.  The latter allows expiration
>>>   intervals to be suggested on a per-binding basis when more than one
>>>   binding is given in a single REGISTER request, whereas the former
>>>   suggests an expiration interval for all Contact header field values
>>>   that do not contain the "expires" parameter.
>>>   
>>
>> Also note that the expire parameter to a Contact header is totally 
>> case-unsensitive ( page 32 of the RFC) :
>>
>>
>>  
>>
>>>   When comparing header fields, field names are always case-
>>>   insensitive.  Unless otherwise stated in the definition of a
>>>   particular header field, field values, parameter names, and parameter
>>>   values are case-insensitive.  Tokens are always case-insensitive.
>>>   Unless specified otherwise, values expressed as quoted strings are
>>>   case-sensitive.  For example,
>>>
>>>      Contact: <sip:alice at atlanta.com>;expires=3600
>>>
>>>   is equivalent to
>>>
>>>      CONTACT: <sip:alice at atlanta.com>;ExPiReS=3600
>>>   
>>
>> A good example of a very popular SIP UA always using the Contact 
>> header parameter method is the Linksys PAP2 ATA. On the other hand, 
>> there are also
>> many popular ATAs that use the Expires header method, i.e. Audiocodes 
>> MP1XX ATAs. So unless you're in a very controlled environment and you 
>> don't
>> care at all to be generic and RFC3261-compliant, you must support 
>> both. But
>> be carefull, in my experience this almost always bites you back one 
>> day or the other.
>>
>> Hope this helps,
>> Best Regards,
>>
>> Jérôme Martin
>>
>>
>>
>>
>>
>>  
>>
>
>





More information about the sr-users mailing list