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

📄 sgip_message.h

📁 SMAL是short message abstract library的缩写,是由风起水流软件工作室(www.zealware.com)开发的一个支持短信网关系统开发的C++底层抽象接口库
💻 H
字号:
#ifndef _SMAL_SGIP_MESSAGE_H
#define _SMAL_SGIP_MESSAGE_H

#include <smal.h>

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

const int MAX_SUBMITMSG_LEN		= 1024;

/**
*	顺序号,也可以用整数数组表示.
*/
//##ModelId=46B5D42F01F7
struct sgipg_seqid {
	//##ModelId=46B5D42F01F9
	unsigned int	nSrcNodeNum;	///< 源节点编号
	//##ModelId=46B5D42F0201
	unsigned int	nDateTime;		///< 日期时间,如:1120203225
	//##ModelId=46B5D42F0202
	unsigned int	nSeqId;				///< 流水号
};
//##ModelId=46B5D42F020B
typedef struct sgipg_seqid	SGIPG_SEQID;

/**
*	消息头
*/
//##ModelId=46B5D42F0215
struct sgipg_head {
	//##ModelId=46B5D42F0220
	unsigned int	nTotalLength;	///< 消息总长度(包括消息头)
	//##ModelId=46B5D42F0221
	unsigned int	nCommandId;		///< 命令字
	//##ModelId=46B5D42F022A
	sgipg_seqid		nSequenceId;	///< 序列号
};
//##ModelId=46B5D42F022E
typedef	struct sgipg_head	SGIPG_HEAD;

/**
*	登录包消息体
*/
//##ModelId=46B5D42F023D
struct sgipg_connect {
	//##ModelId=46B5D42F023F
	unsigned char	cLoginType;		///< 1-sp连接smg;2-smg连接sp
	//##ModelId=46B5D42F0247
	char			sLoginName[16];		///< 用户名
	//##ModelId=46B5D42F0248
	char			sLoginPwd[16];		///< 密码
	//##ModelId=46B5D42F0249
	char			sReserved[8];			///< 保留
};
//##ModelId=46B5D42F0251
typedef struct sgipg_connect SGIPG_CONNECT;

/**
*	应答包
*/
//##ModelId=46B5D42F025B
struct sgipg_resp {
	//##ModelId=46B5D42F025D
	unsigned char	cResult;		///< 0:成功,1:用户名密码错误,2:重复登录,3:连接过多(更多错误码看协议)
	//##ModelId=46B5D42F0265
	char			sReserved[8];		///< 保留
};
//##ModelId=46B5D42F0266
typedef struct sgipg_resp SGIPG_RESP;

/**
*	MT消息体
*	V1.1	增加对群发的支持.
*	V1.2	支持超长短信,最长2048字节(20040730)
*/
//##ModelId=46B5D42F028D
struct sgipg_submit {
	//##ModelId=46B5D42F028F
	char					sSpNumber[21];					///< sp的接入号码
	//##ModelId=46B5D42F0297
	char					sChargeNumber[21];			///< 付费号码
	//##ModelId=46B5D42F0298
	unsigned char	cUserCount;							///< 接收短消息的手机数量
	//##ModelId=46B5D42F0299
	char					sUserNumber[21*100];		///< 接受该短消息的手机号
	//##ModelId=46B5D42F029A
	char					sCorpId[5];							///< 企业代码,0-99999
	//##ModelId=46B5D42F02A1
	char					sServiceType[10];				///< 业务代码,由sp定义
	//##ModelId=46B5D42F02A2
	unsigned char	cFeeType;								///< 计费类型
	//##ModelId=46B5D42F02A3
	char					sFeeValue[6];						///< 该条短消息的收费值,单位为分
	//##ModelId=46B5D42F02AC
	char					sGivenValue[6];					///< 赠送用户的话费,0-99999
	//##ModelId=46B5D42F02AD
	unsigned char	cAgentFlag;							///< 代收费标志,0:应收;1:实收
	//##ModelId=46B5D42F02AE
	unsigned char	cMorelatetoMTFlag;			///< 引起MT消息的原因
	//##ModelId=46B5D42F02AF
	unsigned char	cPriority;							///< 优先级0-9,从低到高
	//##ModelId=46B5D42F02B6
	char					sExpireTime[16];				///< 短消息寿命的终止时间,"yymmddhhmmsstnnp","tnnp"取固定值"032+"
	//##ModelId=46B5D42F02B7
	char					sScheduleTime[16];			///< 定时发送时间
	//##ModelId=46B5D42F02B8
	unsigned char	cReportFlag;						///< 状态报告标志,0-出错返回状态报告;1-总返回状态报告;2-不要状态报告;3...
	//##ModelId=46B5D42F02C0
	unsigned char	cTpPid;
	//##ModelId=46B5D42F02C1
	unsigned char	cUdhi;
	//##ModelId=46B5D42F02C2
	unsigned char	cMessageCoding;					///< 编码方式,0:Ascii;3:Write card;4:binary;8:ucs2;15:GBK
	//##ModelId=46B5D42F02C3
	unsigned char	cMessageType;						///< 0:短消息信息
	//##ModelId=46B5D42F02CA
	unsigned int	nMsgLen;								///< 短消息长度(不调用sgip_submit_sm_set_messagecontent,而手动赋值的话,需要调用函数htonl()转换为网络字节序)
	//##ModelId=46B5D42F02CB
	unsigned char	sMsgContent[MAX_SUBMITMSG_LEN];			///< 2048;
	//##ModelId=46B5D42F02CC
	char					sLinkId[9];

	//##ModelId=46B5D42F02CD
	unsigned int	nID;
};
//##ModelId=46B5D42F02D4
typedef struct sgipg_submit	SGIPG_SUBMIT;

/**
*	DELIVER消息体
*/
//##ModelId=46B5D42F02E8
struct sgipg_deliver {
	//##ModelId=46B5D42F02EA
	char					sUserNumber[21];			///< 发送短消息的用户手机号
	//##ModelId=46B5D42F02EB
	char					sSpNumber[21];				///< sp的接入号码
	//##ModelId=46B5D42F02F2
	unsigned char	cTpPid;
	//##ModelId=46B5D42F02F3
	unsigned char	cUdhi;
	//##ModelId=46B5D42F02F4
	unsigned char	cMsgCoding;
	//##ModelId=46B5D42F02F5
	unsigned int	nMsgLen;
	//##ModelId=46B5D42F02FC
	unsigned char	sMsgContent[160];
	//##ModelId=46B5D42F02FD
	char					sLinkId[8];
};
//##ModelId=46B5D42F02FE
typedef struct sgipg_deliver	SGIPG_DELIVER;

///
///	REPORT消息体
///
//##ModelId=46B5D42F0310
struct sgipg_report {
	//##ModelId=46B5D42F031B
	sgipg_seqid		nSubmitSeqNum;		///< 该命令所涉及的Submit或Deliver命令的序列号
	//##ModelId=46B5D42F031F
	unsigned char	cReportType;			///< Report命令类型.0,1.
	//##ModelId=46B5D42F0320
	char			sUserNumber[21];			///< 接收短消息的手机号,手机号码前加"86"国别标志.
	//##ModelId=46B5D42F0324
	unsigned char	cState;						///< 该命令所涉及的短消息的当前执行状态.0:发送成功.1:等待发送.2:发送失败.
	//##ModelId=46B5D42F0325
	unsigned char	cErrorCode;				///< 当State==2时为错误码值,否则为0.
	//##ModelId=46B5D42F0326
	char			sReserved[8];					///< 保留,扩展用.
};
//##ModelId=46B5D42F032E
typedef struct sgipg_report			SGIPG_REPORT;

///
///	sgip_packet接收时用到的消息包.
///
//##ModelId=46B5D42F0338
struct sgipg_packet {
	//##ModelId=46B5D42F0344
	sgipg_head		pk_head;
	union{
		sgipg_connect			pk_login;				///< 登录包	
		sgipg_resp				pk_resp;				///< 应答消息包

		sgipg_submit			pk_submit;			///< Submit消息包

		sgipg_deliver			pk_deliver;			///< Deliver消息包

		sgipg_report			pk_report;			///< Report消息包
	}pk_data;
};
//##ModelId=46B5D42F034C
typedef struct sgipg_packet SGIPG_PACKET;

///
/// SGIP连接信息
///
//##ModelId=46B5D42F0356
struct sgip_conn {
	//##ModelId=46B5D42F0362
	SOCKET		hSocket;
	//##ModelId=46B5D42F036B
	unsigned	remotePort;
	//##ModelId=46B5D42F0370
	unsigned	nSrcNum;				/// 源节点编号
	//##ModelId=46B5D42F0376
	bool			fBinded;
	//##ModelId=46B5D42F0377
	bool			fBusy;
	//##ModelId=46B5D42F037E
	int				nCount;


	//##ModelId=46B5D42F037F
	sgip_conn() {
		fBinded		= false;
		hSocket		= NULL;
		remotePort= 0;
		fBusy			= false;
		nCount		= 0;
	}
};
//##ModelId=46B5D42F0380
typedef struct sgip_conn	SGIP_CONN;

///
///	Deliver包结构
///
//##ModelId=46B5D42F0389
typedef struct deliverstr
{
	unsigned			nSrcNum;
	unsigned			nDateTime;
	unsigned			nSeq;

	char 					sUserNumber[22];
	char					sSPNumber[22];
	unsigned char	tp_pid;
	unsigned char	tp_udhi;
	unsigned char	cMsgCoding;
	unsigned int	nMsgLen;
	unsigned char	sMsgContent[160];
	char					sLinkId[9];
}DeliverStr;

///
/// Report包结构
///
//##ModelId=46B5D42F0393
typedef struct reportstr
{
	unsigned			nSrcNum;
	unsigned			nDateTime;
	unsigned			nSeq;

	char					sUserNumber[22];
	unsigned char cState;
	unsigned char cErrcode;
	unsigned char cReportType;
	char					sReserved[9];

	unsigned int	nSubmitSeq;
	unsigned int	nSubmitDateTime;
}ReportStr;

///
/// MT Response结构
///
//##ModelId=46B5D42F039D
typedef struct mtrespstr
{
	unsigned			nID;
	unsigned			nSrcNum;
	unsigned			nDateTime;
	unsigned			nSeq;
	unsigned char	cResult;

	sgipg_submit	ss;
}MTRespStr;

///
/// Submit错误结构,当Submit发送不成功时,返回该结构
///
//##ModelId=46B5D42F03A7
typedef struct mterrorstr
{
	unsigned			nID;
	unsigned			nSrcNum;
	unsigned			nDateTime;
	unsigned			nSeq;

	int						nErrorType;    ///< 1:因为连接不上SMG网关系统 2:登录网关失败 3:包发送失败且超过重发次数 4.超时无应答 5.消息长度为零 6.没有可用的连接

	sgipg_submit	ss;
}MTErrorStr;

#endif

⌨️ 快捷键说明

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