<?xml version='1.0'?>
<!DOCTYPE rfc SYSTEM 'rfcXXXX.dtd'>
<?rfc strict="yes" ?>
<?rfc toc="yes" ?>
<rfc ipr='full3978' category="std" docName='draft-worley-redundancy-response-03'>

<front>
<title abbrev='Supporting Path Redundancy'>
Supporting Multiple Path Routing in the Session Initiation Protocol (SIP)
</title>
<author initials='D. R.' surname='Worley' fullname='Dale R. Worley'>
       <organization abbrev='Bluesocket'>
       Bluesocket Inc.
       </organization>
   <address>
       <postal>
           <street>10 North Ave.</street>
           <city>Burlington</city>
           <region>MA</region>
           <code>01803</code>
           <country>US</country>
       </postal>
       <phone>+1 781 229 0533 x173</phone>
       <email>dworley@pingtel.com</email>
       <uri>http://www.pingtel.com</uri>
   </address>
</author>
<date month='July' year='2008' />
<area>Transport</area>
<workgroup>SIP</workgroup>
<keyword></keyword>
<abstract>
<t>
An increasing number of SIP
architectures implement multiple path routing (MPR), which is the
providing of more than one path for a call to reach a destination user
agent (UA).  To implement MPR well, the proxy which forks
a request onto the redundant paths needs to be able to determine if a fork that
failed reached the destination UA and was rejected by the UA (and so
an alternate path should not be tried), or if
the fork failed before reaching the UA (and so an alternate path
should be attempted).
This document is to begin a discussion of strategies for making this
determination.
</t>
</abstract>
</front>

<middle>

<section title='Background' anchor='background'>

<t>
An increasing number of Session Initiation Protocol (SIP) <xref target='rfc3261'/>
system architectures implement multiple path routing (MPR), the feature of
providing more than one path for a call to reach a destination user
agent (UA).  (MPR is also called path redundancy (PR) or alternate
path retry (APR).)
Typical situations are:

<list style='symbols'>
<t>
multiple gateway devices that connect a SIP network to the PSTN,
such that if one gateway is occupied to capacity, calls should be
routed to the next gateway
</t>

<t>
a PSTN gateway device as fallback when SIP connection over the
public Internet fails
</t>

<t>
sending a request to multiple services that determine how to reach a
destination, with an order of precedence among the services as to
which service is to be
used (e.g., connecting to an ENUM contact, falling back to a PSTN gateway)
</t>
</list>
</t>

<t>
From a protocol point of view, a proxy is presented with the situation
where a request (typically an INVITE) should be serially forked to
more than one SIP URI, and from an application-layer point of view,
all of the URIs are expected to ultimately reach the same user agent
(UA).  Of course, if one fork of the request succeeds at the
destination UA, the proxy should not attempt any further forks.
</t>

<t>
If the forked request failed and did not reach the destination UA,
then in order
implement MPR, the proxy must attempt the next fork.  But if the
request did reach the destination UA, and the UA returned a failure
response, sending the request to the same UA via a different path is
unlikely to yield success, and may even
degrade the user experience.  For example, if the first request was not
accepted by the attending human (ring-no-answer), sending a second
request to the UA by a different path, which will cause the UA to
alert again, is not the desired behavior.
</t>

<t>
The purpose of this document is to open the discussion of methods by
which the proxy can implement the desired behavior.
</t>

<t>
Two subordinate problems are contained in the main problem:  One is
how the proxy becomes aware that a request to be forked is a MPR
situation.  Another is the question of when two destinations are
to be considered to be "the same", and so constitute an MPR set.
</t>

</section>

<section title="Proposed Solutions">

<t>
This section discusses proposed solutions to the problem.
</t>

<t>
One possible solution is to split the failure response codes into two
groups, one of which is only generated by proxies, the other is only
generated by UAs.  Then the response code from a failed fork should
identify whether the call reached a destination UA or not.  Most
current failure response codes fall into one or the other of these two
classes, but several of them can be generated by either proxies or
user agents.  In addition, the rules for choosing the "best" response from
among the set of responses from a set of forks must be adjusted to
give preference to UA-generated responses, which causes difficulties
in some situations where the UAC might be able to amend its request in
ways that increase its chances of success.
</t>

<t>
Other possible approaches to this problem are solicited.
</t>

</section>

<section title="Security Considerations">

<t>
Alternate path retry presents no security considerations that are known to the
author beyond what is present in non-MPR SIP system architectures.
</t>

</section>

<section title='Revision History' anchor='revision'>

<section title='draft-worley-sip-redundancy-response-00' anchor='00'>

<t>
First version.
</t>

</section>

<section title='Changes from draft-worley-sip-redundancy-response-00 to draft-worley-sip-redundancy-response-01' anchor='00-01'>

<t>
Add note that the new variant of 500 would be like "reorder" in the PSTN.
</t>

<t>
Add note that dealing with 402 can be postponed to
when 402 is standardized.
</t>

<t>
Add section proposing how to split response codes.
</t>

</section>

<section title='Changes from draft-worley-sip-redundancy-response-01 to draft-worley-sip-redundancy-response-02' anchor='01-02'>

<t>
Narrow the scope of the document to be a problem description.
</t>

</section>

<section title='Changes from draft-worley-sip-redundancy-response-02 to draft-worley-sip-redundancy-response-03' anchor='02-03'>

<t>
Refresh I-D.
</t>

<t>
Improve wording in some places.
</t>

</section>

</section>

</middle>

<back>

<references title='Normative References'>

<reference anchor='rfc3261'>
<!-- RFC 3261 -->
    <front>
	<title>SIP: Session Initiation Protocol</title>
        <author initials='J.' surname='Rosenberg'><organization/></author>
        <author initials='H.' surname='Schulzrinne'><organization/></author>
        <author initials='G.' surname='Camarillo'><organization/></author>
        <author initials='A.' surname='Johnston'><organization/></author>
        <author initials='J.' surname='Peterson'><organization/></author>
        <author initials='R.' surname='Sparks'><organization/></author>
        <author initials='M.' surname='Handley'><organization/></author>
        <author initials='E.' surname='Schooler'><organization/></author>
	<date month='June' year='2002'/>
    </front>
    <seriesInfo name='RFC' value='3261'/>
    <format type='TXT'
            target='ftp://ftp.isi.edu/in-notes/rfc3261.txt' />
</reference>

</references>

</back>

</rfc>
