📄 sgip_message.h
字号:
#ifndef _SMAL_SGIP_MESSAGE_H
#define _SMAL_SGIP_MESSAGE_H
/***************************************************************
结构体头文件,
sgip协议部分的头文件部分
*/
//#include <smal.h>
#include "smal.h"
#include <winsock2.h>
#pragma comment(lib, "ws2_32")
#pragma pack(1)
const int MAX_SUBMITMSG_LEN = 1024;
/*
顺序号,也可以用整数数组表示.
*/
struct sgipg_seqid {
unsigned int nSrcNodeNum; // 源节点编号
unsigned int nDateTime; // 日期时间,如:1120203225
unsigned int nSeqId; // 流水号
};
typedef struct sgipg_seqid SGIPG_SEQID;
/*
消息头
*/
struct sgipg_head {
unsigned int nTotalLength; // 消息总长度(包括消息头)
unsigned int nCommandId; // 命令字
sgipg_seqid nSequenceId; // 序列号
};
typedef struct sgipg_head SGIPG_HEAD;
/*
登录包消息体
*/
struct sgipg_connect {
unsigned char cLoginType; // 1-sp连接smg;2-smg连接sp
char sLoginName[16]; // 用户名
char sLoginPwd[16]; // 密码
char sReserved[8]; // 保留
};
typedef struct sgipg_connect SGIPG_CONNECT;
/*
应答包信息体
*/
struct sgipg_resp {
unsigned char cResult; // 0:成功,1:用户名密码错误,2:重复登录,3:连接过多(更多错误码看协议)
char sReserved[8]; // 保留
};
typedef struct sgipg_resp SGIPG_RESP;
/**
* MT消息体
* V1.1 增加对群发的支持.
* V1.2 支持超长短信,最长2048字节(20040730)
*/
struct sgipg_submit {
char sSpNumber[21]; // sp的接入号码
char sChargeNumber[21]; // 付费号码
unsigned char cUserCount; // 接收短消息的手机数量
char sUserNumber[21*100]; // 接受该短消息的手机号
char sCorpId[5]; // 企业代码,0-99999
char sServiceType[10]; // 业务代码,由sp定义
unsigned char cFeeType; // 计费类型
char sFeeValue[6]; // 该条短消息的收费值,单位为分
char sGivenValue[6]; // 赠送用户的话费,0-99999
unsigned char cAgentFlag; // 代收费标志,0:应收;1:实收
unsigned char cMorelatetoMTFlag; // 引起MT消息的原因
unsigned char cPriority; // 优先级0-9,从低到高
char sExpireTime[16]; // 短消息寿命的终止时间,"yymmddhhmmsstnnp","tnnp"取固定值"032+"
char sScheduleTime[16]; // 定时发送时间
unsigned char cReportFlag; // 状态报告标志,0-出错返回状态报告;1-总返回状态报告;2-不要状态报告;3...
unsigned char cTpPid;
unsigned char cUdhi;
unsigned char cMessageCoding; // 编码方式,0:Ascii;3:Write card;4:binary;8:ucs2;15:GBK
unsigned char cMessageType; // 0:短消息信息
unsigned int nMsgLen; // 短消息长度(不调用sgip_submit_sm_set_messagecontent,而手动赋值的话,需要调用函数htonl()转换为网络字节序)
unsigned char sMsgContent[MAX_SUBMITMSG_LEN]; // 2048;
char sLinkId[9];
unsigned int nID;
};
typedef struct sgipg_submit SGIPG_SUBMIT;
/**
DELIVER消息体
*/
struct sgipg_deliver {
char sUserNumber[21]; // 发送短消息的用户手机号
char sSpNumber[21]; // sp的接入号码
unsigned char cTpPid;
unsigned char cUdhi;
unsigned char cMsgCoding;
unsigned int nMsgLen;
unsigned char sMsgContent[160];
char sLinkId[8];
};
typedef struct sgipg_deliver SGIPG_DELIVER;
// REPORT消息体
struct sgipg_report {
sgipg_seqid nSubmitSeqNum; // 该命令所涉及的Submit或Deliver命令的序列号
unsigned char cReportType; // Report命令类型.0,1.
char sUserNumber[21]; // 接收短消息的手机号,手机号码前加"86"国别标志.
unsigned char cState; // 该命令所涉及的短消息的当前执行状态.0:发送成功.1:等待发送.2:发送失败.
unsigned char cErrorCode; // 当State==2时为错误码值,否则为0.
char sReserved[8]; // 保留,扩展用.
};
typedef struct sgipg_report SGIPG_REPORT;
// sgip_packet接收时用到的消息包.
struct sgipg_packet {
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;
};
typedef struct sgipg_packet SGIPG_PACKET;
/*
SGIP连接信息
sp连接网关端口结构
*/
struct sgip_conn {
SOCKET hSocket;
unsigned remotePort;
unsigned nSrcNum; /// 源节点编号
bool fBinded; //
bool fBusy;
int nCount; //重发次数
sgip_conn() {
fBinded = false;
hSocket = NULL;
remotePort = 0;
fBusy = false;
nCount = 0;
}
};
typedef struct sgip_conn SGIP_CONN;
// Deliver包结构
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包结构
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结构
typedef struct mtrespstr
{
unsigned nID;
unsigned nSrcNum;
unsigned nDateTime;
unsigned nSeq;
unsigned char cResult;
sgipg_submit ss;
}MTRespStr;
// Submit错误结构,当Submit发送不成功时,返回该结构
typedef struct mterrorstr
{
unsigned nID;
unsigned nSrcNum;
unsigned nDateTime;
unsigned nSeq;
// 1:因为连接不上SMG网关系统 2:登录网关失败 3:包发送失败且超过重发次数 4.超时无应答 5.消息长度为零 6.没有可用的连接
int nErrorType;
sgipg_submit ss;
}MTErrorStr;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -