[SR-Users] fix_nated_contact() on REGISTER

Daniel-Constantin Mierla miconda at gmail.com
Wed Jun 2 16:24:00 CEST 2010



On 6/2/10 4:01 PM, Andrei Pelinescu-Onciul wrote:
> On Jun 02, 2010 at 15:35, Daniel-Constantin Mierla<miconda at gmail.com>  wrote:
>    
>>
>> On 6/2/10 3:00 PM, Andrei Pelinescu-Onciul wrote:
>>      
>>> [...]
>>>        
>>>>>>>> On 6/1/10 9:07 PM, Alex Balashov wrote:
>>>>>>>>                  
>>>>>>>>> No, it'll store the fixed one, in the proper contact column, not the
>>>>>>>>> received column. I do this all the time, even though it's not the
>>>>>>>>> "proper" way.
>>>>>>>>>                    
>>>>>>>> should be the original one with the last version, afaik. There were
>>>>>>>> issues with phones accepting calls which had a different uri than the
>>>>>>>> address they set in contact of register.
>>>>>>>>
>>>>>>>> So, the contact details were brocken in:
>>>>>>>> - contact - the address from header
>>>>>>>> - received - built from source ip and port
>>>>>>>> - socket - local socket where the register was received
>>>>>>>>
>>>>>>>> Note that there are two functions, fix_nated_contact() and
>>>>>>>> fix_nated_registrar().
>>>>>>>>                  
>>>>>>> I know. I always use fix_nated_register. I just wonder why save()
>>>>>>> saves the fixed contact in case of fix_nated_contact(), because
>>>>>>> usually we have the problem that changes to the message are only
>>>>>>> visible when the message is forwarded (lumps are applied)
>>>>>>>
>>>>>>>                
>>>>>> but are you sure the fixed contact is saved? I quick look in the
>>>>>> registrar code seems to take the contact from headers, which are
>>>>>> pointing inside original message.
>>>>>>              
>>>>> I just tested with kamailio 3.0 and you are right. Yesterday I tested
>>>>> with ser 0.9.? and fix_nated_contact() seemed to save the rewritten
>>>>> contact header - strange.
>>>>>            
>>>> I have to correct myself - I made an error during the test. Kamailio
>>>> 3.0 with fix_nated_contact() saves the fixed contact URI (see
>>>> below).
>>>>          
>>> In all versions (older ser, ser, sip-router, kamailio), the changes done
>>> by fix_nated_contact() will be visible when the contact is save()'d.
>>> fix_nated_contact() directly modifies the parsed contact, which is then
>>> used by save().
>>>
>>> fix_nated_register() behaves differently. In older ser version and in
>>> kamailio it sets and avp with the received information. This avp is then
>>> checked by save() and used as received info.
>>> In newer ser versions and sip-router modules_s/nathelper  it adds
>>> a received=... parameter to each contact (it doesn't set any avp).
>>> In this case save() will generate itself the received uri if the message
>>> is flagged as coming from before a NAT. save() from modules_s/registrar
>>> and newer sers, doesn't need fix_nated_register(), it only needs that the
>>> message was properly flagged in the script. It will also not look at any
>>> avp.
>>> ser's fix_nated_register() is used for replicated REGISTERs or when the
>>> outbound proxy is not also the registrar. It will add a "received="
>>> parameter to each contact and the non-local registrar
>>> (or the replication peer) can use it to recover the original ip:port.
>>>        
>> Interesting, thanks for these details. I never used
>> fix_nated_contact() for REGISTER as fix_nated_registrar() is the
>> natural way for me. You saved me some time to dig in the sources.
>>
>> To understand that fix_nated_contact() translates the pointers to
>> the new lump? If yes, that means the PVs for contact go there as
>> well.
>>      
> It does  c->uri.s = buf, where buf is pkg_malloc'ed and contains the
>   "fixed" uri (and it's used also in insert_new_lump_after()).
>
> I wouldn't use fix_nated_contact() for REGISTERs, but sometimes it's
>   useful to fix contacts in dialogs.
>
>    
for dialogs is used indeed. Default K config has it to fix natted calls.

I think Juha added a new way lately, to encode/decode source ip/port in 
the contact uri.

Cheers,
Daniel

-- 
Daniel-Constantin Mierla
Kamailio (OpenSER) Advanced Training
Miami, Fl, USA - June 21-23, 2010
http://www.asipto.com/index.php/kamailio-advanced-training/




More information about the sr-users mailing list