⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sgip.h

📁 短信防伪系统服务器端
💻 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 + -