對于SIP上述業(yè)務(wù)能力的綜合應(yīng)用形式就是SIP應(yīng)用服務(wù)器,它是目前軟交換系統(tǒng)中提及較多的增值業(yè)務(wù)服務(wù)器形式。
一、 SIP應(yīng)用服務(wù)器體系結(jié)構(gòu)
下圖給出了一種SIP應(yīng)用服務(wù)器的高層體系結(jié)構(gòu)。圖中所示的應(yīng)用服務(wù)器可支持基于SIPServlet、SIPCGI、CPL等多種方式開發(fā)的業(yè)務(wù)程序。應(yīng)用服務(wù)器最底層是SIP協(xié)議棧,用來提供SIP協(xié)議能力,之上引入了一個規(guī)則引擎,主要用來處理業(yè)務(wù)沖突和事件分發(fā)。SIPServlet引擎提供基千SIPServlet業(yè)務(wù)的運行環(huán)境,SIPCGI環(huán)境則提供對基于SIPCGI業(yè)務(wù)的支待,而CPLServlet是對CPL業(yè)務(wù)腳本的解釋程序。
SIP應(yīng)用服務(wù)器體系結(jié)構(gòu)示意圖
二、 SIP應(yīng)用服務(wù)器業(yè)務(wù)開發(fā)方式
基于SIP的業(yè)務(wù)創(chuàng)建手段很靈活,甚至終端用戶也可以進行簡單的業(yè)務(wù)定制和創(chuàng)建。為了加快業(yè)務(wù)創(chuàng)建,IETF為SIP應(yīng)用的開發(fā)人員提供了兩類主要的業(yè)務(wù)開發(fā)技術(shù)。
一類是CPL(CallProcessingLanguage,呼叫處理語言),它是由IETF的IPTEL工
作組制定的一種基于XML(ExtensibleMarkupLanguage,擴展標(biāo)記語言)的非常簡單的腳本語言,主要用來描述和控制個人化的Internet電話業(yè)務(wù)(包括呼叫策略路由、呼叫篩選、呼叫日志等業(yè)務(wù))。
CPL的功能較弱,被設(shè)計成一種靜態(tài)的、基于文本的、非遞歸的語言,采用XML結(jié)構(gòu)描述如何對呼叫請求消息選擇路由,不支持用戶定義的變量,能夠保證開發(fā)人員編寫的業(yè)務(wù)邏輯不會對應(yīng)用服務(wù)器造成破壞,因此一般提供給可信度較低的終端用戶或第三方開發(fā)人員使用。開發(fā)人員可以在瀏覽器上編輯CPL腳本,并通過多種方式,如Web文件上載、SIP注冊消息載荷、Java遠程方法調(diào)用(RMI入簡單網(wǎng)絡(luò)管理協(xié)議(SNMP入輕量級目錄訪問協(xié)議(LDAP)等,將腳本傳輸?shù)絊IP應(yīng)用服務(wù)器。SIP應(yīng)用服務(wù)器將對腳本作者進行認證,并在腳本提交期間和運行時自動驗證腳本的安全。
另一類是SIPCGICCommonGatewayInterface,公共網(wǎng)關(guān)接口)和SIPServlets,并制定了SIPCGI和SIPServletAPI規(guī)范。這兩種技術(shù)功能較強,但使用不當(dāng)會給應(yīng)用服務(wù)器帶來不安全的因素,一般是針對可信度較高的業(yè)務(wù)開發(fā)人員,比如運營商自己或授權(quán)的第三方業(yè)務(wù)開發(fā)商。
SIPCGI是在現(xiàn)行的超文本傳輸協(xié)議公共網(wǎng)關(guān)接口(HTTP-CGD上為Web環(huán)境創(chuàng)建的API,它重用了很多HTTP-CGI的機制、設(shè)施和工具。SIP-CGI允許作者使用抽象報告語言(Perl)、工具命令語言(Tel)、VB腳本或其他可選的腳本描述語言來創(chuàng)建CGI腳本。與CPL相比,CGI是一種更“低級”的API,使開發(fā)人員能夠看到網(wǎng)絡(luò)內(nèi)部協(xié)議。因此,SIP-CG!是針對可信任用戶的。SIP的注冊消息也能夠被用作將CGI腳本動態(tài)上載到應(yīng)用服務(wù)器的傳送機制。
由SUN公司提出的JavaServlet是計算機網(wǎng)絡(luò)中最有影響的腳本技術(shù),廣泛應(yīng)用于Internet網(wǎng)絡(luò)業(yè)務(wù)。SIPServlet在很大程度上采用了JavaServlet的概念和原理。Servlet非常類似于CGI的概念,有所不同的是在Servlet中,SIP消息是作為一個對象被傳遞到Servlet引擎中,并且運行千Java虛擬機OVM)上。實際上,SIPServlet就是一大塊Java代碼,能夠和SIP服務(wù)器交互,能夠以某種方式控制或影響呼叫處理。SIPServlet可以決定如何響應(yīng)消息,這和CGIAPI的處理過程非常類似。SIPServlet可以在SIP消息體中傳送,如"INVITE"消息。
另外,通過在SIP應(yīng)用服務(wù)器中嵌入Parlay網(wǎng)關(guān)功能,還可以對外提供基
千ParlayAPI/ParlayXAPI的業(yè)界標(biāo)準(zhǔn)的應(yīng)用編程接口,供第三方業(yè)務(wù)開發(fā)商方便迅速地開發(fā)出新的增值業(yè)務(wù)。
三、SIP應(yīng)用服務(wù)器業(yè)務(wù)執(zhí)行方式
如上小節(jié)所述,SIP應(yīng)用服務(wù)器在提供業(yè)務(wù)時,需要結(jié)合服務(wù)器擴展和協(xié)議擴展兩種方式。SIP應(yīng)用服務(wù)器提供網(wǎng)絡(luò)業(yè)務(wù)的基本方法就是以某種方式在應(yīng)用服務(wù)器中置入控制程序,其執(zhí)行由收到的SIP消息觸發(fā),然后對指定的呼叫進行特殊的轉(zhuǎn)發(fā)處理,以實現(xiàn)諸如呼叫轉(zhuǎn)移、呼叫篩選等基本補充業(yè)務(wù)。
如上圖所示,與SIP應(yīng)用服務(wù)器提供的開發(fā)模式相對應(yīng),在SIP應(yīng)用服務(wù)器中嵌人的控制程序一般有兩種方式:基于CPL或SIPServlet的腳本程序,以及基于CGI的后臺控制程序。基千腳本程序的控制程序一般比較簡單,可以用與平臺無關(guān)的腳本語言(如CPL和VXML等)編寫,在滿足一定條件時由服務(wù)器解釋執(zhí)行。CPL腳本通常與一個特定的Internet地址相關(guān)聯(lián)。從功能上講,一個CPL腳本代表著一個應(yīng)用服務(wù)器的用戶定位功能,并且可以被看成是一系列”條件/動作“集合。條件判斷可以基千地址、時間或位置等,動作可以有信令,也可以沒有信令。有信令的動作包括代理、重定向或拒絕;沒有信令的動作包括通過E-mail通知一個用戶,或者在日志中記錄一個當(dāng)前呼叫的記錄。
SIPServlet方式的控制邏輯通常比較復(fù)雜,由JavaBean組件組成,或直接用Java語言編寫。Servlet程序駐留在應(yīng)用服務(wù)器中,可以利用JavaServlet技術(shù)實現(xiàn)腳本的觸發(fā)。應(yīng)用服務(wù)器上將裝備一個“啟動Servlet"和相當(dāng)于Java虛擬機的"Servlet引擎",當(dāng)應(yīng)用服務(wù)器收到SIP消息后,由“啟動Servlet"觸發(fā)內(nèi)置腳本的解釋,然后根據(jù)解釋結(jié)果決定如何處理該消息的轉(zhuǎn)發(fā)。觸發(fā)機制與本地策略有關(guān),但也可能依賴于SIP消息的內(nèi)容,如請求統(tǒng)一資源定位符(URL汃消息頭或消息體等。更有意義的是,SIPServlet技術(shù)還可以將一些小程序(Applet)自動下載到用戶終端,通過與應(yīng)用服務(wù)器中的Servlet程序直接交互來靈活地實現(xiàn)各種增值業(yè)務(wù)。
SIP應(yīng)用服務(wù)器也可以采用SIPCGI技術(shù)進行控制。和Web服務(wù)器一樣,輸入的SIP消息通過CGI觸發(fā)后臺處理程序,從而確定消息的轉(zhuǎn)發(fā)決策。由千SIP協(xié)議結(jié)構(gòu)類似千HTTP,因此SIPCGI的實現(xiàn)并不困難。為了能夠處理SIP操作,SIP-CGI擴展了HTTP-CGI的功能,如代理請求、返回應(yīng)答、產(chǎn)生請求、產(chǎn)生響應(yīng)等。由于一個請求可能又會產(chǎn)生很多新的請求和代理請求,SIP-CGI腳本在與處理這些請求的SIP事務(wù)交互中必須保持“長期穩(wěn)定“,例如,為了識別消息之間的"狀態(tài)”而使用一個"Cookie"小程序穿梭于腳本和服務(wù)器之間。另外,SIP-CGI腳本能夠指出在SIP呼叫中第一次被調(diào)用之后,還可以在什么樣的條件下被再次調(diào)用,類似千智能網(wǎng)中動態(tài)"觸發(fā)"的概念。因此,它能通過一些Perl小腳本支持許多傳統(tǒng)的電話業(yè)務(wù),如自動呼叫分配、遇忙前轉(zhuǎn)、無條件前轉(zhuǎn)、隨人轉(zhuǎn)移等。CGI的最大好處是它能夠訪問網(wǎng)絡(luò)和Internet資源,如E-mail_Web、數(shù)據(jù)庫和文件存儲器等,與非CGI業(yè)務(wù)請求的屬性交互仍處于研究階段。
上述方式主要是提供基千呼叫重定向的基本補充業(yè)務(wù),對于更為復(fù)雜的增值業(yè)務(wù),除了在應(yīng)用服務(wù)器中加載控制程序外,通常還需要對SIP協(xié)議本身的功能進行增強。為此,SIP提供了3種擴展機制:頭部擴展、方法擴展和消息體擴展,分別用千定義新的消息參數(shù)、操作和消息體內(nèi)容類型。IETFMMUSICT作組目前正針對SIP協(xié)議進行業(yè)務(wù)能力擴展,其目標(biāo)是創(chuàng)建一些積木式的構(gòu)成塊,通過這些業(yè)務(wù)構(gòu)成塊可以構(gòu)建更多特殊的應(yīng)用,滿足一些特殊領(lǐng)域的需求。理想的做法是使這些模塊相互分離、與業(yè)務(wù)無關(guān)、具有公用性,而不是針對某一具體業(yè)務(wù)的實現(xiàn)。
四、SIP應(yīng)用服務(wù)器的工作模式
SIP應(yīng)用服務(wù)器的運行通常采用有狀態(tài)的Proxy和BZBUA(BacktoBackUserAgent,背靠背用戶代理)模式。在SIP協(xié)議中,用戶代理(UA)是基本的SIP協(xié)議實體,用千終結(jié)或發(fā)起一個SIP呼叫。B2BUA則是SIP協(xié)議中UA的一種應(yīng)用擴展,是一個接收請求并處理請求的邏輯實體。在原理實現(xiàn)上,BZBUA機制首先終結(jié)一個呼叫,然后重新發(fā)起一個呼叫,并在二者之間實現(xiàn)邏輯關(guān)聯(lián),因此BZBUA需要對會話狀態(tài)進行維護。這就使得B2BUA適合用于進行業(yè)務(wù)控制的場合。
從業(yè)務(wù)提供角度而言,SIP應(yīng)用服務(wù)器應(yīng)能夠終結(jié)網(wǎng)絡(luò)中呼叫控制設(shè)備(軟交換設(shè)備、SIP代理服務(wù)器、呼叫服務(wù)器等)提交來的觸發(fā)業(yè)務(wù)請求,根據(jù)該業(yè)務(wù)請求信息和用戶注冊的業(yè)務(wù)屬性信息,對其進行處理,然后生成一個與之關(guān)聯(lián)的新的SIP呼叫(或稱為該
SIP呼叫的第二段)并路由回網(wǎng)絡(luò)中的呼叫控制設(shè)備,指示其完成功能不同的呼叫接續(xù),從而實現(xiàn)業(yè)務(wù)邏輯控制功能。因此應(yīng)用服務(wù)器在實現(xiàn)業(yè)務(wù)控制時,需要采用B2BUA的模式,以便做到對呼叫處理流程的控制。
需要注意的是,在B2BUA模式下,從軟交換設(shè)備來看,這兩段呼叫表現(xiàn)為兩個完全不相關(guān)的呼叫,因為它們使用了完全不同的SIP呼叫標(biāo)識(CallID)。在這種情況下,SIP應(yīng)用服務(wù)器看起來就像PSTN中通過SS7或ISDNPRI與5類交換機連接的附屬交換機或智能業(yè)務(wù)節(jié)點。在電路交換環(huán)境中,這種智能業(yè)務(wù)節(jié)點方式主要的缺陷是由附屬交換機控制的每一個呼叫都要占用兩個DSO時隙,對交換機電路資源的消耗非常嚴(yán)重。而在基于分組交換的SIP呼叫方式中,由千IP無連接的特性,不會出現(xiàn)上述缺陷。
此外,SIP協(xié)議控制并修改媒體的能力使得應(yīng)用服務(wù)器可以在呼叫的兩個終端間重定向媒體流。因此,對千從軟交換設(shè)備發(fā)起到應(yīng)用服務(wù)器,然后又回到軟交換設(shè)備的呼叫,其信令路徑通過應(yīng)用服務(wù)器,但在應(yīng)用服務(wù)器的控制下,媒體流路徑可以被重新配置為直接在兩個終端間傳送。