📄 cmpp.h
字号:
#pragma pack(1)
const unsigned int CMPP_CONNECT=0x1;
const unsigned int CMPP_CONNECT_RESP=0x80000001;
const unsigned int CMPP_TERMINATE = 0x2;
const unsigned int CMPP_TERMINATE_RESP = 0x80000002;
const unsigned int CMPP_SUBMIT = 0x4;
const unsigned int CMPP_SUBMIT_RESP=0x80000004;
const unsigned int CMPP_DELIVER = 0x5;
const unsigned int CMPP_DELIVER_RESP = 0x80000005;
const unsigned int CMPP_QUERY = 0x6;
const unsigned int CMPP_QUERY_RESP = 0x80000006;
const unsigned int CMPP_CANCEL = 0x7;
const unsigned int CMPP_CANCEL_RESP = 0x80000007;
const unsigned int CMPP_ACTIVE_TEST = 0x8;
const unsigned int CMPP_ACTIVE_TEST_RESP = 0x80000008;
const unsigned int CMPP_FWD = 0x9;
const unsigned int CMPP_FWD_RESP = 0x80000009;
const unsigned int CMPP_MT_ROUTE = 0x10;
const unsigned int CMPP_MT_ROUTE_RESP = 0x80000010;
const unsigned int CMPP_MO_ROUTE = 0x11;
const unsigned int CMPP_MO_ROUTE_RESP = 0x80000011;
const unsigned int CMPP_GET_ROUTE = 0x12;
const unsigned int CMPP_GET_ROUTE_RESP = 0x80000012;
const unsigned int CMPP_MT_ROUTE_UPDATE = 0x13;
const unsigned int CMPP_MT_ROUTE_UPDATE_RESP = 0x80000013;
const unsigned int CMPP_MO_ROUTE_UPDATE = 0x14;
const unsigned int CMPP_MO_ROUTE_UPDATE_RESP = 0x80000014;
const unsigned int CMPP_PUSH_MT_ROUTE_UPDATE = 0x15;
const unsigned int CMPP_PUSH_MT_ROUTE_UPDATE_RESP = 0x80000015;
const unsigned int CMPP_PUSH_MO_ROUTE_UPDATE = 0x16;
const unsigned int CMPP_PUSH_MO_ROUTE_UPDATE_RESP = 0x80000016;
/* 消息头定义 ******************************************************************
*struct CMPP_HEADER *
*{ *
* unsigned char Total_Length[4]; //消息总长度(含消息头及消息体) *
* unsigned char Command_Id[4]; //命令或响应类型 *
* unsigned char Sequence_Id[4]; //消息流水号,顺序累加,步长为1,循环使用 *
* (一对请求和应答消息的流水号必须相同) *
*};*****************************************************************************/
//消息体定义
struct CMPP_CONNECT_tag
{
unsigned int Total_Length; //消息总长度(含消息头及消息体)
unsigned int Command_Id; //命令或响应类型
unsigned int Sequence_Id; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)
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位。
byte Version; //双方协商的版本号(高位4bit表示主版本号,低位4bit表示次版本号)
unsigned int Timestamp; //时间戳的明文,由客户端产生,格式为MMDDHHMMSS,即月日时分秒,10位数字的整型,右对齐 。
};
struct CMPP_CONNECT_RESP_tag
{
unsigned int Total_Length; //消息总长度(含消息头及消息体)
unsigned int Command_Id; //命令或响应类型
unsigned int Sequence_Id; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)
byte 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中的值。 认证出错时,此项为空
byte Version; //服务器支持的最高版本号
};
struct CMPP_TERMINATE_tag
{
unsigned int Total_Length; //消息总长度(含消息头及消息体)
unsigned int Command_Id; //命令或响应类型
unsigned int Sequence_Id; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)
};
struct CMPP_TERMINATE_RESP_tag
{
unsigned int Total_Length; //消息总长度(含消息头及消息体)
unsigned int Command_Id; //命令或响应类型
unsigned int Sequence_Id; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)
};
struct CMPP_SUBMIT_tag
{
unsigned int Total_Length; //消息总长度(含消息头及消息体)
unsigned int Command_Id; //命令或响应类型
unsigned int Sequence_Id; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)
unsigned char Msg_Id[8]; //信息标识,由SP侧短信网关本身产生,本处填空。
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]; //保留
};
struct CMPP_SUBMIT_RESP_tag
{
unsigned int Total_Length; //消息总长度(含消息头及消息体)
unsigned int Command_Id; //命令或响应类型
unsigned int Sequence_Id; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)
unsigned char Msg_Id[8];
byte Result;
};
struct CMPP_QUERY_tag
{
unsigned int Total_Length; //消息总长度(含消息头及消息体)
unsigned int Command_Id; //命令或响应类型
unsigned int Sequence_Id; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)
unsigned char Time[8]; //时间YYYYMMDD(精确至日)
byte Query_Type; //查询类别0:总数查询1:按业务类型查询
char Query_Code[10]; //查询码当Query_struct为0时,此项无效;当Query_struct为1时,此项填写业务类型Service_Id.
char Reserve[8]; //保留
};
struct CMPP_QUERY_RESP_tag
{
unsigned int Total_Length; //消息总长度(含消息头及消息体)
unsigned int Command_Id; //命令或响应类型
unsigned int Sequence_Id; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)
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送达失败数量
};
struct CMPP_DELIVER_tag
{
unsigned int Total_Length; //消息总长度(含消息头及消息体)
unsigned int Command_Id; //命令或响应类型
unsigned int Sequence_Id; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)
unsigned __int64 Msg_Id; //信息标识
char Dest_Id[21]; //目的号码
char Service_Id[10]; //业务类型,是数字、字母和符号的组合。
byte TP_pid; //GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9
byte TP_udhi; //GSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐
byte Msg_Fmt; //信息格式
char Src_terminal_Id[21]; //源终端MSISDN号码
byte Registered_Delivery; //是否为状态报告0:非状态报告1:状态报告
byte Msg_Length; //消息长度
char Msg_Content[140]; //消息内容
char Reserved[8]; //保留项
};
struct CMPP_Report_tag
{
unsigned __int64 Msg_ID; //信息标识SP提交短信(CMPP_SUBMIT)操作时,与SP相连的ISMG产生的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发送状态报告的消息体中的消息标识。
};
struct CMPP_DELIVER_RESP_tag
{
unsigned int Total_Length; //消息总长度(含消息头及消息体)
unsigned int Command_Id; //命令或响应类型
unsigned int Sequence_Id; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)
unsigned __int64 Msg_Id;
byte Result;
};
struct CMPP_ACTIVE_TEST_tag
{
unsigned int Total_Length; //消息总长度(含消息头及消息体)
unsigned int Command_Id; //命令或响应类型
unsigned int Sequence_Id; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)
//无消息体。
};
struct CMPP_ACTIVE_TEST_RESP_tag
{
unsigned int Total_Length; //消息总长度(含消息头及消息体)
unsigned int Command_Id; //命令或响应类型
unsigned int Sequence_Id; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)
byte Reserved;
};
/*****************************************************************************/
struct Recv_Buf
{
unsigned int Total_Length; //消息总长度(含消息头及消息体)
unsigned int Command_Id; //命令或响应类型
unsigned int Sequence_Id; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)
unsigned char dat[200];
};
/*****************************************************************************/
int CMPPInt(AnsiString ServerIP,int ServerPort);
int CMPPConnect(AnsiString UserName,AnsiString PassWord);
int CMPPSubmit(AnsiString icpid,AnsiString phone,AnsiString msg,byte msgFrm,
AnsiString serviceid,AnsiString feecode,AnsiString feetype,byte SRR,
AnsiString feephone,AnsiString src_id);
int CMPPDeliverGet(CMPP_DELIVER_tag *bufdata,AnsiString &msg,unsigned __int64 &msg_id,
AnsiString &Dest_Id,AnsiString &Src_terminal_Id,byte &Registered_Delivery);
int CMPPDeliverResp(unsigned int DelivSequenceid,unsigned __int64 DelivMsg_id);
int CMPPActiveTest();
int CMPPActiveResp(unsigned int ActivSequenceid);
int CMPPTerminate();
int CMPPTerminateResp(unsigned int TerminSequenceid);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -