From dceb7cc8f23fcfacc9881ab13a0202d5b8b9aa08 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 2 Jan 2025 14:42:23 +0800 Subject: [PATCH 01/22] fixed:example build error update:example x64 debug build support --- .../APPClient_ForwardExample.cpp | 20 +++++++++++-------- .../APPClient_ForwardExample.vcxproj | 8 ++++++-- .../APPClient_SocksExample.vcxproj | 2 ++ .../APPClient_TunnelExample.cpp | 2 +- .../APPClient_TunnelExample.vcxproj | 2 ++ XEngine_APPClient/VSCopy_x64.bat | 4 ++++ .../{VSCopy.bat => VSCopy_x86.bat} | 0 7 files changed, 27 insertions(+), 11 deletions(-) create mode 100644 XEngine_APPClient/VSCopy_x64.bat rename XEngine_APPClient/{VSCopy.bat => VSCopy_x86.bat} (100%) diff --git a/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.cpp b/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.cpp index 47247cc..c6282a8 100644 --- a/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.cpp +++ b/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.cpp @@ -5,7 +5,11 @@ #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") +#ifdef _WIN64 +#pragma comment(lib,"../../XEngine_Source/x64/Debug/jsoncpp") +#else +#pragma comment(lib,"../../XEngine_Source/Debug/jsoncpp") +#endif #endif #include #include @@ -26,7 +30,7 @@ //需要优先配置XEngine //WINDOWS支持VS2022 x86 debug 编译调试 //linux使用下面的命令编译 -//g++ -std=c++17 -Wall -g APPClient_ForwardExample.cpp -o APPClient_ForwardExample.exe -I ../../XEngine_Source/XEngine_ThirdPart/jsoncpp -L ../../XEngine_Source/XEngine_ThirdPart/jsoncpp -lXEngine_BaseLib -lXClient_Socket -lRfcComponents_ProxyProtocol -ljsoncpp +//g++ -std=c++20 -Wall -g APPClient_ForwardExample.cpp -o APPClient_ForwardExample.exe -I ../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp -L ../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp -lXEngine_BaseLib -lXClient_Socket -lRfcComponents_ProxyProtocol -ljsoncpp int main(int argc, char** argv) { @@ -79,7 +83,7 @@ int main(int argc, char** argv) printf("接受数据失败!\n"); return 0; } - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBuffer); //列举 st_ProtocolHdr.wHeader = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER; st_ProtocolHdr.wTail = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL; @@ -109,7 +113,7 @@ int main(int argc, char** argv) { return false; } - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBuffer); if (st_JsonAddr["Count"].asInt() > 0) { //请求绑定 @@ -123,7 +127,7 @@ int main(int argc, char** argv) 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; + st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_NAMEDREQ; if (!XClient_TCPSelect_SendMsg(m_Socket, (LPCXSTR)&st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR))) { printf("发送失败!\n"); @@ -140,7 +144,7 @@ int main(int argc, char** argv) printf("接受数据失败!\n"); return 0; } - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBuffer); //成功后发送数据 for (int i = 0; i < 10; i++) { @@ -172,12 +176,12 @@ int main(int argc, char** argv) if (XClient_TCPSelect_RecvPkt(m_Socket, &ptszMsgBuffer, &nMsgLen, &st_ProtocolHdr)) { //收到转发请求 - if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_BINDREQ == st_ProtocolHdr.unOperatorCode) + if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_NAMEDREQ == st_ProtocolHdr.unOperatorCode) { bGet = true; printf("get forward\n"); } - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBuffer); } } } diff --git a/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.vcxproj b/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.vcxproj index 7224528..26cfb62 100644 --- a/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.vcxproj +++ b/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.vcxproj @@ -71,9 +71,13 @@ - $(XEngine_Include);../../XEngine_Source/XEngine_ThirdPart/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib32);$(LibraryPath) + + $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Lib64);$(LibraryPath) + Level3 @@ -106,7 +110,7 @@ Level3 true - _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true diff --git a/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.vcxproj b/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.vcxproj index 5c0ebb1..efc974a 100644 --- a/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.vcxproj +++ b/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.vcxproj @@ -80,6 +80,8 @@ true + $(XEngine_Include);$(IncludePath) + $(XEngine_Lib64);$(LibraryPath) false diff --git a/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.cpp b/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.cpp index 4e39b0c..c308164 100644 --- a/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.cpp +++ b/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.cpp @@ -23,7 +23,7 @@ //需要优先配置XEngine //WINDOWS支持VS2022 x86 debug 编译调试 //linux使用下面的命令编译 -//g++ -std=c++17 -Wall -g APPClient_TunnelExample.cpp -o APPClient_TunnelExample.exe -lXEngine_BaseLib -lXClient_Socket -lRfcComponents_ProxyProtocol +//g++ -std=c++20 -Wall -g APPClient_TunnelExample.cpp -o APPClient_TunnelExample.exe -lXEngine_BaseLib -lXClient_Socket -lRfcComponents_ProxyProtocol int main(int argc, char** argv) { #ifdef _MSC_BUILD diff --git a/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.vcxproj b/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.vcxproj index fb17144..44d08b2 100644 --- a/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.vcxproj +++ b/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.vcxproj @@ -80,6 +80,8 @@ true + $(XEngine_Include);$(IncludePath) + $(XEngine_Lib64);$(LibraryPath) false diff --git a/XEngine_APPClient/VSCopy_x64.bat b/XEngine_APPClient/VSCopy_x64.bat new file mode 100644 index 0000000..80d6a7a --- /dev/null +++ b/XEngine_APPClient/VSCopy_x64.bat @@ -0,0 +1,4 @@ +copy /y "%XEngine_Lib64%\XEngine_BaseLib\XEngine_BaseLib.dll" "./" +copy /y "%XEngine_Lib64%\XEngine_BaseLib\XEngine_Algorithm.dll" "./" +copy /y "%XEngine_Lib64%\XEngine_Client\XClient_Socket.dll" "./" +copy /y "%XEngine_Lib64%\XEngine_RfcComponents\RfcComponents_ProxyProtocol.dll" "./" \ No newline at end of file diff --git a/XEngine_APPClient/VSCopy.bat b/XEngine_APPClient/VSCopy_x86.bat similarity index 100% rename from XEngine_APPClient/VSCopy.bat rename to XEngine_APPClient/VSCopy_x86.bat From 942fe15dcd33bbfc9aa7066cda14231766e72886 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 2 Jan 2025 14:47:40 +0800 Subject: [PATCH 02/22] fixed:workflows build --- .github/workflows/macbuild.yml | 44 +++++++++++++----- .github/workflows/msbuild.yml | 46 +++++++++++-------- .github/workflows/release.yml | 4 +- .../{linuxbuild.yml => ubuntubuild.yml} | 42 ++++++++++++----- 4 files changed, 94 insertions(+), 42 deletions(-) rename .github/workflows/{linuxbuild.yml => ubuntubuild.yml} (50%) diff --git a/.github/workflows/macbuild.yml b/.github/workflows/macbuild.yml index a9ba22c..9b86023 100644 --- a/.github/workflows/macbuild.yml +++ b/.github/workflows/macbuild.yml @@ -2,13 +2,12 @@ name: macos build workflows on: push: - branches: [ "develop" ] + branches: + - 'develop' paths: - 'XEngine_Source/**' - 'XEngine_Release/**' - -permissions: - contents: read + - '.github/**' jobs: build: @@ -16,6 +15,7 @@ jobs: matrix: include: - os: macos-13 + - os: macos-14 runs-on: ${{ matrix.os }} steps: @@ -30,7 +30,6 @@ jobs: with: repository: libxengine/libxengine path: libxengine - ref: 'master' - name: sub module checkout (opensource) run: | @@ -40,14 +39,30 @@ jobs: - name: brew install run: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - # 设置依赖库的环境变量 - - name: Set up Dependency Environment Variables + - name: Set up Dependency x86_64 Environment + if: matrix.os == 'macos-13' run: | cd libxengine chmod 777 * ./XEngine_LINEnv.sh -i 3 - cd .. - #编译 + - name: Set up Dependency Arm64 Environment + if: matrix.os == 'macos-14' + run: | + cd libxengine + chmod 777 * + ./XEngine_LINEnv.sh -i 0 + + latest_tag=$(git ls-remote --tags --sort="v:refname" https://github.com/libxengine/libxengine.git | awk '{print $2}' | sed 's/refs\/tags\///' | tail -n 1) + + wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_Mac_Arm64.zip + unzip ./XEngine_Mac_Arm64.zip -d ./XEngine_Mac_Arm64 + cd XEngine_Mac_Arm64 + + sudo mkdir -p /usr/local/include + sudo mkdir -p /usr/local/lib + sudo cp -rf ./XEngine_Include /usr/local/include + sudo find ./XEngine_Mac -name "*.dylib" -exec cp {} /usr/local/lib \; + - name: make debug run: | cd XEngine_Source @@ -65,8 +80,15 @@ jobs: cd XEngine_Release ./XEngine_ProxyServiceApp -t - - name: Upload folder as artifact with mac + - name: Upload folder as artifact with mac x64 + if: matrix.os == 'macos-13' + uses: actions/upload-artifact@v4 + with: + name: XEngine_ProxyServiceApp-x86_64-Mac + path: XEngine_Release/ + - name: Upload folder as artifact with mac arm + if: matrix.os == 'macos-14' uses: actions/upload-artifact@v4 with: - name: XEngine_ProxyServiceApp-x64-Mac + name: XEngine_ProxyServiceApp-Arm64-Mac path: XEngine_Release/ \ No newline at end of file diff --git a/.github/workflows/msbuild.yml b/.github/workflows/msbuild.yml index f449080..3437421 100644 --- a/.github/workflows/msbuild.yml +++ b/.github/workflows/msbuild.yml @@ -2,17 +2,16 @@ name: windows build workflows on: push: - branches: [ "develop" ] + branches: + - 'develop' paths: - 'XEngine_Source/**' - 'XEngine_Release/**' -permissions: - contents: read + - '.github/**' jobs: build: strategy: - # Set fail-fast to false to ensure that feedback is delivered for all matrix combinations. Consider changing this to true when your workflow is stable. fail-fast: false matrix: configuration: [Debug ,Release] @@ -32,7 +31,7 @@ jobs: uses: actions/checkout@v4 with: repository: libxengine/libxengine - path: xengine + path: libxengine - name: sub module checkout (opensource) run: | @@ -40,21 +39,33 @@ jobs: git submodule update shell: pwsh - # 设置依赖库的环境变量 - - name: Set up Dependency Environment Variables + - name: Set up Dependency x86_64 Environment + if: matrix.platform == 'x64' run: | - echo "XENGINE_INCLUDE=${{ github.workspace }}/xengine" | Out-File -FilePath $env:GITHUB_ENV -Append - echo "XENGINE_LIB32=${{ github.workspace }}/xengine/XEngine_Windows/x86" | Out-File -FilePath $env:GITHUB_ENV -Append - echo "XENGINE_LIB64=${{ github.workspace }}/xengine/XEngine_Windows/x64" | Out-File -FilePath $env:GITHUB_ENV -Append + echo "XENGINE_INCLUDE=${{ github.workspace }}/libxengine" | Out-File -FilePath $env:GITHUB_ENV -Append + echo "XENGINE_LIB64=${{ github.workspace }}/libxengine/XEngine_Windows" | Out-File -FilePath $env:GITHUB_ENV -Append + shell: pwsh + - name: Set up Dependency x86_32 Environment + if: matrix.platform == 'x86' + run: | + $response = Invoke-RestMethod -Uri "https://api.github.com/repos/libxengine/libxengine/releases/latest" -Headers @{"Accept"="application/vnd.github.v3+json"} + $latest_tag = $response.tag_name + Write-Host "Latest Tag: $latest_tag" + + $url = "https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_Windows_x86-32.zip" + Invoke-WebRequest -Uri $url -OutFile "XEngine_Windows_x86-32.zip" + Expand-Archive -Path ./XEngine_Windows_x86-32.zip -DestinationPath ./XEngine_Windows -Force + + echo "XENGINE_INCLUDE=${{ github.workspace }}/XEngine_Windows" | Out-File -FilePath $env:GITHUB_ENV -Append + echo "XENGINE_LIB32=${{ github.workspace }}/XEngine_Windows/XEngine_Windows" | Out-File -FilePath $env:GITHUB_ENV -Append shell: pwsh - # 配置 MSBuild 的路径,准备构建 VC++ 项目 - name: Setup MSBuild uses: microsoft/setup-msbuild@v2 - #编译 + - name: Build Solution run: msbuild XEngine_Source/XEngine.sln /p:Configuration=${{ matrix.configuration }} /p:Platform=${{ matrix.platform }} - #测试 + - name: Conditional Step for x86 Release if: matrix.configuration == 'Release' && matrix.platform == 'x86' run: | @@ -74,18 +85,17 @@ jobs: cd XEngine_Release ./VSCopy_x64.bat shell: pwsh - - #将文件夹打包为 artifact + - name: Upload folder as artifact with x86 - if: matrix.configuration == 'Release' && matrix.platform == 'x86' + if: matrix.configuration == 'Release' && matrix.platform == 'x64' uses: actions/upload-artifact@v4 with: - name: XEngine_ProxyServiceApp-x86-Windows + name: XEngine_ProxyServiceApp-x86_32-Windows path: XEngine_Release/ - name: Upload folder as artifact with x64 if: matrix.configuration == 'Release' && matrix.platform == 'x64' uses: actions/upload-artifact@v4 with: - name: XEngine_ProxyServiceApp-x64-Windows + name: XEngine_ProxyServiceApp-x86_64-Windows path: XEngine_Release/ \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 57e4913..d557be6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,10 +17,10 @@ jobs: ref: 'develop' fetch-depth: 0 - - name: Download linuxbuild + - name: Download ubuntubuild uses: dawidd6/action-download-artifact@v6 with: - workflow: linuxbuild.yml + workflow: ubuntubuild.yml workflow_conclusion: success check_artifacts: false skip_unpack: true diff --git a/.github/workflows/linuxbuild.yml b/.github/workflows/ubuntubuild.yml similarity index 50% rename from .github/workflows/linuxbuild.yml rename to .github/workflows/ubuntubuild.yml index 42bc927..9859e2c 100644 --- a/.github/workflows/linuxbuild.yml +++ b/.github/workflows/ubuntubuild.yml @@ -2,22 +2,21 @@ name: ubuntu build workflows on: push: - branches: [ "develop" ] + branches: + - 'develop' paths: - 'XEngine_Source/**' - 'XEngine_Release/**' -permissions: - contents: read + - '.github/**' jobs: build: strategy: - # Set fail-fast to false to ensure that feedback is delivered for all matrix combinations. Consider changing this to true when your workflow is stable. fail-fast: false matrix: include: - os: ubuntu-22.04 - #- os: ubuntu-24.04 + - os: ubuntu-24.04 runs-on: ${{ matrix.os }} steps: @@ -39,14 +38,28 @@ jobs: git submodule init git submodule update - # 设置依赖库的环境变量 - - name: Set up Dependency Environment Variables + - name: Set up Dependency ubuntu24.04 Environment + if: matrix.os == 'ubuntu-24.04' run: | cd libxengine chmod 777 * sudo ./XEngine_LINEnv.sh -i 3 - cd .. - #编译 + - name: Set up Dependency ubuntu22.04 Environment + if: matrix.os == 'ubuntu-22.04' + run: | + cd libxengine + chmod 777 * + sudo ./XEngine_LINEnv.sh -i 0 + + latest_tag=$(curl -s https://api.github.com/repos/libxengine/libxengine/releases/latest | jq -r .tag_name) + wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_UBuntu_22.04_x86-64.zip + unzip ./XEngine_UBuntu_22.04_x86-64.zip -d ./XEngine_UBuntu_22.04_x86-64 + cd XEngine_UBuntu_22.04_x86-64 + + sudo cp -rf ./XEngine_Include /usr/local/include + sudo find ./XEngine_Linux -name "*.so" -exec cp {} /usr/local/lib \; + sudo ldconfig + - name: make run: | cd XEngine_Source @@ -63,8 +76,15 @@ jobs: cd XEngine_Release ./XEngine_ProxyServiceApp -t - - name: Upload folder as artifact with ubuntu + - name: Upload folder as artifact with ubuntu22.04 + if: matrix.os == 'ubuntu-22.04' + uses: actions/upload-artifact@v4 + with: + name: XEngine_ProxyServiceApp-x86_64-Ubuntu-22.04 + path: XEngine_Release/ + - name: Upload folder as artifact with ubuntu24.04 + if: matrix.os == 'ubuntu-24.04' uses: actions/upload-artifact@v4 with: - name: XEngine_ProxyServiceApp-x64-Ubuntu + name: XEngine_ProxyServiceApp-x86_64-Ubuntu-24.04 path: XEngine_Release/ \ No newline at end of file From 153aff69c3a55e47e7def3d4344aaf01a24ac677 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 2 Jan 2025 15:05:50 +0800 Subject: [PATCH 03/22] update:depend library --- XEngine_Source/XEngine_Depend | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_Depend b/XEngine_Source/XEngine_Depend index 1c1452f..75fd03e 160000 --- a/XEngine_Source/XEngine_Depend +++ b/XEngine_Source/XEngine_Depend @@ -1 +1 @@ -Subproject commit 1c1452f13720d22834e09c7e4e78042698411486 +Subproject commit 75fd03e24e5e3af433fec1ba7f40dcbcd64ff721 From 1ab717ee8b29dc299e10a607ce74601caa26ffcf Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 2 Jan 2025 15:19:50 +0800 Subject: [PATCH 04/22] update:match xengine v9 --- README.en.md | 4 ++-- README.md | 4 ++-- .../ModuleSession_Forward.cpp | 2 +- .../ModuleSession_Socks/ModuleSession_Socks.cpp | 4 ++-- .../ModuleSession_Tunnel/ModuleSession_Tunnel.cpp | 4 ++-- .../XEngine_ServiceApp/XEngine_ForwardTask.cpp | 10 +++++----- XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h | 9 ++++++--- .../XEngine_ServiceApp/XEngine_Network.cpp | 4 ++-- .../XEngine_ServiceApp/XEngine_ServiceApp.cpp | 10 +++++----- .../XEngine_ServiceApp/XEngine_SocksTask.cpp | 12 ++++++------ .../XEngine_ServiceApp/XEngine_TunnelTask.cpp | 14 +++++++------- 11 files changed, 40 insertions(+), 37 deletions(-) diff --git a/README.en.md b/README.en.md index 7d67e4d..75cb615 100644 --- a/README.en.md +++ b/README.en.md @@ -7,7 +7,7 @@ c c++ SOCKS5代理服务 HTTP Tunnel隧道代理服务 tcp转发服务 c c++ Socks5 Proxy Service,HTTP Tunnel Proxy Service,tcp forward service ## Notice -Starting from 2024.11.15, the compiled release version will only be released on github. +the compiled release version will only be released on github. #### Software Architecture the software developed based on xengine,using c/c++ development @@ -27,7 +27,7 @@ this software support following features ## install #### XEngine Evn -you must install XEngine,need V8.15 or above,install XEngine can be refer to xengine Readme docment +you must install XEngine,need V9.x or above,install XEngine can be refer to xengine Readme docment GITEE:https://gitee.com/xyry/libxengine GITHUB:https://github.com/libxengine/xengine diff --git a/README.md b/README.md index a91e837..02af8ed 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ 只要仓库不是在暂停状态,那么就会有人一直维护和开发,请放心使用 ## 注意 -自2024.11.15起.编译发布版本将只在github上面发布. +编译发布版本将只在github上面发布. ## 介绍 c c++ SOCKS5代理服务 HTTP Tunnel隧道代理服务 tcp转发服务 @@ -27,7 +27,7 @@ c c++ Socks5 Proxy Service,HTTP Tunnel Proxy Service,tcp forward service ## 安装教程 #### XEngine环境 -必须安装XEngine,版本需要V8.15或者以上版本,安装XEngine可以参考其Readme文档 +必须安装XEngine,版本需要V9.x或者以上版本,安装XEngine可以参考其Readme文档 GITEE:https://gitee.com/xyry/libxengine GITHUB:https://github.com/libxengine/xengine diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp index 424439c..299887b 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp @@ -112,7 +112,7 @@ bool CModuleSession_Forward::ModuleSession_Forward_List(SESSION_FORWARD*** pppSt { *pInt_Count = stl_MapSession.size() - 1; //减去自己 } - BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_ListUser, *pInt_Count, sizeof(SESSION_FORWARD)); + BaseLib_Memory_Malloc((XPPPMEM)pppSt_ListUser, *pInt_Count, sizeof(SESSION_FORWARD)); //遍历 auto stl_MapIterator = stl_MapSession.begin(); for (int i = 0; stl_MapIterator != stl_MapSession.end(); stl_MapIterator++, i++) diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Socks/ModuleSession_Socks.cpp b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Socks/ModuleSession_Socks.cpp index 7c1787c..646aea6 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Socks/ModuleSession_Socks.cpp +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Socks/ModuleSession_Socks.cpp @@ -249,7 +249,7 @@ bool CModuleSession_Socks::ModuleSession_Socks_GetList(XPPPMEM xpppMem, int* pIn st_Locker.lock_shared(); *pInt_Count = stl_MapClients.size(); - BaseLib_OperatorMemory_Malloc(xpppMem, *pInt_Count, nSize); + BaseLib_Memory_Malloc(xpppMem, *pInt_Count, nSize); unordered_map::const_iterator stl_MapIterator = stl_MapClients.begin(); for (int i = 0; stl_MapIterator != stl_MapClients.end(); stl_MapIterator++, i++) @@ -379,7 +379,7 @@ bool CModuleSession_Socks::ModuleSession_Socks_List(XCHAR*** ppptszClientList, i *pInt_ListCount = stl_MapClients.size(); if (NULL != ppptszClientList) { - BaseLib_OperatorMemory_Malloc((XPPPMEM)ppptszClientList, stl_MapClients.size(), 128); + BaseLib_Memory_Malloc((XPPPMEM)ppptszClientList, stl_MapClients.size(), 128); auto stl_MapIterator = stl_MapClients.begin(); for (int i = 0; stl_MapIterator != stl_MapClients.end(); stl_MapIterator++) { diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Tunnel/ModuleSession_Tunnel.cpp b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Tunnel/ModuleSession_Tunnel.cpp index 50d96df..a296a17 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Tunnel/ModuleSession_Tunnel.cpp +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Tunnel/ModuleSession_Tunnel.cpp @@ -261,7 +261,7 @@ bool CModuleSession_Tunnel::ModuleSession_Tunnel_GetList(XPPPMEM xpppMem, int* p st_Locker.lock_shared(); *pInt_Count = stl_MapClient.size(); - BaseLib_OperatorMemory_Malloc(xpppMem, *pInt_Count, nSize); + BaseLib_Memory_Malloc(xpppMem, *pInt_Count, nSize); unordered_map::const_iterator stl_MapIterator = stl_MapClient.begin(); for (int i = 0; stl_MapIterator != stl_MapClient.end(); stl_MapIterator++, i++) { @@ -375,7 +375,7 @@ bool CModuleSession_Tunnel::ModuleSession_Tunnel_List(XCHAR*** ppptszClientList, *pInt_ListCount = stl_MapClient.size(); if (NULL != ppptszClientList) { - BaseLib_OperatorMemory_Malloc((XPPPMEM)ppptszClientList, stl_MapClient.size(), 128); + BaseLib_Memory_Malloc((XPPPMEM)ppptszClientList, stl_MapClient.size(), 128); auto stl_MapIterator = stl_MapClient.begin(); for (int i = 0; stl_MapIterator != stl_MapClient.end(); stl_MapIterator++) { diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp index e204a13..bb883d9 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp @@ -34,10 +34,10 @@ XHTHREAD CALLBACK XEngine_Forward_Thread(XPVOID lParam) 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_Memory_FreeCStyle((XPPMEM)&ptszMsgBuffer); } } - BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ListClient, nListCount); + BaseLib_Memory_Free((XPPPMEM)&ppSt_ListClient, nListCount); } return 0; } @@ -87,7 +87,7 @@ bool XEngine_Forward_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LISTREP; ModuleSession_Forward_List(&ppSt_ListUser, &nListCount, lpszClientAddr); ModuleProtocol_Packet_ForwardList(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, &ppSt_ListUser, nListCount); - BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ListUser, nListCount); + BaseLib_Memory_Free((XPPPMEM)&ppSt_ListUser, nListCount); XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_CLIENT_NETTYPE_FORWARD); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Forward客户端:%s,请求可用转发列表成功"), lpszClientAddr); } @@ -130,7 +130,7 @@ bool XEngine_Forward_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n //匿名绑定,请求连接 int nPort = 0; XNETHANDLE xhClient = 0; - BaseLib_OperatorIPAddr_SegAddr(tszDstAddr, &nPort); + APIAddr_IPAddr_SegAddr(tszDstAddr, &nPort); if (!XClient_TCPSelect_InsertEx(xhForwardClient, &xhClient, tszDstAddr, nPort)) { pSt_ProtocolHdr->wReserve = 500; @@ -183,5 +183,5 @@ void CALLBACK XEngine_Forward_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, XSOCK break; } } - BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ClientList, nListCount); + BaseLib_Memory_Free((XPPPMEM)&ppSt_ClientList, nListCount); } \ 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 720ba60..7d23bb7 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h @@ -31,12 +31,14 @@ using namespace std; #include #include #include -#include -#include +#include +#include #include #include #include #include +#include +#include #include #include #include @@ -138,9 +140,10 @@ typedef struct #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_Cryption.lib") #pragma comment(lib,"XEngine_Client/XClient_Socket.lib") #pragma comment(lib,"XEngine_NetHelp/NetHelp_APIHelp.lib") +#pragma comment(lib,"XEngine_NetHelp/NetHelp_APIAddr.lib") #pragma comment(lib,"XEngine_NetHelp/NetHelp_XSocket.lib") #pragma comment(lib,"XEngine_HelpComponents/HelpComponents_XLog.lib") #pragma comment(lib,"XEngine_HelpComponents/HelpComponents_Packets.lib") diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp index c6884e0..d5f0bdb 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp @@ -128,7 +128,7 @@ void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType) break; } } - BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ClientList, nListCount); + BaseLib_Memory_Free((XPPPMEM)&ppSt_ClientList, nListCount); ModuleSession_Socks_Delete(lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("SOCKS客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType); } @@ -159,7 +159,7 @@ void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType) break; } } - BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ClientList, nListCount); + BaseLib_Memory_Free((XPPPMEM)&ppSt_ClientList, nListCount); ModuleSession_Tunnel_Delete(lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Tunnel客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType); } diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp index 5c053b5..078699b 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp @@ -83,7 +83,7 @@ LONG WINAPI Coredump_ExceptionFilter(EXCEPTION_POINTERS* pExceptionPointers) static int i = 0; XCHAR tszFileStr[MAX_PATH] = {}; XCHAR tszTimeStr[128] = {}; - BaseLib_OperatorTime_TimeToStr(tszTimeStr); + BaseLib_Time_TimeToStr(tszTimeStr); _xstprintf(tszFileStr, _X("./XEngine_Coredump/dumpfile_%s_%d.dmp"), tszTimeStr, i++); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_FATAL, _X("主程序:软件崩溃,写入dump:%s"), tszFileStr); @@ -139,10 +139,10 @@ int main(int argc, char** argv) HelpComponents_XLog_SetLogPriority(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化日志系统成功")); - BaseLib_OperatorVer_XGetStu(&st_VERXEngine); + BaseLib_Version_XGetStu(&st_VERXEngine); if (st_VERXEngine.nVerCore < 8 || st_VERXEngine.nVerMain < 39) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,当前XEngine:%s 版本过低,无法正常使用"), BaseLib_OperatorVer_XNumberStr()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,当前XEngine:%s 版本过低,无法正常使用"), BaseLib_Version_XNumberStr()); goto XENGINE_SERVICEAPP_EXIT; } @@ -271,7 +271,7 @@ int main(int argc, char** argv) XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,注册Forward网络事件成功")); //任务池 THREADPOOL_PARAMENT** ppSt_ListParam; - BaseLib_OperatorMemory_Malloc((XPPPMEM)&ppSt_ListParam, st_ServiceConfig.st_XMax.nForwardThread, sizeof(THREADPOOL_PARAMENT)); + BaseLib_Memory_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; @@ -319,7 +319,7 @@ int main(int argc, char** argv) XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,信息报告给API服务器没有启用")); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("所有服务成功启动,服务运行中,XEngine版本:%s%s,服务版本:%s,发行次数:%d。。。"), BaseLib_OperatorVer_XNumberStr(), BaseLib_OperatorVer_XTypeStr(), 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, _X("所有服务成功启动,服务运行中,XEngine版本:%s%s,服务版本:%s,发行次数:%d。。。"), BaseLib_Version_XNumberStr(), BaseLib_Version_XTypeStr(), st_ServiceConfig.st_XVer.pStl_ListVer->front().c_str(), st_ServiceConfig.st_XVer.pStl_ListVer->size()); while (true) { diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp index 6ed1a05..63c3d75 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp @@ -127,12 +127,12 @@ bool XEngine_SocksTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int { int nListCount = 0; XCHAR** ppszListAddr; - ENUM_APIHELP_DOMAINTYPE enDomainType; - APIHELP_DOMAIN st_APIUrl; + ENUM_NETHELP_APIADDR_DOMAIN_TYPE enDomainType; + APIADDR_DOMAIN st_APIUrl; - memset(&st_APIUrl, '\0', sizeof(APIHELP_DOMAIN)); + memset(&st_APIUrl, '\0', sizeof(APIADDR_DOMAIN)); - APIHelp_Domain_GetInfo(tszClientAddr, &st_APIUrl, &enDomainType); + APIAddr_Domain_GetInfo(tszClientAddr, &st_APIUrl, &enDomainType); memset(tszClientAddr, '\0', sizeof(tszClientAddr)); if (_tcsxlen(st_APIUrl.tszSubDomain) > 0) { @@ -150,7 +150,7 @@ bool XEngine_SocksTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int } memset(tszClientAddr, '\0', sizeof(tszClientAddr)); _tcsxcpy(tszClientAddr, ppszListAddr[0]); //随便选择一个IP地址 - BaseLib_OperatorMemory_Free((XPPPMEM)&ppszListAddr, nListCount); + BaseLib_Memory_Free((XPPPMEM)&ppszListAddr, nListCount); if (!XClient_TCPSelect_InsertEx(xhSocksClient, &st_ProxyClient.xhClient, tszClientAddr, nPort)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("SOCKS客户端:%s,创建客户端连接失败,连接到服务器:%s:%d,错误:%lX"), lpszClientAddr, tszClientAddr, nPort, XClient_GetLastError()); @@ -211,5 +211,5 @@ void CALLBACK XEngine_Socks_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, XSOCKET break; } } - BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ClientList, nListCount); + BaseLib_Memory_Free((XPPPMEM)&ppSt_ClientList, nListCount); } \ 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 8c0743c..f17fc4a 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp @@ -45,7 +45,7 @@ bool XEngine_TunnelTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in XCHAR tszConnectAddr[128]; memset(tszConnectAddr, '\0', sizeof(tszConnectAddr)); //是否为IP地址 - if (BaseLib_OperatorIPAddr_IsIPV4Addr(tszIPAddr)) + if (APIAddr_IPAddr_IsIPV4Addr(tszIPAddr)) { _tcsxcpy(tszConnectAddr, tszIPAddr); } @@ -53,12 +53,12 @@ bool XEngine_TunnelTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in { int nListCount = 0; XCHAR** ppszListAddr; - ENUM_APIHELP_DOMAINTYPE enDomainType; - APIHELP_DOMAIN st_APIUrl; + ENUM_NETHELP_APIADDR_DOMAIN_TYPE enDomainType; + APIADDR_DOMAIN st_APIUrl; - memset(&st_APIUrl, '\0', sizeof(APIHELP_DOMAIN)); + memset(&st_APIUrl, '\0', sizeof(APIADDR_DOMAIN)); - APIHelp_Domain_GetInfo(tszIPAddr, &st_APIUrl, &enDomainType); + APIAddr_Domain_GetInfo(tszIPAddr, &st_APIUrl, &enDomainType); memset(tszIPAddr, '\0', sizeof(tszIPAddr)); if (_tcsxlen(st_APIUrl.tszSubDomain) > 0) { @@ -77,7 +77,7 @@ bool XEngine_TunnelTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in return false; } _tcsxcpy(tszConnectAddr, ppszListAddr[0]); //随便选择一个IP地址 - BaseLib_OperatorMemory_Free((XPPPMEM)&ppszListAddr, nListCount); + BaseLib_Memory_Free((XPPPMEM)&ppszListAddr, nListCount); } if (!XClient_TCPSelect_InsertEx(xhTunnelClient, &st_ProxyClient.xhClient, tszConnectAddr, nIPPort)) { @@ -137,5 +137,5 @@ void CALLBACK XEngine_Tunnel_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, XSOCKE break; } } - BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ClientList, nListCount); + BaseLib_Memory_Free((XPPPMEM)&ppSt_ClientList, nListCount); } \ No newline at end of file From c2e1316eb8e0c3aa272d7e72d8c833eb42fb206c Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 2 Jan 2025 15:26:14 +0800 Subject: [PATCH 05/22] delete:xengine version judgment --- XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp index 078699b..9867c1c 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp @@ -139,13 +139,6 @@ int main(int argc, char** argv) HelpComponents_XLog_SetLogPriority(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化日志系统成功")); - BaseLib_Version_XGetStu(&st_VERXEngine); - if (st_VERXEngine.nVerCore < 8 || st_VERXEngine.nVerMain < 39) - { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,当前XEngine:%s 版本过低,无法正常使用"), BaseLib_Version_XNumberStr()); - goto XENGINE_SERVICEAPP_EXIT; - } - signal(SIGINT, ServiceApp_Stop); signal(SIGTERM, ServiceApp_Stop); signal(SIGABRT, ServiceApp_Stop); From 990430ad84420325dc4d470b65fa96345695cecb Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 2 Jan 2025 15:27:59 +0800 Subject: [PATCH 06/22] modify:build copy and make --- XEngine_Source/VSCopy_Debug.bat | 3 ++- XEngine_Source/VSCopy_x64.bat | 3 ++- XEngine_Source/VSCopy_x86.bat | 3 ++- XEngine_Source/XEngine_ServiceApp/Makefile | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/XEngine_Source/VSCopy_Debug.bat b/XEngine_Source/VSCopy_Debug.bat index 8337251..130c6b7 100644 --- a/XEngine_Source/VSCopy_Debug.bat +++ b/XEngine_Source/VSCopy_Debug.bat @@ -1,7 +1,7 @@ copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_BaseLib.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_Algorithm.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_Core.dll" "./" -copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_OPenSsl.dll" "./" +copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_Cryption.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_ManagePool.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\XClient_Socket.dll" "./ @@ -9,6 +9,7 @@ copy /y "D:\XEngine\XEngine_SourceCode\Debug\XClient_APIHelp.dll" "./ copy /y "D:\XEngine\XEngine_SourceCode\Debug\NetHelp_APIHelp.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\NetHelp_XSocket.dll" "./" +copy /y "D:\XEngine\XEngine_SourceCode\Debug\NetHelp_APIAddr.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\HelpComponents_XLog.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\HelpComponents_Packets.dll" "./" diff --git a/XEngine_Source/VSCopy_x64.bat b/XEngine_Source/VSCopy_x64.bat index 9a90546..d88263a 100644 --- a/XEngine_Source/VSCopy_x64.bat +++ b/XEngine_Source/VSCopy_x64.bat @@ -1,13 +1,14 @@ copy /y "%XEngine_Lib64%\XEngine_BaseLib\XEngine_BaseLib.dll" "./" copy /y "%XEngine_Lib64%\XEngine_BaseLib\XEngine_Algorithm.dll" "./" copy /y "%XEngine_Lib64%\XEngine_Core\XEngine_Core.dll" "./" -copy /y "%XEngine_Lib64%\XEngine_Core\XEngine_OPenSsl.dll" "./" +copy /y "%XEngine_Lib64%\XEngine_Core\XEngine_Cryption.dll" "./" copy /y "%XEngine_Lib64%\XEngine_Core\XEngine_ManagePool.dll" "./" copy /y "%XEngine_Lib64%\XEngine_Client\XClient_Socket.dll" "./" copy /y "%XEngine_Lib64%\XEngine_Client\XClient_APIHelp.dll" "./" copy /y "%XEngine_Lib64%\XEngine_NetHelp\NetHelp_APIHelp.dll" "./" +copy /y "%XEngine_Lib64%\XEngine_NetHelp\NetHelp_APIAddr.dll" "./" copy /y "%XEngine_Lib64%\XEngine_NetHelp\NetHelp_XSocket.dll" "./" copy /y "%XEngine_Lib64%\XEngine_HelpComponents\HelpComponents_XLog.dll" "./" diff --git a/XEngine_Source/VSCopy_x86.bat b/XEngine_Source/VSCopy_x86.bat index 122dbee..8fe09eb 100644 --- a/XEngine_Source/VSCopy_x86.bat +++ b/XEngine_Source/VSCopy_x86.bat @@ -1,11 +1,12 @@ copy /y "%XEngine_Lib32%\XEngine_BaseLib\XEngine_BaseLib.dll" "./" copy /y "%XEngine_Lib32%\XEngine_BaseLib\XEngine_Algorithm.dll" "./" copy /y "%XEngine_Lib32%\XEngine_Core\XEngine_Core.dll" "./" -copy /y "%XEngine_Lib32%\XEngine_Core\XEngine_OPenSsl.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_Core\XEngine_Cryption.dll" "./" copy /y "%XEngine_Lib32%\XEngine_Core\XEngine_ManagePool.dll" "./" copy /y "%XEngine_Lib32%\XEngine_Client\XClient_Socket.dll" "./" copy /y "%XEngine_Lib32%\XEngine_Client\XClient_APIHelp.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_NetHelp\NetHelp_APIAddr.dll" "./" copy /y "%XEngine_Lib32%\XEngine_NetHelp\NetHelp_APIHelp.dll" "./" copy /y "%XEngine_Lib32%\XEngine_NetHelp\NetHelp_XSocket.dll" "./" diff --git a/XEngine_Source/XEngine_ServiceApp/Makefile b/XEngine_Source/XEngine_ServiceApp/Makefile index 833e916..ba54632 100644 --- a/XEngine_Source/XEngine_ServiceApp/Makefile +++ b/XEngine_Source/XEngine_ServiceApp/Makefile @@ -7,7 +7,7 @@ UNICODE = 0 LOADHDR = -I ./ -I ../XEngine_Depend/XEngine_Module/jsoncpp LOADSO = -L ../XEngine_ModuleConfigure -L ../XEngine_ModuleSession -L ../XEngine_ModuleProtocol \ -L ../XEngine_Depend/XEngine_Module/jsoncpp -L ../XEngine_Depend/XEngine_Module/XEngine_InfoReport -LIB = -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_OPenSsl -lXEngine_ManagePool -lXClient_Socket -lXClient_APIHelp -lHelpComponents_XLog -lHelpComponents_Packets -lRfcComponents_ProxyProtocol -lNetHelp_APIHelp -lNetHelp_XSocket \ +LIB = -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_Cryption -lXEngine_ManagePool -lXClient_Socket -lXClient_APIHelp -lHelpComponents_XLog -lHelpComponents_Packets -lRfcComponents_ProxyProtocol -lNetHelp_APIHelp -lNetHelp_APIAddr -lNetHelp_XSocket \ -lXEngine_ModuleConfigure -lXEngine_ModuleSession -lXEngine_ModuleProtocol \ -ljsoncpp -lXEngine_InfoReport LIBEX = From 69563fcb190679e97005d2d75e545794dfc949e6 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 17 Jan 2025 10:57:53 +0800 Subject: [PATCH 07/22] update:ci and depend library --- .github/workflows/codeql.yml | 62 ++++++++++++++++++++++++++++++++++ .github/workflows/cppcheck.yml | 35 +++++++++++++++++++ XEngine_Source/XEngine_Depend | 2 +- 3 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/codeql.yml create mode 100644 .github/workflows/cppcheck.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 0000000..1716d18 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,62 @@ +name: CodeQL Advanced + +on: + push: + branches: + - 'develop' + paths: + - 'XEngine_Source/**' + - 'XEngine_Release/**' + - '.github/**' + +jobs: + analyze: + runs-on: ubuntu-24.04 + permissions: + security-events: write + packages: read + actions: read + contents: read + + strategy: + fail-fast: false + matrix: + include: + - language: c-cpp + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + ref: 'develop' + + - name: Checkout dependency repository (xengine) + uses: actions/checkout@v4 + with: + repository: libxengine/libxengine + path: libxengine + + - name: sub module checkout (opensource) + run: | + git submodule init + git submodule update + + - name: Set up Dependency Environment + run: | + cd libxengine + chmod +x ./XEngine_LINEnv.sh + sudo ./XEngine_LINEnv.sh -i 3 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + + - name: make + run: | + cd XEngine_Source + make + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/cppcheck.yml b/.github/workflows/cppcheck.yml new file mode 100644 index 0000000..279b03f --- /dev/null +++ b/.github/workflows/cppcheck.yml @@ -0,0 +1,35 @@ +name: cpp check workflows + +on: + push: + branches: + - 'develop' + paths: + - 'XEngine_Source/**' + - 'XEngine_Release/**' + - '.github/**' + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout main repository code + uses: actions/checkout@v4 + with: + ref: 'develop' + + - name: Create static_analysis directory + run: mkdir -p static_analysis + + - name: Run Cppcheck + run: | + sudo apt-get install -y cppcheck + cppcheck --enable=all --language=c++ --std=c++20 ./XEngine_Source/ --output-file=static_analysis/log.xml --xml + continue-on-error: true + + - name: Upload Cppcheck Results + uses: actions/upload-artifact@v4 + with: + name: cppcheck_results + path: static_analysis/log.xml \ No newline at end of file diff --git a/XEngine_Source/XEngine_Depend b/XEngine_Source/XEngine_Depend index 75fd03e..bcf8d94 160000 --- a/XEngine_Source/XEngine_Depend +++ b/XEngine_Source/XEngine_Depend @@ -1 +1 @@ -Subproject commit 75fd03e24e5e3af433fec1ba7f40dcbcd64ff721 +Subproject commit bcf8d946890a2f2fb39eec16e64a634a8ece52c7 From 4dcc1293445ece91f22dfb851ba2ac6182a14609 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 17 Jan 2025 11:03:53 +0800 Subject: [PATCH 08/22] update:character set modify to unicode from ansi on vs2022 --- .../XEngine_ModuleConfigure.vcxproj | 8 ++++---- .../XEngine_ModuleProtocol.vcxproj | 8 ++++---- .../ModuleSession_Forward/ModuleSession_Forward.cpp | 2 +- .../ModuleSession_Forward/ModuleSession_Forward.h | 2 +- .../ModuleSession_Socks/ModuleSession_Socks.cpp | 12 ++++++------ .../ModuleSession_Socks/ModuleSession_Socks.h | 2 +- .../ModuleSession_Tunnel/ModuleSession_Tunnel.cpp | 12 ++++++------ .../ModuleSession_Tunnel/ModuleSession_Tunnel.h | 4 ++-- .../XEngine_ModuleSession.vcxproj | 8 ++++---- XEngine_Source/XEngine_ModuleSession/pch.h | 6 ------ .../XEngine_ServiceApp/XEngine_ServiceApp.vcxproj | 8 ++++---- 11 files changed, 33 insertions(+), 39 deletions(-) diff --git a/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.vcxproj b/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.vcxproj index a9a2b7e..cc5d66a 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.vcxproj +++ b/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.vcxproj @@ -30,27 +30,27 @@ DynamicLibrary true v143 - MultiByte + Unicode DynamicLibrary false v143 true - MultiByte + Unicode DynamicLibrary true v143 - MultiByte + Unicode DynamicLibrary false v143 true - MultiByte + Unicode diff --git a/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj index 9a4e9be..68c5361 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj +++ b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj @@ -30,27 +30,27 @@ DynamicLibrary true v143 - MultiByte + Unicode DynamicLibrary false v143 true - MultiByte + Unicode DynamicLibrary true v143 - MultiByte + Unicode DynamicLibrary false v143 true - MultiByte + Unicode diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp index 299887b..b240a58 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp @@ -57,7 +57,7 @@ bool CModuleSession_Forward::ModuleSession_Forward_Insert(LPCXSTR lpszAddr, XENG memcpy(&st_Forward.st_UserAuth, pSt_UserAuth, sizeof(XENGINE_PROTOCOL_USERAUTH)); st_Locker.lock(); - unordered_map::const_iterator stl_MapIterator = stl_MapSession.find(lpszAddr); + unordered_map::const_iterator stl_MapIterator = stl_MapSession.find(lpszAddr); if (stl_MapIterator != stl_MapSession.end()) { Session_IsErrorOccur = true; diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.h b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.h index 0a689fe..06ef488 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.h +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.h @@ -26,5 +26,5 @@ class CModuleSession_Forward private: shared_mutex st_Locker; private: - unordered_map stl_MapSession; + unordered_map stl_MapSession; }; \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Socks/ModuleSession_Socks.cpp b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Socks/ModuleSession_Socks.cpp index 646aea6..a546625 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Socks/ModuleSession_Socks.cpp +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Socks/ModuleSession_Socks.cpp @@ -78,7 +78,7 @@ bool CModuleSession_Socks::ModuleSession_Socks_Delete(LPCXSTR lpszClientID) Session_IsErrorOccur = false; st_Locker.lock(); - unordered_map::const_iterator stl_MapIterator = stl_MapClients.find(lpszClientID); + unordered_map::const_iterator stl_MapIterator = stl_MapClients.find(lpszClientID); if (stl_MapIterator != stl_MapClients.end()) { if (NULL != stl_MapIterator->second->lParam) @@ -125,7 +125,7 @@ bool CModuleSession_Socks::ModuleSession_Socks_SetInfo(LPCXSTR lpszClientID, XPV return false; } st_Locker.lock(); - unordered_map::const_iterator stl_MapIterator = stl_MapClients.find(lpszClientID); + unordered_map::const_iterator stl_MapIterator = stl_MapClients.find(lpszClientID); if (stl_MapIterator == stl_MapClients.end()) { Session_IsErrorOccur = true; @@ -195,7 +195,7 @@ bool CModuleSession_Socks::ModuleSession_Socks_GetInfo(LPCXSTR lpszClientID, XPV return false; } st_Locker.lock_shared(); - unordered_map::const_iterator stl_MapIterator = stl_MapClients.find(lpszClientID); + unordered_map::const_iterator stl_MapIterator = stl_MapClients.find(lpszClientID); if (stl_MapIterator == stl_MapClients.end()) { Session_IsErrorOccur = true; @@ -251,7 +251,7 @@ bool CModuleSession_Socks::ModuleSession_Socks_GetList(XPPPMEM xpppMem, int* pIn *pInt_Count = stl_MapClients.size(); BaseLib_Memory_Malloc(xpppMem, *pInt_Count, nSize); - unordered_map::const_iterator stl_MapIterator = stl_MapClients.begin(); + unordered_map::const_iterator stl_MapIterator = stl_MapClients.begin(); for (int i = 0; stl_MapIterator != stl_MapClients.end(); stl_MapIterator++, i++) { //是否设置有值 @@ -293,7 +293,7 @@ bool CModuleSession_Socks::ModuleSession_Socks_GetStatus(LPCXSTR lpszClientID, E return false; } st_Locker.lock_shared(); - unordered_map::const_iterator stl_MapIterator = stl_MapClients.find(lpszClientID); + unordered_map::const_iterator stl_MapIterator = stl_MapClients.find(lpszClientID); if (stl_MapIterator == stl_MapClients.end()) { Session_IsErrorOccur = true; @@ -334,7 +334,7 @@ bool CModuleSession_Socks::ModuleSession_Socks_SetStatus(LPCXSTR lpszClientID, E return false; } st_Locker.lock_shared(); - unordered_map::const_iterator stl_MapIterator = stl_MapClients.find(lpszClientID); + unordered_map::const_iterator stl_MapIterator = stl_MapClients.find(lpszClientID); if (stl_MapIterator == stl_MapClients.end()) { Session_IsErrorOccur = true; diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Socks/ModuleSession_Socks.h b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Socks/ModuleSession_Socks.h index 4109038..6c97be0 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Socks/ModuleSession_Socks.h +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Socks/ModuleSession_Socks.h @@ -41,5 +41,5 @@ class CModuleSession_Socks private: shared_mutex st_Locker; private: - unordered_map stl_MapClients; + unordered_map stl_MapClients; }; diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Tunnel/ModuleSession_Tunnel.cpp b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Tunnel/ModuleSession_Tunnel.cpp index a296a17..718d401 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Tunnel/ModuleSession_Tunnel.cpp +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Tunnel/ModuleSession_Tunnel.cpp @@ -53,7 +53,7 @@ bool CModuleSession_Tunnel::ModuleSession_Tunnel_Create(LPCXSTR lpszClientID) } memset(pSt_TunnelInfo, '\0', sizeof(PROXYTUNNEL_CLIENTINFO)); - pSt_TunnelInfo->pStl_ListField = new list; + pSt_TunnelInfo->pStl_ListField = new list; if (NULL == pSt_TunnelInfo->pStl_ListField) { Session_IsErrorOccur = true; @@ -85,7 +85,7 @@ bool CModuleSession_Tunnel::ModuleSession_Tunnel_Delete(LPCXSTR lpszClientID) Session_IsErrorOccur = false; st_Locker.lock(); - unordered_map::const_iterator stl_MapIterator = stl_MapClient.find(lpszClientID); + unordered_map::const_iterator stl_MapIterator = stl_MapClient.find(lpszClientID); if (stl_MapIterator != stl_MapClient.end()) { if (NULL != stl_MapIterator->second->lParam) @@ -137,7 +137,7 @@ bool CModuleSession_Tunnel::ModuleSession_Tunnel_SetInfo(LPCXSTR lpszClientID, X return false; } st_Locker.lock_shared(); - unordered_map::const_iterator stl_MapIterator = stl_MapClient.find(lpszClientID); + unordered_map::const_iterator stl_MapIterator = stl_MapClient.find(lpszClientID); if (stl_MapIterator == stl_MapClient.end()) { Session_IsErrorOccur = true; @@ -206,7 +206,7 @@ bool CModuleSession_Tunnel::ModuleSession_Tunnel_GetInfo(LPCXSTR lpszClientID, X return false; } st_Locker.lock_shared(); - unordered_map::const_iterator stl_MapIterator = stl_MapClient.find(lpszClientID); + unordered_map::const_iterator stl_MapIterator = stl_MapClient.find(lpszClientID); if (stl_MapIterator == stl_MapClient.end()) { Session_IsErrorOccur = true; @@ -262,7 +262,7 @@ bool CModuleSession_Tunnel::ModuleSession_Tunnel_GetList(XPPPMEM xpppMem, int* p *pInt_Count = stl_MapClient.size(); BaseLib_Memory_Malloc(xpppMem, *pInt_Count, nSize); - unordered_map::const_iterator stl_MapIterator = stl_MapClient.begin(); + unordered_map::const_iterator stl_MapIterator = stl_MapClient.begin(); for (int i = 0; stl_MapIterator != stl_MapClient.end(); stl_MapIterator++, i++) { //是否设置有值 @@ -323,7 +323,7 @@ bool CModuleSession_Tunnel::ModuleSession_Tunnel_Packet(LPCXSTR lpszClientID, LP return false; } st_Locker.lock_shared(); - unordered_map::const_iterator stl_MapIterator = stl_MapClient.find(lpszClientID); + unordered_map::const_iterator stl_MapIterator = stl_MapClient.find(lpszClientID); if (stl_MapIterator == stl_MapClient.end()) { Session_IsErrorOccur = true; diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Tunnel/ModuleSession_Tunnel.h b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Tunnel/ModuleSession_Tunnel.h index 26279c7..bb5eeaa 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Tunnel/ModuleSession_Tunnel.h +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Tunnel/ModuleSession_Tunnel.h @@ -17,7 +17,7 @@ typedef struct int nHdrLen; //HTTP头大小 int nPosLen; //HTTP当前大小 int nCtmLen; //自定义内容大小 - list* pStl_ListField; //HTTP字段 + list* pStl_ListField; //HTTP字段 XPVOID lParam; }PROXYTUNNEL_CLIENTINFO,*LPPROXYTUNNEL_CLIENTINFO; @@ -38,5 +38,5 @@ class CModuleSession_Tunnel private: shared_mutex st_Locker; private: - unordered_map stl_MapClient; + unordered_map stl_MapClient; }; diff --git a/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj index e003ac7..964e123 100644 --- a/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj +++ b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj @@ -30,27 +30,27 @@ DynamicLibrary true v143 - MultiByte + Unicode DynamicLibrary false v143 true - MultiByte + Unicode DynamicLibrary true v143 - MultiByte + Unicode DynamicLibrary false v143 true - MultiByte + Unicode diff --git a/XEngine_Source/XEngine_ModuleSession/pch.h b/XEngine_Source/XEngine_ModuleSession/pch.h index 365e4c8..d9ee2ba 100644 --- a/XEngine_Source/XEngine_ModuleSession/pch.h +++ b/XEngine_Source/XEngine_ModuleSession/pch.h @@ -42,12 +42,6 @@ using namespace std; extern bool Session_IsErrorOccur; extern XLONG Session_dwErrorCode; -#ifdef _UNICODE -typedef std::wstring tstring; -#else -typedef std::string tstring; -#endif - #ifdef _MSC_BUILD #pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib") #pragma comment(lib,"XEngine_BaseLib/XEngine_Algorithm") diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj index 9b17ecf..e6453ac 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj @@ -30,27 +30,27 @@ Application true v143 - MultiByte + Unicode Application false v143 true - MultiByte + Unicode Application true v143 - MultiByte + Unicode Application false v143 true - MultiByte + Unicode From 372b9be9959dafb9d7467537f7b98dc92c12f437 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 17 Jan 2025 11:08:57 +0800 Subject: [PATCH 09/22] update:compiler version to c++20 and c17 --- XEngine_Source/XEngine_ModuleAuthorize/Makefile | 2 +- XEngine_Source/XEngine_ModuleConfigure/Makefile | 2 +- .../XEngine_ModuleConfigure.vcxproj | 8 ++++++++ XEngine_Source/XEngine_ModuleProtocol/Makefile | 2 +- .../XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj | 8 ++++++++ XEngine_Source/XEngine_ModuleSession/Makefile | 2 +- .../XEngine_ModuleSession/XEngine_ModuleSession.vcxproj | 8 ++++++++ XEngine_Source/XEngine_ServiceApp/Makefile | 2 +- .../XEngine_ServiceApp/XEngine_ServiceApp.vcxproj | 8 ++++++++ 9 files changed, 37 insertions(+), 5 deletions(-) diff --git a/XEngine_Source/XEngine_ModuleAuthorize/Makefile b/XEngine_Source/XEngine_ModuleAuthorize/Makefile index 7cc9377..ccadc88 100644 --- a/XEngine_Source/XEngine_ModuleAuthorize/Makefile +++ b/XEngine_Source/XEngine_ModuleAuthorize/Makefile @@ -1,4 +1,4 @@ -CC = g++ -Wall -std=c++17 -fPIC +CC = g++ -Wall -std=c++20 -fPIC PLATFORM = linux PLATVER = PLATDIR = diff --git a/XEngine_Source/XEngine_ModuleConfigure/Makefile b/XEngine_Source/XEngine_ModuleConfigure/Makefile index 9c885c3..55722b1 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/Makefile +++ b/XEngine_Source/XEngine_ModuleConfigure/Makefile @@ -1,4 +1,4 @@ -CC = g++ -Wall -std=c++17 -fPIC +CC = g++ -Wall -std=c++20 -fPIC PLATFORM = linux PLATVER = PLATDIR = diff --git a/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.vcxproj b/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.vcxproj index cc5d66a..dcfc9be 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.vcxproj +++ b/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.vcxproj @@ -99,6 +99,8 @@ Use pch.h 4819 + stdcpp20 + stdc17 Windows @@ -119,6 +121,8 @@ pch.h MultiThreaded 4819 + stdcpp20 + stdc17 Windows @@ -137,6 +141,8 @@ true Use pch.h + stdcpp20 + stdc17 Windows @@ -157,6 +163,8 @@ pch.h MultiThreaded 4819 + stdcpp20 + stdc17 Windows diff --git a/XEngine_Source/XEngine_ModuleProtocol/Makefile b/XEngine_Source/XEngine_ModuleProtocol/Makefile index 5d886d6..57f3232 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/Makefile +++ b/XEngine_Source/XEngine_ModuleProtocol/Makefile @@ -1,4 +1,4 @@ -CC = g++ -Wall -std=c++17 -fPIC +CC = g++ -Wall -std=c++20 -fPIC PLATFORM = linux PLATVER = PLATDIR = diff --git a/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj index 68c5361..02878d9 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj +++ b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj @@ -92,6 +92,8 @@ true Use pch.h + stdcpp20 + stdc17 Windows @@ -110,6 +112,8 @@ true Use pch.h + stdcpp20 + stdc17 Windows @@ -128,6 +132,8 @@ true Use pch.h + stdcpp20 + stdc17 Windows @@ -146,6 +152,8 @@ true Use pch.h + stdcpp20 + stdc17 Windows diff --git a/XEngine_Source/XEngine_ModuleSession/Makefile b/XEngine_Source/XEngine_ModuleSession/Makefile index b8b88c8..1f6ccb0 100644 --- a/XEngine_Source/XEngine_ModuleSession/Makefile +++ b/XEngine_Source/XEngine_ModuleSession/Makefile @@ -1,4 +1,4 @@ -CC = g++ -Wall -std=c++17 -fPIC +CC = g++ -Wall -std=c++20 -fPIC PLATFORM = linux PLATVER = PLATDIR = diff --git a/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj index 964e123..0846c7e 100644 --- a/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj +++ b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj @@ -94,6 +94,8 @@ true Use pch.h + stdcpp20 + stdc17 Windows @@ -112,6 +114,8 @@ true Use pch.h + stdcpp20 + stdc17 Windows @@ -130,6 +134,8 @@ true Use pch.h + stdcpp20 + stdc17 Windows @@ -148,6 +154,8 @@ true Use pch.h + stdcpp20 + stdc17 Windows diff --git a/XEngine_Source/XEngine_ServiceApp/Makefile b/XEngine_Source/XEngine_ServiceApp/Makefile index ba54632..7449a63 100644 --- a/XEngine_Source/XEngine_ServiceApp/Makefile +++ b/XEngine_Source/XEngine_ServiceApp/Makefile @@ -1,4 +1,4 @@ -CC = g++ -Wall -std=c++17 +CC = g++ -Wall -std=c++20 PLATFORM = linux PLATVER = PLATDIR = diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj index e6453ac..b2b2924 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj @@ -97,6 +97,8 @@ WIN32;_DEBUG;_CONSOLE;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true 4819 + stdcpp20 + stdc17 Console @@ -113,6 +115,8 @@ true MultiThreaded 4819 + stdcpp20 + stdc17 Console @@ -127,6 +131,8 @@ true _DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true + stdcpp20 + stdc17 Console @@ -143,6 +149,8 @@ true MultiThreaded 4819 + stdcpp20 + stdc17 Console From fb0155095e391d3e8c83ac3357147804c9c750b0 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 17 Jan 2025 13:54:15 +0800 Subject: [PATCH 10/22] fixed:print Garbled characters --- .../XEngine_ModuleConfigure.vcxproj | 2 ++ .../XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj | 2 ++ .../XEngine_ModuleSession/XEngine_ModuleSession.vcxproj | 2 ++ XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp | 7 +++++++ .../XEngine_ServiceApp/XEngine_ServiceApp.vcxproj | 2 ++ 5 files changed, 15 insertions(+) diff --git a/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.vcxproj b/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.vcxproj index dcfc9be..dbae19b 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.vcxproj +++ b/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.vcxproj @@ -123,6 +123,7 @@ 4819 stdcpp20 stdc17 + /utf-8 %(AdditionalOptions) Windows @@ -165,6 +166,7 @@ 4819 stdcpp20 stdc17 + /utf-8 %(AdditionalOptions) Windows diff --git a/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj index 02878d9..644902c 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj +++ b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.vcxproj @@ -114,6 +114,7 @@ pch.h stdcpp20 stdc17 + /utf-8 %(AdditionalOptions) Windows @@ -154,6 +155,7 @@ pch.h stdcpp20 stdc17 + /utf-8 %(AdditionalOptions) Windows diff --git a/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj index 0846c7e..0b61e4b 100644 --- a/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj +++ b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj @@ -116,6 +116,7 @@ pch.h stdcpp20 stdc17 + /utf-8 %(AdditionalOptions) Windows @@ -156,6 +157,7 @@ pch.h stdcpp20 stdc17 + /utf-8 %(AdditionalOptions) Windows diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp index 9867c1c..6795aa9 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp @@ -108,6 +108,13 @@ int main(int argc, char** argv) WSAStartup(MAKEWORD(2, 2), &st_WSAData); SetUnhandledExceptionFilter(Coredump_ExceptionFilter); +#ifndef _DEBUG + if (setlocale(LC_ALL, ".UTF8") == NULL) + { + fprintf(stderr, "Error setting locale.\n"); + return 1; + } +#endif #endif bIsRun = true; int nRet = 0; diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj index b2b2924..156c903 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj @@ -117,6 +117,7 @@ 4819 stdcpp20 stdc17 + /utf-8 %(AdditionalOptions) Console @@ -151,6 +152,7 @@ 4819 stdcpp20 stdc17 + /utf-8 %(AdditionalOptions) Console From 824342e79cf3e39bb4d6fe98cc7f8cdd71fe611b Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 17 Jan 2025 14:08:28 +0800 Subject: [PATCH 11/22] fixed:lost header file --- XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h | 1 + 1 file changed, 1 insertion(+) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h b/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h index 7d23bb7..d5fdee8 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include From 9774ea53e3836bd85cf8135aac5da755470022c2 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 20 Jan 2025 11:08:59 +0800 Subject: [PATCH 12/22] added:full proxy network service --- .../XEngine_Config/XEngine_Config.json | 9 +++- .../ModuleConfig_Define.h | 8 ++++ .../ModuleConfig_Error.h | 3 +- .../ModuleConfigure_Json.cpp | 15 ++++++- XEngine_Source/XEngine_ServiceApp/Makefile | 4 +- .../XEngine_ServiceApp/XEngine_Hdr.h | 5 +++ .../XEngine_ServiceApp/XEngine_Network.cpp | 43 +++++++++++++++++++ .../XEngine_ServiceApp/XEngine_Network.h | 5 +++ .../XEngine_ServiceApp/XEngine_ProxyTask.cpp | 27 ++++++++++++ .../XEngine_ServiceApp/XEngine_ProxyTask.h | 14 ++++++ .../XEngine_ServiceApp/XEngine_ServiceApp.cpp | 42 ++++++++++++++++++ .../XEngine_ServiceApp.vcxproj | 2 + .../XEngine_ServiceApp.vcxproj.filters | 6 +++ 13 files changed, 179 insertions(+), 4 deletions(-) create mode 100644 XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp create mode 100644 XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.h diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json index 0850df7..dbc2c35 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -14,7 +14,8 @@ "nTimeCheck": 3, "nSocksTimeOut": 5, "nTunnelTimeOut": 5, - "nForwardTimeOut": 5 + "nForwardTimeOut": 5, + "nProxyTimeout": 5 }, "XLog": { "MaxSize": 1024000, @@ -26,5 +27,11 @@ "bEnable":true, "tszAPIUrl":"http://app.xyry.org:5501/api?function=machine", "tszServiceName":"XEngine_ProxyServer" + }, + "XProxy": { + "bEnable": false, + "nSrcPort": 5410, + "nDstPort": 5411, + "tszDstIPAddr": "10.0.1.89" } } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h index dd7e5d0..83b8d4a 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h @@ -33,6 +33,7 @@ typedef struct tag_XEngine_ServiceConfig int nSocksTimeOut; //TCP超时时间 int nTunnelTimeOut; //HTTP超时时间 int nForwardTimeOut; //转发超时时间 + int nProxyTimeout; //代理超时时间 }st_XTime; //次数*时间=超时 struct { @@ -47,6 +48,13 @@ typedef struct tag_XEngine_ServiceConfig XCHAR tszAPIUrl[MAX_PATH]; XCHAR tszServiceName[128]; }st_XReport; + struct + { + XCHAR tszDstIPAddr[128]; + int nSrcPort; + int nDstPort; + bool bEnable; + }st_XProxy; struct { list* pStl_ListVer; diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Error.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Error.h index 9215046..714f03b 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Error.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Error.h @@ -17,4 +17,5 @@ #define ERROR_MODULE_CONFIGURE_JSON_XTIME 0xA0005 //读取XTIME配置失败 #define ERROR_MODULE_CONFIGURE_JSON_XLOG 0xA0006 //读取XLOG配置失败 #define ERROR_MODULE_CONFIGURE_JSON_XVER 0xA0008 //没有版本配置 -#define ERROR_MODULE_CONFIGURE_JSON_XREPORT 0xA0009 //没有报告配置 \ No newline at end of file +#define ERROR_MODULE_CONFIGURE_JSON_XREPORT 0xA0009 //没有报告配置 +#define ERROR_MODULE_CONFIGURE_JSON_XPROXY 0xA0010 //没有代理配置 \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index 76d4f6b..a63dbd1 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -99,7 +99,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE 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())) + if (st_JsonRoot["XTime"].empty() || (5 != st_JsonRoot["XTime"].size())) { Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XTIME; @@ -110,6 +110,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE 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(); + pSt_ServerConfig->st_XTime.nProxyTimeout = st_JsonXTime["nProxyTimeout"].asInt(); if (st_JsonRoot["XLog"].empty() || (4 != st_JsonRoot["XLog"].size())) { @@ -135,6 +136,18 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE _tcsxcpy(pSt_ServerConfig->st_XReport.tszAPIUrl, st_JsonXReport["tszAPIUrl"].asCString()); _tcsxcpy(pSt_ServerConfig->st_XReport.tszServiceName, st_JsonXReport["tszServiceName"].asCString()); + if (st_JsonRoot["XProxy"].empty() || (4 != st_JsonRoot["XProxy"].size())) + { + Config_IsErrorOccur = true; + Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XPROXY; + return false; + } + Json::Value st_JsonXProxy = st_JsonRoot["XProxy"]; + pSt_ServerConfig->st_XProxy.bEnable = st_JsonXProxy["bEnable"].asBool(); + pSt_ServerConfig->st_XProxy.nSrcPort = st_JsonXProxy["nSrcPort"].asInt(); + pSt_ServerConfig->st_XProxy.nDstPort = st_JsonXProxy["nDstPort"].asInt(); + _tcsxcpy(pSt_ServerConfig->st_XProxy.tszDstIPAddr, st_JsonXProxy["tszDstIPAddr"].asCString()); + return true; } /******************************************************************** diff --git a/XEngine_Source/XEngine_ServiceApp/Makefile b/XEngine_Source/XEngine_ServiceApp/Makefile index 7449a63..65f63e5 100644 --- a/XEngine_Source/XEngine_ServiceApp/Makefile +++ b/XEngine_Source/XEngine_ServiceApp/Makefile @@ -11,7 +11,7 @@ LIB = -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_Cryption -l -lXEngine_ModuleConfigure -lXEngine_ModuleSession -lXEngine_ModuleProtocol \ -ljsoncpp -lXEngine_InfoReport LIBEX = -OBJECTS = XEngine_Configure.o XEngine_Network.o XEngine_SocksTask.o XEngine_TunnelTask.o XEngine_ForwardTask.o XEngine_ServiceApp.o +OBJECTS = XEngine_Configure.o XEngine_Network.o XEngine_SocksTask.o XEngine_TunnelTask.o XEngine_ForwardTask.o XEngine_ProxyTask.o XEngine_ServiceApp.o ifeq ($(RELEASE),1) FLAGS = -c @@ -63,6 +63,8 @@ XEngine_TunnelTask.o:./XEngine_TunnelTask.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_TunnelTask.cpp XEngine_ForwardTask.o:./XEngine_ForwardTask.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_ForwardTask.cpp +XEngine_ProxyTask.o:./XEngine_ProxyTask.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_ProxyTask.cpp XEngine_ServiceApp.o:./XEngine_ServiceApp.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_ServiceApp.cpp diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h b/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h index d5fdee8..264eeb1 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h @@ -64,6 +64,7 @@ using namespace std; #include "XEngine_SocksTask.h" #include "XEngine_TunnelTask.h" #include "XEngine_ForwardTask.h" +#include "XEngine_ProxyTask.h" /******************************************************************** // Created: 2021/12/02 16:34:41 // File Name: D:\XEngine_ServiceApp\XEngine_Source\XEngine_ServiceApp\XEngine_Hdr.h @@ -92,6 +93,9 @@ extern XHANDLE xhForwardHeart; extern XHANDLE xhForwardPacket; extern XHANDLE xhForwardPool; extern XHANDLE xhForwardClient; +//代理转发服务器 +extern XHANDLE xhProxySocket; +extern XHANDLE xhProxyHeart; //配置文件 extern XENGINE_SERVICECONFIG st_ServiceConfig; @@ -99,6 +103,7 @@ 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_NETTYPE_PROXY 4 //关闭模式 #define XENGINE_CLIENT_CLOSE_NETWORK 1 #define XENGINE_CLIENT_CLOSE_HEARTBEAT 2 diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp index d5f0bdb..9347aa5 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp @@ -95,6 +95,23 @@ void CALLBACK Network_Callback_ForwardHeart(LPCXSTR lpszClientAddr, XSOCKET hSoc { XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_FORWARD, XENGINE_CLIENT_CLOSE_HEARTBEAT); } +//////////////////////////////////////////////////////////////////////////Forward相关 +bool CALLBACK Network_Callback_ProxyLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) +{ + return XEngine_Proxy_Connect(lpszClientAddr); +} +void CALLBACK Network_Callback_ProxyRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) +{ + XEngine_Proxy_Recvmsg(lpszClientAddr, lpszRecvMsg, nMsgLen); +} +void CALLBACK Network_Callback_ProxyLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) +{ + XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_PROXY, XENGINE_CLIENT_CLOSE_NETWORK); +} +void CALLBACK Network_Callback_ProxyHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) +{ + XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_PROXY, XENGINE_CLIENT_CLOSE_HEARTBEAT); +} //////////////////////////////////////////////////////////////////////////网络IO关闭操作 void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType) { @@ -182,6 +199,23 @@ void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType) ModuleSession_Forward_Delete(lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Forward客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType); } + else if (XENGINE_CLIENT_NETTYPE_PROXY == nIPProto) + { + if (XENGINE_CLIENT_CLOSE_NETWORK == nCloseType) + { + SocketOpt_HeartBeat_DeleteAddrEx(xhProxyHeart, lpszClientAddr); + } + else if (XENGINE_CLIENT_CLOSE_HEARTBEAT == nCloseType) + { + NetCore_TCPXCore_CloseForClientEx(xhProxySocket, lpszClientAddr); + } + else + { + SocketOpt_HeartBeat_DeleteAddrEx(xhProxyHeart, lpszClientAddr); + NetCore_TCPXCore_CloseForClientEx(xhProxySocket, lpszClientAddr); + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Proxy客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType); + } else { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("未知客户端:%s,离开服务器"), lpszClientAddr); @@ -220,6 +254,15 @@ bool XEngine_Network_Send(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMs } SocketOpt_HeartBeat_ActiveAddrEx(xhForwardHeart, lpszClientAddr); } + else if (XENGINE_CLIENT_NETTYPE_PROXY == nIPProto) + { + if (!NetCore_TCPXCore_SendEx(xhProxySocket, lpszClientAddr, lpszMsgBuffer, nMsgLen, 1, 1)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Proxy客户端:%s,发送数据失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); + return false; + } + SocketOpt_HeartBeat_ActiveAddrEx(xhProxyHeart, lpszClientAddr); + } else { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("未知客户端:%s,发送数据给失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.h b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.h index 654f09e..948aa06 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.h @@ -25,6 +25,11 @@ bool CALLBACK Network_Callback_ForwardLogin(LPCXSTR lpszClientAddr, XSOCKET hSoc void CALLBACK Network_Callback_ForwardRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); void CALLBACK Network_Callback_ForwardLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); void CALLBACK Network_Callback_ForwardHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); +//Forward相关 +bool CALLBACK Network_Callback_ProxyLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +void CALLBACK Network_Callback_ProxyRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); +void CALLBACK Network_Callback_ProxyLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +void CALLBACK Network_Callback_ProxyHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); //关闭与发送 void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType); bool XEngine_Network_Send(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, int nIPProto); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp new file mode 100644 index 0000000..50b9616 --- /dev/null +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp @@ -0,0 +1,27 @@ +#include "XEngine_Hdr.h" +/******************************************************************** +// Created: 2025/01/20 10:59:05 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp\XEngine_ProxyTask.cpp +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp +// File Base: XEngine_ProxyTask +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 代理服务协议 +// History: +*********************************************************************/ +bool XEngine_Proxy_Connect(LPCXSTR lpszClientAddr) +{ + XSOCKET hSocket = 0; + if (!XClient_TCPSelect_Create(&hSocket, st_ServiceConfig.st_XProxy.tszDstIPAddr, st_ServiceConfig.st_XProxy.nDstPort, 2)) + { + return false; + } + SocketOpt_HeartBeat_InsertAddrEx(xhProxyHeart, lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Proxy客户端:%s,连接到服务器"), lpszClientAddr); + return true; +} +bool XEngine_Proxy_Recvmsg(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen) +{ + return true; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.h b/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.h new file mode 100644 index 0000000..ea1a530 --- /dev/null +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.h @@ -0,0 +1,14 @@ +#pragma once +/******************************************************************** +// Created: 2025/01/20 10:45:13 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp\XEngine_ProxyTask.h +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp +// File Base: XEngine_ProxyTask +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 代理转发协议 +// History: +*********************************************************************/ +bool XEngine_Proxy_Connect(LPCXSTR lpszClientAddr); +bool XEngine_Proxy_Recvmsg(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen); \ 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 6795aa9..82b26ac 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp @@ -17,6 +17,9 @@ XHANDLE xhForwardHeart = NULL; XHANDLE xhForwardPacket = NULL; XHANDLE xhForwardPool = NULL; XHANDLE xhForwardClient = NULL; + +XHANDLE xhProxySocket = NULL; +XHANDLE xhProxyHeart = NULL; //配置文件 XENGINE_SERVICECONFIG st_ServiceConfig; @@ -39,6 +42,9 @@ void ServiceApp_Stop(int signo) NetCore_TCPXCore_DestroyEx(xhForwardSocket); SocketOpt_HeartBeat_DestoryEx(xhForwardHeart); ManagePool_Thread_NQDestroy(xhForwardPool); + //销毁proxy资源 + NetCore_TCPXCore_DestroyEx(xhProxySocket); + SocketOpt_HeartBeat_DestoryEx(xhProxyHeart); //销毁日志资源 HelpComponents_XLog_Destroy(xhLog); } @@ -300,6 +306,39 @@ int main(int argc, char** argv) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,Forward服务没有被启用")); } + //启动全代理协议服务 + if (st_ServiceConfig.st_XProxy.nSrcPort > 0) + { + //启动心跳 + if (st_ServiceConfig.st_XTime.nProxyTimeout > 0) + { + xhProxyHeart = SocketOpt_HeartBeat_InitEx(st_ServiceConfig.st_XTime.nProxyTimeout, st_ServiceConfig.st_XTime.nTimeCheck, Network_Callback_ProxyHeart); + if (NULL == xhForwardHeart) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化Proxy心跳服务失败,错误:%lX"), NetCore_GetLastError()); + goto XENGINE_SERVICEAPP_EXIT; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化Proxy心跳服务成功,时间:%d,次数:%d"), st_ServiceConfig.st_XTime.nProxyTimeout, st_ServiceConfig.st_XTime.nTimeCheck); + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,Proxy心跳服务被设置为不启用")); + } + //网络 + xhProxySocket = NetCore_TCPXCore_StartEx(st_ServiceConfig.st_XProxy.nSrcPort, st_ServiceConfig.st_XMax.nMaxClient, st_ServiceConfig.st_XMax.nIOThread); + if (NULL == xhProxySocket) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,启动Proxy网络服务器失败,错误:%lX"), NetCore_GetLastError()); + goto XENGINE_SERVICEAPP_EXIT; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动Proxy网络服务器成功,Proxy源端口:%d,目标端口:%d,目标地址:%s,IO:%d"), st_ServiceConfig.st_XProxy.nSrcPort, st_ServiceConfig.st_XProxy.nDstPort, st_ServiceConfig.st_XProxy.tszDstIPAddr, st_ServiceConfig.st_XMax.nIOThread); + NetCore_TCPXCore_RegisterCallBackEx(xhProxySocket, Network_Callback_ProxyLogin, Network_Callback_ProxyRecv, Network_Callback_ProxyLeave); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,注册Proxy网络事件成功")); + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,Proxy服务没有被启用")); + } //发送信息报告 if (st_ServiceConfig.st_XReport.bEnable && !bIsTest) { @@ -356,6 +395,9 @@ int main(int argc, char** argv) NetCore_TCPXCore_DestroyEx(xhForwardSocket); SocketOpt_HeartBeat_DestoryEx(xhForwardHeart); ManagePool_Thread_NQDestroy(xhForwardPool); + //销毁proxy资源 + NetCore_TCPXCore_DestroyEx(xhProxySocket); + SocketOpt_HeartBeat_DestoryEx(xhProxyHeart); //销毁日志资源 HelpComponents_XLog_Destroy(xhLog); } diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj index 156c903..2c162eb 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj @@ -164,6 +164,7 @@ + @@ -173,6 +174,7 @@ + diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj.filters b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj.filters index 808b1e5..71f8003 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj.filters +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.vcxproj.filters @@ -33,6 +33,9 @@ 源文件 + + 源文件 + @@ -53,5 +56,8 @@ 头文件 + + 头文件 + \ No newline at end of file From f13af2a17b9a31dc33d7024ea7da3f10e1c6378c Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 20 Jan 2025 13:55:11 +0800 Subject: [PATCH 13/22] added:full proxy forward support --- .../XEngine_Config/XEngine_Config.json | 5 +- .../ModuleConfig_Define.h | 5 +- .../ModuleConfigure_Json.cpp | 7 +- XEngine_Source/XEngine_ModuleSession/Makefile | 4 +- .../ModuleSession_Define.h | 105 +++++++- .../ModuleSession_Error.h | 7 +- .../ModuleSession_Proxy.cpp | 247 ++++++++++++++++++ .../ModuleSession_Proxy/ModuleSession_Proxy.h | 34 +++ .../XEngine_ModuleSession.def | 8 +- .../XEngine_ModuleSession.vcxproj | 2 + .../XEngine_ModuleSession.vcxproj.filters | 12 + XEngine_Source/XEngine_ModuleSession/pch.cpp | 25 ++ .../XEngine_ServiceApp/XEngine_Hdr.h | 1 + .../XEngine_ServiceApp/XEngine_ProxyTask.cpp | 35 ++- .../XEngine_ServiceApp/XEngine_ProxyTask.h | 1 + .../XEngine_ServiceApp/XEngine_ServiceApp.cpp | 17 +- 16 files changed, 495 insertions(+), 20 deletions(-) create mode 100644 XEngine_Source/XEngine_ModuleSession/ModuleSession_Proxy/ModuleSession_Proxy.cpp create mode 100644 XEngine_Source/XEngine_ModuleSession/ModuleSession_Proxy/ModuleSession_Proxy.h diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json index dbc2c35..156caf7 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -4,6 +4,7 @@ "nSocksPort": 5400, "nTunnelPort": 5401, "nForwardPort": 5402, + "nProxyPort": 5403, "XMax": { "nMaxClient": 10000, "nMaxQueue": 10000, @@ -30,8 +31,6 @@ }, "XProxy": { "bEnable": false, - "nSrcPort": 5410, - "nDstPort": 5411, - "tszDstIPAddr": "10.0.1.89" + "tszIPAddr": "10.0.1.89:5411" } } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h index 83b8d4a..0d9b5d3 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h @@ -20,6 +20,7 @@ typedef struct tag_XEngine_ServiceConfig int nSocksPort; //Socks端口,<=0不启用 int nTunnelPort; //Tunnel服务端口 int nForwardPort; //数据转发端口 + int nProxyPort; //全代理转发 struct { int nMaxClient; //最大客户端个数 @@ -50,9 +51,7 @@ typedef struct tag_XEngine_ServiceConfig }st_XReport; struct { - XCHAR tszDstIPAddr[128]; - int nSrcPort; - int nDstPort; + XCHAR tszIPAddr[128]; bool bEnable; }st_XProxy; struct diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index a63dbd1..09bc391 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -86,6 +86,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE pSt_ServerConfig->nSocksPort = st_JsonRoot["nSocksPort"].asInt(); pSt_ServerConfig->nTunnelPort = st_JsonRoot["nTunnelPort"].asInt(); pSt_ServerConfig->nForwardPort = st_JsonRoot["nForwardPort"].asInt(); + pSt_ServerConfig->nProxyPort = st_JsonRoot["nProxyPort"].asInt(); if (st_JsonRoot["XMax"].empty() || (4 != st_JsonRoot["XMax"].size())) { @@ -136,7 +137,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE _tcsxcpy(pSt_ServerConfig->st_XReport.tszAPIUrl, st_JsonXReport["tszAPIUrl"].asCString()); _tcsxcpy(pSt_ServerConfig->st_XReport.tszServiceName, st_JsonXReport["tszServiceName"].asCString()); - if (st_JsonRoot["XProxy"].empty() || (4 != st_JsonRoot["XProxy"].size())) + if (st_JsonRoot["XProxy"].empty() || (2 != st_JsonRoot["XProxy"].size())) { Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XPROXY; @@ -144,9 +145,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE } Json::Value st_JsonXProxy = st_JsonRoot["XProxy"]; pSt_ServerConfig->st_XProxy.bEnable = st_JsonXProxy["bEnable"].asBool(); - pSt_ServerConfig->st_XProxy.nSrcPort = st_JsonXProxy["nSrcPort"].asInt(); - pSt_ServerConfig->st_XProxy.nDstPort = st_JsonXProxy["nDstPort"].asInt(); - _tcsxcpy(pSt_ServerConfig->st_XProxy.tszDstIPAddr, st_JsonXProxy["tszDstIPAddr"].asCString()); + _tcsxcpy(pSt_ServerConfig->st_XProxy.tszIPAddr, st_JsonXProxy["tszIPAddr"].asCString()); return true; } diff --git a/XEngine_Source/XEngine_ModuleSession/Makefile b/XEngine_Source/XEngine_ModuleSession/Makefile index 1f6ccb0..6f3b379 100644 --- a/XEngine_Source/XEngine_ModuleSession/Makefile +++ b/XEngine_Source/XEngine_ModuleSession/Makefile @@ -10,7 +10,7 @@ LOADHDR = -I ./ -I ../XEngine_ThirdPart/jsoncpp LOADSO = LIB = -lXEngine_BaseLib -lXEngine_Algorithm LIBEX = -OBJECTS = ModuleSession_Forward.o ModuleSession_Socks.o ModuleSession_Tunnel.o pch.o +OBJECTS = ModuleSession_Forward.o ModuleSession_Socks.o ModuleSession_Tunnel.o ModuleSession_Proxy.o pch.o ifeq ($(RELEASE),1) FLAGS = -c @@ -63,6 +63,8 @@ ModuleSession_Socks.o:./ModuleSession_Socks/ModuleSession_Socks.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleSession_Socks/ModuleSession_Socks.cpp ModuleSession_Tunnel.o:./ModuleSession_Tunnel/ModuleSession_Tunnel.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleSession_Tunnel/ModuleSession_Tunnel.cpp +ModuleSession_Proxy.o:./ModuleSession_Proxy/ModuleSession_Proxy.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleSession_Proxy/ModuleSession_Proxy.cpp pch.o:./pch.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./pch.cpp diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h index 144bc92..59ea67e 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h @@ -473,4 +473,107 @@ extern "C" bool ModuleSession_Tunnel_Packet(LPCXSTR lpszClientID, LPCXSTR lpszMs 意思:是否成功 备注: *********************************************************************/ -extern "C" bool ModuleSession_Tunnel_List(XCHAR*** ppptszClientList, int* pInt_ListCount); \ No newline at end of file +extern "C" bool ModuleSession_Tunnel_List(XCHAR*** ppptszClientList, int* pInt_ListCount); +/************************************************************************/ +/* 全转发代理服务 */ +/************************************************************************/ +/******************************************************************** +函数名称:ModuleSession_Proxy_Insert +函数功能:插入一条记录到会话中 + 参数.一:lpszSrcIPAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要插入的源客户端 + 参数.二:lpszDstIPAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要插入的目标客户端 + 参数.三:xhClient + In/Out:In + 类型:句柄 + 可空:N + 意思:输入客户端句柄 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ModuleSession_Proxy_Insert(LPCXSTR lpszSrcIPAddr, LPCXSTR lpszDstIPAddr, XNETHANDLE xhClient); +/******************************************************************** +函数名称:ModuleSession_Proxy_GetForAddr +函数功能:通过地址获取客户端信息 + 参数.一:lpszIPAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要获取的客户端 + 参数.二:pSt_ProxyInfo + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出获取到的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ModuleSession_Proxy_GetForAddr(LPCXSTR lpszIPAddr, SESSION_FORWARD* pSt_ProxyInfo); +/******************************************************************** +函数名称:ModuleSession_Proxy_GetForToken +函数功能:通过TOKEN获取客户端信息 + 参数.一:xhToken + In/Out:In + 类型:句柄 + 可空:N + 意思:输入要获取的客户端 + 参数.二:pSt_ProxyInfo + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出获取到的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ModuleSession_Proxy_GetForToken(XNETHANDLE xhToken, SESSION_FORWARD* pSt_ProxyInfo); +/******************************************************************** +函数名称:ModuleSession_Proxy_List +函数功能:获取列表 + 参数.一:pppSt_ListUser + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出列表 + 参数.二:pInt_Count + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出列表个数 + 参数.三:lpszAddr + In/Out:In + 类型:常量字符指针 + 可空:Y + 意思:输入忽略地址 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ModuleSession_Proxy_List(SESSION_FORWARD*** pppSt_ListUser, int* pInt_Count, LPCXSTR lpszAddr = NULL); +/******************************************************************** +函数名称:ModuleSession_Proxy_Delete +函数功能:删除用户 + 参数.一:lpszAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要删除的客户端 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ModuleSession_Proxy_Delete(LPCXSTR lpszIPAddr); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Error.h b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Error.h index 04718cf..60cb656 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Error.h +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Error.h @@ -32,4 +32,9 @@ #define ERROR_MODULE_SESSION_TUNNEL_PARAMENT 0xC2001 //参数错误 #define ERROR_MODULE_SESSION_TUNNEL_MALLOC 0xC2002 //申请内存失败 #define ERROR_MODULE_SESSION_TUNNEL_NOTFOUND 0xC2003 //没有找到 -#define ERROR_MODULE_SESSION_TUNNEL_NOTSET 0xC2004 //没有设置内容 \ No newline at end of file +#define ERROR_MODULE_SESSION_TUNNEL_NOTSET 0xC2004 //没有设置内容 +/************************************************************************/ +/* 全转发代理服务错误 */ +/************************************************************************/ +#define ERROR_MODULE_SESSION_PROXY_PARAMENT 0xC3001 //参数错误 +#define ERROR_MODULE_SESSION_PROXY_NOTFOUND 0xC3002 //没有找到 \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Proxy/ModuleSession_Proxy.cpp b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Proxy/ModuleSession_Proxy.cpp new file mode 100644 index 0000000..008d2e2 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Proxy/ModuleSession_Proxy.cpp @@ -0,0 +1,247 @@ +#include "pch.h" +#include "ModuleSession_Proxy.h" +/******************************************************************** +// Created: 2025/01/20 11:13:37 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleSession\ModuleSession_Proxy\ModuleSession_Proxy.cpp +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleSession\ModuleSession_Proxy +// File Base: ModuleSession_Proxy +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 全代理转发 +// History: +*********************************************************************/ +CModuleSession_Proxy::CModuleSession_Proxy() +{ + +} +CModuleSession_Proxy::~CModuleSession_Proxy() +{ + +} +////////////////////////////////////////////////////////////////////////// +// 公用函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:ModuleSession_Proxy_Insert +函数功能:插入一条记录到会话中 + 参数.一:lpszSrcIPAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要插入的源客户端 + 参数.二:lpszDstIPAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要插入的目标客户端 + 参数.三:xhClient + In/Out:In + 类型:句柄 + 可空:N + 意思:输入客户端句柄 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CModuleSession_Proxy::ModuleSession_Proxy_Insert(LPCXSTR lpszSrcIPAddr, LPCXSTR lpszDstIPAddr, XNETHANDLE xhClient) +{ + Session_IsErrorOccur = false; + + if (NULL == lpszSrcIPAddr || NULL == lpszDstIPAddr) + { + Session_IsErrorOccur = true; + Session_dwErrorCode = ERROR_MODULE_SESSION_PROXY_PARAMENT; + return false; + } + SESSION_FORWARD st_ProxyClient = {}; + + st_ProxyClient.xhClient = xhClient; + _tcsxcpy(st_ProxyClient.tszSrcAddr, lpszSrcIPAddr); + _tcsxcpy(st_ProxyClient.tszDstAddr, lpszDstIPAddr); + + st_Locker.lock(); + unordered_map::const_iterator stl_MapIterator = stl_MapSession.find(lpszSrcIPAddr); + 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(lpszSrcIPAddr, st_ProxyClient)); + st_Locker.unlock(); + return true; +} +/******************************************************************** +函数名称:ModuleSession_Proxy_GetForAddr +函数功能:通过地址获取客户端信息 + 参数.一:lpszIPAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要获取的客户端 + 参数.二:pSt_ProxyInfo + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出获取到的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CModuleSession_Proxy::ModuleSession_Proxy_GetForAddr(LPCXSTR lpszIPAddr, SESSION_FORWARD* pSt_ProxyInfo) +{ + Session_IsErrorOccur = false; + + if (NULL == lpszIPAddr) + { + Session_IsErrorOccur = true; + Session_dwErrorCode = ERROR_MODULE_SESSION_PROXY_PARAMENT; + return false; + } + st_Locker.lock_shared(); + auto stl_MapIterator = stl_MapSession.find(lpszIPAddr); + if (stl_MapIterator == stl_MapSession.end()) + { + Session_IsErrorOccur = true; + Session_dwErrorCode = ERROR_MODULE_SESSION_PROXY_NOTFOUND; + st_Locker.unlock_shared(); + return false; + } + *pSt_ProxyInfo = stl_MapIterator->second; + st_Locker.unlock_shared(); + return true; +} +/******************************************************************** +函数名称:ModuleSession_Proxy_GetForToken +函数功能:通过TOKEN获取客户端信息 + 参数.一:xhToken + In/Out:In + 类型:句柄 + 可空:N + 意思:输入要获取的客户端 + 参数.二:pSt_ProxyInfo + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出获取到的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CModuleSession_Proxy::ModuleSession_Proxy_GetForToken(XNETHANDLE xhToken, SESSION_FORWARD* pSt_ProxyInfo) +{ + Session_IsErrorOccur = false; + + st_Locker.lock_shared(); + bool bFound = false; + auto stl_MapIterator = stl_MapSession.begin(); + for (; stl_MapIterator != stl_MapSession.end(); stl_MapIterator++) + { + if (xhToken == stl_MapIterator->second.xhClient) + { + bFound = true; + *pSt_ProxyInfo = stl_MapIterator->second; + break; + } + } + if (!bFound) + { + Session_IsErrorOccur = true; + Session_dwErrorCode = ERROR_MODULE_SESSION_PROXY_NOTFOUND; + st_Locker.unlock_shared(); + return false; + } + st_Locker.unlock_shared(); + return true; +} +/******************************************************************** +函数名称:ModuleSession_Proxy_List +函数功能:获取列表 + 参数.一:pppSt_ListUser + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出列表 + 参数.二:pInt_Count + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出列表个数 + 参数.三:lpszAddr + In/Out:In + 类型:常量字符指针 + 可空:Y + 意思:输入忽略地址 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CModuleSession_Proxy::ModuleSession_Proxy_List(SESSION_FORWARD*** pppSt_ListUser, int* pInt_Count, LPCXSTR lpszAddr /* = NULL */) +{ + Session_IsErrorOccur = false; + + if (NULL == pInt_Count) + { + Session_IsErrorOccur = true; + Session_dwErrorCode = ERROR_MODULE_SESSION_PROXY_PARAMENT; + return false; + } + st_Locker.lock_shared(); + + if (NULL == lpszAddr) + { + *pInt_Count = stl_MapSession.size(); + } + else + { + *pInt_Count = stl_MapSession.size() - 1; //减去自己 + } + BaseLib_Memory_Malloc((XPPPMEM)pppSt_ListUser, *pInt_Count, sizeof(SESSION_FORWARD)); + //遍历 + auto stl_MapIterator = stl_MapSession.begin(); + for (int i = 0; stl_MapIterator != stl_MapSession.end(); stl_MapIterator++, i++) + { + if (NULL != lpszAddr) + { + if (0 == _tcsxncmp(lpszAddr, stl_MapIterator->first.c_str(), _tcsxlen(lpszAddr))) + { + continue; + } + } + *(*pppSt_ListUser)[i] = stl_MapIterator->second; + } + st_Locker.unlock_shared(); + return true; +} +/******************************************************************** +函数名称:ModuleSession_Proxy_Delete +函数功能:删除用户 + 参数.一:lpszAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要删除的客户端 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CModuleSession_Proxy::ModuleSession_Proxy_Delete(LPCXSTR lpszIPAddr) +{ + Session_IsErrorOccur = false; + + st_Locker.lock(); + auto stl_MapSrcIterator = stl_MapSession.find(lpszIPAddr); + if (stl_MapSrcIterator != stl_MapSession.end()) + { + stl_MapSession.erase(stl_MapSrcIterator); + } + st_Locker.unlock(); + return true; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Proxy/ModuleSession_Proxy.h b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Proxy/ModuleSession_Proxy.h new file mode 100644 index 0000000..6c7d7f6 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Proxy/ModuleSession_Proxy.h @@ -0,0 +1,34 @@ +#pragma once +/******************************************************************** +// Created: 2025/01/20 11:13:18 +// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleSession\ModuleSession_Proxy\ModuleSession_Proxy.h +// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleSession\ModuleSession_Proxy +// File Base: ModuleSession_Proxy +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 全代理转发 +// History: +*********************************************************************/ +typedef struct +{ + XCHAR tszIPAddr[128]; + XSOCKET hSocket; +}SESSION_PROXYCLIENT; + +class CModuleSession_Proxy +{ +public: + CModuleSession_Proxy(); + ~CModuleSession_Proxy(); +public: + bool ModuleSession_Proxy_Insert(LPCXSTR lpszSrcIPAddr, LPCXSTR lpszDstIPAddr, XNETHANDLE xhClient); + bool ModuleSession_Proxy_GetForAddr(LPCXSTR lpszIPAddr, SESSION_FORWARD* pSt_ProxyInfo); + bool ModuleSession_Proxy_GetForToken(XNETHANDLE xhToken, SESSION_FORWARD* pSt_ProxyInfo); + bool ModuleSession_Proxy_List(SESSION_FORWARD*** pppSt_ListUser, int* pInt_Count, LPCXSTR lpszAddr = NULL); + bool ModuleSession_Proxy_Delete(LPCXSTR lpszIPAddr); +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 index 984d52f..2a603cd 100644 --- a/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.def +++ b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.def @@ -25,4 +25,10 @@ EXPORTS ModuleSession_Tunnel_GetInfo ModuleSession_Tunnel_GetList ModuleSession_Tunnel_Packet - ModuleSession_Tunnel_List \ No newline at end of file + ModuleSession_Tunnel_List + + ModuleSession_Proxy_Insert + ModuleSession_Proxy_GetForAddr + ModuleSession_Proxy_GetForToken + ModuleSession_Proxy_List + ModuleSession_Proxy_Delete \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj index 0b61e4b..643e738 100644 --- a/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj +++ b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj @@ -173,6 +173,7 @@ + @@ -180,6 +181,7 @@ + diff --git a/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj.filters b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj.filters index da05120..b7e6185 100644 --- a/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj.filters +++ b/XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.vcxproj.filters @@ -31,6 +31,12 @@ {de4957ba-1faf-41f0-9058-9f219c803ddf} + + {41572a49-c102-48df-9347-b3eeb5128a7e} + + + {400cf379-58e3-4e86-908b-30d26dcc792a} + @@ -54,6 +60,9 @@ 头文件\ModuleSession_Tunnel + + 头文件\ModuleSession_Proxy + @@ -71,6 +80,9 @@ 源文件\ModuleSession_Tunnel + + 源文件\ModuleSession_Proxy + diff --git a/XEngine_Source/XEngine_ModuleSession/pch.cpp b/XEngine_Source/XEngine_ModuleSession/pch.cpp index 0644506..94bb47e 100644 --- a/XEngine_Source/XEngine_ModuleSession/pch.cpp +++ b/XEngine_Source/XEngine_ModuleSession/pch.cpp @@ -2,6 +2,7 @@ #include "ModuleSession_Forward/ModuleSession_Forward.h" #include "ModuleSession_Socks/ModuleSession_Socks.h" #include "ModuleSession_Tunnel/ModuleSession_Tunnel.h" +#include "ModuleSession_Proxy/ModuleSession_Proxy.h" /******************************************************************** // Created: 2022/06/08 10:10:52 // File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ModuleSession\pch.cpp @@ -19,6 +20,7 @@ XLONG Session_dwErrorCode = 0; CModuleSession_Forward m_Forward; CModuleSession_Socks m_Socks; CModuleSession_Tunnel m_Tunnel; +CModuleSession_Proxy m_Proxy; ////////////////////////////////////////////////////////////////////////// // 导出函数 ////////////////////////////////////////////////////////////////////////// @@ -122,4 +124,27 @@ extern "C" bool ModuleSession_Tunnel_Packet(LPCXSTR lpszClientID, LPCXSTR lpszMs extern "C" bool ModuleSession_Tunnel_List(XCHAR*** ppptszClientList, int* pInt_ListCount) { return m_Tunnel.ModuleSession_Tunnel_List(ppptszClientList, pInt_ListCount); +} +/************************************************************************/ +/* 全转发代理服务 */ +/************************************************************************/ +extern "C" bool ModuleSession_Proxy_Insert(LPCXSTR lpszSrcIPAddr, LPCXSTR lpszDstIPAddr, XNETHANDLE xhClient) +{ + return m_Proxy.ModuleSession_Proxy_Insert(lpszSrcIPAddr, lpszDstIPAddr, xhClient); +} +extern "C" bool ModuleSession_Proxy_GetForAddr(LPCXSTR lpszIPAddr, SESSION_FORWARD* pSt_ProxyInfo) +{ + return m_Proxy.ModuleSession_Proxy_GetForAddr(lpszIPAddr, pSt_ProxyInfo); +} +extern "C" bool ModuleSession_Proxy_GetForToken(XNETHANDLE xhToken, SESSION_FORWARD* pSt_ProxyInfo) +{ + return m_Proxy.ModuleSession_Proxy_GetForToken(xhToken, pSt_ProxyInfo); +} +extern "C" bool ModuleSession_Proxy_List(SESSION_FORWARD*** pppSt_ListUser, int* pInt_Count, LPCXSTR lpszAddr) +{ + return m_Proxy.ModuleSession_Proxy_List(pppSt_ListUser, pInt_Count, lpszAddr); +} +extern "C" bool ModuleSession_Proxy_Delete(LPCXSTR lpszIPAddr) +{ + return m_Proxy.ModuleSession_Proxy_Delete(lpszIPAddr); } \ 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 264eeb1..c533f31 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h @@ -96,6 +96,7 @@ extern XHANDLE xhForwardClient; //代理转发服务器 extern XHANDLE xhProxySocket; extern XHANDLE xhProxyHeart; +extern XHANDLE xhProxyClient; //配置文件 extern XENGINE_SERVICECONFIG st_ServiceConfig; diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp index 50b9616..3ee7c54 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp @@ -10,18 +10,47 @@ // Purpose: 代理服务协议 // History: *********************************************************************/ +void CALLBACK XEngine_Proxy_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, XSOCKET hSocket, ENUM_XCLIENT_SOCKET_EVENTS enTCPClientEvents, LPCXSTR lpszMsgBuffer, int nMsgLen, XPVOID lParam) +{ + SESSION_FORWARD st_ProxyInfo = {}; + if (!ModuleSession_Proxy_GetForToken(xhClient, &st_ProxyInfo)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Proxy客户端:%lld,获取转发地址信息失败,地址:%s,端口:%d,错误码:%lX"), xhToken, st_ProxyInfo.tszSrcAddr, st_ProxyInfo.tszDstAddr, ModuleSession_GetLastError()); + return; + } +} + bool XEngine_Proxy_Connect(LPCXSTR lpszClientAddr) { - XSOCKET hSocket = 0; - if (!XClient_TCPSelect_Create(&hSocket, st_ServiceConfig.st_XProxy.tszDstIPAddr, st_ServiceConfig.st_XProxy.nDstPort, 2)) + int nPort = 0; + XNETHANDLE xhClient = 0; + XCHAR tszIPAddr[128] = {}; + + _tcsxcpy(tszIPAddr, st_ServiceConfig.st_XProxy.tszIPAddr); + APIAddr_IPAddr_SegAddr(tszIPAddr, &nPort); + if (!XClient_TCPSelect_InsertEx(xhProxyClient, &xhClient, tszIPAddr, nPort, false)) { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Proxy客户端:%s,连接到转发代理服务器失败,服务地址:%s,错误码:%lX"), lpszClientAddr, st_ServiceConfig.st_XProxy.tszIPAddr, XClient_GetLastError()); return false; } SocketOpt_HeartBeat_InsertAddrEx(xhProxyHeart, lpszClientAddr); + ModuleSession_Proxy_Insert(lpszClientAddr, st_ServiceConfig.st_XProxy.tszIPAddr, xhClient); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Proxy客户端:%s,连接到服务器"), lpszClientAddr); return true; } bool XEngine_Proxy_Recvmsg(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen) { + SESSION_FORWARD st_ProxyInfo = {}; + if (!ModuleSession_Proxy_GetForAddr(lpszClientAddr, &st_ProxyInfo)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Proxy客户端:%s,获取转发地址信息失败,源地址:%s,目地址:%s,错误码:%lX"), lpszClientAddr, st_ProxyInfo.tszSrcAddr, st_ProxyInfo.tszDstAddr, ModuleSession_GetLastError()); + return false; + } + if (!XClient_TCPSelect_SendEx(xhProxyClient, st_ProxyInfo.xhClient, lpszMsgBuffer, nMsgLen)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Proxy客户端:%s,转发数据失败,源地址:%s,目地址:%s,错误码:%lX"), lpszClientAddr, st_ProxyInfo.tszSrcAddr, st_ProxyInfo.tszDstAddr, XClient_GetLastError()); + return false; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("Proxy客户端:%s,转发数据成功,源地址:%s,目地址:%s,大小:%d"), lpszClientAddr, st_ProxyInfo.tszSrcAddr, st_ProxyInfo.tszDstAddr, nMsgLen); return true; -} \ No newline at end of file +} diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.h b/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.h index ea1a530..8d1f968 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.h @@ -10,5 +10,6 @@ // Purpose: 代理转发协议 // History: *********************************************************************/ +void CALLBACK XEngine_Proxy_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, XSOCKET hSocket, ENUM_XCLIENT_SOCKET_EVENTS enTCPClientEvents, LPCXSTR lpszMsgBuffer, int nMsgLen, XPVOID lParam); bool XEngine_Proxy_Connect(LPCXSTR lpszClientAddr); bool XEngine_Proxy_Recvmsg(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen); \ 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 82b26ac..9f8270b 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp @@ -20,6 +20,7 @@ XHANDLE xhForwardClient = NULL; XHANDLE xhProxySocket = NULL; XHANDLE xhProxyHeart = NULL; +XHANDLE xhProxyClient = NULL; //配置文件 XENGINE_SERVICECONFIG st_ServiceConfig; @@ -45,6 +46,7 @@ void ServiceApp_Stop(int signo) //销毁proxy资源 NetCore_TCPXCore_DestroyEx(xhProxySocket); SocketOpt_HeartBeat_DestoryEx(xhProxyHeart); + XClient_TCPSelect_StopEx(xhProxyClient); //销毁日志资源 HelpComponents_XLog_Destroy(xhLog); } @@ -307,7 +309,7 @@ int main(int argc, char** argv) XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,Forward服务没有被启用")); } //启动全代理协议服务 - if (st_ServiceConfig.st_XProxy.nSrcPort > 0) + if (st_ServiceConfig.nProxyPort > 0) { //启动心跳 if (st_ServiceConfig.st_XTime.nProxyTimeout > 0) @@ -325,15 +327,23 @@ int main(int argc, char** argv) XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,Proxy心跳服务被设置为不启用")); } //网络 - xhProxySocket = NetCore_TCPXCore_StartEx(st_ServiceConfig.st_XProxy.nSrcPort, st_ServiceConfig.st_XMax.nMaxClient, st_ServiceConfig.st_XMax.nIOThread); + xhProxySocket = NetCore_TCPXCore_StartEx(st_ServiceConfig.nProxyPort, st_ServiceConfig.st_XMax.nMaxClient, st_ServiceConfig.st_XMax.nIOThread); if (NULL == xhProxySocket) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,启动Proxy网络服务器失败,错误:%lX"), NetCore_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动Proxy网络服务器成功,Proxy源端口:%d,目标端口:%d,目标地址:%s,IO:%d"), st_ServiceConfig.st_XProxy.nSrcPort, st_ServiceConfig.st_XProxy.nDstPort, st_ServiceConfig.st_XProxy.tszDstIPAddr, st_ServiceConfig.st_XMax.nIOThread); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动Proxy网络服务器成功,Proxy端口:%d,目标地址:%s,IO:%d"), st_ServiceConfig.nProxyPort, st_ServiceConfig.st_XProxy.tszIPAddr, st_ServiceConfig.st_XMax.nIOThread); NetCore_TCPXCore_RegisterCallBackEx(xhProxySocket, Network_Callback_ProxyLogin, Network_Callback_ProxyRecv, Network_Callback_ProxyLeave); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,注册Proxy网络事件成功")); + //客户端 + xhProxyClient = XClient_TCPSelect_StartEx(XEngine_Proxy_CBRecv); + if (NULL == xhProxyClient) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动Proxy客户端服务失败,错误:%lX"), XClient_GetLastError()); + goto XENGINE_SERVICEAPP_EXIT; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动Proxy客户端服务成功")); } else { @@ -398,6 +408,7 @@ int main(int argc, char** argv) //销毁proxy资源 NetCore_TCPXCore_DestroyEx(xhProxySocket); SocketOpt_HeartBeat_DestoryEx(xhProxyHeart); + XClient_TCPSelect_StopEx(xhProxyClient); //销毁日志资源 HelpComponents_XLog_Destroy(xhLog); } From a0cc80c99667f7cb5f566e52d483d0883f35c5d3 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 20 Jan 2025 14:14:10 +0800 Subject: [PATCH 14/22] fixed:forward not free client when destroy --- XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp index 9f8270b..d0f6524 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp @@ -43,6 +43,7 @@ void ServiceApp_Stop(int signo) NetCore_TCPXCore_DestroyEx(xhForwardSocket); SocketOpt_HeartBeat_DestoryEx(xhForwardHeart); ManagePool_Thread_NQDestroy(xhForwardPool); + XClient_TCPSelect_StopEx(xhForwardClient); //销毁proxy资源 NetCore_TCPXCore_DestroyEx(xhProxySocket); SocketOpt_HeartBeat_DestoryEx(xhProxyHeart); @@ -405,6 +406,7 @@ int main(int argc, char** argv) NetCore_TCPXCore_DestroyEx(xhForwardSocket); SocketOpt_HeartBeat_DestoryEx(xhForwardHeart); ManagePool_Thread_NQDestroy(xhForwardPool); + XClient_TCPSelect_StopEx(xhForwardClient); //销毁proxy资源 NetCore_TCPXCore_DestroyEx(xhProxySocket); SocketOpt_HeartBeat_DestoryEx(xhProxyHeart); From 2214569f987a2b6eb5cb9df4b3833086ed1963e4 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 20 Jan 2025 14:46:04 +0800 Subject: [PATCH 15/22] fixed:forward and proxy not free client token modify:get client info for forward get function --- .../ModuleSession_Define.h | 8 ++++---- .../ModuleSession_Forward.cpp | 14 ++++++------- .../ModuleSession_Forward.h | 2 +- XEngine_Source/XEngine_ModuleSession/pch.cpp | 4 ++-- .../XEngine_ServiceApp/XEngine_Network.cpp | 20 ++++++++++++++----- 5 files changed, 29 insertions(+), 19 deletions(-) diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h index 59ea67e..4c3ac2d 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h @@ -147,17 +147,17 @@ extern "C" bool ModuleSession_Forward_Delete(LPCXSTR lpszAddr, XCHAR * ptszDstAd 类型:常量字符指针 可空:N 意思:输入要操作的客户端 - 参数.二:ptszDstAddr + 参数.二:pSt_ForwardClinet In/Out:Out - 类型:字符指针 + 类型:数据结构指针 可空:Y - 意思:输出对端地址 + 意思:输出信息 返回值 类型:逻辑型 意思:是否成功 备注: *********************************************************************/ -extern "C" bool ModuleSession_Forward_Get(LPCXSTR lpszAddr, XCHAR* ptszDstAddr = NULL); +extern "C" bool ModuleSession_Forward_Get(LPCXSTR lpszAddr, SESSION_FORWARD* pSt_ForwardClinet = NULL); /************************************************************************/ /* SOCK代理服务器导出函数 */ /************************************************************************/ diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp index b240a58..05fedc5 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp @@ -311,21 +311,21 @@ bool CModuleSession_Forward::ModuleSession_Forward_Delete(LPCXSTR lpszAddr, XCHA 类型:常量字符指针 可空:N 意思:输入要操作的客户端 - 参数.二:ptszDstAddr + 参数.二:pSt_ForwardClinet In/Out:Out - 类型:字符指针 + 类型:数据结构指针 可空:Y - 意思:输出对端地址 + 意思:输出信息 返回值 类型:逻辑型 意思:是否成功 备注: *********************************************************************/ -bool CModuleSession_Forward::ModuleSession_Forward_Get(LPCXSTR lpszAddr, XCHAR* ptszDstAddr) +bool CModuleSession_Forward::ModuleSession_Forward_Get(LPCXSTR lpszAddr, SESSION_FORWARD* pSt_ForwardClinet) { Session_IsErrorOccur = false; - if ((NULL == lpszAddr) || (NULL == ptszDstAddr)) + if ((NULL == lpszAddr)) { Session_IsErrorOccur = true; Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_PARAMENT; @@ -341,7 +341,7 @@ bool CModuleSession_Forward::ModuleSession_Forward_Get(LPCXSTR lpszAddr, XCHAR* st_Locker.unlock_shared(); return false; } - if (NULL == ptszDstAddr) + if (NULL == pSt_ForwardClinet) { st_Locker.unlock_shared(); return true; @@ -354,7 +354,7 @@ bool CModuleSession_Forward::ModuleSession_Forward_Get(LPCXSTR lpszAddr, XCHAR* st_Locker.unlock_shared(); return false; } - _tcsxcpy(ptszDstAddr, stl_MapIterator->second.tszDstAddr); + *pSt_ForwardClinet = stl_MapIterator->second; 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 index 06ef488..9e31c5e 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.h +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.h @@ -22,7 +22,7 @@ class CModuleSession_Forward bool ModuleSession_Forward_BindNamed(LPCXSTR lpszSrcAddr, LPCXSTR lpszDstAddr); bool ModuleSession_Forward_BindAnony(LPCXSTR lpszSrcAddr, LPCXSTR lpszDstAddr, XNETHANDLE xhClient); bool ModuleSession_Forward_Delete(LPCXSTR lpszAddr, XCHAR* ptszDstAddr = NULL); - bool ModuleSession_Forward_Get(LPCXSTR lpszAddr, XCHAR* ptszDstAddr = NULL); + bool ModuleSession_Forward_Get(LPCXSTR lpszAddr, SESSION_FORWARD *pSt_ForwardClinet = NULL); private: shared_mutex st_Locker; private: diff --git a/XEngine_Source/XEngine_ModuleSession/pch.cpp b/XEngine_Source/XEngine_ModuleSession/pch.cpp index 94bb47e..f45db1d 100644 --- a/XEngine_Source/XEngine_ModuleSession/pch.cpp +++ b/XEngine_Source/XEngine_ModuleSession/pch.cpp @@ -55,9 +55,9 @@ extern "C" bool ModuleSession_Forward_Delete(LPCXSTR lpszAddr, XCHAR * ptszDstAd { return m_Forward.ModuleSession_Forward_Delete(lpszAddr, ptszDstAddr); } -extern "C" bool ModuleSession_Forward_Get(LPCXSTR lpszAddr, XCHAR * ptszDstAddr) +extern "C" bool ModuleSession_Forward_Get(LPCXSTR lpszAddr, SESSION_FORWARD* pSt_ForwardClinet) { - return m_Forward.ModuleSession_Forward_Get(lpszAddr, ptszDstAddr); + return m_Forward.ModuleSession_Forward_Get(lpszAddr, pSt_ForwardClinet); } /************************************************************************/ /* SOCK代理服务器导出函数 */ diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp index 9347aa5..4f08c12 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp @@ -68,13 +68,11 @@ bool CALLBACK Network_Callback_ForwardLogin(LPCXSTR lpszClientAddr, XSOCKET hSoc } void CALLBACK Network_Callback_ForwardRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) { - XCHAR tszDstAddr[128]; - memset(tszDstAddr, '\0', sizeof(tszDstAddr)); - - if (ModuleSession_Forward_Get(lpszClientAddr, tszDstAddr)) + SESSION_FORWARD st_ForwardClinet = {}; + if (ModuleSession_Forward_Get(lpszClientAddr, &st_ForwardClinet)) { //如果有转发,直接转发 - XEngine_Network_Send(tszDstAddr, lpszRecvMsg, nMsgLen, XENGINE_CLIENT_NETTYPE_FORWARD); + XEngine_Network_Send(st_ForwardClinet.tszDstAddr, lpszRecvMsg, nMsgLen, XENGINE_CLIENT_NETTYPE_FORWARD); } else { @@ -195,6 +193,12 @@ void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType) SocketOpt_HeartBeat_DeleteAddrEx(xhForwardHeart, lpszClientAddr); NetCore_TCPXCore_CloseForClientEx(xhForwardSocket, lpszClientAddr); } + SESSION_FORWARD st_ForwardInfo = {}; + if (ModuleSession_Forward_Get(lpszClientAddr, &st_ForwardInfo)) + { + XClient_TCPSelect_DeleteEx(xhForwardClient, st_ForwardInfo.xhClient); + } + ModuleSession_Proxy_Delete(lpszClientAddr); HelpComponents_Datas_DeleteEx(xhForwardPacket, lpszClientAddr); ModuleSession_Forward_Delete(lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Forward客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType); @@ -214,6 +218,12 @@ void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType) SocketOpt_HeartBeat_DeleteAddrEx(xhProxyHeart, lpszClientAddr); NetCore_TCPXCore_CloseForClientEx(xhProxySocket, lpszClientAddr); } + SESSION_FORWARD st_ProxyInfo = {}; + if (ModuleSession_Proxy_GetForAddr(lpszClientAddr, &st_ProxyInfo)) + { + XClient_TCPSelect_DeleteEx(xhProxyClient, st_ProxyInfo.xhClient); + } + ModuleSession_Proxy_Delete(lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Proxy客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType); } else From 7cceeabdc900788c4f42e0a2a444ab28fec3c596 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 20 Jan 2025 15:00:18 +0800 Subject: [PATCH 16/22] fixed:log print error and send message --- XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp index 3ee7c54..c46e78c 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp @@ -15,9 +15,11 @@ void CALLBACK XEngine_Proxy_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, XSOCKET SESSION_FORWARD st_ProxyInfo = {}; if (!ModuleSession_Proxy_GetForToken(xhClient, &st_ProxyInfo)) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Proxy客户端:%lld,获取转发地址信息失败,地址:%s,端口:%d,错误码:%lX"), xhToken, st_ProxyInfo.tszSrcAddr, st_ProxyInfo.tszDstAddr, ModuleSession_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Proxy客户端:%lld,获取转发地址信息失败,原始地址:%s,目标地址:%s,错误码:%lX"), xhToken, st_ProxyInfo.tszSrcAddr, st_ProxyInfo.tszDstAddr, ModuleSession_GetLastError()); return; } + XEngine_Network_Send(st_ProxyInfo.tszSrcAddr, lpszMsgBuffer, nMsgLen, XENGINE_CLIENT_NETTYPE_PROXY); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("Proxy客户端:%lld,转发数据成功,原始地址:%s,目标地址:%s,大小:%d"), xhToken, st_ProxyInfo.tszSrcAddr, st_ProxyInfo.tszDstAddr, nMsgLen); } bool XEngine_Proxy_Connect(LPCXSTR lpszClientAddr) @@ -35,7 +37,7 @@ bool XEngine_Proxy_Connect(LPCXSTR lpszClientAddr) } SocketOpt_HeartBeat_InsertAddrEx(xhProxyHeart, lpszClientAddr); ModuleSession_Proxy_Insert(lpszClientAddr, st_ServiceConfig.st_XProxy.tszIPAddr, xhClient); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Proxy客户端:%s,连接到服务器"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Proxy客户端:%s,连接到服务器:%s 成功"), lpszClientAddr, st_ServiceConfig.st_XProxy.tszIPAddr); return true; } bool XEngine_Proxy_Recvmsg(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen) @@ -51,6 +53,7 @@ bool XEngine_Proxy_Recvmsg(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nM XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Proxy客户端:%s,转发数据失败,源地址:%s,目地址:%s,错误码:%lX"), lpszClientAddr, st_ProxyInfo.tszSrcAddr, st_ProxyInfo.tszDstAddr, XClient_GetLastError()); return false; } + SocketOpt_HeartBeat_ActiveAddrEx(xhProxyHeart, lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("Proxy客户端:%s,转发数据成功,源地址:%s,目地址:%s,大小:%d"), lpszClientAddr, st_ProxyInfo.tszSrcAddr, st_ProxyInfo.tszDstAddr, nMsgLen); return true; } From a05cc61fce4efa1d3da4f651c4d48bf72b18fcb5 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 20 Jan 2025 15:15:53 +0800 Subject: [PATCH 17/22] fixed:log crash for proxy --- XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp index c46e78c..8d50cac 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp @@ -15,11 +15,11 @@ void CALLBACK XEngine_Proxy_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, XSOCKET SESSION_FORWARD st_ProxyInfo = {}; if (!ModuleSession_Proxy_GetForToken(xhClient, &st_ProxyInfo)) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Proxy客户端:%lld,获取转发地址信息失败,原始地址:%s,目标地址:%s,错误码:%lX"), xhToken, st_ProxyInfo.tszSrcAddr, st_ProxyInfo.tszDstAddr, ModuleSession_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Proxy客户端:%lld,获取转发地址信息失败,原始地址:%s,目标地址:%s,错误码:%lX"), xhClient, st_ProxyInfo.tszSrcAddr, st_ProxyInfo.tszDstAddr, ModuleSession_GetLastError()); return; } XEngine_Network_Send(st_ProxyInfo.tszSrcAddr, lpszMsgBuffer, nMsgLen, XENGINE_CLIENT_NETTYPE_PROXY); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("Proxy客户端:%lld,转发数据成功,原始地址:%s,目标地址:%s,大小:%d"), xhToken, st_ProxyInfo.tszSrcAddr, st_ProxyInfo.tszDstAddr, nMsgLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("Proxy客户端:%lld,转发数据成功,原始地址:%s,目标地址:%s,大小:%d"), xhClient, st_ProxyInfo.tszSrcAddr, st_ProxyInfo.tszDstAddr, nMsgLen); } bool XEngine_Proxy_Connect(LPCXSTR lpszClientAddr) From 7873fc4c8038b77236054525a10f56805d609096 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 20 Jan 2025 15:22:26 +0800 Subject: [PATCH 18/22] fixed:log level and type is incorrect --- XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h | 1 + .../ModuleConfigure_Json/ModuleConfigure_Json.cpp | 3 ++- XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h index 0d9b5d3..1fb7b9a 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h @@ -42,6 +42,7 @@ typedef struct tag_XEngine_ServiceConfig int nMaxSize; //最大日志大小 int nMaxCount; //最大日志个数 int nLogLeave; //日志等级 + int nLogType; //日志类型 }st_XLog; struct { diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index 09bc391..9194e69 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -113,7 +113,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE pSt_ServerConfig->st_XTime.nForwardTimeOut = st_JsonXTime["nForwardTimeOut"].asInt(); pSt_ServerConfig->st_XTime.nProxyTimeout = st_JsonXTime["nProxyTimeout"].asInt(); - if (st_JsonRoot["XLog"].empty() || (4 != st_JsonRoot["XLog"].size())) + if (st_JsonRoot["XLog"].empty() || (5 != st_JsonRoot["XLog"].size())) { Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XLOG; @@ -123,6 +123,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE pSt_ServerConfig->st_XLog.nMaxSize = st_JsonXLog["MaxSize"].asInt(); pSt_ServerConfig->st_XLog.nMaxCount = st_JsonXLog["MaxCount"].asInt(); pSt_ServerConfig->st_XLog.nLogLeave = st_JsonXLog["LogLeave"].asInt(); + pSt_ServerConfig->st_XLog.nLogType = st_JsonXLog["LogType"].asInt(); _tcsxcpy(pSt_ServerConfig->st_XLog.tszLogFile, st_JsonXLog["tszLogFile"].asCString()); if (st_JsonRoot["XReport"].empty() || (3 != st_JsonRoot["XReport"].size())) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp index d0f6524..da02989 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp @@ -145,14 +145,14 @@ int main(int argc, char** argv) st_XLogConfig.XLog_MaxBackupFile = st_ServiceConfig.st_XLog.nMaxCount; st_XLogConfig.XLog_MaxSize = st_ServiceConfig.st_XLog.nMaxSize; _tcsxcpy(st_XLogConfig.tszFileName, st_ServiceConfig.st_XLog.tszLogFile); - xhLog = HelpComponents_XLog_Init(st_ServiceConfig.st_XLog.nLogLeave, &st_XLogConfig); + xhLog = HelpComponents_XLog_Init(st_ServiceConfig.st_XLog.nLogType, &st_XLogConfig); if (NULL == xhLog) { printf("启动服务中,启动日志失败,错误:%lX", XLog_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } //设置日志打印级别 - HelpComponents_XLog_SetLogPriority(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO); + HelpComponents_XLog_SetLogPriority(xhLog, st_ServiceConfig.st_XLog.nLogLeave); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化日志系统成功")); signal(SIGINT, ServiceApp_Stop); From 6eb7a88a283c64c278cae0e11cb741eaecf89ece Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 20 Jan 2025 15:43:23 +0800 Subject: [PATCH 19/22] added:set log level for parameter --- XEngine_Source/XEngine_ServiceApp/XEngine_Configure.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Configure.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_Configure.cpp index 877dc52..1a5c922 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Configure.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Configure.cpp @@ -37,6 +37,10 @@ bool XEngine_Configure_Parament(int argc, char** argv, XENGINE_SERVICECONFIG* pS { pSt_Configure->bDeamon = _ttxoi(argv[++i]); } + else if (0 == _tcsxcmp("-l", argv[i])) + { + pSt_Configure->st_XLog.nLogLeave = _ttxoi(argv[++i]); + } else if (0 == _tcsxcmp("-v", argv[i])) { string m_StrVersion = st_ServiceConfig.st_XVer.pStl_ListVer->front(); From 48c0fb72aad2f31c79af1ba1a55b3c02aa89ab5a Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 21 Jan 2025 09:50:29 +0800 Subject: [PATCH 20/22] modify:configure field name --- .../XEngine_Config/XEngine_Config.json | 13 +++++++------ .../ModuleConfig_Define.h | 6 +++--- .../ModuleConfigure_Json.cpp | 8 ++++---- .../XEngine_ServiceApp/XEngine_ServiceApp.cpp | 18 +++++++++--------- 4 files changed, 23 insertions(+), 22 deletions(-) diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json index 156caf7..1bd949f 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -1,6 +1,6 @@ { "tszIPAddr": "192.168.1.12", - "bDeamon": 0, + "bDeamon": false, "nSocksPort": 5400, "nTunnelPort": 5401, "nForwardPort": 5402, @@ -13,15 +13,16 @@ }, "XTime": { "nTimeCheck": 3, - "nSocksTimeOut": 5, - "nTunnelTimeOut": 5, - "nForwardTimeOut": 5, + "nSocksTimeout": 5, + "nTunnelTimeout": 5, + "nForwardTimeout": 5, "nProxyTimeout": 5 }, "XLog": { "MaxSize": 1024000, "MaxCount": 10, - "LogLeave": 17, + "LogLeave": 32, + "LogType": 17, "tszLogFile": "./XEngine_Log/XEngine_ProxyServiceApp.log" }, "XReport":{ @@ -31,6 +32,6 @@ }, "XProxy": { "bEnable": false, - "tszIPAddr": "10.0.1.89:5411" + "tszIPAddr": "10.0.2.6:5001" } } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h index 1fb7b9a..e24ef5b 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h @@ -31,9 +31,9 @@ typedef struct tag_XEngine_ServiceConfig struct { int nTimeCheck; //检测次数 - int nSocksTimeOut; //TCP超时时间 - int nTunnelTimeOut; //HTTP超时时间 - int nForwardTimeOut; //转发超时时间 + int nSocksTimeout; //TCP超时时间 + int nTunnelTimeout; //HTTP超时时间 + int nForwardTimeout; //转发超时时间 int nProxyTimeout; //代理超时时间 }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 9194e69..4a78c07 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -82,7 +82,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE return false; } _tcsxcpy(pSt_ServerConfig->tszIPAddr, st_JsonRoot["tszIPAddr"].asCString()); - pSt_ServerConfig->bDeamon = st_JsonRoot["bDeamon"].asInt(); + pSt_ServerConfig->bDeamon = st_JsonRoot["bDeamon"].asBool(); pSt_ServerConfig->nSocksPort = st_JsonRoot["nSocksPort"].asInt(); pSt_ServerConfig->nTunnelPort = st_JsonRoot["nTunnelPort"].asInt(); pSt_ServerConfig->nForwardPort = st_JsonRoot["nForwardPort"].asInt(); @@ -108,9 +108,9 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE } Json::Value st_JsonXTime = st_JsonRoot["XTime"]; 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(); + 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(); pSt_ServerConfig->st_XTime.nProxyTimeout = st_JsonXTime["nProxyTimeout"].asInt(); if (st_JsonRoot["XLog"].empty() || (5 != st_JsonRoot["XLog"].size())) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp index da02989..c86ce7d 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp @@ -163,15 +163,15 @@ int main(int argc, char** argv) if (st_ServiceConfig.nSocksPort > 0) { //启动心跳 - if (st_ServiceConfig.st_XTime.nSocksTimeOut > 0) + if (st_ServiceConfig.st_XTime.nSocksTimeout > 0) { - xhSocksHeart = SocketOpt_HeartBeat_InitEx(st_ServiceConfig.st_XTime.nSocksTimeOut, st_ServiceConfig.st_XTime.nTimeCheck, Network_Callback_SocksHeart); + xhSocksHeart = SocketOpt_HeartBeat_InitEx(st_ServiceConfig.st_XTime.nSocksTimeout, st_ServiceConfig.st_XTime.nTimeCheck, Network_Callback_SocksHeart); if (NULL == xhSocksHeart) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化Socks心跳服务失败,错误:%lX"), NetCore_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化Socks心跳服务成功,时间:%d,次数:%d"), st_ServiceConfig.st_XTime.nSocksTimeOut, st_ServiceConfig.st_XTime.nTimeCheck); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化Socks心跳服务成功,时间:%d,次数:%d"), st_ServiceConfig.st_XTime.nSocksTimeout, st_ServiceConfig.st_XTime.nTimeCheck); } else { @@ -205,15 +205,15 @@ int main(int argc, char** argv) if (st_ServiceConfig.nTunnelPort > 0) { //启动心跳 - if (st_ServiceConfig.st_XTime.nTunnelTimeOut > 0) + if (st_ServiceConfig.st_XTime.nTunnelTimeout > 0) { - xhTunnelHeart = SocketOpt_HeartBeat_InitEx(st_ServiceConfig.st_XTime.nTunnelTimeOut, st_ServiceConfig.st_XTime.nTimeCheck, Network_Callback_TunnelHeart); + xhTunnelHeart = SocketOpt_HeartBeat_InitEx(st_ServiceConfig.st_XTime.nTunnelTimeout, st_ServiceConfig.st_XTime.nTimeCheck, Network_Callback_TunnelHeart); if (NULL == xhTunnelHeart) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化Tunnel心跳服务失败,错误:%lX"), NetCore_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化Tunnel心跳服务成功,时间:%d,次数:%d"), st_ServiceConfig.st_XTime.nTunnelTimeOut, st_ServiceConfig.st_XTime.nTimeCheck); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化Tunnel心跳服务成功,时间:%d,次数:%d"), st_ServiceConfig.st_XTime.nTunnelTimeout, st_ServiceConfig.st_XTime.nTimeCheck); } else { @@ -254,15 +254,15 @@ int main(int argc, char** argv) } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动Forward组包器成功")); //启动心跳 - if (st_ServiceConfig.st_XTime.nForwardTimeOut > 0) + if (st_ServiceConfig.st_XTime.nForwardTimeout > 0) { - xhForwardHeart = SocketOpt_HeartBeat_InitEx(st_ServiceConfig.st_XTime.nForwardTimeOut, st_ServiceConfig.st_XTime.nTimeCheck, Network_Callback_ForwardHeart); + xhForwardHeart = SocketOpt_HeartBeat_InitEx(st_ServiceConfig.st_XTime.nForwardTimeout, st_ServiceConfig.st_XTime.nTimeCheck, Network_Callback_ForwardHeart); if (NULL == xhForwardHeart) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化Forward心跳服务失败,错误:%lX"), NetCore_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化Forward心跳服务成功,时间:%d,次数:%d"), st_ServiceConfig.st_XTime.nForwardTimeOut, st_ServiceConfig.st_XTime.nTimeCheck); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化Forward心跳服务成功,时间:%d,次数:%d"), st_ServiceConfig.st_XTime.nForwardTimeout, st_ServiceConfig.st_XTime.nTimeCheck); } else { From a7c93d2fd195ebc7a6ff5dc2bb467282d41bab05 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 21 Jan 2025 14:17:45 +0800 Subject: [PATCH 21/22] update:read me and document --- CHANGELOG | 28 ++++++++++++++++++++++++++++ README.en.md | 18 ++++++++++-------- README.md | 17 +++++++++-------- XEngine_Docment/Docment_en.docx | Bin 120661 -> 121454 bytes XEngine_Docment/Docment_zh.docx | Bin 118985 -> 119706 bytes 5 files changed, 47 insertions(+), 16 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index a4cf304..8e969be 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,31 @@ +XEngine_ProxyServer V1.11.0.1001 + +增加:全代理转发模式支持 +增加:设置日志级别参数支持 +更新:依赖库 +更新:匹配XEngineV9版本 +更新:VS2022字符集从ANSI修改为UNICODE +更新:编译器版本升级到C++20,C17 +修改:转发获取客户端类型 +修改:配置参数名称 +修正:打印乱码的问题 +修正:转发支持客户端没有正确释放的问题 +修正:日志级别和日志类型错误的问题 +删除:XEngine的版本判断代码 + +added:full proxy forward supported +added:set log level for parameter +update:depend library +update:match xengine v9 +update:character set modify to unicode from ansi on vs2022 +update:compiler version to c++20 and c17 +modify:get client info for forward get function +modify:configure field name +fixed:print Garbled characters +fixed:forward not free client when destroy +fixed:log level and type is incorrect +delete:xengine version judgment +====================================================================================== XEngine_ProxyServer V1.10.0.1001 增加:WINDOWS COREDUMP支持 diff --git a/README.en.md b/README.en.md index 75cb615..b57c461 100644 --- a/README.en.md +++ b/README.en.md @@ -1,10 +1,11 @@ +[中文](README.md) || [English](README.en.md) # XEngine_ProxyServer 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隧道代理服务 tcp转发服务 -c c++ Socks5 Proxy Service,HTTP Tunnel Proxy Service,tcp forward service +c c++ SOCKS5代理服务,HTTP Tunnel隧道代理服务,tcp转发服务,负载代理转发 +c c++ Socks5 Proxy Service,HTTP Tunnel Proxy Service,tcp forward service,proxy forward service ## Notice the compiled release version will only be released on github. @@ -17,22 +18,23 @@ 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. TCP forward proxy +3. TCP forward proxy(forward) 4. operator log 5. encrypt Communication(planning) 6. load balanc(planning) 7. custom cert proxy protocol(planning) 8. multilevel proxy(planning) +9. lb proxy(proxy) ## install #### XEngine Evn you must install XEngine,need V9.x or above,install XEngine can be refer to xengine Readme docment -GITEE:https://gitee.com/xyry/libxengine -GITHUB:https://github.com/libxengine/xengine +GITEE:https://gitee.com/libxengine/libxengine +GITHUB:https://github.com/libxengine/libxengine ##### fast to deployment -git clone https://gitee.com/xyry/libxengine.git or git clone https://github.com/libxengine/xengine.git +git clone https://gitee.com/libxengine/libxengine.git or git clone https://github.com/libxengine/libxengine.git window Exection XEngine_WINEnv.bat Linux Exection:sudo ./XEngine_LINEnv.sh -i 3 Macos Exection:./XEngine_LINEnv.sh -i 3 @@ -44,7 +46,7 @@ git submodule update #### Windows use vs open and compile,suport windows 7sp1 and above -Just Run it,use XEngine_AuthorizeApp +Just Run it #### Linux use makefile compile,UBUNTU22.04 x64 or RockyLinux9 x64 @@ -82,7 +84,7 @@ Refer to Linux You can refer to the document under the docment directory. It contains API protocol and service description. ## Test Server Address -Address:app.xyry.org +Address:app.libxengine.com Port:Socks5 5400,HTTP Tunnel 5401,Forward 5402 ## Participate in contribution diff --git a/README.md b/README.md index 02af8ed..1296815 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,8 @@ 编译发布版本将只在github上面发布. ## 介绍 -c c++ SOCKS5代理服务 HTTP Tunnel隧道代理服务 tcp转发服务 -c c++ Socks5 Proxy Service,HTTP Tunnel Proxy Service,tcp forward service +c c++ SOCKS5代理服务,HTTP Tunnel隧道代理服务,tcp转发服务,负载代理转发 +c c++ Socks5 Proxy Service,HTTP Tunnel Proxy Service,tcp forward service,proxy forward service ## 软件架构 此软件基于XEngine开发.采用C/C++作为开发语言 @@ -17,22 +17,23 @@ c c++ Socks5 Proxy Service,HTTP Tunnel Proxy Service,tcp forward service 此软件支持以下特性 1. SOCKS5代理 2. Tunnel代理 -3. TCP数据转发服务 +3. TCP数据转发服务(forward) 4. 操作日志 5. 加密通信(planning) 6. 负载均衡(planning) 7. 自定义证书代理协议(planning) 8. 多级代理(planning) +9. 全负载代理(proxy) ## 安装教程 #### XEngine环境 必须安装XEngine,版本需要V9.x或者以上版本,安装XEngine可以参考其Readme文档 -GITEE:https://gitee.com/xyry/libxengine -GITHUB:https://github.com/libxengine/xengine +GITEE:https://gitee.com/libxengine/libxengine +GITHUB:https://github.com/libxengine/libxengine ###### 快速部署 -git clone https://gitee.com/xyry/libxengine.git 或者 git clone https://github.com/libxengine/xengine.git +git clone https://gitee.com/libxengine/libxengine.git 或者 git clone https://github.com/libxengine/libxengine.git window执行XEngine_WINEnv.bat 脚本. Linux执行:sudo ./XEngine_LINEnv.sh -i 3 macos执行:./XEngine_LINEnv.sh -i 3 @@ -45,7 +46,7 @@ git submodule update #### Windows 使用VS打开并且编译,支持WINDOWS 7SP1以上系统 -直接运行即可,使用XEngine_AuthorizeApp +直接运行即可 #### Linux Linux使用Makefile编译,UBUNTU22.04 x64或者RockyLinux9 x64 @@ -86,7 +87,7 @@ make FLAGS=CleanAll 清理编译 你可以参考docment目录下的文档.里面包含了API协议和服务说明. ## 测试服务器 -地址:app.xyry.org +地址:app.libxengine.com 端口:Socks5 5400,HTTP Tunnel 5401,Forward 5402 ## 参与贡献 diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx index a0afb1db150c7e7c91d6d441ee6cdcff7a0c886f..e23c4c8d393ad6eb46babc8432ae7f515f16f0bd 100644 GIT binary patch delta 98604 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 _ew$GL8=+tZ`6Oz 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 z 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 delta 93561 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

T5J2?mP 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

g{*_Bk^`6b0BPsuz|lX4%->hGk* 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 Date: Tue, 21 Jan 2025 14:18:41 +0800 Subject: [PATCH 22/22] update:version configure --- XEngine_Release/XEngine_Config/XEngine_Version.json | 1 + 1 file changed, 1 insertion(+) diff --git a/XEngine_Release/XEngine_Config/XEngine_Version.json b/XEngine_Release/XEngine_Config/XEngine_Version.json index ca6ada9..9cf6e52 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Version.json +++ b/XEngine_Release/XEngine_Config/XEngine_Version.json @@ -1,5 +1,6 @@ { "XVer": [ + "1.11.0.1001 Build20250121", "1.10.0.1001 Build20241115", "1.9.0.1001 Build20240910", "1.8.0.1001 Build20240522",