The thing is the ACK being returned from the UAC contains a route header
that does not match when passing loose_route() (the route header holds
the contents of the Contact header in the 200 OK), so eventually the ACK
hits a t_relay() in which case SER forwards the message to the RURI,
which is itself (lather, rinse, repeat).
I believe that this is due to the use of Strict Routing on the part of
the UAC and i need to treat it accordingly on SER, however the
"strict_route()" function seems to have dissappeared from rr.so so i'm
currently searching for a way to replace the URI with the URI from the
Route HF in the event that a UAC does strict routing
Samuel Osorio Calvo wrote:
Hi all,
We face some "strange" behaviour when several "SIP programs" run on
the
same machine as SER does that may be realted whith your scenario. I'll
try to explain and hope my memory is not totally corrupted after some
free days...
Whenever you set an alias configuration parameter, usually you omit the
port number and place just an IP or hostname, which matches the host
values. This configures SER to see all SIP messages targeted to the host
values as directed to himself NO MATTER which port is present in the
routing URIs.
This behaviour entails that the loose_route() will not work as you may
expect because the SER instance will think that the request targeted to
the application running in the same machine is INSTEAD directed to SER
(that explains the stateless behaviour and the 0 parameter in the
branch). That is why your colocated asterisk instance never sees the ACK
and SER instead forwards statelessly itself the request until the hop
counter reaches 10 (or whatever value you had set).
The solution is to add the port number in the alias parameter of SER
config file whenever SER has to route SIP request to programs running in
the same host.
Hope this helps,
Samuel.