Internet DRAFT - draft-gurbani-iptel-sip-in-imp
draft-gurbani-iptel-sip-in-imp
INTERNET-DRAFT Vijay Gurbani
November 10, 2000 Lucent Technologies, Inc.
Expires: May, 2001
SIP enabled IN Services - an implementation report
<draft-gurbani-iptel-sip-in-imp-01.txt>
Status of this Memo
This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-
Drafts.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
ABSTRACT
SIP [1] is an excellent vehicle for the converged network services of
the future; of that there is no doubt. However, even in the near
term, SIP is an equally powerful solution to bridge the PSTN and VoIP
networks by its application to the IN (Intelligent Network) services
domain.
This Internet Draft details our experiences of applying SIP to the
said domain. We use a SIP call controller to execute IN services by
mapping IN call model states to those of the SIP protocol state
machine [2]. [2] uses the notion of call model integration [3], an
example of which is to use the IN call model as a canonical call
model to map the protocol states of IP (Internet Protocol) based call
controllers (SIP, H.323,...) to those of the IN call model.
1. Introduction
V.Gurbani Internet Draft [Page 1]
SIP enabled IN Services - an implementation report
As the PSTN and VoIP networks converge, availability of existing
services and the applicability of novel services is emerging to be
the key differentiator between the two networks. IN stands to gain
from this differentiation since it already disassociates service
access and fulfillment from the call signaling mechansim. While
these new converged services are being defined and worked upon, SIP
can be used as the next generation signaling protocol to provide
access to existing PSTN-services from IP (or SIP) endpoints.
The IN call model is a half call model (so called because it has two
halves: originating half or O_BCSM [Originating Basic Call State
Model] and terminating half or T_BCSM [Terminating Basic Call State
Mode]). It rigorously defines the PICs (point-in-call) --
corresponding to states in the call model -- and DPs (detection
points) -- points in the model where call processing is suspended and
other actions (initiation of queries normally related to service
fulfillment) are invoked [4]. One simple manner for accessing IN
services from SIP networks would be to overlay an IN call model on a
SIP protocol state machine [2]. This has the benefit of accessing
existing IN services using the same DPs (detection points) from the
same well known PIC (point in call) of the IN call model. From the
viewpoint of other IN elements like the SCP (service control point),
the fact that the request originated from a SIP server versus a call
processing function on a traditional switch is immaterial. Thus, it
is important that the SIP server be able to provide features normally
provided by the traditional switch, including operating as a SSP for
IN features. The SIP server should maintain call state and trigger
queries to IN-based services, just as traditional switches do.
We have authored two pieces of software to demonstrate this mapping
concept. First is a portable IN call model which is a software layer
written in C++, and the second is a proxy SIP server that has hooks
to this portable IN call layer.
The IN call model, embodied by our portable IN call layer, can be
mapped to IN-incapable call controllers, of which a SIP proxy and
H.323 are good examples. Once the mapping between the IN call model
states and the native protocol state machine (SIP, or Q.931 in the
case of H.323) has been specified, the portable IN call layer is then
embedded into the native protocol state machine (for the duration of
this I-D, we will assume that the native protocol state machine is
SIP).
We have applied the portable IN call layer to two IP call controllers
so far: Q.931 in H.323 [5] and SIP [2]. In both cases, we were able
to provide the same set of services without source-level changes to
V.Gurbani Internet Draft [Page 2]
SIP enabled IN Services - an implementation report
the portable IN call layer, thus demonstrating the power of this
approach (well, actually we had to make one minor change in the
portable IN call layer when using SIP as the IP call controller - we
had to increase the buffer size used to store a call ID; SIP Call-IDs
tend to be much longer then H.323 CRVs).
In a SIP network with access to IN services, call requests are
received by the SIP proxy, which intimates the portable IN call layer
of this event through a functional interface, passing it parameters
that include the caller's E.164 number, the callee's E.164 number and
other pertinent information. The portable IN call layer then steps
through its PICs and if a DP is armed, it will trigger the service
provided by that DP. Services are executed by the portable IN call
layer sending a TCAP (or INAP) request and transmitting it (over IP)
to the SCP. The SCP responds with the pertinent answer encoded
within the response TCAP (or INAP) payload.
Once the call request has been thus serviced, control is returned
back to the SIP proxy, which continues processing the call. The
portable IN call layer and the SIP proxy have to execute in lockstep
since events can occur in either of the state machines to effect the
other. For example, if the caller hangs up, the SIP proxy will get
notified of this event first. It must now propagate this event to
the IN call layer so that it (the IN call layer) can clean up any
state associated with that call. Likewise, if the IN call layer gets
the notification to drop the call as a result of a service execution,
it must notify the SIP proxy so it can clean state associated with
the call.
The rest of this paper is organized as follows: section 2 details
the network topology used in our laboratory to program and test these
concepts. Section 3 details the IN services provided by the IN-
capable SIP proxy server (including SIP call flows). Section 4
discusses some issues we encountered during implementation and
outlines some next steps for this work. Section 5 outlines some of
the security considerations.
2. Network Topology
Our laboratory setup consisted of several SIP endpoints (each running
a SIP user agent client and a SIP user agent server), a SIP proxy
server fortified with the portable IN call layer, and a next-
generation SCP simulation engine which serviced requests. Figure 1
depicts this setup:
V.Gurbani Internet Draft [Page 3]
SIP enabled IN Services - an implementation report
Local Area Network (10Mbps Ethernet)
==o==================o================o========
| | |
+-+--------+ +---+------+ +---+------+
|SIP proxy | +---------+ | | SCP sim- |
|server | +--------+ |-+ | ulation |
+----------+ | SIP UA |-+ +----------+
+--------+
Figure 1: Laboratory setup
There are other elements that have been omitted from the above figure
for brevity. However, for the sake of completeness, these included a
graphical representation of the transitioning call states (very
helpful for debugging and explaining to viewers), and simple service
provisioning using the Apache web server.
Each SIP UA was configured, upon bootup, to register with the SIP
proxy server using an E.164 number. This is important; the intent is
to mimic IN services offered on the PSTN, hence endpoints are
identified using E.164 numbers and not the more powerful and generic
email-like SIP URI.
The SCP was configured with the data pertaining to all the services
(see next section) and users in this system.
3. SIP-enabled IN services
We demonstrated the following IN services from SIP endpoints:
1) Originating call screening (OCS)
2) Local number portability (LNP)
3) Call forwarding
4) Calling name delivery
Note that these services fall within the "signaling" realm; i.e. they
do not involve any dependencies on media (tone detection, for
example). In general, services that depend entirely on the signaling
aspect are the easiest to realize. When we embarked on this work,
the SIP INFO method extension [6] was not yet ripe, so we focused our
attention to services that fell within the signaling realm only.
We now taxonomize the services outlined above on two criterion: where
in the IN BCSM half they occur (O_BCSM or T_BCSM) and the DP that
needs to be armed for these services:
V.Gurbani Internet Draft [Page 4]
SIP enabled IN Services - an implementation report
Occurs in/DP Service
-------------+------------------------------------------------
O_BCSM/5 | OCS
O_BCSM/7 | LNP
T_BCSM/22 | Call forwarding
T_BCSM/22 | Calling name delivery
Table 1: IN Service taxonomy and precedence
Notice that many services can be triggered from the same detection
point. In such cases, a precedence rule is necessary. The
precedence we established in our call model for the two services
triggered from T_BCSM/DP 22 is provided in Table 1. The portable IN
call layer triggered each of these services in the order that they
are listed in the table.
SIP call flows for the services follows next.
3.1 OCS
OCS is a service whereby the O_BCSM ensures that the caller is
authorized to initiate a call to the dialed number (or the callee).
The OCS service is accessed by arming the Collected_Info trigger (DP
5) of the O_BCSM of the IN call model. When the SIP proxy server
receives an INVITE request, it extracts the Request-URI (an E.164
number) of the party being invited and sends it, along with other
information, to the portable IN call layer. The IN call layer
proceeds through its PICs and on reaching an armed DP 5, triggers a
TCAP (or INAP) request to the SCP. The SCP analyzes this request and
instructs the SIP proxy server on what to do next with the call. The
SCP has access to a user profile database which contains, among other
fields, a field which restricts the caller from making certain calls
(for example, 900 number calls, which in the US are billed at
higher-than-normal rates; hence the need to restrict such calls).
In the call flow examples below, the letters C, S, N are used to
identify the SIP User Agent Server (caller), the SIP Proxy server
running the portable IN call layer, and the next hop SIP proxy,
respectively.
Example 1: C wants to initiate a call to a 900 number:
C->S: INVITE sip:9005551111@lucent.com;user=phone
From: "Vijay K. Gurbani" <sip:vkg@lucent.com>
To: sip:9005551111@lucent.com
Via: SIP/2.0/UDP temphost1.lucent.com
V.Gurbani Internet Draft [Page 5]
SIP enabled IN Services - an implementation report
Call-ID: CC6677901AF@temphost1.lucent.com
CSeq: 1 INVITE
...
S extracts the SIP Request-URI (sip:9005551111@lucent.com), the value
of the To: and From: fields and sends them to the portable IN call
layer. The IN call layer formats a TCAP (or INAP) request, sends it
to the SCP, and is told that the caller does not have sufficient
privileges to continue with the call. S sends the following SIP
(final) response to C:
S->C: SIP/2.0 403 Forbidden
From: "Vijay K. Gurbani" <sip:vkg@lucent.com>
To: sip:9005551111@lucent.com
Via: SIP/2.0/UDP temphost1.lucent.com
Call-ID: CC6677901AF@temphost1.lucent.com
CSeq: 1 INVITE
Content-Length: 0
3.2 LNP
Number portability can be classified into three types: Service
Portability, Service Provider Portability, and Location Portability
[7]. We focused our efforts on Service Provider portability only.
Service Provider portability is defined as the "ability of an end
user to retain the same E.164 international public telecommunication
number when when changing from one service provider to another." [7].
The LNP service is accessed by arming the Analysed_Info trigger (DP
7) of the O_BCSM of the IN call model.
Example 2: C calls a number, which has been ported:
C->S: INVITE sip:6302240216@lucent.com;user=phone
From: "Vijay K. Gurbani" <sip:vkg@lucent.com>
To: sip:6302240216@lucent.com
Via: SIP/2.0/UDP temphost1.lucent.com
Call-ID: CB6677901AF@temphost1.lucent.com
CSeq: 1 INVITE
...
When the SIP proxy server receives an INVITE request, it extracts the
Request-URI (an E.164 number) of the party being invited and sends
it, along with other information, to the portable IN call layer. The
IN call layer proceeds through its PICs and on reaching an armed DP
7, triggers a LNP TCAP (or INAP) request to the SCP. The SCP
analyzes this request, and after consulting a LNP database returns
V.Gurbani Internet Draft [Page 6]
SIP enabled IN Services - an implementation report
the new routing number to the SIP proxy server. The SIP proxy server
forwards the request to the next hop SIP server, after modifying the
Request-URI to include the new routing number:
S->N: INVITE sip:6307130184@lucent.com;user=phone
From: "Vijay K. Gurbani" <sip:vkg@lucent.com>
To: sip:6302240216@lucent.com
Via: SIP/2.0/UDP isip.ih.lucent.com
Via: SIP/2.0/UDP temphost1.lucent.com
Call-ID: CB6677901AF@temphost1.lucent.com
CSeq: 1 INVITE
...
The determination of the next hop SIP server can be done various
means. In our case, the next hop SIP server happened to be a
properly registered User Agent Server belonging to the callee, so the
INVITE was simply proxied to it.
The DP 7 logic for LNP is not strictly IN -- in reality, the new
routing number identifies a switch, not the actual called party, so
the original number must also be retained in the INVITE. The new
routing number thus replaces the number in the Request-URI but not
the number in the "To:" line. When the call reaches the
switch/server identified by the routing number, it can retrieve the
actual called party from the "To:" line and use it to deliver the
call to the user. (This mimics the ISUP action of placing the
routing number in the Called Party Address parameter and the original
number in a Generic Address parameter).
3.3 Call forwarding and calling name delivery
Call forwarding is another well known service whereby the incoming
phone call to the callee is forwarded to another number. Unlinke the
previous two services, this is a terminating side service. This
service is accessed by dynamically arming the Termination_Attempt
trigger (DP 22) of the T_BCSM in the IN call model.
The SIP call messages for this service are similar to that of LNP
(section 3.2), with the only difference being that the SIP proxy
server where this processing occurs is on the terminating side of the
call.
Calling name delivery is also a well known service. This service is
a termination side service as well, accessed by arming the
Termination_Attempt trigger (DP 22) of the T_BCSM in the IN call
model. Interestingly enough, in SIP, this service could turn out to
V.Gurbani Internet Draft [Page 7]
SIP enabled IN Services - an implementation report
be a no-op if the From header of the SIP INVITE message contains the
display name. If the display name is absent, then the portable IN
call layer uses the E.164 address to perform a TCAP (or INAP) query
against the subscriber database to retrieve this information.
4. Issues and implementation experience
We uncovered a couple of SIP call signaling issues during
implementation of the project, none of which were unsurmountable for
the IN services we implemented. It is very much possible that the
mapping of the call models in [2] may need to be adjusted to account
for this. The two issues are discussed below.
The first issue was the lack of acknowledgements for provisional
responses in SIP. SIP proxy servers do not guarantee that 1xx
messages are reliably delivered. A downstream (or upstream) SIP
proxy server will proxy a 1xx response, but will not guarantee its
delivery. In mapping IN call model states to SIP protocol states,
[2] establishes the following mapping for O_BCSM:
100 Trying -------------> Call_Sent
180 Ringing ------------> O_Alerting
and the following mapping for T_BCSM:
180 Ringing ------------> T_Alerting
Clearly, IN services that are triggered from DPs leading to the
Call_Sent, O_Alerting and T_Alerting PICs will not execute if the SIP
proxy server running the IN call layer never receives these
provisional responses.
The second issue was that 1xx messages are optional; a SIP User Agent
Server that receives an INVITE may choose not to send out a 100
Trying or 180 Ringing, but rather transmit a 200 OK directly (if it
decides to accept a call).
There are three ways to combat these problems: a) use a provisional
response acknowledgement mechanism, b) use TCP as the SIP signaling
transport, or c) map Call_Sent, O_Alerting and T_Alerting to a final
response (200 OK). Each one has its set of drawbacks. (a) may
require implementing an extension to SIP for guaranteeing reliability
of provisional responses [8]. (b) may not help at all if the
callee's SIP User Agent Server never emits provisional responses; and
the last solution has the unfortunate side effect of loosing
granularity of services when a SIP proxy receives a 200 OK. After
V.Gurbani Internet Draft [Page 8]
SIP enabled IN Services - an implementation report
all, which service takes precedence in this case? The one associated
with Call_Sent, O_Alerting, or O_Active (or T_Alerting and T_Active)?
Luckily, in our implementation, we were able to sidestep this problem
entirely since none of the services we were interested in used these
PICs.
Other issues that we did not specifically address, but would like to
document for further prototypes related to this work include:
o Should enhancement of IN itself be investigated (to return non-
digit URIs, for example)?
o Does the IN call model constrain SIP or H.323 call controllers
to operate in a particular manner? (especially in the assumption
that in a switched circuit network, the basic call processing
and bearer control functions are located in the same equipment
-- an assumption that does not hold for Internet telephony)
o Providing originating side services from an H.323 endpoint and
terminating side services on a SIP endpoint. The H.323 endpoint
will be using a H.323 Gatekeeper running the portable IN call
layer and the SIP endpoint will be using a SIP proxy server
running the portable IN call layer.
o Using services that involve the media or mid-call triggers. Now
that a SIP extension is being proposed to propagate mid-call
events [6], such services are rendered possible.
5. Security Considerations
This work did not take in account any extra security considerations
beyond those identified in [9].
6. Acknowledgements
Thanks to Janet Douglas, a co-implementor of this effort. Also, many
thanks to Igor Faynberg, Al Varney and all the others who reviewed
the draft and provided valuable insights, inputs, and comments.
7. Abbreviations:
V.Gurbani Internet Draft [Page 9]
SIP enabled IN Services - an implementation report
DP Detection Point
IN Intelligent Network
INAP Intelligent Network Application Protocol
IP Internet Protocol or Intelligent Peripheral
LNP Local Number Portability
O_BCSM Originating Basic Call State Model
OCS Originating Call Screening
PIC Point In Call
PSTN Public Switched Telephone Network
SCP Service Control Point
SIP Session Initiation Protocol
SSP Service Switching Point
T_BCSM Terminating Basic Call State Model
8. References
[1] M. Handley, H. Schulzrinne, E. Schooler, and J. Rosenberg,
"SIP: Session Initiation Protocol", IETF Standards RFC 2543,
March 1999.
[2] Vijay K. Gurbani, Lucent Technologies, Inc. "Accessing IN services
from SIP networks", IETF I-D <draft-gurbani-iptel-sip-to-in-03.txt>;
work in progress; expires May 2001.
[3] Kumar Vemuri, Lucent Technologies, Inc. "Call Model Integration
Framework", IETF I-D <draft-vemuri-cmi-framework-00.txt>; work in
progress; expires June 20, 2000.
[4] ITU-T Q.1204 1993: Recommendation Q.1204, "Intelligent Network
Distributed Functional Plane Architecture," International
Telecommunications Union Standardization Section, Geneva.
[5] T.C. Chiang, J. Douglas, V. Gurbani, et. al. "IN Services for
(Converged) Internet Telephony". IEEE Communication Magazine
special issue on Intelligent Networks, June 2000.
[6] Steve Donovan, MCI Worldcom. "The SIP INFO Method", IETF I-D
<draft-ietf-sip-info-method-03.txt>; March 2000, work in progress.
[7] ITU-T, Supplement 3 to ITU Q-Series Recommendations: Number
Portability - Scope and capability set architecture, May 1998.
[8] Jonathan Rosenberg and Henning Schulzrinne, "Reliability of
Provisional Responses in SIP", IETF I-D
<draft-ietf-sip-100rel-02.txt>; work in progress; expires
December 2000.
[9] Vijay Gurbani, "Accessing IN Services from SIP Networks", IETF I-D
<draft-gurbani-iptel-sip-to-in-03.txt>, work in progress; expires
May 2001.
8. Author's Address
V.Gurbani Internet Draft [Page 10]
SIP enabled IN Services - an implementation report
Vijay K. Gurbani
E-mail: vkg@lucent.com
Telephone: +1-630-224-0216
Fax: +1-630-713-5840
Lucent Technologies
263 Shuman Blvd.
Naperville, IL 60566 USA
INTERNET-DRAFT Expires May 2001
V.Gurbani Internet Draft [Page 11]