On 6/2/10 4:01 PM, Andrei Pelinescu-Onciul wrote:
On Jun 02, 2010 at 15:35, Daniel-Constantin Mierla<mico...@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/
_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
sr-users@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users