📄 cmpp_proto.h
字号:
/********************************************************************** FileName : cmpp_proto.h Description : CMPP协议头文件 Version : 1.0 Date : 2003年4月12日 Author : 刘荣辉 Other : ***********************************************************************/#ifndef _CMPP_PROTO_H_#define _CMPP_PROTO_H_#ifdef _AIX #pragma options align=packed#elif defined _HPUX #pragma pack 1#else #pragma pack (1)#endif#define CMPPVersion 0x20; /*系统支持的CMPP版本号*/#define CMPP_Pack_MAX 2400; /*最大的CMPP包长度(群发submit包)*/#define CMPP_WINDOW_SIZE 256 //CMPP滑动窗口的大小(流量控制),default : 16#define CMPP_SEND_TIMEOUT 60 //超时重发(秒)#define CMPP_SEND_RETRIES 2 //最大可发送次数#define CMPP_CONNECT 0x1#define CMPP_CONNECT_RESP 0x80000001#define CMPP_TERMINATE 0x2#define CMPP_TERMINATE_RESP 0x80000002#define CMPP_SUBMIT 0x4#define CMPP_SUBMIT_RESP 0x80000004#define CMPP_DELIVER 0x5#define CMPP_DELIVER_RESP 0x80000005#define CMPP_QUERY 0x6#define CMPP_QUERY_RESP 0x80000006#define CMPP_CANCEL 0x7#define CMPP_CANCEL_RESP 0x80000007#define CMPP_ACTIVE_TEST 0x8#define CMPP_ACTIVE_TEST_RESP 0x80000008#define CMPP_FWD 0x9#define CMPP_FWD_RESP 0x80000009#define CMPP_MT_ROUTE 0x10#define CMPP_MT_ROUTE_RESP 0x80000010#define CMPP_MO_ROUTE 0x11#define CMPP_MO_ROUTE_RESP 0x80000011#define CMPP_GET_ROUTE 0x12#define CMPP_GET_ROUTE_RESP 0x80000012#define CMPP_MT_ROUTE_UPDATE 0x13#define CMPP_MT_ROUTE_UPDATE_RESP 0x80000013#define CMPP_MO_ROUTE_UPDATE 0x14#define CMPP_MO_ROUTE_UPDATE_RESP 0x80000014#define CMPP_PUSH_MT_ROUTE_UPDATE 0x15#define CMPP_PUSH_MT_ROUTE_UPDATE_RESP 0x80000015#define CMPP_PUSH_MO_ROUTE_UPDATE 0x16#define CMPP_PUSH_MO_ROUTE_UPDATE_RESP 0x80000016typedef struct _CMPP_HEAD{ unsigned int Total_Length; //消息总长度(含消息头及消息体) unsigned int Command_Id; //命令或响应类型 unsigned int Sequence_Id; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)}CMPP_Head;typedef struct _CMPP_CONNECT{ CMPP_Head Head; //包头 char Source_Addr[6]; //源地址SP_Id,即SP的企业代码,对于下节点来说填服务代码(接入号) char AuthenticatorSource[16]; //用于鉴别源地址。其值通过单向MD5 hash计算得出,表示如下:AuthenticatorSource =MD5(Source_Addr+9 字节的0 +shared secret+timestamp)Shared secret 由中国移动与源地址实体事先商定,timestamp格式为:MMDDHHMMSS,即月日时分秒,10位。 unsigned char Version; //双方协商的版本号(高位4bit表示主版本号,低位4bit表示次版本号) unsigned int Timestamp; //时间戳的明文,由客户端产生,格式为MMDDHHMMSS,即月日时分秒,10位数字的整型,右对齐 。}CMPP_Connect;typedef struct _CMPP_CONNECT_RESP{ CMPP_Head Head; //包头 unsigned char Status; //状态0:正确1:消息结构错 2:非法源地址 3:认证错 4:版本太高 5~ :其他错误 char AuthenticatorISMG[16]; //ISMG认证码,用于鉴别ISMG。其值通过单向MD5 hash计算得出,表示如下:AuthenticatorISMG =MD5(Status+AuthenticatorSource+shared secret),Shared secret 由中国移动与源地址实体事先商定,AuthenticatorSource为源地址实体发送给ISMG的对应消息CMPP_Connect中的值。 认证出错时,此项为空 unsigned char Version; //服务器支持的最高版本号}CMPP_Connect_Resp;typedef struct _CMPP_TERMINATE{ unsigned int Total_Length; //消息总长度(含消息头及消息体) unsigned int Command_Id; //命令或响应类型 unsigned int Sequence_Id; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)}CMPP_Terminate;typedef struct _CMPP_TERMINATE_RESP{ unsigned int Total_Length; //消息总长度(含消息头及消息体) unsigned int Command_Id; //命令或响应类型 unsigned int Sequence_Id; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)}CMPP_Terminate_Resp;typedef struct _CMPP_SUBMIT{ CMPP_Head Head; //包头 //unsigned char Msg_Id[8]; //信息标识,由SP侧短信网关本身产生,本处填空。 long long Msg_Id; unsigned char Pk_total; //相同Msg_Id的信息总条数,从1开始 unsigned char Pk_number; //相同Msg_Id的信息序号,从1开始 unsigned char Registered_Delivery; //是否要求返回状态确认报告:0:不需要1:需要2:产生SMC话单 (该类型短信仅供网关计费使用,不发送给目的终端) unsigned char Msg_level; //信息级别 char Service_Id[10]; //业务类型,是数字、字母和符号的组合。 unsigned char Fee_UserType; //计费用户类型字段0:对目的终端MSISDN计费;1:对源终端MSISDN计费;2:对SP计费;3:表示本字段无效,对谁计费参见Fee_terminal_Id字段。 char Fee_terminal_Id[21]; //被计费用户的号码(如本字节填空,则表示本字段无效,对谁计费参见Fee_Userstruct字段,本字段与Fee_Userstruct字段互斥) unsigned char TP_pId; //GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.9 unsigned char TP_udhi; //GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐 unsigned char Msg_Fmt; //信息格式 0:ASCII串 3:短信写卡操作 4:二进制信息 8:UCS2编码15:含GB汉字 char Msg_src[6]; //信息内容来源(SP_Id) char FeeType[2]; //资费类别01:对"计费用户号码"免费 char FeeCode[6]; //资费代码(以分为单位) char ValId_Time[17]; //存活有效期,格式遵循SMPP3.3协议 char At_Time[17]; //定时发送时间,格式遵循SMPP3.3协议 char Src_Id[21]; //源号码SP的服务代码或前缀为服务代码的长号码, 网关将该号码完整的填到SMPP协议Submit_SM消息相应的source_addr字段,该号码最终在用户手机上显示为短消息的主叫号码 unsigned char DestUsr_tl; //接收信息的用户数量(小于100个用户) char Dest_terminal_Id[21]; //接收短信的MSISDN号码 unsigned char Msg_Length; //信息长度(Msg_Fmt值为0时:<160个字节;其它<=140个字节) char Msg_Content[140]; //信息内容 char Reserve[8]; //保留}CMPP_Submit;typedef struct _CMPP_SUBMIT_RESP{ CMPP_Head Head; //包头 //unsigned char Msg_Id[8]; long long Msg_Id; unsigned char Result;}CMPP_Submit_Resp;typedef struct _CMPP_QUERY{ CMPP_Head Head; //包头 unsigned char Time[8]; //时间YYYYMMDD(精确至日) unsigned char Query_Type; //查询类别0:总数查询1:按业务类型查询 char Query_Code[10]; //查询码当Query_struct为0时,此项无效;当Query_struct为1时,此项填写业务类型Service_Id. char Reserve[8]; //保留}CMPP_Query;typedef struct _CMPP_QUERY_RESP{ CMPP_Head Head; //包头 unsigned char Time[8]; //时间(精确至日) char Query_struct[1]; //查询类别0:总数查询1:按业务类型查询 char Query_Code[10]; //查询码 unsigned int MT_TLMsg; //从SP接收信息总数 unsigned int MT_Tlusr; //从SP接收用户总数 unsigned int MT_Scs; //成功转发数量 unsigned int MT_WT; //待转发数量 unsigned int MT_FL; //转发失败数量 unsigned int MO_Scs; //向SP成功送达数量 unsigned int MO_WT; //向SP待送达数量 unsigned int MO_FL; //向SP送达失败数量}CMPP_Query_Resp;typedef struct _CMPP_REPORT{ //unsigned char Msg_ID[8]; //信息标识SP提交短信(CMPP_SUBMIT)操作时,与SP相连的ISMG产生的Msg_Id。 long long Msg_Id; char Stat[7]; //发送短信的应答结果 char Submit_time[10]; char Done_time[10]; char Dest_terminal_Id[21]; //目的终端MSISDN号码(SP发送CMPP_SUBMIT消息的目标终端) unsigned int SMSC_sequence; //取自SMSC发送状态报告的消息体中的消息标识。}CMPP_Report;typedef struct _CMPP_DELIVER{ CMPP_Head Head; //包头 //unsigned char Msg_Id[8]; //信息标识 long long Msg_Id; char Dest_Id[21]; //目的号码 char Service_Id[10]; //业务类型,是数字、字母和符号的组合。 unsigned char TP_pid; //GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9 unsigned char TP_udhi; //GSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐 unsigned char Msg_Fmt; //信息格式 char Src_terminal_Id[21]; //源终端MSISDN号码 unsigned char Registered_Delivery; //是否为状态报告, 0非状态报告, 1状态报告 unsigned char Msg_Length; //消息长度 union { char Msg_Content[140]; //消息内容 CMPP_Report Report; }Deliver_Msg; char Reserved[8]; //保留项}CMPP_Deliver;typedef struct _CMPP_DELIVER_RESP{ CMPP_Head Head; //包头 //unsigned char Msg_Id[8]; long long Msg_Id; unsigned char Result;}CMPP_Deliver_Resp;typedef struct _CMPP_CANCEL{ CMPP_Head Head; //包头 //unsigned char Msg_Id[8]; //信息标识(SP想要删除的信息标识) long long Msg_Id;}CMPP_Cancel;typedef struct _CMPP_CANCEL_RESP{ CMPP_Head Head; //包头 unsigned char Success_Id; //成功标识 0:成功 1:失败 }CMPP_Cancel_Resp;typedef struct _CMPP_ACTIVE_TEST{ unsigned int Total_Length; //消息总长度(含消息头及消息体) unsigned int Command_Id; //命令或响应类型 unsigned int Sequence_Id; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)}CMPP_Active_Test;typedef struct _CMPP_ACTIVE_TEST_RESP{ CMPP_Head Head; //包头 char Reserved;}CMPP_Active_Test_Resp;#ifdef _AIX #pragma options align=reset#elif defined _HPUX #pragma pack 4#else #pragma pack ()#endif#endif /*_CMPP_PROTO_H_*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -