📄 cmpp30.h
字号:
// Cmpp30.h: interface for the CCmpp30 class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_CMPP30_H__D19EFA88_E04B_42FE_B6D3_11574647F821__INCLUDED_)
#define AFX_CMPP30_H__D19EFA88_E04B_42FE_B6D3_11574647F821__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "CommonSms.h"
#define nCMPP_CONNECT 0x00000001 // 请求连接
#define nCMPP_CONNECT_RESP 0x80000001 // 请求连接应答
#define nCMPP_TERMINATE 0x00000002 // 终止连接
#define nCMPP_TERMINATE_RESP 0x80000002 // 终止连接应答
#define nCMPP_SUBMIT 0x00000004 // 提交短信
#define nCMPP_SUBMIT_RESP 0x80000004 // 提交短信应答
#define nCMPP_DELIVER 0x00000005 // 短信下发
#define nCMPP_DELIVER_RESP 0x80000005 // 下发短信应答
#define nCMPP_QUERY 0x00000006 // 短信状态查询
#define nCMPP_QUERY_RESP 0x80000006 // 短信状态查询应答
#define nCMPP_CANCEL 0x00000007 // 删除短信
#define nCMPP_CANCEL_RESP 0x80000007 // 删除短信应答
#define nCMPP_ACTIVE_TEST 0x00000008 // 激活测试
#define nCMPP_ACTIVE_TEST_RESP 0x80000008 // 激活测试应答
#pragma pack(push,1)
typedef struct _CMPP_HEAD30
{
int size; // 数据报的长度
int cmdid; // 命令码
int seqid; // 流水号
} CMPP_HEAD30;
typedef struct _CMPP_CONNECT30
{
char spid[6]; // 9开头的6位企业码
char digest[16]; // MD5数字签名
char ver; // 版本
int timestamp;
} CMPP_CONNECT30;
typedef struct _CMPP_CONNECT_RESP30
{
int status; // 状态标识
char digest[16]; // 服务器的MD5数字签名
char ver; // 服务器的版本
} CMPP_CONNECT_RESP30;
/******************************************************************************
* 注意:这里的目的地手机号码只能填写一个,所以desttotal恒等于1
* 这里的短消息内容为固定长度,发送的时候需要转换成变长
******************************************************************************/
typedef struct _CMPP_SUBMIT30
{
__int64 msgid; // 信息标识
char pkgtotal; // 相同Msg_Id的信息总条数
char pkgnumber; // 相同Msg_Id的信息序号
char delivery; // 是否要求返回状态确认报告
char msglevel; // 信息级别
char serviceid[10]; // 业务类型
char feeusertype; // 计费用户类型字段
char feenumber[32]; // 被计费用户的号码
char feenumbertype; // 被计费用户的号码类型,0:真实号码;1:伪码。
char tppid; // TP-Protocol-Identifier
char tpudhi; // TP-User-Data-Header-Indicator
char msgfmt; // 信息格式,8:UCS2编码
char msgsrc[6]; // 信息内容来源(SP_Id)
char feetype[2]; // 资费类别
char feecode[6]; // 资费代码(以分为单位)
char validtime[17]; // 存活有效期,参见SMPP3.3
char attime[17]; // 定时发送时间,参见SMPP3.3
char srcnumber[21]; // 源号码
char desttotal; // 接收信息的用户数量(===1)
char destnumbers[32]; // 接收短信的MSISDN号码
char destnumbertype; // 接收短信的用户的号码类型,0:真实号码;1:伪码。
unsigned char msglen; // 信息长度(<=140)
char msgcontent[256]; // 信息内容
char reserve[20]; // 保留
} CMPP_SUBMIT30;
typedef struct _CMPP_SUBMIT_RESP30
{
__int64 msgid; // 信息标识
int result;
} CMPP_SUBMIT_RESP30;
typedef struct _CMPP_DELIVER30
{
__int64 msgid; // 信息标识
char destnumber[21]; // 目的号码
char serviceid[10]; // 业务类型
char tppid; // TP-Protocol-Identifier
char tpudhi; // TP-User-Data-Header-Indicator
char msgfmt; // 信息格式,8:UCS2编码
char srcnumber[32]; // 源终端MSISDN号码
char srctype; // 源终端类型
char delivery; // 是否为状态报告
unsigned char msglen; // 消息长度
char msgcontent[256]; // 消息内容
char reserve[20] ; // LinkID
} CMPP_DELIVER30;
typedef struct _CMPP_DELIVER_RESP30
{
__int64 msgid; // 信息标识
int result;
} CMPP_DELIVER_RESP30;
typedef struct _CMPP_ACTIVE_TEST_RESP30
{
char reserve; // 保留
} CMPP_ACTIVE_TEST_RESP30;
typedef struct _CMPP_MTREPORT30
{
__int64 msgid; //信息标识SP提交短信(CMPP_SUBMIT)操作时,与SP相连的ISMG产生的Msg_Id。
char stat[7]; //发送短信的应答结果,含义与SMPP协议要求中stat字段定义相同,详见表一。SP根据该字段确定CMPP_SUBMIT消息的处理状态。
char submit_time[10]; //YYMMDDHHMM(YY为年的后两位00-99,MM:01-12,DD:01-31,HH:00-23,MM:00-59)
char done_time[10]; //YYMMDDHHMM
char dest_terminal_id[32]; //目的终端MSISDN号码(SP发送CMPP_SUBMIT消息的目标终端)
int smsc_sequence; //取自SMSC发送状态报告的消息体中的消息标识。
}CMPP_MTREPORT30;
#pragma pack(pop)
void PK_CMPP30(CMPP_SUBMIT30 * pSubmit,
int* pk_len,
char *corpId,
char* srcTermid,
char* destTermid,
char* chargeTermid,
int feeuserType,
char* feeType,
char* feecode,
char* serviceid,
int msgFormat,
int msgLength,
char* msgContent,
char* linkId);
class CCmpp30 : public CCommonSMS
{
public:
CCmpp30();
virtual ~CCmpp30();
public:
__int64 _ntoh64( __int64 inval); //网络字节转换
__int64 _hton64( __int64 inval); //本地字节转换
int Startup(char *szIp,int port,
char *szUser,char *szPwd,
char *szCorpId,char *szSeverNumber,char *szSpNode,
int threadpool ,int wndsize,
int timeout,int trys,
void (*OnDeliverSMS)(DELIVER_SMS *pDeliver),
void (*OnMTReportSMS)(MTREPORT_SMS *pReport),
void (*OnSubmitedSMS)(SUBMIT_SMS *pSubmited));
int Cleanup();
virtual int SubmitSMS(SUBMIT_SMS *p ,int len,int seqid); //发送函数
virtual void OnRecv();
virtual void OnActive();
virtual void OnSocketError();
virtual int Login();
virtual int Logout();
};
#endif // !defined(AFX_CMPP30_H__D19EFA88_E04B_42FE_B6D3_11574647F821__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -