Mark Aiken wrote:
The problem is the other way. BYE from UDP to TCP.
However I do see the
problem now.
Thanks Klaus for pointing me to the URI as it that is indeed the problem.
The TCP UA has transport=tcp in the Contact: header and SER correctly
leave that intact when forwarding to UDP. The UDP UA, when sending the
loose routed BYE back to SER, does not correctly add the URI param from
the Contact URI to the RURI.
I expected SER to not care about this because the rr params clearly have
the transport=tcp coming back in the local route header. Its also my
no, as described in my previous email
understanding thet URI params in Contact headers are
optional so the UDP
UA need not return them.
They are not. Because as you see in your setup it will break things!
Anyway, I've fix my problem by adding the
transport=tcp param to the
RURI in the loose route section of the script prior to t_relay.
That's a bad hack. Try to get a fix for the broken UA.
I dont know who is at fault here - the TCP UA, the UDP
UA, or SER but
since there are many of these UAs in the field I needed to fix the problem.
Sounds like the UDP UA is broken.
I would like to know why transport=tcp is ignored in
the Route header by
SER. If the RURI must have transport=tcp then why bother having it in
the Route header at all? I would think that information in the Route
would trump lack of information in the RURI.
as described, it tells how to reach the hop targeted in the route
header, not the next hop. See the following example:
UA1 has the contact: ip;t(ransport)=xxx
UA1 proxy1 proxy2 proxy3 proxy4 UA2
ip;t=xxx
rr;t=TCP
rr;t=UDP
rr;t=SCTP
rr;t=UDP
If now UA2 sends a BYE, we have the following protocols:
<--UDP--
<--SCTP--
<--UDP--
<----TCP------
<----XXX-----
hope this helps.
klaus
Mark
On 9/29/05, *Cesc* <cesc.santa(a)gmail.com <mailto:cesc.santa@gmail.com>>
wrote:
I would say that as long as your UA's contact header registered in
ser specifies UDP, t_relay should do the trick when receiving the
bye (tcp) and relaying it (udp).
It works in my lab :) I cannot be more specific as i am away now
... sorry.
Cesc
On 9/29/05, *Mark Aiken* < aiken.mark(a)gmail.com
<mailto:aiken.mark@gmail.com>> wrote:
HI,
The original RURI does have but when SER relays to UDP UA it
places transport=tcp in the Record-Route but not in the RURI to
the UDP UA, which seems correct to me.
I guess the problem is when using relay_to_udp on an INVITE from
a TCP UA, to force SER to act as a TCP to UDP proxy, SER cant
handle loose routing new requests in the same dialog back via TCP.
There seems to be no code in SER to handle this, from the small
bits I've looked at anyway. The information is in the rr params
that SER added, but SER just ignores the information on loose
routed requests when the route is a local one.
Does anyone know if there is some special trick to get SER to
handle TCP<->UDP conversion of loose routed requests? Should the
UA be adding the transport=tcp from the rr param to the RURI of
the BYE ( I would not think so, since its the 2nd route added by
SER anyway, not the topmost).
For SER to work as a TCP<=>UDP proxy, one needs to "search" for
the transport=tcp, somehow be sure its in a local route header,
and add the transport=tcp to the uri before calling t_relay, I
guess. I haven't tried that yet. All this for loose routed
requests.
This seems like a lot of work in the .cfg file which is better
done in rr/tm module.
I still think I must be doing something wrong as SER should
handle this automatically for loose routed requests.
Is using relay_to_udp not the proper way to force TCP to UDP
proxy of an INVITE?
Mark
On 9/29/05, *Klaus Darilion* <klaus.mailinglists(a)pernau.at
<mailto:klaus.mailinglists@pernau.at>> wrote:
Hi Mark!
I do not know it exactly, but I think the important thing is
the contact
header URI of the INVITE. Does it contain a transport=tcp
parameter?
Otherwise, ser is correct when using UDP.
klaus
Mark Aiken 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
------------------------------------------------------------------------
_______________________________________________
Serusers mailing list
serusers(a)lists.iptel.org <mailto:serusers@lists.iptel.org>
http://lists.iptel.org/mailman/listinfo/serusers
_______________________________________________
Serusers mailing list
serusers(a)lists.iptel.org <mailto:serusers@lists.iptel.org>
http://lists.iptel.org/mailman/listinfo/serusers