📄 sgip_message.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 + -