📄 smei.h
字号:
#if !defined(__SMEI_H__)
#define __SMEI_H__
#define CNGP_SEND_TIMEOUT 3
#define CNGP_RECV_TIMEOUT 30
#define SP_ERROR_OK 0
#define SP_ERROR_START 128
#define SP_ERROR_INVALID_FEETYPE SP_ERROR_START + 1
#define SP_ERROR_SOCKET_CREATEFAILED SP_ERROR_START + 2
#define SP_ERROR_SOCKET_CONNECTFAILED SP_ERROR_START + 3
#define SP_ERROR_SOCKET_SELECTFAILED SP_ERROR_START + 4
#define SP_ERROR_SOCKET_RECVTIMEOUT SP_ERROR_START + 5
#define SP_ERROR_SOCKET_RECVERROR SP_ERROR_START + 6
#define SP_ERROR_SOCKET_SENDTIMEOUT SP_ERROR_START + 7
#define SP_ERROR_SOCKET_SENDERROR SP_ERROR_START + 8
#define SP_ERROR_OVERFLOW SP_ERROR_START + 9
#define SP_ERROR_INVALID_COMMAND SP_ERROR_START + 10
#define SP_ERROR_FILE_WRITEERROR SP_ERROR_START + 11
#define SP_ERROR_FILE_OPENERROR SP_ERROR_START + 12
// 用于CNGP_LOGIN_BODY的cLoginMode
#define LOGINMODE_SUBMIT 0 // 发送短消息
#define LOGINMODE_DELIVER 1 // 接收短消息
#define LOGINMODE_BOTH 2 // 收发短消息
#define LOGINMODE_RESERVED
#define MSG_FORMAT_ASCII 0 // ASCII字符串
#define MSG_FORMAT_WRITE_CARD 3 // 保留
#define MSG_FORMAT_BINARY 4 // 二进制编码
#define MSG_FORMAT_UCS2 8 // UCS2编码
#define MSG_FORMAT_GB 15 // GBK编码
//
// 消息ID定义
//
#define CNGP_LOGIN 0x1
#define CNGP_LOGIN_RESP 0x80000001
#define CNGP_SUBMIT 0x2
#define CNGP_SUBMIT_RESP 0x80000002
#define CNGP_DELIVER 0x3
#define CNGP_DELIVER_RESP 0x80000003
#define CNGP_ACTIVE_TEST 0x4
#define CNGP_ACTIVE_TEST_RESP 0x80000004
#define CNGP_EXIT 0x6
#define CNGP_EXIT_RESP 0x80000006
#pragma pack(1)
//
// 消息头
//
typedef struct tagCNGP_HEAD {
unsigned int nTotalLength;
unsigned int nCommandId;
unsigned int nCommandStatus;
unsigned int nSequenceId;
} CNGP_HEAD;
typedef struct tagCNGP_LOGIN_BODY {
char sClientID[10]; // 此处为SPID,即SP的企业代码
char sAuthenticatorClient[16]; // 客户端密码用于鉴别客户端的接入请求。
unsigned char cLoginMode; // 登录类型:0、发送短消息,1 接收短消息 2、收发短消息
unsigned int nTimeStamp; // 时间戳的明文,由客户端产生,格式为mmddhhmmss,即月日时分秒,10位数字的整型,右对齐
unsigned char cVersion; // 客户端支持的版本号(高位4bit表示主版本号,低位4bit表示次版本号)
} CNGP_LOGIN_BODY;
typedef struct tagCNGP_LOGIN_RESP_BODY {
char sAuthenticatorServer[16]; // 服务器端认证码,当客户端认证出错时,此项为空
unsigned char cVersion; // 服务器支持的最高版本号
} CNGP_LOGIN_RESP_BODY;
typedef struct tagTLV {
unsigned short wTag; // 0x0100:协议标识 0x0428:拥塞状态
unsigned short wLength; // Value实际长度
unsigned char cValue; // 对于wTag为0x0100,则为协议标识,否则定义为:0:空闲 1-29:低负荷 30-49:中负荷 50-79:高负荷 80-90:最合适的负荷 90-99:接近拥塞 100:拥塞
} TLV;
typedef struct tagCNGP_DELIVER_BODY {
char sMsgID[10]; // SMGW产生的短消息流水号,由三部分组成:SMGW代码:3字节(BCD码)时间:4字节(BCD码)序列号:3字节(BCD码)
unsigned char cIsReport; // 是否为状态报告
unsigned char cMsgFormat; // 短消息格式
char sRecvTime[14]; // 短消息接收时间(格式:yyyymmddhhmmss,例如20010301200000)
char sSrcTermID[21]; // 短消息发送用户号码
char sDestTermID[21]; // 短消息接收用户号码
unsigned char cMsgLength; // 短消息长度
char sMsgContent[254]; // 短消息内容
TLV tlvProtocolID ; // 协议标识(参见TLV说明)
} CNGP_DELIVER_BODY;
typedef struct tagCNGP_DELIVER_RESP_BODY {
char sMsgID[10]; // SMGW产生的短消息流水号,由三部分组成:SMGW代码:3字节(BCD码)时间:4字节(BCD码)序列号:3字节(BCD码)
TLV tlvCongestionState; // 流量控制(参见TLV说明)
} CNGP_DELIVER_RESP_BODY;
typedef struct tagCNGP_SUBMIT_BODY {
char sSPID[10]; // SP的企业代码
unsigned char cSubType; // 短消息子类型(0=取消订阅,1=订阅或点播请求,2=点播下发,3=订阅下发,其他保留)
unsigned char cNeedReport; // 是否要求返回状态报告:(0=不要求,1=要求)
unsigned char cPriority; // 发送优先级(从0到3)3为最高级
char sServiceID[10]; // 业务类型
char sFeeType[2]; // 资费类型00=免费01=按条收费02=包月03=封顶04=包月扣费请求05=CR话单 其他:保留
unsigned char cFeeUserType; // 计费用户类型字段0:对目的终端计费1:对源终端计费2:对SP计费3:按照计费用户号码计费其他保留
char sFeeCode[6]; // 每条短消息的信息费,单位:分
unsigned char cMsgFormat; // 短消息格式(参见短消息格式代码表7.1)
char sValidTime[17]; // 有效时间,(格式:yyyymmddhhmmss)
char sAtTime[17]; // 定时发送时间,(格式:yyyymmddhhmmss)
char sSrcTermID[21]; // 短消息发送用户号码
char sChargeTermID[21]; // 计费用户号码
unsigned char cDestTermIDCount; // 短消息接收号码总数(≤100)
char sDestTermID[21]; // 短消息接收用户号码
unsigned char cMsgLength; // 短消息长度
char sMsgContent[254]; // 短消息内容
TLV ProtocolID; // 协议标识(参见TLV说明表7.5)
} CNGP_SUBMIT_BODY;
typedef struct tagCNGP_SUBMIT_RESP_BODY {
char sMsgID[10]; // SMGW产生的短消息流水号,由三部分组成:SMGW代码:3字节(BCD码)时间:4字节(BCD码)序列号:3字节(BCD码)
TLV tlvCongestionState; // 流量控制(参见TLV说明)
} CNGP_SUBMIT_RESP_BODY;
#define MAX_SM_LEN 160
typedef struct tagDELIVERRESP {
unsigned short uSize;
char sMsgID[21+1];
int nMsgLevel;
char sServiceID[10+1];
int nMsgFormat;
char sSrcTermID[21+1];
int nIsReply; /* 0/1 */
int nMsgLen;
char sMsgContent[MAX_SM_LEN+1];
char sDestTermID[21+1];
char cTpPid;
char cTpUdhi;
} DELIVERRESP, * PDELIVERRESP, FAR *LPDELIVERRESP;
int _CNGPSubmit(
LPCTSTR sSPID, // SP的企业代码
unsigned char bySubType, // 短消息子类型(0=取消订阅,1=订阅或点播请求,2=点播下发,3=订阅下发,其他保留)
unsigned char byNeedReport, // 是否要求返回状态报告:(0=不要求,1=要求)
unsigned char byPriority, // 发送优先级(从0到3)3为最高级
LPCTSTR sService, // 业务类型
LPCTSTR sFeeType, // 资费类型:00=免费 01=按条收费 02=包月 03=封顶 04=包月扣费请求 05=CR话单 其他:保留
unsigned char byFeeUserType, // 计费用户类型字段0:对目的终端计费1:对源终端计费2:对SP计费3:按照计费用户号码计费其他保留
LPCTSTR sFeeCode, // 每条短消息的信息费,单位:分
unsigned char byMsgFormat, // 短消息格式(参见短消息格式代码表7.1)
LPCTSTR sValidTime, // 有效时间,(格式:yyyymmddhhmmss)
LPCTSTR sAtTime, // 定时发送时间,(格式:yyyymmddhhmmss)
LPCTSTR sOrgAddr, // 短消息发送用户号码
LPCTSTR sChargeAddr, // 计费用户号码
unsigned char byUserNum, // 短消息接收号码总数(≤100)
LPCTSTR sDestAddrs, // 短消息接收号码(连续存储DestTermIDCount个号码)
unsigned char byMsgLen, // 短消息长度
LPCTSTR sMsgContent, // 短消息内容
unsigned char byProValue = 0, // 协议标识(参见TLV说明表7.5)
unsigned char* byMsgID = NULL); // 接收MSID的字段 SMEI的扩展
int _GetCNGPDeliverSM(
char* sMsgID, //返回:SMGW产生的短消息流水号,由三部分组成:SMGW代码:3字节(BCD码)时间:4字节(BCD码)序列号:3字节(BCD码)
unsigned char* byMsgFormat, //返回:断消息格式
char* sRecvTime, //返回:接收时间
char* sOrgAddr, //返回:源地址
char* sDestAddr, //返回:目标地址
unsigned char* byMsgLen, //返回:消息长度
char* sMsgContent, //返回:消息内容
unsigned char* byProValue, //返回:协议标识
unsigned char* byIsReport, //返回:状态报告标志
char* sSrcMsgID, //返回:状态报告中原始MsgID
char* sSubmitdate,
char* sDonedate,
char* sStatus,
int iDeliverAckResult);
SOCKET _login(LPCSTR Server, WORD Port, LPCTSTR SystemID, LPCTSTR Password, int nLoginMode);
int _activetest(SOCKET hSocket);
int _submit(LPCSTR Server, WORD Port, LPCTSTR SystemID, LPCTSTR Password);
void _logout(SOCKET& hSocket);
int _delivery(SOCKET& hSocket, int nWaitSeconds);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -