Robert,
Thank you. I was hoping to get that sort of explanation - that the
alternatives had been considered and the one in 3261 explicitly picked.
I knew that my example was contrived, and that it is equally possible to
contrive one for the documented behavior.
And no, I wasn't in Las Vegas. That had to be before I started following
sip. My knowledge of the history has holes like that.
Thanks,
Paul
Robert Sparks wrote:
>
> On Sep 8, 2008, at 12:01 PM, Paul Kyzivat wrote:
>
>> Robert,
>>
>> This wasn't my question, but I have wondered the same thing.
>>
>> Robert Sparks wrote:
>>> Hrmm - I'm not sure I see the confusion yet, but let me describe one
>>> concept that drove the text in that section to see if it helps. If,
>>> after you read this, you think there's still a lack of clarity, we'll
>>> start walking through the text and see if we can make it better (will
>>> you be at SIPit? We can do this in person if you will be).
>>
>> IMO its not that the text is confusing or ambiguous, but rather that
>> it is illogical.
>
> No - there was some logic there. I think the disconnect is in
> recognizing where services can place service logic (and when they would
> choose to have it happen, as you said, late or early).
>
>>
>>
>> Until the Route headers are exhausted, there is no guarantee that the
>> request will be going to the R-URI at all. It could be aborted or
>> redirected for a variety of reasons, including reasons that are based
>> on the value in the R-URI. By replacing the R-URI "early", the hops
>> based on the Route headers are deprived of the opportunity to examine
>> the R-URI as it was.
>
> Which can be a _goal_ of some applications (possibly even the primary
> goal).
>
> I don't remember if you were at the Interim meeting we had in Las Vegas
> many years ago. I described a feature there where I might want to be
> able to dial folks I know by the name I remember them by, but don't
> necessarily want them to know what that alias was. (Don't dwell on
> realizing this kind of application too hard).
>
>>
>>
>> If the R-URI is left alone until the Route headers are exhausted, and
>> the request hasn't yet failed, it will eventually get back to this
>> proxy based on the domain name in the R-URI. Then the proxy will have
>> the opportunity to replace the R-URI as it sees fit.
>
> We discussed this kind of thing at the time and came to consensus on
> retargeting while things were moving along. While bouncing through this
> service cloud, I might have feature A decide that stuff downstream
> really should be operating on my assistant's (hah) communication
> devices, not mine. Allowing what you describe as "early" retargeting
> lets that be realized. You could engineer things differently, so that
> the entire service chain got invoked and there were enough bits around
> to invoke the service chain _again_ (and nothing prevents you from
> building things this way now if you want to), but there were
> participants that had a more streamlined approach in mind.
>
>>
>>
>> Lets consider another contrived example:
>>
>> Alice and Bob both have example.net as their SP, including the same
>> home proxy.
>>
>> Alice also has subscribed to some services. These are provided by a
>> proxy service.example.net. Her UA gets:
>>
>> Service-Route: sip:example.net, sip:services.example.net
>>
>> One of the tasks of the services proxy is to screen outgoing calls,
>> blocking calls to destinations on a black list. In this case, Bob is a
>> boyfriend that her parents consider unacceptable, so they have added
>> his address to the blacklist, in an attempt to prevent her from
>> calling him. (Presumably there is also a blacklist on incoming calls,
>> but that isn't important to this example.)
>>
>> Then Alice attempts to call Bob:
>>
>> INVITE sip:[EMAIL PROTECTED]
>> Route: sip:example.net, sip:services.example.net
>>
>> This is delivered to example.net. According to 3261 as it is written,
>> the proxy should note that it is responsible for [EMAIL PROTECTED], and
>> so possibly
>
> possibly was an important word here.
>
> 3261 _allows_ it to retarget at this time. It doesn't _require_ it.
> The service provider built a broken service by combining these features
> in this way (feature-interaction is always fun).
>
>
>> translate it to the address of Bob's registered phone:
>> sip:some-phone.com. Then the call is routed to services.example.net.
>> It doesn't find the R-URI on its blacklist, so it just routes it on to
>> bob. Not what was desired (by policy, not Alice.)
>>
>> The alternative would be that the example.net proxy would route to
>> services.example.net without changing the R-URI. If the proxy finds
>> the R-URI on its blacklist it can reject the call, or redirect it
>> elsewhere. If Bob were *not* on the blacklist, it would simply route
>> based on the R-URI, back to example.net. In that case it would then
>> note there are no Route headers, and that it was responsible for the
>> R-URI. So then it would translate the R-URI to the address of Bob's
>> phone and route based on that.
>>
>> I realize that even if my view makes more sense its probably too late
>> to change. But I'm still interested in the logic behind why things are
>> the way they are.
>>
>> Thanks,
>> Paul
>>
>>> 3261 introduced loose-routing at proxies. Under the loose-routing
>>> rules, a proxy is able to retarget a request (that is, change its
>>> Request-URI) with much more independence of how it routes the request
>>> than 2543 proxies had.
>>> In the case you describe, a proxy can change the RURI in the requests
>>> it forwards. It can choose to push the request through several other
>>> proxies (the motivation was invoking services) by pushing additional
>>> Route URIs in front of whatever Route stack exists. (What it's not
>>> allowed to do is remove elements other than itself from that list of
>>> Route URIs).
>>> Here's a contrived example:
>>> Suppose a proxy that's responsible for example.com receives a request
>>> with a RURI of <sip:[EMAIL PROTECTED]> and a Route header field
>>> with this list
>>> "<sip:[EMAIL PROTECTED]>,<sip:[EMAIL PROTECTED]>.
>>> It will pop the [EMAIL PROTECTED] uri off the stack. If it has
>>> no other local policy to do work, it will forward the request to
>>> downstream.example.net. It has, however, the option of doing other
>>> work by local policy. In this contrived example, it is responsible
>>> for the RURI, and is going to retarget that request. Using whatever
>>> local information it has, it decides that this request should be
>>> retargeted to <sip:[EMAIL PROTECTED]> and routed through a
>>> service proxy at <sip:[EMAIL PROTECTED]> before it
>>> goes on to downstream.example.net. So the request it forwards will
>>> have a request URI of <sip:[EMAIL PROTECTED]> and a Route
>>> header field of
>>> <sip:[EMAIL PROTECTED]>,<sip:[EMAIL PROTECTED]>.
>>> Now the interesting thing (and this is where I think you might be
>>> running into confusion reading 16.5), is that the proxy could also
>>> decide to fork this request and retarget it to
>>> <sip:[EMAIL PROTECTED]> and route it through that same
>>> (or some different) service proxy. The only constraint is that it's
>>> got to go through downstream.example.net before its done.
>>> Rereading your original question, I'll point out that nothing changes
>>> if the original request showed up without the
>>> <sip:[EMAIL PROTECTED]> in the topmost route other than the
>>> topmost route not getting popped. This proxy is still responsible for
>>> the RURI and will make sure the request goes through the routeset the
>>> request showed up with.
>>> Hope this helps,
>>> RjS
>>> On Sep 8, 2008, at 12:07 AM, Franz Edler wrote:
>>>> Hello experts!
>>>>
>>>> Reading chapter 16.5 of RFC 3261 a question came up and maybe anyone
>>>> can
>>>> answer.
>>>>
>>>> When a proxy server receives a request where it recognises that it is
>>>> responsible for (based on the domain part of the request URI) but
>>>> the Route
>>>> header field is not empty how does it proceed?
>>>>
>>>> According to chapter 16.5 of RFC 3261 it ignores the Route header and
>>>> determines the new targets with the help of the location service.
>>>>
>>>> In my view (until recently) the proxy forwards the request to the
>>>> next hop
>>>> based on the next Route header field and only checks if it is
>>>> responsible
>>>> for the request when the Route header is empty. But maybe I have to
>>>> correct
>>>> my view.
>>>>
>>>> Any clarification appreciated.
>>>>
>>>> Regards
>>>> Franz
>>>>
>>>> _______________________________________________
>>>> Sip-implementors mailing list
>>>> [email protected]
>>>> https://lists.cs.columbia.edu/cucslists/listinfo/sip-implementors
>
>
_______________________________________________
Sip-implementors mailing list
[email protected]
https://lists.cs.columbia.edu/cucslists/listinfo/sip-implementors