Route
Click on the red underlined text to get to the source
... Contact contains a SIP or SIPS URI that represents a direct route to
contact Alice, usually composed of a username at a fully qualified
domain name ...
... INVITE has
been received and that the proxy is working on her behalf to route
the INVITE to the destination ...
... service lookups were
required to route the initial INVITE, the 180 (Ringing) response can
be returned to the caller ...
... INVITE a required routing header field known as Record-
Route that contained a URI resolving to the hostname or IP address of
...
... proxy. This information would be received by both Bob's SIP
phone and (due to the Record-Route header field being passed back in
the 200 (OK)) Alice's softphone and stored for the duration of the
dialog. The biloxi.com proxy server ...
... routing if it follows
the procedures defined in this specification for processing of
the Route header field. These procedures separate the
destination ...
... the set of proxies that need to be visited along the way
(present in the Route header field). A proxy compliant to
...
... which represent a list of proxies that must be traversed when
sending a particular request. A route set can be learned,
through headers like Record-Route ...
... route set can be learned,
through headers like Record-Route, or it can be configured.
Server: A server is a network element ...
... proxy is said to be strict routing if it follows
the Route processing rules of RFC 2543(-> 3265prop | 3264prop | 3263prop | 3262prop | 3261prop) and many prior work in
progress ...
... proxies to
destroy the contents of the Request-URI when a Route header
field was present. Strict routing behavior is not used in this
...
... header fields which are
needed for proxy processing (Via, Route, Record-Route, Proxy-Require,
...
... needed for proxy processing (Via, Route, Record-Route, Proxy-Require,
Max-Forwards, and Proxy ...
... Route: <sip:carol@chicago.com>
Route: <sip:alice@atlanta.com>, <sip:bob@biloxi.com>
Route: <sip:carol@chicago.com>
...
... Route: <sip:alice@atlanta.com>, <sip:bob@biloxi.com>
Route: <sip:carol@chicago.com>
Subject: Lunch
...
... Subject: Lunch
Route: <sip:alice@atlanta.com>, <sip:bob@biloxi.com>,
<sip:carol@chicago.com>
...
... Route: <sip:carol@chicago.com>
Route: <sip:alice@atlanta.com>,<sip:carol@chicago.com>,
<sip:bob@biloxi.com>
...
... transit).
In some special circumstances, the presence of a pre-existing route
set can affect the Request-URI of the message. A pre-existing route ...
... route
set can affect the Request-URI of the message. A pre-existing route
set is an ordered set of URIs that identify a chain of servers, to
...
... UA with an outbound proxy, it is RECOMMENDED
that this be done by providing it with a pre-existing route set with
a single URI, that of the outbound proxy ...
... outbound proxy.
When a pre-existing route set is present, the procedures for
populating the Request-URI and Route ...
... route set is present, the procedures for
populating the Request-URI and Route header field detailed in Section
12.2.1.1 MUST be followed (even though there is no dialog), using the
...
...
If the Request-URI or top Route header field value contains a SIPS
URI, the Contact header field ...
... 4] as follows. If the
first element in the route set indicated a strict router (resulting
in forming the request as described in Section 12.2.1.1), the
...
... procedures MUST be applied to the Request-URI of the request.
Otherwise, the procedures are applied to the first Route header field
value in the request (if one exists), or to the request's Request-URI ...
... value in the request (if one exists), or to the request's Request-URI
if there is no Route header field present. These procedures yield an
ordered set of address ...
... TLS. Beyond that, there are no restrictions
on the alternate destinations if the request contains no Route header
field. This provides a simple alternative to a pre-existing route
...
... destinations if the request contains no Route header
field. This provides a simple alternative to a pre-existing route
set as a way to specify an outbound proxy. However, that approach
...
... for configuring an outbound proxy is NOT RECOMMENDED; a pre-existing
route set with a single URI SHOULD be used instead. If the request
contains a Route ...
... route set with a single URI SHOULD be used instead. If the request
contains a Route header field, the request SHOULD be sent to the
locations derived from its topmost value, but MAY be sent to any
...
... locations derived from its topmost value, but MAY be sent to any
server that the UA is certain will honor the Route and Request-URI
policies specified in this document (as opposed to those in RFC
...
...
attempt to send the request to the location indicated in the first
Route header field value instead of adopting the policy of sending
all messages to the outbound proxy ...
...
This ensures that outbound proxies that do not add Record-Route
header field values will drop out of the path of subsequent
requests. It allows endpoints that cannot resolve the first Route ...
... Record-Route
header field values will drop out of the path of subsequent
requests. It allows endpoints that cannot resolve the first Route
URI to delegate that task to an outbound proxy ...
... transaction in its own right (See Section 17).
If the request being cancelled contains a Route header field, the
CANCEL request MUST include that Route ...
... REGISTER request does not establish a dialog. A UAC MAY include a
Route header field in a REGISTER request based on a pre-existing
...
... header field in a REGISTER request based on a pre-existing
route set as described in Section 8.1. The Record-Route header field
has no meaning in REGISTER ...
... REGISTER request based on a pre-existing
route set as described in Section 8.1. The Record-Route header field
has no meaning in REGISTER requests or responses, and MUST be ignored
...
... if present. In particular, the UAC MUST NOT create a new route set
based on the presence or absence of a Record-Route ...
... route set
based on the presence or absence of a Record-Route header field in
any response to a REGISTER ...
... proxy server in the chicago.com
domain to route requests for Carol's address-of-record to her SIP
endpoint.
...
... interface with a 302 (Moved Temporarily) response.
Registrars MUST ignore the Record-Route header field if it is
included in a REGISTER request. Registrars MUST NOT include a
Record ...
... included in a REGISTER request. Registrars MUST NOT include a
Record-Route header field in any response to a REGISTER request.
...
... URI, remote target, a boolean
flag called "secure", and a route set, which is an ordered list of
URIs. The route ...
... route set, which is an ordered list of
URIs. The route set is the list of servers that need to be traversed
to send a request to the peer. A dialog can also be in the "early"
state ...
... dialog (such as a 2xx to INVITE), the UAS MUST copy all Record-Route
header field values from the request into the response (including the
URIs, URI parameters ...
... URIs, URI parameters, and any Record-Route header field parameters,
whether they are known or unknown to the UAS) and MUST maintain the
...
... SIPS URI in the Request-URI or in the top Record-Route header field
value, if there was any, or the Contact header field if there was no
...
... value, if there was any, or the Contact header field if there was no
Record-Route header field, the Contact header field in the response
MUST be a SIPS URI ...
... SIPS
URI, the "secure" flag is set to TRUE.
The route set MUST be set to the list of URIs in the Record-Route
header field from the request, taken in order and preserving all URI
parameters ...
... The route set MUST be set to the list of URIs in the Record-Route
header field from the request, taken in order and preserving all URI
parameters. If no Record-Route header field is present in the
...
... URIs in the Record-Route
header field from the request, taken in order and preserving all URI
parameters. If no Record-Route header field is present in the
request, the route set MUST be set to the empty set. This route ...
... URI
parameters. If no Record-Route header field is present in the
request, the route set MUST be set to the empty set. This route set,
even if empty, overrides any pre-existing route ...
... Record-Route header field is present in the
request, the route set MUST be set to the empty set. This route set,
even if empty, overrides any pre-existing route set for future
...
... route set MUST be set to the empty set. This route set,
even if empty, overrides any pre-existing route set for future
requests in this dialog. The remote target MUST be set to the URI ...
... header field of the request. If the request has a Request-
URI or a topmost Route header field value with a SIPS URI, the
...
... SIPS URI, the "secure" flag is set to TRUE.
The route set MUST be set to the list of URIs in the Record-Route
header field from the response, taken in reverse order and preserving
...
... The route set MUST be set to the list of URIs in the Record-Route
header field from the response, taken in reverse order and preserving
all URI parameters. If no Record-Route header field ...
... Record-Route
header field from the response, taken in reverse order and preserving
all URI parameters. If no Record-Route header field is present in
the response, the route set MUST be set to the empty set. This route ...
... URI parameters. If no Record-Route header field is present in
the response, the route set MUST be set to the empty set. This route
set, even if empty, overrides any pre-existing route ...
... Record-Route header field is present in
the response, the route set MUST be set to the empty set. This route
set, even if empty, overrides any pre-existing route set for future
...
... route set MUST be set to the empty set. This route
set, even if empty, overrides any pre-existing route set for future
requests in this dialog. The remote target MUST be set to the URI ...
... established the dialog.
Requests within a dialog MAY contain Record-Route and Contact header
fields. However, these requests do not cause the dialog's route set
...
... Requests within a dialog MAY contain Record-Route and Contact header
fields. However, these requests do not cause the dialog's route set
to be modified, although they may modify the remote target URI ...
... target URI,
and not the route set formed from the Record-Route. Updating the
latter would introduce severe backwards compatibility ...
... URI,
and not the route set formed from the Record-Route. Updating the
latter would introduce severe backwards compatibility problems with
...
... header field of the request.
If the route set is empty, the UAC MUST place the remote target URI ...
... If the route set is not empty, and the first URI in the route set
contains the lr parameter (see Section 19.1.1), the UAC MUST place
...
... parameters.
If the route set is not empty, and its first URI does not contain the
lr parameter, the UAC ...
... lr parameter, the UAC MUST place the first URI from the route set
into the Request-URI, stripping any parameters that are not allowed
...
... in a Request-URI. The UAC MUST add a Route header field containing
the remainder of the route ...
... Route header field containing
the remainder of the route set values in order, including all
parameters. The UAC MUST then place the remote target ...
... METHOD sip:proxy1
Route: <sip:proxy2>,<sip:proxy3;lr>,<sip:proxy4>,<sip:user@remoteua>
If the first URI ...
...
If the first URI of the route set does not contain the lr
parameter, the proxy indicated does not understand the routing ...
... RFC 2543(-> 3265prop | 3264prop | 3263prop | 3262prop | 3261prop), replacing the Request-URI with the first Route header
field value it receives while forwarding the message. Placing the
Request-URI ...
... header
field value it receives while forwarding the message. Placing the
Request-URI at the end of the Route header field preserves the
...
... The procedures in Section 8.1.2 will normally result in the
request being sent to the address indicated by the topmost Route
header field value or the Request-URI ...
... to be sent to an alternate address (such as a default outbound
proxy not represented in the route set).
...
... Note, however, that when the UAC tries alternative locations, it
still uses the route set for the dialog to build the Route header
...
... UAC tries alternative locations, it
still uses the route set for the dialog to build the Route header
of the request.
...
... increasing CSeq sequence numbers even across reboots, reconstructing
the route set, and accepting out-of-range RTP timestamps ...
... identifier of an existing dialog, the dialog MUST be transitioned to
the "confirmed" state, and the route set for the dialog MUST be
recomputed based on the 2xx response using the procedures of Section
12.2.1.2. Otherwise, a new dialog in the "confirmed" state ...
...
Note that the only piece of state that is recomputed is the route
set. Other pieces of state such as the highest sequence numbers ...
... sequence numbers
(remote and local) sent within the dialog are not recomputed. The
route set only is recomputed for backwards compatibility. RFC
2543(-> 3265prop | 3264prop | 3263prop | 3262prop | 3261prop) ...
... backwards compatibility. RFC
2543(-> 3265prop | 3264prop | 3263prop | 3262prop | 3261prop) did not mandate mirroring of the Record-Route header field in
a 1xx, only 2xx. However, we cannot update the entire state ...
... decisions, modifying the request before forwarding it to the next
element. Responses will route through the same set of proxies
traversed by the request in the reverse order.
...
... proxy core. The proxy core determines where to route the request,
choosing one or more next-hop locations. An outgoing request for
...
... Route Information Preprocessing ...
... proxy previously
placed into a Record-Route header field (see Section 16.6 item 4),
the proxy ...
... proxy MUST replace the Request-URI in the request with the last
value from the Route header field, and remove that value from the
...
... header field, and remove that value from the
Route header field. The proxy MUST then proceed as if it received
...
... state in order
to detect URIs it previously placed in Record-Route header fields.
Instead, a proxy ...
... expressed as a SIP or SIPS URI, is inserted as the top-most Route
header field value into the request.
...
... in a request.
4. Record-Route
If this proxy ...
... creates a dialog), it MUST insert a Record-Route header field
value into the copy before any existing Record-Route header
field ...
... Route header field
value into the copy before any existing Record-Route header
field values, even if a Route header field is already present.
...
... header field
value into the copy before any existing Record-Route header
field values, even if a Route header field is already present.
...
... header field is already present.
Requests establishing a dialog may contain a preloaded Route
header field.
...
... proxy SHOULD
insert a Record-Route header field value if it wishes to remain
on the path of future requests in the dialog. In normal
...
... endpoint operation as described in Section 12, these Record-
Route header field values will not have any effect on the route
...
... The proxy will remain on the path if it chooses to not insert a
Record-Route header field value into requests that are already
part of a dialog. However, it would be removed ...
... A proxy MAY insert a Record-Route header field value into any
request. If the request does not initiate a dialog, the
...
... endpoints will ignore the value. See Section 12 for details on
how endpoints use the Record-Route header field values to
construct Route header fields ...
... Each proxy in the path of a request chooses whether to add a
Record-Route header field value independently - the presence of
a Record ...
... header field value independently - the presence of
a Record-Route header field in a request does not obligate this
proxy ...
...
The URI placed in the Record-Route header field MUST resolve to
the element inserting it (or a suitable stand-in) when the
...
... Request-URI contains a SIPS URI, or the topmost Route header
field value (after the post processing of bullet 6) contains a
SIPS URI ...
... SIPS URI, the URI placed into the Record-Route header field
MUST be a SIPS URI. Furthermore, if the request was not
...
... TLS, the proxy MUST insert a Record-Route header
field. In a similar fashion, a proxy that receives a request
...
... SIPS URI in the
Request-URI or topmost Route header field value (after the post
processing of bullet 6), MUST insert a Record ...
... header field value (after the post
processing of bullet 6), MUST insert a Record-Route header
field that is not a SIPS URI.
...
...
If the URI placed in the Record-Route header field needs to be
rewritten when it passes back through in a response, the URI
...
... may spiral through this proxy, resulting in more than one
Record-Route header field value being added). Item 8 of
Section 16.7 recommends a mechanism to make the URI
...
...
The proxy MAY include parameters in the Record-Route header
field value. These will be echoed in some responses to the
request such as the 200 (OK) responses to INVITE. Such
...
... as one straddling a firewall), it SHOULD add a Record-Route
header field value to every request with a method ...
... Endpoints MUST NOT use a URI obtained from a Record-Route
header field outside the dialog in which it was provided. See
...
... service.
The Record-Route process is designed to work for any SIP
request that initiates a dialog. INVITE is the only such
...
... URIs
(each of which contains the lr parameter). This set MUST be
pushed into the Route header field of the copy ahead of any
existing values, if present. If the Route ...
... Route header field of the copy ahead of any
existing values, if present. If the Route header field is
absent, it MUST be added, containing that list of URIs ...
... proxy has a local policy that mandates that the request
visit one specific proxy, an alternative to pushing a Route
value into the Route header field ...
... proxy, an alternative to pushing a Route
value into the Route header field is to bypass the forwarding
...
... transport for that specific proxy. If
the request has a Route header field, this alternative MUST NOT
be used unless it is known that next hop ...
... proxy is a loose
router. Otherwise, this approach MAY be used, but the Route
insertion mechanism above is preferred for its robustness,
flexibility, generality and consistency ...
...
Appending the Request-URI to the Route header field is part of
a mechanism used to pass the information in that Request-URI ...
... through strict-routing elements. "Popping" the first Route
header field value into the Request-URI ...
... URI in the Request-URI and the next location to visit in
the first Route header field value).
...
... port, and transport, independent of the
values of the Route and Request-URI. Such a policy MUST NOT be
used if the proxy ...
... However, this mechanism for sending the request through a
specific next hop is NOT RECOMMENDED; instead a Route header
field should be used for that purpose as described above.
...
... Request-URI of the request. Otherwise, the proxy MUST apply
the procedures to the first value in the Route header field, if
present, else the Request-URI ...
... processing of the request have not changed. The value placed
in this part of the branch parameter SHOULD reflect all of
those fields (including any Route, Proxy-Require and Proxy-
...
... header field values if necessary
8. Optionally rewrite Record-Route header field values
9. Forward the response
...
... Authorization Header Field
Values" through "Record-Route".
This step, combined with the next, ensures that a stateful
...
... Motivation for this behavior is provided in Section 26.
8. Record-Route
If the selected response contains a Record ...
...
If the selected response contains a Record-Route header field
value originally provided by this proxy ...
... constraints on URIs placed in Record-Route header fields in
requests (see Step 4 of Section 16.6) with the following
...
...
When a proxy does decide to modify the Record-Route header
field in the response, one of the operations it performs is
locating the Record-Route value that it had inserted. If the
...
... proxy does decide to modify the Record-Route header
field in the response, one of the operations it performs is
locating the Record-Route value that it had inserted. If the
request spiraled, and the proxy inserted a Record ...
... request spiraled, and the proxy inserted a Record-Route value
in each iteration of the spiral, locating the correct value in
the response (which must be the proper iteration in the reverse
...
... direction) is tricky. The rules above recommend that a proxy
wishing to rewrite Record-Route header field values insert
sufficiently distinct URIs into the Record-Route header field ...
... Record-Route header field values insert
sufficiently distinct URIs into the Record-Route header field
so that the right one may be selected for rewriting. A
RECOMMENDED mechanism to achieve this is for the proxy ...
... When the response arrives, the proxy modifies the first
Record-Route whose identifier matches the proxy instance. The
...
... URI. Upon the next
iteration, the same algorithm (find the topmost Record-Route
header field value with the parameter) will correctly extract
the next Record-Route header field value inserted by that
...
... algorithm (find the topmost Record-Route
header field value with the parameter) will correctly extract
the next Record-Route header field value inserted by that
proxy.
...
... Not every response to a request to which a proxy adds a
Record-Route header field value will contain a Record-Route ...
... Route header field value will contain a Record-Route
header field. If the response does contain a Record ...
... header field. If the response does contain a Record-Route
header field, it will contain the value the proxy ...
... Authorization Header Field Values" through "Record-Route", the
proxy MAY perform any feature specific manipulations on the
...
... request. In particular, if the proxy inserts a Record-Route
value or pushes URIs into the Route ...
... Route
value or pushes URIs into the Route header field, it MUST place
the same values in retransmissions ...
... requests. In particular, a stateless proxy applies the same Route
header field processing to CANCEL requests that it applies to any
...
... In the absence of local policy to the contrary, the processing a
proxy performs on a request containing a Route header field can be
summarized in the following steps.
...
... 2. The proxy will inspect the URI in the topmost Route header
field value. If it indicates this proxy, the proxy ...
... proxy will forward the request to the resource indicated
by the URI in the topmost Route header field value or in the
Request-URI ...
... header field value or in the
Request-URI if no Route header field is present. The proxy
determines the address ...
... Contact: sip:caller@u1.example.com
Record-Route: <sip:p1.example.com;lr>
P2 gets this. It is responsible for domain ...
... service and rewrites the Request-URI. It also adds a Record-Route
header field value. There is no Route ...
... Route
header field value. There is no Route header field, so it resolves
the new Request-URI ...
... Record-Route: <sip:p2.domain.com;lr>
Record-Route: <sip:p1.example.com;lr>
The callee at u2.domain ...
... Record-Route: <sip:p2.domain.com;lr>
Record-Route: <sip:p1.example.com;lr>
The callee at u2 also sets its dialog state ...
... URI to sip:callee@u2.domain.com and its
route set to:
(<sip:p1.example.com;lr>,<sip:p2.domain ...
... domain.com;lr>)
Since all the route set elements contain the lr parameter, U1
constructs the following BYE request:
...
... proxies) would do, it resolves the
URI in the topmost Route header field value using DNS to determine
...
... Request-URI so it
doesn't change it. It does see that it is the first value in the
Route header field, so it removes that value, and forwards the
...
... u2.domain.com), so it doesn't change it. It does see itself in the
first Route header field value, so it removes it and forwards the
...
... In this scenario, a dialog is established across four proxies, each
of which adds Record-Route header field values. The third proxy
implements the strict-routing ...
... Record-Route: <sip:p4.domain.com;lr>
Record-Route: <sip:p3.middle.com>
Record-Route: <sip:p2.example.com;lr>
...
... Record-Route: <sip:p3.middle.com>
Record-Route: <sip:p2.example.com;lr>
Record-Route: <sip:p1.example.com;lr>
...
... Record-Route: <sip:p2.example.com;lr>
Record-Route: <sip:p1.example.com;lr>
Which U2 responds to with a 200 OK. Later, U2 sends the following
...
...
Which U2 responds to with a 200 OK. Later, U2 sends the following
BYE request to P4 based on the first Route header field value.
...
... Route: <sip:p2.example.com;lr>
Route: <sip:p1.example.com;lr>
P4 is not responsible for the resource indicated in the Request-URI ...
... so it will leave it alone. It notices that it is the element in the
first Route header field value so it removes it. It then prepares to
...
... header field value so it removes it. It then prepares to
send the request based on the now first Route header field value of
sip:p3.middle.com, but it notices that this URI ...
... P2 sees the request-URI is a value it placed into a Record-Route
header field, so before further processing, it rewrites the request
...
... caller@u1.example.com SIP/2.0
Route: <sip:p1.example.com;lr>
P2 is not responsible for u1.example.com, so it sends the request to
...
...
P2 is not responsible for u1.example.com, so it sends the request to
P1 based on the resolution of the Route header field value.
...
... header field value.
P1 notices itself in the topmost Route header field value, so it
removes ...
... SIP/2.0
Since P1 is not responsible for u1.example.com and there is no Route
header field, P1 will forward the request to u1.example.com based on
...
... Rewriting Record-Route Header Field Values ...
... Contact: <sip:caller@u1.leftprivatespace.com>
Record-Route: <sip:gateway.rightprivatespace.com;lr>
...
... SIP/2.0 200 OK
Contact: <sip:callee@u2.rightprivatespace.com>
Record-Route: <sip:gateway.rightprivatespace.com;lr>
...
... gateway.rightprivatespace.com;lr>
P1 rewrites its Record-Route header parameter to provide a value that
U1 will find useful, and sends the following to U1:
...
... SIP/2.0 200 OK
Contact: <sip:callee@u2.rightprivatespace.com>
Record-Route: <sip:gateway.leftprivatespace.com;lr>
...
... BYE sip:callee@u2.rightprivatespace.com SIP/2.0
Route: <sip:gateway.leftprivatespace.com;lr>
...
...
If the INVITE request whose response is being acknowledged had Route
header fields, those header fields ...
... accommodates the fact that the response in SIP can be larger than
the request. This happens due to the addition of Record-Route
header field values to the responses to INVITE, for example. With
the extra buffer ...
... REGISTER
request or a redirect response, or in a Record-Route header field in
a request or response. A URI ...
... URI to specify a proxy that must be
traversed en-route to the destination. Continuing to use the
maddr parameter this way is strongly discouraged (the
...
... maddr parameter this way is strongly discouraged (the
mechanisms that enable it are deprecated). Implementations
should instead use the Route mechanism described in this
document, establishing a pre-existing route set if necessary
...
... should instead use the Route mechanism described in this
document, establishing a pre-existing route set if necessary
(see Section 8.1.1.1). This provides a full URI to describe
...
... URIs proxies place into Record-Route header field values, and
may appear in the URIs in a pre-existing route ...
... Record-Route header field values, and
may appear in the URIs in a pre-existing route set.
This parameter is used to achieve backwards compatibility ...
... reg./redir. Contact/
default Req.-URI To From Contact R-R/Route external
user -- o o o o o o
password -- o o o o o o
...
... An implementation SHOULD NOT honor these obviously dangerous header
fields: From, Call-ID, CSeq, Via, and Record-Route.
An implementation SHOULD NOT honor any requested Route ...
... Record-Route.
An implementation SHOULD NOT honor any requested Route header field
values in order to not be used as an unwitting agent ...
... Proxy-Require R ar - o - o o o
Record-Route R ar o o o o o -
Record-Route 2xx,18x mr - o o o o -
...
... 500,503 - o o o o o
600,603 - o o o o o
Route R adr c c c c c c
Server r - o o o o o
Subject ...
...
This allows automatic call distribution systems to route return
calls to the originator of the first call. This also allows
callees to filter ...
