⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmpp.h

📁 提供vc版短信网关源码
💻 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 + -