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

📄 cmppsock.h

📁 移动
💻 H
字号:
#if !defined(AFX_CMPPSOCK_H__7BAC9F1D_C0FE_406B_90F9_C32214152010__INCLUDED_)
#define AFX_CMPPSOCK_H__7BAC9F1D_C0FE_406B_90F9_C32214152010__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "global.h"

#pragma pack(1)
struct MESSAGE_HEAD 
{
	DWORD	command_length	;	//消息包的长度,包括消息头和消息体
	DWORD	command_id		;	//表明命令或响应的类型
	DWORD	sequence_no		;	//消息序号,它是命令和应答之间的对应标志,0到0XFFFFFFFF单调递增循环。
};

#define	MAX_CMPP_COM_BUF	500
//#define PRINTOUT	//printf

inline void PRINTOUT(const char* STR)     
{     
	char  STRA[400],timeChar[30]={0};
	_strtime(timeChar);
	sprintf(STRA,"%s--->%s",timeChar,STR);                                        
//	gl_svrsock.SendClientSme(STRA); 
}
#define MAX_CMPP_HOSTNAME    16                 //平台主机名最大长度
#define MAX_CMPP_USER        32                 //用户名最大长度
#define MAX_CMPP_PASSWD      32                 //登录密码最大长度
#define MAX_CMPP_ADD         20                 //源发地址/目标地址最大长度
#define MAX_CMPP_MSGLEN      160                //所发短信最大长度,如为中文,应为160/4=40
#define MAX_CMPP_LOGINTIME   5                 //登录最大超时时间()
#define MAX_CMPP_LOGOUTTIME  5                 //退出最大超时时间
#define MAX_CMPP_SUBTIME     10                //发送短信最大超时时间
#define MAX_CMPP_ALIVETESTTIME 2

#include "md5.h"
class CCmppSock : public CSmsSock
{
private:
	MD5_CTX md5;
	UINT	m_sequence;	//消息序列号
	WORD	m_msgid;	//信息标识
	struct tagSMSCInfo
	{
		char SMSCIP[16];
		UINT uPort;
		char usrName[20];
		char passWd[20];
	}m_smscInfo;

public:
	CCmppSock();
	virtual ~CCmppSock();
public:
	void Check();
	int fReadAndAtuoAnswer();
	int  fDisconnect();
	int  fConnect(char* host,unsigned int port);
	int  fAliveTst(BOOL bResp=FALSE);
	int  fLogout(bool bResp=FALSE);
	int  fLogin(char* usrname,char* passwd);
	int  fSendSM(char* destadd,char* srcadd,char* sendmsg,bool bResp=FALSE);
	int  fReceive(BYTE* lpBuf, int nBufLen);
	//void fShowErr(int nErrcode);
	//{{AFX_VIRTUAL(CCmppSock)
	//}}AFX_VIRTUAL
	//{{AFX_MSG(CCmppSock)
	//}}AFX_MSG
private:
	void network_head(struct MESSAGE_HEAD* phead);
	int  fill_message(BYTE* pbody,const char* msg);
	inline DWORD network_dword(DWORD v)	 //转换网络字节序
	{
		return ((v)<<24) | (((v)&0xff00)<<8) | (((v)>>8)&0xff00) | ((v)>>24);
	}

	int CreateSocket();
};

//命令码宏定义	数值	描述
#define CMPP_CONNECT	0X00000001			//ESME要求连接到SMSC
#define CMPP_CONNECT_REP	0X80000001			//连接SMSC的响应
#define CMPP_TERMINATE	0X00000002	//ESME要求断开连接到SMSC
#define CMPP_TERMINATE_REP	0X80000002	//断开连接的响应
#define CMPP_SUBMIT		0X00000004	//ESME提交短消息到SMSC,以便SMSC下发此短消息到特定的用户。
#define CMPP_SUBMIT_REP	0X80000004	//提交短消息的响应
#define CMPP_ACTIVE_TEST	0X00000008	//活动测试
#define CMPP_ACTIVE_TEST_REP	0X80000008	//活动测试应答

struct BODY_CMPP_CONNECT
{
	char	source_addr[6]	;		//SP_ID
	char	authenticationSP[16];		//SP认证码
	BYTE	version		;	//接口版本号
	char	reverse[8];		//保留
};
struct BODY_CMPP_CONNECT_REP
{
	BYTE	status;			//状态	0-正确	1-消息结构错  2-非法SP_ID	3-SP认证错	4-版本高	5-其它
	char	authenticatinISMG[16];	//ISMG认证码,错误时为空
	BYTE	version;		//服务器的最高版本
};
struct BODY_SUBMIT_SM	//提交短消息
{
	DWORD	msg_id;					//信息标识1~~FFFFFFFF
	BYTE	pk_total;				//相同MSGID的消息总条数,从1开始
	BYTE	pk_number;				//相同MSGID的消息序号,从1开始
	BYTE	registered_delivery;	//是否返回状态报告0-不需要	1-需要	2-产生SMC话单
	BYTE	msg_level;				//信息级别
	char	service_id[10];			//业务类型
	BYTE	fee_usertype;			//计费用户类型字段	0对目的ISDN计费	1-对源ISDN	2-对SP计费
	BYTE	msg_fmt	;				//消息格式	0-ASCII串	3-短信写卡操作	4-二进制信息	8-UCS2编码	15含GB汉字
	char	msg_src[6]	;			//信息内容来源SP_ID
	char	feetype[2];				//资费类别
	char	feecode[6];				//资费代码(以分为单位)
	char	valid_time[17]	;		//存活有效期,参见SMPP3.3
	char	at_time[17];			//定时发送时间
	char	src_terminal_id[21]	;	//源发MSISDN号码(没有可以为空)
	BYTE	destusr_tl;				//接收消息的用户数量(<100)
	char	dest_terminal_id[21];
	BYTE	msg_length;				//
	char	msg_content[1];			//消息内容
	char	reserve[8];				//保锱
};
struct BODY_SUBMIT_SM_REP
{
	DWORD	msg_id;			////信息标识1~~FFFFFFFF,与提交对应
	BYTE	result;		//结果	0-正确	1-消息结构错	2-命令字错	3-消息序号重复	4-消息长度错
	//5-资费代码错	6-超过最大信息长	7-业务代码错	8-流量控制错	9-其它
};

//struct BODY_CMPP_TERMINATE	为空,只有消息头,无消息体
//struct BODY_CMPP_TERMINATE_REP			为空,只有消息头,无消息体

//struct BODY_ACTIVE_TEST此命令用于ESME确认和SMSC之间的连接。

//ESME发送一条ENQUIRE_LINK命令,SMSC响应一条ENQUIRE_LINK_ACK命令,表示ESME和SMSC之间的连接存在。
//此命令只有消息头,没有消息体,

//{{AFX_INSERT_LOCATION}}
#endif // !defined(AFX_NOKIASOCK_H__7BAC9F1D_C0FE_406B_90F9_C32214152010__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -