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

Nils Ohlmeier nils at iptel.org
Wed Jul 11 16:31:54 CEST 2007


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