基于oSIP的嵌入式SIP終端的研究與實(shí)現(xiàn)
關(guān)鍵詞:SIP協(xié)議;SIP用戶代理;oSIP;嵌入式系統(tǒng);ARM
1、 引言
目前,IETF的SIP協(xié)議(Session Initiate Protocol, 會(huì)話初始協(xié)議)已獲得業(yè)界越來越多的關(guān)注和支持,正逐步成為下一代網(wǎng)絡(luò)(NGN)中的核心協(xié)議之一[1]。SIP協(xié)議相對(duì)簡(jiǎn)單、易于實(shí)現(xiàn)、可擴(kuò)展性強(qiáng)、更適合IP網(wǎng)絡(luò),被廣泛的用于VoIP系統(tǒng)的組建[2]。oSIP及其擴(kuò)展eXosip作為開源的SIP協(xié)議棧,以其結(jié)構(gòu)簡(jiǎn)單、功能豐富、易于移植等優(yōu)點(diǎn)成為在嵌入式系統(tǒng)上構(gòu)建VoIP應(yīng)用的首選。本文分析了oSIP協(xié)議棧的運(yùn)行機(jī)制,設(shè)計(jì)實(shí)現(xiàn)了將oSIP協(xié)議棧移植到嵌入式操作系統(tǒng)并以此為基礎(chǔ)開發(fā)嵌入式SIP客戶端的方案。
2、 oSIP協(xié)議棧
2.1 SIP協(xié)議
SIP協(xié)議是一個(gè)用于建立、更改和終止多媒體會(huì)話的應(yīng)用層協(xié)議?,F(xiàn)在的協(xié)議文本是IETF于2002年7月發(fā)表的RFC3261。SIP分別從用戶定位、用戶狀態(tài)查詢、用戶能力查詢、會(huì)話建立、會(huì)話管理五個(gè)方面實(shí)現(xiàn)對(duì)多媒體通信的控制。作為一種信令控制協(xié)議,它需要和IETF的其它協(xié)議如SDP、RTP、RTSP和SAP等協(xié)同工作。SIP會(huì)話中的媒體交換可以使用任何傳輸協(xié)議,但工程上一般都以RTP(Real-time Transmit Protocol,實(shí)時(shí)傳輸協(xié)議)作為傳輸協(xié)議。
SIP采用C/S模式的工作方式,包含兩類元素:SIP用戶代理(User Agent, UA)和SIP服務(wù)器。根據(jù)用戶代理在會(huì)話中扮演的角色不同又可分為用戶代理客戶機(jī)(User Agent Client, UAC)和用戶代理服務(wù)器(User Agent Server, UAS),前者發(fā)起呼叫請(qǐng)求,后者響應(yīng)呼叫請(qǐng)求。
2.2 oSIP協(xié)議棧
oSIP是遵循IETF標(biāo)準(zhǔn),使用ANSI C編寫,源代碼開放的SIP協(xié)議棧。oSIP主要有下列優(yōu)點(diǎn):
(1)結(jié)構(gòu)小巧簡(jiǎn)單,只有400K左右,適合在嵌入式系統(tǒng)上應(yīng)用;
(2)可移植性好,已被成功的應(yīng)用于Solaris、HP Unix、VxWorks、Windows和GNU/Linux[3] (2.2.16和2.4.7)等系統(tǒng)中;
(3)工作穩(wěn)定、兼容性強(qiáng)。
oSIP主要由解析模塊、工具模塊和狀態(tài)機(jī)模塊構(gòu)成,其核心是狀態(tài)機(jī)模塊[4](如圖1所示)。
圖1 oSIP結(jié)構(gòu)
解析模塊完成對(duì)SIP請(qǐng)求和響應(yīng)進(jìn)行封裝與解析處理。解析模塊又可分為SIP解析、SDP解析與URL解析。
工具模塊主要提供一些處理工具用于對(duì)話管理和SDP協(xié)商。
狀態(tài)機(jī)模塊負(fù)責(zé)對(duì)某個(gè)事務(wù)(如注冊(cè)過程、呼叫過程等)狀態(tài)的維持及處理,并在特定的狀態(tài)下觸發(fā)響應(yīng)的事件或回調(diào)函數(shù)。根據(jù)RFC描述中關(guān)于SIP協(xié)議事務(wù)層的定義,oSIP
協(xié)議棧有4種狀態(tài)機(jī):客戶端邀請(qǐng)事務(wù)(ICT),客戶端非邀請(qǐng)事務(wù)(NICT),服務(wù)器端要求事務(wù)(IST),服務(wù)器端非邀請(qǐng)事務(wù)(NIST)。前兩種狀態(tài)機(jī)是由客戶端發(fā)起的,后兩種狀態(tài)機(jī)是由服務(wù)器發(fā)起的,這4種狀態(tài)機(jī)涵蓋了SIP的各種事務(wù)類型。其中ICT(如圖2所示)是SIP客戶端中最常見的事務(wù)。
圖2 ICT狀態(tài)機(jī)狀態(tài)轉(zhuǎn)換圖
圖2中,cb_ict_xxx_xxx表示oSIP中ICT狀態(tài)機(jī)回調(diào)函數(shù),當(dāng)ICT從一種狀態(tài)到另一種狀態(tài)時(shí)oSIP協(xié)議棧將調(diào)用此函數(shù)。
oSIP專注于SIP底層解析,這使得它具有很高的效率。但另一方面,由于沒有提供高層的SIP會(huì)話控制API,使得上層應(yīng)用在調(diào)用協(xié)議棧時(shí)很破碎,降低了易用性。為此oSIP的開發(fā)者們又在oSIP的基礎(chǔ)上開發(fā)了eXosip。eXosip是oSIP的擴(kuò)展,它部分封裝了oSIP協(xié)議棧,使得它更容易被使用。eXosip實(shí)現(xiàn)了作為單個(gè)SIP終端的大部分功能。
3、 嵌入式SIP終端系統(tǒng)體系結(jié)構(gòu)
3.1 嵌入式SIP終端的功能
嵌入式SIP終端是一個(gè)運(yùn)行在嵌入式操作系統(tǒng)上的SIP用戶代理,主要包括SIP電話的注冊(cè)、呼叫、接聽、掛斷等功能。它直接與用戶交互,接收輸入信息,進(jìn)行格式檢查,根據(jù)用戶的動(dòng)作初始化SIP消息,同時(shí)得到本地語音媒體接口信息,形成SDP描述,完成UDP或TCP封裝。
3.2 系統(tǒng)軟硬件平臺(tái)的選擇
為選擇合適的軟硬件平臺(tái),我們收集了大量相關(guān)資料,經(jīng)過反復(fù)比較并結(jié)合現(xiàn)有實(shí)驗(yàn)條件做出了如下選擇:
(1)嵌入式處理器種類繁多,我們選擇了三星的S3C2410A微處理器。該處理器基于ARM920T內(nèi)核,主頻最高為203MHz。是一款高性價(jià)比、低功耗、高集成度的CPU,專為手持設(shè)備和網(wǎng)絡(luò)應(yīng)用設(shè)計(jì),能滿足嵌入式系統(tǒng)低功耗、高性能、小體積的要求。同時(shí),S3C2410系列處理器已得到廣泛使用,技術(shù)資料豐富,這也是采用S3C2410平臺(tái)進(jìn)行開發(fā)的有利條件。此外,我們還選用了帶有的觸摸屏的SHARP L35T23 3.5”液晶顯示器作為系統(tǒng)輸入/輸出設(shè)備。
(2)嵌入式操作系統(tǒng)方面,考慮到GUI界面開發(fā)的難易程度,我們選擇了Microsoft的Windows CE.NET 4.2。WinCE 4.2版本在內(nèi)核、實(shí)時(shí)性和網(wǎng)絡(luò)支持等方面做了很大的優(yōu)化和增強(qiáng),同時(shí)還為基于WinCE的嵌入式系統(tǒng)的開發(fā)提供了強(qiáng)大的工具——Platform Builder 4.2(PB 4.2)。這些特性有助于我們快速開發(fā)嵌入式系統(tǒng)。
(3)在開發(fā)工具的選擇上,我們選用了與Windows CE.NET 4.2同時(shí)推出的Microsoft Embedded Visual C++ 4.0(eVC 4.0)。這個(gè)開發(fā)環(huán)境和VC6.0十分類似,易于掌握,同時(shí)還包含有許多WinCE專用的標(biāo)準(zhǔn)開發(fā)工具和遠(yuǎn)程調(diào)試工具。
3.3 系統(tǒng)體系結(jié)構(gòu)
我們?cè)O(shè)計(jì)的嵌入式SIP終端系統(tǒng)總體結(jié)構(gòu)如圖3所示:
圖3 嵌入式SIP終端系統(tǒng)體系結(jié)構(gòu)
整個(gè)系統(tǒng)分為3個(gè)層次:
(1)系統(tǒng)平臺(tái)層:包括硬件平臺(tái)及運(yùn)行在其上的嵌入式操作系統(tǒng),這是整個(gè)系統(tǒng)的基礎(chǔ)。
(2)協(xié)議棧層:運(yùn)行SIP協(xié)議棧,為用戶程序提供調(diào)用。RTP模塊我們采用了開源的jrtplib。jrtplib采用C++編寫,可以方便的移植到WinCE系統(tǒng)上。移植jrtplib到嵌入式操作系統(tǒng)不是本文的重點(diǎn),具體做法在此不再贅述。
(3)用戶程序?qū)樱贺?fù)責(zé)接收用戶的輸入,根據(jù)用戶請(qǐng)求類型調(diào)用協(xié)議棧層功能,同時(shí)實(shí)現(xiàn)oSIP的回調(diào)函數(shù),并將結(jié)果反饋給用戶。
4、 嵌入式SIP終端的實(shí)現(xiàn)
4.1 系統(tǒng)平臺(tái)層實(shí)現(xiàn)
本系統(tǒng)開發(fā)使用的硬件設(shè)備都直接向設(shè)備供應(yīng)商購買,但由于嵌入式系統(tǒng)是軟硬件高度結(jié)合的系統(tǒng),還需要根據(jù)硬件條件定制一個(gè)WinCE平臺(tái)。在PB中可以定制出滿足各種不同需求的CE系統(tǒng)。我們使用設(shè)備供應(yīng)商提供的BSP,利用PB平臺(tái)創(chuàng)建向?qū)陆艘粋€(gè)WinCE映象文件并將其下載到開發(fā)板中固化。
4.2 協(xié)議棧層的實(shí)現(xiàn)
oSIP協(xié)議棧在設(shè)計(jì)之初就考慮到了滿足嵌入式操作系統(tǒng)的的特定要求,這使得只需做很少量的修改(主要是需要加入一些針對(duì)WinCE的頭文件)就能將oSIP移植到WinCE系統(tǒng)中。
另外,WinCE的API中沒有time()函數(shù)的實(shí)現(xiàn),我們需要自己實(shí)現(xiàn)這個(gè)函數(shù),代碼如下:
#ifdef _WIN32_WCE
SYSTEMTIME t;
#endif
……
#ifdef _WIN32_WCE
GetSystemTime(&t);
now = (int)((t.wYear-1970)*365*24*3600+t.wMonth*30*24*3600+t.wDay*24*3600+t.wHour*3600+ t.wMinute *60+t.wSecond);
#else
now = time(NULL);
#endif
完成必要的修改后,重新編譯就可以得到能在WinCE系統(tǒng)上使用動(dòng)態(tài)鏈接庫。
4.3 用戶程序?qū)拥膶?shí)現(xiàn)
在系統(tǒng)啟動(dòng)過程中,用戶程序首先根據(jù)用戶配置對(duì)系統(tǒng)全局變量進(jìn)行賦值操作,然后向oSIP協(xié)議棧注冊(cè)回調(diào)函數(shù),并啟動(dòng)數(shù)據(jù)包監(jiān)聽線程。一旦接受到數(shù)據(jù)包,則調(diào)用協(xié)議棧功能生成相應(yīng)事件并判斷該事件的處理事務(wù)是否存在,若存在則將事件放入該事務(wù)中,否則生成新的事務(wù),啟動(dòng)事務(wù)執(zhí)行線程。同時(shí)根據(jù)用戶動(dòng)作生成相應(yīng)事件交由協(xié)議棧處理。
oSIP通過狀態(tài)機(jī)回調(diào)函數(shù)與用戶程序通信,向用戶程序通告事件的發(fā)生及事務(wù)狀態(tài)。用戶程序調(diào)用oSIP協(xié)議棧API發(fā)起oSIP動(dòng)作(添加事件,事件處理等)。
5、 結(jié)束語
本文提出了一個(gè)基于ARM9核心的處理器平臺(tái),以oSIP協(xié)議棧為基礎(chǔ)的嵌入式SIP終端設(shè)計(jì)方案,并就嵌入式系統(tǒng)平臺(tái)搭建、協(xié)議棧移植、SIP用戶代理的實(shí)現(xiàn)等問題進(jìn)行了討論。測(cè)試結(jié)果表明,根據(jù)該方案實(shí)現(xiàn)的嵌入式SIP終端系統(tǒng)能實(shí)現(xiàn)預(yù)想的功能和性能。有理由相信,隨著SIP協(xié)議的廣泛應(yīng)用和嵌入式技術(shù)的不斷發(fā)展,嵌入式SIP終端將具有美好的前景。
本文作者創(chuàng)新點(diǎn):本文討論并實(shí)現(xiàn)了oSIP協(xié)議棧在WinCE系統(tǒng)上的移植和應(yīng)用,提出了一個(gè)嵌入式SIP終端的系統(tǒng)分層結(jié)構(gòu)同時(shí)指出了上述分層結(jié)構(gòu)中各層次在實(shí)現(xiàn)時(shí)要注意的主要問題。
參考文獻(xiàn)
[1] 司端鋒,韓心慧,龍勤等.SIP標(biāo)準(zhǔn)中的核心技術(shù)與研究進(jìn)展[J].軟件學(xué)報(bào).2005 16(2).
[2] 劉志軍,王風(fēng)著,張孟輝等.軟交換技術(shù)協(xié)議SIP及其在VoIP中應(yīng)用[J].微計(jì)算機(jī)信息.2006,09-3:169-172
[3] 盧華,王保保.oSIP協(xié)議棧的研究及應(yīng)用[J].電子科技.2006.2.
[4] libosip Documentation 2.2.0.http://www.gnu.org/software/osip/doc/html/