SmsCenter/IOCP/DataStruct.h
2025-01-03 16:47:25 +08:00

354 lines
9.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
//////////////////////////////////////////////////////////////////////////
#define BUFFER_SIZE 450000
#define MAXTHREAD_COUNT 16
#ifdef _DEBUG
#define MAX_LOGINUSER 20 //最大支持同时在线的用户数
#else
#ifdef _UNICODE
#define MAX_LOGINUSER 1000 //最大支持同时在线的用户数
#else
#define MAX_LOGINUSER 500 //最大支持同时在线的用户数
#endif
#ifdef SMSCENTER_TZY
#undef MAX_LOGINUSER
#define MAX_LOGINUSER 150 //最大支持同时在线的用户数
#endif
#ifdef SMSCENTER_TWO
#undef MAX_LOGINUSER
#define MAX_LOGINUSER 300 //最大支持同时在线的用户数
#endif
#ifdef SMSCENTER_NX
#undef MAX_LOGINUSER
#define MAX_LOGINUSER 200 //最大支持同时在线的用户数
#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;
long lTDMsgType;
SYSTEMTIME tReportTime;
}SmsReport;
typedef struct _SmsReport_Corp
{
long lReportStatus;
long lTDMsgType;
long lSendRet;
long lCorpID;
long lUserID;
long lKF;
TCHAR szRecvStatus[32];
}SmsReport_Corp;
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 )