I would propose to simply apply this patch to
modules/rr/loose.c:
@@ -1069,8 +1069,8 @@
return -1;
}
- if (is_myself(&_m->parsed_uri.host, _m->parsed_uri.port_no)
- || _m->parsed_uri.type==TEL_URI_T ||
_m->parsed_uri.type==TELS_URI_T) {
+ if (_m->parsed_uri.type==TEL_URI_T ||
_m->parsed_uri.type==TELS_URI_T || +
is_myself(&_m->parsed_uri.host,
_m->parsed_uri.port_no)) {
DBG("loose_route: RURI is myself (or tel URI)\n");
if ((ret = is_myself(&puri.host, puri.port_no)) == 1 &&
!(enable_double_rr && is_2rr(&puri.params))) {
JF
On 6/22/07, Greger Viken Teigre <greger(a)teigre.com> wrote:
This seems like a corner case where the tel uri
with no domain results in
maybe a bit unfortunate return code from loose_route. Comments anyone?
g-)
------- Original message -------
From: JF <jfkavaka(a)gmail.com>
Cc: serusers(a)iptel.org, openimscore-cscf(a)lists.berlios.de
Sent: 22.6.'07, 11:11
> Thanks Greger,
>
> The problem is related to the fact that the Req-URI is a tel-URI.
> I had to work around it in the script by not letting loose_route get
> called when the URI is a tel URI.
>
> In loose.c, loose_route() says (by looking at the log):
> DBG("loose_route: RURI is NOT myself\n");
> because Req-URI doesn't have a host part.
>
> Then after_loose(_m, &puri, 1, 0) is called because the single
> existing Route header has our SIP URI.
> And then:
> DBG("after_loose: Topmost route URI: '%.*s' is me\n",
uri->len,
> ZSW(uri->s)); and
> DBG("after_loose: No next URI found\n");
> An since _ruri_myself == 0, return RR_DRIVEN;
>
> IMO the fact that the Req-URI is a tel URI shouldn't make loose_route
> return true in this case...
>
> JF
>
> On 6/21/07, Greger V. Teigre <greger(a)teigre.com> wrote:
> > If there's a single Route header pointing to itself, then this is a
> > good indication that a UA added a Route to your proxy as an outbound
> > proxy. If SER correctly identities the uri as itself, it should AFAIK
> > return false. Could you please turn on debugging and then look for
> > loose_route and after_loose debug messages in the logs and post them?
> > g-)
> >
> > JF wrote:
> > > Hi all,
> > >
> > > When SER receives an INVITE with a single Route header pointing to
> > > itself, it's supposed to delete it and process the message as if no
> > > Route header was there in the first place. This is what RFC3261
> > > mandates, right?
> > >
> > > But currently the loose_route function returns true to the script
> > > in this case, just like when more Route headers are present.
> > >
> > > So I have some routing logic for when no Route headers are present,
> > > and if I want to apply the same routing logic to the case when
> > > there is a single Route header pointing to myself (naturally, as
> > > it's the same as if no Route header was present), I currently have
> > > to replicate the same routing logic inside the if
> > > (loose_route())...
> > >
> > > Or is there an other way? Do I have to develop my own module
> > > function or use some regexp search from the script to detect if
> > > there are more Routes besides myself before I call loose_route?
> > >
> > > The best would be to change loose_route to return false and just
> > > remove the Route header pointing to myself when there are no more
> > > Route headers in the message... what do you think?
> > >
> > > JF
> > > _______________________________________________
> > > Serusers mailing list
> > > Serusers(a)lists.iptel.org
> > >
http://lists.iptel.org/mailman/listinfo/serusers
>
> _______________________________________________
> Serusers mailing list
> Serusers(a)lists.iptel.org
>
http://lists.iptel.org/mailman/listinfo/serusers
_______________________________________________
Serdev mailing list
Serdev(a)lists.iptel.org