Someone please correct me if I'm wrong but from a quick look at the code in
(rr and tm) there seems to be no connection between the transport= param in
a Route header (directed at SER itself), and the transport selected by
t_relay().
Is this by design or just a missing feature?
It would seem the only way to get t_relay() to use TCP from a loose routed
request would be to add the transport=tcp to the RURI.
The code in tm and rr is not exactly easy to follow in a couple of hours so
anyone who might understand how this is intended to work please send me an
email. It looks to me as if SER is removing the Route headers if they are
directed to "myself" and not preserving the transport=tcp information in any
way that is used later by t_relay()
Thanks
On 9/28/05, Mark Aiken <aiken.mark(a)gmail.com> wrote:
Hi,
I'm having problems getting SER to (loose) route requests from UDP to
TCP. I'm not sure if the UA is at fault here or some SER config issue.
SER receives an INVITE over TCP, record_route() is called and then the
request is relayed via UDP (t_relay_to_udp) to the UA. The INVITE relayed to
the UDP UA now has 2 Record-Route headers added by SER. One has the
transport=tcp parameter.
Record-Route: <sip:xx.xx.xx.xx;r2=on;ftag=xyz;lr=on>
Record-Route: <sip:xx.xx.xx.xx;transport=tcp;r2=on;ftag=xyz>
When the UA sends the BYE to SER, it has the 2 Route headers like so (on
a single line):
Route: <sip:xx.xx.xx.xx;r2=on;ftag=xyz;lr=on>,<sip:xx.xx.xx.xx
;transport=tcp;r2=on;ftag=xyz;lr=on>
The SER script simply calls t_relay() in the loose_route section of the
script.
I expected t_relay() to relay the BYE via TCP, since the Route header has
transport=tcp, but it sends the BYE via UDP instead.
Anyone seen this problem before? Do I need to check for transport=tcp and
call t_relay_to_tcp, rather than using t_relay after loose_route()?
Mark