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

📄 cmpp30.h

📁 短信防伪系统服务器端
💻 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 + -