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

📄 sgip.h

📁 该接口库是用VC6.0开发的基于Windows平台上的SGIP1.2协议的实现
💻 H
📖 第 1 页 / 共 2 页
字号:
// 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 + -