[Serusers] [Serdev] loose_route behaviour, detecting single Route with myself

JF jfkavaka at gmail.com
Wed Jul 11 17:07:22 CEST 2007


The scenario was actually using an Application Server.
The AS starts a call and sends an INVITE with tel URI to a SER which
is the entrypoint to my SIP infrastructure. The AS uses this SER as
outbound proxy, so it includes its SIP URI in a Route header.

The use-case for tel URI in the Req-URI here is that it will be the
task of my SIP infrastructure to determine if this tel URI is
associated to a SIP phone, or if it should be forwarded to a PSTN gw.

JF


On 7/11/07, Nils Ohlmeier <nils at iptel.org> wrote:
> Hello,
>
> I think the TEL URI was invented to make the live easier for PSTN gateways. So
> they should only be used between proxy's and gateways (or vice versa). This
> also means that a TEL URI should not be used routing between SIP proxies.
> IMHO basically the first fully SIP aware hop should turn the TEL URI into a
> SIP URI. That makes life of everybody easier.
>
> So I think that treating a TEL URI as a local URI (as if it would have one of
> the local domains) is not the correct solution.
>
> To understand the scenario a little bit better: in this an in-dialog request
> with a To-tag (then I'm wondering how this can happen), or is this an initial
> request without a To-tag (the devices uses your proxy as outbound proxy)?
>
> Regards
>   Nils
>
> On Thursday 28 June 2007 17:13:43 JF wrote:
> > 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 at 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 at gmail.com>
> > > Cc: serusers at iptel.org, openimscore-cscf at 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 at 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 at lists.iptel.org
> > > > > > http://lists.iptel.org/mailman/listinfo/serusers
> > > >
> > > > _______________________________________________
> > > > Serusers mailing list
> > > > Serusers at lists.iptel.org
> > > > http://lists.iptel.org/mailman/listinfo/serusers
> >
> > _______________________________________________
> > Serdev mailing list
> > Serdev at lists.iptel.org
> > http://lists.iptel.org/mailman/listinfo/serdev
>
>
>



More information about the sr-users mailing list