Andrei Pelinescu-Onciul writes:
Yes, it should do either that, or add an alias parameter to its Via (assuming that the port in Via _is_ 5074). If it does add "alias" to the Via, make sure you have tcp_accept_aliases=yes in the config.
twinkle does not add alias param to via so looks like its tcp implementation is broken. this comes from source tcp port 34136 to port 5060 at sr:
+++ 6-11-2009 12:06:27.976341 INFO SIP ::send_sip_tcp Send to: tcp:192.98.101.10:5060 REGISTER sip:test.fi SIP/2.0 Via: SIP/2.0/TCP 192.98.101.10:5074;rport;branch=z9hG4bKtabgdwsf Max-Forwards: 70 To: "Juha Heinanen" sip:jh@test.fi From: "Juha Heinanen" sip:jh@test.fi;tag=hqmmp Call-ID: bmybrkvktynbuma@localhost CSeq: 668 REGISTER Contact: sip:jh_test_fi@192.98.101.10:5074;transport=tcp;expires=3600
or should sr figure out that twinkle in fact is behind the tcp connection it created when it registered itself no matter what the port in contact uri is?
You can force that, using force_tcp_alias() (adds src_ip:port_in_via as an alias for src_ip:src_port).
can force_tcp_alias() be called on any register over tcp or should it be tested first that there is no alias in via and that port in register contact uri does not match source port?
In general, especially if you have NATed UACs, it's better to always have force_tcp_alias() in the config. It will cause problems only if you have non-NATed broken UACs that don't expect/support symmetric signalling over TCP (e.g. open a new connection for each new request and expect only replies to that request on the connection).
ok.
OTOH if you don't force_tcp_alias() and the UACs don't add alias to the Via, it's a very slim chance that NATed UACs will work over tcp.
i'll test next what happens when i put twinkle behind nat.
-- juha