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

📄 func.h

📁 本程序是实现中国移动中国联通的网关程序.代码比较完整.
💻 H
字号:
#if !defined(FUNC_H)
#define FUNC_H
#include <winsock2.h>

#define SMPPMAXLENGTH 512
//command id definition
#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 SGIP_ADDSP				0x6
#define SGIP_ADDSP_RESP			0x80000006
#define SGIP_MODIFYSP			0x7
#define SGIP_MODIFYSP_RESP		0x80000007
#define SGIP_DELETESP			0x8
#define SGIP_DELETESP_RESP		0x80000008
#define SGIP_QUERYROUTE			0x9
#define SGIP_QUERYROUTE_RESP	0x80000009
#define SGIP_ADDTELESEG			0xa
#define SGIP_ADDTELESEG_RESP	0x8000000a
#define SGIP_MODIFYTELESEG		0xb
#define SGIP_MODIFYTELESEG_RESP	0x8000000b
#define SGIP_DELETETELESEG		0xc
#define SGIP_DELETETELESEG_RESP	0x8000000c
#define SGIP_ADDSMG				0xd
#define SGIP_ADDSMG_RESP		0x8000000d
#define SGIP_MODIFYSMG			0xe
#define SGIP_MODIFYSMG_RESP		0x0000000e
#define SGIP_DELETESMG			0xf
#define SGIP_DELETESMG_RESP		0x8000000f
#define SGIP_CHECKUSER			0x10
#define SGIP_CHECKUSER_RESP		0x80000010
#define SGIP_USERRPT			0x11
#define SGIP_USERRPT_RESP		0x80000011
#define SGIP_TRACE				0x1000
#define SGIP_TRACE_RESP			0x80001000

//error code definition
#define NOERROR 0//	无错误,命令正确接收
#define E_LOGINNAME 1//	非法登录,如登录名、口令出错、登录名与口令不符等。
#define E_REBIND 2//	重复登录,如在同一TCP/IP连接中连续两次以上请求登录。
#define E_MULTICONN 3//	连接过多,指单个节点要求同时建立的连接数过多。
#define E_LOGINTYPE 4//	登录类型错,指bind命令中的logintype字段出错。
#define E_FORMAT 5//	参数格式错,指命令中参数值与参数类型不符或与协议规定的范围不符。
#define E_MOBILENUM 6//	非法手机号码,协议中所有手机号码字段出现非86130号码或手机号码前未加"86"时都应报错。
#define E_MSGID 7//	消息ID错
#define E_MSGLEN 8//	信息长度错
#define E_SEQUENCENO 9//	非法序列号,包括序列号重复、序列号格式错误等
#define E_GNS 10//	非法操作GNS
#define E_NODEBUSY 11//	节点忙,指本节点存储队列满或其他原因,暂时不能提供服务的情况
#define E_DEADDEST 21//	目的地址不可达,指路由表存在路由且消息路由正确但被路由的节点暂时不能提供服务的情况
#define E_ERRROUTE 22//	路由错,指路由表存在路由但消息路由出错的情况,如转错SMG等
#define E_NOROUTE 23//	路由不存在,指消息路由的节点在路由表中不存在
#define E_INVALIDATEFEENUM 24//	计费号码无效,鉴权不成功时反馈的错误信息
#define E_NOCONNECTION 25//	用户不能通信(如不在服务区、未开机等情况)
#define E_NOMEMORY 26//	手机内存不足
#define E_MOBILETYPE 27//	手机不支持短消息
#define E_RECEIVE 28//	手机接收短消息出现错误
#define E_DSTUSER 29//	不知道的用户
#define E_NOFUNCTION 30//	不提供此功能
#define E_DEVICE 31//	非法设备
#define E_SYSTEM 32//	系统失败
#define E_FULLQUEUE 33//	短信中心队列满
//其它	其它错误码(待定义)
//注:错误码1-20所指错误一般在各类命令的应答中用到,21-32所指错误一般在report命令中用到。


//Exit Code
#define NOERROR 0
#define ExitFromGetCallBack 1
#define ExitFromLinkCallBack 2
#define ExitFromInitDatabase 3
#define ExitFromInit 4
#define ExitFromSender 5   
#define ExitFromWSAStartup 6
#define ExitFromWaitFailed 7
#define ExitFromNetClose 10008
#define ExitFromDeliver 9
#define ExitFromReceiver 10
#define ExitFromDBERROR 2000

#define ONESECTION1 0
#define ONESECTION2 0
#define ONESECTION3 0
#define MOBILELEN 20
#define MSGLEN 320
#define MSGLENP1 321
#define TESTSMSC 0
#define BADGW 1
#define SPACE '\d'
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile")
inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};
#define COUNT2SEND 250
#define COUNT2CHANGE 30
#define COUNT2SMSC 19

class CArg
{
public:
	CArg(){isStop=0;};
	~CArg();
	char szSub[50];
	DWORD dwSend,dwSequence,dwRecv;
	BYTE isStop;
	BYTE isActive;
	HANDLE hGW;
	_bstr_t strCnn;
	_ConnectionPtr pCnnGSM;
	int iChannelNum;
	char	SPNumber[21];
	char	SPID[7];
	char	LoginName[16];
	char	Password[16];
	char	SrcId[11];

	char	SMSCIP[20];//=10.0.0.170
	short	SMSCPORT;//=9971
	short	nMaxInterval;
	int isDebug,isMO;
	DWORD nLost;
	SOCKET s,ms;
	BYTE nMaxLost,nMaxReconnect;
	int iSelectInterval;
	char szService[8];
#if ONESECTION1
	CRITICAL_SECTION syc1;
#endif
#if ONESECTION2
	CRITICAL_SECTION syc2;
#endif
#if ONESECTION3
	CRITICAL_SECTION syc3;
#endif
};
class CMSG
{
public:
	DWORD dwCommand;
	DWORD dwSequence;
	DWORD dwSequence2;
	DWORD dwSequence3;
	//the head is 12 bytes

	char SrcTermId[21];
	char DstTermId[21];
	char FeeUser[22];
	char szContent[321];
	char szServiceID[11];
	char ExpireTime[16];
	char ScheduleTime[16];
	DWORD dwResult;
	DWORD dwState;
	BYTE bPK_TOTAL,bPK_NUM;
	int nStation;
	WORD msg_format,bPID,bUDHI;
	int msg_len;
	char sLinkID[21];
	BYTE FeeType;
	DWORD FeeCode;
	BYTE bReason,isReply,bFeeUserType;
};
DWORD GetTime();
void GetTime(char* buffer,int period);
int InitMsg(char* buffer,CMSG* msg);


void PutNByte(char* buffer,BYTE,DWORD);
DWORD GetNByte(char* buffer,BYTE);

void	PutByteString(char* dest,char* source,int length);
long	Jstrcpy(char* dest,const char* source);
long	Jstrncpy(char* dest,const char* source,long size);
int		Jstrchr(const char*,char);  
bool	GetArg(CArg*);
DWORD	SendData(CMSG *msg);
DWORD	WINAPI MTThread(LPVOID);
DWORD	WINAPI Exec(LPVOID pp);
DWORD	WINAPI MOThread(LPVOID pp);
int TranState(char*);
//int TranState(int);
void GetLastday(char* buffer);
void AddBinLog(char*,int,int flag);
GW_API DWORD BeginGW(LPVOID);
#define ISLOGRESP 1
void AddResp(char* filename,BYTE isHour,const char* format,...);
int RecvBuffer(SOCKET S,char* buffer);
int SendBuffer(SOCKET s,char* buffer,int buf_len);
void SendCheck(char*);

#endif

⌨️ 快捷键说明

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