📄 sgippacket.h
字号:
} ;
struct SREPORT
{
unsigned long Msglen;//消息的总长度(字节)
unsigned long Cmd_id;//命令ID
unsigned long Seq_Number1;//序列号,只记录后四个字节
unsigned long Seq_Number2;//序列号,只记录后四个字节
unsigned long Seq_Number3;//序列号,只记录后四个字节
unsigned long SubmitSequenceNumber1;//第一部分表示命令源节点的编号
unsigned long SubmitSequenceNumber2;//第二部分表示命令产生的日期和时间(网关系统中
//的任何命令的保存时间都不应该超过一年),格式为十进制的mmddhhmmss,
//比如11月20日20时32分25秒产生的命令,其第二部分为十进制1120203225
unsigned long SubmitSequenceNumber3;//第三部分由0开始,循环进位,直到进位满了之后再清零,重新开始计数
BYTE ReportType; //Report命令类型0:对先前一条Submit命令的状态报告
//1:对先前一条前转Deliver命令的状态报告
char UserNumber[21];// 接收短消息的手机号,手机号码前加"86"国别标志
BYTE State;//该命令所涉及的短消息的当前执行状态0:发送成功1:等待发送2:发送失败
BYTE ErrorCode;// 当State=2时为错误码值,否则为0
char Reserve[8];// 保留,扩展用
} ;
struct SREPORT_RESP
{
unsigned long Msglen;//消息的总长度(字节)
unsigned long Cmd_id;//命令ID
unsigned long Seq_Number1;//序列号,只记录后四个字节
unsigned long Seq_Number2;//序列号,只记录后四个字节
unsigned long Seq_Number3;//序列号,只记录后四个字节
BYTE Result;//命令是否成功接收。0:接收成功其它:错误码
char Reserve[8];// 保留,扩展用
} ;
struct STRACE
{
unsigned long Msglen;//消息的总长度(字节)
unsigned long Cmd_id;//命令ID
unsigned long Seq_Number1;//序列号,只记录后四个字节
unsigned long Seq_Number2;//序列号,只记录后四个字节
unsigned long Seq_Number3;//序列号,只记录后四个字节
unsigned long SubmitSequenceNumber1;//第一部分表示命令源节点的编号
unsigned long SubmitSequenceNumber2;//第二部分表示命令产生的日期和时间(网关系统中
//的任何命令的保存时间都不应该超过一年),格式为十进制的mmddhhmmss,
//比如11月20日20时32分25秒产生的命令,其第二部分为十进制1120203225
unsigned long SubmitSequenceNumber3;//第三部分由0开始,循环进位,直到进位满了之后再清零,重新开始计数
char UserNumber[21];// 被跟踪MT短消息的目的手机号,手机号码前加"86"国别标志
char Reserve[8];// 保留,扩展用
} ;
struct STRACE_RESP
{
unsigned long Msglen;//消息的总长度(字节)
unsigned long Cmd_id;//命令ID
unsigned long Seq_Number1;//序列号,只记录后四个字节
unsigned long Seq_Number2;//序列号,只记录后四个字节
unsigned long Seq_Number3;//序列号,只记录后四个字节
BYTE Count;//被跟踪MT短消息经过的节点个数,当被跟踪短消息经过多个节点时,以下各个字段可重复
BYTE Result;//Trace命令在该节点是否成功接收。十六进制数字0:接收成功1:等待处理其它:错误码
char NodeId[6];// 节点编号
char ReceiveTime[16];//被跟踪的短消息到达该节点时刻,格式为"yymmddhhmmss"
char SendTime[16];// 该节点发出被跟踪的短消息时刻,格式为"yymmddhhmmss"
char Reserve[8];// 保留,扩展用
} ;
struct SSGIP_MESSAGE_HEAD
{
unsigned long Msglen;//消息的总长度(字节)
unsigned long Cmd_id;//命令ID
unsigned long Seq_Number1;//序列号,只记录后四个字节
unsigned long Seq_Number2;//序列号,只记录后四个字节
unsigned long Seq_Number3;//序列号,只记录后四个字节
} ;
struct SUSER_DATA_INFO
{
unsigned long user_id; //通信节点(SMG、GNS、SP和SMSC)都有一个唯一的数字编号
int user_state; //0 用户在线;1 用户连接断开
unsigned long originality_message_sequence1;//本网关接收到的原始消息序列号
unsigned long originality_message_sequence2;
unsigned long originality_message_sequence3;
//如果命令序列号和以前序列号相同,且内容也相同,则接收方丢弃该命令;
//如果序列号相同,但是命令内容并不相同,则命令接收方在应答中返回错误码。
unsigned long new_message_sequence1;//本网关产生的需发送的消息序列号---对于MO短消息
unsigned long new_message_sequence2;
unsigned long new_message_sequence3;
int max_message_send_count;// 本消息最大传输次数
int message_send_count; // 本消息已经传输次数,0表示未向目标地址发消息
//如果大于max_message_send_count
//丢掉本消息
// SSGIP_MESSAGE_HEAD message_head;
// char strusermessage[160]; //(在链表中)保存的需要向某用户重发的消息内容
unsigned char the_message[320];
char SPNumber[21]; //SP的接入号码
int m_Socketclient_id; //与某SMG连接的标识
int m_SocketManager_id; //与某SP连接的标识
long data_id;
int is_sp_or_smg; //Report_Resp 专用 1 sp; 2 smg
} ;
struct SUSER_SP_SESSION_INFO
{
unsigned long user_id; //通信节点(SMG、GNS、SP和SMSC)都有一个唯一的数字编号
bool is_encrypted; //通信是否加密
int purchase_type;//用户鉴权--------付费方式
long Message_type; //消息类型
int Protocol_type; //0 SGIP;1 SMPP; 2 CMPP;3 自定义; 4 其他
int user_type; //0 SP; 1 SMG; 2 SMSC
unsigned long message_geted_count; //收到这个用户发出的消息总数
int message_sended_count; //向这个用户发出的消息总数
int message_error_count;
int message_in_buffer_count; //需要向这个用户(重新)发出的消息总数(在链表中)
int message_in_buffer_max; //(在链表中)能保存的消息数上限
int message_error_code;//发生故障时,SP、SMG以及GNS节点应通过Report命令和其它相关命令
//的应答相结合返回故障原因;
//如果MO不成功,该用户所属的SMG还应向用户终端返回友好的应答信息说明不成功原因。
char message_error_describe[120]; //对用户反馈的消息
bool is_initializtion; //是否是bind 操作,考虑 bind 操作与普通消息的优先级问题
time_t dtOccurTime; // 最近一次消息事件发生时间,如果大于60秒,
//服务器端可以主动断开该连接
bool save_to_database; //是否将本节点全部消息写入数据库
char SPNumber[21];
} ;
struct SUSER_SMG_SESSION_INFO
{
unsigned long user_id; //通信节点(SMG、GNS、SP和SMSC)都有一个唯一的数字编号
bool is_encrypted; //通信是否加密
int purchase_type;//用户鉴权--------付费方式
long Message_type; //消息类型
int Protocol_type; //0 SGIP;1 SMPP; 2 CMPP;3 自定义; 4 其他
int user_type; //0 SP; 1 SMG; 2 SMSC
unsigned long message_geted_count; //收到这个用户发出的消息总数
int message_sended_count; //向这个用户发出的消息总数
int message_error_count;
int message_in_buffer_count; //需要向这个用户(重新)发出的消息总数(在链表中)
int message_in_buffer_max; //(在链表中)能保存的消息数上限
int message_error_code;//发生故障时,SP、SMG以及GNS节点应通过Report命令和其它相关命令
//的应答相结合返回故障原因;
//如果MO不成功,该用户所属的SMG还应向用户终端返回友好的应答信息说明不成功原因。
char message_error_describe[120]; //对用户反馈的消息
bool is_initializtion; //是否是bind 操作,考虑 bind 操作与普通消息的优先级问题
time_t dtOccurTime; // 最近一次消息事件发生时间,如果大于60秒,
//服务器端可以主动断开该连接
bool save_to_database; //是否将本节点全部消息写入数据库
} ;
class CSGIPPacket
{
public:
CSGIPPacket();
virtual ~CSGIPPacket();
private:
int mnSN;
private:
unsigned long GetSGIPTime();
public:
// 关于绑定
int PacketBind(BYTE *lpBuffer);
int PacketBindResp(BYTE *lpBuffer, SBIND *pBindPacket);
int PacketUnbindResp(BYTE *lpBuffer, SSGIP_MESSAGE_HEAD *pUnbindPacket);
int GetBindRespResult(SBIND_RESP *pBindRespPacket);
// 关于提交
int PacketSubmit(BYTE *lpBuffer, int nFeeType, char *strServiceType, char *strFeeValue, LPCTSTR strSender, LPCTSTR strSendTo,LPCTSTR strMsg);
int GetSubmitRespResult(SSUBMIT_RESP *pSubmitRespPacket);
// 关于deliver
void ParseDeliverPacket(BYTE *lpBuffer, LPTSTR strSender, LPTSTR strSendTo, LPTSTR strMsg);
int PacketDeliverResp(BYTE *lpBuffer, SDELIVER *pDeliverPacket);
};
#endif // !defined(AFX_SGIPPACKET_H__82355391_3A47_4A46_A460_86BDCE61FBE6__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -