📄 sgip.h
字号:
// Sgip.h: interface for the CSgip class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SGIP_H__8D582CBB_29AA_4187_80A5_F24EAE79E990__INCLUDED_)
#define AFX_SGIP_H__8D582CBB_29AA_4187_80A5_F24EAE79E990__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "CommonSms.h"
#define nSGIP_BIND 0x1
#define nSGIP_BIND_RESP 0x80000001
#define nSGIP_UNBIND 0x2
#define nSGIP_UNBIND_RESP 0x80000002
#define nSGIP_SUBMIT 0x3
#define nSGIP_SUBMIT_RESP 0x80000003
#define nSGIP_DELIVER 0x4
#define nSGIP_DELIVER_RESP 0x80000004
#define nSGIP_REPORT 0x5
#define nSGIP_REPORT_RESP 0x80000005
#pragma pack(push,1)//按照字节对其方式
typedef struct _sgip_seqid
{
unsigned long nSeq1; //源节点编号,如:3000030023,要用htonl()转换为网络顺序再发送
unsigned long nSeq2; //日期时间, 如:1120203225,要用htonl()转换为网络顺序再发送
unsigned long nSeq3; //流水号, 如:12345, 要用htonl()转换为网络顺序再发送
}SEQID,*LPSEQID;
// 包头
typedef struct _sgip_head
{
int size; // 数据报的长度
int cmdid; // 命令码
SEQID seqid; //序列号
}SGIP_HEAD;
//Bind包消息体
typedef struct _sgip_bind
{
char cLoginType; //1-sp连接smg;2-smg连接sp
char sLoginName[16]; //服务器端给客户端分配的登录名
char sLoginPwd[16]; //服务器端给和Login Name对应的密码
char sReserved[8]; //保留
}SGIP_BIND;
//Bind_Resp包消息体
typedef struct _sgip_bind_resp
{
unsigned char cResult; //Bind执行命令是否成功。0:成功,其它:错误码
char sReserve[8]; //保留,扩展用
}SGIP_BIND_RESP;
//Unbind和Unbind_Resp没有消息体
//---------------------------------//
//Submit包消息体
typedef struct _sgip_submit
{
char sSPNumber[21]; //sp的接入号码
char sChargeNumber[21]; //付费号码,手机号码前加"86"国别标志;当且仅当群发且对用户收费时为空;如果为空,则该条短消息产生的费用由UserNumber代表的用户支付;如果为全零字符串"000000000000000000000",表示该条短消息产生的费用由SP支付。
char cUserCount; //接收短消息的手机数量,取值范围1(不能群发)
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消息的原因 0-MO点播引起的第一条MT消息;1-MO点播引起的非第一条MT消息;2-非MO点播引起的MT消息;3-系统反馈引起的MT消息。
char cPriority; //优先级0-9,从低到高
char sExpireTime[16]; //短消息寿命的终止时间,如果为空,表示使用短消息中心的缺省值。时间内容为16个字符,格式为"yymmddhhmmsstnnp" ,其中"tnnp"取固定值"032+",即默认系统为北京时间
char sScheduleTime[16]; //短消息定时发送的时间,如果为空,表示立刻发送该短消息。时间内容为16个字符,格式为"yymmddhhmmsstnnp" ,其中"tnnp"取固定值"032+",即默认系统为北京时间
char cReportFlag; //状态报告标志,0-该条消息只有最后出错时要返回状态报告;1-该条消息无论最后是否成功都要返回状态报告;2-该条消息不需要返回状态报告;3-该条消息仅携带包月计费信息,不下发给用户,要返回状态报告
char cTpPid; //GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9
char cUdhi; //GSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐
char cMessageCoding; //短消息的编码格式。0:纯ASCII字符串,3:写卡操作,4:二进制编码,8:UCS2编码,15:GBK编码,其它参见GSM3.38第4节:SMS Data Coding Scheme
char cMessageType; //信息类型。0:短消息信息,其它:待定
unsigned long nMsgLen; //短消息长度(需要调用函数htonl()转换为网络字节序)
char sMsgContent[256]; //160;(Message Length,可变,编程时要注意)
char sReserve[8]; //保留。联通在信的SPMS用于保存LinkID
}SGIP_SUBMIT;
//Submit_Resp包消息体
typedef struct _sgip_submit_resp
{
char cResult; //Submit命令是否成功接收。0:接收成功,其它:错误码
char sReserve[8]; //保留,扩展用
}SGIP_SUBMIT_RESP;
// Deliver包消息体
typedef struct _sgip_deliver
{
char sUserNumber[21]; //发送短消息的用户手机号,手机号码前加"86"国别标志
char sSPNumber[21]; //sp的接入号码,如:9011
char cTP_pid; //GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9
char cTP_udhi; //GSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐
char cMessageCoding; //短消息的编码格式。0:纯ASCII字符串3:写卡操作4:二进制编码8:UCS2编码15: GBK编码其它参见GSM3.38第4节:SMS Data Coding Scheme
unsigned long nMsgLen; //短消息的长度 注:海南联通傲天网关处理此4字节字段-》1字节
char sMsgContent[254]; //短消息的内容(字节=nMsgLen)
char sReserved[8]; //保留。联通在信的SPMS用于保存LinkID
}SGIP_DELIVER;
// Deliver_Resp包消息体
typedef struct _sgip_deliver_resp
{
char cResult; //Deliver命令是否成功接收。0:接收成功,其它:错误码
char sReserve[8]; //保留,扩展用
}SGIP_DELIVER_RESP;
// Report消息体
typedef struct _sgip_report
{
SEQID seqid; //该命令所涉及的Submit或Deliver命令的序列号
char cReportType; //Report命令类型。0:对先前一条Submit命令的状态报告,1:对先前一条前转Deliver命令的状态报告
char sUserNumber[21]; //接收短消息的手机号,手机号码前加"86"国别标志.
char cState; //该命令所涉及的短消息的当前执行状态.0:发送成功.1:等待发送.2:发送失败.
char cErrorCode; //当State==2时为错误码值,否则为0.
char sReserved[8]; //保留,扩展用.
}SGIP_REPORT;
// Report_Resp消息体
typedef struct _sgip_report_resp
{
char cResult; //Report命令是否成功接收。0:接收成功其它:错误码
char sReserve[8]; //保留,扩展用
}SGIP_REPORT_RESP;
#pragma pack(pop)
void PK_SGIP(SGIP_SUBMIT * pSubmit,
int* pk_len,
char *corpId,
char* srcTermid,
char* destTermid,
char* chargeTermid,
int feeuserType,
int moRelatetoMTFlag,
char* feeType,
char* feecode,
char* serviceid,
int msgFormat,
int msgLength,
char* msgContent,
char* linkId
);
class CSgip : public CCommonSMS
{
public:
CSgip();
virtual ~CSgip();
protected:
int m_listenport;
SOCKET m_socklisten;
HANDLE m_hListenThread;
public:
int Startup( char *szIp,int port,int listenport, int login_mode,
char *szUser,char *szPwd,
char *szCorpId,char *szSeverNumber,char *szSpNode,
int threadpool ,int wndsize,
int timeout,int trys,
void (*OnDeliverSMS)(DELIVER_SMS *pDeliver),
void (*OnMTReportSMS)(MTREPORT_SMS *pReport),
void (*OnSubmitedSMS)(SUBMIT_SMS *pSubmited));
int Cleanup();
virtual int SubmitSMS(SUBMIT_SMS *p ,int len,int seqid); //发送函数
virtual void OnRecv();
virtual void OnActive();
virtual void OnSocketError();
virtual int Login();
virtual int Logout();
static unsigned long _stdcall ListenThreadProc(void * lpvoid);
void OnListen();
int Listen();
};
#endif // !defined(AFX_SGIP_H__8D582CBB_29AA_4187_80A5_F24EAE79E990__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -