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@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