短消息代理(CMPP20 SMProxy)使用说明书
- 格式:doc
- 大小:936.50 KB
- 文档页数:17
第一章 概述1 产品概述目前我们提供的JAVA 版本的SMProxy 是在原有的UNIX 平台上的短消息代理(SM PROXY)演变而来,JAVA 版本的短消息代理可以同时满足Unix 和WINDOW NT 平台的使用。
SMProxy 与ISMG 建立TCP 连接进行通信,并负责短消息发送和接收、维护与ISMG 的握手、断连重连等;SMProxy 提供客户API 接口函数,包括登录PROXY 、退出PROXY 、发送短消息、接受短消息、接受响应信息、查询短消息信息、取消短消息等。
SMProxy 支持多线程并发使用发送短消息,SMProxy 和ISMG 之间使用的通信协议是CMPP 协议。
2 组网结构SMProxy 就是运行在ICP 的WWW Server 或者Email Server 上,负责和ISMG 进行CMPP协议的通讯,要求SP的功能实体向ISMG发CMPP_SUBMIT消息,由ISMG将消息转发到某SMC上。
同时,SMC也可向ISMG发送短消息,由ISMG发送给相应的SP。
3 SMProxy的结构客户程序调用到SM PORXY提供的接口函数实现收发短消息,SM PROXY实现把客户程序所发出的消息按CMPP协议进行编码后发给数据增值业务中心(infoX),由数据增值业务中心(infoX)发送给SMC,并通过数据增值业务中心(infoX)接收SMC所响应的消息与主动下发的消息并进行解码后,通知客户程序接收SMC主动下发的短消息。
第二章 CMPP协议的封装CMPP协议封装在m.cmpp.message包中,主要消息如下(1)CMPPActiveMessage 心跳消息,对应CMPP1.2.1文档中的CMPP_Active_Test消息,是SMProxy与ISMG的心跳消息。
(2)CMPPActiveRepMessage 心跳响应消息,对应CMPP1.2.1文档中的CMPP_Active_Test_REP,是SMProxy发送心跳消息后收到的响应消息(3)CMPPCancelMessage 删除短信消息,对应CMPP1.2.1文档中的CMPP_Cancel的消息,是SMProxy向ISMG发送的删除短消息。
(4)CMPPCancelRepMessage 删除短信响应消息,对应CMPP1.2.1文档中的CMPP_Cancel_REP的消息,是SMProxy发送删除短信后收到的响应消息。
(5)CMPPConnectMessage 请求连接消息,对应CMPP1.2.1文档中的CMPP_Connect的消息,是SMProxy向ISMG发送的建立逻辑请求连接消息。
(6)CMPPConnectRepMessage 请求连接应答消息,对应CMPP1.2.1文档中的CMPP_Connect_REP的消息,是SMProxy向ISMG发送的建立逻辑请求连接后收到的响应消息。
(7)CMPPDeliverMessage ISMG下发短信,对应CMPP1.2.1文档中的CMPP_Deliver消息,是ISMG下发给SMProxy的短消息或者状态报告消息。
(8)CMPPDeliverRepMessage 下发短信响应,对应CMPP1.2.1文档中的CMPP_Deliver_REP消息,是SMProxy收到的下发短信后的响应消息。
(9)CMPPQueryMessage 发送短信状态查询消息,对应CMPP1.2.1文档中的CMPP_Query消息,是SMProxy查询Time属性指定的日期的统计信息。
(10)CMPPQueryRepMessage 发送短信状态查询的响应消息,对应CMPP1.2.1文档中的CMPP_Query_REP消息。
1(11)CMPPSubmitMessage 发送短信消息,对应CMPP1.2.1文档中的CMPP_Submit消息,是SMProxy发送短讯的消息。
(12)CMPPSubmitRepMessage 下发短信的响应,对应CMPP1.2.1 文档中的CMPP_Submit_REP消息,是SMProxy发送短讯的响应消息。
(13)CMPPTerminateMessage 终止连接消息,对应CMPP1.2.1 文档中的CMPP_Terminate消息,是ISMG和SMProxy终止逻辑连接的消息。
(14)CMPPTerminateRepMessage 终止连接的响应消息,对应CMPP1.2.1 文档中的CMPP_Terminate_REP消息,是ISMG或SMProxy收到终止连接后发送的响应消息。
其中的心跳消息(1,2)、建立逻辑连接的消息(5,6)和终止逻辑连接消息(13,14)只是SMProxy系统内部使用消息,提供给外部的接口中不涉及这六条消息。
第三章 SMProxy使用说明1 SMProxy提供的接口方法描述1、send【函数功能】向ISMG发送CMPP消息,阻塞直到收到响应或超时。
【函数原型】CMPPMessage send(CMPPMessage message);【参数说明】[IN] message - 发送的CMPP消息,包括(1)CMPPSubmitMessage 提交短信(2)CMPPQueryMessage 发送短信状态查询(3)CMPPCancelMessage 删除短信【处理】调用这个接口方法,向ISMG发送Submit/Query/Cancel等命令消息。
如果发送消息超时或通信异常则抛出异常,需要调用者捕获处理。
【返回值】发送CMPPSubmitMessage,返回CMPPSubmitRepMessage;发送CMPPCancelMessage,返回CMPPCancelRepMessage;发送CMPPQueryMessage,返回CMPPQueryRepMessage;2 close【函数功能】向ISMG发送终止连接CMPP消息,调用之后连接将永久不可用。
【函数原型】Void close();【参数说明】无【处理】调用这个接口方法,SMProxy向ISMG发送CMPPTerminateMessage消息如果发送消息超时或通信异常则抛出异常,需要调用者捕获处理。
【返回值】无3 getConnState【函数功能】获取通讯连接的状态方法。
【函数原型】1String getConnState();【参数说明】无【处理】调用这个接口方法,获取TCP连接状态的描述。
如果发送消息超时或通信异常则抛出异常,需要调用者捕获处理。
【返回值】当前错误描述,若连接正常则返回null。
2 封装接口方法的SMProxy的抽象类SMProxy在com.huawei.SMProxy的包中,封装了Send、close、getConnState方法。
SMProxy是一个抽象类,需要被继承使用。
SMProxy抽象类的框架如下:public class SMProxy{public SMProxy(Args args){//完成初始化和向ISMG登录等工作}public SMProxy(Map args){//完成初始化和向ISMG登录等工作}/*** 发送消息,阻塞直到收到响应或超时。
* 返回为收到的消息* @exception PException 超时或通信异常。
*/public CMPPMessage send(CMPPMessage message){//发送消息}/*** 连接终止的处理,由API使用者实现* SMC连接终止后,需要执行动作的接口*/public void onTerminate(){}/*** 对收到消息的处理。
由API使用者实现。
* @param msg 从短消息中心来的消息。
* @return 应该回的响应,由API使用者生成。
*/public CMPPMessage onDeliver(CMPPDeliverMessage msg){}/*** 终止连接。
调用之后连接将永久不可用。
*/public void close(){}/*** 提供给业务层调用的获取连接状态的方法*/public String getConnState(){//返回连接状态的描述}}3 使用SMProxy抽象类可以直接使用SMProxy类提供的Send、close和getConnState方法但是如果SP有接收ISMG下发的短信的要求或ISMG断开连接的时候要求得到事件通知的时候,就必须声明一个新的类继承SMProxy,重载实现onDeliver( )和onTerminate( )。
使用例子如下://定义MySMProxy所在的包是com.huawei.SMProxypackage com.huawei.SMProxy;import m.cmpp.message.*;import com.huawei.insa2.util.Args;public class MySMProxy extends SMProxy{public MySMProxy(Args args){//调用父类的构造函数,完成初始化和登录ISMG的功能,不能省略super(args);}public CMPPMessage onDeliver(CMPPDeliverMessage msg){//添加收到短消息中心下发消息的处理代码。
//实际上是返回响应消息,一定要有return super.onDeliver(msg);}public void OnTerminate(){//可以添加ISMG和SMProxy断开连接的处理代码}}实际使用SMProxy封装的send、close和getConnState的接口方法的时候,只需要生成MySMProxy的对象,然后调用MySMProxy的send、close和getConnState方法即可。
4 配置参数使用说明SMProxy需要的配置参数如下表配置文件可以采用我们提供的XML格式,也可以采用其他格式,只要构造的时候能通过Map类型或Arg类型的参数传入指定的参数就可以了。
例如可以用java的property文件保存参数,或将配置和ICP的应用程序配置放在一起。
下面是以XML格式定义的配置文件SMProxy.xml是在SMProxy.jpx的工程目录下,是使用XML写的配置文件,具体内容如下其中以"<!--"开头的语句是注释部分<?xml version="1.0" encoding="GB2312"?><!-- SM Proxy 配置文件--><config><!--与ISMG(Internet Short Message Gateway)建立连接所需参数--><ismg><!-- ISMG主机地址 --><host>10.76.148.147</host><!-- ISMG主机端口号 --><port>7890</port><!-- 心跳信息发送间隔时间(单位:秒) --><heartbeat-interval>10</heartbeat-interval><!-- 连接中断时重连间隔时间(单位:秒)--><reconnect-interval>10</reconnect-interval><!-- 需要重连时,连续发出心跳而没有接收到响应的个数(单位:个)--><heartbeat-noresponseout>5</heartbeat-noresponseout><!-- 操作超时时间(单位:秒) --><transaction-timeout>10</transaction-timeout><!--SP…ID(最大为六位字符)--><source-addr>d86138</source-addr><!--双方协商的版本号(大于0,小于256)--><version>0</version><!--shared-secret由中国移动与ICP事先商定--><shared-secret></shared-secret><!--是否属于调试状态,true表示属于调试状态,所有的消息被打印输出到屏幕,false表示不属于调试状态,所有的消息不被输出--><debug>true</debug></ismg></config>使用的时候可以根据实际情况配置ISMG主机地址<host>10.76.148.147</host>ISMG主机端口号<port>7890</port>心跳信息发送间隔时间(单位:秒)<heartbeat-interval>10</heartbeat-interval>连接中断时重连间隔时间(单位:秒)<reconnect-interval>10</reconnect-interval>需要重连时,连续发出心跳而没有接收到响应的个数(单位:个) <heartbeat-noresponseout>5</heartbeat-noresponseout>操作超时时间(单位:秒)<transaction-timeout>10</transaction-timeout>SP向ISMG申请的ID(最大为六位字符)<source-addr>d86138</source-addr>双方协商的版本号(大于0,小于256)<version>0</version>shared-secret由中国移动与ICP事先商定,SP向ISMG申请的ID所对应的密码<shared-secret></shared-secret>true表示属于调试状态,所有的消息被打印输出到屏幕,false表示不属于调试状态,所有的消息不被输出<debug>true</debug>举例说明:如果ISMG的IP地址为10.76.148.168,则只需要修改<host>10.76.148.147</host>为<host>10.76.148.168</host>即可,同样可以根据实际情况修改其他的配置项。