From 9dcced486988309d03faff52080bd8935c56945a Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 26 Oct 2022 13:22:15 +0800 Subject: [PATCH 1/7] update:match xengine v7.42 --- XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h | 2 +- XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h b/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h index 0800aa6..20646d5 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h @@ -83,7 +83,7 @@ extern XHANDLE xhTunnelHeart; extern XHANDLE xhForwardSocket; extern XHANDLE xhForwardHeart; extern XHANDLE xhForwardPacket; -extern XNETHANDLE xhForwardPool; +extern XHANDLE xhForwardPool; //配置文件 extern XENGINE_SERVICECONFIG st_ServiceConfig; diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp index 219d930..f7eff23 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp @@ -12,7 +12,7 @@ XHANDLE xhTunnelHeart = NULL; XHANDLE xhForwardSocket = NULL; XHANDLE xhForwardHeart = NULL; XHANDLE xhForwardPacket = NULL; -XNETHANDLE xhForwardPool = 0; +XHANDLE xhForwardPool = NULL; //配置文件 XENGINE_SERVICECONFIG st_ServiceConfig; @@ -245,7 +245,8 @@ int main(int argc, char** argv) 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)) + xhForwardPool = ManagePool_Thread_NQCreate(&ppSt_ListParam, st_ServiceConfig.st_XMax.nForwardThread); + if (NULL == xhForwardPool) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动Forward线程池服务失败,错误:%lX"), ManagePool_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; -- Gitee From f7296d7969b0988fe4c13edd789954a265532490 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 8 Nov 2022 17:09:21 +0800 Subject: [PATCH 2/7] fixed:crashed when client is closed --- .../XEngine_ServiceApp/XEngine_Network.cpp | 10 ++----- .../XEngine_ServiceApp/XEngine_TunnelTask.cpp | 30 +++++++++---------- 2 files changed, 17 insertions(+), 23 deletions(-) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp index d9b27f3..759b495 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp @@ -136,16 +136,10 @@ void XEngine_Network_Close(LPCTSTR lpszClientAddr, int nIPProto, int nCloseType) } else { - SocketOpt_HeartBeat_DeleteAddrEx(xhTunnelHeart, lpszClientAddr); NetCore_TCPXCore_CloseForClientEx(xhTunnelSocket, lpszClientAddr); + SocketOpt_HeartBeat_DeleteAddrEx(xhTunnelHeart, lpszClientAddr); } - PROXYPROTOCOL_CLIENTINFO st_ProxyClient; - memset(&st_ProxyClient, '\0', sizeof(PROXYPROTOCOL_CLIENTINFO)); - if (ProxyProtocol_TunnelCore_GetInfo(lpszClientAddr, &st_ProxyClient)) - { - 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 if (XENGINE_CLIENT_NETTYPE_FORWARD == nIPProto) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp index 5b9b4c0..c5344fd 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp @@ -120,7 +120,7 @@ BOOL XEngine_TunnelTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in //非代理协议直接发送数据 XClient_TCPSelect_SendMsg(st_ProxyClient.hSocket, lpszMsgBuffer, nMsgLen); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Tunnel客户端:%s,创建隧道代理服务成功,连接到服务器:%s:%d"), lpszClientAddr, tszConnectAddr, nIPPort); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Tunnel客户端:%s,创建隧道代理服务成功,连接到服务器:%s:%d,代理模式:%s"), lpszClientAddr, tszConnectAddr, nIPPort, bProxy ? "代理" : "直连"); } else { @@ -132,28 +132,28 @@ BOOL XEngine_TunnelTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in XHTHREAD CALLBACK XEngine_TunnelTask_Thread(LPCTSTR lpszClientAddr, SOCKET hSocket) { TCHAR tszMsgBuffer[4096]; + TCHAR tszClientAddr[128]; + + memset(tszClientAddr, '\0', sizeof(tszClientAddr)); + _tcscpy(tszClientAddr, lpszClientAddr); + while (1) { int nMsgLen = 4096; - if (!XClient_TCPSelect_RecvMsg(hSocket, tszMsgBuffer, &nMsgLen, FALSE)) + if (!XClient_TCPSelect_RecvMsg(hSocket, tszMsgBuffer, &nMsgLen)) { break; } - 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) + if (!XEngine_Network_Send(tszClientAddr, tszMsgBuffer, nMsgLen, XENGINE_CLIENT_NETTYPE_TUNNEL)) { - //主动关闭,需要调用 - XClient_TCPSelect_Close(hSocket); - XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_TUNNEL, XENGINE_CLIENT_CLOSE_SERVICE); + break; } } + //退出处理 + XClient_TCPSelect_Close(hSocket); + ProxyProtocol_TunnelCore_Delete(tszClientAddr); + NetCore_TCPXCore_CloseForClientEx(xhTunnelSocket, tszClientAddr); + SocketOpt_HeartBeat_DeleteAddrEx(xhTunnelHeart, tszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Tunnel客户端:%s,离开服务器,客户端主动断开"), tszClientAddr); return 0; } \ No newline at end of file -- Gitee From fee9b5b4e4457c29e29ddb41068285f1b9ee2d2e Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 8 Nov 2022 17:09:41 +0800 Subject: [PATCH 3/7] fixed:build error --- XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp index 6ddb638..02911be 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp @@ -202,7 +202,7 @@ XHTHREAD CALLBACK XEngine_SocksTask_Thread(LPCTSTR lpszClientAddr, SOCKET hSocke while (1) { int nMsgLen = 4096; - if (!XClient_TCPSelect_RecvMsg(hSocket, tszMsgBuffer, &nMsgLen, FALSE)) + if (!XClient_TCPSelect_RecvMsg(hSocket, tszMsgBuffer, &nMsgLen)) { break; } -- Gitee From fa93d946df0184c4787f275e70db043de4538fcf Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 11 Nov 2022 09:24:13 +0800 Subject: [PATCH 4/7] modify:use the new way to close the client --- .../XEngine_ServiceApp/XEngine_Network.cpp | 8 +------ .../XEngine_ServiceApp/XEngine_SocksTask.cpp | 24 +++++++++---------- .../XEngine_ServiceApp/XEngine_TunnelTask.cpp | 4 +--- 3 files changed, 13 insertions(+), 23 deletions(-) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp index 759b495..71ed7ce 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp @@ -115,13 +115,7 @@ void XEngine_Network_Close(LPCTSTR lpszClientAddr, int nIPProto, int nCloseType) SocketOpt_HeartBeat_DeleteAddrEx(xhSocksHeart, lpszClientAddr); NetCore_TCPXCore_CloseForClientEx(xhSocksSocket, lpszClientAddr); } - PROXYPROTOCOL_CLIENTINFO st_ProxyClient; - memset(&st_ProxyClient, '\0', sizeof(PROXYPROTOCOL_CLIENTINFO)); - if (ProxyProtocol_SocksCore_GetInfo(lpszClientAddr, &st_ProxyClient)) - { - 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) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp index 02911be..a2b6d44 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp @@ -199,6 +199,11 @@ BOOL XEngine_SocksTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int XHTHREAD CALLBACK XEngine_SocksTask_Thread(LPCTSTR lpszClientAddr, SOCKET hSocket) { TCHAR tszMsgBuffer[4096]; + TCHAR tszClientAddr[128]; + + memset(tszClientAddr, '\0', sizeof(tszClientAddr)); + _tcscpy(tszClientAddr, lpszClientAddr); + while (1) { int nMsgLen = 4096; @@ -206,21 +211,14 @@ XHTHREAD CALLBACK XEngine_SocksTask_Thread(LPCTSTR lpszClientAddr, SOCKET hSocke { break; } - 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) + if (!XEngine_Network_Send(tszClientAddr, tszMsgBuffer, nMsgLen, XENGINE_CLIENT_NETTYPE_SOCKS)) { - //主动关闭,需要调用 - XClient_TCPSelect_Close(st_ProxyClient.hSocket); - XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_SOCKS, XENGINE_CLIENT_CLOSE_SERVICE); + break; } } + //退出处理 + XClient_TCPSelect_Close(hSocket); + SocketOpt_HeartBeat_ForceOutAddrEx(xhSocksHeart, tszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Socks客户端:%s,离开服务器,客户端主动断开"), tszClientAddr); return 0; } \ 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 c5344fd..62531cc 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp @@ -151,9 +151,7 @@ XHTHREAD CALLBACK XEngine_TunnelTask_Thread(LPCTSTR lpszClientAddr, SOCKET hSock } //退出处理 XClient_TCPSelect_Close(hSocket); - ProxyProtocol_TunnelCore_Delete(tszClientAddr); - NetCore_TCPXCore_CloseForClientEx(xhTunnelSocket, tszClientAddr); - SocketOpt_HeartBeat_DeleteAddrEx(xhTunnelHeart, tszClientAddr); + SocketOpt_HeartBeat_ForceOutAddrEx(xhTunnelHeart, tszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Tunnel客户端:%s,离开服务器,客户端主动断开"), tszClientAddr); return 0; } \ No newline at end of file -- Gitee From 87c9bf8629c42c2d37ee4a1746da51670d577bca Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 11 Nov 2022 09:27:48 +0800 Subject: [PATCH 5/7] fixed:build error --- .../APPClient_ForwardExample/APPClient_ForwardExample.cpp | 2 +- .../APPClient_SocksExample/APPClient_SocksExample.cpp | 8 ++++---- .../APPClient_TunnelExample/APPClient_TunnelExample.cpp | 5 +++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.cpp b/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.cpp index 708502d..f5ba9c4 100644 --- a/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.cpp +++ b/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.cpp @@ -150,7 +150,7 @@ int main(int argc, char** argv) memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); - if (XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen, FALSE)) + if (XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen)) { printf("%s\n", tszMsgBuffer); } diff --git a/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.cpp b/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.cpp index 9c521af..004e160 100644 --- a/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.cpp +++ b/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.cpp @@ -54,7 +54,7 @@ int main(int argc, char** argv) nMsgLen = 2048; memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); - if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen, FALSE)) + if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen)) { printf("接受数据失败!\n"); return 0; @@ -72,7 +72,7 @@ int main(int argc, char** argv) nMsgLen = 2048; memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); - if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen, FALSE)) + if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen)) { printf("接受数据失败!\n"); return 0; @@ -94,7 +94,7 @@ int main(int argc, char** argv) } nMsgLen = 2048; memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); - if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen, FALSE)) + if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen)) { printf("接受数据失败!\n"); return 0; @@ -112,7 +112,7 @@ int main(int argc, char** argv) { nMsgLen = 2048; memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); - if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen, FALSE)) + if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen)) { break; } diff --git a/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.cpp b/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.cpp index a11d0cb..aeceed6 100644 --- a/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.cpp +++ b/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.cpp @@ -31,6 +31,7 @@ int main(int argc, char** argv) #endif SOCKET m_Socket; LPCTSTR lpszServiceAddr = _T("127.0.0.1"); + if (!XClient_TCPSelect_Create(&m_Socket, lpszServiceAddr, 5401)) { printf("连接失败!错误:%lX\n", XClient_GetLastError()); @@ -50,7 +51,7 @@ int main(int argc, char** argv) nMsgLen = 2048; memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); - if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen, FALSE)) + if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen)) { printf("接受数据失败!\n"); return 0; @@ -68,7 +69,7 @@ int main(int argc, char** argv) { nMsgLen = 2048; memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); - if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen, FALSE)) + if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen)) { break; } -- Gitee From fb8636fc853c98d8621e9fa88326444bffbe6f89 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 11 Nov 2022 09:29:17 +0800 Subject: [PATCH 6/7] update:readme and configure --- README.md | 3 +++ XEngine_Release/XEngine_Config/XEngine_Config.json | 9 +++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6349a8d..a61f3cc 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,9 @@ make FLAGS=CleanAll 清理编译 3. 提交代码 4. 新建 Pull Request +## 开发计划 +使用线程池转发数据而不是一对一的线程 + ## 关注我们 如果你觉得这个软件对你有帮助,请你给我们一个START吧 diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json index 4dd15e7..c3d3d2e 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -12,9 +12,9 @@ }, "XTime": { "nTimeCheck": 3, - "nSocksTimeOut": 0, - "nTunnelTimeOut": 0, - "nForwardTimeOut": 0 + "nSocksTimeOut": 5, + "nTunnelTimeOut": 5, + "nForwardTimeOut": 5 }, "XLog": { "MaxSize": 1024000, @@ -23,10 +23,11 @@ "tszLogFile": "./XEngine_Log/XEngine_ServiceApp.log" }, "XAuth": { - "bAuth": 2, + "bAuth": 0, "tszAuthFile": "./XEngine_Config/UserList.txt" }, "XVer": [ + "1.4.0.1001 Build20221111", "1.3.1.1001 Build20220804", "1.3.0.1001 Build20220617", "1.2.0.1001 Build20220413", -- Gitee From 4c3a6279d987570c934874be63165f98f361a7ee Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 11 Nov 2022 09:36:27 +0800 Subject: [PATCH 7/7] update:changelog --- CHANGELOG | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 0253237..57506e0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,13 @@ +XEngine_ProxyServer V1.4.0.1001 + +更新:匹配XEngine 7.43版本 +修改:使用新的方式来关闭客户端 +修正:当客户端关闭某些时候回崩溃的问题 + +update:match xengine v7.43 +modify:use the new way to close the client +fixed:crashed when client is closed +====================================================================================== XEngine_ProxyServer V1.3.1.1001 更新:匹配XEngine 7.38版本 -- Gitee