原作者: 江興烽(南京郵電學院)
摘要:隨著網(wǎng)絡和相關網(wǎng)絡協(xié)議的發(fā)展,如何方便和快速地創(chuàng)建新業(yè)務是擺在業(yè)務提供商面前的重要課題。本文主要介紹了在SIP協(xié)議網(wǎng)絡環(huán)境下業(yè)務創(chuàng)建的兩種機制:呼叫處理語言CPL和SIP CGI規(guī)范。
關鍵字:CPL、SIP、CGI、Service Creation
1 簡介
隨著網(wǎng)絡協(xié)議的發(fā)展,如SIP、RTP/RTCP、RSVP、H.323等的出現(xiàn)和部署,INTERNET逐漸成為語音、數(shù)據(jù)、視頻等多種業(yè)務的承載網(wǎng)絡,成為了提供多種業(yè)務的統(tǒng)一的網(wǎng)絡平臺。
傳統(tǒng)的電話網(wǎng)絡使用智能網(wǎng)技術(IN:Intelligence Network)以方便網(wǎng)絡運營商添加業(yè)務而無需變動承載業(yè)務的電話網(wǎng)絡。與之相對應的INTERNET必須有相應的機制來保證新的業(yè)務能夠被很快的生成和部署。本文將介紹在SIP協(xié)議環(huán)境下業(yè)務創(chuàng)建的相關機制:呼叫控制語言(CPL: Call Processing Language)、SIP CGI(公共網(wǎng)關接口:Common Gateway Interface) 。
2 呼叫處理語言(CPL:Call Processing Language)
IETF的IPTEL工作組在RFC2824描述了CPL的框架以及實現(xiàn)的要求,隨后在草案draft-ietf-iptel-cpl-06.txt定義了CPL語言的細節(jié)。用戶可以通過CPL編寫腳本文件,并上傳到信令服務器(signaling server)。在用戶發(fā)起或接收呼叫的過程中,信令服務器根據(jù)CPL腳本文件運行的結果動態(tài)為用戶提供呼叫轉移、遇忙前轉等服務。
CPL腳本運行的網(wǎng)絡模型由兩部分組成:端系統(tǒng)(end system)和信令服務器(signaling server)。端系統(tǒng)(end system)指的是發(fā)起和接收信令信息和媒體流的設備,包括電話設備,PC電話客戶端,自動語音系統(tǒng)等等。信令服務器是指中繼和控制信令信息的設備。在SIP協(xié)議構建的網(wǎng)絡中,指的是代理服務器,重定向服務器,注冊服務器。
2.1 CPL的特點
CPL是用來控制和描述IP電話業(yè)務的語言。CPL的設計者并沒有將CPL與某個信令協(xié)議緊密的關聯(lián)起來,因此CPL是與底層的信令協(xié)議無關的腳本語言,可以與任何的底層協(xié)議配合使用,如H.323和本文側重介紹的SIP協(xié)議等。
另外CPL在設計中還有下列的一些特點:
* 描述業(yè)務(service)能力強;
* CPL腳本通常在信令服務器上運行,有時也會在高級的客戶端運行;
* 由于CPL腳本在服務器上運行,為了服務器的安全,對它的表述能力又有所限制,例如沒有提供循環(huán)和遞歸的機制;
* 基于XML語言,語言分析比較簡單,有很多現(xiàn)成的工具可以使用;
2.2 CPL語言的體系結構
眾所周知,XML是一種元語言(metalanguage)。CPL正是在XML的基礎上附加一些文本類型描述(DTD:Document Type Description)構造而成。因此,與XML表示一樣,CPL語言呈樹型結構,也使用標簽,以及標簽的屬性來表示呼叫處理過程中的動作和參數(shù)等。
一個CPL腳本主要由兩部分信息組成:腳本有關的輔助信息和呼叫處理動作(action).。腳本有關的輔助信息主要用于服務器正確的處理腳本,但在目前的規(guī)范中并沒有任何的定義,有待擴展。呼叫處理動作則有分為兩種:頂層的處理動作和子動作(subaction)。頂層的處理動作由標簽和表示,分別表示對來話(incoming call)和去話(outgoing call)時服務器所應采取的動作。而子動作(subaction)則類似于c語言的函數(shù)的概念,是可以在其他的動作中調用的動作,而且使用subaction也增強了CPL腳本的模塊性和重用性。
CPL語言主要是通過兩個頂層的呼叫處理動作和子動作來對呼叫進行處理,從而為用戶提供不同的業(yè)務。從抽象的角度來看,呼叫處理動作是由一組節(jié)點(Node)組成,每個節(jié)點(Node)包含幾個參數(shù)和輸出。其中參數(shù)描述了節(jié)點的精確的行為,也即一些匹配條件;而輸出則是指在參數(shù)匹配的前提下節(jié)點將要做出的判定或采取的動作。CPL語言定義了如下的四種節(jié)點:
* switches:表示CPL腳本做出的選擇,其中包括address-switch、string-switch、language-switch、time-switch、priority-switch;分別根據(jù)地址、字符、語言、時間、優(yōu)先級做出選擇;
* location modifier:從位置集合中添加或輸出記錄;其中包括location、lookup、remove-location;
* 信令操作:引發(fā)底層信令協(xié)議的信令事件;其中包括proxy、redirect和reject;分別引發(fā)底層協(xié)議的轉發(fā)、重定向和拒絕操作;
* 非信令操作:引發(fā)一些與底層協(xié)議無關的動作;其中包括mail、log;
2.3 CPL腳本的例子
CPL腳本具有與XML相同的語法和表示方法。若有用戶呼叫SIP URL 為sip:jones@jonespc.example.com的用戶。當請求到達該用戶所在代理服務器時,代理服務器根據(jù)相應的機制調用圖二所示的腳本并加以執(zhí)行。首先代理服務器發(fā)出代理轉發(fā)(proxy)操作,超時值設為8秒。如果在超時值超時之前,代理服務器沒有接收到應答,根據(jù)應答的狀態(tài)碼來確定該用戶是busy還是noanswer,并采取相應的動作。本例的處理方式比較的簡單,對兩種情況均采取了呼叫該用戶服務提供商的語音郵件設備的動作,再次進行代理轉發(fā)(proxy)的操作。該語音郵件設備的SIP URL為sip:jones@voicemail.example.com。通過腳本,服務提供商為用戶提供了遇忙/無應答呼叫前轉業(yè)務。顯然,使用CPL語言編寫更加復雜的腳本,服務提供商可以提供更加高級的業(yè)務。
2.4 CPL有待研究的課題
對于CPL,到目前為止還有一些領域沒有草案和相關的標準出現(xiàn)。例如用戶如何將腳本安全地傳送到信令服務器上;信令服務器如何將請求或應答消息與用戶上傳的腳本對應起來等等。
3 SIP CGI規(guī)范
眾所周知,CGI并不是一項新的技術。它最初的出現(xiàn)是和HTTP協(xié)議一起,使靜態(tài)網(wǎng)頁具有了與瀏覽者交互的功能,極大的推動了web技術的發(fā)展。CGI技術提供了一種在web環(huán)境下創(chuàng)建新業(yè)務的機制。從web的發(fā)展來看,無疑CGI技術又是非常成功的。它具有以下的一些特點:
* 語言的獨立性;CGI技術定義的是接口而非具體的編程語言,它可以與perl, C, VisualBasic, tcl等語言一起工作使用;
* CGI技術允許CGI 的應用程序對消息的頭部(header)具有訪問權限;
* 產生應答的方式與其他的一些技術,如Java servlets不同;CGI處理應答的所有部分,包括頭部、應答碼、消息體;
SIP協(xié)議在發(fā)展的過程中很大程度上借鑒了HTTP協(xié)議,比如消息的格式、消息請求/應答的交互方式,用文本格式對消息進行編碼等。所以CGI規(guī)范的特點也特別適合SIP協(xié)議。因此可以采用CGI作為SIP的一種業(yè)務創(chuàng)建(Service Creation)的機制。
3.1 SIP CGI與HTTP CGI的區(qū)別
盡管SIP與HTTP具有相似的語法和請求/應答的模型,但是它們還是有一些關鍵的不同點。如代理服務器在SIP協(xié)議中起著重要的作用,而在HTTP協(xié)議中則不是很重要;SIP協(xié)議提供了注冊的機制,而HTTP協(xié)議沒有。這些不同點也反映到了SIP CGI 和HTTP CGI的下列的區(qū)別上。
*SIP CGI主要運行在代理服務器、重定向服務器、注冊服務器上;而HTTP CGI則主要運行在用戶代理(user agent)上;
* SIP CGI允許腳本執(zhí)行代理轉發(fā)、重定向等操作;而HTTP CGI則不支持;
* SIP CGI支持持續(xù)性模型(persistence model),通過一些機制使得允許腳本在SIP事務所包含的所有消息中保持狀態(tài);而HTTP CGI并不支持該模型;
3.2 SIP CGI網(wǎng)絡模型
3.3 SIP CGI規(guī)范
與HTTP CGI類似,SIP CGI規(guī)范主要定義了一些機制來使用戶能夠運行服務器上的應用程序。服務提供商可以使用C、visual Basic、perl等語言來開發(fā)應用程序,實現(xiàn)不同的業(yè)務。
3.3.1 SIP CGI 腳本如何從服務器獲取數(shù)據(jù)?
SIP CGI對于SIP請求或者應答消息的頭部和消息體采用了不同的方式。服務器采用操作系統(tǒng)環(huán)境變量的機制來傳遞消息的頭部信息。RFC3050定義了超過20個的環(huán)境變量,例如AUTH_TYPE,REMOTE_USER等。而對于消息體,服務器則采用標準輸入文件描述符stdin來傳遞。
3.3.2 CGI應用程序處理結果的輸出格式
CGI腳本應用程序輸出有一些消息組成,這些消息分別對應了腳本要求服務器將要執(zhí)行的動作。每條消息由一個動作(action)、多個CGI頭部和多個SIP頭部組成。RFC 3050中定義了Status、CGI-PROXY-REQUEST、CGI-FORWARD-RESPONSE、CGI-SET-COOKIE、CGI-AGAIN五種動作,同時還定義了CGI-Request-Token和CGI-Remove兩種CGI頭部。消息中所涉及到的SIP頭部語法同RFC2543。
第一行告訴通過CGI-PROXY-REQUEST告訴服務器代理轉發(fā)請求到指定的URL。第二行則告訴服務器在轉發(fā)的請求中添加Organization頭部。需要注意的是,對于SIP協(xié)議在每個網(wǎng)絡節(jié)點通常都會處理的頭部,如Via、Max-forwards,服務器則會正常處理。第四行告訴服務器向主叫方發(fā)送一個100 Trying的臨時應答。第六行則告訴服務器存儲cookie信息。當這次呼叫所構成的事務(transaction)中的請求或應答再次觸發(fā)該腳本應用程序時,這個cookie將會傳遞給CGI 應用程序。通過這種機制,應用程序可以無狀態(tài)的運行,但同時CGI 依然跟蹤這次事務(transaction)的進度。
4 其他的業(yè)務創(chuàng)建機制
迄今為止,已經開發(fā)了很多種的SIP 應用編程接口API,包括SIP servelets和JAIN(Java Integrated Network)。與CPL和SIP CGI技術比起來,SIP API的創(chuàng)建業(yè)務的開銷要更低一些。然而,它們的主要缺陷是依賴于開發(fā)語言,如Java。
5 總結
本文主要介紹了兩種SIP協(xié)議環(huán)境下創(chuàng)建業(yè)務的機制,呼叫處理語言CPL和SIP CGI規(guī)范。通過這些機制的實現(xiàn),服務提供商可以很方便和快速地部署新地業(yè)務,同時用戶也可以對自己的通信根據(jù)實際情況進行個性化的定制。
注:本文略有刪節(jié)。
摘自《通訊世界》