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: