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

📄 sgip_message.h

📁 看到联通的接口协议的dll没
💻 H
字号:
#ifndef _SMAL_SGIP_MESSAGE_H
#define _SMAL_SGIP_MESSAGE_H

/***************************************************************
  结构体头文件,
  sgip协议部分的头文件部分
*/
//#include <smal.h>

#include "smal.h"
#include <winsock2.h>
#pragma comment(lib, "ws2_32")
#pragma pack(1)

const int MAX_SUBMITMSG_LEN		= 1024;

/*
	顺序号,也可以用整数数组表示.
*/
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 {
	unsigned char	cLoginType;		    // 1-sp连接smg;2-smg连接sp
	char			sLoginName[16];		// 用户名
	char			sLoginPwd[16];		// 密码
	char			sReserved[8];		// 保留
};
typedef struct sgipg_connect SGIPG_CONNECT;

/*
	应答包信息体
*/
struct sgipg_resp {
	unsigned char	cResult;		// 0:成功,1:用户名密码错误,2:重复登录,3:连接过多(更多错误码看协议)
	char			sReserved[8];	// 保留
};
typedef struct sgipg_resp SGIPG_RESP;

/**
*	MT消息体
*	V1.1	增加对群发的支持.
*	V1.2	支持超长短信,最长2048字节(20040730)
*/
struct sgipg_submit {
	char			sSpNumber[21];					// sp的接入号码
	char			sChargeNumber[21];				// 付费号码
	unsigned char	cUserCount;						// 接收短消息的手机数量
	char			sUserNumber[21*100];			// 接受该短消息的手机号
	char			sCorpId[5];						// 企业代码,0-99999
	char			sServiceType[10];				// 业务代码,由sp定义
	unsigned char	cFeeType;						// 计费类型
	char			sFeeValue[6];					// 该条短消息的收费值,单位为分
	char			sGivenValue[6];					// 赠送用户的话费,0-99999
	unsigned char	cAgentFlag;						// 代收费标志,0:应收;1:实收
	unsigned char	cMorelatetoMTFlag;				// 引起MT消息的原因
	unsigned char	cPriority;						// 优先级0-9,从低到高
	char			sExpireTime[16];				// 短消息寿命的终止时间,"yymmddhhmmsstnnp","tnnp"取固定值"032+"
	char			sScheduleTime[16];				// 定时发送时间
	unsigned char	cReportFlag;					// 状态报告标志,0-出错返回状态报告;1-总返回状态报告;2-不要状态报告;3...
	unsigned char	cTpPid;
	unsigned char	cUdhi;
	unsigned char	cMessageCoding;					// 编码方式,0:Ascii;3:Write card;4:binary;8:ucs2;15:GBK
	unsigned char	cMessageType;					// 0:短消息信息
	unsigned int	nMsgLen;						// 短消息长度(不调用sgip_submit_sm_set_messagecontent,而手动赋值的话,需要调用函数htonl()转换为网络字节序)
	unsigned char	sMsgContent[MAX_SUBMITMSG_LEN];	// 2048;
	char			sLinkId[9];

	unsigned int	nID;
};
typedef struct sgipg_submit	SGIPG_SUBMIT;

/**
	DELIVER消息体
*/
struct sgipg_deliver {
	char			sUserNumber[21];			// 发送短消息的用户手机号
	char			sSpNumber[21];				// sp的接入号码
	unsigned char	cTpPid;
	unsigned char	cUdhi;
	unsigned char	cMsgCoding;
	unsigned int	nMsgLen;
	unsigned char	sMsgContent[160];
	char			sLinkId[8];
};
typedef struct sgipg_deliver	SGIPG_DELIVER;


//	REPORT消息体
struct sgipg_report {
	sgipg_seqid		nSubmitSeqNum;		// 该命令所涉及的Submit或Deliver命令的序列号
	unsigned char	cReportType;		// Report命令类型.0,1.
	char			sUserNumber[21];	// 接收短消息的手机号,手机号码前加"86"国别标志.
	unsigned char	cState;				// 该命令所涉及的短消息的当前执行状态.0:发送成功.1:等待发送.2:发送失败.
	unsigned 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;

/*
 SGIP连接信息
 sp连接网关端口结构
*/
struct sgip_conn {
	SOCKET			hSocket;
	unsigned		remotePort;
	unsigned		nSrcNum;		    /// 源节点编号  
	bool			fBinded;    		//
	bool			fBusy;
	int				nCount;             //重发次数

	sgip_conn() {
		fBinded			= false;
		hSocket			= NULL;
		remotePort		= 0;
		fBusy			= false;
		nCount			= 0;
	}
};
typedef struct sgip_conn	SGIP_CONN;


//	Deliver包结构
typedef struct deliverstr
{
	unsigned			nSrcNum;
	unsigned			nDateTime;
	unsigned			nSeq;

	char 				sUserNumber[22];
	char				sSPNumber[22];
	unsigned char		tp_pid;
	unsigned char		tp_udhi;
	unsigned char		cMsgCoding;
	unsigned int		nMsgLen;
	unsigned char		sMsgContent[160];
	char				sLinkId[9];
}DeliverStr;


// Report包结构
typedef struct reportstr
{
	unsigned		nSrcNum;
	unsigned		nDateTime;
	unsigned		nSeq;

	char		  	sUserNumber[22];
	unsigned char	cState;
	unsigned char cErrcode;
	unsigned char cReportType;
	char		sReserved[9];

	unsigned int	nSubmitSeq;
	unsigned int	nSubmitDateTime;
}ReportStr;


// MT Response结构
typedef struct mtrespstr
{
	unsigned			nID;
	unsigned			nSrcNum;
	unsigned			nDateTime;
	unsigned			nSeq;
	unsigned char		cResult;

	sgipg_submit	ss;
}MTRespStr;


// Submit错误结构,当Submit发送不成功时,返回该结构
typedef struct mterrorstr
{
	unsigned			nID;
	unsigned			nSrcNum;
	unsigned			nDateTime;
	unsigned			nSeq;
	  
	// 1:因为连接不上SMG网关系统 2:登录网关失败 3:包发送失败且超过重发次数 4.超时无应答 5.消息长度为零 6.没有可用的连接
	int					nErrorType;  
	
	sgipg_submit	ss;
}MTErrorStr;

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -