Design and Implementation of one of the GSM Short Message Value-Added Service Interface Based on PRotocol SMPP
鄒建新 黃本雄
華中科技大學電信系 (430074)
Jianxin Zou Benxiong Huang
Telecommunication Department of Huazhong University of Science and Technology (430074)
摘要:本文首先介紹了GSM短消息點對點協議SMPP的定義、接口連接和消息處理機制;在分析GSM短消息增值業務接口的基礎上詳細論述了基于SMPP協議的一種GSM短消息增值業務接口通信服務程序的實現。
關鍵詞: 短信增值業務; SMPP協議; 通信服務接口; UNIX網絡編程
Abstract: This paper introduce the concept and structure of GSM Short Message Value-added Service and the Short Message point-to-point protocol SMPP. Then gives a method of Design and Implementation of the GSM Short Message Value-Added Service Interface Based on Protocol SMPP in details. Some important technology items are also shows.
KeyWords: Short Message Value-added Service; SMPP protocol; Communication Interface; UNIX network programming
1、 前言
短消息業務是GSM/DCS1800系統中唯一不需要建立端到端業務通道的業務,它通過GSM系統的信令信道(SDCCH用戶正常時或SACCH用戶忙時)來傳送短消息,通過SMSC完成接收、存儲和轉發用戶的短消息,如何充分利用SMSC的有效資源開展方便靈活的增值業務,實現信息的互連和共享,即為短消息業務提供更多的信息源。
目前SMSC均提供與外界的接口方式。最廣泛應用的協議有SMPP(Short Message Peer to Peer)(含中國移動點對點協議CMPP)/CIMD (Computer Interface Message Distribution) 等。通過SMPP通信服務接口,可以向用戶提供許多應用,為開展新業務提供了廣闊的前景。
2、 SMPP協議格式及消息交互定義
2.1 SMPP PDU定義
SMPP協議是一個開放的消息轉換協議;它定義了一系列操作的協議數據單元(PDUs)和當SMPP運行時ESMS應用系統與SMSC之間交換的數據。從而完成SMSC與ESMEs(外部短消息實體)的信息交換。SMPP是基于SMSC與ESME之間的請求和響應協議數據單元的交換,每一個SMPP操作都由一個請求PDU和相應的一個響應PDU組成并且這種交換是在TCP/ip或X.25網絡連接之上的。因此基于SMPP短消息增值業務接口利用Socket網絡編程實現。根據SMPP協議,每個PDU的結構定義由PDU Header和PDU Body(有些PDU沒有)組成,見下表:
PDU Header(mandatory) PDU Body(optional)
整個PDU的長度 PDU的類型 PDU的狀態 PDU的序列號 必要參數 可選參數
Command length Command
id Command status Sequence number Mandatory parameters Optional parameters
Unsigned long Unsigned long Unsigned long Unsigned long mixed TLV
其中協議定義了非常復雜的可選參數,每個可選參數的結構定義如下:
可選參數標簽 參數值的字節長度 參數的取值
Tag Length Value
Unsigned int Unsigned int 變長
其定義是為擴充應用功能,但在常見的短消息增值業務應用中,只需使用PDU的必選參數即可,但如要實現,也只是在PDU定義結構中添加可選項,對系統的實現無影響。
2.2 短消息增值業務交互數據格式定義
短消息增值業務接口的作用是為建立ESME與SMSC及業務應用源的連接。其結構示意圖如下:
其功能(1)將來自SMSC的協議數據進行SMPP解碼,得到的信息寫入數據庫或發給各業務服務中心;(2)將來自各業務服務中心的消息進行SMPP編碼,通過通信模塊提供的連接發往SMSC,并將必要的信息寫入數據庫。其中SMSC與通信接口之間是通過SMPP協議PDUs交互的,而通信接口與各種業務源之間的消息交互還必須確定數據幀的含義,保證消息交互的 正確性,同時因許多信息在SMPP編碼、解碼時進行了分解取舍,所以對于前端業務中心數據通信需要定義數據幀格式,如下表:
Frame Header (mandatory) Frame Body(optional)
整個幀長度 幀類型ID 幀狀態 幀序號 必要參數
Command length Command
id Command status Sequence number Mandatory parameters
4字節 2字節 2字節 4字節 mixed
3、 通信接口服務系統的實現
3.1 系統完成功能需求
(1) 與SMSC連接和綁定
(2) 與各應用業務中心的連接
(3) 接收SMSC短消息、解碼并進行短消息應答編碼
(4) 對接收短消息合法檢查、識別所屬應用業務并組成相應的內部數據幀
(5) 發送內部數據幀到所屬應用業務中心
(6) 接收各應用業務中心發送的內部數據幀并應答
(7) 對接受的數據幀解析并進行SMPP編碼并發送至SMSC
(8) 對發送和接收的短消息計費統計
3.2 系統設計與實現
由上述系統的主要功能看出系統實際上是相對獨立兩個處理流程,一個是處理與SMSC的編碼、解碼和數據的收、發;另一個是與前端應用業務中心的數據幀編碼、解碼和數據收發。并且消息的到達具有隨機、快速和突發性,因此將系統設計為兩個主進程。分別處理SMSC消息和應用業務中心消息。兩個進程之間采用消息隊列進行消息通信,因為在短消息增值業務中所有消息都可以認為是一條單獨的消息,沒有邏輯關系也不存在實時共享關系。為保證系統的安全與正確,對短消息的發送采用定時進程控制;為適應系統的可擴充性,對數據庫的操作、訪問采用數據庫訪問進程單獨進行處理。系統結構圖如下:
3.2.1 SMSC進程處理功能流程
首先與SMSC進行SOCKET連接并偵聽TCP端口,對SMSC發綁定消息,接收SMSC發送的短消息進行解碼并檢查其合法性,對合法正確分類的消息組成前臺業務應用定義的內部數據幀(格式前面已定義),將已組好的內部數據幀發送到SMSC->SERV消息隊列;然后取SERV->SMSC消息隊列消息存包并啟動定時器,發送PDU到SMSC。其內部結構如下圖:
PACKET結構數組的作用是存儲即將發送或已經發送的PDU包,其定義如下:
typedef struct {
unsigned int seqnum;
int ordernum;
char data[MAX];
} pend_packet;
每個pend_packet結構對應一個PDU包,其中seqnum是與該PDU包結構中的HEADER中的sequence_number一致的;ordernum是該PDU包存入PACKET數組的序列號,即全局變量ORDERNUM,在每次調用存包模塊時,ORDERNUM會自動遞增,則所存的PDU包的ordernum即為此ORDERNUM。但在接收到該PDU包的回應以后,則將該PDU包在PACKET數組中的ordernum置為-1,表示將其清除。
因為每個SMSC對應的socket有5個狀態,在調用發包模塊時,只有當對應socket的狀態為DATA_STATUS時,才能直接將PDU包發送至對應SMSC,否則要調用綁定模塊對該SMSC重新進行綁定。在這兩種情況下,都要將PDU包存入PACKET數組。在接收到綁定數據包的響應包后,則將綁定數據包在PACKET數組中的狀態置為-1,將該socket在socket_smsc表中狀態置為DATA_STATUS,同時將PACKET數組中屬于該socket的PDU包發至SERV->SMSC消息隊列,SERV->SMSC消息隊列處理模塊會調用發包模塊將這些包發送至相應SMSC。在收到數據包的響應包后,則將該數據包在PACKET數組中的狀態置為-1。
3.2.2 SERV進程處理功能流程
SERV進程則相對較簡單,完成對SERV的數據接收、編碼并發送到SERV->SMSC消息隊列;取SMSC->SERV消息隊列中消息發送到前臺業務服務中心。實現結構圖略。
3.2.3 定時器進程及數據庫的訪問
在通信軟件系統中,需要利用定時器來管理任務的調度和通信、通信協議的超時(提供差錯控制的機制)和系統數據的定時更新等多種事務。在那些對時鐘數量和種類要求不多,精度要求不高的應用場合,可以直接使用操作系統提供的時鐘功能。然而,實際的通信軟件要求時鐘種類多,并發的時鐘數量龐大。有的對精度要求極為嚴格,在這種情況下可以考慮采用實時操作系統。linux中Spec1170提供了三種間隔計時器,其中一種是ITIMER_REAL 類型,它的機制是:當該類型的間隔計時器到期時,系統內核會發出SIGALARM信號,可以通過捕獲這一信號來感知間隔計時器的到期。根據這一原理,設計了基于Linux操作系統的spec1170軟件間隔計時器的多任務定時服務器,來對實時通信系統提供支持。
通信接口系統對Oracle 8i數據庫的訪問采用單獨進程實現,Oracle提供Proc預編譯器,Proc可將.pc文件預編譯成.c文件,然后在Linux/UNIX中用cc或gcc鏈接oracle數據庫下的頭文件和庫文件,編譯鏈接成可執行文件。
4、 結束語
設計的短消息增值接口通信系統采用結構化模塊向客戶提供服務。在性能上采用開辟多個線程和合理協調多個進程間的優先級及進程內部各任務優先級,并為降低系統空閑時對CPU的占有率,將系統的非阻塞方式改為阻塞(消息觸發)方式。系統在SUN Solaris系統下運行,我們將其用在GPS車輛定位軟件系統中,實踐證明,它達到了預期設計目標,能夠滿足系統通信應用的要求。
參考文獻
[1]Key A.Robbins ,Steven Robbins,pratical unix programming,1999,8。
[2]SMPP Developers Forum; Short Message Peer to Peer Protocol Specification v3.4;Document Version 1.2 ;1999.10
[3]鄒建新;GSM短消息接口協議SMPP的研究。武漢科技學院學報;2000.12(4):12~17
作者聯系方式: 電話:027-87410171 電子郵件:frankzou_cn@263.net:
新聞熱點
疑難解答