Frank Durda IV píše v Út 29. 09. 2009 v 00:19 -0500:
The reason SER doesn't appear to work with two
interfaces that
connect to two isolated networks is pretty simple: If you use
record_route() and loose_route() to handle the called-party BYE
and re-INVITEs addressing correctly and fix_nated_contact()
to straighten out the Contact headers in both directions
on most messages, SER also inserts two Record-Route: headers,
which is fine for the direction the Method message is sent in,
but the order is only good for that direction. On the replies
(such as 180/183/200) once you get past the SER, everything
falls apart. The two Record-Routes that come out of SER
(or are just passed-through) are now in the wrong order for
the side of the isolated networks that the reply is sent out
of SER to, so the machine receiving them tries to send the
PRACK/ACK back to SER on the IP address of the other isolated
network because that Record-Route line appears first, and of
course you can't get there from here.
I'm sorry I haven't read all the discussion but the paragraph above hit
my eyes and I think you should check whether your client/gateway/etc. is
compliant with RFC3261 chapter 12.1.1 and 12.1.2.
Regarding record-route headers and creating route set:
- UAS gets all headers and builds the route set
- UAC gets all headers REVERSE the order and use it as route set
If it wasn't done this way any request with two or more Record-route
headers (regardless who added them - one proxy both or two proxies on
the path) would be affected and very probably wouldn't reach the other
end.
Michal