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

📄 cmpp.h

📁 手机开发环境BREW实例
💻 H
📖 第 1 页 / 共 2 页
字号:
// CMPP.h: interface for the CCMPP class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_CMPP_H__747FA963_9BE1_11D8_A9E5_0050BA40A374__INCLUDED_)
#define AFX_CMPP_H__747FA963_9BE1_11D8_A9E5_0050BA40A374__INCLUDED_

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

#include <Winsock2.h>

#define	MAX_TIMEOUT					60000000

#define ERR_OK					0
#define ERR_SOCK_START_FAIL		ERR_OK - 1
#define ERR_SOCK_INIT_FAIL		ERR_OK - 2
#define ERR_SOCK_SEL_FAIL			ERR_OK - 3
#define ERR_SOCK_S_TIMEOUT		ERR_OK - 4
#define ERR_SOCK_S_FAIL			ERR_OK - 5
#define ERR_SOCK_R_TIMEOUT		ERR_OK - 6
#define ERR_SOCK_R_FAIL			ERR_OK - 7
#define ERR_SOCK_UNRESOLVE		ERR_OK - 8

#define ERR_INITED			ERR_OK + 1
#define ERR_INIT_FAIL				ERR_OK + 2
#define ERR_INVALID_IP	ERR_OK + 3
#define ERR_BINDED			ERR_OK + 4
#define ERR_BIND_FAIL				ERR_OK + 5
#define ERR_SUBMIT_FAIL			ERR_OK + 6
#define ERR_BUF_FULL			ERR_OK + 7
#define ERR_BINDING			ERR_OK + 8

#define	BUF_VALID			0
#define	BUF_PENDING			1
#define	BUF_READY			2
#define	BUF_SENDED			3
#define	BUF_RETRY			4

#define	MAX_BUF_SIZE				32
#define	MAX_DEST_USR				100
#define	MAX_LEN_MOBILE_ID			20
#define	MAX_BUF_LEN_MOBILE_ID	MAX_DEST_USR * (MAX_LEN_MOBILE_ID + 1)
#define	MAX_LEN_CONTENT				160	
#define	MAX_BUF_LEN_CONTENT		MAX_LEN_CONTENT * MAX_BUF_SIZE

#ifndef BZERO
	#define BZERO(buf)				memset(&(buf), 0, sizeof(buf))
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////// C M P P ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//CMPP part
//port
#define	PORT_LONG_CONNECT		7890
#define	PORT_SHORT_CONNECT	7900

//Both 消息类型包括:
#define	CMPP_TERMINATE			0x00000002		//终止连接
#define	CMPP_TERMINATE_REP		0x80000002		//终止连接应答

//ICP向ISMG发送的消息类型包括:
#define	CMPP_CONNECT			0x00000001		//请求连接
#define	CMPP_DELIVER_REP		0x80000005		//下发短信应答
#define	CMPP_SUBMIT				0x00000004		//提交短信
#define	CMPP_QUERY				0x00000006		//发送短信状态查询
#define	CMPP_CANCEL				0x00000007		//删除短信

//ISMG向ICP发送的消息类型包括:
#define	CMPP_CONNECT_REP		0x80000001		//请求连接应答
#define	CMPP_DELIVER			0x00000005		//短信下发
#define	CMPP_SUBMIT_REP			0x80000004		//提交短信应答
#define	CMPP_QUERY_REP			0x80000006		//发送短信状态查询应答
#define	CMPP_CANCEL_REP			0x80000007		//删除短信应答

//长连接时,消息类型包括:
#define	CMPP_ACTIVE				0x00000008		//激活测试
#define	CMPP_ACTIVE_REP			0x80000008		//激活测试应答

//短连接时,ISMG处于同一级别之上,ISMG之间数据传输采用短连接方式实现,
//互为客户/服务器模式,连接由请求的发起方建立,发送的消息类型包括:
#define	CMPP_FWD				0x00000009		//消息前转
#define	CMPP_FWD_REP			0x80000009		//消息前转应答
#define	CMPP_ROUTE				0x00000003		//路由请求
#define	CMPP_ROUTE_REP			0x80000003		//路由请求应答

struct _CMPP_HEAD
{
	DWORD	Total_Length;
	DWORD	Command_ID;
	DWORD	Sequence_ID;
};

//CMPP_CONNECT消息定义(SP——>ISMG)
struct _CMPP_CONNECT
{
	//源地址,此处为SP_Id,即SP的企业代码。
	char	Source_Addr[6];
	//用于鉴别源地址。其值通过单向MD5 hash计算得出,表示如下:
	//AuthenticatorSource =MD5(Source_Addr+9 字节的0 +shared secret+timestamp)
	//Shared secret 由中国移动与源地址实体事先商定,
	//timestamp格式为:MMDDHHMMSS,即月日时分秒,10位。
	BYTE	AuthenticatorICP[16];
	//双方协商的版本号(高位4bit表示主版本号,低位4bit表示次版本号
	BYTE	Version;
	//时间戳的明文,由客户端产生,
	//格式为MMDDHHMMSS,即月日时分秒,10位数字的整型,右对齐 。
	long	Timestamp;
};

//CMPP_CONNECT_RESP消息定义(ISMG——>SP)
struct _CMPP_CONNECT_REP
{
	//状态——0:正确,1:消息结构错 ,2:非法源地址 
	//3:认证错,4:版本太高,5~ :其他错误
	BYTE	Status;
	//ISMG认证码,用于鉴别ISMG。
	//其值通过单向MD5 hash计算得出,表示如下:
	//AuthenticatorISMG =MD5(Status+AuthenticatorSource+shared secret),
	//Shared secret 由中国移动与源地址实体事先商定,
	//AuthenticatorSource为源地址实体发送给ISMG的对应消息CMPP_Connect中的值。 
	//认证出错时,此项为空。
	char	AuthenticatorISMG[16];
	//服务器支持的最高版本号
	BYTE	Version;
};

// CMPP_TERMINATE消息定义(SP——>ISMG或ISMG——>SP)
struct _CMPP_TERMINATE
{
	//Null
};

//CMPP_TERMINATE_RESP消息定义(SP——>ISMG或ISMG——>SP)
struct _CMPP_TERMINATE_REP
{
	//Null
};

//此结构为信息标识,生成算法如下:采用64位(8字节)的整数:
//(1)	时间(格式为MMDDHHMMSS,即月日时分秒):bit64~bit39,
//其中bit64~bit61:月份的二进制表示;
//bit60~bit56:日的二进制表示;
//bit55~bit51:小时的二进制表示;
//bit50~bit45:分的二进制表示;
//bit44~bit39:秒的二进制表示;
//(2)	短信网关代码:bit38~bit17,
//把短信网关的代码转换为整数填写到该字段中。
//(3)	序列号:bit16~bit1,顺序增加,步长为1,循环使用。
//各部分如不能填满,左补零,右对齐。
//(SP根据请求和应答消息的Sequence_Id一致性就可得到CMPP_Submit消息的Msg_Id)
struct _CMPP_ID
{
	__int64	Time_Stamp:24;
	__int64	SMC_ID:24;
	__int64	Sequence_ID:16;

};

//CMPP_SUBMIT消息定义(SP——>ISMG)
struct _CMPP_SUBMIT
{
	//信息标识,由SP侧短信网关本身产生,本处填空.
	_CMPP_ID Msg_id;
	//相同Msg_Id的信息总条数,从1开始
	BYTE	Pk_total;
	//相同Msg_Id的信息序号,从1开始
	BYTE	Pk_number;
	//是否要求返回状态确认报告:
	//0:不需要,1:需要
	//2:产生SMC话单(该类型短信仅供网关计费使用,不发送给目的终端)
	BYTE	Reg_Delivery;
	//信息级别
	BYTE	Msg_level;
	//业务类型,是数字、字母和符号的组合。
	char	Service_id[10];
	//计费用户类型字段
	//0:对目的终端MSISDN计费;
	//1:对源终端MSISDN计费;
	//2:对SP计费;
	//3:表示本字段无效,对谁计费参见Fee_terminal_Id字段。
	BYTE	Fee_UserType;
	//被计费用户的号码
	//(如本字节填空,则表示本字段无效,对谁计费参见Fee_UserType字段,
	//本字段与Fee_UserType字段互斥)
	char	Fee_terminal_id[MAX_LEN_MOBILE_ID + 1];
	//GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.9
	BYTE	TP_pid;
	//GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐
	BYTE	TP_udhi;
	//信息格式  
	//0:ASCII串  
	//3:短信写卡操作  
	//4:二进制信息  
	//8:UCS2编码
	//15:含GB汉字
	BYTE	Msg_Fmt;
	//信息内容来源(SP_Id)
	char	Msg_src[6];
	//资费类别
	//01:对"计费用户号码"免费
	//02:对"计费用户号码"按条计信息费
	//03:对"计费用户号码"按包月收取信息费
	//04:对"计费用户号码"的信息费封顶
	//05:对"计费用户号码"的收费是由SP实现
	char	FeeType[2];
	//资费代码(以分为单位)
	char	FeeCode[6];
	//存活有效期,格式遵循SMPP3.3协议
	char	Valid_Time[17];
	//定时发送时间,格式遵循SMPP3.3协议
	char	At_Time[17];
	//源号码
	//SP的服务代码或前缀为服务代码的长号码, 
	//网关将该号码完整的填到SMPP协议Submit_SM消息相应的source_addr字段,
	//该号码最终在用户手机上显示为短消息的主叫号码
	char	Src_terminal_id[MAX_LEN_MOBILE_ID + 1];
	//接收信息的用户数量(小于100个用户)
	BYTE	DestUsr_tl;
	//接收短信的MSISDN号码
	char	Dest_terminal_id[(MAX_LEN_MOBILE_ID + 1) * MAX_DEST_USR];
	//信息长度(Msg_Fmt值为0时:<160个字节;其它<=140个字节)
	BYTE	Msg_Length;
	//信息内容
	char	Msg_Content[MAX_LEN_CONTENT];
	//保留
	BYTE	Reserve[8];
};

//CMPP_SUBMIT_RESP消息定义(ISMG——>SP)
struct _CMPP_SUBMIT_REP
{
	//信息标识,生成算法如下:采用64位(8字节)的整数:
	//(1)	时间(格式为MMDDHHMMSS,即月日时分秒):bit64~bit39,
	//其中bit64~bit61:月份的二进制表示;
	//bit60~bit56:日的二进制表示;
	//bit55~bit51:小时的二进制表示;
	//bit50~bit45:分的二进制表示;
	//bit44~bit39:秒的二进制表示;
	//(2)	短信网关代码:bit38~bit17,
	//把短信网关的代码转换为整数填写到该字段中。
	//(3)	序列号:bit16~bit1,顺序增加,步长为1,循环使用。
	//各部分如不能填满,左补零,右对齐。
	//(SP根据请求和应答消息的Sequence_Id一致性就可得到CMPP_Submit消息的Msg_Id)
	_CMPP_ID Msg_id;
	//结果0:正确,1:消息结构错 ,2:命令字错 ,3:消息序号重复,4:消息长度错,
	//5:资费代码错,6:超过最大信息长,7:业务代码错,8:流量控制错,9~ :其他错误
	BYTE	bResult;

};

// CMPP_QUERY消息的定义(SP——>ISMG)
struct _CMPP_QUERY
{
	//时间YYYYMMDD(精确至日)
	char	szTime[8];
	//查询类别0:总数查询,1:按业务类型查询
	BYTE	bQueryType;
	//查询码当Query_Type为0时,此项无效;
	//当Query_Type为1时,此项填写业务类型Service_Id. 
	char	szQueryCode[10];
	//保留
	BYTE	Reserve[8];	
};

//CMPP_QUERY_RESP消息的定义(ISMG——>SP)
struct _CMPP_QUERY_REP
{
	//时间(精确至日)
	char	szTime[8];
	//查询类别0:总数查询,1:按业务类型查询
	BYTE	bQueryType;
	//查询码
	char	szQueryCode[10];
	//从SP接收信息总数
	DWORD	lMTTotalMsg;
	//从SP接收用户总数
	DWORD	lMTTotalUsr;
	//成功转发数量
	DWORD	lMTSuccessMsg;
	//待转发数量
	DWORD	lMTWaitMsg;
	//转发失败数量
	DWORD	lMTFailMsg;
	//向SP成功送达数量
	DWORD	lMOSuccessMsg;
	//向SP待送达数量
	DWORD	lMOWaitMsg;
	//向SP送达失败数量
	DWORD	lMOFailMsg;
};

⌨️ 快捷键说明

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