Table Of Contents
Information About SIP—SIP Stack Portability
Feature Information for SIP—SIP Stack Portability
SIP—SIP Stack Portability
Implements capabilities to the SIP gateway Cisco IOS stack involving user-agent handling of messages, handling of unsolicited messages, support for outbound delayed media, and SIP headers and content in requests and responses.
Prerequisites
Cisco Unified Border Element
•
Cisco IOS Release 12.4(2)T or a later release must be installed and running on your Cisco Unified Border Element.
Cisco Unified Border Element (Enterprise)
•
Cisco IOS XE Release 2.5 or a later release must be installed and running on your Cisco ASR 1000 Series Router.
Information About SIP—SIP Stack Portability
The SIP Stack Portability feature implements the following capabilities to the Cisco IOS SIP gateway stack:
•
It receives inbound Refer message requests both within a dialog and outside of an existing dialog from the user agents (UAs).
•
It sends and receives SUBSCRIBE or NOTIFY message requests via UAs.
•
It receives unsolicited NOTIFY message requests without having to subscribe to the event that was generated by the NOTIFY message request.
•
It supports outbound delayed media.
It sends an INVITE message request without Session Description Protocol (SDP) and provides SDP information in either the PRACK or ACK message request for both initial call establishment and mid-call re-INVITE message requests.
•
It sets SIP headers and content body in requests and responses.
The stack applies certain rules and restrictions for a subset of headers and for some content types (such as SDP) to protect the integrity of the stack's functionality and to maintain backward compatibility. When receiving SIP message requests, it reads the SIP header and any attached body without any restrictions.
To make the best use of SIP call-transfer features, you should understand the following concepts:
SIP Call-Transfer Basics
This section contains the following information:
•
Basic Terminology of SIP Call Transfer
•
Types of SIP Call Transfer Using the Refer Message Request
Basic Terminology of SIP Call Transfer
Call transfer allows a wide variety of decentralized multiparty call operations. These decentralized call operations form the basis for third-party call control, and thus are important features for VoIP and SIP. Call transfer is also critical for conference calling, where calls can transition smoothly between multiple point-to-point links and IP-level multicasting.
Refer Message Request
The SIP Refer message request provides call-transfer capabilities to supplement the SIP BYE and ALSO message requests already implemented on Cisco IOS SIP gateways. The Refer message request has three main roles:
•
Originator—User agent that initiates the transfer or Refer request.
•
Recipient—User agent that receives the Refer request and is transferred to the final-recipient.
•
Final-Recipient—User agent introduced into a call with the recipient.
![]()
Note
A gateway can be a recipient or final recipient, but not an originator.
The Refer message request always begins within the context of an existing call and starts with the originator. The originator sends a Refer request to the recipient (user agent receiving the Refer request) to initiate a triggered INVITE request. The triggered INVITE request uses the SIP URL contained in the Refer-To header as the destination of the INVITE request. The recipient then contacts the resource in the Refer-To header (final recipient), and returns a SIP 202 (Accepted) response to the originator. The recipient also must notify the originator of the outcome of the Refer transaction—whether the final recipient was successfully contacted or not. The notification is accomplished using the SIP NOTIFY message request, SIP's event notification mechanism. A NOTIFY message with a message body of SIP 200 OK indicates a successful transfer, and a message body of SIP 503 Service Unavailable indicates an unsuccessful transfer. If the call was successful, a call between the recipient and the final recipient results.
Figure 1 represents the call flow of a successful Refer transaction initiated within the context of an existing call.
Figure 1 Successful Refer transaction
![]()
Refer-To Header
The recipient receives from the originator a Refer request that always contains a single Refer-To header. The Refer-To header includes a SIP URL that indicates the party to be invited and must be in SIP URL format.
![]()
Note
The TEL URL format cannot be used in a Refer-To header, because it does not provide a host portion, and without one, the triggered INVITE request cannot be routed.
The Refer-To header may contain three additional overloaded headers to form the triggered INVITE request. If any of these three headers are present, they are included in the triggered INVITE request. The three headers are:
•
Accept-Contact—Optional in a Refer request. A SIP Cisco IOS gateway that receives an INVITE request with an Accept-Contact does not act upon this header. This header is defined in draft-ietf-sip-callerprefs-03.txt and may be used by user agents that support caller preferences.
•
Proxy-Authorization—Nonstandard header that SIP gateways do not act on. It is echoed in the triggered INVITE request because proxies occasionally require it for billing purposes.
•
Replaces—Header used by SIP gateways to indicate whether the originator of the Refer request is requesting a blind or attended transfer. It is required if the originator is performing an attended transfer, and not required for a blind transfer.
All other headers present in the Refer-To are ignored, and are not sent in the triggered INVITE.
![]()
Note
The Refer-To and Contact headers are required in the Refer request. The absence of these headers results in a 4xx class response to the Refer request. Also, the Refer request must contain exactly one Refer-To header. Multiple Refer-To headers result in a 4xx class response.
Referred-By Header
The Referred-By header is required in a Refer request. It identifies the originator and may also contain a signature (included for security purposes). SIP gateways echo the contents of the Referred-By header in the triggered INVITE request, but on receiving an INVITE request with this header, gateways do not act on it.
![]()
Note
The Referred-By header is required in a Refer request. The absence of this header results in a 4xx class response to the Refer request. Also, the Refer request must contain exactly one Referred-By header. Multiple Referred-By headers result in a 4xx class response.
NOTIFY Message Request
Once the outcome of the Refer transaction is known, the recipient of the Refer request must notify the originator of the outcome of the Refer transaction—whether the final-recipient was successfully contacted or not. The notification is accomplished using the NOTIFY message request, SIP's event notification mechanism. The notification contains a message body with a SIP response status line and the response class in the status line indicates the success or failure of the Refer transaction.
The NOTIFY message must do the following:
•
Reflect the same To, From, and Call-ID headers that were received in the Refer request.
•
Contain an Event header refer.
•
Contain a message body with a SIP response line. For example: SIP/2.0 200 OK to report a successful Refer transaction, or SIP/2.0 503 Service Unavailable to report a failure. To report that the recipient disconnected before the transfer finished, it must use SIP/2.0 487 Request Canceled.
Two Cisco IOS commands pertain to the NOTIFY message request:
•
The timers notify command sets the amount of time that the recipient should wait before retransmitting a NOTIFY message to the originator.
•
The retry notify command configures the number of times a NOTIFY message is retransmitted to the originator.
![]()
Note
For information on these commands, see the Cisco IOS Voice Command Reference.
Types of SIP Call Transfer Using the Refer Message Request
This section discusses how the Refer message request facilitates call transfer.
There are two types of call transfer: blind and attended. The primary difference between the two is that the Replaces header is used in attended call transfers. The Replaces header is interpreted by the final recipient and contains a Call-ID header, indicating that the initial call leg is to be replaced with the incoming INVITE request.
As outlined in the Refer message request, there are three main roles:
•
Originator—User agent that initiates the transfer or Refer request.
•
Recipient—User agent that receives the Refer request and is transferred to the final recipient.
•
Final-Recipient—User agent introduced into a call with the recipient.
A gateway can be a recipient or final recipient, but not an originator.
Blind Call-Transfer Process
A blind, or unattended, transfer is one in which the transferring phone connects the caller to a destination line before ringback begins. This is different from a consultative, or attended, transfer in which one of the transferring parties either connects the caller to a ringing phone (ringback heard) or speaks with the third party before connecting the caller to the third party. Blind transfers are often preferred by automated devices that do not have the capability to make consultation calls.
Blind transfer works as described in the "Refer Message Request" section. The process is as follows:
1.
Originator (user agent that initiates the transfer or Refer request) does the following:
a.
Sets up a call with recipient (user agent that receives the Refer request)
b.
Issues a Refer request to recipient
2.
Recipient does the following:
a.
Sends an INVITE request to final recipient (user agent introduced into a call with the recipient)
b.
Returns a SIP 202 (Accepted) response to originator
c.
Notifies originator of the outcome of the Refer transaction—whether final recipient was successfully (SIP 200 OK) contacted or not (SIP 503 Service Unavailable)
3.
If successful, a call is established between recipient and final recipient.
4.
The original signaling relationship between originator and recipient terminates when either of the following occurs:
•
One of the parties sends a Bye request.
•
Recipient sends a Bye request after successful transfer (if originator does not first send a Bye request after receiving an acknowledgment for the NOTIFY message).
Figure 2 shows a successful blind or unattended call transfer in which the originator initiates a Bye request to terminate signaling with the recipient.
Figure 2 Successful Blind or Unattended Transfer—Originator Initiating a Bye Request
![]()
Figure 3 shows a successful blind or unattended call transfer in which the recipient initiates a Bye request to terminate signaling with the originator. A NOTIFY message is always sent by the recipient to the originator after the final outcome of the call is known.
Figure 3 Successful Blind or Unattended Transfer—Recipient Initiating a Bye Request
![]()
If a failure occurs with the triggered INVITE to the final recipient, the call between originator and recipient is not disconnected. Rather, with blind transfer the process is as follows:
1.
Originator sends a re-INVITE that takes the call off hold and returns to the original call with recipient.
2.
Final recipient sends an 18x informational response to recipient.
3.
The call fails; the originator cannot recover the call with recipient. Failure can be caused by an error condition or timeout.
4.
The call leg between originator and recipient remains active (see Figure 4).
5.
If the INVITE to final recipient fails (408 Request Timeout), the following occurs:
a.
Recipient notifies originator of the failure with a NOTIFY message.
b.
Originator sends a re-INVITE and returns to the original call with the recipient.
Figure 4 Failed Blind Transfer—Originator Returns to Original Call with Recipient
![]()
Attended Transfer
In attended transfers, the Replaces header is inserted by the initiator of the Refer message request as an overloaded header in the Refer-To and is copied into the triggered INVITE request sent to the final recipient. The header has no effect on the recipient, but is interpreted by the final recipient as a way to distinguish between blind transfer and attended transfer. The attended transfer process is as follows:
1.
Originator does the following:
a.
Sets up a call with recipient.
b.
Places recipient on hold.
c.
Establishes a call to final recipient.
d.
Sends recipient a Refer message request with an overloaded Replaces header in the Refer-To header.
2.
Recipient does the following:
a.
Sends a triggered INVITE request to final recipient. (Request includes the Replaces header, identifying the call leg between the originator and the final recipient.)
b.
Recipient returns a SIP 202 (Accepted) response to originator. (Response acknowledges that the INVITE has been sent.)
3.
Final recipient establishes a direct signaling relationship with recipient. (Replaces header indicates that the initial call leg is to be shut down and replaced by the incoming INVITE request.)
4.
Recipient notifies originator of the outcome of the Refer transaction. (Outcome indicates whether or not the final recipient was successfully contacted.)
5.
Recipient terminates the session with originator by sending a Bye request.
Replaces Header
The Replaces header is required in attended transfers. It indicates to the final recipient that the initial call leg (identified by the Call-ID header and tags) is to be shut down and replaced by the incoming INVITE request. The final recipient sends a Bye request to the originator to terminate its session.
If the information provided by the Replaces header does not match an existing call leg, or if the information provided by the Replaces header matches a call leg but the call leg is not active (a Connect, 200 OK to the INVITE request has not been sent by the final-recipient), the triggered INVITE does not replace the initial call leg and the triggered INVITE request is processed normally.
Any failure resulting from the triggered INVITE request from the recipient to the final recipient does not drop the call between the originator and the final recipient. In these scenarios, all calls that are active (originator to recipient and originator to final recipient) remain active after the failed attended transfer attempt
Figure 5 shows a call flow for a successful attended transfer.
Figure 5 Successful Attended Transfer
![]()
Attended Transfer with Early Completion
Attended transfers allow the originator to have a call established between both the recipient and the final recipient. With attended transfer with early completion, the call between the originator and the final recipient does not have to be active, or in the talking state, before the originator can transfer it to the recipient. The originator establishes a call with the recipient and only needs to be setting up a call with the final recipient. The final recipient may be ringing, but has not answered the call from the originator when it receives a re-INVITE to replace the call with the originator and the recipient.
The process for attended transfer with early completion is as follows (see Figure 6):
1.
Originator does the following:
a.
Sets up a call with recipient.
b.
Places the recipient on hold.
c.
Contacts the final recipient.
d.
After receiving an indication that the final recipient is ringing, sends recipient a Refer message request with an overloaded Replaces header in the Refer-To header. (The Replaces header is required in attended transfers and distinguishes between blind transfer and attended transfers.)
2.
Recipient does the following:
a.
Returns a SIP 202 (Accepted) response to the originator. (to acknowledge that the INVITE has been sent.)
b.
Upon receipt of the Refer message request, sends a triggered INVITE request to final recipient. (The request includes the Replaces header, which indicates that the initial call leg, as identified by the Call-ID header and tags, is to be shut down and replaced by the incoming INVITE request.)
3.
Final recipient establishes a direct signaling relationship with recipient.
4.
Final recipient tries to match the Call-ID header and the To or From tag in the Replaces header of the incoming INVITE with an active call leg in its call control block. If a matching active call leg is found, final recipient replies with the same status as the found call leg. However, it then terminates the found call leg with a 487 Request Cancelled response.
![]()
Note
If early transfer is attempted and the call involves quality of service (QoS) or Resource Reservation Protocol (RSVP), the triggered INVITE from the recipient with the Replaces header is not processed and the transfer fails. The session between originator and final recipient remains unchanged.
5.
Recipient notifies originator of the outcome of the Refer transaction—that is, whether final recipient was successfully contacted or not.
6.
Recipient or originator terminates the session by sending a Bye request.
Figure 6 Attended Transfer with Early Completion
![]()
VSA for Call Transfer
You can use a vendor-specific attribute (VSA) for SIP call transfer.
Referred-By Header
For consistency with existing billing models, Referred-By and Requested-By headers are populated in call history tables as a VSA. Cisco VSAs are used for VoIP call authorization. The new VSA tag supp-svc-xfer-by helps to associate the call legs for call-detail-record (CDR) generation. The call legs can be originator-to-recipient or recipient-to-final-recipient.
The VSA tag supp-svc-xfer-by contains the user@host portion of the SIP URL of the Referred-By header for transfers performed with the Refer message request. For transfers performed with the Bye/Also message request, the tag contains user@host portion of the SIP URL of the Requested-By header. For each call on the gateway, two RADIUS records are generated: start and stop. The supp-svc-xfer-by VSA is generated only for stop records and is generated only on the recipient gateway—the gateway receiving the Refer or Bye/Also message.
The VSA is generated when a gateway that acts as a recipient receives a Refer or Bye/Also message with the Referred-By or Requested-By headers. There are usually two pairs of start and stop records. There is a start and stop record between the recipient and the originator and also between the recipient to final recipient. In the latter case, the VSA is generated between the recipient to the final recipient only.
Business Group Field
A new business group VSA field has been added that assists service providers with billing. The field allows service providers to add a proprietary header to call records. The VSA tag for business group ID is cust-biz-grp-id and is generated only for stop records. It is generated when the gateway receives an initial INVITE with a vendor dial-plan header to be used in call records. In cases when the gateway acts as a recipient, the VSA is populated in the stop records between the recipient and originator and the final recipient.
![]()
Note
For information on VSAs, see the RADIUS VSA Voice Implementation Guide.
Feature Information for SIP—SIP Stack Portability
Feature History Table for the ASR
Feature History Table for the ISR
Command Reference
•
None