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

📄 cmpp.h

📁 中国移动通信CMPP2.0短消息网关开发接口库
💻 H
📖 第 1 页 / 共 2 页
字号:
//*******************************************************************************
//
//	文件名:	Cmpp.h
//	描述:
//			中国移动通信互联网短信网关接口协议(China Mobile Point to Point)实现.
//	版本:	V2.2 (Last Update Apr.18.04!)
//	作者:	PrinceToad(欢迎与我联系:princetoad@126.com)
//	日期:	2002-2004
//	介绍:
//			1.能够自动适应以下网关类型:标准cmpp类型(单连接,如华为,思特奇,标准东软),
//			双连接类型(MO,MT分连接进行,通过登录包的Version字段区分,如亚信(ASIA)),
//			双端口类型(MO,MT连接不同的网关端口,通过端口号区分,如清华声讯(TSSX))
//			2.效率高,稳定性强.
//
//			免费提供SP短消息网关开发接口库下载使用(CMPP2.0, CMPP3.0, SGIP1.2),
//			免费提供技术支持!
//
//			Http://princetoad.xiloo.com.
//			SourceCode On Sale!
//
//*******************************************************************************
#ifndef CMPP_20_H
#define CMPP_20_H

#include "stdafx.h"
#include <winsock2.h>
#pragma comment(lib, "ws2_32")
#pragma pack(1)

#include "md5.h"
#include <afxmt.h>			//CCriticalSection
#include <afxtempl.h>		//CMap, CList
#include "ThreadPool.h"

#ifdef CMPP_IMPORT
#define	CMPP_API __declspec(dllimport)
#else
#define	CMPP_API __declspec(dllexport)
#endif

#define SOCKET_TIMEOUT	3
#define SOCKET_CLOSED	-1

//Error Code
#define CMPP_UNLOGOIN	1		//客户端没有登录.

//#define PRINTOUT	TRACE
#define PRINTOUT	printf

//网关类型
#define SINGLE_CONN		0
#define DOUBLE_CONN		1
#define DOUBLE_PORT		2

#define	ASIA_MT			0x00
#define	ASIA_MO			0x01
#define NEED_SREPORT	1
#define NO_SREPORT		0
#define IS_SREPORT		1
#define NOT_SREPORT		0

class CCmppClient;
class CCmppServer;

//**********************************************************************
//**处理字符流的类**
//**********************************************************************
class CBuffer {
public:
	CBuffer() {
		//申请一段空间,1024对于cmpp来说足够了.
		m_str = new char[1024];
		ZeroMemory(m_str, 1024);
		m_nLen = 0;
	}

	~CBuffer() {
		//释放空间.
		delete[] m_str;
		m_str = NULL;
	}
	
	//返回指向buffer的指针.
	char* GetBuffer() {
		return m_str;
	}
	
	//返回buffer的有效长度.
	int GetBufLen() {
		return m_nLen;
	}
	
	//设置buffer的内容,n1=TotalLength, n2=CommandID, n3=SeqID, pchData=MsgBody, nLen=sizeof(MsgBody).
	void SetBuffer(int nStart, int n1, int n2, int n3, void* pvData = NULL, int nLen = 0) {
		CopyMemory(m_str+nStart, &n1, 4);
		CopyMemory(m_str+nStart+4, &n2, 4);
		CopyMemory(m_str+nStart+8, &n3, 4);
		if (pvData != NULL) {
			CopyMemory(m_str+nStart+12, pvData, nLen);
		}
		m_nLen = nStart+12+nLen;
	}

	//增加一段内容.
	void Add(void* pvData, int nLen, bool fAscii = false) {
		//增加了对pvData是否为空的判断.
		if (pvData != NULL) {
			if (fAscii) {
				CopyMemory(m_str+m_nLen, pvData, strlen((char*)pvData) > nLen ? nLen : strlen((char*)pvData));
			}
			else {
				CopyMemory(m_str+m_nLen, pvData, nLen);
			}
		}

		m_nLen += nLen;
	}
private:
	char *m_str;
	int	m_nLen;		//当前buffer的长度.
};

//**********************************************************************
//**封装了Winsock API的类**
//**********************************************************************
class CMPP_API TCPSocket  
{
public:
	SOCKET m_hSocket;
	CString m_szClientAddr;	

	TCPSocket();
	TCPSocket(SOCKET sock);
	
	~TCPSocket();

	int Cleanup();

	int Create(int nType = SOCK_STREAM);

	int Close();

	int Bind(const unsigned short ushPort, const char* pchIP = NULL);

	int Listen(int nMaxConn = SOMAXCONN);

	int Connect(const char* pchIP, const unsigned short ushPort);

	int Accept(TCPSocket* tsClient);

	int Send(const char *pch, const int nSize, const int nSecs);

	int Receive(char* pch, const int nSize, const int nSecs);

	operator SOCKET() {
		return m_hSocket;
	}
};

//
//定义Cmpp2.0 消息结构.
//
//**********************************************************************
//	STRUCTURE OF CMPP_HEAD.
//**********************************************************************
typedef struct cmpp_head {
	unsigned int	nTotalLength;
	unsigned int	nCommandId;
	unsigned int	nSeqId;
} CMPP_HEAD, CMPP_TERMINATE, CMPP_TERMINATE_RESP, CMPP_ACTIVETEST;
;

//**********************************************************************
//	STRUCTURE OF CMPP_CONNECT.
//**********************************************************************
typedef struct cmpp_connect {
	char			sSourceAddr[6];
	char			sAuthSource[16];
	unsigned char	cVersion;
	unsigned int	nTimeStamp;
} CMPP_CONNECT;

//**********************************************************************
//	STRUCTURE OF CMPP_CONNECT_RESP.
//**********************************************************************
typedef struct cmpp_connect_resp {
	unsigned char	uchStatus;
	//unsigned int	nStatus;
	char			sAuthISMG[16];
	unsigned char	cVersion;
} CMPP_CONNECT_RESP;

//**********************************************************************
//	STRUCTURE OF CMPP_SUBMIT_DELIVER_RESP.
//**********************************************************************
typedef struct cmpp_submit_deliver_resp {
	_int64			nMsgid;
	unsigned char	uchResult;
	//	unsigned int	nResult;
} CMPP_SUBMIT_RESP, CMPP_DELIVER_RESP;

//**********************************************************************
//	STRUCTURE OF CMPP_DELIVER_StatusReport.
//**********************************************************************
typedef struct cmpp_status_report {
	_int64			nMsgid;
	char			sStat[7];
	char			sSubmitTime[10];
	char			sDoneTime[10];
	char			sDestTerminalId[21];
	//	char			sDestTerminalId[32];
	unsigned int	nSmscSeq;
} CMPP_STATUS_REPORT;

//**********************************************************************
//	STRUCTURE OF CMPP_DELIVER.
//**********************************************************************
typedef struct cmpp_deliver {
	_int64			nMsgid;
	char			sDestid[21];
	char			sServiceid[10];
	unsigned char	uchTppid;
	unsigned char	uchTpudhi;
	unsigned char	uchMsgfmt;
	char			sSrcterminalid[21];
	unsigned char	uchRegisteredDelivery;
	unsigned char	uchMsglength;
	union {
		char				sMsgcontent[256];
		CMPP_STATUS_REPORT	csr;
	} MO_Msg_Content;
	char			sReserved[8];
	//	char			sLinkid[20];
} CMPP_DELIVER;

//**********************************************************************
//	STRUCTURE OF CMPP_SUBMIT.
//**********************************************************************
typedef struct cmpp_submit {
	_int64			nMsgid;
	unsigned char	uchPkTotal;
	unsigned char	uchPkNumber;
	unsigned char	uchRegisteredDelivery;
	unsigned char	uchMsgLevel;
	char			sServiceId[10];
	unsigned char	uchFeeUserType;
	char			sFeeTerminalId[21];
	//	char			sFeeTerminalId[32];
//	unsigned char	uchFeeTerminalType;
	unsigned char	uchTpPid;
	unsigned char	uchTpUdhi;
	unsigned char	uchMsgFmt;
	char			sMsgSrc[6];
	char			sFeeType[2];
	char			sFeeCode[6];
	char			sValidTime[17];
	char			sAtTime[17];
	char			sSrcId[21];
	unsigned char	uchDstUsrTl;
	char			sDstTerminalId[21*100];
	//	char			sDstTerminalId[32*100];
	//	unsigned char	uchDestTerminalType;
	unsigned char	uchMsgLength;
	char			sMsgContent[160];
	char			sReserved[8];
	//	char			sLinkId[20];
} CMPP_SUBMIT;

//**********************************************************************
//	STRUCTURE OF CMPP_QUERY.
//**********************************************************************
typedef struct cmpp_query {
	char			sTime[8];
	unsigned char	uchQueryType;
	char			sQueryCode[10];
	char			sReserved[8];
} CMPP_QUERY;

//**********************************************************************
//	STRUCTURE OF CMPP_QUERY_RESP.
//**********************************************************************
typedef struct cmpp_query_resp {
	char			sTime[8];
	unsigned char	uchQueryType;
	char			sQueryCode[10];
	unsigned int	nMTTLMsg;		//从SP接收消息总数.
	unsigned int	nMTTLUsr;		//从SP接收用户总数.
	unsigned int	nMTScs;			//成功转发数量.
	unsigned int	nMTWT;			//待转发数量.
	unsigned int	nMTFL;			//转发失败数量.
	unsigned int	nMOScs;			//向SP成功送达数量.
	unsigned int	nMOWT;			//向SP待送达数量.
	unsigned int	nMOFL;			//向SP送达失败数量.
} CMPP_QUERY_RESP;

//**********************************************************************
//	STRUCTURE OF CMPP_CANCEL.
//**********************************************************************
typedef struct cmpp_cancel {
	_int64			nMsgid;
} CMPP_CANCEL;

//**********************************************************************
//	STRUCTURE OF CMPP_CANCEL_RESP.
//**********************************************************************
typedef struct cmpp_cancel_resp {
	unsigned char	uchSuccessId;
//	unsigned int	nSuccessId;
} CMPP_CANCEL_RESP;

//**********************************************************************
//	STRUCTURE OF CMPP_ACTIVETEST_RESP.
//**********************************************************************
typedef struct cmpp_activetest_resp {
	unsigned char	uchReserved;
} CMPP_ACTIVETEST_RESP;

//**********************************************************************
//	STRUCTURE OF CMPP_SMG_TO_SP.
//**********************************************************************
typedef struct cmpp_smgtosp {
	CMPP_HEAD	pk_head;

	union {
		CMPP_CONNECT_RESP		pk_connectresp;
		CMPP_SUBMIT_RESP		pk_submitresp;
		CMPP_QUERY_RESP			pk_queryresp;
		CMPP_DELIVER			pk_deliver;
		CMPP_CANCEL_RESP		pk_cancelresp;
		CMPP_ACTIVETEST_RESP	pk_activetestresp;
	} pk_body;
} CMPP_SMGTOSP;

//**********************************************************************
//	STRUCTURE OF CMPP_SP_TO_SMG.
//**********************************************************************
typedef struct cmpp_sptosmg {
	CMPP_HEAD	pk_head;

	union {
		CMPP_CONNECT			pk_connect;
		CMPP_SUBMIT				pk_submit;
		CMPP_QUERY				pk_query;
		CMPP_DELIVER_RESP		pk_deliverresp;
		CMPP_CANCEL				pk_cancel;
		CMPP_ACTIVETEST_RESP	pk_activetestresp;
	} pk_body;
} CMPP_SPTOSMG;

//**********************************************************************
//	STRUCTURE OF ALL CMPP_MSG.
//**********************************************************************
typedef struct cmpp_pkg {
	CMPP_HEAD	pk_head;
	
	union {
		CMPP_CONNECT			pk_connect;
		CMPP_CONNECT_RESP		pk_connectresp;
		
		CMPP_SUBMIT				pk_submit;
		CMPP_SUBMIT_RESP		pk_submitresp;

⌨️ 快捷键说明

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