332 lines
8.7 KiB
C
332 lines
8.7 KiB
C
#pragma once
|
||
|
||
//////////////////////////////////////////////////////////////////////////
|
||
#ifdef UNICODE
|
||
#define BUFFER_SIZE 500000
|
||
#define MAXTHREAD_COUNT 8
|
||
#define MAX_LOGINUSER 50 //最大支持同时在线的用户数
|
||
#else
|
||
#define BUFFER_SIZE 300000
|
||
#define MAXTHREAD_COUNT 16
|
||
|
||
#ifdef _DEBUG
|
||
#define MAX_LOGINUSER 30 //最大支持同时在线的用户数
|
||
#else
|
||
#define MAX_LOGINUSER 2000 //最大支持同时在线的用户数
|
||
#endif
|
||
#endif
|
||
|
||
#define MIN_SQLCONNECT 15 //最小同时连接SQL数据库
|
||
#define MAX_SQLCONNECT 150 //最大同时连接SQL数据库
|
||
|
||
#define SQL_TIMEOUT_USE 30*60*1000 //使用状态中的SQL,30分钟超时
|
||
#define SQL_TIMEOUT_DISUSE 15*60*1000 //非使用中的SQL,15分钟超时
|
||
|
||
//////////////////////////////////////////////////////////////////////////
|
||
|
||
//
|
||
//完成端口完成的事件
|
||
//
|
||
typedef enum
|
||
{
|
||
IOCP_COMPLETE_NULL,
|
||
IOCP_COMPLETE_READ,
|
||
IOCP_COMPLETE_ACCEPT_READ,
|
||
IOCP_COMPLETE_WRITE,
|
||
IOCP_COMPLETE_ACCEPT
|
||
}IOCP_COMPLETE_STATE;
|
||
|
||
//
|
||
//自定义枚举数据类型,用来标识套接字IO动作类型
|
||
//
|
||
typedef enum
|
||
{
|
||
IOCP_NULL, //AcceptEx/accept
|
||
IOCP_ACCEPT, //AcceptEx/accept
|
||
IOCP_READ, //WSARecv/recv/ReadFile
|
||
IOCP_WRITE, //WSASend/send/WriteFile
|
||
IOCP_END,
|
||
IOCP_WRITE2, //WSASend/send/WriteFile
|
||
}IOCP_OPERATION, *IOCP_OPERATION_PTR;
|
||
|
||
//
|
||
//自定义结构,即“完成键”(单句柄数据)
|
||
//
|
||
typedef struct
|
||
{
|
||
SOCKET socket;
|
||
long lRandID;
|
||
}IOCP_KEY,*IOCP_KEY_PTR;
|
||
|
||
//
|
||
//标志SOCKET的当前状态
|
||
//
|
||
enum
|
||
{
|
||
SOCKET_STATE_NOT_CONNECT,
|
||
SOCKET_STATE_CONNECT,
|
||
SOCKET_STATE_CONNECT_AND_READ,
|
||
SOCKET_STATE_TIMEOUT
|
||
};
|
||
|
||
|
||
//用于接收的IO
|
||
typedef struct
|
||
{
|
||
WSAOVERLAPPED ol;
|
||
SOCKET socket;
|
||
IOCP_OPERATION operation;
|
||
volatile int state;
|
||
long lRandID; //判断状态用
|
||
WSABUF wsaBuf; //共有5个可用的head用于发送
|
||
}IOCP_IO_SEND,*IOCP_IO_SEND_PTR;
|
||
|
||
//
|
||
//单IO数据,扩展的WSAOVERLAPPED
|
||
//
|
||
typedef struct
|
||
{
|
||
WSAOVERLAPPED ol;
|
||
SOCKET socket;
|
||
IOCP_OPERATION operation;
|
||
volatile int state;
|
||
long lRandID; //判断状态用
|
||
WSABUF wsaBuf;
|
||
long lRecvLen;
|
||
|
||
|
||
//原来用于ProcessSocket的数据
|
||
TCHAR m_szIP[32]; //对方的ip
|
||
UINT m_lPort; //对方的端口
|
||
UINT m_lLocalPort; //本地端口
|
||
SYSTEMTIME m_LoginTime; //登录时间
|
||
TCHAR m_szCorpName[96]; //企业名称
|
||
TCHAR m_szLoginName[32]; //登录名称
|
||
long m_lLoginCount; //登录次数
|
||
UCHAR m_ucUserType; //用户类型
|
||
long m_lCorpID; //企业ID
|
||
long m_lUserID; //用户ID
|
||
long m_lAgentID; //此企业的代理商ID
|
||
long m_lYWYAgent;
|
||
long m_lAgentType; //代理类型
|
||
ULONG m_ulPurviewType; //权限类型
|
||
ULONG m_ulPurview; //权限
|
||
long m_lVer;
|
||
long m_lAccessGroup; //允许操作的通讯录组
|
||
|
||
BOOL m_bCheckup;
|
||
|
||
BOOL m_bCompress; //发送数据时,是否压缩
|
||
DWORD m_dwSendCount; //发送计数,用于控制优先级
|
||
DWORD m_dwLastSend; //最后发送时间,用于区别是否需要重新计数
|
||
long m_lFStep; //敏感字级别
|
||
ULONG m_lID;
|
||
BOOL m_bCmpp; //是否Cmpp协议
|
||
long m_lSDK; //SDK类型
|
||
|
||
DWORD dwAcceptTime; //接收连接的时间
|
||
DWORD dwEndRecvFrame; //最后收到帧的时间
|
||
IOCP_KEY_PTR pKey; //对应的key参数
|
||
// IOCP_IO_SEND IOS;
|
||
|
||
char buf[BUFFER_SIZE];
|
||
}IOCP_IO,*IOCP_IO_PTR;
|
||
|
||
|
||
typedef struct
|
||
{
|
||
BOOL bUse;
|
||
long lRandID;
|
||
CAdoConnection adoConnection;
|
||
DWORD dwBeginUse;
|
||
DWORD dwEndUse;
|
||
long lFuncID;
|
||
long lUserID;
|
||
}IOCP_SQL,*IOCP_SQL_PTR;
|
||
|
||
|
||
|
||
//CMPP 协议参数与结构定义
|
||
|
||
#define CMPP_CONNECT 0x00000001 //请求连接
|
||
#define CMPP_CONNECT_RESP 0x80000001 //请求连接应答
|
||
#define CMPP_TERMINATE 0x00000002 //终止连接
|
||
#define CMPP_TERMINATE_RESP 0x80000002 //终止连接应答
|
||
#define CMPP_SUBMIT 0x00000004 //提交短信
|
||
#define CMPP_SUBMIT_RESP 0x80000004 //提交短信应答
|
||
#define CMPP_DELIVER 0x00000005 //短信下发
|
||
#define CMPP_DELIVER_RESP 0x80000005 //下发短信应答
|
||
#define CMPP_QUERY 0x00000006 //发送短信状态查询
|
||
#define CMPP_QUERY_RESP 0x80000006 //发送短信状态查询应答
|
||
#define CMPP_CANCEL 0x00000007 //删除短信
|
||
#define CMPP_CANCEL_RESP 0x80000007 //删除短信应答
|
||
#define CMPP_ACTIVE_TEST 0x00000008 //激活测试
|
||
#define CMPP_ACTIVE_TEST_RESP 0x80000008 //激活测试应答
|
||
#define CMPP_FWD 0x00000009 //消息前转
|
||
#define CMPP_FWD_RESP 0x80000009 //消息前转应答
|
||
#define CMPP_MT_ROUTE 0x00000010 //MT路由请求
|
||
#define CMPP_MT_ROUTE_RESP 0x80000010 //MT路由请求应答
|
||
#define CMPP_MO_ROUTE 0x00000011 //MO路由请求
|
||
#define CMPP_MO_ROUTE_RESP 0x80000011 //MO路由请求应答
|
||
#define CMPP_GET_ROUTE 0x00000012 //获取路由请求
|
||
#define CMPP_GET_ROUTE_RESP 0x80000012 //获取路由请求应答
|
||
#define CMPP_MT_ROUTE_UPDATE 0x00000013 //MT路由更新
|
||
#define CMPP_MT_ROUTE_UPDATE_RESP 0x80000013 //MT路由更新应答
|
||
#define CMPP_MO_ROUTE_UPDATE 0x00000014 //MO路由更新
|
||
#define CMPP_MO_ROUTE_UPDATE_RESP 0x80000014 //MO路由更新应答
|
||
#define CMPP_PUSH_MT_ROUTE_UPDATE 0x00000015 //MT路由更新
|
||
#define CMPP_PUSH_MT_ROUTE_UPDATE_RESP 0x80000015 //MT路由更新应答
|
||
#define CMPP_PUSH_MO_ROUTE_UPDATE 0x00000016 //MO路由更新
|
||
#define CMPP_PUSH_MO_ROUTE_UPDATE_RESP 0x80000016 //MO路由更新应答
|
||
|
||
#pragma pack( push )
|
||
#pragma pack( 1 )
|
||
|
||
typedef struct _Cmpp_Head
|
||
{
|
||
ULONG Total_Length;
|
||
ULONG Command_Id;
|
||
ULONG Sequence_Id;
|
||
}Cmpp_Head;
|
||
|
||
typedef struct _Cmpp_Connect
|
||
{
|
||
char Source_Addr[6];
|
||
UCHAR AuthenticatorSource[16];
|
||
UCHAR Version;
|
||
ULONG Timestamp;
|
||
}Cmpp_Connect;
|
||
typedef struct _Cmpp_Connect_Resp
|
||
{
|
||
UCHAR Status;
|
||
UCHAR AuthenticatorSource[16];
|
||
UCHAR Version;
|
||
}Cmpp_Connect_Resp;
|
||
|
||
typedef struct _Cmpp_Active_Test_Resp
|
||
{
|
||
UCHAR Reserved;
|
||
}Cmpp_Active_Test_Resp;
|
||
|
||
typedef struct _Cmpp_Terminate_Resp
|
||
{
|
||
}Cmpp_Terminate_Resp;
|
||
|
||
typedef struct _Cmpp_Submit
|
||
{
|
||
LONGLONG Msg_ID;
|
||
UCHAR Pk_total;
|
||
UCHAR Pk_number;
|
||
UCHAR Registered_Delivery;
|
||
UCHAR Msg_level;
|
||
UCHAR Service_Id[10];
|
||
UCHAR Fee_UserType;
|
||
UCHAR Fee_terminal_Id[21];
|
||
UCHAR TP_pId;
|
||
UCHAR TP_udhi;
|
||
UCHAR Msg_Fmt;
|
||
UCHAR Msg_src[6];
|
||
UCHAR FeeType[2];
|
||
UCHAR FeeCode[6];
|
||
UCHAR ValId_Time[17];
|
||
UCHAR At_Time[17];
|
||
UCHAR Src_Id[21];
|
||
UCHAR DestUsr_tl;
|
||
UCHAR Dest_terminal_Id[21];
|
||
UCHAR Msg_Length;
|
||
}Cmpp_Submit;
|
||
typedef struct _Cmpp_Submit_Resp
|
||
{
|
||
LONGLONG Msg_ID;
|
||
UCHAR Result;
|
||
}Cmpp_Submit_Resp;
|
||
typedef struct _Send_List
|
||
{
|
||
ULONG lSendID; //数据库中记录的SendID
|
||
ULONG lSeq; //发送cmpp里的序号
|
||
ULONG lCmppSeq; //使用cmpp转接的源序号
|
||
ULONG lSendTime; //最后一次发送时间
|
||
ULONG lReSendCount; //重复发送了多少次
|
||
UCHAR Msg[512]; //信息内容
|
||
Cmpp_Submit Submit;
|
||
}Send_List;
|
||
typedef struct _SmsReport
|
||
{
|
||
long lSmsReportID;
|
||
CString strMsgID;
|
||
long lReportStatus;
|
||
CString strRecvStatus;
|
||
long lSendFCS;
|
||
CString strMobile;
|
||
}SmsReport;
|
||
|
||
typedef struct _FXSend_MT
|
||
{
|
||
long SendID;
|
||
long CorpID;
|
||
long UserID;
|
||
CString GroupID;
|
||
long Status;
|
||
CString MsgID;
|
||
long SendRet;
|
||
long SendFCS;
|
||
long ReSendCount;
|
||
CString Sender;
|
||
CString SendNum;
|
||
CString Recver;
|
||
CString RecvNum;
|
||
long RecvNumType;
|
||
CString Msg;
|
||
long MsgType;
|
||
COleDateTime SubTime;
|
||
COleDateTime Timer;
|
||
long Priority;
|
||
long StatusReport;
|
||
COleDateTime OvrTime;
|
||
COleDateTime SendTime;
|
||
COleDateTime RecvTime;
|
||
CString RecvStatus;
|
||
long KF;
|
||
CString IP;
|
||
CString SM_ID;
|
||
CString TRANS_CODE;
|
||
CString ORGAN_CODE;
|
||
COleDateTime tAddThisTime;
|
||
}FXSend_MT;
|
||
|
||
//发送返回状态
|
||
typedef struct _Send_Resp
|
||
{
|
||
ULONG lSendID; //数据库中记录的SendID
|
||
ULONG lResult; //返回状态
|
||
ULONG lReSendCount; //重复发送了多少次
|
||
LONGLONG lMsgID; //发送成功时有此返回
|
||
}Send_Resp;
|
||
|
||
typedef struct _Cmpp_Deliver
|
||
{
|
||
LONGLONG Msg_ID;
|
||
UCHAR Dest_Id[21];
|
||
UCHAR Service_Id[10];
|
||
UCHAR TP_pid;
|
||
UCHAR TP_udhi;
|
||
UCHAR Msg_Fmt;
|
||
UCHAR Src_terminal_Id[21];
|
||
UCHAR Registered_Delivery;
|
||
UCHAR Msg_Length;
|
||
}Cmpp_Deliver;
|
||
typedef struct _Cmpp_Status
|
||
{
|
||
LONGLONG Msg_ID;
|
||
UCHAR Stat[7];
|
||
UCHAR Submit_time[10];
|
||
UCHAR Done_time[10];
|
||
UCHAR Dest_terminal_Id[21];
|
||
ULONG SMSC_sequence;
|
||
}Cmpp_Status;
|
||
typedef struct _Cmpp_Deliver_Resp
|
||
{
|
||
LONGLONG Msg_ID;
|
||
UCHAR Result;
|
||
}Cmpp_Deliver_Resp;
|
||
#pragma pack( pop ) |