📄 sgip.h
字号:
// SGIP.h : main header file for the SGIP DLL
//
#if !defined(AFX_SGIP_H__3164D539_D12F_4413_B519_24C91E94101E__INCLUDED_)
#define AFX_SGIP_H__3164D539_D12F_4413_B519_24C91E94101E__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <afxwin.h> // MFC core and standard components
#include <afxmt.h> //CCriticalSection
#include <afxtempl.h> //CMap, CList
#include <winsock2.h>
#pragma comment(lib, "ws2_32")
#pragma pack(1)
class CSgip;
static unsigned int G_nSeq = 0;
#define SGIP_SEND_TIMEOUT 3
#define SGIP_RECV_TIMEOUT 30
/////////////////////////////////////////////////////////////////////////////////////////
//错误码定义
//
#define SGIP_SUCCESS 0 /*success*/
#define SGIP_ERROR_START 0x40000000
#define SGIP_EINVALSOCK SGIP_ERROR_START+1 /*create socket fail*/
#define SGIP_EINVAL SGIP_ERROR_START+2 /*illegal server address*/
#define SGIP_HOST_UNREACHABLE SGIP_ERROR_START+3 /*fail to connect isc*/
#define SGIP_TIMEOUT SGIP_ERROR_START+4 /*send or recv timeout*/
#define SGIP_USERINVAL SGIP_ERROR_START+5 /*user or pwd illegal*/
#define SGIP_DISCONNECT SGIP_ERROR_START+6 /*connection end*/
#define SGIP_TOOHIGH_VERSION SGIP_ERROR_START+9 /*too high version*/
/*SOCKET ERROR*/
#define SGIP_SOCKET_CREATEFAIL SGIP_ERROR_START+100
#define SGIP_SOCKET_CONNECTFAIL SGIP_ERROR_START+101
#define SGIP_SOCKET_SENDTIMEOUT SGIP_ERROR_START+102
#define SGIP_SOCKET_SENDERROR SGIP_ERROR_START+103
#define SGIP_SOCKET_CLOSED SGIP_ERROR_START+104
#define SGIP_SOCKET_RECVTIMEOUT SGIP_ERROR_START+105
#define SGIP_SOCKET_RECVERROR SGIP_ERROR_START+106
#define SGIP_CLOSESOCKET_ERROR SGIP_ERROR_START+107
#define SGIP_UNSENDALL SGIP_ERROR_START+108
#define SGIP_SOCKET_SIZE_ERROR SGIP_ERROR_START+109
#define SGIP_ILLEGAL_CMD SGIP_ERROR_START+110
#define SGIP_LOGINFAIL SGIP_ERROR_START+111
#define SGIP_SOCKET_BINDFAIL SGIP_ERROR_START+112
#define SGIP_SOCKET_ACCEPTFAIL SGIP_ERROR_START+113
#define SGIP_API_EXCEPTION SGIP_ERROR_START+200
#define SGIP_SOCKET_EXCEPTION SGIP_ERROR_START+300
#define SGIP_API_INVALPARAM SGIP_ERROR_START+400
#define SGIP_SOCKET_INVALPARAM SGIP_ERROR_START+500
//
/////////////////////////////////////////////////////////////////////////////////////////
//
//
// 消息ID定义
//
#define SGIP_BIND 0x1
#define SGIP_BIND_RESP 0x80000001
#define SGIP_UNBIND 0x2
#define SGIP_UNBIND_RESP 0x80000002
#define SGIP_SUBMIT 0x3
#define SGIP_SUBMIT_RESP 0x80000003
#define SGIP_DELIVER 0x4
#define SGIP_DELIVER_RESP 0x80000004
#define SGIP_REPORT 0x5
#define SGIP_REPORT_RESP 0x80000005
#define ERR_STATUSREPORT 0x00 //只有最后出错时要返回状态报告.
#define NEED_STATUSREPORT 0x01 //无论最后是否成功都要返回状态报告.
#define NO_STATUSREPORT 0x02 //不需要返回状态报告.
#define CTRL_TYPE 0x03 //仅携带包月计费信息,不下发给用户.
#define MSG_FORMAT_ASCII 0x00 //纯ASCII字符串
#define MSG_FORMAT_WRITE_CARD 0x03 //写卡操作
#define MSG_FORMAT_BINARY 0x04 //二进制编码
#define MSG_FORMAT_UCS2 0x08 //UCS2编码
#define MSG_FORMAT_GB 0x0F //GBK编码
#define MSG_FORMAT_OTA 0xF6 //OTA操作时的编码方式
#define TPPROTO_SMS 0X00 //普通短信的协议类型
#define TPPROTO_WRITE_CARD 0X7F //OTA操作时的协议类型
//
// 顺序号,也可以用整数数组表示.
//
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 {
char cLoginType; //1-sp连接smg;2-smg连接sp
char sLoginName[16];
char sLoginPwd[16];
char sReserved[8];
};
typedef struct sgipg_connect SGIPG_CONNECT;
//
// SGIP1.2应答包
//
struct sgipg_resp {
unsigned char cResult; //0:成功
char sReserved[8];
};
typedef struct sgipg_resp SGIPG_RESP;
// 无消息体
//sgip_unbind
//sgip_unbind_resp
//
//
// MT消息体
//
struct sgipg_submit {
char sSpNumber[21]; //sp的接入号码
char sChargeNumber[21]; //付费号码
char cUserCount; //接收短消息的手机数量
char sUserNumber[21]; //接受该短消息的手机号
char sCorpId[5]; //企业代码,0-99999
char sServiceType[10]; //业务代码,由sp定义
char cFeeType; //计费类型
char sFeeValue[6]; //该条短消息的收费值,单位为分
char sGivenValue[6]; //赠送用户的话费,0-99999
char cAgentFlag; //代收费标志,0:应收;1:实收
char cMorelatetoMTFlag; //引起MT消息的原因
char cPriority; //优先级0-9,从低到高
char sExpireTime[16]; //短消息寿命的终止时间,"yymmddhhmmsstnnp","tnnp"取固定值"032+"
char sScheduleTime[16]; //定时发送时间
char cReportFlag; //状态报告标志,0-出错返回状态报告;1-总返回状态报告;2-不要状态报告;3...
char cTpPid;
char cUdhi;
char cMessageCoding; //编码方式,0:Ascii;3:Write card;4:binary;8:ucs2;15:GBK
char cMessageType; //0:短消息信息
unsigned int nMsgLen; //短消息长度
char sMsgContent[160]; //160;
char sReserved[8];
};
typedef struct sgipg_submit SGIPG_SUBMIT;
//
// DELIVER消息体
//
struct sgipg_deliver {
char sUserNumber[21]; //发送短消息的用户手机号
char sSpNumber[21]; //sp的接入号码
char cTpPid; //
char cUdhi;
char cMsgCoding;
unsigned int nMsgLen;
char sMsgContent[160];
char sReserved[8];
};
typedef struct sgipg_deliver SGIPG_DELIVER;
//
// REPORT消息体
//
struct sgipg_report {
sgipg_seqid nSubmitSeqNum; //该命令所涉及的Submit或Deliver命令的序列号
char cReportType; //Report命令类型.0,1.
char sUserNumber[21]; //接收短消息的手机号,手机号码前加"86"国别标志.
char cState; //该命令所涉及的短消息的当前执行状态.0:发送成功.1:等待发送.2:发送失败.
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;
struct sgip_conn {
SOCKET hSocket;
unsigned int nSrcNum; //源节点编号
bool fBinded;
sgip_conn() {
fBinded = false;
hSocket = NULL;
}
};
typedef struct sgip_conn SGIP_CONN;
//
// 消息包长度定义
//
#define SGIP_HEADLEN sizeof(sgipg_head) //消息头的长度
#define SGIP_LOGINLEN sizeof(sgipg_connect) //登录消息包体的长度
#define SGIP_RESPLEN sizeof(sgipg_resp) //应答包体的长度
#define SGIP_SUBMITLEN sizeof(sgipg_submit) //MT消息体的长度
#define SGIP_DELIVERLEN sizeof(sgipg_deliver) //MO消息体的长度
#define SGIP_REPORTLEN sizeof(sgipg_report) //Report消息体的长度
//
/////////////////////////////////////////////////////////////////////////////////////////
//
//用于返回包
//
/////////////////////////////////////////////////////////////////////////////////////////
//Deliver包结构
typedef struct deliverstr
{
unsigned int nSrcNum;
unsigned int nDateTime;
unsigned int nSeq;
char sUserNumber[22];
char sSPNumber[22];
unsigned char tp_pid;
unsigned char tp_udhi;
unsigned char cMsgCoding;
unsigned int nMsgLen;
char sMsgContent[160];
}DeliverStr;
//Report包结构
typedef struct reportstr
{
unsigned int nSrcNum;
unsigned int nDateTime;
unsigned int nSeq;
char sUserNumber[22];
unsigned char cState;
unsigned char cErrcode;
unsigned int nSubmitSeq;
}ReportStr;
//MT Response结构
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -