📄 func.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 + -