From 10933c2572165543b4ee58fa801071118c00b359 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 27 May 2022 14:08:35 +0800 Subject: [PATCH 01/22] delete:unused file --- .gitignore | 32 -------------------------------- 1 file changed, 32 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 259148f..0000000 --- a/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app -- Gitee From 89c3e61b86e80d2d149c462b873d2e2f18ebacad Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 30 May 2022 15:28:06 +0800 Subject: [PATCH 02/22] improved:thread process fixed:mulit print client log of leave --- .../XEngine_ServiceApp/XEngine_Network.cpp | 8 ++--- .../XEngine_ServiceApp/XEngine_SocksTask.cpp | 32 ++++++++++--------- .../XEngine_ServiceApp/XEngine_SocksTask.h | 2 +- .../XEngine_ServiceApp/XEngine_TunnelTask.cpp | 32 ++++++++++--------- .../XEngine_ServiceApp/XEngine_TunnelTask.h | 2 +- XEngine_Source/XEngine_UserProtocol.h | 2 +- 6 files changed, 41 insertions(+), 37 deletions(-) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp index d4af7ca..ed44f4e 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp @@ -83,9 +83,9 @@ void XEngine_Network_Close(LPCTSTR lpszClientAddr, int nIPProto, int nCloseType) memset(&st_ProxyClient, '\0', sizeof(PROXYPROTOCOL_CLIENTINFO)); if (ProxyProtocol_SocksCore_GetInfo(lpszClientAddr, &st_ProxyClient)) { - XClient_TCPSelect_Close(st_ProxyClient.hSocket); + st_ProxyClient.bClose = TRUE; + ProxyProtocol_SocksCore_SetInfo(lpszClientAddr, &st_ProxyClient, sizeof(PROXYPROTOCOL_CLIENTINFO)); } - ProxyProtocol_SocksCore_Delete(lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("SOCKS客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType); } else if (XENGINE_CLIENT_NETTYPE_TUNNEL == nIPProto) @@ -107,9 +107,9 @@ void XEngine_Network_Close(LPCTSTR lpszClientAddr, int nIPProto, int nCloseType) memset(&st_ProxyClient, '\0', sizeof(PROXYPROTOCOL_CLIENTINFO)); if (ProxyProtocol_TunnelCore_GetInfo(lpszClientAddr, &st_ProxyClient)) { - XClient_TCPSelect_Close(st_ProxyClient.hSocket); + st_ProxyClient.bClose = TRUE; + ProxyProtocol_TunnelCore_SetInfo(lpszClientAddr, &st_ProxyClient, sizeof(PROXYPROTOCOL_CLIENTINFO)); } - ProxyProtocol_TunnelCore_Delete(lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Tunnel客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType); } else diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp index 8e349d0..adb79ee 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp @@ -173,7 +173,7 @@ BOOL XEngine_SocksTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int _tcscpy(st_ProxyClient.tszIPAddr, lpszClientAddr); ProxyProtocol_SocksCore_SetInfo(lpszClientAddr, &st_ProxyClient, sizeof(PROXYPROTOCOL_CLIENTINFO)); //创建转发线程 - std::thread pSTDThread(XEngine_SocksTask_Thread, lpszClientAddr); + std::thread pSTDThread(XEngine_SocksTask_Thread, lpszClientAddr, st_ProxyClient.hSocket); pSTDThread.detach(); //回复结果 ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, XENGINE_RFCCOMPONENT_PROXY_SOCKS_RESPONSE_SUCCESS); @@ -196,29 +196,31 @@ BOOL XEngine_SocksTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int } return TRUE; } -XHTHREAD CALLBACK XEngine_SocksTask_Thread(LPCTSTR lpszClientAddr) +XHTHREAD CALLBACK XEngine_SocksTask_Thread(LPCTSTR lpszClientAddr, SOCKET hSocket) { - TCHAR tszClientAddr[128]; - PROXYPROTOCOL_CLIENTINFO st_ProxyClient; - - memset(tszClientAddr, '\0', sizeof(tszClientAddr)); - _tcscpy(tszClientAddr, lpszClientAddr); + TCHAR tszMsgBuffer[4096]; while (1) { int nMsgLen = 4096; - TCHAR tszMsgBuffer[4096]; - - memset(&st_ProxyClient, '\0', sizeof(PROXYPROTOCOL_CLIENTINFO)); - if (!ProxyProtocol_SocksCore_GetInfo(tszClientAddr, &st_ProxyClient)) + if (!XClient_TCPSelect_RecvMsg(hSocket, tszMsgBuffer, &nMsgLen, FALSE)) { break; } - if (!XClient_TCPSelect_RecvMsg(st_ProxyClient.hSocket, tszMsgBuffer, &nMsgLen, FALSE)) + XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen, XENGINE_CLIENT_NETTYPE_SOCKS); + } + //退出处理 + PROXYPROTOCOL_CLIENTINFO st_ProxyClient; + memset(&st_ProxyClient, '\0', sizeof(PROXYPROTOCOL_CLIENTINFO)); + if (ProxyProtocol_SocksCore_GetInfo(lpszClientAddr, &st_ProxyClient)) + { + ProxyProtocol_SocksCore_Delete(lpszClientAddr); + //是主动关闭的还是被动触发的 + if (!st_ProxyClient.bClose) { - break; + //主动关闭,需要调用 + XClient_TCPSelect_Close(st_ProxyClient.hSocket); + XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_SOCKS, XENGINE_CLIENT_CLOSE_SERVICE); } - XEngine_Network_Send(st_ProxyClient.tszIPAddr, tszMsgBuffer, nMsgLen, XENGINE_CLIENT_NETTYPE_SOCKS); } - XEngine_Network_Close(tszClientAddr, XENGINE_CLIENT_NETTYPE_SOCKS, XENGINE_CLIENT_CLOSE_SERVICE); return 0; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.h b/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.h index d4ace21..089b403 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.h @@ -12,4 +12,4 @@ *********************************************************************/ //任务处理相关函数,处理包的内容 BOOL XEngine_SocksTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen); -XHTHREAD CALLBACK XEngine_SocksTask_Thread(LPCTSTR lpszClientAddr); \ No newline at end of file +XHTHREAD CALLBACK XEngine_SocksTask_Thread(LPCTSTR lpszClientAddr, SOCKET hSocket); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp index ee948a8..effb198 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp @@ -107,7 +107,7 @@ BOOL XEngine_TunnelTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in _tcscpy(st_ProxyClient.tszIPAddr, lpszClientAddr); ProxyProtocol_TunnelCore_SetInfo(lpszClientAddr, &st_ProxyClient, sizeof(PROXYPROTOCOL_CLIENTINFO)); //启动线程 - std::thread pSTDThread(XEngine_TunnelTask_Thread, lpszClientAddr); + std::thread pSTDThread(XEngine_TunnelTask_Thread, lpszClientAddr, st_ProxyClient.hSocket); pSTDThread.detach(); //判断是代理还是非代理协议 if (bProxy) @@ -129,29 +129,31 @@ BOOL XEngine_TunnelTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in } return TRUE; } -XHTHREAD CALLBACK XEngine_TunnelTask_Thread(LPCTSTR lpszClientAddr) +XHTHREAD CALLBACK XEngine_TunnelTask_Thread(LPCTSTR lpszClientAddr, SOCKET hSocket) { - TCHAR tszClientAddr[128]; - PROXYPROTOCOL_CLIENTINFO st_ProxyClient; - - memset(tszClientAddr, '\0', sizeof(tszClientAddr)); - _tcscpy(tszClientAddr, lpszClientAddr); + TCHAR tszMsgBuffer[4096]; while (1) { int nMsgLen = 4096; - TCHAR tszMsgBuffer[4096]; - - memset(&st_ProxyClient, '\0', sizeof(PROXYPROTOCOL_CLIENTINFO)); - if (!ProxyProtocol_TunnelCore_GetInfo(tszClientAddr, &st_ProxyClient)) + if (!XClient_TCPSelect_RecvMsg(hSocket, tszMsgBuffer, &nMsgLen, FALSE)) { break; } - if (!XClient_TCPSelect_RecvMsg(st_ProxyClient.hSocket, tszMsgBuffer, &nMsgLen, FALSE)) + XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen, XENGINE_CLIENT_NETTYPE_TUNNEL); + } + //退出处理 + PROXYPROTOCOL_CLIENTINFO st_ProxyClient; + memset(&st_ProxyClient, '\0', sizeof(PROXYPROTOCOL_CLIENTINFO)); + if (ProxyProtocol_TunnelCore_GetInfo(lpszClientAddr, &st_ProxyClient)) + { + ProxyProtocol_TunnelCore_Delete(lpszClientAddr); + //是主动关闭的还是被动触发的 + if (!st_ProxyClient.bClose) { - break; + //主动关闭,需要调用 + XClient_TCPSelect_Close(hSocket); + XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_TUNNEL, XENGINE_CLIENT_CLOSE_SERVICE); } - XEngine_Network_Send(st_ProxyClient.tszIPAddr, tszMsgBuffer, nMsgLen, XENGINE_CLIENT_NETTYPE_TUNNEL); } - XEngine_Network_Close(tszClientAddr, XENGINE_CLIENT_NETTYPE_TUNNEL, XENGINE_CLIENT_CLOSE_SERVICE); return 0; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.h b/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.h index ccec4d5..e143428 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.h @@ -12,4 +12,4 @@ *********************************************************************/ //任务处理相关函数,处理包的内容 BOOL XEngine_TunnelTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen); -XHTHREAD CALLBACK XEngine_TunnelTask_Thread(LPCTSTR lpszClientAddr); \ No newline at end of file +XHTHREAD CALLBACK XEngine_TunnelTask_Thread(LPCTSTR lpszClientAddr, SOCKET hSocket); \ No newline at end of file diff --git a/XEngine_Source/XEngine_UserProtocol.h b/XEngine_Source/XEngine_UserProtocol.h index cfb4626..8b07c94 100644 --- a/XEngine_Source/XEngine_UserProtocol.h +++ b/XEngine_Source/XEngine_UserProtocol.h @@ -20,6 +20,6 @@ typedef struct TCHAR tszIPAddr[128]; ENUM_RFCCOMPONENTS_PROXY_STATUS enStatus; SOCKET hSocket; - BOOL bConnect; + BOOL bClose; }PROXYPROTOCOL_CLIENTINFO; #pragma pack(pop) \ No newline at end of file -- Gitee From f5b2438abed8e84d538a5a88378597559f9db9bd Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 7 Jun 2022 15:22:21 +0800 Subject: [PATCH 03/22] added:configure of forward field --- .../XEngine_ModuleConfigure/ModuleConfig_Define.h | 2 ++ .../ModuleConfigure_Json/ModuleConfigure_Json.cpp | 4 +++- .../XEngine_ServiceApp/XEngine_ServiceApp.vcxproj | 2 ++ .../XEngine_ServiceApp/XEngine_ServiceApp.vcxproj.filters | 6 ++++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h index 50750c4..2862689 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h @@ -19,6 +19,7 @@ typedef struct tag_XEngine_ServiceConfig BOOL bDeamon; //是否以守护进程启动,LINUX有效 int nSocksPort; //Socks端口,<=0不启用 int nTunnelPort; //Tunnel服务端口 + int nForwardPort; //数据转发端口 struct { int nMaxClient; //最大客户端个数 @@ -30,6 +31,7 @@ typedef struct tag_XEngine_ServiceConfig int nTimeCheck; //检测次数 int nSocksTimeOut; //TCP超时时间 int nTunnelTimeOut; //HTTP超时时间 + int nForwardTimeOut; //转发超时时间 }st_XTime; //次数*时间=超时 struct { diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index d3c10db..19d19c4 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -85,6 +85,7 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XE pSt_ServerConfig->bDeamon = st_JsonRoot["bDeamon"].asInt(); pSt_ServerConfig->nSocksPort = st_JsonRoot["nSocksPort"].asInt(); pSt_ServerConfig->nTunnelPort = st_JsonRoot["nTunnelPort"].asInt(); + pSt_ServerConfig->nForwardPort = st_JsonRoot["nForwardPort"].asInt(); if (st_JsonRoot["XMax"].empty() || (3 != st_JsonRoot["XMax"].size())) { @@ -97,7 +98,7 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XE pSt_ServerConfig->st_XMax.nMaxQueue = st_JsonXMax["nMaxQueue"].asInt(); pSt_ServerConfig->st_XMax.nIOThread = st_JsonXMax["nIOThread"].asInt(); - if (st_JsonRoot["XTime"].empty() || (3 != st_JsonRoot["XTime"].size())) + if (st_JsonRoot["XTime"].empty() || (4 != st_JsonRoot["XTime"].size())) { Config_IsErrorOccur = TRUE; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XTIME; @@ -107,6 +108,7 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XE pSt_ServerConfig->st_XTime.nTimeCheck = st_JsonXTime["nTimeCheck"].asInt(); pSt_ServerConfig->st_XTime.nSocksTimeOut = st_JsonXTime["nSocksTimeOut"].asInt(); pSt_ServerConfig->st_XTime.nTunnelTimeOut = st_JsonXTime["nTunnelTimeOut"].asInt(); + pSt_ServerConfig->st_XTime.nForwardTimeOut = st_JsonXTime["nForwardTimeOut"].asInt(); if (st_JsonRoot["XLog"].empty() || (4 != st_JsonRoot["XLog"].size())) { diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj index 2ef6fdd..59ecb7b 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj @@ -153,6 +153,7 @@ + @@ -160,6 +161,7 @@ + diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj.filters b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj.filters index 447abc3..24c71c0 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj.filters +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj.filters @@ -30,6 +30,9 @@ 源文件 + + 源文件 + @@ -47,5 +50,8 @@ 头文件 + + 头文件 + \ No newline at end of file -- Gitee From b58f1491163ebf3ee4d355ea3fe73e60cd7baf4a Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 8 Jun 2022 09:15:57 +0800 Subject: [PATCH 04/22] added:thread number of the forward for configure --- XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h | 1 + .../ModuleConfigure_Json/ModuleConfigure_Json.cpp | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h index 2862689..0707ded 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h @@ -25,6 +25,7 @@ typedef struct tag_XEngine_ServiceConfig int nMaxClient; //最大客户端个数 int nMaxQueue; //最大队列个数 int nIOThread; //网络IO线程数 + int nForwardThread; //转发服务 }st_XMax; struct { diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index 19d19c4..676a8bc 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -87,7 +87,7 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XE pSt_ServerConfig->nTunnelPort = st_JsonRoot["nTunnelPort"].asInt(); pSt_ServerConfig->nForwardPort = st_JsonRoot["nForwardPort"].asInt(); - if (st_JsonRoot["XMax"].empty() || (3 != st_JsonRoot["XMax"].size())) + if (st_JsonRoot["XMax"].empty() || (4 != st_JsonRoot["XMax"].size())) { Config_IsErrorOccur = TRUE; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XMAX; @@ -97,6 +97,7 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XE pSt_ServerConfig->st_XMax.nMaxClient = st_JsonXMax["nMaxClient"].asInt(); pSt_ServerConfig->st_XMax.nMaxQueue = st_JsonXMax["nMaxQueue"].asInt(); pSt_ServerConfig->st_XMax.nIOThread = st_JsonXMax["nIOThread"].asInt(); + pSt_ServerConfig->st_XMax.nForwardThread = st_JsonXMax["nForwardThread"].asInt(); if (st_JsonRoot["XTime"].empty() || (4 != st_JsonRoot["XTime"].size())) { -- Gitee From c8b8ff8354df0e67090c731a8e7cecff60536260 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 8 Jun 2022 09:18:46 +0800 Subject: [PATCH 05/22] added:forward process code of the framework --- .../XEngine_ServiceApp/XEngine_Forward.cpp | 55 ++++++++++++++ .../XEngine_ServiceApp/XEngine_Forward.h | 15 ++++ .../XEngine_ServiceApp/XEngine_Hdr.h | 13 ++++ .../XEngine_ServiceApp/XEngine_Network.cpp | 46 ++++++++++++ .../XEngine_ServiceApp/XEngine_Network.h | 5 ++ .../XEngine_ServiceApp/XEngine_ServiceApp.cpp | 71 +++++++++++++++++++ 6 files changed, 205 insertions(+) create mode 100644 XEngine_Source/XEngine_ServiceApp/XEngine_Forward.cpp create mode 100644 XEngine_Source/XEngine_ServiceApp/XEngine_Forward.h diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Forward.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_Forward.cpp new file mode 100644 index 0000000..a85fd88 --- /dev/null +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Forward.cpp @@ -0,0 +1,55 @@ +#include "XEngine_Hdr.h" +/******************************************************************** +// Created: 2022/06/07 15:18:21 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp\XEngine_Forward.cpp +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp +// File Base: XEngine_Forward +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 代理转发协议 +// History: +*********************************************************************/ +XHTHREAD CALLBACK XEngine_Forward_Thread(LPVOID lParam) +{ + int nPoolIndex = *(int*)lParam; + int nThreadPos = nPoolIndex + 1; + + while (bIsRun) + { + if (!HelpComponents_Datas_WaitEventEx(xhForwardPacket, nThreadPos)) + { + continue; + } + int nListCount = 0; + HELPCOMPONENT_PACKET_CLIENT** ppSt_ListClient; + HelpComponents_Datas_GetPoolEx(xhForwardPacket, nThreadPos, &ppSt_ListClient, &nListCount); + for (int i = 0; i < nListCount; i++) + { + int nMsgLen = 0; + CHAR* ptszMsgBuffer = NULL; + XENGINE_PROTOCOLHDR st_ProtocolHdr; + memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR)); + + if (HelpComponents_Datas_GetMemoryEx(xhForwardPacket, ppSt_ListClient[i]->tszClientAddr, &ptszMsgBuffer, &nMsgLen, &st_ProtocolHdr)) + { + XEngine_Forward_Handle(ppSt_ListClient[i]->tszClientAddr, ptszMsgBuffer, nMsgLen, &st_ProtocolHdr); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + } + } + BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ListClient, nListCount); + } + return 0; +} + +BOOL XEngine_Forward_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr) +{ + //判断协议头和尾部 + if ((XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER != pSt_ProtocolHdr->wHeader) || (XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL != pSt_ProtocolHdr->wTail) || (ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_AUTH != pSt_ProtocolHdr->unOperatorType)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,协议错误"), lpszClientAddr); + return FALSE; + } + + return TRUE; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Forward.h b/XEngine_Source/XEngine_ServiceApp/XEngine_Forward.h new file mode 100644 index 0000000..943aa6f --- /dev/null +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Forward.h @@ -0,0 +1,15 @@ +#pragma once +/******************************************************************** +// Created: 2022/06/07 15:18:05 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp\XEngine_Forward.h +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp +// File Base: XEngine_Forward +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 代理转发协议 +// History: +*********************************************************************/ +//任务处理相关函数,处理包的内容 +XHTHREAD CALLBACK XEngine_Forward_Thread(LPVOID lParam); +BOOL XEngine_Forward_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h b/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h index 8cd2696..ccdfbec 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h @@ -28,6 +28,8 @@ using namespace std; #include #include #include +#include +#include #include #include #include @@ -36,6 +38,8 @@ using namespace std; #include #include #include +#include +#include #include #include #include @@ -51,6 +55,7 @@ using namespace std; #include "XEngine_Network.h" #include "XEngine_SocksTask.h" #include "XEngine_TunnelTask.h" +#include "XEngine_Forward.h" /******************************************************************** // Created: 2021/12/02 16:34:41 // File Name: D:\XEngine_ServiceApp\XEngine_Source\XEngine_ServiceApp\XEngine_Hdr.h @@ -70,12 +75,18 @@ extern XNETHANDLE xhSocksHeart; //Tunnel服务器 extern XNETHANDLE xhTunnelSocket; extern XNETHANDLE xhTunnelHeart; +//Forward服务器 +extern XNETHANDLE xhForwardSocket; +extern XNETHANDLE xhForwardHeart; +extern XNETHANDLE xhForwardPool; +extern XHANDLE xhForwardPacket; //配置文件 extern XENGINE_SERVICECONFIG st_ServiceConfig; //网络类型定义 #define XENGINE_CLIENT_NETTYPE_SOCKS 1 #define XENGINE_CLIENT_NETTYPE_TUNNEL 2 +#define XENGINE_CLIENT_NETTYPE_FORWARD 3 //关闭模式 #define XENGINE_CLIENT_CLOSE_NETWORK 1 #define XENGINE_CLIENT_CLOSE_HEARTBEAT 2 @@ -97,10 +108,12 @@ extern XENGINE_SERVICECONFIG st_ServiceConfig; #endif #pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib.lib") #pragma comment(lib,"XEngine_Core/XEngine_Core.lib") +#pragma comment(lib,"XEngine_Core/XEngine_ManagePool.lib") #pragma comment(lib,"XEngine_Core/XEngine_OPenSsl.lib") #pragma comment(lib,"XEngine_Core/XEngine_NetXApi.lib") #pragma comment(lib,"XEngine_NetHelp/NetHelp_APIHelp.lib") #pragma comment(lib,"XEngine_HelpComponents/HelpComponents_XLog.lib") +#pragma comment(lib,"XEngine_HelpComponents/HelpComponents_Packets.lib") #pragma comment(lib,"XEngine_RfcComponents/RfcComponents_ProxyProtocol.lib") #pragma comment(lib,"XEngine_Client/XClient_Socket.lib") #pragma comment(lib,"Ws2_32.lib") diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp index ed44f4e..5d6e37e 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp @@ -58,6 +58,26 @@ void __stdcall Network_Callback_TunnelHeart(LPCTSTR lpszClientAddr, SOCKET hSock { XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_TUNNEL, XENGINE_CLIENT_CLOSE_HEARTBEAT); } +//////////////////////////////////////////////////////////////////////////下面是Tunnel网络IO相关代码处理函数 +BOOL __stdcall Network_Callback_ForwardLogin(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam) +{ + SocketOpt_HeartBeat_InsertAddrEx(xhForwardHeart, lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,连接到服务器"), lpszClientAddr); + return TRUE; +} +void __stdcall Network_Callback_ForwardRecv(LPCTSTR lpszClientAddr, SOCKET hSocket, LPCTSTR lpszRecvMsg, int nMsgLen, LPVOID lParam) +{ + SocketOpt_HeartBeat_ActiveAddrEx(xhForwardHeart, lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _T("Forward客户端:%s,投递数据包到组包队列成功,大小:%d"), lpszClientAddr, nMsgLen); +} +void __stdcall Network_Callback_ForwardLeave(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam) +{ + XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_FORWARD, XENGINE_CLIENT_CLOSE_NETWORK); +} +void __stdcall Network_Callback_ForwardHeart(LPCTSTR lpszClientAddr, SOCKET hSocket, int nStatus, LPVOID lParam) +{ + XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_FORWARD, XENGINE_CLIENT_CLOSE_HEARTBEAT); +} //////////////////////////////////////////////////////////////////////////网络IO关闭操作 void XEngine_Network_Close(LPCTSTR lpszClientAddr, int nIPProto, int nCloseType) { @@ -112,6 +132,23 @@ void XEngine_Network_Close(LPCTSTR lpszClientAddr, int nIPProto, int nCloseType) } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Tunnel客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType); } + else if (XENGINE_CLIENT_NETTYPE_FORWARD == nIPProto) + { + if (XENGINE_CLIENT_CLOSE_NETWORK == nCloseType) + { + SocketOpt_HeartBeat_DeleteAddrEx(xhForwardHeart, lpszClientAddr); + } + else if (XENGINE_CLIENT_CLOSE_HEARTBEAT == nCloseType) + { + NetCore_TCPXCore_CloseForClientEx(xhForwardSocket, lpszClientAddr); + } + else + { + SocketOpt_HeartBeat_DeleteAddrEx(xhForwardHeart, lpszClientAddr); + NetCore_TCPXCore_CloseForClientEx(xhForwardSocket, lpszClientAddr); + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType); + } else { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("未知客户端:%s,离开服务器"), lpszClientAddr); @@ -141,6 +178,15 @@ BOOL XEngine_Network_Send(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMs } SocketOpt_HeartBeat_ActiveAddrEx(xhTunnelHeart, lpszClientAddr); } + else if (XENGINE_CLIENT_NETTYPE_FORWARD == nIPProto) + { + if (!NetCore_TCPXCore_SendEx(xhForwardSocket, lpszClientAddr, lpszMsgBuffer, nMsgLen, 1, 1)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Forward客户端:%s,发送数据失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); + return FALSE; + } + SocketOpt_HeartBeat_ActiveAddrEx(xhForwardHeart, lpszClientAddr); + } else { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("未知客户端:%s,发送数据给失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.h b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.h index a433e44..c56839e 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.h @@ -20,6 +20,11 @@ BOOL __stdcall Network_Callback_TunnelLogin(LPCTSTR lpszClientAddr, SOCKET hSock void __stdcall Network_Callback_TunnelRecv(LPCTSTR lpszClientAddr, SOCKET hSocket, LPCTSTR lpszRecvMsg, int nMsgLen, LPVOID lParam); void __stdcall Network_Callback_TunnelLeave(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam); void __stdcall Network_Callback_TunnelHeart(LPCTSTR lpszClientAddr, SOCKET hSocket, int nStatus, LPVOID lParam); +//Forward相关 +BOOL __stdcall Network_Callback_ForwardLogin(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam); +void __stdcall Network_Callback_ForwardRecv(LPCTSTR lpszClientAddr, SOCKET hSocket, LPCTSTR lpszRecvMsg, int nMsgLen, LPVOID lParam); +void __stdcall Network_Callback_ForwardLeave(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam); +void __stdcall Network_Callback_ForwardHeart(LPCTSTR lpszClientAddr, SOCKET hSocket, int nStatus, LPVOID lParam); //关闭与发送 void XEngine_Network_Close(LPCTSTR lpszClientAddr, int nIPProto, int nCloseType); BOOL XEngine_Network_Send(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen, int nIPProto); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp index e3b225d..a7671b5 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp @@ -8,6 +8,11 @@ XNETHANDLE xhSocksHeart = 0; XNETHANDLE xhTunnelSocket = 0; XNETHANDLE xhTunnelHeart = 0; + +XNETHANDLE xhForwardSocket = 0; +XNETHANDLE xhForwardHeart = 0; +XNETHANDLE xhForwardPool = 0; +XHANDLE xhForwardPacket = NULL; //配置文件 XENGINE_SERVICECONFIG st_ServiceConfig; @@ -23,6 +28,11 @@ void ServiceApp_Stop(int signo) //销毁Tunnel资源 NetCore_TCPXCore_DestroyEx(xhTunnelSocket); SocketOpt_HeartBeat_DestoryEx(xhTunnelHeart); + //销毁Forward资源 + HelpComponents_Packets_Destory(xhForwardPacket); + NetCore_TCPXCore_DestroyEx(xhForwardSocket); + SocketOpt_HeartBeat_DestoryEx(xhForwardHeart); + ManagePool_Thread_NQDestroy(xhForwardPool); //销毁日志资源 HelpComponents_XLog_Destroy(xhLog); ModuleAuthorize_User_Destory(); @@ -184,6 +194,62 @@ int main(int argc, char** argv) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("启动服务中,Tunnel消息服务没有被启用")); } + //启动转发协议服务 + if (st_ServiceConfig.nForwardPort > 0) + { + //组包器 + xhForwardPacket = HelpComponents_Datas_Init(st_ServiceConfig.st_XMax.nMaxQueue, st_ServiceConfig.st_XMax.nForwardThread); + if (NULL == xhForwardPacket) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("初始化Forward组包器失败,错误:%lX"), Packets_GetLastError()); + goto XENGINE_SERVICEAPP_EXIT; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,启动Forward组包器成功")); + //启动心跳 + if (st_ServiceConfig.st_XTime.nForwardTimeOut > 0) + { + if (!SocketOpt_HeartBeat_InitEx(&xhForwardHeart, st_ServiceConfig.st_XTime.nForwardTimeOut, st_ServiceConfig.st_XTime.nTimeCheck, Network_Callback_ForwardHeart)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,初始化Forward心跳服务失败,错误:%lX"), NetCore_GetLastError()); + goto XENGINE_SERVICEAPP_EXIT; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,初始化Forward心跳服务成功,句柄:%llu,时间:%d,次数:%d"), xhForwardHeart, st_ServiceConfig.st_XTime.nForwardTimeOut, st_ServiceConfig.st_XTime.nTimeCheck); + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("启动服务中,Forward心跳服务被设置为不启用")); + } + //网络 + if (!NetCore_TCPXCore_StartEx(&xhForwardSocket, st_ServiceConfig.nForwardPort, st_ServiceConfig.st_XMax.nMaxClient, st_ServiceConfig.st_XMax.nIOThread)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,启动Forward网络服务器失败,错误:%lX"), NetCore_GetLastError()); + goto XENGINE_SERVICEAPP_EXIT; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,启动Forward网络服务器成功,Forward端口:%d,IO:%d"), st_ServiceConfig.nForwardPort, st_ServiceConfig.st_XMax.nIOThread); + NetCore_TCPXCore_RegisterCallBackEx(xhForwardSocket, Network_Callback_ForwardLogin, Network_Callback_ForwardRecv, Network_Callback_ForwardLeave); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,注册Forward网络事件成功")); + //任务池 + THREADPOOL_PARAMENT** ppSt_ListParam; + BaseLib_OperatorMemory_Malloc((XPPPMEM)&ppSt_ListParam, st_ServiceConfig.st_XMax.nForwardThread, sizeof(THREADPOOL_PARAMENT)); + for (int i = 0; i < st_ServiceConfig.st_XMax.nForwardThread; i++) + { + int* pInt_Pos = new int; + + *pInt_Pos = i; + ppSt_ListParam[i]->lParam = pInt_Pos; + ppSt_ListParam[i]->fpCall_ThreadsTask = XEngine_Forward_Thread; + } + if (!ManagePool_Thread_NQCreate(&xhForwardPool, &ppSt_ListParam, st_ServiceConfig.st_XMax.nForwardThread)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动Forward线程池服务失败,错误:%lX"), ManagePool_GetLastError()); + goto XENGINE_SERVICEAPP_EXIT; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,启动Forward线程池服务成功,启动个数:%d"), st_ServiceConfig.st_XMax.nForwardThread); + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("启动服务中,Forward服务没有被启用")); + } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("所有服务成功启动,服务运行中,XEngine版本:%s,服务版本;%s,发行次数:%d。。。"), XENGINE_VERSION_STR, st_ServiceConfig.st_XVer.pStl_ListVer->front().c_str(), st_ServiceConfig.st_XVer.pStl_ListVer->size()); while (bIsRun) @@ -201,6 +267,11 @@ XENGINE_SERVICEAPP_EXIT: //销毁Tunnel资源 NetCore_TCPXCore_DestroyEx(xhTunnelSocket); SocketOpt_HeartBeat_DestoryEx(xhTunnelHeart); + //销毁Forward资源 + HelpComponents_Packets_Destory(xhForwardPacket); + NetCore_TCPXCore_DestroyEx(xhForwardSocket); + SocketOpt_HeartBeat_DestoryEx(xhForwardHeart); + ManagePool_Thread_NQDestroy(xhForwardPool); //销毁日志资源 HelpComponents_XLog_Destroy(xhLog); ModuleAuthorize_User_Destory(); -- Gitee From d6d15b26b5e68eac93c08f79e6c53ae286a2ee5a Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 8 Jun 2022 09:21:30 +0800 Subject: [PATCH 06/22] fixed:the problem that the copy file is imcomplete --- XEngine_Source/VSCopy-Debug.bat | 1 + XEngine_Source/VSCopy-x64.bat | 1 + XEngine_Source/VSCopy-x86.bat | 2 ++ 3 files changed, 4 insertions(+) diff --git a/XEngine_Source/VSCopy-Debug.bat b/XEngine_Source/VSCopy-Debug.bat index 9187c7c..7fc034a 100644 --- a/XEngine_Source/VSCopy-Debug.bat +++ b/XEngine_Source/VSCopy-Debug.bat @@ -9,6 +9,7 @@ copy /y "D:\XEngine\XEngine_SourceCode\Debug\NetHelp_APIHelp.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\XClient_Socket.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\HelpComponents_XLog.dll" "./" +copy /y "D:\XEngine\XEngine_SourceCode\Debug\HelpComponents_Packets.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\RfcComponents_ProxyProtocol.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_ProcFile.dll" "./" diff --git a/XEngine_Source/VSCopy-x64.bat b/XEngine_Source/VSCopy-x64.bat index 8f3c7d7..b3d43b5 100644 --- a/XEngine_Source/VSCopy-x64.bat +++ b/XEngine_Source/VSCopy-x64.bat @@ -9,6 +9,7 @@ copy /y "%XEngine_Lib64%\x64\XEngine_NetHelp\NetHelp_APIHelp.dll" "./" copy /y "%XEngine_Lib64%\x64\XEngine_Client\XClient_Socket.dll" "./" copy /y "%XEngine_Lib64%\x64\XEngine_HelpComponents\HelpComponents_XLog.dll" "./" +copy /y "%XEngine_Lib64%\x64\XEngine_HelpComponents\HelpComponents_Packets.dll" "./" copy /y "%XEngine_Lib64%\x64\XEngine_RfcComponents\RfcComponents_ProxyProtocol.dll" "./" copy /y "%XEngine_Lib64%\x64\XEngine_SystemSdk\XEngine_ProcFile.dll" "./" diff --git a/XEngine_Source/VSCopy-x86.bat b/XEngine_Source/VSCopy-x86.bat index 9406209..c273055 100644 --- a/XEngine_Source/VSCopy-x86.bat +++ b/XEngine_Source/VSCopy-x86.bat @@ -9,6 +9,7 @@ copy /y "%XEngine_Lib32%\XEngine_NetHelp\NetHelp_APIHelp.dll" "./" copy /y "%XEngine_Lib32%\XEngine_Client\XClient_Socket.dll" "./" copy /y "%XEngine_Lib32%\XEngine_HelpComponents\HelpComponents_XLog.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_HelpComponents\HelpComponents_Packets.dll" "./" copy /y "%XEngine_Lib32%\XEngine_RfcComponents\RfcComponents_ProxyProtocol.dll" "./" copy /y "%XEngine_Lib32%\XEngine_SystemSdk\XEngine_ProcFile.dll" "./" @@ -20,4 +21,5 @@ copy /y "%XEngine_Lib32%\XEngine_SystemSdk\XEngine_SystemApi.dll" "./" copy /y "%XEngine_Lib32%\XEngine_LibEx\libcrypto-3.dll" "./" copy /y "%XEngine_Lib32%\XEngine_LibEx\libssl-3.dll" "./" copy /y "%XEngine_Lib32%\XEngine_LibEx\libcurl.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_LibEx\nghttp2.dll" "./" copy /y "%XEngine_Lib32%\XEngine_HelpComponents\zlib1.dll" "./" \ No newline at end of file -- Gitee From 851bb9c456741d2a3cdb466e3df3b05be4c3c3d0 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 8 Jun 2022 11:07:59 +0800 Subject: [PATCH 07/22] modify:error code for auth --- .../XEngine_ModuleAuthorize/ModuleAuth_Error.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuth_Error.h b/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuth_Error.h index ae40127..1b1353d 100644 --- a/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuth_Error.h +++ b/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuth_Error.h @@ -1,6 +1,6 @@ #pragma once /******************************************************************** -// Created: 2021/12/29 10:29:54 +// Created: 2022/06/08 10:04:25 // File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleAuthorize\ModuleAuth_Error.h // File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleAuthorize // File Base: ModuleAuth_Error @@ -10,7 +10,7 @@ // Purpose: 导出错误 // History: *********************************************************************/ -#define ERROR_MODULE_AUTHORIZE_USER_PARAMENT 0xA0001 //参数错误 -#define ERROR_MODULE_AUTHORIZE_USER_OPENFILE 0xA0002 //打开文件失败 -#define ERROR_MODULE_AUTHORIZE_USER_NOTFOUND 0xA0003 //没有找到 -#define ERROR_MODULE_AUTHORIZE_USER_PASSWORD 0xA0004 //密码错误 \ No newline at end of file +#define ERROR_MODULE_AUTHORIZE_USER_PARAMENT 0xB0001 //参数错误 +#define ERROR_MODULE_AUTHORIZE_USER_OPENFILE 0xB0002 //打开文件失败 +#define ERROR_MODULE_AUTHORIZE_USER_NOTFOUND 0xB0003 //没有找到 +#define ERROR_MODULE_AUTHORIZE_USER_PASSWORD 0xB0004 //密码错误 \ No newline at end of file -- Gitee From 1f0b7dbc9989ec6c602b57b09b63a9f93315f4b3 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 9 Jun 2022 09:51:16 +0800 Subject: [PATCH 08/22] added:session module --- XEngine_Source/XEngine_ModuleSession/Makefile | 45 +++ .../ModuleSession_Define.h | 114 ++++++++ .../ModuleSession_Error.h | 16 + .../ModuleSession_Forward.cpp | 276 ++++++++++++++++++ .../ModuleSession_Forward.h | 35 +++ .../XEngine_ModuleSession.def | 10 + .../XEngine_ModuleSession.vcxproj | 172 +++++++++++ .../XEngine_ModuleSession.vcxproj.filters | 56 ++++ .../XEngine_ModuleSession.vcxproj.user | 4 + .../XEngine_ModuleSession/dllmain.cpp | 19 ++ .../XEngine_ModuleSession/framework.h | 5 + XEngine_Source/XEngine_ModuleSession/pch.cpp | 51 ++++ XEngine_Source/XEngine_ModuleSession/pch.h | 49 ++++ 13 files changed, 852 insertions(+) create mode 100644 XEngine_Source/XEngine_ModuleSession/Makefile create mode 100644 XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h create mode 100644 XEngine_Source/XEngine_ModuleSession/ModuleSession_Error.h create mode 100644 XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp create mode 100644 XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.h create mode 100644 XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.def create mode 100644 XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj create mode 100644 XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj.filters create mode 100644 XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj.user create mode 100644 XEngine_Source/XEngine_ModuleSession/dllmain.cpp create mode 100644 XEngine_Source/XEngine_ModuleSession/framework.h create mode 100644 XEngine_Source/XEngine_ModuleSession/pch.cpp create mode 100644 XEngine_Source/XEngine_ModuleSession/pch.h diff --git a/XEngine_Source/XEngine_ModuleSession/Makefile b/XEngine_Source/XEngine_ModuleSession/Makefile new file mode 100644 index 0000000..9b91388 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleSession/Makefile @@ -0,0 +1,45 @@ +CC = g++ -Wall -std=c++17 -fPIC +RELEASE = 0 +UNICODE = 0 +INCLUDE = -I ./ +LOADBIN = +LIB = +LIBEX = -ldl -lpthread +LOADSO = -Wl,-rpath= +LIBINCLUDE = ModuleSession_Forward.o pch.o + +ifeq ($(RELEASE),1) +FLAGS = -c -O2 +DEBUG = +else +FLAGS = -c -lc_p +DEBUG = -g -pg +endif + +ifeq ($(UNICODE),1) +UNICODE = -D _UNICODE +else +UNICODE = +endif + + +all:$(LIBINCLUDE) + $(CC) $(DEBUG) $(LIBINCLUDE) -o libXEngine_ModuleSession.so -shared -fPIC $(LOADBIN) $(LIB) $(LIBEX) $(LOADSO) + +ModuleSession_Forward.o:./ModuleSession_Forward/ModuleSession_Forward.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./ModuleSession_Forward/ModuleSession_Forward.cpp + +pch.o:./pch.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./pch.cpp + + +InstallAll:InstallSo +InstallSo:./libXEngine_ModuleSession.so + cp ./libXEngine_ModuleSession.so ../../XEngine_Release/libXEngine_ModuleSession.so + + +CleanAll:CleanObj CleanMk +CleanObj: + rm *.o +CleanMk: + rm *.so diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h new file mode 100644 index 0000000..bfc5c17 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h @@ -0,0 +1,114 @@ +#pragma once +/******************************************************************** +// Created: 2022/06/08 10:10:08 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleSession\ModuleSession_Define.h +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleSession +// File Base: ModuleSession_Define +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 导出定义 +// History: +*********************************************************************/ +////////////////////////////////////////////////////////////////////////// +// 导出函数 +////////////////////////////////////////////////////////////////////////// +extern "C" DWORD ModuleSession_GetLastError(int* pInt_SysError = NULL); +/************************************************************************/ +/* 转发导出函数 */ +/************************************************************************/ +/******************************************************************** +函数名称:ModuleSession_Forward_Insert +函数功能:插入一条记录到会话中 + 参数.一:lpszAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要插入的客户端 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleSession_Forward_Insert(LPCTSTR lpszAddr); +/******************************************************************** +函数名称:ModuleSession_Forward_List +函数功能:获取列表 + 参数.一:ppptszListAddr + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出地址列表 + 参数.二:pInt_Count + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出列表个数 + 参数.三:lpszAddr + In/Out:In + 类型:常量字符指针 + 可空:Y + 意思:输入忽略地址 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleSession_Forward_List(TCHAR*** ppptszListAddr, int* pInt_Count, LPCTSTR lpszAddr = NULL); +/******************************************************************** +函数名称:ModuleSession_Forward_Bind +函数功能:绑定转发需求 + 参数.一:lpszSrcAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入绑定的原始地址 + 参数.二:lpszDstAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输出绑定的目标地址 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleSession_Forward_Bind(LPCTSTR lpszSrcAddr, LPCTSTR lpszDstAddr); +/******************************************************************** +函数名称:ModuleSession_Forward_Delete +函数功能:删除用户 + 参数.一:lpszAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要删除的客户端 + 参数.二:ptszDstAddr + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出解绑的地址 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleSession_Forward_Delete(LPCTSTR lpszAddr, TCHAR * ptszDstAddr); +/******************************************************************** +函数名称:ModuleSession_Forward_Get +函数功能:获取转发用户给 + 参数.一:lpszAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要操作的客户端 + 参数.二:ptszDstAddr + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出对端地址 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleSession_Forward_Get(LPCTSTR lpszAddr, TCHAR* ptszDstAddr); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Error.h b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Error.h new file mode 100644 index 0000000..32f3eb9 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Error.h @@ -0,0 +1,16 @@ +#pragma once +/******************************************************************** +// Created: 2021/12/29 10:29:54 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleAuthorize\ModuleAuth_Error.h +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleAuthorize +// File Base: ModuleAuth_Error +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 导出错误 +// History: +*********************************************************************/ +#define ERROR_MODULE_SESSION_FORWARD_PARAMENT 0xC0001 //参数错误 +#define ERROR_MODULE_SESSION_FORWARD_NOTFOUND 0xC0002 //没有找到 +#define ERROR_MODULE_SESSION_FORWARD_BIND 0xC0003 //已经绑定 +#define ERROR_MODULE_SESSION_FORWARD_NOTFORWARD 0xC0004 //没有转发 \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp new file mode 100644 index 0000000..def3ec1 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp @@ -0,0 +1,276 @@ +#include "pch.h" +#include "ModuleSession_Forward.h" +/******************************************************************** +// Created: 2022/06/08 09:58:49 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleSession\ModuleSession_Forward\ModuleSession_Forward.cpp +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleSession\ModuleSession_Forward +// File Base: ModuleSession_Forward +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 会话转发协议 +// History: +*********************************************************************/ +CModuleSession_Forward::CModuleSession_Forward() +{ + +} +CModuleSession_Forward::~CModuleSession_Forward() +{ + +} +////////////////////////////////////////////////////////////////////////// +// 公用函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:ModuleSession_Forward_Insert +函数功能:插入一条记录到会话中 + 参数.一:lpszAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要插入的客户端 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleSession_Forward::ModuleSession_Forward_Insert(LPCTSTR lpszAddr) +{ + Session_IsErrorOccur = FALSE; + + if (NULL == lpszAddr) + { + Session_IsErrorOccur = TRUE; + Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_PARAMENT; + return FALSE; + } + SESSION_FORWARD st_Forward; + memset(&st_Forward, '\0', sizeof(SESSION_FORWARD)); + + _tcscpy(st_Forward.tszSrcAddr, lpszAddr); + + st_Locker.lock(); + stl_MapSession.insert(make_pair(lpszAddr, st_Forward)); + st_Locker.unlock(); + return TRUE; +} +/******************************************************************** +函数名称:ModuleSession_Forward_List +函数功能:获取列表 + 参数.一:ppptszListAddr + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出地址列表 + 参数.二:pInt_Count + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出列表个数 + 参数.三:lpszAddr + In/Out:In + 类型:常量字符指针 + 可空:Y + 意思:输入忽略地址 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleSession_Forward::ModuleSession_Forward_List(TCHAR*** ppptszListAddr, int* pInt_Count, LPCTSTR lpszAddr) +{ + Session_IsErrorOccur = FALSE; + + if (NULL == pInt_Count) + { + Session_IsErrorOccur = TRUE; + Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_PARAMENT; + return FALSE; + } + st_Locker.lock_shared(); + + if (NULL == lpszAddr) + { + *pInt_Count = stl_MapSession.size(); + } + else + { + *pInt_Count = stl_MapSession.size() - 1; //减去自己 + } + BaseLib_OperatorMemory_Malloc((XPPPMEM)ppptszListAddr, *pInt_Count, 128); + //遍历 + auto stl_MapIterator = stl_MapSession.begin(); + for (int i = 0; stl_MapIterator != stl_MapSession.end(); stl_MapIterator++, i++) + { + if (NULL != lpszAddr) + { + if (0 == _tcsncmp(lpszAddr, stl_MapIterator->first.c_str(), _tcslen(lpszAddr))) + { + continue; + } + } + _tcscpy((*ppptszListAddr)[i], stl_MapIterator->first.c_str()); + } + st_Locker.unlock_shared(); + return TRUE; +} +/******************************************************************** +函数名称:ModuleSession_Forward_Bind +函数功能:绑定转发需求 + 参数.一:lpszSrcAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入绑定的原始地址 + 参数.二:lpszDstAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输出绑定的目标地址 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleSession_Forward::ModuleSession_Forward_Bind(LPCTSTR lpszSrcAddr, LPCTSTR lpszDstAddr) +{ + Session_IsErrorOccur = FALSE; + + if ((NULL == lpszSrcAddr) || (NULL == lpszDstAddr)) + { + Session_IsErrorOccur = TRUE; + Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_PARAMENT; + return FALSE; + } + st_Locker.lock_shared(); + //查找 + auto stl_MapSrcIterator = stl_MapSession.find(lpszSrcAddr); + auto stl_MapDstIterator = stl_MapSession.find(lpszDstAddr); + if (stl_MapSrcIterator == stl_MapSession.end() || stl_MapDstIterator == stl_MapSession.end()) + { + Session_IsErrorOccur = TRUE; + Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_NOTFOUND; + st_Locker.unlock_shared(); + return FALSE; + } + //如果设置过,不允许在设置 + if (stl_MapSrcIterator->second.bForward || stl_MapDstIterator->second.bForward) + { + Session_IsErrorOccur = TRUE; + Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_BIND; + st_Locker.unlock_shared(); + return FALSE; + } + //需要设置两方的转发内容 + stl_MapSrcIterator->second.bForward = TRUE; + _tcscpy(stl_MapSrcIterator->second.tszDstAddr, lpszDstAddr); + + stl_MapDstIterator->second.bForward = TRUE; + _tcscpy(stl_MapDstIterator->second.tszDstAddr, lpszSrcAddr); + st_Locker.unlock_shared(); + return TRUE; +} +/******************************************************************** +函数名称:ModuleSession_Forward_Delete +函数功能:删除用户 + 参数.一:lpszAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要删除的客户端 + 参数.二:ptszDstAddr + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出解绑的地址 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleSession_Forward::ModuleSession_Forward_Delete(LPCTSTR lpszAddr, TCHAR* ptszDstAddr) +{ + Session_IsErrorOccur = FALSE; + + if (NULL == lpszAddr) + { + Session_IsErrorOccur = TRUE; + Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_PARAMENT; + return FALSE; + } + st_Locker.lock(); + //查找 + auto stl_MapSrcIterator = stl_MapSession.find(lpszAddr); + if (stl_MapSrcIterator == stl_MapSession.end()) + { + Session_IsErrorOccur = TRUE; + Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_NOTFOUND; + st_Locker.unlock(); + return FALSE; + } + //如果有转发,需要清理对方的转发设置 + if (stl_MapSrcIterator->second.bForward) + { + _tcscpy(ptszDstAddr, stl_MapSrcIterator->second.tszDstAddr); + auto stl_MapDstIterator = stl_MapSession.find(stl_MapSrcIterator->second.tszSrcAddr); + if (stl_MapDstIterator == stl_MapSession.end()) + { + stl_MapDstIterator->second.bForward = FALSE; + memset(stl_MapDstIterator->second.tszDstAddr, '\0', sizeof(stl_MapDstIterator->second.tszDstAddr)); + } + } + stl_MapSession.erase(stl_MapSrcIterator); + st_Locker.unlock(); + return TRUE; +} +/******************************************************************** +函数名称:ModuleSession_Forward_Get +函数功能:获取转发用户给 + 参数.一:lpszAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要操作的客户端 + 参数.二:ptszDstAddr + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出对端地址 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleSession_Forward::ModuleSession_Forward_Get(LPCTSTR lpszAddr, TCHAR* ptszDstAddr) +{ + Session_IsErrorOccur = FALSE; + + if ((NULL == lpszAddr) || (NULL == ptszDstAddr)) + { + Session_IsErrorOccur = TRUE; + Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_PARAMENT; + return FALSE; + } + st_Locker.lock_shared(); + //查找 + auto stl_MapIterator = stl_MapSession.find(lpszAddr); + if (stl_MapIterator == stl_MapSession.end()) + { + Session_IsErrorOccur = TRUE; + Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_NOTFOUND; + st_Locker.unlock_shared(); + return FALSE; + } + //如果有转发,需要清理对方的转发设置 + if (!stl_MapIterator->second.bForward) + { + Session_IsErrorOccur = TRUE; + Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_NOTFORWARD; + st_Locker.unlock_shared(); + return FALSE; + } + _tcscpy(ptszDstAddr, stl_MapIterator->second.tszDstAddr); + st_Locker.unlock_shared(); + return TRUE; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.h b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.h new file mode 100644 index 0000000..5654b16 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.h @@ -0,0 +1,35 @@ +#pragma once +/******************************************************************** +// Created: 2022/06/08 09:57:34 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleSession\ModuleSession_Forward\ModuleSession_Forward.h +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleSession\ModuleSession_Forward +// File Base: ModuleSession_Forward +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 会话转发协议 +// History: +*********************************************************************/ +typedef struct +{ + TCHAR tszSrcAddr[128]; + TCHAR tszDstAddr[128]; + BOOL bForward; +}SESSION_FORWARD, * LPSESSION_FORWARD; + +class CModuleSession_Forward +{ +public: + CModuleSession_Forward(); + ~CModuleSession_Forward(); +public: + BOOL ModuleSession_Forward_Insert(LPCTSTR lpszAddr); + BOOL ModuleSession_Forward_List(TCHAR*** ppptszListAddr, int* pInt_Count, LPCTSTR lpszAddr = NULL); + BOOL ModuleSession_Forward_Bind(LPCTSTR lpszSrcAddr, LPCTSTR lpszDstAddr); + BOOL ModuleSession_Forward_Delete(LPCTSTR lpszAddr, TCHAR* ptszDstAddr); + BOOL ModuleSession_Forward_Get(LPCTSTR lpszAddr, TCHAR* ptszDstAddr); +private: + shared_mutex st_Locker; +private: + unordered_map stl_MapSession; +}; \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.def b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.def new file mode 100644 index 0000000..9a8c8ac --- /dev/null +++ b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.def @@ -0,0 +1,10 @@ +LIBRARY + +EXPORTS + ModuleSession_GetLastError + + ModuleSession_Forward_Insert + ModuleSession_Forward_List + ModuleSession_Forward_Bind + ModuleSession_Forward_Delete + ModuleSession_Forward_Get \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj new file mode 100644 index 0000000..48e1d6a --- /dev/null +++ b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj @@ -0,0 +1,172 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {237af017-9ad2-44d8-a6c4-ecdef7674ff2} + XEngineModuleSession + 10.0 + + + + DynamicLibrary + true + v143 + MultiByte + + + DynamicLibrary + false + v143 + true + Unicode + + + DynamicLibrary + true + v143 + Unicode + + + DynamicLibrary + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + $(XEngine_Include);$(IncludePath) + $(XEngine_Lib32);$(LibraryPath) + + + + Level3 + true + WIN32;_DEBUG;XENGINEMODULESESSION_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + false + XEngine_ModuleSession.def + + + + + Level3 + true + true + true + WIN32;NDEBUG;XENGINEMODULESESSION_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + false + XEngine_ModuleSession.def + + + + + Level3 + true + _DEBUG;XENGINEMODULESESSION_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + false + XEngine_ModuleSession.def + + + + + Level3 + true + true + true + NDEBUG;XENGINEMODULESESSION_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + false + XEngine_ModuleSession.def + + + + + + + + + + + + + + Create + Create + Create + Create + + + + + + + + + \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj.filters b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj.filters new file mode 100644 index 0000000..6f92c68 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj.filters @@ -0,0 +1,56 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {17d588b2-3db9-4c2e-9c20-a0c0c2cd3f2d} + + + {8893a952-de7d-4b08-a49e-b46bbe302e17} + + + + + 头文件 + + + 头文件 + + + 头文件 + + + 头文件 + + + 头文件\ModuleSession_Forward + + + + + 源文件 + + + 源文件 + + + 源文件\ModuleSession_Forward + + + + + 源文件 + + + \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj.user b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/dllmain.cpp b/XEngine_Source/XEngine_ModuleSession/dllmain.cpp new file mode 100644 index 0000000..daed8c8 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleSession/dllmain.cpp @@ -0,0 +1,19 @@ +// dllmain.cpp : 定义 DLL 应用程序的入口点。 +#include "pch.h" + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + diff --git a/XEngine_Source/XEngine_ModuleSession/framework.h b/XEngine_Source/XEngine_ModuleSession/framework.h new file mode 100644 index 0000000..80cbbc9 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleSession/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容 +// Windows 头文件 +#include diff --git a/XEngine_Source/XEngine_ModuleSession/pch.cpp b/XEngine_Source/XEngine_ModuleSession/pch.cpp new file mode 100644 index 0000000..8be30dc --- /dev/null +++ b/XEngine_Source/XEngine_ModuleSession/pch.cpp @@ -0,0 +1,51 @@ +#include "pch.h" +#include "ModuleSession_Forward/ModuleSession_Forward.h" +/******************************************************************** +// Created: 2022/06/08 10:10:52 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleSession\pch.cpp +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleSession +// File Base: pch +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 导出实现 +// History: +*********************************************************************/ +BOOL Session_IsErrorOccur = FALSE; +DWORD Session_dwErrorCode = 0; +////////////////////////////////////////////////////////////////////////// +CModuleSession_Forward m_Forward; +////////////////////////////////////////////////////////////////////////// +// 导出函数 +////////////////////////////////////////////////////////////////////////// +extern "C" DWORD ModuleSession_GetLastError(int* pInt_SysError) +{ + if (NULL != pInt_SysError) + { + *pInt_SysError = errno; + } + return Session_dwErrorCode; +} +/************************************************************************/ +/* 转发导出函数 */ +/************************************************************************/ +extern "C" BOOL ModuleSession_Forward_Insert(LPCTSTR lpszAddr) +{ + return m_Forward.ModuleSession_Forward_Insert(lpszAddr); +} +extern "C" BOOL ModuleSession_Forward_List(TCHAR * **ppptszListAddr, int* pInt_Count, LPCTSTR lpszAddr) +{ + return m_Forward.ModuleSession_Forward_List(ppptszListAddr, pInt_Count, lpszAddr); +} +extern "C" BOOL ModuleSession_Forward_Bind(LPCTSTR lpszSrcAddr, LPCTSTR lpszDstAddr) +{ + return m_Forward.ModuleSession_Forward_Bind(lpszSrcAddr, lpszDstAddr); +} +extern "C" BOOL ModuleSession_Forward_Delete(LPCTSTR lpszAddr, TCHAR * ptszDstAddr) +{ + return m_Forward.ModuleSession_Forward_Delete(lpszAddr, ptszDstAddr); +} +extern "C" BOOL ModuleSession_Forward_Get(LPCTSTR lpszAddr, TCHAR * ptszDstAddr) +{ + return m_Forward.ModuleSession_Forward_Get(lpszAddr, ptszDstAddr); +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/pch.h b/XEngine_Source/XEngine_ModuleSession/pch.h new file mode 100644 index 0000000..9b9ffc8 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleSession/pch.h @@ -0,0 +1,49 @@ +// pch.h: 这是预编译标头文件。 +// 下方列出的文件仅编译一次,提高了将来生成的生成性能。 +// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。 +// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。 +// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。 + +#ifndef PCH_H +#define PCH_H + +#ifdef _MSC_BUILD +// 添加要在此处预编译的标头 +#include "framework.h" +#include +#endif +#endif //PCH_H +#include +#include +#include +#include +using namespace std; +#include +#include +#include +#include +#include "ModuleSession_Define.h" +#include "ModuleSession_Error.h" +/******************************************************************** +// Created: 2022/06/08 10:03:03 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleSession\pch.h +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleSession +// File Base: pch +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 公用头文件 +// History: +*********************************************************************/ +extern BOOL Session_IsErrorOccur; +extern DWORD Session_dwErrorCode; + +#ifdef _UNICODE +typedef std::wstring tstring; +#else +typedef std::string tstring; +#endif + +#ifdef _MSC_BUILD +#pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib") +#endif \ No newline at end of file -- Gitee From 93757d1e1943faf518fbe95e65392aa1a993e673 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 9 Jun 2022 09:52:05 +0800 Subject: [PATCH 09/22] added:protocol module --- .../XEngine_ModuleProtocol/Makefile | 45 +++++ .../ModuleProtocol_Define.h | 85 +++++++++ .../ModuleProtocol_Error.h | 21 +++ .../ModuleProtocol_Packet.cpp | 85 +++++++++ .../ModuleProtocol_Packet.h | 22 +++ .../ModuleProtocol_Parse.cpp | 78 ++++++++ .../ModuleProtocol_Parse.h | 22 +++ .../XEngine_ModuleProtocol.def | 8 + .../XEngine_ModuleProtocol.vcxproj | 174 ++++++++++++++++++ .../XEngine_ModuleProtocol.vcxproj.filters | 68 +++++++ .../XEngine_ModuleProtocol.vcxproj.user | 4 + .../XEngine_ModuleProtocol/dllmain.cpp | 19 ++ .../XEngine_ModuleProtocol/framework.h | 5 + XEngine_Source/XEngine_ModuleProtocol/pch.cpp | 44 +++++ XEngine_Source/XEngine_ModuleProtocol/pch.h | 55 ++++++ 15 files changed, 735 insertions(+) create mode 100644 XEngine_Source/XEngine_ModuleProtocol/Makefile create mode 100644 XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Define.h create mode 100644 XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Error.h create mode 100644 XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp create mode 100644 XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.h create mode 100644 XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.cpp create mode 100644 XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.h create mode 100644 XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.def create mode 100644 XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj create mode 100644 XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj.filters create mode 100644 XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj.user create mode 100644 XEngine_Source/XEngine_ModuleProtocol/dllmain.cpp create mode 100644 XEngine_Source/XEngine_ModuleProtocol/framework.h create mode 100644 XEngine_Source/XEngine_ModuleProtocol/pch.cpp create mode 100644 XEngine_Source/XEngine_ModuleProtocol/pch.h diff --git a/XEngine_Source/XEngine_ModuleProtocol/Makefile b/XEngine_Source/XEngine_ModuleProtocol/Makefile new file mode 100644 index 0000000..9b91388 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleProtocol/Makefile @@ -0,0 +1,45 @@ +CC = g++ -Wall -std=c++17 -fPIC +RELEASE = 0 +UNICODE = 0 +INCLUDE = -I ./ +LOADBIN = +LIB = +LIBEX = -ldl -lpthread +LOADSO = -Wl,-rpath= +LIBINCLUDE = ModuleSession_Forward.o pch.o + +ifeq ($(RELEASE),1) +FLAGS = -c -O2 +DEBUG = +else +FLAGS = -c -lc_p +DEBUG = -g -pg +endif + +ifeq ($(UNICODE),1) +UNICODE = -D _UNICODE +else +UNICODE = +endif + + +all:$(LIBINCLUDE) + $(CC) $(DEBUG) $(LIBINCLUDE) -o libXEngine_ModuleSession.so -shared -fPIC $(LOADBIN) $(LIB) $(LIBEX) $(LOADSO) + +ModuleSession_Forward.o:./ModuleSession_Forward/ModuleSession_Forward.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./ModuleSession_Forward/ModuleSession_Forward.cpp + +pch.o:./pch.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./pch.cpp + + +InstallAll:InstallSo +InstallSo:./libXEngine_ModuleSession.so + cp ./libXEngine_ModuleSession.so ../../XEngine_Release/libXEngine_ModuleSession.so + + +CleanAll:CleanObj CleanMk +CleanObj: + rm *.o +CleanMk: + rm *.so diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Define.h b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Define.h new file mode 100644 index 0000000..fcab271 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Define.h @@ -0,0 +1,85 @@ +#pragma once +/******************************************************************** +// Created: 2022/06/08 11:28:19 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleProtocol\ModuleProtocol_Define.h +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleProtocol +// File Base: ModuleProtocol_Define +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 导出定义 +// History: +*********************************************************************/ +////////////////////////////////////////////////////////////////////////// +// 导出函数 +////////////////////////////////////////////////////////////////////////// +extern "C" DWORD ModuleProtocol_GetLastError(int* pInt_SysError = NULL); +/************************************************************************/ +/* 封包导出函数 */ +/************************************************************************/ +/******************************************************************** +函数名称:ModuleProtocol_Packet_ForwardList +函数功能:转发协议封装请求 + 参数.一:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出封装好的包 + 参数.二:pInt_Len + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出封装大小 + 参数.三:pSt_ProtocolHdr + In/Out:In + 类型:协议头 + 可空:N + 意思:输入请求的头 + 参数.四:ppptszListAddr + In/Out:In + 类型:三级指针 + 可空:N + 意思:输入要处理的列表 + 参数.五:nCount + In/Out:In + 类型:整数型 + 可空:N + 意思:输入列表个数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleProtocol_Packet_ForwardList(TCHAR* ptszMsgBuffer, int* pInt_Len, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, TCHAR*** ppptszListAddr, int nCount); +/************************************************************************/ +/* 解析导出函数 */ +/************************************************************************/ +/******************************************************************** +函数名称:ModuleProtocol_Packet_ForwardList +函数功能:转发协议封装请求 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的缓冲区 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入解析的大小 + 参数.三:ptszSrcAddr + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出解析的原始地址 + 参数.四:ptszDstAddr + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出解析的目的地址 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleProtocol_Parse_ForwardBind(LPCTSTR lpszMsgBuffer, int nMsgLen, TCHAR * ptszSrcAddr, TCHAR * ptszDstAddr); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Error.h b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Error.h new file mode 100644 index 0000000..df672c5 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Error.h @@ -0,0 +1,21 @@ +#pragma once +/******************************************************************** +// Created: 2022/06/08 11:21:20 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleProtocol\ModuleProtocol_Error.h +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleProtocol +// File Base: ModuleProtocol_Error +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 导出错误 +// History: +*********************************************************************/ +////////////////////////////////////////////////////////////////////////// +// 导出的打包错误 +////////////////////////////////////////////////////////////////////////// +#define ERROR_MODULE_PROTOCOL_PACKET_PARAMENT 0xD0001 //参数错误 +////////////////////////////////////////////////////////////////////////// +// 导出的解析错误 +////////////////////////////////////////////////////////////////////////// +#define ERROR_MODULE_PROTOCOL_PARSE_PARAMENT 0xD1001 //参数错误 +#define ERROR_MODULE_PROTOCOL_PARSE_JSON 0xD1002 //解析JSON错误 \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp new file mode 100644 index 0000000..6dbc958 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp @@ -0,0 +1,85 @@ +#include "pch.h" +#include "ModuleProtocol_Packet.h" +/******************************************************************** +// Created: 2022/06/08 13:55:09 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleProtocol\ModuleProtocol_Packet\ModuleProtocol_Packet.cpp +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleProtocol\ModuleProtocol_Packet +// File Base: ModuleProtocol_Packet +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 封装协议 +// History: +*********************************************************************/ +CModuleProtocol_Packet::CModuleProtocol_Packet() +{ + +} +CModuleProtocol_Packet::~CModuleProtocol_Packet() +{ + +} +////////////////////////////////////////////////////////////////////////// +// 公用函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:ModuleProtocol_Packet_ForwardList +函数功能:转发协议封装请求 + 参数.一:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出封装好的包 + 参数.二:pInt_Len + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出封装大小 + 参数.三:pSt_ProtocolHdr + In/Out:In + 类型:协议头 + 可空:N + 意思:输入请求的头 + 参数.四:ppptszListAddr + In/Out:In + 类型:三级指针 + 可空:N + 意思:输入要处理的列表 + 参数.五:nCount + In/Out:In + 类型:整数型 + 可空:N + 意思:输入列表个数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleProtocol_Packet::ModuleProtocol_Packet_ForwardList(TCHAR* ptszMsgBuffer, int* pInt_Len, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, TCHAR*** ppptszListAddr, int nCount) +{ + Protocol_IsErrorOccur = FALSE; + + if ((NULL == ptszMsgBuffer) || (NULL == pInt_Len)) + { + Protocol_IsErrorOccur = TRUE; + Protocol_dwErrorCode = ERROR_MODULE_PROTOCOL_PACKET_PARAMENT; + return FALSE; + } + Json::Value st_JsonRoot; + Json::Value st_JsonArray; + + for (int i = 0; i < nCount; i++) + { + st_JsonArray[i] = (*ppptszListAddr)[i]; + } + st_JsonRoot["Count"] = nCount; + st_JsonRoot["Array"] = st_JsonArray; + + pSt_ProtocolHdr->unPacketSize = st_JsonRoot.toStyledString().length(); + pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LISTREP; + + *pInt_Len = pSt_ProtocolHdr->unPacketSize; + memcpy(ptszMsgBuffer, pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR)); + memcpy(ptszMsgBuffer + sizeof(XENGINE_PROTOCOLHDR), st_JsonRoot.toStyledString().c_str(), pSt_ProtocolHdr->unPacketSize); + return TRUE; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.h b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.h new file mode 100644 index 0000000..950480b --- /dev/null +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.h @@ -0,0 +1,22 @@ +#pragma once +/******************************************************************** +// Created: 2022/06/08 13:54:47 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleProtocol\ModuleProtocol_Packet\ModuleProtocol_Packet.h +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleProtocol\ModuleProtocol_Packet +// File Base: ModuleProtocol_Packet +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 封装协议 +// History: +*********************************************************************/ + +class CModuleProtocol_Packet +{ +public: + CModuleProtocol_Packet(); + ~CModuleProtocol_Packet(); +public: + BOOL ModuleProtocol_Packet_ForwardList(TCHAR* ptszMsgBuffer, int* pInt_Len, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, TCHAR*** ppptszListAddr, int nCount); +private: +}; \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.cpp b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.cpp new file mode 100644 index 0000000..14d4ed4 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.cpp @@ -0,0 +1,78 @@ +#include "pch.h" +#include "ModuleProtocol_Parse.h" +/******************************************************************** +// Created: 2022/06/08 13:56:46 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleProtocol\ModuleProtocol_Parse\ModuleProtocol_Parse.cpp +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleProtocol\ModuleProtocol_Parse +// File Base: ModuleProtocol_Parse +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 解析协议类 +// History: +*********************************************************************/ +CModuleProtocol_Parse::CModuleProtocol_Parse() +{ + +} +CModuleProtocol_Parse::~CModuleProtocol_Parse() +{ + +} +////////////////////////////////////////////////////////////////////////// +// 公用函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:ModuleProtocol_Packet_ForwardList +函数功能:转发协议封装请求 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的缓冲区 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入解析的大小 + 参数.三:ptszSrcAddr + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出解析的原始地址 + 参数.四:ptszDstAddr + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出解析的目的地址 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleProtocol_Parse::ModuleProtocol_Parse_ForwardBind(LPCTSTR lpszMsgBuffer, int nMsgLen, TCHAR* ptszSrcAddr, TCHAR* ptszDstAddr) +{ + Protocol_IsErrorOccur = FALSE; + + if (NULL == lpszMsgBuffer) + { + Protocol_IsErrorOccur = TRUE; + Protocol_dwErrorCode = ERROR_MODULE_PROTOCOL_PARSE_PARAMENT; + return FALSE; + } + Json::Value st_JsonRoot; + JSONCPP_STRING st_JsonError; + Json::CharReaderBuilder st_JsonBuilder; + //开始解析配置文件 + std::unique_ptr const pSt_JsonReader(st_JsonBuilder.newCharReader()); + if (!pSt_JsonReader->parse(lpszMsgBuffer, lpszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + Protocol_IsErrorOccur = TRUE; + Protocol_dwErrorCode = ERROR_MODULE_PROTOCOL_PARSE_JSON; + return FALSE; + } + //_tcscpy(ptszSrcAddr, st_JsonRoot["tszSrcAddr"].asCString()); 暂时不支持 + _tcscpy(ptszDstAddr, st_JsonRoot["tszDstAddr"].asCString()); + + return TRUE; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.h b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.h new file mode 100644 index 0000000..dd3b622 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.h @@ -0,0 +1,22 @@ +#pragma once +/******************************************************************** +// Created: 2022/06/08 13:56:05 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleProtocol\ModuleProtocol_Parse\ModuleProtocol_Parse.h +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleProtocol\ModuleProtocol_Parse +// File Base: ModuleProtocol_Parse +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 解析协议类 +// History: +*********************************************************************/ + +class CModuleProtocol_Parse +{ +public: + CModuleProtocol_Parse(); + ~CModuleProtocol_Parse(); +public: + BOOL ModuleProtocol_Parse_ForwardBind(LPCTSTR lpszMsgBuffer, int nMsgLen, TCHAR* ptszSrcAddr, TCHAR* ptszDstAddr); +private: +}; \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.def b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.def new file mode 100644 index 0000000..5d5832c --- /dev/null +++ b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.def @@ -0,0 +1,8 @@ +LIBRARY + +EXPORTS + ModuleProtocol_GetLastError + + ModuleProtocol_Packet_ForwardList + + ModuleProtocol_Parse_ForwardBind \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj new file mode 100644 index 0000000..8f1e1d0 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj @@ -0,0 +1,174 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {9512a610-7197-4522-9aef-1486619c99fe} + XEngineModuleProtocol + 10.0 + + + + DynamicLibrary + true + v143 + MultiByte + + + DynamicLibrary + false + v143 + true + Unicode + + + DynamicLibrary + true + v143 + Unicode + + + DynamicLibrary + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + $(XEngine_Include);../XEngine_ThirdPart/jsoncpp;$(IncludePath) + $(XEngine_Lib32);$(LibraryPath) + + + + Level3 + true + WIN32;_DEBUG;XENGINEMODULEPROTOCOL_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + false + XEngine_ModuleProtocol.def + + + + + Level3 + true + true + true + WIN32;NDEBUG;XENGINEMODULEPROTOCOL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + false + XEngine_ModuleProtocol.def + + + + + Level3 + true + _DEBUG;XENGINEMODULEPROTOCOL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + false + XEngine_ModuleProtocol.def + + + + + Level3 + true + true + true + NDEBUG;XENGINEMODULEPROTOCOL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + false + XEngine_ModuleProtocol.def + + + + + + + + + + + + + + + + Create + Create + Create + Create + + + + + + + + + \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj.filters b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj.filters new file mode 100644 index 0000000..ae62587 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj.filters @@ -0,0 +1,68 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {c315e498-4a4b-4626-8519-6c7cb27959f4} + + + {e7666a8d-be4e-4e59-97fb-801399ede644} + + + {07c75a04-5174-484f-b2cb-2519684c7e97} + + + {b901b18c-b203-4bf3-bc69-3ad8bba7a692} + + + + + 头文件 + + + 头文件 + + + 头文件 + + + 头文件 + + + 头文件\ModuleProtocol_Packet + + + 头文件\ModuleProtocol_Parse + + + + + 源文件 + + + 源文件 + + + 源文件\ModuleProtocol_Packet + + + 源文件\ModuleProtocol_Parse + + + + + 源文件 + + + \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj.user b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/dllmain.cpp b/XEngine_Source/XEngine_ModuleProtocol/dllmain.cpp new file mode 100644 index 0000000..daed8c8 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleProtocol/dllmain.cpp @@ -0,0 +1,19 @@ +// dllmain.cpp : 定义 DLL 应用程序的入口点。 +#include "pch.h" + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + diff --git a/XEngine_Source/XEngine_ModuleProtocol/framework.h b/XEngine_Source/XEngine_ModuleProtocol/framework.h new file mode 100644 index 0000000..80cbbc9 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleProtocol/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容 +// Windows 头文件 +#include diff --git a/XEngine_Source/XEngine_ModuleProtocol/pch.cpp b/XEngine_Source/XEngine_ModuleProtocol/pch.cpp new file mode 100644 index 0000000..0991c41 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleProtocol/pch.cpp @@ -0,0 +1,44 @@ +#include "pch.h" +#include "ModuleProtocol_Packet/ModuleProtocol_Packet.h" +#include "ModuleProtocol_Parse/ModuleProtocol_Parse.h" +/******************************************************************** +// Created: 2022/06/08 13:15:13 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleProtocol\pch.cpp +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleProtocol +// File Base: pch +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 导出实现 +// History: +*********************************************************************/ +BOOL Protocol_IsErrorOccur = FALSE; +DWORD Protocol_dwErrorCode = 0; +////////////////////////////////////////////////////////////////////////// +CModuleProtocol_Packet m_ProtocolPacket; +CModuleProtocol_Parse m_ProtocolParse; +////////////////////////////////////////////////////////////////////////// +// 导出函数 +////////////////////////////////////////////////////////////////////////// +extern "C" DWORD ModuleProtocol_GetLastError(int* pInt_SysError) +{ + if (NULL != pInt_SysError) + { + *pInt_SysError = errno; + } + return Protocol_dwErrorCode; +} +/************************************************************************/ +/* 封包导出函数 */ +/************************************************************************/ +extern "C" BOOL ModuleProtocol_Packet_ForwardList(TCHAR * ptszMsgBuffer, int* pInt_Len, XENGINE_PROTOCOLHDR * pSt_ProtocolHdr, TCHAR * **ppptszListAddr, int nCount) +{ + return m_ProtocolPacket.ModuleProtocol_Packet_ForwardList(ptszMsgBuffer, pInt_Len, pSt_ProtocolHdr, ppptszListAddr, nCount); +} +/************************************************************************/ +/* 解析导出函数 */ +/************************************************************************/ +extern "C" BOOL ModuleProtocol_Parse_ForwardBind(LPCTSTR lpszMsgBuffer, int nMsgLen, TCHAR * ptszSrcAddr, TCHAR * ptszDstAddr) +{ + return m_ProtocolParse.ModuleProtocol_Parse_ForwardBind(lpszMsgBuffer, nMsgLen, ptszSrcAddr, ptszDstAddr); +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/pch.h b/XEngine_Source/XEngine_ModuleProtocol/pch.h new file mode 100644 index 0000000..bd50bec --- /dev/null +++ b/XEngine_Source/XEngine_ModuleProtocol/pch.h @@ -0,0 +1,55 @@ +// pch.h: 这是预编译标头文件。 +// 下方列出的文件仅编译一次,提高了将来生成的生成性能。 +// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。 +// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。 +// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。 + +#ifndef PCH_H +#define PCH_H + +// 添加要在此处预编译的标头 +#ifdef _MSC_BUILD +#include "framework.h" +#include +#endif +#endif //PCH_H +#include +#include +#include +#include +using namespace std; +#include +#include +#include +#include "../XEngine_UserProtocol.h" +#include "ModuleProtocol_Define.h" +#include "ModuleProtocol_Error.h" +/******************************************************************** +// Created: 2022/06/08 11:22:29 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleProtocol\pch.h +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleProtocol +// File Base: pch +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 公用头文件 +// History: +*********************************************************************/ +extern BOOL Protocol_IsErrorOccur; +extern DWORD Protocol_dwErrorCode; + +#ifdef _MSC_BUILD +#ifdef _DEBUG +#ifdef _WIN64 +#pragma comment(lib,"../x64/Debug/jsoncpp") +#else +#pragma comment(lib,"../Debug/jsoncpp") +#endif +#else +#ifdef _WIN64 +#pragma comment(lib,"../x64/Release/jsoncpp") +#else +#pragma comment(lib,"../Release/jsoncpp") +#endif +#endif +#endif \ No newline at end of file -- Gitee From ea35d7eabdbdfa6bf947dd0cc3598f57d254fd98 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 10 Jun 2022 09:22:52 +0800 Subject: [PATCH 10/22] modify:forward code file name --- ...ne_Forward.cpp => XEngine_ForwardTask.cpp} | 64 +++++++++++++++++-- ...Engine_Forward.h => XEngine_ForwardTask.h} | 6 +- 2 files changed, 62 insertions(+), 8 deletions(-) rename XEngine_Source/XEngine_ServiceApp/{XEngine_Forward.cpp => XEngine_ForwardTask.cpp} (36%) rename XEngine_Source/XEngine_ServiceApp/{XEngine_Forward.h => XEngine_ForwardTask.h} (85%) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Forward.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp similarity index 36% rename from XEngine_Source/XEngine_ServiceApp/XEngine_Forward.cpp rename to XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp index a85fd88..a9c497d 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Forward.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp @@ -1,9 +1,9 @@ #include "XEngine_Hdr.h" /******************************************************************** -// Created: 2022/06/07 15:18:21 -// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp\XEngine_Forward.cpp +// Created: 2022/06/08 13:44:41 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp\XEngine_ForwardTask.cpp // File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp -// File Base: XEngine_Forward +// File Base: XEngine_ForwardTask // File Ext: cpp // Project: XEngine(网络通信引擎) // Author: qyt @@ -44,12 +44,66 @@ XHTHREAD CALLBACK XEngine_Forward_Thread(LPVOID lParam) BOOL XEngine_Forward_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr) { + int nSDLen = 10240; + TCHAR tszSDBuffer[10240]; + memset(tszSDBuffer, '\0', sizeof(tszSDBuffer)); //判断协议头和尾部 - if ((XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER != pSt_ProtocolHdr->wHeader) || (XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL != pSt_ProtocolHdr->wTail) || (ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_AUTH != pSt_ProtocolHdr->unOperatorType)) + if ((XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER != pSt_ProtocolHdr->wHeader) || (XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL != pSt_ProtocolHdr->wTail)) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("客户端:%s,协议错误"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Forward客户端:%s,协议错误"), lpszClientAddr); return FALSE; } + //处理验证协议 + if (ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_AUTH == pSt_ProtocolHdr->unOperatorType) + { + if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LOGREQ == pSt_ProtocolHdr->unOperatorCode) + { + pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LOGREP; + ModuleSession_Forward_Insert(lpszClientAddr); + XEngine_Network_Send(lpszClientAddr, (LPCTSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,登录到服务器"), lpszClientAddr); + } + } + //处理转发协议 + if (ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_USER_FORWARD == pSt_ProtocolHdr->unOperatorType) + { + if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LISTREQ == pSt_ProtocolHdr->unOperatorCode) + { + int nListCount = 0; + TCHAR** pptszListAddr; + ModuleSession_Forward_List(&pptszListAddr, &nListCount, lpszClientAddr); + ModuleProtocol_Packet_ForwardList(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, &pptszListAddr, nListCount); + XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_CLIENT_NETTYPE_FORWARD); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,请求可用转发列表成功"), lpszClientAddr); + } + else if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_BINDREQ == pSt_ProtocolHdr->unOperatorCode) + { + TCHAR tszSrcAddr[128]; + TCHAR tszDstAddr[128]; + + memset(tszSrcAddr, '\0', sizeof(tszSrcAddr)); + memset(tszDstAddr, '\0', sizeof(tszDstAddr)); + + ModuleProtocol_Parse_ForwardBind(lpszMsgBuffer, nMsgLen, tszSrcAddr, tszDstAddr); + if (!ModuleSession_Forward_Bind(lpszClientAddr, tszDstAddr)) + { + pSt_ProtocolHdr->wReserve = 401; + pSt_ProtocolHdr->unPacketSize = 0; + pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_BINDREP; + XEngine_Network_Send(lpszClientAddr, (LPCTSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,请求绑定转发地址:%s 失败,错误:%lX"), lpszClientAddr, tszDstAddr); + return FALSE; + } + //先告知对方要转发数据 + pSt_ProtocolHdr->wReserve = 0; + pSt_ProtocolHdr->unPacketSize = 0; + XEngine_Network_Send(tszDstAddr, (LPCTSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); + //最后返回结果 + pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_BINDREP; + XEngine_Network_Send(lpszClientAddr, (LPCTSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,请求绑定转发地址:%s 成功"), lpszClientAddr, tszDstAddr); + } + } return TRUE; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Forward.h b/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.h similarity index 85% rename from XEngine_Source/XEngine_ServiceApp/XEngine_Forward.h rename to XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.h index 943aa6f..7899dbf 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Forward.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.h @@ -1,9 +1,9 @@ #pragma once /******************************************************************** -// Created: 2022/06/07 15:18:05 -// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp\XEngine_Forward.h +// Created: 2022/06/08 13:44:36 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp\XEngine_ForwardTask.h // File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp -// File Base: XEngine_Forward +// File Base: XEngine_ForwardTask // File Ext: h // Project: XEngine(网络通信引擎) // Author: qyt -- Gitee From 952dde2350d8e0cbc36de514aa21b2b7ea2c6b56 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 10 Jun 2022 09:23:55 +0800 Subject: [PATCH 11/22] modify:move client strtuct to new dir --- .../XEngine_ServiceApp/XEngine_Hdr.h | 27 ++++++++++++++++++- XEngine_Source/XEngine_UserProtocol.h | 24 ++++++++++++----- 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h b/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h index ccdfbec..db48ed6 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h @@ -50,12 +50,16 @@ using namespace std; #include "../XEngine_ModuleConfigure/ModuleConfig_Error.h" #include "../XEngine_ModuleAuthorize/ModuleAuth_Define.h" #include "../XEngine_ModuleAuthorize/ModuleAuth_Error.h" +#include "../XEngine_ModuleSession/ModuleSession_Define.h" +#include "../XEngine_ModuleSession/ModuleSession_Error.h" +#include "../XEngine_ModuleProtocol/ModuleProtocol_Define.h" +#include "../XEngine_ModuleProtocol/ModuleProtocol_Error.h" //加载自己的头文件 #include "XEngine_Configure.h" #include "XEngine_Network.h" #include "XEngine_SocksTask.h" #include "XEngine_TunnelTask.h" -#include "XEngine_Forward.h" +#include "XEngine_ForwardTask.h" /******************************************************************** // Created: 2021/12/02 16:34:41 // File Name: D:\XEngine_ServiceApp\XEngine_Source\XEngine_ServiceApp\XEngine_Hdr.h @@ -92,18 +96,39 @@ extern XENGINE_SERVICECONFIG st_ServiceConfig; #define XENGINE_CLIENT_CLOSE_HEARTBEAT 2 #define XENGINE_CLIENT_CLOSE_SERVICE 3 +typedef struct +{ + TCHAR tszIPAddr[128]; + ENUM_RFCCOMPONENTS_PROXY_STATUS enStatus; + SOCKET hSocket; + BOOL bClose; +}PROXYPROTOCOL_CLIENTINFO; + //连接库 #ifdef _MSC_BUILD #ifdef _WIN64 +#ifdef _DEBUG +#pragma comment(lib,"../x64/Debug/XEngine_ModuleConfigure.lib") +#pragma comment(lib,"../x64/Debug/XEngine_ModuleAuthorize.lib") +#pragma comment(lib,"../x64/Debug/XEngine_ModuleSession.lib") +#pragma comment(lib,"../x64/Debug/XEngine_ModuleProtocol.lib") +#else #pragma comment(lib,"../x64/Release/XEngine_ModuleConfigure.lib") #pragma comment(lib,"../x64/Release/XEngine_ModuleAuthorize.lib") +#pragma comment(lib,"../x64/Release/XEngine_ModuleSession.lib") +#pragma comment(lib,"../x64/Release/XEngine_ModuleProtocol.lib") +#endif #else #ifdef _DEBUG #pragma comment(lib,"../Debug/XEngine_ModuleConfigure.lib") #pragma comment(lib,"../Debug/XEngine_ModuleAuthorize.lib") +#pragma comment(lib,"../Debug/XEngine_ModuleSession.lib") +#pragma comment(lib,"../Debug/XEngine_ModuleProtocol.lib") #else #pragma comment(lib,"../Release/XEngine_ModuleConfigure.lib") #pragma comment(lib,"../Release/XEngine_ModuleAuthorize.lib") +#pragma comment(lib,"../Release/XEngine_ModuleSession.lib") +#pragma comment(lib,"../Release/XEngine_ModuleProtocol.lib") #endif #endif #pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib.lib") diff --git a/XEngine_Source/XEngine_UserProtocol.h b/XEngine_Source/XEngine_UserProtocol.h index 8b07c94..7bfd641 100644 --- a/XEngine_Source/XEngine_UserProtocol.h +++ b/XEngine_Source/XEngine_UserProtocol.h @@ -11,15 +11,25 @@ // History: *********************************************************************/ /////////////////////////////////////////////////////////////////////////// +// 导出的协议定义 +/////////////////////////////////////////////////////////////////////////// +typedef enum en_XEngine_XUser_Protocol +{ + ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_USER_FORWARD = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_USER + 1 +}ENUM_XNETENGINE_XUSER_PROTOCOL; +//转发协议 +#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LOGREQ 0xE1000 +#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LOGREP 0xE1001 +#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LISTREQ 0xE1002 +#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LISTREP 0xE1003 +#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_BINDREQ 0xE1004 +#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_BINDREP 0xE1005 +#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_UNREQ 0xE1006 +#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_UNREP 0xE1007 +/////////////////////////////////////////////////////////////////////////// // 导出的数据结构 /////////////////////////////////////////////////////////////////////////// #pragma pack(push) #pragma pack(1) -typedef struct -{ - TCHAR tszIPAddr[128]; - ENUM_RFCCOMPONENTS_PROXY_STATUS enStatus; - SOCKET hSocket; - BOOL bClose; -}PROXYPROTOCOL_CLIENTINFO; + #pragma pack(pop) \ No newline at end of file -- Gitee From a900a2ff91a6189c1c7c7bd5b9cff7a0b8eb1c27 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 13 Jun 2022 11:01:12 +0800 Subject: [PATCH 12/22] fixed:forward recv and close --- XEngine_Source/XEngine.sln | 20 ++++++++++++++++ .../XEngine_ServiceApp/XEngine_Network.cpp | 24 +++++++++++++++++++ .../XEngine_ServiceApp.vcxproj | 4 ++-- .../XEngine_ServiceApp.vcxproj.filters | 4 ++-- 4 files changed, 48 insertions(+), 4 deletions(-) diff --git a/XEngine_Source/XEngine.sln b/XEngine_Source/XEngine.sln index 6fc27e9..02c92cb 100644 --- a/XEngine_Source/XEngine.sln +++ b/XEngine_Source/XEngine.sln @@ -18,6 +18,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "XEngine_ThirdPart", "XEngin EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jsoncpp", "XEngine_ThirdPart\jsoncpp\jsoncpp.vcxproj", "{F1736B3F-03A2-4FC7-B045-A12BA8D724FB}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_ModuleSession", "XEngine_ModuleSession\XEngine_ModuleSession.vcxproj", "{237AF017-9AD2-44D8-A6C4-ECDEF7674FF2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_ModuleProtocol", "XEngine_ModuleProtocol\XEngine_ModuleProtocol.vcxproj", "{9512A610-7197-4522-9AEF-1486619C99FE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -58,6 +62,22 @@ Global {F1736B3F-03A2-4FC7-B045-A12BA8D724FB}.Release|x64.Build.0 = Release|x64 {F1736B3F-03A2-4FC7-B045-A12BA8D724FB}.Release|x86.ActiveCfg = Release|Win32 {F1736B3F-03A2-4FC7-B045-A12BA8D724FB}.Release|x86.Build.0 = Release|Win32 + {237AF017-9AD2-44D8-A6C4-ECDEF7674FF2}.Debug|x64.ActiveCfg = Debug|x64 + {237AF017-9AD2-44D8-A6C4-ECDEF7674FF2}.Debug|x64.Build.0 = Debug|x64 + {237AF017-9AD2-44D8-A6C4-ECDEF7674FF2}.Debug|x86.ActiveCfg = Debug|Win32 + {237AF017-9AD2-44D8-A6C4-ECDEF7674FF2}.Debug|x86.Build.0 = Debug|Win32 + {237AF017-9AD2-44D8-A6C4-ECDEF7674FF2}.Release|x64.ActiveCfg = Release|x64 + {237AF017-9AD2-44D8-A6C4-ECDEF7674FF2}.Release|x64.Build.0 = Release|x64 + {237AF017-9AD2-44D8-A6C4-ECDEF7674FF2}.Release|x86.ActiveCfg = Release|Win32 + {237AF017-9AD2-44D8-A6C4-ECDEF7674FF2}.Release|x86.Build.0 = Release|Win32 + {9512A610-7197-4522-9AEF-1486619C99FE}.Debug|x64.ActiveCfg = Debug|x64 + {9512A610-7197-4522-9AEF-1486619C99FE}.Debug|x64.Build.0 = Debug|x64 + {9512A610-7197-4522-9AEF-1486619C99FE}.Debug|x86.ActiveCfg = Debug|Win32 + {9512A610-7197-4522-9AEF-1486619C99FE}.Debug|x86.Build.0 = Debug|Win32 + {9512A610-7197-4522-9AEF-1486619C99FE}.Release|x64.ActiveCfg = Release|x64 + {9512A610-7197-4522-9AEF-1486619C99FE}.Release|x64.Build.0 = Release|x64 + {9512A610-7197-4522-9AEF-1486619C99FE}.Release|x86.ActiveCfg = Release|Win32 + {9512A610-7197-4522-9AEF-1486619C99FE}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp index 5d6e37e..d9b27f3 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp @@ -67,6 +67,22 @@ BOOL __stdcall Network_Callback_ForwardLogin(LPCTSTR lpszClientAddr, SOCKET hSoc } void __stdcall Network_Callback_ForwardRecv(LPCTSTR lpszClientAddr, SOCKET hSocket, LPCTSTR lpszRecvMsg, int nMsgLen, LPVOID lParam) { + TCHAR tszDstAddr[128]; + memset(tszDstAddr, '\0', sizeof(tszDstAddr)); + + if (ModuleSession_Forward_Get(lpszClientAddr, tszDstAddr)) + { + //如果有转发,直接转发 + XEngine_Network_Send(tszDstAddr, lpszRecvMsg, nMsgLen, XENGINE_CLIENT_NETTYPE_FORWARD); + } + else + { + //没有绑定转发,投递到包中处理 + if (!HelpComponents_Datas_PostEx(xhForwardPacket, lpszClientAddr, lpszRecvMsg, nMsgLen)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Forward客户端:%s,投递数据包失败,大小:%d,错误:%lX"), lpszClientAddr, nMsgLen, Packets_GetLastError()); + } + } SocketOpt_HeartBeat_ActiveAddrEx(xhForwardHeart, lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _T("Forward客户端:%s,投递数据包到组包队列成功,大小:%d"), lpszClientAddr, nMsgLen); } @@ -147,6 +163,14 @@ void XEngine_Network_Close(LPCTSTR lpszClientAddr, int nIPProto, int nCloseType) SocketOpt_HeartBeat_DeleteAddrEx(xhForwardHeart, lpszClientAddr); NetCore_TCPXCore_CloseForClientEx(xhForwardSocket, lpszClientAddr); } + TCHAR tszClientAddr[128]; + memset(tszClientAddr, '\0', sizeof(tszClientAddr)); + ModuleSession_Forward_Delete(lpszClientAddr, tszClientAddr); + + if (_tcslen(tszClientAddr) > 0) + { + XEngine_Network_Close(tszClientAddr, XENGINE_CLIENT_NETTYPE_FORWARD, XENGINE_CLIENT_CLOSE_SERVICE); + } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType); } else diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj index 59ecb7b..9b17ecf 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj @@ -153,7 +153,7 @@ - + @@ -161,7 +161,7 @@ - + diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj.filters b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj.filters index 24c71c0..808b1e5 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj.filters +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj.filters @@ -30,7 +30,7 @@ 源文件 - + 源文件 @@ -50,7 +50,7 @@ 头文件 - + 头文件 -- Gitee From 4d53a8257283aaeef4b7b48d5a1ce3705e04bea1 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 13 Jun 2022 11:01:53 +0800 Subject: [PATCH 13/22] modify:get xengine ver method --- XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp index a7671b5..b0c84e8 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp @@ -251,7 +251,8 @@ int main(int argc, char** argv) XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("启动服务中,Forward服务没有被启用")); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("所有服务成功启动,服务运行中,XEngine版本:%s,服务版本;%s,发行次数:%d。。。"), XENGINE_VERSION_STR, st_ServiceConfig.st_XVer.pStl_ListVer->front().c_str(), st_ServiceConfig.st_XVer.pStl_ListVer->size()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("所有服务成功启动,服务运行中,XEngine版本:%s,服务版本;%s,发行次数:%d。。。"), BaseLib_OperatorVer_XGetStr(), st_ServiceConfig.st_XVer.pStl_ListVer->front().c_str(), st_ServiceConfig.st_XVer.pStl_ListVer->size()); + while (bIsRun) { std::this_thread::sleep_for(std::chrono::seconds(1)); -- Gitee From 2b49bf811b171cec1b5c8eac0dac1a7465a28ac3 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 13 Jun 2022 11:23:57 +0800 Subject: [PATCH 14/22] update:vs2019 to vs2022 --- .../APPClient_SocksExample/APPClient_SocksExample.cpp | 2 +- .../APPClient_SocksExample/APPClient_SocksExample.vcxproj | 8 ++++---- .../APPClient_TunnelExample/APPClient_TunnelExample.cpp | 2 +- .../APPClient_TunnelExample.vcxproj | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.cpp b/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.cpp index c77b0a5..9c521af 100644 --- a/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.cpp +++ b/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.cpp @@ -20,7 +20,7 @@ #include "../../XEngine_Source/XEngine_UserProtocol.h" //需要优先配置XEngine -//WINDOWS支持VS2019 x86 debug 编译调试 +//WINDOWS支持VS2022 x86 debug 编译调试 //linux使用下面的命令编译 //g++ -std=c++17 -Wall -g APPClient_SocksExample.cpp -o APPClient_SocksExample.exe -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L /usr/local/lib/XEngine_Release/XEngine_Client -L /usr/local/lib/XEngine_Release/XEngine_RfcComponents -lXEngine_BaseLib -lXClient_Socket -lRfcComponents_ProxyProtocol int main(int argc, char** argv) diff --git a/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.vcxproj b/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.vcxproj index 4d9b108..5c0ebb1 100644 --- a/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.vcxproj +++ b/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.vcxproj @@ -29,26 +29,26 @@ Application true - v142 + v143 MultiByte Application false - v142 + v143 true Unicode Application true - v142 + v143 Unicode Application false - v142 + v143 true Unicode diff --git a/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.cpp b/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.cpp index 9584d4b..a11d0cb 100644 --- a/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.cpp +++ b/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.cpp @@ -20,7 +20,7 @@ #include "../../XEngine_Source/XEngine_UserProtocol.h" //需要优先配置XEngine -//WINDOWS支持VS2019 x86 debug 编译调试 +//WINDOWS支持VS2022 x86 debug 编译调试 //linux使用下面的命令编译 //g++ -std=c++17 -Wall -g APPClient_TunnelExample.cpp -o APPClient_TunnelExample.exe -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L /usr/local/lib/XEngine_Release/XEngine_Client -L /usr/local/lib/XEngine_Release/XEngine_RfcComponents -lXEngine_BaseLib -lXClient_Socket -lRfcComponents_ProxyProtocol int main(int argc, char** argv) diff --git a/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.vcxproj b/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.vcxproj index 1cc92e0..fb17144 100644 --- a/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.vcxproj +++ b/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.vcxproj @@ -29,26 +29,26 @@ Application true - v142 + v143 MultiByte Application false - v142 + v143 true Unicode Application true - v142 + v143 Unicode Application false - v142 + v143 true Unicode -- Gitee From ffb8bf7a4ab107304a22062eb84e51890823f3c1 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 13 Jun 2022 13:14:51 +0800 Subject: [PATCH 15/22] fixed:build error --- XEngine_Source/Makefile | 8 ++++++- .../XEngine_ModuleProtocol/Makefile | 24 ++++++++++--------- .../XEngine_ModuleProtocol.vcxproj | 22 ++++++++++++----- .../XEngine_ModuleSession.vcxproj | 24 ++++++++++++++----- 4 files changed, 54 insertions(+), 24 deletions(-) diff --git a/XEngine_Source/Makefile b/XEngine_Source/Makefile index b666bf3..f828b1d 100644 --- a/XEngine_Source/Makefile +++ b/XEngine_Source/Makefile @@ -7,9 +7,11 @@ THIRDPART_MODULE_JSONCPP = ./XEngine_ThirdPart/jsoncpp MODULE_CONFIGURE_PATH = ./XEngine_ModuleConfigure MODULE_AUTHORIZE_PATH = ./XEngine_ModuleAuthorize +MODULE_PROTOCOL_PATH = ./XEngine_ModuleProtocol +MODULE_SESSION_PATH = ./XEngine_ModuleSession APP_SERVICE_PATH = ./XEngine_ServiceApp -XENGINE_MODULES = libjsoncpp.so libXEngine_ModuleConfigure.so libXEngine_ModuleAuthorize.so XEngine_ServiceApp.exe +XENGINE_MODULES = libjsoncpp.so libXEngine_ModuleConfigure.so libXEngine_ModuleAuthorize.so libXEngine_ModuleProtocol.so libXEngine_ModuleSession.so XEngine_ServiceApp.exe .PHONY:MakeAll MakeAll:$(XENGINE_MODULES) @@ -21,6 +23,10 @@ libXEngine_ModuleConfigure.so: make -C $(MODULE_CONFIGURE_PATH) $(FLAGS) libXEngine_ModuleAuthorize.so: make -C $(MODULE_AUTHORIZE_PATH) $(FLAGS) +libXEngine_ModuleProtocol.so: + make -C $(MODULE_PROTOCOL_PATH) $(FLAGS) +libXEngine_ModuleSession.so: + make -C $(MODULE_SESSION_PATH) $(FLAGS) XEngine_ServiceApp.exe: make -C $(APP_SERVICE_PATH) $(FLAGS) diff --git a/XEngine_Source/XEngine_ModuleProtocol/Makefile b/XEngine_Source/XEngine_ModuleProtocol/Makefile index 9b91388..f584fdc 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/Makefile +++ b/XEngine_Source/XEngine_ModuleProtocol/Makefile @@ -1,12 +1,12 @@ CC = g++ -Wall -std=c++17 -fPIC RELEASE = 0 UNICODE = 0 -INCLUDE = -I ./ -LOADBIN = -LIB = +INCLUDE = -I ./ -I ../XEngine_ThirdPart/jsoncpp +LOADBIN = -L ../XEngine_ThirdPart/jsoncpp +LIB = -ljsoncpp LIBEX = -ldl -lpthread -LOADSO = -Wl,-rpath= -LIBINCLUDE = ModuleSession_Forward.o pch.o +LOADSO = -Wl,-rpath=./,--disable-new-dtags +LIBINCLUDE = ModuleProtocol_Packet.o ModuleProtocol_Parse.o pch.o ifeq ($(RELEASE),1) FLAGS = -c -O2 @@ -24,18 +24,20 @@ endif all:$(LIBINCLUDE) - $(CC) $(DEBUG) $(LIBINCLUDE) -o libXEngine_ModuleSession.so -shared -fPIC $(LOADBIN) $(LIB) $(LIBEX) $(LOADSO) + $(CC) $(DEBUG) $(LIBINCLUDE) -o libXEngine_ModuleProtocol.so -shared -fPIC $(LOADBIN) $(LIB) $(LIBEX) $(LOADSO) + +ModuleProtocol_Packet.o:./ModuleProtocol_Packet/ModuleProtocol_Packet.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./ModuleProtocol_Packet/ModuleProtocol_Packet.cpp +ModuleProtocol_Parse.o:./ModuleProtocol_Parse/ModuleProtocol_Parse.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./ModuleProtocol_Parse/ModuleProtocol_Parse.cpp -ModuleSession_Forward.o:./ModuleSession_Forward/ModuleSession_Forward.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./ModuleSession_Forward/ModuleSession_Forward.cpp - pch.o:./pch.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./pch.cpp InstallAll:InstallSo -InstallSo:./libXEngine_ModuleSession.so - cp ./libXEngine_ModuleSession.so ../../XEngine_Release/libXEngine_ModuleSession.so +InstallSo:./libXEngine_ModuleProtocol.so + cp ./libXEngine_ModuleProtocol.so ../../XEngine_Release/libXEngine_ModuleProtocol.so CleanAll:CleanObj CleanMk diff --git a/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj index 8f1e1d0..be8065e 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj +++ b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj @@ -37,20 +37,20 @@ false v143 true - Unicode + MultiByte DynamicLibrary true v143 - Unicode + MultiByte DynamicLibrary false v143 true - Unicode + MultiByte @@ -74,6 +74,16 @@ $(XEngine_Include);../XEngine_ThirdPart/jsoncpp;$(IncludePath) $(XEngine_Lib32);$(LibraryPath) + + $(XEngine_Include);../XEngine_ThirdPart/jsoncpp;$(IncludePath) + $(XEngine_Lib32);$(LibraryPath) + + + $(XEngine_Include);../XEngine_ThirdPart/jsoncpp;$(IncludePath) + + + $(XEngine_Include);../XEngine_ThirdPart/jsoncpp;$(IncludePath) + Level3 @@ -96,7 +106,7 @@ true true true - WIN32;NDEBUG;XENGINEMODULEPROTOCOL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + WIN32;NDEBUG;XENGINEMODULEPROTOCOL_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true Use pch.h @@ -114,7 +124,7 @@ Level3 true - _DEBUG;XENGINEMODULEPROTOCOL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + _DEBUG;XENGINEMODULEPROTOCOL_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true Use pch.h @@ -132,7 +142,7 @@ true true true - NDEBUG;XENGINEMODULEPROTOCOL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + NDEBUG;XENGINEMODULEPROTOCOL_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true Use pch.h diff --git a/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj index 48e1d6a..706d81b 100644 --- a/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj +++ b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj @@ -37,20 +37,20 @@ false v143 true - Unicode + MultiByte DynamicLibrary true v143 - Unicode + MultiByte DynamicLibrary false v143 true - Unicode + MultiByte @@ -74,6 +74,18 @@ $(XEngine_Include);$(IncludePath) $(XEngine_Lib32);$(LibraryPath) + + $(XEngine_Include);$(IncludePath) + $(XEngine_Lib32);$(LibraryPath) + + + $(XEngine_Include);$(IncludePath) + $(XEngine_Lib64);$(LibraryPath) + + + $(XEngine_Include);$(IncludePath) + $(XEngine_Lib64);$(LibraryPath) + Level3 @@ -96,7 +108,7 @@ true true true - WIN32;NDEBUG;XENGINEMODULESESSION_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + WIN32;NDEBUG;XENGINEMODULESESSION_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true Use pch.h @@ -114,7 +126,7 @@ Level3 true - _DEBUG;XENGINEMODULESESSION_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + _DEBUG;XENGINEMODULESESSION_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true Use pch.h @@ -132,7 +144,7 @@ true true true - NDEBUG;XENGINEMODULESESSION_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + NDEBUG;XENGINEMODULESESSION_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true Use pch.h -- Gitee From 493b88ecb3f736a60c0302651c2132e32ced3093 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 13 Jun 2022 15:01:25 +0800 Subject: [PATCH 16/22] modify:will be process failed in login --- .../ModuleProtocol_Packet.cpp | 1 - .../ModuleSession_Error.h | 3 ++- .../ModuleSession_Forward.cpp | 8 ++++++++ .../XEngine_ServiceApp/XEngine_ForwardTask.cpp | 18 ++++++++++++++---- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp index 6dbc958..864d3c2 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp @@ -76,7 +76,6 @@ BOOL CModuleProtocol_Packet::ModuleProtocol_Packet_ForwardList(TCHAR* ptszMsgBuf st_JsonRoot["Array"] = st_JsonArray; pSt_ProtocolHdr->unPacketSize = st_JsonRoot.toStyledString().length(); - pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LISTREP; *pInt_Len = pSt_ProtocolHdr->unPacketSize; memcpy(ptszMsgBuffer, pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR)); diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Error.h b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Error.h index 32f3eb9..73ac198 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Error.h +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Error.h @@ -13,4 +13,5 @@ #define ERROR_MODULE_SESSION_FORWARD_PARAMENT 0xC0001 //参数错误 #define ERROR_MODULE_SESSION_FORWARD_NOTFOUND 0xC0002 //没有找到 #define ERROR_MODULE_SESSION_FORWARD_BIND 0xC0003 //已经绑定 -#define ERROR_MODULE_SESSION_FORWARD_NOTFORWARD 0xC0004 //没有转发 \ No newline at end of file +#define ERROR_MODULE_SESSION_FORWARD_NOTFORWARD 0xC0004 //没有转发 +#define ERROR_MODULE_SESSION_FORWARD_EXIST 0xC0005 //已经存在 \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp index def3ec1..9c35793 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp @@ -51,6 +51,14 @@ BOOL CModuleSession_Forward::ModuleSession_Forward_Insert(LPCTSTR lpszAddr) _tcscpy(st_Forward.tszSrcAddr, lpszAddr); st_Locker.lock(); + unordered_map::const_iterator stl_MapIterator = stl_MapSession.find(lpszAddr); + if (stl_MapIterator != stl_MapSession.end()) + { + Session_IsErrorOccur = TRUE; + Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_EXIST; + st_Locker.unlock(); + return FALSE; + } stl_MapSession.insert(make_pair(lpszAddr, st_Forward)); st_Locker.unlock(); return TRUE; diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp index a9c497d..25eee39 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp @@ -71,10 +71,20 @@ BOOL XEngine_Forward_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int n { int nListCount = 0; TCHAR** pptszListAddr; - ModuleSession_Forward_List(&pptszListAddr, &nListCount, lpszClientAddr); - ModuleProtocol_Packet_ForwardList(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, &pptszListAddr, nListCount); - XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_CLIENT_NETTYPE_FORWARD); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,请求可用转发列表成功"), lpszClientAddr); + + pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LISTREP; + if (ModuleSession_Forward_List(&pptszListAddr, &nListCount, lpszClientAddr)) + { + ModuleProtocol_Packet_ForwardList(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, &pptszListAddr, nListCount); + XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_CLIENT_NETTYPE_FORWARD); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,请求可用转发列表成功"), lpszClientAddr); + } + else + { + pSt_ProtocolHdr->unPacketSize = 0; + XEngine_Network_Send(lpszClientAddr, (LPCTSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,请求可用转发列表失败,错误;%lx"), lpszClientAddr, ModuleSession_GetLastError()); + } } else if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_BINDREQ == pSt_ProtocolHdr->unOperatorCode) { -- Gitee From 3323074646a7c66a16f313941805145e726e88a4 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 14 Jun 2022 11:07:10 +0800 Subject: [PATCH 17/22] fixed:ModuleProtocol_Packet_ForwardList export len is incorrent --- .../ModuleProtocol_Packet/ModuleProtocol_Packet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp index 864d3c2..cc163c6 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp @@ -77,7 +77,7 @@ BOOL CModuleProtocol_Packet::ModuleProtocol_Packet_ForwardList(TCHAR* ptszMsgBuf pSt_ProtocolHdr->unPacketSize = st_JsonRoot.toStyledString().length(); - *pInt_Len = pSt_ProtocolHdr->unPacketSize; + *pInt_Len = sizeof(XENGINE_PROTOCOLHDR) + pSt_ProtocolHdr->unPacketSize; memcpy(ptszMsgBuffer, pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR)); memcpy(ptszMsgBuffer + sizeof(XENGINE_PROTOCOLHDR), st_JsonRoot.toStyledString().c_str(), pSt_ProtocolHdr->unPacketSize); return TRUE; -- Gitee From 775e4929fda6d6f5873a2dd1799fcfe31809cc3f Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 14 Jun 2022 13:05:13 +0800 Subject: [PATCH 18/22] added:forward example --- .../APPClient_ForwardExample.cpp | 180 ++++++++++++++++++ .../APPClient_ForwardExample.vcxproj | 139 ++++++++++++++ .../APPClient_ForwardExample.vcxproj.filters | 22 +++ .../APPClient_ForwardExample.vcxproj.user | 4 + XEngine_APPClient/XEngine_APPClient.sln | 14 +- 5 files changed, 357 insertions(+), 2 deletions(-) create mode 100644 XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.cpp create mode 100644 XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.vcxproj create mode 100644 XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.vcxproj.filters create mode 100644 XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.vcxproj.user diff --git a/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.cpp b/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.cpp new file mode 100644 index 0000000..708502d --- /dev/null +++ b/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.cpp @@ -0,0 +1,180 @@ +#ifdef _MSC_BUILD +#include +#include +#pragma comment(lib,"Ws2_32.lib") +#pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib.lib") +#pragma comment(lib,"XEngine_Client/XClient_Socket.lib") +#pragma comment(lib,"XEngine_RfcComponents/RfcComponents_ProxyProtocol") +#pragma comment(lib,"../../XEngine_Source//Debug/jsoncpp") +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "../../XEngine_Source/XEngine_UserProtocol.h" + +//需要优先配置XEngine +//WINDOWS支持VS2022 x86 debug 编译调试 +//linux使用下面的命令编译 +//g++ -std=c++17 -Wall -g APPClient_ForwardExample.cpp -o APPClient_ForwardExample.exe -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L /usr/local/lib/XEngine_Release/XEngine_Client -L /usr/local/lib/XEngine_Release/XEngine_RfcComponents -lXEngine_BaseLib -lXClient_Socket -lRfcComponents_ProxyProtocol +int main(int argc, char** argv) +{ +#ifdef _MSC_BUILD + WSADATA st_WSAData; + WSAStartup(MAKEWORD(2, 2), &st_WSAData); +#endif + SOCKET m_Socket; + LPCTSTR lpszServiceAddr = _T("127.0.0.1"); + if (!XClient_TCPSelect_Create(&m_Socket, lpszServiceAddr, 5402)) + { + printf("连接失败!错误:%lX\n", XClient_GetLastError()); + return 0; + } + printf("连接成功!\n"); + + int nMsgLen = 0; + XENGINE_PROTOCOLHDR st_ProtocolHdr; + memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR)); + //登录 + st_ProtocolHdr.wHeader = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER; + st_ProtocolHdr.wTail = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL; + st_ProtocolHdr.byIsReply = true; + st_ProtocolHdr.byVersion = 0; + st_ProtocolHdr.unOperatorType = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_AUTH; + st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LOGREQ; + + if (!XClient_TCPSelect_SendMsg(m_Socket, (LPCTSTR)&st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR))) + { + printf("发送失败!\n"); + return 0; + } + + nMsgLen = 0; + TCHAR* ptszMsgBuffer = NULL; + memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR)); + if (!XClient_TCPSelect_RecvPkt(m_Socket, &ptszMsgBuffer, &nMsgLen, &st_ProtocolHdr)) + { + printf("接受数据失败!\n"); + return 0; + } + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + //列举 + st_ProtocolHdr.wHeader = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER; + st_ProtocolHdr.wTail = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL; + st_ProtocolHdr.byIsReply = true; + st_ProtocolHdr.byVersion = 0; + st_ProtocolHdr.unOperatorType = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_USER_FORWARD; + st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LISTREQ; + if (!XClient_TCPSelect_SendMsg(m_Socket, (LPCTSTR)&st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR))) + { + printf("发送失败!\n"); + return 0; + } + nMsgLen = 0; + if (!XClient_TCPSelect_RecvPkt(m_Socket, &ptszMsgBuffer, &nMsgLen, &st_ProtocolHdr)) + { + printf("接受数据失败!\n"); + return 0; + } + printf("%s\n", ptszMsgBuffer); + + Json::Value st_JsonAddr; + JSONCPP_STRING st_JsonError; + Json::CharReaderBuilder st_JsonBuilder; + //开始解析配置文件 + std::unique_ptr const pSt_JsonReader(st_JsonBuilder.newCharReader()); + if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonAddr, &st_JsonError)) + { + return FALSE; + } + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + if (st_JsonAddr["Count"].asInt() > 0) + { + //请求绑定 + Json::Value st_JsonRoot; + Json::Value st_JsonArray = st_JsonAddr["Array"]; + st_JsonRoot["tszDstAddr"] = st_JsonArray[0].asCString(); + + st_ProtocolHdr.wHeader = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER; + st_ProtocolHdr.wTail = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL; + st_ProtocolHdr.byIsReply = true; + st_ProtocolHdr.byVersion = 0; + st_ProtocolHdr.unPacketSize = st_JsonRoot.toStyledString().length(); + st_ProtocolHdr.unOperatorType = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_USER_FORWARD; + st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_BINDREQ; + if (!XClient_TCPSelect_SendMsg(m_Socket, (LPCTSTR)&st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR))) + { + printf("发送失败!\n"); + return 0; + } + if (!XClient_TCPSelect_SendMsg(m_Socket, st_JsonRoot.toStyledString().c_str(), st_ProtocolHdr.unPacketSize)) + { + printf("发送失败!\n"); + return 0; + } + nMsgLen = 2048; + if (!XClient_TCPSelect_RecvPkt(m_Socket, &ptszMsgBuffer, &nMsgLen, &st_ProtocolHdr)) + { + printf("接受数据失败!\n"); + return 0; + } + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + //成功后发送数据 + for (int i = 0; i < 10; i++) + { + XClient_TCPSelect_SendMsg(m_Socket, "hello", 5); + std::this_thread::sleep_for(std::chrono::seconds(1)); + printf("send 5 str\n"); + } + } + else + { + BOOL bGet = FALSE; + while (1) + { + if (bGet) + { + //收到转发请求 + nMsgLen = 2048; + TCHAR tszMsgBuffer[2048]; + + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + + if (XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen, FALSE)) + { + printf("%s\n", tszMsgBuffer); + } + } + else + { + if (XClient_TCPSelect_RecvPkt(m_Socket, &ptszMsgBuffer, &nMsgLen, &st_ProtocolHdr)) + { + //收到转发请求 + if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_BINDREQ == st_ProtocolHdr.unOperatorCode) + { + bGet = TRUE; + printf("get forward\n"); + } + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + } + } + } + } + + std::this_thread::sleep_for(std::chrono::seconds(5000)); + XClient_TCPSelect_Close(m_Socket); +#ifdef _MSC_BUILD + WSACleanup(); +#endif + return 0; +} \ No newline at end of file diff --git a/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.vcxproj b/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.vcxproj new file mode 100644 index 0000000..821892a --- /dev/null +++ b/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.vcxproj @@ -0,0 +1,139 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {340ebea1-a232-49ce-a9a5-fb66c114aa48} + APPClientForwardExample + 10.0 + + + + Application + true + v143 + MultiByte + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + $(XEngine_Include);../../XEngine_Source/XEngine_ThirdPart/jsoncpp;$(IncludePath) + $(XEngine_Lib32);$(LibraryPath) + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.vcxproj.filters b/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.vcxproj.filters new file mode 100644 index 0000000..f6f512a --- /dev/null +++ b/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 源文件 + + + \ No newline at end of file diff --git a/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.vcxproj.user b/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/XEngine_APPClient/XEngine_APPClient.sln b/XEngine_APPClient/XEngine_APPClient.sln index a228438..d00c05d 100644 --- a/XEngine_APPClient/XEngine_APPClient.sln +++ b/XEngine_APPClient/XEngine_APPClient.sln @@ -1,12 +1,14 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31911.196 +# Visual Studio Version 17 +VisualStudioVersion = 17.2.32526.322 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APPClient_SocksExample", "APPClient_SocksExample\APPClient_SocksExample.vcxproj", "{420E0F5F-CEFD-4BDF-A61A-BC23B7803549}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APPClient_TunnelExample", "APPClient_TunnelExample\APPClient_TunnelExample.vcxproj", "{BFA995E0-82C3-47D6-B421-08937DEE7F18}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APPClient_ForwardExample", "APPClient_ForwardExample\APPClient_ForwardExample.vcxproj", "{340EBEA1-A232-49CE-A9A5-FB66C114AA48}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -31,6 +33,14 @@ Global {BFA995E0-82C3-47D6-B421-08937DEE7F18}.Release|x64.Build.0 = Release|x64 {BFA995E0-82C3-47D6-B421-08937DEE7F18}.Release|x86.ActiveCfg = Release|Win32 {BFA995E0-82C3-47D6-B421-08937DEE7F18}.Release|x86.Build.0 = Release|Win32 + {340EBEA1-A232-49CE-A9A5-FB66C114AA48}.Debug|x64.ActiveCfg = Debug|x64 + {340EBEA1-A232-49CE-A9A5-FB66C114AA48}.Debug|x64.Build.0 = Debug|x64 + {340EBEA1-A232-49CE-A9A5-FB66C114AA48}.Debug|x86.ActiveCfg = Debug|Win32 + {340EBEA1-A232-49CE-A9A5-FB66C114AA48}.Debug|x86.Build.0 = Debug|Win32 + {340EBEA1-A232-49CE-A9A5-FB66C114AA48}.Release|x64.ActiveCfg = Release|x64 + {340EBEA1-A232-49CE-A9A5-FB66C114AA48}.Release|x64.Build.0 = Release|x64 + {340EBEA1-A232-49CE-A9A5-FB66C114AA48}.Release|x86.ActiveCfg = Release|Win32 + {340EBEA1-A232-49CE-A9A5-FB66C114AA48}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE -- Gitee From b6bd24b33c9a5bc37056f4cbd3d5d1a4fe732d8b Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 15 Jun 2022 13:29:58 +0800 Subject: [PATCH 19/22] added:example vscopy file --- XEngine_APPClient/VSCopy.bat | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 XEngine_APPClient/VSCopy.bat diff --git a/XEngine_APPClient/VSCopy.bat b/XEngine_APPClient/VSCopy.bat new file mode 100644 index 0000000..2c11177 --- /dev/null +++ b/XEngine_APPClient/VSCopy.bat @@ -0,0 +1,4 @@ +copy /y "%XEngine_Lib32%\XEngine_BaseLib\XEngine_BaseLib.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_BaseLib\XEngine_Algorithm.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_Client\XClient_Socket.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_RfcComponents\RfcComponents_ProxyProtocol.dll" "./" \ No newline at end of file -- Gitee From d21fa216dde9674f7199a8c6e5ecfc78b9a6bfbb Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 15 Jun 2022 13:30:32 +0800 Subject: [PATCH 20/22] update:configure file --- .../XEngine_Config/XEngine_Config.json | 63 ++++++++++--------- 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json index 82e9349..8a4d3c3 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -1,31 +1,36 @@ { - "tszIPAddr":"192.168.1.12", - "bDeamon":0, - "nSocksPort":5400, - "nTunnelPort":5401, - "XMax":{ - "nMaxClient":10000, - "nMaxQueue":10000, - "nIOThread":1 - }, - "XTime":{ - "nTimeCheck":3, - "nSocksTimeOut":0, - "nTunnelTimeOut":0 - }, - "XLog":{ - "MaxSize":1024000, - "MaxCount":10, - "LogLeave":32, - "tszLogFile":"./XEngine_Log/XEngine_ServiceApp.log" - }, - "XAuth":{ - "bAuth":2, - "tszAuthFile":"./XEngine_Config/UserList.txt" - }, - "XVer":[ - "1.2.0.1001 Build20220413", - "1.1.0.1001 Build20211231", - "1.0.0.1001 Build20211211" - ] + "tszIPAddr": "192.168.1.12", + "bDeamon": 0, + "nSocksPort": 5400, + "nTunnelPort": 5401, + "nForwardPort": 5402, + "XMax": { + "nMaxClient": 10000, + "nMaxQueue": 10000, + "nIOThread": 1, + "nForwardThread": 1 + }, + "XTime": { + "nTimeCheck": 3, + "nSocksTimeOut": 0, + "nTunnelTimeOut": 0, + "nForwardTimeOut": 0 + }, + "XLog": { + "MaxSize": 1024000, + "MaxCount": 10, + "LogLeave": 32, + "tszLogFile": "./XEngine_Log/XEngine_ServiceApp.log" + }, + "XAuth": { + "bAuth": 2, + "tszAuthFile": "./XEngine_Config/UserList.txt" + }, + "XVer": [ + "1.4.0.1001 Build20220617", + "1.3.0.1001 Build20220531", + "1.2.0.1001 Build20220413", + "1.1.0.1001 Build20211231", + "1.0.0.1001 Build20211211" + ] } \ No newline at end of file -- Gitee From e7b1139c19d94c2b80ade5e6508a5b137b6ed0e9 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 15 Jun 2022 17:01:07 +0800 Subject: [PATCH 21/22] update:readme and docment --- README.en.md | 18 ++++++++++-------- README.md | 18 ++++++++++-------- XEngine_Docment/Docment_en.docx | Bin 244824 -> 250461 bytes XEngine_Docment/Docment_zh.docx | Bin 243081 -> 248533 bytes 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/README.en.md b/README.en.md index c64a46a..ba56cec 100644 --- a/README.en.md +++ b/README.en.md @@ -1,9 +1,10 @@ # XEngine_ProxyServer -we have a development and a master branch. If you want to use it, please use the code under the master branch +we have a development and a master branch. If you want to use it, please use the code under the master branch +As long as the repository is not in suspended state, we will maintain and develop it all the time, please use it with confidence #### Description -c c++ SOCKS5代理服务 HTTP Tunnel隧道代理服务 -c c++ Socks5 Proxy Service HTTP Tunnel Proxy Service +c c++ SOCKS5代理服务 HTTP Tunnel隧道代理服务 tcp转发服务 +c c++ Socks5 Proxy Service,HTTP Tunnel Proxy Service,tcp forward service #### Software Architecture the software developed based on xengine,using c/c++ development @@ -13,11 +14,12 @@ This software is a standard proxy server that supports Socks5 and HTTP tunnel pr this software support following features 1. SOCKS5 proxy 2. Tunnel proxy -3. support Permission Validation -4. operator log -5. encrypt Communication(planning) -6. load balanc(planning) -7. custom cert proxy protocol(planning) +3. forward proxy +4. support Permission Validation +5. operator log +6. encrypt Communication(planning) +7. load balanc(planning) +8. custom cert proxy protocol(planning) ## install diff --git a/README.md b/README.md index 43b5964..dfb8f26 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ [中文](README.md) || [English](README.en.md) # XEngine_ProxyServer 本仓库有开发和主分支,如果要使用,请使用master分支下的代码 +只要仓库不是在暂停状态,那么就会有人一直维护和开发,请放心使用 ## 介绍 -c c++ SOCKS5代理服务 HTTP Tunnel隧道代理服务 -c c++ Socks5 Proxy Service HTTP Tunnel Proxy Service +c c++ SOCKS5代理服务 HTTP Tunnel隧道代理服务 tcp转发服务 +c c++ Socks5 Proxy Service,HTTP Tunnel Proxy Service,tcp forward service ## 软件架构 此软件基于XEngine开发.采用C/C++作为开发语言 @@ -12,12 +13,13 @@ c c++ Socks5 Proxy Service HTTP Tunnel Proxy Service ## 软件特性 此软件支持以下特性 1. SOCKS5代理 -2. Tunnel代理 -3. 权限验证 -4. 操作日志 -5. 加密通信(planning) -6. 负载均衡(planning) -7. 自定义证书代理协议(planning) +2. Tunnel代理 +3. 数据转发服务 +4. 权限验证 +5. 操作日志 +6. 加密通信(planning) +7. 负载均衡(planning) +8. 自定义证书代理协议(planning) ## 安装教程 diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx index 73eb262507cd78e430a18a6a9ee1b7d9cc1c7ede..b6f6834c9885f4c391b73279954a0c273d66a252 100644 GIT binary patch delta 101779 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 YB`G+0 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
FZpB+tTz zMmg~=Gs_P5Sk7S6X)o7c+tm~0DcKIyQT;wL)tO_N(T*_{YX%~x&6>)^V3hY5zGhnv z;7D*7`8#@7_3qtAZ?FCxy^{L`?-<(>yP}o}?QhP2rFx|gIE#-qvoDF7_`H9!n6~i8 z^`;`H&3^#vf@L)Kj)>-$y>s5cxN;wy46EK%E@#}AHMdjjHmiJQ06? HUED=F!Dq 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
Y*31j=%nimIneK)@D1EV9 z(}4k%;bT{{BDBt~43Nl+6v~BnI^cb3^axVg09SJi|g6=S;qIbp!wGbQjEKo@Y!urgl@&bWzuNke}Mv`OJx8Hf>{FQYfSRDh{hcA>tHpS<_-ZjL#93SeH zCze8pt-a$c&~;63(t{Uwpiq}AQ3u3xMes*|MMN=Daj?V$uTx~tzK;z> zyQzh*%?$3W^r+?qiv<+LBp9j`o*x`XHZ_MQbp15k?=V0HWj&G7yR6;%=675DIcdby z>8rwUj3{R=Rj%~T>f-@T0&^jxw*Tu)2s^7&N))inr^4^uVU4@48(0tfu!mq_o~<1Y zg^u1J;1V87XlaYm^!dJA&Y-zuMD^yB z4UUjM4`Y<0khvX=mT;Z?;x7KxQu2r*6y1!mG*qxwqn~vBG6tC^g(1om{Y>iIXg+N~ zXa}-;d_*~yHc8lxVEeAa*uNHFP`=xVJjFiWxZ8R z(HXEEYcIw~zrc;@=PK7eEnAy1j4v)K;^z`+rQ}hfVWrnFXaWqRH{tmU){jVUd`6jY zDc$#oK0@6cq3!F#slUSWIdjPSKo<>dJAsTKxzaUo3orpM9c&wHn1&=>si8v-#Ju)U zL)(mxBzb5O8VrXk>P`$<^BMg{|}^Bq-9-2(TzJC3(`0y-TB;>}GxI_=A; zx(Yw*K;!(u2lIMeN?Bp-I+QD|ggHhdMp8D>_3c_$Q?PoJQ+`2^h)OasP!lhO6>aK^d$Ne3>pmv=Ps4jI(AP=YWM z3jzy|WQj5zV1W<&qFU7}a0oGZ!MmSvvTCw^ofAF<{<}0fU~udzWZj_HlbAFEjU^)2 zab&#z*+pop#9?^t1ixGUr-+m4Bzey2nr$Um{A)h}3@)^~()vwIK0COf+gm&AM{G$- zgr(Nl`j}3C6o$6%d18tNS$5o65I4G@6Nq&u`d4a#Lnlcmb+20wYn@oE@;;~h39WPS zbrAS5P#H#&WGtod(1kPBoJ9sJr1MEkSgaqJ-T-iXr$0TwGM>$$Hnw}ac86<%e~>9j z;z018K}CA+l!Jg{{mS7lGnMg}_Csz0yt$WKq3N43auI1Q`*K0Z`cnO7r;fpFy%4KD z%d6(Yty$|B1PO|FSon6e=*}Y@R{F19aCA3mkZ&{RO2zauhrV`a220Td_Y#M}&vaZE zoDDIA7dEQV5hCwhHCu?*Qyz`R!oq(9hmGq$JdJAyh& z+`aYcQgg>e-bS}HbHeAZ6)MO2Bd`ydGwu2EpL$#t}8VA9*qbF|_R)agxCT6+-ts9Mp zQ1f4&ro7yN$Idl$=%-1{mvDZbNJ3|@!Hlc#0?99sa@GN)^GUiNj!%6f= z$)}VPt(W*FQi@%Ns}D1o-|*?86{E5kffT_xf-9N}H3QMCOu|8-xf89E$zwe+lGx0FpS}rK79W!e{jyOJFn?%|DE3^JF zv&#M))Q5mAA#{|7-3mZ050S!N?S(F#^?ML9es$&4X`B9^qo|Kx|lCZn-rKGw?)9Si!R{jBv$hl*}9r{Fye>eU;f?9c| z6cnAvl?RO|%k5y0aOJ#y5GwrW#1l=jrSbEonm%E7_j zSlVHYi_ZChuc8cHLThWLcfNbHK7<~zT`BFS#$XienuhHK&T zBCta#Z2_>EzvEG&!mo(y`4b;I3%>b;JV=7v5-F8wXs^mFelS8Fd7``|RftDRote`c z|M}Oaovj*nyQxr*{Qh#&onzGiI(2#q=KSqWsEL$ta1;D$5jD_`KP63v(G-(z=yN`= zOBv-Iadfp6S$R}yP3K!o{{v-(aK8+!E>a|=z7jxKo6L`iH;+guV!O%1Dv#E%*_wej z=2w|lZngCFL@uAbK&5+j5Svztc{cOINI`lB5ww8Y8Eq#)pK`Q?Yq6`;T2UB}i%1Skc5p(I)_+esxj_v5UzLP^7&D+u`ii2xHw=SiZio&> z17VXxV~^<{Lod;Hd`{+^c3E@Cze3{@>#NgDIjv4IpEAqDPmU!~B^ZGf9vXDqchp2fihpsu?l)x(wpxXF_1e9PPDWWX)nfnza(xbEVARcu|BjJ4x zviNVs&Ta6TeuD&Rgw%MBe=0BAa#KmsyTtNUxR}$7mg8_wUDc*Gcon6;Px}haD;(4SYJ(# zr<+y5C#UtsDIKsKrTUYL?y+3CQP4=m!Try}wn=3jNAnQM$!8S7!PW(*8WPc=5u%Z8 zuM?wi-7wwN04MWl@0!Hr-dsQ!?}PKvQvaq5gPK;Bl8z2>Jj^52c13l>LVrrG`g+h8 z?E}!XIX$}OeC@+}o?FZBQER(<4ftbEIag71@z0YXx|i2;V@|7y_Dd zbLo%#5ws<9oL5VJami)_@q<5kH~uqnm_!~N_;_*Gvl6~GrIHw+0*RhfmWay`wXuSf z6g2&PM6-85)&6U2ozg#|Wq5-jsR(r!Zle4;`OgiNORdms9qk!CdM3s>OtrX346Av{ zCF2Xj2XEfQG}Q2d0%80CqL`*z<BLJhNLc6{I#X3cM}1jOjmdm6W2_gyiU=8o|`X zXum1Kj)l6WeO~BKiFn0Z=%RE5r z06%MMdm4iWF0)Z-ae^K-h$0c3sp?J9AIlq!w)Ihl)jMO_dJPF{gK+5IpDV?E^GEA9 z#oKY<*>=f1h93%Sj_}e8Y6zNScqegs3jFaczUVUt3VNLyNOp`CnDI6x7r#E!NQ~Gd zr=Z@F-hLqh4^U`{+6jN@{&AH=SSw(&{-m{|lDN_u=@yoF-7xyLTmm)y6*rShZGU1OtPSU6BanLWrJhORlgB<#1}H|6}l8nsE>AC{3qr z+KuIF{R)L$v{8ILl6+iS6dcLs$Fpy2RW_{5o}6P*wr{Hr*R$SdER@Y`i@uxN&`7vJT7E7J78K*jdzsFVkgm^P=s9u= zTQ(D?G%?NO>|Hg-EeORA9vC#08^?$TsSoVx-dsnBUDHi)&S7-k3`CNi^W5-Xl5^CX$^ESNlH>onCQWtG2}8SYcL4um^?M(uVp@pQ1?Y1(jmY>r!a6AQPD_49 zh@un-*`{5DZM!mLS+0VUuGard3LRBs){(xc5BzaZDTd-4!7k&QM;>~h#o{`85~Sl} z$LjSolh%~2>&?c)g5SKk-rqr-7?XYJUS?GMw$j}MOaQO1&gOl%71)Yw;QZcX16=Fn zGMIo)Qe0-cOwzdGE5Xq}N2#vd>i5jPV}p?s_E#$-B6g=g|7ReNh%D=ygwqWuE_hm&TWTW`Daii|f zm^r#J(cJo943N9<*2<$lJ^Kyj0QkroCUt!`5HiwSV$e2WP~mP=cEQ8@nAP-fdSW4! z&=Gg{*HP=$mNDEKc{kjvsl2E4js8$0>_xoB_~Iwyx#|8aRWy7?p`SevCKA7Fo*utK z@$?*f?eF&G>|ArvlcGMim6j^2ANm?-N_}izNv4jNf#I)fdI>d(f_PQvH^AmMq2uOS zOx||E?P!wTvk%}7P5sBcZ;$5|7r}K@jP({{`1oLXC2dkykXFA;3WyPWNeyKKsuWnk z%H+(7Ei=&=S=>e3sDZT~Y29HIs%pZNT(ple)!RDZ^~+Km81QCvb(Lk*KqmEdHK$AV zx<=gqJlVe6aoe;m?FnBIz|W-{P2InVJjk?^IuffnZk^2YKpDFA?0Zs^=b~gxeK_^k zZ`dwx-_D)C^qpHG-n~1%G3N%`bjB6$@z3~`N7!$^?z@eyriP!?#=$jr^TT9N8&H@D zsuVNXyzUo`a;gBoFTQNf5?^Z_c_x2L^s6cBUAY{ojCz`;PP~A{e zrNo834wy@jA*ANa_QC>PNo!!F_S>i)8m!yb0amQWwzgf8HMgZs*f~JUJY)5Bu~EYw zTy1H`15CPVJo`*mpu!8bwEs4n&;dSu%1;A%w~2$ITn&D|GE(jXP}#yg<$;~25n&Y- zE*!_Jo*w(QbteQ^&wR138pt>qY|tA3-`)t4SD8?eTp_JeD;%CXFbwKyk+J`>w0sxO z@Um2IU4N+86x%ta`CpPKNZyi4eAlGxccizzL>u!V*E$2c?Ub)jGkjjuFkk3v&xVNM z6L(ZKS*aBpP@HVuEIo9SpL4s@3ec1eZ;3+IXIPgYMnqvAy;H_i>o4{l<~JDe36e35ghJ5?e2Y3X;nY?(UCrkgOFY5X{D4Bh_!Lj#!(|u zen8*6*Fv8EuL}tOu+yKvGH--3CN`{}#nGgtz0Q`JeEk+JP&Gpz61Nx}{W7e%If7jM z_d*ksoGHpON|#N^s$Sq+rrupy`S5MZLY>c#hNKAs_J!5D5a8?Utatl1r#1%uCCA?> zQi5K)^PQS>ALY2S8eL`)?wxz6e>r=_5DP;AF$Z;PDi)CNVo;i9YL%;C(9G#nND4pM=b-cZBdk^bc^XMK3 z@@WRpnk-j)cx!{o-?ehyd?8gdG&8wXL1<_9WjW8guctN}F6FISTA$gPJh!x&q940> zbaVPP%*6XI*Rs_S&1awGhv&Z`(FdXb0*8}rHkM}Ox1&z*8DTWI749tWULv`SnD`d_ zxU1u}UU_4cpcPKj#oB$HtVCpT8-< z%=5oit1{IqzwX{UJQiHDH_&0x7Dz`zma3*Me7O}d$UJ%eMHW~s_Kney2LcauT2d9K z&jfY&Hc9s7-5#(nL+#5QdG$+@_7wJFZa=R z3-2@BojdGtn$bl>u0P&KoIONL>xP!IMjj06BGW9dyiAR5L0kFlV^m@PGIc8U1^|0w zD~WFYzn0~gwx>Y|&^_k!y_p1HUVNaVoZ&4skMJbEhiQTj3?Caes``j4%8r%-k;z|LP%R!S}kmt^YZ` zny3qULvFQa-d|R)6&DtL+AVG^5}oMss^LUu+WL`mUugM5P>pE`SKe2%Jr&63Wdx;J zU&dDd@Od0@X-GT1<&R}|;{vBSvRURBy^X3BPvV;UQr1bEU7e8P zg=^V=>^(&hed+f%s+T&l# z72a${n$+NhnU??vIxR#8qUKv!Ex z@Z7^Twqd_?3YY!X7-RblAxhAyw2NL?wED6_x5SCCjEE(>KYsHb9=MIgMxKs&#BM-v ztIoJPdIY$9$3z6M!i+t~7v^RzxS;CJ*-CoU=XfO>vmx@Y8?IJRM zHF;?DuE*UmOKrZEq0=}avtHS3x7j84W)KbLGnnY}H#-m5x|1F3D*ER=^}1ch>r!?- zuOj{&=L<|fk|uJN{ohNNO{Ajt!6{m{>>Hmly}Y+)gzr_)xjwSjO~0+hd0PcV{V)Yt z@bq7{zWa0EU^&%ee4c2}s^iTlZkOK)I8 zH_!j5#=Tq#1Fod|9rs#F@)VIvPkmYr8(1ng5FdP+#M3k3)=a6tJbPRG&Wp;2yn|45 zK?TR0@n{flq8jE#*tc$|Bq&~j0E?I*+90eq!Hg6Io6*os3>k>Sz)#nGV zxDSX-r;r6K9>Ubr+mjofzo%WWkWclxdMDx6?`q1+)a^SWNh_0-q7{zM+M$)F?|qP_ghyy6&XDUC-mMb#G4&kksayZ-Z`WzRt$mUoX7sPWh82mZS1y zbl7Jkb=KStfV094h_}}CPHSbK;J6<)XE)2q94;HPAGxs1pWLF+|LMG&pKAAW??8_q z1OxfZIG$3^Gm$R3qy1a$@#A9;1)faPiIw^446$v1WSNPQydX+C{oGUD=x5S$Uxpr3Jmx|oe zqD+s=8Slcv5EjDJ-=<-976a~;q}NS<@VtfvWDW#p`=*=B7pV_VV8jsl%? zI8&i8SE&sqBDEJoKWGHLJdu>`fJ!tI2CG~HZfn#@oq(M9f^otI-3bPT(QbsR)E*`G{wEnu9Z z&wvlSZeB?ETy@=bL~tfFczxr@gDy8puaTy{iJi)I{rH%Cr0Q7X*6@1r@+tneZJwnL z>b5L(6CNpep%LYIlzH(N#Tdhtx8qNwnn2A{Aluys%>MSYFc$iMTIqjb- zC-^DlcDif;Q)fo(Ow^CM8LcbikvW`U12VtLNa+Uky7#%)YidmS_%a`@Nx7da@R5J#f~BB0Ub_#v0H;p#J?ju{K0jHN>OV1FN}ML0o*8kN#jkLfDP;^v8rc{Q zbD3(t_fl?HfxB8%IqPTo*N>eV0uTK4xq}f%C1>hLe>m4XTCw1Mi(|(uWgq)GjN^J_ zE!xff+!suqwO+AFahjC)I(lWoYbM@9Rv?p*H)L`o{5NgRwUEew#4OGL*Js);+`&B5V%-ZTK7GX%)fSCfg(!53OD9inO{)QB zxDz_%Q*uKKB^8rHXR+Bc{j{X4Ps*BMzJ->P33}1XsffS28Gyd|p7Xn>jjPGxPmY+JOH=?if6a5dNdUVaza%-Sf8oF7?9c0P!$L<0sId-~FiTJHw5*vhPS46D zL1uF%1Wv<5?*3dC`R}f~^tS{M^ojEW*IeJhnm_9*p7BSTiM^S{oGGz2lUiMLtJD*+ z1($4zG4)?|c1M69KG}w4NV(a0gT&cie+J(mL#ccp8svu$>KdRA(}wJN`nS7||M08< zCzoE;i`vrW4Vr90Ldp+Gb@J$uRpph+irFG-q0u3iBeX}~?_YTp|IBzqi{`E}93v28 zzkjwqMQv;}u;de@26J{mB&>RxZ*DZU5VwB3At>}U}1x?eRYJAe4JM%5RJy}%pR zF{269^#WL}zBX)T;EZ^ClPQ4?pyz z+77KhK)*iYX_KLfKVo)yvSM8%uhmO)8uy{6#(zm^jQmJ%R6F#cjn4Cu^0NMAt-xDn z3H9Fk#TAu+VRZ4o@{K&|TEfcb2$DE{~jaT;j-<23Wq@9gX#B`l!XAjnpY z5;u}QtPV`(CxQ7s^hdRpc^-}e5O=%!`ZNVQ(?AZJ0KZ1-zM}Ye-?~8iT)m zOZi_d7teKYSvvmW<+l``O{Aqe`qSa&I82bBE0>F-m~VIy*E*J?1>cL#pzp~dPcI7UvyN#?!nlxD8A$X2R8;ryTDv&Sd3 zZX_B6C5{SQ2xp2*{upBS@yNEkBj331H6S|u1fP>o(GmCA5~6Sq?eaz&FI!{WOZI8V zS7Rk~z@&Zb0xqwhhQz7`i_-mHhQZx_93?*U3I_nk78dfwOy=+`Vsdul`^+x=} zGYkaiz1MlMu9U%@Fb#&p4{C16EktK1{>h;$7Df$B&wBx5{|3u$&UlLYtjI*h$K}K*MInn5=;L{&eNylj z{?g{(uf}@AjMOUWP=9C(X_C{o)Ktz#C)jAm$8cm8eCl5Lxw0*>B>Hb(56DDDxwr*z zBkgtjeQyD;YtU=o!_0x~=hEU2i&TB9Ks6rp8&6{kg4%6@zi((rrgpD>CFB2dVl<9* z!{vgy;Nsb1(E|KjEe)n_S5>jKX^-<1%-6aXgv3Vbb{bQv%uYpxgLg@5qhC5sR=rC- zJ!qm3_J;h(E^PSA-~G7D=7sC>H@<&H0H(%SX9Huogf|^1`P0Pw5JL^{-axBWygjvj z+g9mSW`E7~tbMDX;B)OA(SV2*MC#ga#q(EdvV2?%^ZVnRLXv|Vojo7;A}{hNP6b!@ zQrJlaD)=P)#d$HZZ^r!@|_*Fuj+U_-cVhAPd(UrbHMj< z?98pRTlWnOah#m*9A8mFd;6aq=LhS+;QU6V_>l;s&a&nY4;}s70zB@&|5}2%oEr3M zW?Xe!ejT0(df#Lxvu`Zq#4U?RKor*da=yt^Lw)P7K?z~x7H?cE>$y=H@EuV7uU78A zg_z;AXj6NyA4f|>3s7etRuJUxpNAIa*+{dE?U5tKPUi&(pL)``$Mx!ui_lvQ8c%4x z*{+UnysI>5_8a;wM!eNI`Qjq`H{ZfHY;!6q;4-$l8x{9q>oIw-pBR{jTlE{&9he~) zW9217lYJ*vl8%OGNH3@)V&MSltS{QLwC5!4PVGR011}`&-np9}mJ4}&-?`>(&j~7{ zE8E(U0(_rVKAh;*gtzP)GwW$%mMRb870OS(la)(vx+JzNf287UProKf`P`P~I-&tq zf3j%+-og9hGdeM9r~S$j2kXf1>H|R)cA_J~K(Oa7%zaPD;_oWJZp9p_Y#un zbZIm6!WWZ9709P^6H=ViKA?7rsN8np(o>VzOEHIPJ=k~h-*4O5u&A5-T*WnEk9ppn7OB8V`*HW>2yZWV z)bt0o)Gyl$8ozM*QWo;DjU{k|OIgRpkUrUZ;Eiwr@Fe7)s;qJz zsyEH&?&do_uPE)qo_&Svm8W4R*VTU3JCH8*)*uP5mvN%v(Yd?a8Uc>BH7y_=gs zqv;o@lUjy~9N|u;G8B73gM^78&7J3K5K@Zy{&{{?>jl0@xyW==r1#Bm%PIOuy`NW+ zhz9BFfnP2y=fbcnFgf*b{z>QU!HX|KkGMZTUVS&;IAF?YKY9(x|hBcimPjpGe#fG~ibHV9PM|IN5o- z0t4T=+4J#k?sp{II`BWi#J;gsx5fK(*dC?`G+%R$M?UKOWQE~HJXZO^(7ryh@aIM7 ztn$Ls@>`=eY99fLrEBP@Ea8})G~v{Nh&12vTkhYfg2Ihu1O?H+&MLE8c;^#!9Y?u^ zd4KBy9;t!OJxQ;Jf8O^N8Cx>hacF?VjOc36ZyKuu8DHLUem72RV&%oPg|;7k4o9up8S_8yFH0XW$o}0Q+gF4`m8cOsxiP zQn{S8aP^DIzYXQpsG1`6!_~%iu{v-6sYzeCywz<&qNwv4=!H4$$=HtA$mb)w7P&bq zSN@G!uGP?N&vpM3`Q78;*idUoiC_5p3SEWJ z(ZBzkJhwuDQL49rvOWc71<)o$4Wiz#>N^MZG==i*PD zWgN^dr{;=lS*UYicMO)>$!?@$rPa8A>)`QQaW7)FU<89eN2zF^i!&XC4+4#8%SsYQ zu~-}N^HYhHPpSi?#K2yQ%1%s(>P_mK_^)nD1VIL1HMo65#xzA1LSo%M2sk&H@cFdh z?{Z$7WjC&nmz8g=Z;{tNhVVACvReS`CT)TEbC$B1)* zQO&9qke>c#G_P0;?&8*ga~JXf66;6m2Rb^-8f1=LK9-&p5b4BCKlkb+uhB!1BQ4d| z{QfV%2=_m}-Q=M%*JHW$LI1r+*@<9NzA?`8-}ZMBeqpRLB}LiVoLPN8UZ95yvFM0u zY7MMD5%9q=-&!Q9)MHP=uG{S*Nc&S{o7Z}XJRr6=UCtvj{JvPS3|5Au*pz6gH1OE* zKaWA;oxod-~-Qsdgx$Ase zx;nq{BwUlPXHrxQKCf1CdNk%9@ln0~OJ`Yp=*0QKR0g=hjnanCcWc=A={}q%>t~F)j>>2O6yS)nfyHYn z5OzsL+qZYfh}^Bj$?yRj+0OCGOs0(Dy555iDhhqJzw?D;-&#du98w_u_OTMv!G^I- z7aJe=p0}k<$YqgE(-3OKrV!%QS_cvUfgOjerj~KdwaQi4%gdnF_-9pWv$8D(twTY7 zLirNCahD7y03l=t{m&#fhA;rz6&-mLO(>I)-gs+mo26D#C8L~g`nXBwm~?3P!g)Ts z5iyrLcdU1O&a3SE->R&D*&x+)-mt4g%b z7%64QEyKGfHN1~2KX6e*X*!K$){ca6L(PKjJ?KS`Lu+Q;GP>UM+G?`f+T?HKtq9CHDG# zrPGdH%@V$_Ta5Xg<~*PBgwyFJ>;8eQXmSkNd}ifV0%Py(l81 z71uA7<&nrp%Ra=l(qd(0bW(NPk*=sVgRGK1IT>_($()Himv<@+@rNmk)c&R_&#+|= z%*0fbxMW|H3C=brgjcQ~r_YvII4C9ZA>9UbENh5eG>5@Ns|R*bqn#G@DN==kP8Ux# zM+ZN6$rJEW=5$MchxPzJv37rQ(Iq9WbKE9TkBp@$i22&`)+Q+r37PNllGYo%RAXta z%Ax5bd06B2qL9%$EM97JUvOCLRrwV_4Y!O^UuY8h7t1VPp8Jlv%fKGhYo28@0pRA< zcg`8FC_vX4y7)m9vFbgT(2~1pS;uIn<$SGQEY{YRzZ7_M&v^VrNV9)gODtqca&!QX zm8Yn_DZAOID4T&V=*9i_UQa@V&Ao zw1Bf(W%+x6L6x(sU%G$KU!QhS1<0p?!eC$4)0Fm7fF~_nq>N-;Tuya$s|}C?1*^2c z4<*v#I-!pGYoFLr@7(>*W8%ilReD-x{D`4qa$_qe6kopvY=gZ1Z*gwxF7sHef=$oPMyg+gHW4PasK9hMY3<%oJ3 zB^&BmX^|SLlgXJqln8T`_%W3C>uC#J?CsH(*OwiZUzIu~h@S(=oIOCjOeTOfwu3## zn&3!k!f1mIQ6BNI(67olx-MO@XS8|2Q`Z;}9Z9`twQ|O=<@Z6WPOgYHuU5Thp}b$2 ze3o@6EmVKs_tAHL4IvcnmBd+9@lO3!n7dr_a1VJzg1*gaZN`_ z`SC1jh*ji=h1y`{4i)Hq-eDJ`Z#Fmu+Uu9vDx`laYCjm06nQwGCM#c&xq&8!AFcUz zmmGWLOq33w08}$kI1!d0djJNhAWHQO)*jd+Eu?{RR*^tb6g1zX=89-dJq;K&x&I@( z@lNG`7Mj%+M`Gc*RKAe~=4P+;Gb{uHs&Dj&A$;5N`BY3uB8hxQ;c8ffSEgExcO^Zt z)`fprAaYt-IxHj9m~+%?s4rKqc@%TutHx}*rIrp>17J_yOGE|{GIA}@Ny&_Wr%}L8 zZ}3iASkbHMwH@S2KV;w|(Ne0-45d>s)uA4Ie_c5`Gu~A3T(xlzE}k9>WKr(QckmSH z(CV9HQmTm244I5XiaRZsor_s$TWRHKR9m+=JFQr^TwYr|R63i(i8L3Q&oAmJU z15~UokBht}3GnRoiUE}8&wYgpDCO9Z4Zv&88Di>W)go8ipEJOCB#=zA%RSvX) zHt8|ggq8Em(#CPt?-8mgjHdT2@^iVeHm*=b^X|wu2tc`4?R?8ujvJC^)>ZVhjc$KL zoz8>Wk?}-rNSu}46S4W;{L@>C}Bju|yHU8@I|szrsb(nh`{Z@Y?tVRfDP zH29|Udu_Z_gX+{INyf#lSv69JkMw_$pt$gix{X2;>66pT5h$;?KQ{U zv60pjw($ZluukZbPL_-Q$s*RX;TNEaGRt9Rg-H^Ar zUk@-t>F;Q>!yeZ;H!MfS<86rG&;6bQ2tD_=6<#W)V><*ibCr-=>bSBn$$RO&N+iq4U47f> zMQ60t1m#5LFBKT%3+2q4{)vIUQ&t?(Cl5z4|Q>@zNu9P zf{+%Rp)J4MMQNdZq>I*ho~PW9kr#>gh$?V8>zlg#Q17T+%yCXPqITu6cy8&3kX0ny zSKsF;7S8jmzHxl%=cdI*kvln-Ex#sv?Wnc3@@Xmqr6+_DIqiRW2Nbge+N)L1;p4@o zMVyacQ#~-GpPcbebz_grfx*Fyuwg!Jh-&1Bng;KT{3w=203pB6;H8!Z-W>wnr76ey zsq$K>3W}(j2d|p(EHIjNIuGnjXMM%xRKe({5xvU1nPMN#tQ?)eGRobO%$)id`AcPX z&x}(bq6uKvst11=zwd=l^bXjsLcz1pZt9g~m9Ck^e)4XYjA+t0_`EV!14CsWt^L|{ z-<;1GG9sFpZ-iT<_LpnnBXWA=m&0?y#Hx8M)~QxyT4ZB;KNx3oRi_{uyC^o^@1cg0 zH)JPDHuQV*Js3zTHP(OA;NSZ8K{x}tcFH!hkDYr6 z1!1t@Y=e`Sw*o8P63+L)%sGbZX?~1UaavULDNVri*Eunz#J5plf`=m}5q%fFh@BT`&a@6XV4sGF{iR;Go?>79Zyy-nj<*S-d@7eCK9{Cl- zZX3}dl|+B&JLelwcO3tGkE)Z2gn6n2(zy?Huw)f;9^mE3Io5lm(^9XK8YMmc%)Ust zzW0npL#L>0lH)c?He_xJeD$+syjRI^D6<@EolXrEA$M@GjAXGW0F; zcbXe*F-L3mYD16y%hMnvk9^w4tm?kaPo8|XQA;#$ZPQIIG&4i0Awxu!Pd-3yG)(F} zch%(1`aU>Q0B~!z*;P!)F%bA)@^(lmr^G<80C;D0VPgWpze`;7A{lZcomyGPe z1uj)SpEg2FX&FL4iJl=!bGNwaJwgO?Vs!~p^2u|)oii>^o@R*h$x#DXQ(LUPL4>>1 zjFW*QuAlii7Lk|yat7zwo&$hBnoo_v&?9b-_*%rwa(BVYIoq=nS55^WzsG;|<6Tb^ z7Q3w(PZSoL&SHZ@1t=1q-o~(O>5H-Way168+bZW;vx?>2YugYW{e%3xpveb@L-ntqo6J|`zgJDq(zAZjPemOuKcdcxLcXHG! zdATh#XNU!8AiobkUKQAU&xe20S$jO>mx^&mwxJo9=Qai|ManvZUlKD^RO)HZhl4JA z4TI6yBWdlx!;?3NB|o zIP6OT*_Kql2MHNkDlM>v8EqxDj>(y4$ugiTIc_?T3XU!qV&RDsl2ZH}iO78|JJ3M( zdf~fdrc2R^yH@o}xd&(a2Skr~*x5!Q#EjVuC>=adwh<%Fe3pMa8_Zh22aq@;3)}{9 zsobx@P+%>p2iW=qqtl`qa@BnywgDHNab=cPzZq>H)4FeT2{P+Tl7`e#_L>}5R#du! z8d43)aofSk6SMGAXehNRJ&kr@=H6Lszx^JnY`q%MQkO*W4vG&{aD4?1>?b3qFHE$( z>SOS1Nxx(cnXrF}QcJnJC{2Ep-jjtO`JZtYq)-sW+~XbFeR~JM06@zVU8s|?VT}P{ z-z_7-uX6-za%HI}{^bNDrFK=tIKLF@qR(xzTVFg?LRo8OzF(J}FSAK33YMlHLP}xX za&+7dm&|7gb;?|&M|`QRvgg;nmYa$jHP&3gW|aX`JR5)WV>cM;!tu2CZL+`B3TF9q zmgfzpq^@B;P1)A$HBb$_aE$?JFYBj!fSUR)e}^J7Ke5gdfW|MmDIB@32t#Fv(p{oN zQOn&J%0qb%reJ1phiZ{9PL0l;D$Toga`IX4wMPfyr?G6@x>sk^NNKBoTC<9KG6)3K zw_oU*`AvUe18FB^8#lVrDG@1JR3)fYLSLHi(mep4EEN~0ANGGDE#4ESGqa?l2q9VK z>a|e)t#szRhc-jrDBp1S&9R{kaXS(l&Vs>^UqLW{L`L-uQ(jo+i)Bkh6x}l#tU0S* zJLQvH^%#*`qSN2wFv+->nC`vLtT&Q)s?j6&3xa=UhC>|q@$RvvRD9&wNKqEyIai}x z&ibW|TSo4%?}1B5wlOc{@yYDJ>VS{Nb8rR5@jkYnw>00v)e)CPB?r)A(_%L{nB6~G^78?cE)7=u{b z{PTbJAgu0*ZhEhPn2CcVsteiKPs2n@{Plaqo$mERn_<~zpoj=(GRYHXtN|Bw1Tq{{`6)8f{a(IOkKz*x>Vf}IjQ^|X=Y$@~H_Mj?OA zoYw%(NADDu`_D6beI1VB`f@^P;2t#wbbZwZuU+{=4VX-O{2uq&C(VzvxTI&4`hz2o zdfwP!*8_{Np2jEV^rb~WB1hC+3iYtQ4_T2X6~}zqEDBlc=Yv=+^pkB41eY8G`~?A) zY9sM5r82^(hJ0p54ICGPA%72^>z02rUbKoLO7}pfI(>haIhwAuwm%eM=F~0Xy^RuH z^-BTfnt{ZH<|gIunbfh#{cUU$OM1~be@{v!)q~gSl3ph*2)wV5J$Q*yXI36IowJcM zk>-7~_3b(m>^ZAo-0c6=Ynb};$~I!&YpSb^0wG+XdfI2e#%o6c7a$mrJ@9{V&{gtj z^6Tl zasTM|jFNFVL$GGy-17IpI`-2D44^|)8y^l`JuPzo$!h*Aw4c)_{|GApAlK7Yf>X)5 zz$t*4%kN|A0M+NycCf+hwaR}PWCpU0QR}rJy$%yqZG40y@m0!M0GsF8xbYt|qb4!+ zTvKmQqWVs}FMB|Vx95(sGZfdWjW~I#vr2Q(07_K9>lYSqez~0*WJdQT&A3)q^}ywW z3z-&o*WM|J5-6pUZNzT-L?>I$<*7C&pCXZq9~{qCIQyKashM5oTT_4b&F^zw!{Nyu zK)oiGKowC0lN=r4M1r^VG|}U$cO=8vXw(lSHB`BL+GjXpX@M+C)E-d4gg%gMe1`PW z;0&G4wTlTkSi$wR-K5}d_jnIv2Aoc|;q_Tu*~aFQdzH$gz=rh|W@RmW&-`w;nS2^{d*1jV&|M{J-%+phbEY>qKWEtaS|#(Sc9`o_3xI+Ars(~h6Bqmv zPCV-O@JE+CHA$AzWX`dkMwFn=EZ;z+G3Pa4E4pO%;1s9m_gsJXrAPGjP|K&zxtWgV zp6mfW^k>d!_|W?6cnFaYDA8QO5FO1rcV0c$o}=##kU77cFpdJKH99I2xwDkT=66=*L$bAQOY)L&K z)hrZG%y9!kkzTGItm_bJOv_HHGH1Mm(I;=!^D2j&kslS^sjublfvL}GHKW1;E?j;e zl$4G+%)Cy>!TLSQw4j%#WydGV@3S4)QQd3V?aZXiqxOGV-dM;qN~9ds1JX01GHtOO z^Y{U{Rn=a+cZxPrU^epV z!7s_NRI+hjatX{fcydSL@E80w*o5iQ&WCf-JQfk@X+YMfJ3S63Q6y z@(}LLsJn7G%DvY*#a$a^zw$kZAE{j7?(u3Y0g8VbDT5pxS2ib5y@#iYtC1FH?#$0E zgL?nY(SZp5BpMas6hJ@U!@_;39v}oZ2WmmbyD~N?_d{hTp9U(6%v0}yi{5)C(j}!* zSZ%-zY;b9T2TI?6Fr@dqH!d_s-Wd~G1YKw}<$It|()S(`!t+wlo7A=1(;70Euu3wP&`82zKuf}y55V&k3wVKhq zMFnHYlxm}3!&SB0iDJVGmE(;ydSjJ4Oklwg4sfxG7{RK$^W)7a?y2i&}rc zb8-Y=Zh0ciUeeQdqg*;fv$cmJxRii|E{vL8mq@?RTs+U~3yQ~wr zjlAW^Zr?xYJ*^W)ZANIN^x!t~E6^sQV_AKh&{Z-EM@^3yW6ng%B9Gj6RuO-@&X-6k zqLSv*Sgt(H1d9M=^P57jN+{Lu5g&af?pBcnb0k+I%@O{8KF!_vmh)g#hfU7+`gSYG z92mulyYs3w9|9eX$48685 z=!})h=z9$6#pn|Skfdo-fPcztUqF+^|X1A3v>P8>A@Fe zo1KVC?$`ABh-6e7mvo8rwx~^%^FYZuN(b2nw>>i)D+imCUu~o}Iwk}{dpi?Zy4ra5 zyko33gyuY~Ftnfa-`15bb^4<#+HR{<$?rd@3)k$_)yw^jE2xxp^#G~t%ZafMmm*I<(3K;#S_Y7LN@T+L zJe?gI7FV$9+cB$3ooj&#pU_;kIq8O%2dTybS&RG%=L1n9$BnqLFhRWs=xNEQ;Yto) zWI5Z&8uc&b5$~CET`7N7pP6f0)oW|NcU23x6*AU~OP(=E7d>&8{0bL@WU|3m^w-9V z@eZDIdR&_lmdjDIibXlQ`aatYrz*2!8z_T3k!l}Bv{f1Bi$(E{ znu(C8Pgk(&!I;%~|FI#-MfQ7W@n!}}_DA+V$L)T+j>H9QludtBj?KQQ@R`|5?|-y9 z#6~w3u%@17`Mh(dP*D(kv(^s_3VT|f1Pl6`Ih8j;9LvBd|*s9 z2ApV;IcXUb=^TG+2nb=rY;%6e#){~w;MGq%`3E_oLO4gN{kcog#i?__f$j{>zEPC| z?5tiR|4Xix1>?=#H7%o}MUI;Qu_csk1Y$FuC;};jlD|iNK$`FMG+?@;zufS=dsh}s z6mQL^Ess5wdFbG}>vbD@OUAr6T%uNMrcmfon|qa_9#?;QT*`fX$@(hyL0CS&9GdN! zEFU$7L`u2`ax594#q^S_$n`TH2wLwNQBa1?eQf-Abe?Jh;MFL%ZIQ=F7URZS?|ORRb<{v;?G?F`tCZYzI5vTb)~Xy9{K6W8^(7Xa-;`6n=WUm|%!q&0 z(*SWA^@@MihLxEo`eu*Myr%f@mwL!7WG$xbfv8>Td8-0KO(Dm?O+pGcpN6fHxZ6$L z-SLAXw?(B5(iU$Q%DQ0 zLp|+SR7}Y8)UDu1M8|eM!6~v0I@2T384?`tC9{7O8&UVh1#HCmurI6EO0K}YmgRZ? za^>zq{94De4HRO=N4HC6H5qR#0MNCz_Zv~>j6qVkfi|h{qk7icERDYH`b>DSEO#p_ z{kI)*QtBbwK=pSIMw!#R@efg&X1B{_eYT7_&{7~LRI6mi&$^PmMzcuRrB<+7ACAV_ z{da#d!B?(ETzxukwUfj0QT(WV2m0Z0bPs$t%<~#iqBL{znVj@@hi$gu6KDL|ey9*_ z&MMIzRd(uWubCiLx0xw_wdJ^}JDE>|e$E@^PT-~YYqin{spTBy19WxE{q5^y?n6ZA zw&qU3^T$@qUc=*do)+#Gq%haqsQjGl+#P@A07kM#2he*i*H zX1+)KAn$W9D8dmr210pDGC5ISUP83>9_jeI5-*~Uqd`MG@=%%J?G zN{4_m)YDXczLHtD)1^LBHFaOyl3u^(a5iQ}8de!0F~^PWmkNscG<2fgM-_}a5<|=30))vqdX8!v zx#|UR&OQN2bRZR1-%cuT?^jw7oicy^wx7}!nfutqN8gF;q2+K>OD*4HJQJz3X>&IC()RMCe zEvWRkoTkuu{T`lb@(z#N5GkxVdZ;P_%A7qosfcA8qIIpoN{F4RQ_WGC3RQoUYbWq0gH4 zdMBBh8vUMGV4-I3L1RFoDc?huCgZRwLeqH8`DT&6G8d{=8UeQK+Y_2QBXbAM$2IR} z#}kt?eKF!Hq-d}DJtIDP)T)0U&@UjsY_kv+seSYi@D}^&Hu8-*4-{>fllkaLG^etS z4P?*zf(x=3O1FU+$lUG$`P;f4ET1DQAs#9|o_UktDND!Z+<7k(LST&!9Ht~xS~daS zoTDQ@*zWgCX{1r%>k`VX}Iyh6{p8TGWzDPS-&Z zj6>ROzNj@HJnt!M=N|m)Msq`9itp#iwDKu3w@Z2Leot?mMa9yb*OIQ#nDu+4JlDj? z93y~{dMG?JRE_*T1oeL;n({rg2-Cx-KSZr8=bI>K$0-i6PNJ^)9{I~20|}N!DjkB5 zup9X_^<dgSf!KodN^{L*uhONlX{ zjrX~d`FNtSKqhCKC&)tG3V5SZ1?3S#r=XS9z9T~HJgZrC-ozR+TLDw)wwrC_NM&ZK z*DPI0$1aLfmA`)!ui;GI`$^E8q<6lDPH*PXsRRpkcHig^B-;y`0#fzN_Z(>2JqCQi ztpB6ry~D9)B8#YM?R;)U$RgPT1qQy10mV{Tmg=?p{v&;VH_cIss@gm~E}0Fo4kR{n z43ssQGLv#X2k6I9nlcW63oSqX?kDlBghks6%=DM?=2X&ZYdE&%FEia*cb^DsKOAE;;!O;A0!LjAshxD88V(BUR|%e79W3h*Rq_NpAEEOebrm*c#(j^v|3>TB*?cR`_K>x(xJ zN&FZ$T1%7!+H!n)+|(u?PDMU#+$d{*!-;hYdZfi)wQas2v)zehPUUToo3Vjg<$Tk4EiLSk{@nC;z zvJLT!p799e`kigaDdZ_L%JOWPDfZo*3psnCP>$3R6_a}0vy#E3&UmY$@#^GQa)x}= zXV2V+HXrx&`lSHI;H_!FI_ypcr{MdpkyMW9F%WE(1$i5H_|AVYtb>t_)KO?JmM#3nKy%<|kaI?3|kjb-03`|@U`N&O{>UtxJu@kKCT8vobneMdlKVRw^=k;7m^sU(8=^uN;3J;IFyQ zxqYDlk?Rz-qARE<32r$*HV}qo^zU1p! z1i#X!uuRb|>MPiiznrHSd{=))WWYm|=*{(GyCi*?@1b#!nLF=5#?G&OQ6otd;&tt4 z7r7QL9!k}H8I)$y8L{Su1-mfLITqp&U!Lapsb8v%B4X9IVR`PAqhxW+)#$Jc#oHKB z78vx35wnacGO>%XSU<(}mFk1%D{MH6(sXreV|l755%XDQpgUJ>2o@>! z!c(w7X4lTgvOYyf^F0Gi9lNsI0*|=zGAs`&qd7xFg0l{xHqw2?5JR3A%QQ}BmWRjX z=wPuR5Y+FPu%jyO;%REQRD6d;F1Bt{u;~w;Z;smwE2iRN+Nh4vBg&`A`heO{c&XSr zoRYQG>xa;|aCD6UOICkF@wB%+zT14by*Uqfuv2LedD@CH8aomT0n$=NV8KM_J;XP7 z_u3u>bIPxBC9q6O3uIgtV2g5w(3)5a?MPT<6h_T9f^6?zSz@;e)YexRYQS~>@gAu0 zstLe?a8|f9mQ^$__g)p_xaHLY6{g`d({h)G%U<*2r$VefZVP{AQpH193_^c7$dOk? zezXx#?D@7FVCy*(7uuiYhX@E^c$W7xLPc~vau1<8{H%(8+6boAjUNlZ3aYy^3*WN% z7%a1MA@?_=J2dwCKHT2)ZXbyE6GlX~QR%2|yV|&cmB+=h(1*>rqi)64Ye7s^{;+y* zU?JB%7`@Wp8CL!lG!ZCjla>F~1KvE#>#Lupc2ng~ANLVG?ioT@*F>nf!@E@;qAimN zT$X=TF|PDF?<>9c-YHb*NVR5A7d4ct_5cf3bB~)4ih}FaH__vxqOD}HG5ovNo2zDF zC$$lesc1OM+ryAcafDkgUdu2||@YV(F}Do^#U zTz0A)Xd`o2dQU9k%9Z11AzOFlSr1&BQEGn)9@XP}k3VLL$hn6cYWB3xcP#iSx%2V7 z*NkAOMd{j@qXU9|rLWBGZVt!e4x-}1S#wmxnT~Q>#7go6gp0=A%{Dl4?N?pWJQ*Jy z;l#cb2trDi)XEy6xm2kdN+i7E+N-#U3Qd%6=@R(C=850qY9u*UqvL9X<5_;lpwEB# z4D~d%RDdTqb-BimSZqH@50PM5#L;_b3_e- z+-m(E7I=cR_;48w_oAVroNe5u@{TUVrr=@zo(DzQ%Ab16#e=L>B7AL~<}ao00$Edi zgXqBRZi}i?wOi7HRKumtU>2e1{5^k4p4gM>J%9 zcMMuF@44_h4`(((yIk8N@7;ZS9k#ff@#6-VcUqEYcgg(fHHK%hF8oM&+Pp7NhT!w{ z)0|6rHVWy&@8mC)x_lLnALi&zr7+jeM{)93j=_f$TZlqWQ=%h12NpYd?gxLO$I0BX zu$-ECKLv_bI6Z%Ppmx5ey&q97dMyYleOTWVG((lDY~$oU(}x9^b6u!a@*H&x^8BIpB!}E>)U_&x zm^9ZSaaUd%Rh$ntK>dHxr^*9s&C%!3$Ss_=_t2)xtO)eO%i^y0OsFS$cNTR~$FtVl z(7ZqLek%I*M)#`s2yAm=(=sBbIS;%(D^Wc}Nd{InpEkdj;$CVa8JgbhlfLs&$SZBA z4CH=o?jot>mlJITUa7tf6mKC*&BMp1y<6L!iu3(6=R)2-c(8wn_uXcQA?8dJhsC9= zUMnJSmgXV^q8oal+*k;P_Bypnw~TcTT=tT8GyFkp)||bnMu_oLuNTitzZW6${>bN^B#lB&|6-ggyI4++r78ODgV+IXN+A-&W#5O@0p3@BP;HC2Dxo?iDiRrM=tqG_`}c+2^om3Nz8 z?gImH&o&?KTSm}nLrh=#2K|=Wj^fbBUKz7vQC%!YRQ%1m>i2xUA(f!-Tpjb5&ZLFY zdm`O|HJdwyiz_lh^sj>nr-m-GZru@Pe}PI+fa1Po9nb3R%4E}O1xRG`XTW?@LKgA1stEf z=0wb(J+jS087IHOO8GxAw7`7e%DGc)0tktRRqzpHId>#9S7I&IH|0>itT`EJbgyi) zy#yQ6a-e7Rd(dJsem(8D5T%S@Z-XcAuP}c^p)=cOBe(bE96cZ>i^VwhP=NdVr831= zj~hY1FQ=J&Fn!4y9r74xU2Q?X$zEg8FTGQoQaPFJQ`UrRL#~o@R94Kj;F|YIe4-$^ zV=m9e!Hzoflo=6n2?uM4$n49Q1qH3N!EXe zPj}PTnUSmsJ1Q$XQi>rYlRF;^{y@z)O4cGTwX$Ty@tJCOadVf1s#X7@x{u=@V}K2) zD0R&cDy#g#Zlefa;@`*_ao=jyzhER&A8Ft{g;i^Rqgw$*RWk$|T`s3q32iSIiMH^( zGaiD5_IhPJ-ksX`WZ%^GQjerY6taI5iZ(4nK%{0O`s;g6OcsD7y|VnKmM?f-y=UUZ zXUrQ{lCEKXQ&E4FSL$h|;yeA2mjWuO?MQC~(l2k62Kq6V1~?^P0rZUGKqKAe%w7tD z;wI%7yoGLaKcG0w)@>jc)Av^@0KGlufeO7Mp*3!AHPti9Ht4Te4TZY$&8mOP8E>y_ zY{YBCNqVf|I?s&94{R+t?dr8+gLCe0n54HkbGtO5rND9z0T+Ok&G*=1^Q?bSsQr|Z zz(eR5Y%g~g7Ch5>&kQn`aTn|0%gyLD&)BT_dr+3z-x*}4qgUhbqBB$M3aC^|t~s0a zk}O6#dw7vo{nEwhoN?F})>3~~IR#CmGMX7&Q7m}n?3;qSh(6T=m9;=r(z3Tgt$WP% z5NxbA+s(F^zf?+|&Q7+00ZCtZ6jrgevW>ds>625>Lbd8PYHsxy;QmX<=6l>e5@$!p zdK_rg#?`R1%dcH!qS9*NSPqq{?7_aiK>G4Mn{<6!=mvG)#Czck>S=%K`tGF{U?I%( z0&-Rj|GNF1^CnV}v+BeMNt6M%Tc$Y2Kpoty>LEpHj%LpFH8@Zi-+5hiN$~{rM7f3R`&)e#GX0{In*I1X=DFiBBRjW~CP@2D1 ziRig{Idz&@rMFbDCnSG2RK#kAfPN`MSSKyjRsh9rBZph{OGcHj33#MNXYkH@+#b?; z$qS_h=89S;28+YCEpBajn^L>+j^3VqlW0o*95n|BSzmbfx6soIRioskkXmr*5h+(?Ki z+MQ41%IE#(jd;Rk&o(gQ8K-ckMt81rn?&SubZ$u*T)JdH{U=Wxmav|I9PJX$&msIk>J^B{_TNp@Nq^ zP#3PVv7@ZWD{~)GA9Nb?l;M-Ba!|h%O4Ri%Eo-a&fh&L86MOEg@UW%a2d?a_&-fb) zOjh{^F0RyO^90lZNy6&&h#n{2#g+C8I$aTI`0Lzv2%kZ6<$G2kz_x5RN?F-P<&2C| zNb$&uG-Jm`SiGY4_Z!VBHt22S@Tgc8pJHI1jBM=UcN4c1id8q+Zw_%8=a6Xb}pQm{6`p5@&|4dO&)t z^9#-;7wekw4w9iH6Hg;oBT7*7jcNoWWUU3TE0=$>>e~QhEtw1bz_as~vj@;`x#qBt zhd6h(5ot_M2xw1!JNrib=FIFR3Wvi!`zHLhP zLN9+gN1wBKU8kAcvO7jw!0B?$N#ByS$Qc5%*8J1Y^SoUdK^MvcQF+(64V-M=e=r2F ziLwWya&Df^g1U~>935B9DHYqS5b^77!*fYain|9GZO$D$K~e(sO9egVe$VJy;>E;z zr=?fDfUkPM`JO><&vj}zTT#L-oI*xg9i$ zh_xZ|M&qn{Fy!C*%v$ibGd@bk?XmPu4!g4E4O!xYlv$43%6aP18SZHBu=E@{&L=!e z>LK?K`2`rb8Uym^c-n1wZg~SEo1|t>`Y!SdOL}Rt8<6AqO<5G|tR8Hj7X5p0$Ii?| ze)iimCpKIZSf%9LcN9xIQh&$7nkawkR^QZ;d-Pd9Dp~iq?V}E1o>}`qJLVW*qOExc zROlS?H+Qk)b#t??Ub~*od0$Y;Tgk^7hW(QI@Yc%JPvFuf7e1 zv-GcLm~F>%wmHBYYPXyRg(82mFD$P|?yxhEDAG>7X95mPoT>r?7}q(gV8dJY7-IW=v|2&P1ZLE_xcyf4TTQ+E>WYag=R&mdx|?!Z@zJky-7W_^gpoW3~|^?p{+K%W7P( zRq{fKm12yr%IYS-$TJVnH#k?t0)YF87K%&xu-QIuu+p&^9?l!9mg=;=- z`{G;92VitYi=ZR1-tzaH*7la8qu`0dzIuRs+FHpl-d0JskrD10;v=+L*(~a=3}E(P znFP1n;$+A2G<-JQ_ly$E5a4R4R1dDTEBZmNj?Yjd zx+u+XCWeWSjZ=TK#(-t$j7AR@xDmB$(;~W_XZ<1$yu9l)TW)4=BJgDNL`w4a+$9(? zd&$%IqG>S-HwlziuiXleInx4#GG(t_bxB)Q8?lI1_Er0Uo?O0XRG>(tpKLJqt=63C zkzEZ^4*e38$?s#(Aa$zOusFg+Z6Vr|J)mFGISCT_luv*5eA@8RzE}k2Y6Yum^=Jg% zB5USqQtweGtfK@l__s4}5`zbTQuE^F+l(+r@WIf+FcQq8G+8b)GOdi6AQUlM;U8ZU5} zYfk(cHZ6bOv)V_$Soq#KucgZgD&*6SJMu|dsBZPD9|fZFEJ0O#U+LL7V<@HMd;`03 zpQ#?WoC2Ap#q%;6v0#i|YtGSmUGa8Q5HXTRqE~BPKpFf-fG7x|D9?@|8>9o*~-^xFLr>9z1cW2eE z#LRLYK+nuQ-yDq~<<$cKFC&x|ciqe{EZh2S{kLV?02FgAY%u6qMP?D%zW1tk4R5sz zgaf}PPiOJ#<|ZxBGp(l0q6}1yHOIyIT%#jgb@rDtskc5cl=6ONJaG{xcjwRd96Z&W zJNth%5l*N!hw4#zqf{zJ*`i!Os)uBqyT>AQyr=KKh?5_A*Ie8eWT&!kSQot?xJkS+ z;=I7&D{fp*J4bjY_o`E}I&(RT(4dG&J`L(NQLl@d(0**Tac9aHiZ=3dx$n?jk+P|$ zT^#I0f!KCFsPEZEOeoO|iwS~)nr*PRdryA^^-x(P+bnNz`?TQgX1;N`&`2_m0Qf)$ zzpfJ2kTi;?(JVsDtTT9(TkV5ny(gAepK~iFz?o~Cg$7;C5SFKaZ}oZOn(Bag~}ObThtaw6Cs)S&Q+pszmQ`)wk!M0@O}HA47D%E%ZAwx=(xn^tSd8 z7HQXi95;%3gtxM9^7UCeYE=R6*mH(hR;{8;vh+BvNUAMc%&WZHj)Q!O5?H(e=p8&?;?)?NmLW zXGhDXEr6K$6{Jg+?i(iOmCB0iFG|JzG;xn)d#$|aj?k{ko;CKE1rGnr-=l(Y)~#3x zqXLg)o9o#sA*%pSs{#z5#g(ijw+O<^IR=ZwA`AS5i&pkp_#CD@pXSWUb51>TseeF>Lm50u*5^6tFd2OQ~&G1%@R+gtX3T1hF% zoN6w<0+3i%b;Mjj=r>Z;B3wwGobK3~pwdJ=DSZL1C8$;QY?l2Y8QeP@$tnAtd*9STQ5>(H=AYH4NQ;esA|rElH_CZA-{{769YUI0&`q_6xCINucHeOR5;KRm zMLx04tc?##p`v~d|B;qVS|A{LUcZs<(udvX4bGWs+unmYoTGy!-YmH>50A{7ZT5b^ z=MKZ#$g-pbdNSikZml+oe$Vopw;VUYXncr#&#p>V&MLSX z1D9>&ruxKK`1d_WR~m_b{hk$GD?Q@P#f12O^NnS$FklNQcz%J=VD&D%!TFz=cyIFWh&pzRVbuQ70Jw-U!Ts^%r*K)rkA{&L0- zUBlk1h9BQv+M&2u;>kCnXpO(#C?0lw+Ks@pv%7xjLER;5du^zH6_4%#ni1iKdfMr} zpDgVSA!W~e;|68@N*ospIj$U03I47dD=9*zG3VPQSd*SNrCHRVoY&Xl%jHbGWRd%q zUgA<2zuqp_(2TA~*r;SsBZ|I&DR{(KgMLw3s6B+<)DRcRHX;ETrz$&MwuR{VUB<+IHw z^por7g-Mg1gJ98gWQNd;a@Wk!;rKr?f}tMtyS;#&D(KR4M25jVMZ< zbGrmLd_=Z^%}dtbu4EBswc03Ffb-lINwECdN(!oym~HN=V0^K-H|D%vQ3TRc-KFlX z%s}lDGiYVmgYmfhrtsub;$84!)otxxD(aHH<*w3yUf1zdcKNwwbf1MNWxi)a3+;K0 zT++2WR5awQ=k5=K&cUwH*-n?;Zgbtc!oa@KDNfb!Zm%;F*JhN{i+k4)bTxFbEx$5y7mAb25b5Hsfx>Hsp*OF}(3pM8(|GIGjJO5hX zBcFCCfm&lCJds?TwQ4Lma9EP#RSReSt@ zK@J$PtbUJr)pFcvxeQy*UJR%uD~Uo43ZmrGNNl$Mh7gZcTzeJXu$xi-9!jFB*H*7Z zm6dr*3v^)eWyFIllblt6%;d1@X+j%aMN?%J1fVtBh^c;gnt@Ai{h-F!-mR02JVnm< z&w1bb_lSni8Fz8eeo>Rddc1cWiG=Zg4LYHIsT$YH?WF}GD!F6FeDKzDWg#btk=E0M zk*>r>z!BKXbN$dYq@|WmLsLk`j;BGV_tR9T$b9{=$mykr4{_vHkShz;gOGCd4Pv_Q zw8utpJ#Vg9kFtl^>rGC4&l8Y)z2rR$AQ#XtR~CzuboClN8Qw81DobXz;(+ykxb^A0 zU*dT=4+bhZYyAn`;^pKXG6LI~3q1t3ul}ae3-`qH!Qk6`a}QzJ632D$RKNIDkRy#C zI=tx1zH>eY)2POp4=W^+7W|*gHy-EwZ6_za1`w1_I|V`0dlJ}y6s{ys^Jh&g zsPPmxtXV~aVrZO2ugO88fpr_qq`aHKG2f1?1H~ebRo6{ADfe|GScacEU3nWUR61(L(>A6glcOWD;e4*&V^X!Y$*H7YD+$o* zyswG$J0Tk1-M7~r_A9>vU-^@?V7fqSxzD@$U(v>DQd*#^+>=%>A2ZXnqPx+-tt zXzzF|xfWDm7wM~~*$!GY)!u@9nY)-8mSTTBEanjCqh>dx6+aT)>I? z2&t+Gs#=s^&ObNX_*~y3T~R$yL2^#C@VSn1>-kG*n_Q{AiMxQ= zou}El(~-%UxZ+?X+5~ay3kO$d5NIKvhV1;#``oFxvZ81;2HdJhzcLn|%v z-ig3dKWwsNXB+hadu<{+i)t1hGYg~kD4BP-8gec-^&}yG! zt$Bdni1W~Gux~QM0Zo4IYPXk|_nc$ELYBG4P4yo{qxwD0=k-EcjUN%d$#g2tdM||XRjfD+8a4yDNqf{@AG(1jYAPZd3FUanO&Kb{65M|bd9R(abnTeDv^V`Z^;XF z4OWb6uhDUoteJfo)oHI@3-nN$rF}hBLC+dUkdtBoIp0*a@2a39opmMt&E}#=Zhkq6 zam|Fb?Z7za7)ZTzwp=t(6g0n&82*v__2pDhGOosddL#%lE+$_i@tpG-vWVJiKJDqg z+igT>GnRHKC3^JiRf~(|{P<_FA2xE%lzRL;O1LO!ge{#N4l0h_Y0#52)zG-CjyVe3_%Cawxqgo*&h2^UJw^ zzLSWp9sn#5tZ9q7q`AWm^}@{D;i7}7=7<6`!h_a()G}4QJuSvMYo1&b4;#mIS@u*Q z@@Yc`DNpoEQZMrumx;Y?xlS+f@VwVw7v^KBygA|=jdeq2K`E|ZIxN;tj1CLLPhr_a z$%krPe7RwnvcfdWiV~k~Fg&k9`aNBL0iRfW|Ls__D7aV%eU^!`dhC`gqEZ#9XK|&i zd?O3lt%_u^&_5{8jzzYh&N&tnyO3l=J(M>tkBbG>w@x#beOhW>kIN4Mpd5q2t}leX zHhjyTA#!l{@;0;?G4xp5)*IKd{2dm>;48yEEOPHxeQj?cPm~sA=IT~GRy-|#o18nZ zLow4F9U-n)-OWa9=e-tdc38yUve&|5Ox0`m{o5=2>w&wH3w>l8iHzFgwGkUE|A6JK zR9NhmESLa=!QiSZY+wEX%Y;Xgy(W&g7e-SX$+6n~Stx^+kHn&qc4c3l`el2GTPO?F zyz&BAaE2-#&jOuS5!zu9^~m{u20SWuS>MMZA>ZDX4^6u-mbLc-gnaVp*#`QcPG`X# zF~iC;v8ZQMC)2P9yo67|f^*$7-|*XAa}7tl&!MZ&l?`4n{a&v7ObJPVBZv5#naUGs>mG6sB)UK_kio{`6hjv{5M zrG&y%bEsY`Uu^5E(XkdA`Kt#MAnKk4QE6V6_9hFMcY1d2jE_`R*JgvysNIF-^Ujm@ zZW`!bjRAEPWeL(U%JS6QQN|NzHG4qrFspf6^3eWuGh#U$XZf{%pHJ&2d;N3+s~aUQ z;J~)lxd2-01gx`>qU>$I>ikiJa8itEQ@exUs6r?_w=f(=kbFjyu< zjB_3=)D(*0qKztZy^9e(e)jC;9wgTANeau6nqN*WMtZM*HEu-7)R-yDCW4T03c*CH zB%el~Z_j%clFwb8kbKXKpqzUZe-tG#+ib#?8FO6Pm_x+MiqqU5P_|EZP2Ez5JcJxXiuHA4-Vgdk}=f>cToH|`UVM#L{hsLi~5cA zwFOSyLhEa*NDaHv?{PNw7|_%}o6Wvq?37Xp#Da6F@))FV!~kxad;mG3zpiOkk(c#c98;#a!p zRpy(2Wm4`vzmL+!@ANt;oqstSY1ui^bF7^)TSiv|&^<4Iso3qiFx%qVPqm}E4WX3u zLqv!%0<&*u0KF@Nv~V5j{NW^uRCf=2x%5X7tsuO%`lht3=h6!xs5H4%AK8X7ckZJS z4|0dOf*~NdL-{n7h90>eh{s6HWE}e#7kezDW6t>U&sYxJNkZ~l_gRWEe zV4mo~=XH!u>DM_<9n=_*M7$sCHE3XX{U}lC`z(jM#yM0jOtzSCCr+Xh|xe752KBSVs zJx?qEu)yfdL6(QU}@Gbp3|6e zsO^}R=aa-`TIg^0Jh*6QpJYL`xl6+3jZ%n~n%k6Zq+?4Lln%$Ju-WfX?IQP` zapecK%lE+ZrRVM9__6(G8!I8_4tMaAnlOV2AKlo- zj*IDnJ4>y4mcd1*<)o*kmhS=aN)!kRu6mF;uOXRb-|K1g zP;O`Kmd}B=$&A{QcQ6+Md}Kb{+-kR!`k+{ozeiG};|JRC4|4XZVfn~^*dR~re)QTl zK{3y348|QJ?&$y3eUB@>G_avSIEAipr-3(GyMMv1SZ~koA|7_Bqp7>v_QGMOLh_RMCXCD;H98qF>NNU*z#w=rY&moxBJKsUQw-hB1 zUmQPunu&QQN>m$bxER+glLG1aOOHWa&aoy!Br#II6r$tEtkv^>plXph78c>r+?B^R zde5B?Zlm!#3TKFhcbi#szu#l9Gh+iDsXlssZCA6sXD^23T2&g+b$AXLvt#kKb2Tbp zITy>+)84YXxk|wLm&|lMA&fy)cn>LPU)Y4k3RqEdw#oPg8p!ee%hH)h7nBq`u{hcgadV#*mphF@WcL*VDvwZ+QzH7;EQDwjsfgUgzYli>%RYhKPP!z|!(7eB>1KzHN%W z8+SV?aZT2Lsonz?;EMXi^2wO@00hH7XB(Kt#HEcCcB)T5m6^bZ?;h-*R6%l`gBvXE znE@6PvdaC93LiPQ>NSEGFC{IXX{p)+-ZSK4at|TQy=UH;77Bt%epBJ*wRE=0jyW{* zPK#{p!}ZhD<4WZGw1VVjUXukEF24fK-JH09X`8WsnsX1qxyu?mPX!x5Tk}19$W!>sbY90VrBCM5?^K+exr>DdlqS!9s3N=x{si zolnKZsVdVwZAU;%IpZaLxzW{YmPQaw1k>h>MxfY`M@lb1Ek@Yee2+TLy}yyAnKBCp zJ|vHSk@H&RnfBu+=;x(0$&8Mlnh|uC_tD=+#Chxe06qi*sD9}MXxC$K;YMXli2KNi z&2#RegpvNi3z*@PK82%R#I;t5+3_HK8NFt~lB*uDyon}c8%V#5;lm0`{?|DNjf>Z| z=hOVsMD_cfqsDZ#0pRJ?DCF_#h?#O9>Z9j>FMYs!rq5^7f!?f@MbA|&`W#Wog0+-M zpNG|!g698*~a}iE7Rc| zVzZVS7Bae6TH-qCH$s{p)i+X9?#OBJNs}-0!pcd7Kt1?KzT_&Qph7J_-@|{*JUYRD zQU&b0Z!4%p`Mv57O{u@5Z`a_-RS$3rm2FK6d5Vn3%LfQT=8RXz;K=*j3vT0)5ohWP zg5I?&8&G=Q*|!f}kwhwC>B;is*Z#m#_xe${{3@Nfp~xw7mtSEP#mSofJOmg8tK_s6BO_4W=7aw+ixv~e+X15-lg>ql-6hq{ocNgU8tlR{;Nl73* zNOw86_nbQvB?R8T$8qCBp;mvx@fMp9-WcS}?+IuO+ZiV|!3e3CDK zY29Yju5AlHHSZ-a_=6+84VF*Vl9S}&`sU5m*6$XYW3W>>NE|W!$d?nf#$bnkiq3eI zWYQPb1%k2{IdzDt4ONw#%DpsOCJTfSwE zl0LhAIcEs5qq*u3de16unBxY2$-L%0>jfgZW(1IQljvaie1b(z&DukFJ7Q1uOC?-s z;r7$$HzxN5=1DZK&QqtXEKi;FGGOS-we!8jdkLq;S771y=I=qym7K~pj-S#argbag zkn?&dmZmBi9W|!zo4gR6-s*v&ne(oxHWDSmZiA1Q5%f0>!hp+bipiNmaX_CPJTEWrNFE<(%#Ow%r;6x=tqi@w>oB{ZfciB28(b zOP$Co8c1*;`5xDjRDO}51YJoi+bBzyy6z*XY5UC?59BRuSiK(P!iCjin(IFj}71|}874yk^uvIm{`_%(~mQ)A#v=KSYoqX9L z&D+8oOb-(M^s(iwTIsh}V^@f1k}S>dvpNCO;~K)7u1)nziQ{!~9KBP2s9gvGQEf~dbgQ&r79@jDa*U7EZ9ceT**9q6vs4AgzN;=z?jhib zXOG*t0xssBIkt%*cU(1aEdsa_8{RaVUt zbWyjWlqt8FNsOdBT~g_q^1K z$=yZmQ?);HM2S6RMf0cfbM6v356F0eg=G&A&U#)eK?`}CZQOFM{HB<7WGJ$YS|EF_ zdZ{jcU$v2F>Wl!`?GT2}HZW$1dxDz(lB=GfN6)+!j1g#E90(o3m9u&vj3j4&pO%M1 ztIkGFG_*%sCf}!@CQF<82Q!c2==C#dkoRt>dSc@SMX$do2~Z|dP@?WKq%)>hYE7^V zIBJcK%~yftw1_lj#&cE;<;bWmZI{QZcUU#Zv%;q`&39R&y0sCxcGJsVFXK{>t7Q2l zz*E0x8ECp(KgviqD`sB&(u}2l%_zX8X}$*pBC$pDLJ2Cf6*EyobqVrmr%f!!KnFd@piLzvYgRpxCVu@M^-Dg97??K|=z1rIUAdVQma3-_*|Ei?1qZ2T z{6#soeV6M%ZpblEu7-bqo9|KOx>w_cVwp&?WfZ%}{Y@(Lxo0L{DwKm#yCn(N z0}BG~kzU#&ZaO7WNev8f_Z(|dHqAtXpq1##`R3NPB}Q`@nj;w-T+l@u)v^p)^CQQ= z;7Fj>41q!KN-Yb1WoKhqAdG8wfhSS8JVys2SZb(xfU4mDN{icJMz)ESfeq%GlWtrx zx9c34=Dh#low#FvWUq&8c=Fm7{&4e478)Hy=<4@a2}%T(1r8;vpbw27QH(v?n24Dx z@cZd))M>U*pH@nsp0*%kXZCVghF)iWIXW1^p!qZynPjsr_<*Kdwpmp%Ys-Z!ncoLK zY`f{o?q3 zY2zy-s{fb!SDv&IYE-xCWYRC}j@lDh=xx;Q!h+*pK9ckN@kn+D%d;8&;;Aq{H4kKi zZ_P)4x9#9n*Su!ApUHPth{}~e#{l4_@qBbdhde}lITp3Bx(6yvq&JA&2nCWo05f;c z)qBVRAGsP=H^6(|Tv@OS^ZPjexB>YdvAOh-RvOcEhqKM*4w$1u;BxD+cK%7~)zk2k z#RJlU_uexRvIYhs+we6qg0Vgq@~Gtv%8@>QF$?l(_}dwS9B5^D-D*RZdQH72&`H_< z+F{*W1;%Qppe*@;sLS`z)X13XI%3|LkzR2Xv%<6##sE5;^&axQy(?qjl8no5%0b!E ze+z)NIlIBkT_ji)VXWRK*hN!I-)E2)q*EZ?^PGYtZ z<@(ZwH<))BRnsBobG{u4)MkErJ#eQJS-KvgD4BVX5D<~cQt7t3AXtsIDsO9gu;4L#Jt~L{1&J|CiB{!5? z+oE1UtskH;(74*kS>O!nD*%OoUVX73u=RTe&b!;psIE0fH)Vdhs;)|0Hzn5Um(r)$ zGV-H3`{R*&yeqnBP0edH%fIM6wr$!cAH+VH7O*IC%;2jCZ19;OQtu_OhotYtOl)z0_wy}OP(g;U?2A^Ih1}~LX zR?Z#Ntv=Ds(8ru{3JAByBV!KKPnCMeb^1}DFtOBdFaX$V{nF2(c5dx_+I+5z?`$6` ziK#$0?l^m9Up7i=*H!-YHZSIA{vK3g`i0eNmN_HN8^{r9`D(**BsNc*N7tuCwfa)m zcUzWM>zHjqjh`!fy__U}5OQr>a9?(E*Brr(`aR?iIv8?1|mq4)ss_q&=<)cs}1l<*mPewgm2yu};#@QZ_l( zoF__V^`29tA`z^ci;R38 z#wUAlnmaXncb9iyoM;15G6}D=<$a|8w)+OHysRpmRbQvfuF?{^V!nsc(3kg|3MS;! ze4agXuDc&f^s3%}bJw>X1NEJk#BuF+Sj@~b?bPg=>9mWEDyNV=z);SJvnP>Lt(mxs z=@RI!r=di4l^rRg8IPB@d-~q>G{zEcfOMW;n-nnLH(n>nsTu>h%PqMtJCM+sh#SS8-gEkI zJEq{4o{%$>GEePqJN^1SF-&6a_c>8vQirtQ^J{;oQs)_Ljfj+V8=RQlVF!UOEA8!0 z;8tY8yL9}2)EO);sOn>WZ2;0Ub+-3euB+!8{oW-r()&zuD&rw6udWrdFXE$#{M|tl zuv2U9AgGXfaEh~Ut5|fRg?FlGva9(tf&q!A z*j1Q@tf@ARg;(aYB%}d|a_0k0SC1>7wok5SX*pGYO3q)(efnfROGOXLNqJ`3_CS^D zJ^btGp5F(5Zcnb_u5^1Vb&bLqd&YO|c@0 zqhvw8M-B8uK-iCNTlYY$(}$?1ITg;_dk?~!t&2m|ir-s4A9VhxNtW*!wVKbgP!Y@M zikQcj{Li68)+5y}Xi&U?=j%NhJkp01YbAw$Tl0;=8{EXRo<>n($uoGUhJ%P?8;YvQ zHzShxTr$2xs>Ri;dm!-gr44nWyz#pqQzy#VtE9z|xkL3^$TQ@Z8`0LpMIS^Xn)5*Y zO?9!_m08?ax^II~mEVWxFWKxGYq|f%aoH^IXJ)Nf9$&^UGShX;yHYW^7Uq3g(ziTj>C4O_5L&&pPL{yj ziUOjif8J3)Hh-9_mwKbxDpmb+4 zQ#p_%ta7ZkLDo+%V8gn|oA|MlW@JJ5`c0@Lp9X~3>y$!<&Sjg=qw&{=gT!!Wn^8$L zzbO=ND+nJLV%XUAv~!fO%#-PVBod#RWOQ`kgz}V8*4~kt@44PxE#SChZ1N6xsL;{z z1E~TlD?OC!sn%ciz$H`_*yA-w8oNPi+pb;_JK)ejOA z{0nYAYXYbvDmq#7dfeTgiJ3c%z$4=!=Z&UQMl{vSR+RIM(P0q?u6b~O`Z{V&R2!G~ zGa1TbiaLg~4NQOHYWQgHJuz7)PFHi-sn@gAjAx+-Tr-63KV)gPd5BIX+QdmVVAl0} z+;VRH6$V-?y+LXy^g44^xy?OuCkIq|w%XsY@JXw0?o7=orn>T`YmsfZov8?R^2EBT z?)ju@n78-y>8_bOA1xAp?7r^7$*0Jf=z`wZ74^D5Yi8l(2>@7g_Nrvvi1uINK8b&` z!73|~Urzp39-&5*P-QFSyPpe2=NO2eix=h7)W*yBwN$A5OFm6X9L%hqMx$fS9Lq`9 zx9j@STXX^I_Z-S<DGNDD z*xR(ImYG!mh2Ka6^detd%1#iSelaVMuOMM_u%}uSc9#I(q72s<20=$T! zr-cqidmH4yn&Wv21d|D=rwJOua;3!vn>Rh$u28j6d%7!gQ&1+8 zduAIL#Jqu>iiK{e6-I}OjAqWN(*~CjKqc!G_Q-i~`klRh^Kny`Wci%7@gor`r|TD= zr+(>$uAj<%3R%CYCS)7J2pPM@ZlR-@U;BcXPOQg?qTQO=EN(_QqDa+q<}uC-`#+;! z=cP7Y-setQd)mb>rF4!)S>NYUdwR<#ff^|z^_@=xJIZs8pDGnuzZA5HP;s4EEUziY z000~grB?laCGRbySbc*~*^>F_0w(61ZALw%yvrzXqpVb|#%pNNXZ(!?+N4(fB?Crg zt$HmI-PQS2hH%Q{SAb6uK+dN@1>_ucTbQmMQM+3!JwS^Qt;<>Eit$W76Rk9IrsaoR z20$h0>NQK_DZs_ZdFL32`!9Kx$b+Ka)J{Rfaugnas~#9mwUX1KNN=L3cp=JH)roPv zc;$)byM~rrX3H-r`L4AD7)N9}do3l=d&mVhkN;o4N3Fp#Z^*DSDnHj*VtbQ_%(YEP znrK_S2e(5~EiE$d8K<~D2W{c*fjDDU2BJYLEH%}80Ht7~)1tm+#s;q$j=5(%i4Hi# zd>W8{LE;ZCX~;P-Oe|`U=iHe=1~P_n%`zDo8@za`eWJ6dTa>*9KKn99QC|p8)-N>x zQ+m$B#6T2Pv=6&Nm{(`O=OF9?-J!d$yrT#0_Z zcDS_k(pX;9)T-C}W*5ufBj)X_%{J6`5}o1ZL2Wj_&%wJ*{g8_W1UPlQXJDxl`6~$e zpxl~mAj31ijdAfj6N!0A{xq}uIuGhzd%nloPBz5FU4Qk;a-ep$;^M=$Rv6hY#I4+a z4@}aow|jY9a`M5yZ+8s3|MvH=$WazogvEdB1RR$4Q9KqFDhK67vq&CR1cPP$T!kfI z*@HwNiV&VGNOk{C?(AAm6B8ySC4;I(mLb?57If`pVDfuQqnqO`p z-3wEqjeAKUWm$Z<@?BWOT`JqhqUvP%d@OFK6&qx^+)Tnp(&s}wJZBXI?NYZ;{0)Vl zD@VyPp&{o?g!PaVuQ@7;l$=#hb7!e|)nHL#{e?fuB2rSfLl#l@{-u0A*PQBq+lOpW z`MsW|zFD^+g^T7>Ps3{?^VSxK&u*ixV*gU2n28?+?S(0+b78tIceVENmoBagr9z<% z=y7?`EN>!~ah9+MPnPe(0@+jCF%}gHD@VyPqyfOjoY{L~QWkr2|Q`5co5MiICXVvNitfV<2L+a^;`TsS>AU8}PPL&vO;FcaZ3oYm|b$ews!^?HXFE3Aj7 zQRc2#z%*o}lN~iIf-AX#DI;J6Ru2Rd6PxF0oXg(d01!;me45?5(3?1aU<1Y*cMKMx z!S;7x7QXD{rz#~C-|;lOnDW+HXkis|i^ci#$gh2>gIl?_ff#?1;;1ojpn1RRL5Wy?)PxkJrD{`&~n;jo=EfZd!OQl~IF?AQqGR8_3>c zu8MKmY}7mQ_uziYvQ!V=L&Las%lrE>1UcXAM~_0_L2ZZx=UK1jB+=9y1D>VnQ+<;Y z0ibD%FPGm`rtO`7`!y*E5EkkbhXbOKuQ&Vs$UOKuG@=NWJnM&pC;>DJP9=` ztkU8kv#2+co{;d;{m9cyZ9qbvbz(@GP5tE_P#|h&M6cDi;X$V5J`yQ)0&=`DA8RJk z8RApaR{+kCGODlez+Fqt9u6!Gy2_3Xi_m)QiE6rAa^;UY|8B`Qn;s@2T33yZI2IMU zv`}+@E41+B{Cn-``zyHkOtnmHh=XUgf&~pYzXEwCg%zuBqe5XuejZ@iegDBjgT<+H zf#pS*v)(h=5p#E;?vGrUBdUI+AVxh63R2KHEv8lG7bruBM(0eV2L?WwPlJ*vji`x0 z$9u}#u4y1Hma9acvu@HvI*NW_?Nux?tGR-IC90FPb@t3SH}I*UP1)dJQrC>77pl+hw+qZYw;}BuLI9-m(o9v%s*~qf?-V{Wriv!$49s31R#vY@ zSF=xHi?DUx0$DjjP{?l?C3qZ4RrYCy+}ClJ$8o)mLc&bs#q7)Zdk{aAg{~1LoZ%u` z7QQm~KP_&^y|TpPjcK;gqOiKc0DQh)!9X&!i{fbjX5cP0ub+a{TOo+(&LC=kWW*Vz z3~aDg))Usl^Qs3@;--CCIE3k`T8kuZYKBnE7UZfOb_B^umE?PzC8fFO_63icUi6dm z-_ar#q5tdwU4+!bcajmj%~%=|rP|XuqSibYyM7O~Xgr0q49SFin)Ta}?cv;>nb#bb z;H%M1Q?j=>IBlgKN7p@>ITP=Q4nSNrVsL65O?J+wI{8j3Y;JQQTBwz#`yuSaR) zQstbexw=&5xp0bOW$czYX(S3-XFc!D)hPRBil(-S z?Dmk%srlxbV-?pb;rQCFvInAU@60AS&R)tA)EJ1r2|J|4)ipB@ql`7kWwnuFY2SrG zS|)p-ytGV4KJ8L})iB@Vo_A!v1kN1B?5L-yFq(CFLVD5cxi4qcYnAxUSq1g9 z=BYW6aKZ7fzP&}z^G+*DPM59r(cz?}UI45xy|j#5Laod8<=1|zwq6hxK0*%&DuvNX(r#hdaZCF z?c=hL93jcy7Mf%^I;!f5{bU<8gAxUTesst9$~Lmgd7mRraYq@=HZsV?AfL#J&{xUt zvsiJNv5}5`^4IG<3bqm4C<_W>)~pl2M=Z!(o7;-;ZLS3f*3<#?w9kF6S|q=as=ry} z#7pycS`lX?kvCG)Fq@UXYULDB`fQ9jN#Hl#im2sJ9PmTlZL z`Zl=>j+A);~ zX*50vz~z2$9fRLdJrEFjWprPth$>q4?ZSD;6^yhi99`dMu*4~rMGs^(5j<*iSOx~J z+mNOC^0bd?OWB6nMxJvx^fLK1dxu5w+IpG*N>&O3TO9nXTEXC5cl`f+n(T7!JKUXn zR(l$Mj*y6Rjsa;Rpptrz$Xw@X?Yy@=&qiXzDhTI@KIoOT#R1$*G&vc3rrJY>MXI=Z zjUkrG2twpkC({!`lEBul-NlKCNRwYd9bUzjst2;~sXYUWD%x4~K8D4n*Z|u=B)?C4 zIWTH9VpsAh^2-fYL3;R3b3yNJ!iAs4^fR-j5gOP?{?2SI!}x@ zm}B5RsZ>~vH6~nE+d#yY;mGrcM*N4`YCVly=asxe`WO(t*@KaH?s5B2*-7t~E&`T9 z?tCA->fS9sYMRkovn z`pGtLgz)V3sfJ5>okXc6rMm~z$})ed4P02Rtkb!ah#Omf>$Z-WtL$-(jz^Jxsb8vc ze};0zX@TC%oRM&*OTiv(Mq&Fi?@_0GEwvfM*ksak z+~|EY|3{n8nJAs1x4UP)5hzUvvQ{w2e;$`Kf6oJ!I%gFp9`~i6wtmSO;fV~cUd@9C zx${z`;f+#gN~VSwxrtb7LGVqDgW4%rUeDyQa1-^eR-^J}4#8Xt_AsD@`aR$_3L>|K zQcBJcspV$8LCE-cwZFM%jsQ=+XW&PBCQ<}zy$$&qDdZft*W7A8GW<{m8S7+`e;TSY zOQ8#K)qIaMBnn;q9w^b?l_BOh>$!(e_p-<4(@?v6=kw1%5Y>j7-JFreQRMr|d?Q?s zuxic&`$XTfh*E#r6EXyj&73>46`avw%L8UBP}ZP^s2{a0#L6uvhuBD z1EMn)L$x{OTr)B!G4yG!6^M)reC}^7YGl-VlvNZ(NsHKI^7!Q%A4i`|f2JFFZ9eVU zwS2hH3y-+l&?{K4cp4EikhyP`_F)}94u<-sEN(2dQ-}jYjn}Li?2=~5eN-i|A!M)l zE*bUsz{RQKl5OPpGp{NB=QTBZKO;VxS~?1MP}Ix5iH~+1iB5}V*|&jqObj4-K;`*r zUXQdYafbS(BBxu%o`laye@@kY042mJ&%QmdF%r8%7JyFQtMiA}EGhOgpSDcuSEXeW z3+Shb?qmf0Bl*$3m?Gao^|fCk<$TH9fwaKL~ z--b7u_&2!Yam}b+e-`}4TnhuWk(r?nKT%DXd>RijBedEKA@po>LB{3N5QEl?sUin| z9JTc{H33?cMt!&2e>?dlhG1-%^|Xc9Mfz`_MKCR+Y%HWVbF9@6a|qXaT#Ri0X@NM+ zEa?Z05^k>A(D$D+6N!i|wvjU)-g54fcH2gk>wFK^Y%<;?-rqLAYU3)?x;TS64U3X( zpvE(H`=L^Grsg7x>{yPqxaBkRGP00@=(&%Q212Z^z7eQZf7(7R{L%D?2eEEx?@37w zaCifYPeqPxXM@#+G@E50AK2kd)Qp+vToIQUmlh z--9F9Gg0kwx@=0Y|7OWj;E!sJRTv$|Ig6c4$2l?YDC^Jg3TYep~#9*S(|OeD_T z__q&wW!8ZLe<$3XnmI?W<1_F59^O;3b7#VnszS%_nE_i-mQ+8L;r<%PYsx&t1W+dz~61CMg@^c+we}Zh4h|Dp-P}_24@%*P|LaXKA z(9G}iTwi@^&h7*qQ?WIS}jyxaAWg5L_O%QRS&qtbNZH)XB;!RBYg(guzbE*Xn#xQ zFbjxpt{-5eEptZL6N;|nHy!0ZGJ7c&0=AxGFmG^!IR+TIf{|YejXZ%pxd8 z{66#kGcRg>W&B`R5RR({z{-w|v``hy7}pF=e~5-vZPv$)!`>G4X>$yS_oD7*8;h)U_2?)ks}yd&hm=72z4J!dHzV~dbd2+9J3X%SEfv4M?-|X*>`*2v ze|IFp|5*ceQZ3m&R zp`uaEw{v)KId^OmbH)N@1-GtVC2k*Rf6e)xo&095Q%DOrt!hKUg+N_egaE&^kzmfO z2)+)&*%42pN)3=(KCCSsr?}2W>{G=1I%U+T=X+PLmz!8oMq8Jg>*1MCBQ$;{yJM01 z|74_o;j4oX)i1?WY4o$2Y)S^zS6J@+-n`S&E8suXPO->4AOcqpBsix2K4bx0e>bzu zfT7o{8byB4bF&ScP-bivu&XJfla$7%B~RK#h94t6-*b{BxR-^(jrvt-x#K+K(}Y9T z#K@4|goWv+LCIvCZ&Bk^;5~cbK9?sGe;A#o_Fk@wnq>JE21_n|u?1-FmEH#7|Cgd$ z)i+>6{N=JxsBM0u!cFiDwTr>!e>qOG*B>mSJQt|D$RX$VajovWjAXejHdj4&Bdb?o zn9?Lm)C57JFSQ{Sym!I?H9EA8AS>JQTzkgLy+1Slh6YBSDA%^Ka%*lOH+t8Em)L^*>Dai=5iMLNVHP2&EV~pm$tyeIvuMG zK>L(YYE>QIYvQ~YPQWvHe-Z%T1Y_2G&*z@iN2lfdNCD;VQ89tPo=<}>?sGxO(kpMs zi=){^tDYvz_e$SVX%%N}_Dwkc%kLqfGGzvLArW#WwrIIv_j6Xs$&(DIRkA9nq=-uV zo>i3mNDRixv%?n2Hs>8ppe%5zwC>V^uG#NV@}7KqwlUxPmyT*5f5}>M2X)Dq>S=h; zS@9Qb*SU}w=asMSW{^*V9jPkyo~BB0BJfrTWb-PYCU@9hPPM7d#;(-)uDl_Octdp5 z+8(j+HS-v&-3?l|`UZ^(MVl6Qq>ScKwpW{|c0Lpibwz4-VIeJ*^9?s@%A1i2jS{Q* zeOTtX&U$TlDYa8ze+MJR)Y-`Lxq2p!DrS%D0fwW*bB)`OTuhCQ6$k_Eb_J^U*xYWZt+gU-W^GpJUg@li$gD55HtsnO5W$2uvInwLnYCKY z!!vIzu-t@2@@XR;llNdEmWs*cJWz6YPBg>%J|v{C>NVk+f7TDtMr1i>;#&okUiFTJ zXQ~dPGXWW74*wXP2 zl#T?m0O{lykUr}e{wh&$oONdsx+PVa`y0G6I9>f7fpUDJwkY`VZi{$g&I3WNcd8ez zGahu_a#o=qfAQmb&oXMa=kHmt1oFPUF30Va7|j*252?4_V*v>qrp4jh^FSF8M^Ls| z(7N*c85J$AoK@@bCa+ab+vuwIel1xd4w`KcaPoHOItQiG?>Q`>+(Wj}w_HC%pf+pp zt)!0by&phXqb*gh_fa1`eX$*JIDP+hw;0-c+GU`Ue+eM>^AbeQ9vrth)uUEP(&pr| zIOuX^9Ur{I9MPd^k-37El0K5C5t3z6Km zd|t`MqxyC0$}=oLr{z;@&x-;>{!-302vPNbEOACZ^=8$35 ze@Ch0Y-7Vt=A+6;;9B{6KsUR3)kxQaLmsJnFi(A=Z*L%s z^!Zq?^SlS#8t1r^iGHdbSLLevHkP1kI*t9X@P`*Q(e=DenKHz!&c z3iCB5o^L~HyQdF3EUjI;kzPBKgS*Z9e{IiGQ|6M8O+^}6kRfu$ORdfsL)jK$SiQq8 zN;T(QQ|@P46K}c6zRVeE#8L;|&)uJcjlfo4jtH!~Ygz<;GD5qJlu<@b-HJ#mo%u8y z`QAOSv@#a3Z5T~odcEDB8PVKe>cw8F2SZV>J(QixmmU}J4Ar_^Swq*OXCkPse+@2s zz(2^C&_;z%03q89{#)@u z7|oot46Vu>1J&$WeSn7Z&@RuX*{}P{neS8PW#}mZHy!mf9{w%!jp`)~ajk4Ksga)F zM-4!cv1~)tHc|ci2a7S$=}rr*vK;GqTypaJcvPRkz`_EWIS=M_f6)G_*RvZ-dXW1- z^(Vt}m+E_F%wboHw}LtS9`z10SG}WR(>=+)$<}91LS~GJOU}0ydpfgYJ6HXgvFLrnV@b3< z$|~PK*TS~&6LZ|)f8*Qt-(j-aucADys8fD9VEeA|wkvex_FUt(AE*d9q5}n=(L9Ey z8&ExsB7dNS&CTo?q0$ek&%6`w#GN`#Do%J~Lu8EZ@ zv`}X-2;lAWYKwW0NajPaOsTFK147AD`bd-=!5s2Eqb%E*UrsfNXXbW)(R0l>63ds{ z;qlx-PV3Ypf6(MjIikX*&4q(nhxT~X81Nv`5z68t9Ci-DJxAX#X5DLYSXU}>xYP5V zat!FK!tYnFMftAe*bH%2bl+?vKAK4L<1?~Gxre}qe{?}w2&I(22BgR{{%)nj;e$x`4?Os)NV0JlDp$3X8shQ9s4HF z`V&PUGf)SelGe~a6u|`ts^4>h!KW70abENse{!rZg}L({d|dO8MyU5(vm9Z4Q&lg& zXfv?L)Yj98T;Hs%cn^!DeC_c-E%vuMv#3>5cvQeY5*#^y|Ed(dLeH z-l*zkbP|i@3zx^Ff>^87NKfwtpje}G-yT=qa>hg?dsS^96Xa6TvJh6!HX@B{`ftuZ zf7*1l@30V)uGM(Df6>RQ9-!F*GpEI9=N<5bFn(r@M5uKv?fjSf1x>&GlY6aSASEuiNIv}iE1OMJDI-+%I?Ul z6<)(jUELakc@$31zRfCqCn_1XR~oR}z=o%$#YrZ(b!2EBLsaB970p|ddwI@M#XS#} z$CvtMr#g32@?}m{J=7Yn(P2SfPK#=3y(3XKeqep4E3C(@QR8ZS1Ip$M8P$mUD-2op%KAj1<(fh0UMxPJ$ zJuP088NzeN2gwW}kvA$7`Fjp^f9mtr#!18N>o$Ok8TUVrp+=QwFdT8`F;2LbESc$If1yTS-*gBB zx+GT*?rOy(#`zMC?`ngHsXUbOI_b~RL#Z{#f;L;T3Nx0fZLI|s*wTK_ti)*TVsJeJ z!i(bt9p%LdCQoP{q;)( zLuE1egB$~*Qd4?%aB=RMe|0)v^7Xz%^^HT`(W1)*Oxd7pBcs>zO}_q}DhKp2+)T<# zW5E%~l|>j895j2dzvgHEo)gXWi-n#;&R*^o7JI!%@C(E$ErK4&fW637gGOhYZ3ug$ zW&fhLalKB&pd2@h#9QXtuGaaOmh zirU?lknf?P^5vI`N#$MUA~$=cVgU<8ZjOQY^^)17iy%x_7+}G#&tEDP3iVUJM`U~M z`9|o7Yn5#-#h!A$e<>kjw5tu+mGeF=3s)%nCa^Il&YN-vmBbvkg@A8Hr7pm1g*2-N zLnI`zU)L(ToM?LqT)5j@B@hF!rTHGZB7I`4n8O(Xyaq)qkxG}l44P@ZXQLaDF}n+3 zdC6SPwb8!Gn9v1#+`P6SRNS?vhh@o|#03D?wX}&FQ;tn9e~t3Xkr?Mo6&V%IY78XB zNfD++h`2|Tns!HI$SW(QmS0;Lw@3GFAb⋙La$=p1+i3Nxd3v2>j=acl+qdn-|G> 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 Je@>zh5=gWKa<{Cb0=sY8^Q*u|< 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 Date: Fri, 17 Jun 2022 09:27:23 +0800 Subject: [PATCH 22/22] update:configure file and CHANGELOG --- CHANGELOG | 24 +++++++++++++++++++ .../XEngine_Config/XEngine_Config.json | 3 +-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index f33c9ff..819276d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,27 @@ +XEngine_ProxyServer V1.3.0.1001 + +添加:会话转发模块 +添加:协议转发模块 +添加:转发处理框架代码 +添加:转发配置字段 +添加:转发线程数配置 +修改:验证模块错误定义 +修改:移动客户端接口到新的地方 +修改:获取xengine版本的方法 +优化:线程处理代码 +修正:客户端离开后多次打印日志 + +added:forward of session module +added:forward of protocol module +added:forward process code of the framework +added:configure of forward field +added:thread number of the forward for configure +modify:error code for auth +modify:move client strtuct to new dir +modify:get xengine ver method +improved:thread process +fixed:mulit print client log of leave +====================================================================================== XEngine_ProxyServer V1.2.0.1001 添加:jsoncpp模块到项目 diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json index 8a4d3c3..97d2d43 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -27,8 +27,7 @@ "tszAuthFile": "./XEngine_Config/UserList.txt" }, "XVer": [ - "1.4.0.1001 Build20220617", - "1.3.0.1001 Build20220531", + "1.3.0.1001 Build20220617", "1.2.0.1001 Build20220413", "1.1.0.1001 Build20211231", "1.0.0.1001 Build20211211" -- Gitee