www.pudn.com > xltsm.rar > smei.h


#if !defined(__SMEI_H__) 
 
#define __SMEI_H__ 
 
#define	CNGP_SEND_TIMEOUT	3 
#define CNGP_RECV_TIMEOUT	30 
 
#define SP_ERROR_OK						0 
#define SP_ERROR_START					128 
 
#define SP_ERROR_INVALID_FEETYPE		SP_ERROR_START + 1 
#define SP_ERROR_SOCKET_CREATEFAILED	SP_ERROR_START + 2 
#define SP_ERROR_SOCKET_CONNECTFAILED	SP_ERROR_START + 3 
#define SP_ERROR_SOCKET_SELECTFAILED	SP_ERROR_START + 4 
#define SP_ERROR_SOCKET_RECVTIMEOUT		SP_ERROR_START + 5 
#define SP_ERROR_SOCKET_RECVERROR		SP_ERROR_START + 6 
#define SP_ERROR_SOCKET_SENDTIMEOUT		SP_ERROR_START + 7 
#define SP_ERROR_SOCKET_SENDERROR		SP_ERROR_START + 8 
#define SP_ERROR_OVERFLOW				SP_ERROR_START + 9 
#define SP_ERROR_INVALID_COMMAND		SP_ERROR_START + 10 
 
#define SP_ERROR_FILE_WRITEERROR		SP_ERROR_START + 11 
#define SP_ERROR_FILE_OPENERROR			SP_ERROR_START + 12 
 
// 用于CNGP_LOGIN_BODY的cLoginMode 
#define LOGINMODE_SUBMIT		0	// 发送短消息 
#define LOGINMODE_DELIVER		1	// 接收短消息 
#define LOGINMODE_BOTH			2	// 收发短消息 
 
#define LOGINMODE_RESERVED			 
#define MSG_FORMAT_ASCII		0	// ASCII字符串 
#define MSG_FORMAT_WRITE_CARD	3	// 保留 
#define MSG_FORMAT_BINARY		4	// 二进制编码 
#define MSG_FORMAT_UCS2			8	// UCS2编码 
#define MSG_FORMAT_GB			15	// GBK编码 
 
// 
//	消息ID定义 
// 
#define	CNGP_LOGIN				0x1 
#define CNGP_LOGIN_RESP			0x80000001 
#define CNGP_SUBMIT				0x2 
#define CNGP_SUBMIT_RESP		0x80000002 
#define CNGP_DELIVER			0x3 
#define CNGP_DELIVER_RESP		0x80000003 
#define CNGP_ACTIVE_TEST		0x4 
#define CNGP_ACTIVE_TEST_RESP	0x80000004 
 
#define CNGP_EXIT				0x6 
#define CNGP_EXIT_RESP			0x80000006 
 
#pragma pack(1) 
 
// 
//	消息头 
// 
typedef struct tagCNGP_HEAD { 
	unsigned int	nTotalLength; 
	unsigned int	nCommandId; 
	unsigned int	nCommandStatus; 
	unsigned int	nSequenceId; 
} CNGP_HEAD; 
 
typedef struct tagCNGP_LOGIN_BODY { 
	char	sClientID[10];		// 此处为SPID,即SP的企业代码 
	char	sAuthenticatorClient[16];	// 客户端密码用于鉴别客户端的接入请求。 
	unsigned char cLoginMode;	// 登录类型:0、发送短消息,1 接收短消息 2、收发短消息 
	unsigned int  nTimeStamp;	// 时间戳的明文,由客户端产生,格式为mmddhhmmss,即月日时分秒,10位数字的整型,右对齐  
	unsigned char cVersion;		// 客户端支持的版本号(高位4bit表示主版本号,低位4bit表示次版本号) 
} CNGP_LOGIN_BODY; 
 
typedef struct tagCNGP_LOGIN_RESP_BODY { 
	char	sAuthenticatorServer[16];	// 服务器端认证码,当客户端认证出错时,此项为空 
    unsigned char cVersion;		// 服务器支持的最高版本号 
} CNGP_LOGIN_RESP_BODY; 
 
typedef struct tagTLV { 
	unsigned short  wTag;		// 0x0100:协议标识 0x0428:拥塞状态 
	unsigned short wLength;		// Value实际长度 
	unsigned char  cValue;		// 对于wTag为0x0100,则为协议标识,否则定义为:0:空闲 1-29:低负荷 30-49:中负荷 50-79:高负荷 80-90:最合适的负荷 90-99:接近拥塞 100:拥塞 
} TLV; 
 
typedef struct tagCNGP_DELIVER_BODY { 
	char sMsgID[10];			// SMGW产生的短消息流水号,由三部分组成:SMGW代码:3字节(BCD码)时间:4字节(BCD码)序列号:3字节(BCD码) 
	unsigned char cIsReport;	// 是否为状态报告 
	unsigned char cMsgFormat;	// 短消息格式 
	char sRecvTime[14];			// 短消息接收时间(格式:yyyymmddhhmmss,例如20010301200000) 
	char sSrcTermID[21];		// 短消息发送用户号码 
	char sDestTermID[21];		// 短消息接收用户号码 
	unsigned char cMsgLength;	// 短消息长度 
	char sMsgContent[254];		// 短消息内容 
	TLV tlvProtocolID ;			// 协议标识(参见TLV说明) 
} CNGP_DELIVER_BODY; 
 
typedef struct tagCNGP_DELIVER_RESP_BODY { 
	char sMsgID[10];			// SMGW产生的短消息流水号,由三部分组成:SMGW代码:3字节(BCD码)时间:4字节(BCD码)序列号:3字节(BCD码) 
	TLV	tlvCongestionState;		// 流量控制(参见TLV说明) 
} CNGP_DELIVER_RESP_BODY; 
 
typedef struct tagCNGP_SUBMIT_BODY { 
	char sSPID[10];				// SP的企业代码 
	unsigned char cSubType;		// 短消息子类型(0=取消订阅,1=订阅或点播请求,2=点播下发,3=订阅下发,其他保留) 
	unsigned char cNeedReport;	// 是否要求返回状态报告:(0=不要求,1=要求) 
	unsigned char cPriority;	// 发送优先级(从0到3)3为最高级 
	char sServiceID[10];		// 业务类型 
	char sFeeType[2];			// 资费类型00=免费01=按条收费02=包月03=封顶04=包月扣费请求05=CR话单     其他:保留 
	unsigned char cFeeUserType; // 计费用户类型字段0:对目的终端计费1:对源终端计费2:对SP计费3:按照计费用户号码计费其他保留 
	char sFeeCode[6];			// 每条短消息的信息费,单位:分 
	unsigned char cMsgFormat;	// 短消息格式(参见短消息格式代码表7.1) 
	char sValidTime[17];		// 有效时间,(格式:yyyymmddhhmmss) 
	char sAtTime[17];			// 定时发送时间,(格式:yyyymmddhhmmss) 
	char sSrcTermID[21];			// 短消息发送用户号码 
	char sChargeTermID[21];		// 计费用户号码 
	unsigned char cDestTermIDCount; // 短消息接收号码总数(≤100) 
	char sDestTermID[21];		// 短消息接收用户号码 
	unsigned char cMsgLength;	// 短消息长度 
	char sMsgContent[254];		// 短消息内容 
	TLV	ProtocolID;				// 协议标识(参见TLV说明表7.5) 
} CNGP_SUBMIT_BODY; 
 
typedef struct tagCNGP_SUBMIT_RESP_BODY { 
	char sMsgID[10];			// SMGW产生的短消息流水号,由三部分组成:SMGW代码:3字节(BCD码)时间:4字节(BCD码)序列号:3字节(BCD码) 
	TLV	tlvCongestionState;		// 流量控制(参见TLV说明) 
} CNGP_SUBMIT_RESP_BODY; 
 
#define MAX_SM_LEN	160 
 
typedef struct tagDELIVERRESP { 
	unsigned short uSize; 
	char	sMsgID[21+1]; 
	int		nMsgLevel; 
	char	sServiceID[10+1]; 
	int		nMsgFormat; 
	char	sSrcTermID[21+1]; 
	int		nIsReply;	/* 0/1 */ 
	int		nMsgLen; 
	char	sMsgContent[MAX_SM_LEN+1]; 
	char	sDestTermID[21+1]; 
	char	cTpPid; 
	char	cTpUdhi; 
} DELIVERRESP, * PDELIVERRESP, FAR *LPDELIVERRESP; 
 
int _CNGPSubmit( 
      LPCTSTR sSPID,				// SP的企业代码 
      unsigned char bySubType,		// 短消息子类型(0=取消订阅,1=订阅或点播请求,2=点播下发,3=订阅下发,其他保留) 
      unsigned char byNeedReport,	// 是否要求返回状态报告:(0=不要求,1=要求) 
      unsigned char byPriority,		// 发送优先级(从0到3)3为最高级 
      LPCTSTR       sService,		// 业务类型 
      LPCTSTR       sFeeType,		// 资费类型:00=免费 01=按条收费 02=包月 03=封顶 04=包月扣费请求 05=CR话单 其他:保留 
      unsigned char byFeeUserType,	// 计费用户类型字段0:对目的终端计费1:对源终端计费2:对SP计费3:按照计费用户号码计费其他保留 
      LPCTSTR       sFeeCode,		// 每条短消息的信息费,单位:分 
      unsigned char byMsgFormat,	// 短消息格式(参见短消息格式代码表7.1) 
      LPCTSTR       sValidTime,		// 有效时间,(格式:yyyymmddhhmmss) 
      LPCTSTR       sAtTime,		// 定时发送时间,(格式:yyyymmddhhmmss) 
      LPCTSTR       sOrgAddr,		// 短消息发送用户号码 
      LPCTSTR       sChargeAddr,	// 计费用户号码 
      unsigned char byUserNum,		// 短消息接收号码总数(≤100) 
      LPCTSTR       sDestAddrs,		// 短消息接收号码(连续存储DestTermIDCount个号码) 
      unsigned char byMsgLen,		// 短消息长度 
      LPCTSTR       sMsgContent,	// 短消息内容 
      unsigned char byProValue = 0,	// 协议标识(参见TLV说明表7.5) 
      unsigned char* byMsgID = NULL);	// 接收MSID的字段 SMEI的扩展 
 
int _GetCNGPDeliverSM( 
        char*          sMsgID,		    	//返回:SMGW产生的短消息流水号,由三部分组成:SMGW代码:3字节(BCD码)时间:4字节(BCD码)序列号:3字节(BCD码) 
        unsigned char* byMsgFormat,         //返回:断消息格式 
        char*          sRecvTime,           //返回:接收时间 
        char*          sOrgAddr,		    //返回:源地址 
        char*          sDestAddr,			//返回:目标地址 
        unsigned char* byMsgLen,            //返回:消息长度 
        char*          sMsgContent,			//返回:消息内容 
        unsigned char* byProValue,          //返回:协议标识 
        unsigned char* byIsReport,          //返回:状态报告标志 
        char*          sSrcMsgID,           //返回:状态报告中原始MsgID 
        char*          sSubmitdate,          
        char*          sDonedate, 
        char*          sStatus, 
        int            iDeliverAckResult); 
 
SOCKET _login(LPCSTR Server, WORD Port, LPCTSTR SystemID,  LPCTSTR Password, int nLoginMode); 
int _activetest(SOCKET hSocket); 
int _submit(LPCSTR Server, WORD Port, LPCTSTR SystemID,  LPCTSTR Password); 
void _logout(SOCKET& hSocket); 
int _delivery(SOCKET& hSocket, int nWaitSeconds); 
 
#endif