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

📄 ~smgp_message.~h

📁 SMAL是short message abstract library的缩写,是由风起水流软件工作室(www.zealware.com)开发的一个支持短信网关系统开发的C++底层抽象接口库
💻 ~H
📖 第 1 页 / 共 2 页
字号:
/**
*	smgp_message.h
*	
*	Short Message Abstractive Library.(SMAL)
*
*	Copyright 2003-2006	北京风起水流软件工作室
*	
*	http://www.zealware.com
*	
*	princetoad@gmail.com
*   
*   $ Revision Date Author
*   $ V1.1 2007/07/23 16:22 范圣刚
*   1.为字符型字段增加一个字节长度,方便二次开发使用.
*
*/

#ifndef _SMGP_MESSAGE_H
#define _SMGP_MESSAGE_H

#include <common/const.h>
#pragma pack(1)

/**@name SMGP协议消息结构定义 */
//@{

/** 消息头定义 
字段	长度(字节)	数据类型	说明	参考
PacketLength	4	Integer	数据包长度	6.4.1.1
RequestID	4	Integer	请求标识	6.4.1.2
SequenceID	4	Integer	消息流水号	6.4.1.3
*/
typedef struct smgp_head {
	/**
	SMGP数据包长度,指包头和包体的长度之和。单位是“字节”。
	*/
	unsigned long	nPacketLength;

	/**
	请求标识表示SMGP数据包的类型,请求包的请求标识和应答包的请求标识一一对应。
	*/
	unsigned long	nRequestID;

	/**
	SMGP消息流水号,用来匹配请求数据包和应答数据包。
	应答数据包的流水号字段必须与请求包的流水号字段一致。
	流水号字段由请求包发起方分配,取值范围为0x00000000-0xFFFFFFFF,顺序累加,步长为1,循环使用。
	*/
	unsigned long	nSequenceID;
} SMGP_HEAD, SMGP_TERMINATE, SMGP_TERMINATE_RESP, SMGP_ACTIVETEST, SMGP_ACTIVETEST_RESP;

/** 登录消息包体定义 
字段	长度
(字节)	数据类型	说明	参考
必选参数	ClientID	8	Octet String	客户端用来登录服务器端的用户账号。	6.4.2.1
AuthenticatorClient	16	Octet String	客户端认证码,用来鉴别客户端的合法性。	6.4.2.2
LoginMode	1	Integer	客户端用来登录服务器端的登录类型。	6.4.2.3
TimeStamp	4	Integer	时间戳	6.4.2.4
ClientVersion	1	Integer	客户端支持的协议版本号	6.4.2.5

length = 30
*/
typedef struct smgp_connect {
	/**
  客户端用来登录服务器端的用户账号,此处为SP服务代码。SP服务代码由中国电信分配。	
	*/
	char					sSourceAddr[8+1];
	
	/**
	客户端认证码,用来鉴别SP的合法性。
	其值通过单向MD5 hash计算得出,表示如下:
	AuthenticatorClient =MD5(ClientID+7 字节的二进制0(0x00) +shared secret+timestamp)
	ClientID 为SP服务代码,不足8位时不补0。
	Shared secret 由服务器端与客户端事先商定,最长15字节,不足15位时不补0。
	此处Timestamp格式为:MMDDHHMMSS,即月日时分秒,10位,右对齐。
	例如3月1日0时0分0秒,即为0301000000。
	*/
	char					sAuthSource[16+1];

	/**
	Login客户端用来登录服务器端的登录类型。
	0=发送短消息(send mode);
	1=接收短消息(receive mode);
	2=收发短消息(transmit mode);
	其它保留。
	建议SP发送短消息时采用发送短消息模式(LoginMode=0),接收短消息时采用接收短消息模式(LoginMode=1)。
	*/
	unsigned char	cLoginMode;

	/**
	Login客户端用于MD5计算AuthenticatorClient,参见6.4.2.2。
	Timestamp格式为整型。
	例如3月1日0时0分0秒,用于MD5计算时为0301000000,此处转换为整型数即为11F0E540。
	*/
	unsigned long	nTimeStamp;

	/**
	Login客户端支持的协议版本号。
	高4bit表示主版本号,低4bit表示次版本号。
	例如0x30,表示协议版本号为3.0。
	*/
	unsigned char	cVersion;
} SMGP_CONNECT;

/**
登录回复包体定义 
字段	长度
(字节)	数据类型	说明	参考
必选参数	Status	4	Integer	请求返回结果	6.4.2.6
AuthenticatorServer	16	Octet String	服务器端返回给客户端的认证码	6.4.2.7
ServerVersion	1	Integer	服务器端支持的最高版本号	6.4.2.8

SMGP协议的结果码定义如下:
代码	含义
0	成功
1	系统忙
2	超过最大连接数
3	系统超时
4	发送失败
5-9	保留
10	消息结构错
11	命令字错
12	序列号错
13-19	保留
20	IP地址错
21	认证错
22	版本号不匹配
23-29	保留
30	非法消息类型(MsgType)
31	非法优先级(Priority)
32	非法资费类型(FeeType)
33	非法资费代码(FeeCode)
34	非法短消息编码格式(MsgFormat)
35	非法时间格式
36	非法短消息长度(MsgLength)
37	有效期已过
38	非法查询类别(QueryType)
39	路由错误
40	非法包月费/封顶费(FixedFee)
43	非法业务代码(ServiceID)
44	非法短消息有效时间(ValidTime)
45	非法定时发送时间(AtTime)
46	非法发送用户号码(SrcTermID)
47	非法接收用户号码(DestTermID)
48	非法计费用户号码(ChargeTermID)
49	非法SP代码
50	非预付费用户
51	余额不足
52	非注册用户:属于预付费用户,但该号码还未被注册
53	非注册SP
54	帐号不可用:属于预付费用户,但该帐号处于不可用状态,如已冻结等
55	扣费失败
56-111	保留
112	终端存储部件不存在
113	终端存储部件满
114	终端不支持的加密模式
115	非法交互信息类型(IIType)
116	非法交互码(ICode)
117-127	保留
128-255	厂家自定义
12××××	ISMAP协议转换后的错误代码(其中××××为ISMAP协议中的错误码)
13××××	短消息过滤系统错误代码(其中××××为短消息过滤系统返回的错误代码)
*/
typedef struct smgp_connect_resp {
	/**
  请求返回结果。响应包用来向请求包返回成功信息或者失败原因。
  */
	unsigned long	nStatus;

	/**
	Login服务器端返回给客户端的认证码,当客户端认证出错时,此项为空。
	其值通过单向MD5 hash计算得出,表示如下:
	AuthenticatorServer =MD5(Status+AuthenticatorClient +shared secret)
	Shared secret 由服务器端与客户端事先商定,最长15字节AuthenticatorClient为客户端发送给服务器端的上一条消息Login中的值。参见6.4.2.2。
	*/
	char					sAuthISMG[16+1];

	/**
	Login服务器端支持的最高版本号。
	高4bit表示主版本号,低4bit表示次版本号。
	例如0x30,表示协议版本号3.0。
	*/
	unsigned char	cVersion;
} SMGP_CONNECT_RESP;

struct smgp_tlv_221 {
	unsigned short tag;
	unsigned short length;
	unsigned char  value;
};

typedef struct smgp_tlv_221 SMGP_TLV_TP_pid;
typedef struct smgp_tlv_221 SMGP_TLV_TP_udhi;
typedef struct smgp_tlv_221 SMGP_TLV_ChargeUserType;
typedef struct smgp_tlv_221 SMGP_TLV_ChargeTermType;
typedef struct smgp_tlv_221 SMGP_TLV_DestTermType;
typedef struct smgp_tlv_221 SMGP_TLV_PkTotal;
typedef struct smgp_tlv_221 SMGP_TLV_PkNumber;
typedef struct smgp_tlv_221 SMGP_TLV_SubmitMsgType;
typedef struct smgp_tlv_221 SMGP_TLV_SPDealResult;
typedef struct smgp_tlv_221 SMGP_TLV_SrcTermType;

typedef struct smgp_tlv_linkid {
	unsigned short tag;
	unsigned short length;
	unsigned char  value[20+1];
} SMGP_TLV_LINKID ;

struct smgp_tlv_22Pseudo {
	unsigned short tag;
	unsigned short length;
	unsigned char  value[32+1];
};
typedef struct smgp_tlv_22Pseudo SMGP_TLV_ChargeTermPseudo;
typedef struct smgp_tlv_22Pseudo SMGP_TLV_DestTermPseudo;
typedef struct smgp_tlv_22Pseudo SMGP_TLV_SrcTermPseudo;

typedef struct smgp_tlv_228{
	unsigned short tag;
	unsigned short length;
	unsigned char  value[8+1];
} SMGP_TLV_MsgSrc;

typedef struct smgp_tlv_2221{
	unsigned short tag;
	unsigned short length;
	unsigned char  value[21+1];
} SMGP_TLV_MServiceID;

/**
SUBMITResponse和DELIVERResponse消息包体定义
字段	长度
(字节)	数据类型	说明	参考
必选参数	MsgID	10	Octet String	短消息流水号	6.4.2.25
Status	4	Integer	请求返回结果	6.4.2.6
*/
typedef struct smgp_submit_deliver_resp {
	/**
	短消息流水号,用来唯一标识一条短消息,用于SMGP_Submit_Resp、SMGP_Deliver、SMGP_Deliver_Resp消息。
	SMGP_Submit_Resp和SMGP_Deliver消息中的MsgID由SP接入点产生,包含以下三部分内容:
	SP接入点代码:3字节(BCD码)
	时间:4字节(BCD码),格式为MMDDHHMM(月日时分)
	序列号:3字节(BCD码),取值范围为0x000000~0x999999,从0开始,顺序累加,步长为1,循环使用。
	SMGP_Deliver_Resp消息中的MsgID同相应的SMGP_Deliver消息中的MsgID。
	例如某SP接入点的代码为010061,在2003年1月16日下午5时0分收到一条短消息,这条短消息的MsgID为:0x01006101161700012345,其中010061表示SP接入点代码,01161700表示接收时间,012345表示消息序列号。
	*/
	char sMsgid[10+1];

	/**Submit请求返回结果(参见错误代码表)
	*/
	unsigned long	nResult;

	/**
	非标准字段,用来存储Response的流水号
	(就是消息头里面的流水号)
	*/
	unsigned long	nSeqId;
} SMGP_SUBMIT_RESP, SMGP_DELIVER_RESP;

/**状态报告消息体定义 */
/**
id(14,+3)
id:IIIIIIIIII空格
69 64 3a 85 10 61 06 18 19 01 06 05 08 20


Sub(8,+4)
Sub:001空格
73 75 62 3a 30 30 31 20 

dlvrd(10,+6)
dlvrd:001空格
64 6c 76 72 64 3a 30 30 31 20 

submitdate(23,+12)
submit date:06181932空格
73 75 62 6d 69 74 20 64 61 74 65 3a 30 36 30 36 31 38 31 39 30 32 20 

donedate(21,+10)
done date:0606181902空格
64 6f 6e 65 20 64 61 74 65 3a 30 36 30 36 31 38 31 39 30 32 20 


state(13,+5)
stat:DELIVRD空格
73 74 61 74 3a 44 45 4c 49 56 52 44 20

err(8,+4)
err:000空格
65 72 72 3a 30 30 30 20 

text(25,+5)
text:114消息内容(无空格)
74 65 78 74 3a 31 31 34 c4 fa d6 a7 b3 d6 b5 c4 b2 ce c8 fc d1 a1 ca d6 b8
*/
typedef struct smgp_status_report {
	/**状态报告对应原始消息的MsgID
	id(14,+3)
	id:IIIIIIIIII空格
	69 64 3a 85 10 61 06 18 19 01 06 05 08 20
	*/
	char						SR_id[14+1];

	/**取缺省值001
	Sub(8,+4)
	Sub:001空格
	73 75 62 3a 30 30 31 20 
	*/
	char						SR_sub[8+1];

	/**取缺省值001
	dlvrd(10,+6)
	dlvrd:001空格
	64 6c 76 72 64 3a 30 30 31 20 
	*/
	char						SR_dlvrd[10+1];

	/**短消息提交格式(格式:yymmddhhmm,例如010331200000)
	submitdate(23,+12)
	submit date:06181932空格
	73 75 62 6d 69 74 20 64 61 74 65 3a 30 36 30 36 31 38 31 39 30 32 20 
	*/
	char						SR_submitdate[23+1];

	/**短消息下发时间(格式:yymmddhhmm,例如010331200000)
	donedate(21,+10)
	done date:0606181902空格
	64 6f 6e 65 20 64 61 74 65 3a 30 36 30 36 31 38 31 39 30 32 20 
	*/
	char						SR_donedate[21+1];

	/**短消息状态(参见6.3节短消息状态表)
	stat(13,+5)
	stat:DELIVRD空格
	73 74 61 74 3a 44 45 4c 49 56 52 44 20
	*/
	char						SR_state[13+1];

	/**参见第6.4节错误代码表
	err(8,+4)
	err:000空格
	65 72 72 3a 30 30 30 20 
	*/
	char						SR_err[8+1];

	/**前三个字节,表示短消息长度(用ASCII码表示),
	后17个字节表示短消息的内容(保证内容不出现乱码)
	text(25,+5)
	text:114消息内容(无空格)
	74 65 78 74 3a 31 31 34 c4 fa d6 a7 b3 d6 b5 c4 b2 ce c8 fc d1 a1 ca d6 b8
	*/
	char						SR_text[25+1];
} SMGP_STATUS_REPORT;

/**
DELIVER消息包体定义 
字段	长度
(字节)	数据类型	说明	参考





MsgID	10	Octet String	短消息流水号	6.4.2.25
IsReport	1	Integer	是否为状态报告	6.4.2.26
MsgFormat	1	Integer	短消息格式	6.4.2.16
RecvTime	14	Octet String	短消息接收时间	6.4.2.27
SrcTermID	21	Octet String	短消息发送号码	6.4.2.19
DestTermID	21	Octet String	短消息接收号码	6.4.2.22
MsgLength	1	Integer	短消息长度	6.4.2.23
MsgContent	MsgLength	Octet String	短消息内容	6.4.2.24
Reserve	8	Octet String	保留	6.4.2.28
可选参数	字段	数据类型	说明	参考
TP_pid	TLV	GSM协议类型	6.4.3.2
TP_udhi	TLV	GSM协议类型	6.4.3.3
LinkID	TLV	交易标识	6.4.3.4
SrcTermType	TLV	短消息发送方的号码类型	6.4.3.14
SrcTermPseudo	TLV	短消息发送方的伪码	6.4.3.15
SubmitMsgType	TLV	SP发送的消息类型	6.4.3.12
SPDealResult	TLV	SP对消息的处理结果	6.4.3.13
*/
typedef struct smgp_deliver {
	char						sMsgid[10+1];
	unsigned char		uchRegisteredDelivery;

	/**
	对于文字短消息,要求为15。对于回执消息,要求为0。 
	*/
	unsigned char		uchMsgfmt;

	/**
SP接入点接收到短消息的时间。格式为YYYYMMDDHHMMSS(年年年年月月日日时时分分秒秒)。
*/
	char						sRecvTime[14+1];

	char						sSrcterminalid[21+1];

	char						sDestid[21+1];

	unsigned char		uchMsglength;

⌨️ 快捷键说明

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