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

📄 sgip.h

📁 SGIP协议封装
💻 H
字号:
/*++

版权所有(C),清华深讯公司

模块名:

	sgip.h

摘要:

    短消息网关互联协议(SGIPv1.2)

作者:

    周辉球

环境:

    Win32平台和UNIX类平台, 通过预编译宏定义决定

修改历史:


--*/

#ifndef _SGIP_H_
#define _SGIP_H_
   
#ifdef _WIN32
	#ifndef __PROC_C__
		#ifdef _WINSOCKAPI_
		#include <winsock.h> 
		#else
		#include <winsock2.h> 
		#endif
		
		#include <memory.h>
		#include <string.h>
		#include <stdio.h>
		#include <time.h>	
			
		#ifdef _WINSOCKAPI_
		#pragma comment(lib, "wsock32.lib") 
		#else
		#pragma comment(lib, "ws2_32.lib")
		#endif	
	#endif

	#ifdef __cplusplus
	extern "C" {
	#endif
#else
	#ifndef __PROC_C__
		#include <sys/types.h>
		#include <netdb.h>
		#include <sys/socket.h>
		#include <netinet/in.h>
		#include <arpa/inet.h>
		#include <string.h>
		#include <stdio.h>
		#include <stdlib.h>
		#include <unistd.h>
		#include <time.h>
		#include <sys/time.h>
		#include <pthread.h>
		#include <signal.h>
		#include <iconv.h>
	#endif

	#ifndef SOCKET
		#define SOCKET int
		#define INVALID_SOCKET  (SOCKET)(~0)
		#define SOCKET_ERROR            (-1)
		#define closesocket   close
	#endif
#endif

/* 消息ID值定义, 所有宏定义前均加上SGIP_前缀. */
#define SGIP_BIND                   0x00000001
#define SGIP_BIND_RESP              0x80000001
#define SGIP_UNBIND                 0x00000002
#define SGIP_UNBIND_RESP            0x80000002
#define SGIP_SUBMIT                 0x00000003
#define SGIP_SUBMIT_RESP            0x80000003
#define SGIP_DELIVER                0x00000004
#define SGIP_DELIVER_RESP           0x80000004
#define SGIP_REPORT                 0x00000005
#define SGIP_REPORT_RESP            0x80000005
#define SGIP_ADDSP                  0x00000006
#define SGIP_ADDSP_RESP             0x80000006
#define SGIP_MODIFYSP               0x00000007
#define SGIP_MODIFYSP_RESP          0x80000007
#define SGIP_DELETESP               0x00000008
#define SGIP_DELETESP_RESP          0x80000008
#define SGIP_QUERYROUTE             0x00000009
#define SGIP_QUERYROUTE_RESP        0x80000009
#define SGIP_ADDTELESEG             0x0000000A
#define SGIP_ADDTELESEG_RESP        0x8000000A
#define SGIP_MODIFYTELESEG          0x0000000B
#define SGIP_MODIFYTELESEG_RESP     0x8000000B
#define SGIP_DELETETELESEG          0x0000000C
#define SGIP_DELETETELESEG_RESP     0x8000000C
#define SGIP_ADDSMG                 0x0000000D
#define SGIP_ADDSMG_RESP            0x8000000D
#define SGIP_MODIFYSMG              0x0000000E
#define SGIP_MODIFYSMG_RESP         0x8000000E
#define SGIP_DELETESMG              0x0000000F
#define SGIP_DELETESMG_RESP         0x8000000E
#define SGIP_CHECKUSER              0x00000010
#define SGIP_CHECKUSER_RESP         0x80000010
#define SGIP_USERRPT                0x00000011
#define SGIP_USERRPT_RESP           0x80000011
#define SGIP_ENQUIRELINK            0x10000001
#define SGIP_ENQUIRELINK_RESP       0x10000010

/* SGIP包的最大大小 */
#define SGIP_PDU_SIZE                   2408

typedef struct _SGIP_BODY_BIND {
	unsigned char LoginType;
	char LoginName[16 + 1];
	char LoginPassword[16 + 1];
	char Reserve[8 + 1];
} SGIP_BODY_BIND, *PSGIP_BODY_BIND;

typedef struct _SGIP_BODY_BIND_RESP {
	unsigned char Result;
	char Reserve[8 + 1];
} SGIP_BODY_BIND_RESP, *PSGIP_BODY_BIND_RESP;
	
typedef struct _SGIP_BODY_SUBMIT {
	char SPNumber[21 + 1];
	char ChargeNumber[21 + 1];
	unsigned char UserCount;
	char UserNumber[100][21 + 1];
	char CorpId[5 + 1];
	char ServiceType[10 + 1];
	unsigned char FeeType;
	char FeeValue[6 + 1];
	char GivenValue[6 + 1];
	unsigned char AgentFlag;
	unsigned char MOrelatetoMTFlag;
	unsigned char Priority;
	char ExpireTime[16 + 1];
	char ScheduleTime[16 + 1];
	unsigned char ReportFlag;
	unsigned char TP_pid;
	unsigned char TP_udhi;
	unsigned char MessageCoding;
	unsigned char MessageType;
	unsigned long MessageLength;
	char MessageContent[160 + 1];
	char Reserve[8 + 1];
} SGIP_BODY_SUBMIT, *PSGIP_BODY_SUBMIT;

typedef struct _SGIP_BODY_SUBMIT_RESP {
	unsigned char Result;
	char Reserve[8 + 1];
} SGIP_BODY_SUBMIT_RESP, *PSGIP_BODY_SUBMIT_RESP;

typedef struct _SGIP_BODY_DELIVER {
	char UserNumber[21 + 1];
	char SPNumber[21 + 1];
	unsigned char TP_pid;
	unsigned char TP_udhi;
	unsigned char MessageCoding;
	unsigned long MessageLength;
	char MessageContent[160 + 1];
	char Reserve[8 + 1];
} SGIP_BODY_DELIVER, *PSGIP_BODY_DELIVER;

typedef struct _SGIP_BODY_DELIVER_RESP {
	unsigned char Result;
	char Reserve[8 + 1];
} SGIP_BODY_DELIVER_RESP, *PSGIP_BODY_DELIVER_RESP;

typedef struct _SGIP_BODY_REPORT {
	unsigned long SubmitSequenceNumber[3];
	unsigned char ReportType;
	char UserNumber[21 + 1];
	unsigned char State;
	unsigned char ErrorCode;
	char Reserve[8 + 1];
} SGIP_BODY_REPORT, *PSGIP_BODY_REPORT;

typedef struct _SGIP_BODY_REPORT_RESP {
	unsigned char Result;
	char Reserve[8 + 1];
} SGIP_BODY_REPORT_RESP, *PSGIP_BODY_REPORT_RESP;

typedef union _SGIP_BODY {
	SGIP_BODY_BIND bind;
	SGIP_BODY_BIND_RESP bind_resp;
	SGIP_BODY_SUBMIT submit;
	SGIP_BODY_SUBMIT_RESP submit_resp;
	SGIP_BODY_DELIVER deliver;
	SGIP_BODY_DELIVER_RESP deliver_resp;
	SGIP_BODY_REPORT report;
	SGIP_BODY_REPORT_RESP report_resp;
} SGIP_BODY, *PSGIP_BODY;

typedef struct _SGIP_MSG {
	unsigned long MessageLength;
	unsigned long CommandID;
	unsigned long SequenceNumber[3];
	
	SGIP_BODY body;
} SGIP_MSG, *PSGIP_MSG;

/* 协议公共接口函数 */
/* 打包发送 */
int sgipBind(SOCKET sockfd, 
	const unsigned long *SequenceNumber, const SGIP_BODY_BIND *pBody);
int sgipBindResp(SOCKET sockfd, 
	const unsigned long *SequenceNumber, const SGIP_BODY_BIND_RESP *pBody);
int sgipUnbind(SOCKET sockfd, 
	const unsigned long *SequenceNumber);
int sgipUnbindResp(SOCKET sockfd, 
	const unsigned long *SequenceNumber);
int sgipSubmit(SOCKET sockfd, 
	const unsigned long *SequenceNumber, const SGIP_BODY_SUBMIT *pBody);
int sgipSubmitResp(SOCKET sockfd, 
	const unsigned long *SequenceNumber, const SGIP_BODY_SUBMIT_RESP *pBody);
int sgipDeliver(SOCKET sockfd, 
	const unsigned long *SequenceNumber, const SGIP_BODY_DELIVER *pBody);
int sgipDeliverResp(SOCKET sockfd, 
	const unsigned long *SequenceNumber, const SGIP_BODY_DELIVER_RESP *pBody);
int sgipReport(SOCKET sockfd, 
	const unsigned long *SequenceNumber, const SGIP_BODY_REPORT *pBody);
int sgipReportResp(SOCKET sockfd, 
	const unsigned long *SequenceNumber, const SGIP_BODY_REPORT_RESP *pBody);
int sgipEnquireLink(SOCKET sockfd, 
	const unsigned long *SequenceNumber);
int sgipEnquireLinkResp(SOCKET sockfd, 
	const unsigned long *SequenceNumber);

/* 解包 */
int sgipDecode(const char *pszPDU, SGIP_MSG *pMsg);

#ifdef _WIN32
	#ifdef __cplusplus
	}
	#endif
#endif

#endif /* _SGIP_H_ */

⌨️ 快捷键说明

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