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
_______________________________________________
Serusers mailing list
Serusers(a)lists.iptel.org