diff --git a/.github/workflows/Centos_build.yml b/.github/workflows/Centos_build.yml new file mode 100644 index 00000000..aa23541a --- /dev/null +++ b/.github/workflows/Centos_build.yml @@ -0,0 +1,119 @@ +name: centos build workflows + +on: + push: + branches: + - 'develop' + paths: + - 'XEngine_Source/**' + - 'XEngine_Release/**' + - '.github/**' + +permissions: + contents: read + +jobs: + build: + runs-on: ${{ matrix.runner }} + container: + image: quay.io/centos/centos:${{ matrix.stream }} + options: --platform ${{ matrix.platform }} + strategy: + matrix: + include: + - arch: amd64 + runner: ubuntu-24.04 + platform: linux/amd64 + artifact: x86-64 + version: 9 + stream: stream9 + - arch: amd64 + runner: ubuntu-24.04 + platform: linux/amd64 + artifact: x86-64 + version: 10 + stream: stream10 + - arch: arm64 + runner: ubuntu-24.04-arm + platform: linux/arm64 + artifact: Arm64 + version: 9 + stream: stream9 + - arch: arm64 + runner: ubuntu-24.04-arm + platform: linux/arm64 + artifact: Arm64 + version: 10 + stream: stream10 + + steps: + - name: Checkout main repository code + uses: actions/checkout@v4 + + - name: Checkout dependency repository (xengine) + uses: actions/checkout@v4 + with: + repository: libxengine/libxengine + path: libxengine + + - name: sub module checkout (XEngine_OPenSource) + uses: actions/checkout@v4 + with: + repository: libxengine/XEngine_OPenSource + path: XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource + - name: sub module checkout (XEngine_PhoneData) + uses: actions/checkout@v4 + with: + repository: libxengine/XEngine_PhoneData + path: XEngine_Source/XEngine_DependLibrary/XEngine_PhoneData + - name: sub module checkout (XEngine_IPMacData) + uses: actions/checkout@v4 + with: + repository: libxengine/XEngine_IPMacData + path: XEngine_Source/XEngine_DependLibrary/XEngine_IPMacData + + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV + + - name: install system package + run: | + dnf update -y + dnf install gcc g++ make git jq unzip wget -y + + - name: install xengine library + run: | + 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_RockyLinux_${{ matrix.version }}_${{ matrix.artifact }}.zip + unzip ./XEngine_RockyLinux_${{ matrix.version }}_${{ matrix.artifact }}.zip -d ./XEngine_RockyLinux_${{ matrix.version }}_${{ matrix.artifact }} + cd XEngine_RockyLinux_${{ matrix.version }}_${{ matrix.artifact }} + + chmod 777 * + ./XEngine_LINEnv.sh -i 3 + + - name: install build package + run: | + dnf install lua-devel opencv-devel qrencode-devel leptonica-devel tesseract-devel -y + + - name: make + run: | + cd XEngine_Source + make + make FLAGS=InstallAll + make FLAGS=CleanAll + + make RELEASE=1 + make FLAGS=InstallAll + make FLAGS=CleanAll + - name: test + run: | + cd XEngine_Release + chmod 777 copydb.sh + ./copydb.sh + ./XEngine_APIServiceApp -t + + - name: Upload folder as artifact with CentOS + uses: actions/upload-artifact@v4 + with: + name: XEngine_MQServiceApp-CentOS_${{ matrix.version }}_${{ matrix.artifact }} + path: XEngine_Release/ + retention-days: 1 \ No newline at end of file diff --git a/.github/workflows/Rocky_build.yml b/.github/workflows/Rocky_build.yml index c316b02c..0b971296 100644 --- a/.github/workflows/Rocky_build.yml +++ b/.github/workflows/Rocky_build.yml @@ -75,9 +75,6 @@ jobs: - name: install system package run: | - dnf clean all - dnf makecache - dnf distro-sync -y dnf update -y dnf install gcc g++ make git jq unzip wget -y @@ -90,10 +87,11 @@ jobs: chmod 777 * ./XEngine_LINEnv.sh -i 3 - dnf install libavdevice -y + - name: install build package run: | dnf install lua-devel opencv-devel qrencode-devel leptonica-devel tesseract-devel -y + - name: make run: | cd XEngine_Source diff --git a/.github/workflows/debian_build.yml b/.github/workflows/debian_build.yml index 0db7586d..1c6659f0 100644 --- a/.github/workflows/debian_build.yml +++ b/.github/workflows/debian_build.yml @@ -16,7 +16,7 @@ jobs: build: runs-on: ${{ matrix.runner }} container: - image: debian:bookworm + image: debian:${{ matrix.name }} options: --platform ${{ matrix.platform }} strategy: matrix: @@ -25,6 +25,14 @@ jobs: runner: ubuntu-24.04 platform: linux/amd64 artifact: x86-64 + name: bookworm + version: 12 + - arch: amd64 + runner: ubuntu-24.04 + platform: linux/amd64 + artifact: x86-64 + name: trixie + version: 13 steps: - name: Checkout main repository code @@ -66,9 +74,9 @@ jobs: - name: install xengine library run: | 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_Debian_12_${{ matrix.artifact }}.zip - unzip ./XEngine_Debian_12_${{ matrix.artifact }}.zip -d ./XEngine_Debian_12_${{ matrix.artifact }} - cd XEngine_Debian_12_${{ matrix.artifact }} + wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_Debian_${{ matrix.version }}_${{ matrix.artifact }}.zip + unzip ./XEngine_Debian_${{ matrix.version }}_${{ matrix.artifact }}.zip -d ./XEngine_Debian_${{ matrix.version }}_${{ matrix.artifact }} + cd XEngine_Debian_${{ matrix.version }}_${{ matrix.artifact }} chmod 777 * ./XEngine_LINEnv.sh -i 3 @@ -93,6 +101,6 @@ jobs: - name: Upload folder as artifact uses: actions/upload-artifact@v4 with: - name: XEngine_APIServiceApp-Debian_12_x86-64 + name: XEngine_APIServiceApp-Debian_${{ matrix.version }}_x86-64 path: XEngine_Release/ retention-days: 1 \ No newline at end of file diff --git a/.github/workflows/macbuild.yml b/.github/workflows/macbuild.yml index b93d2e40..87ba71f2 100644 --- a/.github/workflows/macbuild.yml +++ b/.github/workflows/macbuild.yml @@ -14,8 +14,8 @@ jobs: strategy: matrix: include: - - os: macos-13 - - os: macos-14 + - os: macos-15 + - os: macos-15-intel runs-on: ${{ matrix.os }} steps: @@ -44,13 +44,13 @@ jobs: run: echo "TERM=xterm" >> $GITHUB_ENV - name: Set up Dependency x86_64 Environment - if: matrix.os == 'macos-13' + if: matrix.os == 'macos-15-intel' run: | cd libxengine chmod 777 * ./XEngine_LINEnv.sh -i 3 - name: Set up Dependency Arm64 Environment - if: matrix.os == 'macos-14' + if: matrix.os == 'macos-15' run: | 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 @@ -80,14 +80,14 @@ jobs: ./XEngine_APIServiceApp -t - name: Upload folder as artifact with mac x64 - if: matrix.os == 'macos-13' + if: matrix.os == 'macos-15-intel' uses: actions/upload-artifact@v4 with: name: XEngine_APIServiceApp-Mac_x86_64 path: XEngine_Release/ retention-days: 1 - name: Upload folder as artifact with mac arm - if: matrix.os == 'macos-14' + if: matrix.os == 'macos-15' uses: actions/upload-artifact@v4 with: name: XEngine_APIServiceApp-Mac_Arm64 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6df21913..edc412ad 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -52,6 +52,15 @@ jobs: skip_unpack: true if_no_artifact_found: fail path: ./XRelease/ + - name: Download CentOS build + uses: dawidd6/action-download-artifact@v11 + with: + workflow: Centos_build.yml + workflow_conclusion: success + check_artifacts: false + skip_unpack: true + if_no_artifact_found: fail + path: ./XRelease/ - name: Download macbuild uses: dawidd6/action-download-artifact@v11 with: diff --git a/README.en.md b/README.en.md index ed6f3552..a3a2f492 100644 --- a/README.en.md +++ b/README.en.md @@ -59,6 +59,7 @@ It allows you to save 90% of information service costs in a year. 36. mac address vendor query 37. ORC Get TEXT With image 38. P2P +39. DNS protocol support ## install @@ -83,12 +84,12 @@ Modify the database configuration in XSQL in the configuration file to your The default configuration does not enable database support. If the database interface is required, you need to enable the database yourself #### Windows -need to vcpkg configure third-part env.refer vcpkg install guide.after installed and execution:vcpkg.exe install lua:x86-windows opencv[contrib]:x86-windows libqrencode:x86-windows lua:x64-windows opencv[contrib]:x64-windows libqrencode:x64-windows +need to vcpkg configure third-part env.refer vcpkg install guide.after installed and execution:vcpkg.exe install lua:x86-windows opencv[contrib,freetype]:x86-windows libqrencode:x86-windows lua:x64-windows opencv[contrib,freetype]:x64-windows libqrencode:x64-windows use vs open and compile,suport windows 7sp1 and above Just Run it #### sub module -Due to the dependent sub-modules, after you checkout the warehouse, execute the following command in the warehouse directory to pull the sub-modules +Due to the dependent sub-modules, after you checkout the resprepository, execute the following command in the resprepository directory to pull the sub-modules git submodule init git submodule update diff --git a/README.md b/README.md index 78a7250a..fecaa803 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,7 @@ c c++ interface api service 36. 支持MAC地址厂商查询 37. ORC图像文本提取 38. P2P +39. DNS协议支持 ## 安装教程 @@ -86,16 +87,16 @@ macos执行:./XEngine_LINEnv.sh -i 3 默认配置没有开启数据库支持,如果需要数据库接口支持,需要自己开启数据库 #### sub module -由于依赖的子模块,在你checkout仓库后,在仓库目录下执行下面的命令拉取子模块 +由于依赖的子模块,在你clone仓库后,在仓库目录下执行下面的命令拉取子模块 git submodule init git submodule update 如果github访问失败,你也可以clone该项目,在主目录下使用命令: -git clone https://gitee.com/xengine/XEngine_OPenSource.git XEngine_Source/XEngine_Depend -git clone https://gitee.com/xengine/XEngine_IPMacData.git XEngine_Source/XEngine_DBDepend/XEngine_IPMacData -git clone https://gitee.com/xengine/XEngine_PhoneData.git XEngine_Source/XEngine_DBDepend/XEngine_PhoneData +git clone https://gitee.com/xengine/XEngine_OPenSource.git XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource +git clone https://gitee.com/xengine/XEngine_IPMacData.git XEngine_Source/XEngine_DependLibrary/XEngine_IPMacData +git clone https://gitee.com/xengine/XEngine_PhoneData.git XEngine_Source/XEngine_DependLibrary/XEngine_PhoneData #### Windows -需要vcpkg配置第三方环境,具体参考vcpkg安装方式,安装好后执行:vcpkg.exe install lua:x86-windows opencv[contrib]:x86-windows libqrencode:x86-windows lua:x64-windows opencv[contrib]:x64-windows libqrencode:x64-windows +需要vcpkg配置第三方环境,具体参考vcpkg安装方式,安装好后执行:vcpkg.exe install lua:x86-windows opencv[contrib,freetype]:x86-windows libqrencode:x86-windows lua:x64-windows opencv[contrib,freetype]:x64-windows libqrencode:x64-windows 使用VS打开并且编译,支持WINDOWS 7SP1以上系统 直接运行即可 diff --git a/XEngine_APPClient/APPClient_APIQueryExample/APPClient_APIQueryExample.vcxproj b/XEngine_APPClient/APPClient_APIQueryExample/APPClient_APIQueryExample.vcxproj index 9032c4f4..4d44a2ba 100644 --- a/XEngine_APPClient/APPClient_APIQueryExample/APPClient_APIQueryExample.vcxproj +++ b/XEngine_APPClient/APPClient_APIQueryExample/APPClient_APIQueryExample.vcxproj @@ -71,11 +71,11 @@ - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib32);../../XEngine_Source/Debug;$(LibraryPath) - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib64);../../XEngine_Source/x64/Debug;$(LibraryPath) diff --git a/XEngine_APPClient/APPClient_BackExample/APPClient_BackExample.vcxproj b/XEngine_APPClient/APPClient_BackExample/APPClient_BackExample.vcxproj index fa2fe773..e48bc09b 100644 --- a/XEngine_APPClient/APPClient_BackExample/APPClient_BackExample.vcxproj +++ b/XEngine_APPClient/APPClient_BackExample/APPClient_BackExample.vcxproj @@ -71,11 +71,11 @@ - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib64);../../XEngine_Source/x64/Debug;$(LibraryPath) - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib32);../../XEngine_Source/Debug;$(LibraryPath) diff --git a/XEngine_APPClient/APPClient_BankExample/APPClient_BankExample.vcxproj b/XEngine_APPClient/APPClient_BankExample/APPClient_BankExample.vcxproj index a55366df..1e6a6dca 100644 --- a/XEngine_APPClient/APPClient_BankExample/APPClient_BankExample.vcxproj +++ b/XEngine_APPClient/APPClient_BankExample/APPClient_BankExample.vcxproj @@ -72,7 +72,7 @@ true - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib32);../../XEngine_Source/Debug;$(LibraryPath) diff --git a/XEngine_APPClient/APPClient_DeamonExample/APPClient_DeamonExample.vcxproj b/XEngine_APPClient/APPClient_DeamonExample/APPClient_DeamonExample.vcxproj index e8926ecf..a321d6e2 100644 --- a/XEngine_APPClient/APPClient_DeamonExample/APPClient_DeamonExample.vcxproj +++ b/XEngine_APPClient/APPClient_DeamonExample/APPClient_DeamonExample.vcxproj @@ -71,11 +71,11 @@ - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib64);../../XEngine_Source/x64/Debug;$(LibraryPath) - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib32);../../XEngine_Source/Debug;$(LibraryPath) diff --git a/XEngine_APPClient/APPClient_ImageExample/APPClient_ImageExample.cpp b/XEngine_APPClient/APPClient_ImageExample/APPClient_ImageExample.cpp index df7fe832..5ab682df 100644 --- a/XEngine_APPClient/APPClient_ImageExample/APPClient_ImageExample.cpp +++ b/XEngine_APPClient/APPClient_ImageExample/APPClient_ImageExample.cpp @@ -79,7 +79,7 @@ int test_imgzoom() } memset(ptszFileBuffer, '\0', XENGINE_MEMORY_SIZE_MAX); - FILE* pSt_File = _xfopen(pptszListFile[i], _X("rb")); + FILE* pSt_File = fopen(pptszListFile[i], _X("rb")); if (NULL == pSt_File) { continue; diff --git a/XEngine_APPClient/APPClient_ImageExample/APPClient_ImageExample.vcxproj b/XEngine_APPClient/APPClient_ImageExample/APPClient_ImageExample.vcxproj index bbe66375..671337d2 100644 --- a/XEngine_APPClient/APPClient_ImageExample/APPClient_ImageExample.vcxproj +++ b/XEngine_APPClient/APPClient_ImageExample/APPClient_ImageExample.vcxproj @@ -71,11 +71,11 @@ - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib64);../../XEngine_Source/x64/Debug;$(LibraryPath) - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib32);../../XEngine_Source/Debug;$(LibraryPath) diff --git a/XEngine_APPClient/APPClient_MachineExample/APPClient_MachineExample.vcxproj b/XEngine_APPClient/APPClient_MachineExample/APPClient_MachineExample.vcxproj index 9cfb2138..706e0dca 100644 --- a/XEngine_APPClient/APPClient_MachineExample/APPClient_MachineExample.vcxproj +++ b/XEngine_APPClient/APPClient_MachineExample/APPClient_MachineExample.vcxproj @@ -71,11 +71,11 @@ - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib64);../../XEngine_Source/x64/Debug;$(LibraryPath) - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib32);../../XEngine_Source/Debug;$(LibraryPath) diff --git a/XEngine_APPClient/APPClient_P2PExample/APPClient_P2PExample.vcxproj b/XEngine_APPClient/APPClient_P2PExample/APPClient_P2PExample.vcxproj index ed3d099f..f4eefdbd 100644 --- a/XEngine_APPClient/APPClient_P2PExample/APPClient_P2PExample.vcxproj +++ b/XEngine_APPClient/APPClient_P2PExample/APPClient_P2PExample.vcxproj @@ -71,11 +71,11 @@ - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib64);../../XEngine_Source/x64/Debug;$(LibraryPath) - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib32);../../XEngine_Source/Debug;$(LibraryPath) diff --git a/XEngine_APPClient/APPClient_QRExample/APPClient_QRExample.vcxproj b/XEngine_APPClient/APPClient_QRExample/APPClient_QRExample.vcxproj index d5489665..1c158fca 100644 --- a/XEngine_APPClient/APPClient_QRExample/APPClient_QRExample.vcxproj +++ b/XEngine_APPClient/APPClient_QRExample/APPClient_QRExample.vcxproj @@ -71,11 +71,11 @@ - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib64);../../XEngine_Source/x64/Debug;$(LibraryPath) - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib32);../../XEngine_Source/Debug;$(LibraryPath) diff --git a/XEngine_APPClient/APPClient_RegionExample/APPClient_RegionExample.vcxproj b/XEngine_APPClient/APPClient_RegionExample/APPClient_RegionExample.vcxproj index 579dfb54..ba338b0b 100644 --- a/XEngine_APPClient/APPClient_RegionExample/APPClient_RegionExample.vcxproj +++ b/XEngine_APPClient/APPClient_RegionExample/APPClient_RegionExample.vcxproj @@ -71,11 +71,11 @@ - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib32);../../XEngine_Source/Debug;$(LibraryPath) - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib64);../../XEngine_Source/x64/Debug;$(LibraryPath) diff --git a/XEngine_APPClient/APPClient_SLinkExample/APPClient_SLinkExample.vcxproj b/XEngine_APPClient/APPClient_SLinkExample/APPClient_SLinkExample.vcxproj index da98f99a..a46dea1f 100644 --- a/XEngine_APPClient/APPClient_SLinkExample/APPClient_SLinkExample.vcxproj +++ b/XEngine_APPClient/APPClient_SLinkExample/APPClient_SLinkExample.vcxproj @@ -71,11 +71,11 @@ - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib64);../../XEngine_Source/x64/Debug;$(LibraryPath) - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib32);../../XEngine_Source/Debug;$(LibraryPath) diff --git a/XEngine_APPClient/APPClient_SocketExample/APPClient_SocketExample.vcxproj b/XEngine_APPClient/APPClient_SocketExample/APPClient_SocketExample.vcxproj index 0a6f780d..aa591235 100644 --- a/XEngine_APPClient/APPClient_SocketExample/APPClient_SocketExample.vcxproj +++ b/XEngine_APPClient/APPClient_SocketExample/APPClient_SocketExample.vcxproj @@ -71,11 +71,11 @@ - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib64);../../XEngine_Source/x64/Debug;$(LibraryPath) - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib32);../../XEngine_Source/Debug;$(LibraryPath) diff --git a/XEngine_APPClient/APPClient_WeatherExample/APPClient_WeatherExample.vcxproj b/XEngine_APPClient/APPClient_WeatherExample/APPClient_WeatherExample.vcxproj index f143064b..be610861 100644 --- a/XEngine_APPClient/APPClient_WeatherExample/APPClient_WeatherExample.vcxproj +++ b/XEngine_APPClient/APPClient_WeatherExample/APPClient_WeatherExample.vcxproj @@ -71,11 +71,11 @@ - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib32);../../XEngine_Source/Debug;$(LibraryPath) - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib64);../../XEngine_Source/x64/Debug;$(LibraryPath) diff --git a/XEngine_APPClient/APPClient_WordFilter/APPClient_WordFilter.vcxproj b/XEngine_APPClient/APPClient_WordFilter/APPClient_WordFilter.vcxproj index 7aafcb6f..1c106705 100644 --- a/XEngine_APPClient/APPClient_WordFilter/APPClient_WordFilter.vcxproj +++ b/XEngine_APPClient/APPClient_WordFilter/APPClient_WordFilter.vcxproj @@ -71,11 +71,11 @@ - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib64);../../XEngine_Source/x64/Debug;$(LibraryPath) - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib32);../../XEngine_Source/Debug;$(LibraryPath) diff --git a/XEngine_APPClient/APPClient_XLogExample/APPClient_XLogExample.vcxproj b/XEngine_APPClient/APPClient_XLogExample/APPClient_XLogExample.vcxproj index d48e8f9f..14d4b572 100644 --- a/XEngine_APPClient/APPClient_XLogExample/APPClient_XLogExample.vcxproj +++ b/XEngine_APPClient/APPClient_XLogExample/APPClient_XLogExample.vcxproj @@ -71,11 +71,11 @@ - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib64);../../XEngine_Source/x64/Debug;$(LibraryPath) - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib32);../../XEngine_Source/Debug;$(LibraryPath) diff --git a/XEngine_APPClient/APPClient_ZIPCodeExample/APPClient_ZIPCodeExample.vcxproj b/XEngine_APPClient/APPClient_ZIPCodeExample/APPClient_ZIPCodeExample.vcxproj index 292515d3..d67aef62 100644 --- a/XEngine_APPClient/APPClient_ZIPCodeExample/APPClient_ZIPCodeExample.vcxproj +++ b/XEngine_APPClient/APPClient_ZIPCodeExample/APPClient_ZIPCodeExample.vcxproj @@ -71,11 +71,11 @@ - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib64);../../XEngine_Source/x64/Debug;$(LibraryPath) - $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib32);../../XEngine_Source/Debug;$(LibraryPath) diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx index 712e0a64..e4cc59ab 100644 Binary files a/XEngine_Docment/Docment_en.docx and b/XEngine_Docment/Docment_en.docx differ diff --git a/XEngine_Docment/Docment_zh.docx b/XEngine_Docment/Docment_zh.docx index c80404bd..c50abeac 100644 Binary files a/XEngine_Docment/Docment_zh.docx and b/XEngine_Docment/Docment_zh.docx differ diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json index 0d04c3a9..2c14e611 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -1,82 +1,87 @@ { - "tszIPAddr":"192.168.1.8", - "bDeamon":false, - "bShowWnd":true, - "nHttpPort":5501, - "nRFCPort":5502, - "XMax":{ - "nMaxClient":10000, - "nMaxQueue":10000, - "nIOThread":2, - "nHttpThread":2 + "tszIPAddr": "192.168.1.8", + "bDeamon": false, + "bShowWnd": true, + "nHttpPort": 5501, + "nRFCPort": 5502, + "nNTPPort": 0, + "nDNSPort": 0, + "XMax": { + "nMaxClient": 10000, + "nMaxQueue": 10000, + "nIOThread": 2, + "nHttpThread": 2 }, - "XTime":{ - "nTimeCheck":3, - "nHttpTimeOut":5, - "nP2PTimeOut":60 + "XTime": { + "nTimeCheck": 3, + "nHttpTimeOut": 5, + "nP2PTimeOut": 60 }, - "XLog":{ - "tszAPIFile":"./XEngine_Log/XEngine_HttpApp.Log", - "tszServiceFile":"./XEngine_Log/XEngine_ServiceApp.Log", - "MaxSize":1024000, - "MaxCount":10, - "LogLeave":17, - "LogType":32 + "XLog": { + "tszAPIFile": "./XEngine_Log/XEngine_HttpApp.Log", + "tszServiceFile": "./XEngine_Log/XEngine_ServiceApp.Log", + "MaxSize": 1024000, + "MaxCount": 10, + "LogLeave": 17, + "LogType": 32 }, - "XSql":{ - "bEnable":false, - "SQLAddr":"10.0.2.6", - "SQLPort":3306, - "SQLUser":"root", - "SQLPass":"123123aa" + "XSql": { + "bEnable": false, + "SQLAddr": "10.0.2.6", + "SQLPort": 3306, + "SQLUser": "root", + "SQLPass": "123123aa" }, - "XApi":{ - "tszWeatherUrl":"https://restapi.amap.com/v3/weather/weatherInfo?city=%s&key=3239fc302d6480ce49973f4d1c59e5d8", - "tszBankUrl":"https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?cardNo=%s&cardBinCheck=true", - "tszOilUrl":"https://www.iamwawa.cn/oilprice/api?area=%s", - "st_TranslationInfo":{ - "url":"https://fanyi-api.baidu.com/api/trans/vip/translate", - "appid":"20231228001924304", - "key":"udXGjpmNVeQHml1FjT8E" + "XApi": { + "tszWeatherUrl": "https://restapi.amap.com/v3/weather/weatherInfo?city=%s&key=3239fc302d6480ce49973f4d1c59e5d8", + "tszBankUrl": "https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?cardNo=%s&cardBinCheck=true", + "tszOilUrl": "https://www.iamwawa.cn/oilprice/api?area=%s", + "st_TranslationInfo": { + "url": "https://fanyi-api.baidu.com/api/trans/vip/translate", + "appid": "20231228001924304", + "key": "udXGjpmNVeQHml1FjT8E" } }, - "XPlugin":{ - "bEnable":true, - "tszLibPlugin":"./XEngine_LibPlugin", - "tszLuaPlugin":"./XEngine_LuaPlugin" + "XPlugin": { + "bEnable": true, + "tszLibPlugin": "./XEngine_LibPlugin", + "tszLuaPlugin": "./XEngine_LuaPlugin" }, - "XConfig":{ - "st_ConfigQRCode":{ - "tszModelDetect":"./XEngine_Config/qrmodel/detect.caffemodel", - "tszModelSr":"./XEngine_Config/qrmodel/sr.caffemodel", - "tszProtoDetect":"./XEngine_Config/qrmodel/detect.prototxt", - "tszProtoSr":"./XEngine_Config/qrmodel/sr.prototxt" + "XConfig": { + "st_ConfigQRCode": { + "tszModelDetect": "./XEngine_Config/qrmodel/detect.caffemodel", + "tszModelSr": "./XEngine_Config/qrmodel/sr.caffemodel", + "tszProtoDetect": "./XEngine_Config/qrmodel/detect.prototxt", + "tszProtoSr": "./XEngine_Config/qrmodel/sr.prototxt" }, - "tszConfigDeamon":"./XEngine_Config/XEngine_DeamonConfig.json", - "tszConfigHTTPMime":"./XEngine_Config/HttpMime.types", - "tszConfigHTTPCode":"./XEngine_Config/HttpCode.types" + "tszConfigDeamon": "./XEngine_Config/XEngine_DeamonConfig.json", + "tszConfigHTTPMime": "./XEngine_Config/HttpMime.types", + "tszConfigHTTPCode": "./XEngine_Config/HttpCode.types" }, - "XShortLink":{ - "tszHostUrl":"url.xyry.org", - "nHTTPCode":301 + "XShortLink": { + "tszHostUrl": "url.xyry.org", + "nHTTPCode": 301 }, - "XVerification":{ - "tszUserName":"xyry", - "tszUserPass":"11", - "st_VerSwitch":{ - "bBackService":false, - "bDeamon":false + "XVerification": { + "tszUserName": "xyry", + "tszUserPass": "11", + "tszAPIAuth": "", + "nVType": 1, + "bEnable": false, + "st_VerSwitch": { + "bBackService": false, + "bDeamon": false } }, - "XReport":{ - "bEnable":true, - "tszAPIUrl":"http://app.xyry.org:5501/api?function=machine", - "tszServiceName":"XEngine_APIService" + "XReport": { + "bEnable": true, + "tszAPIUrl": "http://app.xyry.org:5501/api?function=machine", + "tszServiceName": "XEngine_APIService" }, - "XImageText":{ - "bEnable":true, - "tszImagePath":"./XEngine_Config/tessdata", - "tszImageLanguage":"chi_sim+eng" + "XImageText": { + "bEnable": true, + "tszImagePath": "./XEngine_Config/tessdata", + "tszImageLanguage": "chi_sim+eng" }, "XAPIModule": { "bEnable": true, diff --git a/XEngine_Release/XEngine_Config/XEngine_DNSConfig.json b/XEngine_Release/XEngine_Config/XEngine_DNSConfig.json new file mode 100644 index 00000000..9f38261b --- /dev/null +++ b/XEngine_Release/XEngine_Config/XEngine_DNSConfig.json @@ -0,0 +1,44 @@ +{ + "DNSServer": [ + "8.8.8.8", + "8.8.4.4" + ], + "DNSList": [ + { + "bEnable": true, + "DNSName": "www.libxengine.com", + "DNSAddr": [ + { + "Type": 5, + "TTL": 30, + "Name": "www.libxengine.com", + "Addr": "www.xyry.org" + }, + { + "Type": 1, + "TTL": 60, + "Name": "www.xyry.org", + "Addr": "118.25.14.242" + }, + { + "Type": 1, + "TTL": 120, + "Name": "www.libxengine.com", + "Addr": "104.21.4.128" + } + ] + }, + { + "bEnable": true, + "DNSName": "www.xyry.org", + "DNSAddr": [ + { + "Type": 1, + "TTL": 120, + "Name": "www.xyry.org", + "Addr": "104.21.4.128" + } + ] + } + ] +} \ No newline at end of file diff --git a/XEngine_Release/XEngine_Config/XEngine_VersionConfig.json b/XEngine_Release/XEngine_Config/XEngine_VersionConfig.json index 27f17a21..626d3e84 100644 --- a/XEngine_Release/XEngine_Config/XEngine_VersionConfig.json +++ b/XEngine_Release/XEngine_Config/XEngine_VersionConfig.json @@ -1,5 +1,6 @@ { "XVer":[ + "3.13.0.1001 Build20251015", "3.12.0.1001 Build20250703", "3.11.0.1001 Build20250506", "3.10.0.1001 Build20250416", diff --git a/XEngine_Release/copydb.bat b/XEngine_Release/copydb.bat index fb1a38da..ee46329b 100644 --- a/XEngine_Release/copydb.bat +++ b/XEngine_Release/copydb.bat @@ -1,4 +1,4 @@ copy /y "..\XEngine_Source\XEngine_DependLibrary\XEngine_IPMacData\XEngine_DBFile\GeoLite2-ASN.mmdb" "./XEngine_DBFile" copy /y "..\XEngine_Source\XEngine_DependLibrary\XEngine_IPMacData\XEngine_DBFile\GeoLite2-City.mmdb" "./XEngine_DBFile" copy /y "..\XEngine_Source\XEngine_DependLibrary\XEngine_IPMacData\XEngine_DBFile\macaddr.xdb" "./XEngine_DBFile" -copy /y "..\XEngine_Source\XEngine_DependLibrary\XEngine_PhoneData\Data\phone_utf.dat" "./XEngine_DBFile/phone.xdb" \ No newline at end of file +copy /y "..\XEngine_Source\XEngine_DependLibrary\XEngine_PhoneData\XEngine_Release\phone_utf.dat" "./XEngine_DBFile/phone.xdb" \ No newline at end of file diff --git a/XEngine_Release/copydb.sh b/XEngine_Release/copydb.sh index 2e0b4172..4d03b14d 100644 --- a/XEngine_Release/copydb.sh +++ b/XEngine_Release/copydb.sh @@ -3,4 +3,4 @@ cp -f ../XEngine_Source/XEngine_DependLibrary/XEngine_IPMacData/XEngine_DBFile/GeoLite2-ASN.mmdb ./XEngine_DBFile/ cp -f ../XEngine_Source/XEngine_DependLibrary/XEngine_IPMacData/XEngine_DBFile/GeoLite2-City.mmdb ./XEngine_DBFile/ cp -f ../XEngine_Source/XEngine_DependLibrary/XEngine_IPMacData/XEngine_DBFile/macaddr.xdb ./XEngine_DBFile/ -cp -f ../XEngine_Source/XEngine_DependLibrary/XEngine_PhoneData/Data/phone_utf.dat ./XEngine_DBFile/phone.xdb \ No newline at end of file +cp -f ../XEngine_Source/XEngine_DependLibrary/XEngine_PhoneData/XEngine_Release/phone_utf.dat ./XEngine_DBFile/phone.xdb \ No newline at end of file diff --git a/XEngine_Source/Makefile b/XEngine_Source/Makefile index 0b3328c7..57c3811e 100644 --- a/XEngine_Source/Makefile +++ b/XEngine_Source/Makefile @@ -19,8 +19,8 @@ PLUGIN_MODULE_METER = ./XEngine_PluginModule/ModulePlugin_Meter THIRDPART_MODULE_JSONCPP = ./XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp THIRDPART_MODULE_REPORT = ./XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/XEngine_InfoReport - -APIMODULE_PHONE_PATH = ./XEngine_DependLibrary/XEngine_PhoneData/Source/C/XEngine_APIModulePhone +THIRDPART_MODULE_VERIFICATION = ./XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/XEngine_Verification +APIMODULE_PHONE_PATH = ./XEngine_DependLibrary/XEngine_PhoneData/XEngine_Source/XEngine_APIModulePhone APIMODULE_IPMAC_PATH = ./XEngine_DependLibrary/XEngine_IPMacData/XEngine_Source/XEngine_APIModuleIPMac APP_HTTP_PATH = ./XEngine_ServiceApp/XEngine_HttpApp @@ -31,7 +31,7 @@ else ifeq ($(PLATFORM),mac) FILEEXT = dylib endif -XENGINE_MODULES = libjsoncpp.so libXEngine_InfoReport.so \ +XENGINE_MODULES = libjsoncpp.so libXEngine_InfoReport.so libXEngine_Verification.so \ libXEngine_ModuleConfigure.so libXEngine_ModuleDatabase.so libXEngine_ModuleProtocol.so libXEngine_ModuleSystem.so libXEngine_ModuleHelp.so libXEngine_ModulePlugin.so \ libModulePlugin_Zodiac.so libModulePlugin_Password.so libModulePlugin_Timezone.so libModulePlugin_BMIndex.so libModulePlugin_Meter.so \ libXEngine_APIModulePhone.so libXEngine_APIModuleIPMac.so \ @@ -52,6 +52,12 @@ ifeq ($(FLAGS), InstallAll) else make -C $(THIRDPART_MODULE_REPORT) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) endif +libXEngine_Verification.so: +ifeq ($(FLAGS), InstallAll) + cp $(THIRDPART_MODULE_VERIFICATION)/libXEngine_Verification.$(FILEEXT) ../XEngine_Release/ +else + make -C $(THIRDPART_MODULE_VERIFICATION) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) +endif libXEngine_APIModulePhone.so: ifeq ($(FLAGS), InstallAll) cp $(APIMODULE_PHONE_PATH)/libXEngine_APIModulePhone.$(FILEEXT) ../XEngine_Release/ diff --git a/XEngine_Source/VSCopy_Arm64.bat b/XEngine_Source/VSCopy_Arm64.bat index ef407e92..0287ba38 100644 --- a/XEngine_Source/VSCopy_Arm64.bat +++ b/XEngine_Source/VSCopy_Arm64.bat @@ -6,7 +6,6 @@ copy /y "%XEngine_LibArm64%\XEngine_Core\XEngine_ManagePool.dll" "./" copy /y "%XEngine_LibArm64%\XEngine_Core\XEngine_Cryption.dll" "./" copy /y "%XEngine_LibArm64%\XEngine_Client\XClient_APIHelp.dll" "./" -copy /y "%XEngine_LibArm64%\XEngine_Client\XClient_Stream.dll" "./" copy /y "%XEngine_LibArm64%\XEngine_Client\XClient_Socket.dll" "./" copy /y "%XEngine_LibArm64%\XEngine_NetHelp\NetHelp_XSocket.dll" "./" @@ -20,11 +19,14 @@ copy /y "%XEngine_LibArm64%\XEngine_HelpComponents\HelpComponents_XLog.dll" "./" copy /y "%XEngine_LibArm64%\XEngine_RfcComponents\RfcComponents_HttpProtocol.dll" "./" copy /y "%XEngine_LibArm64%\XEngine_RfcComponents\RfcComponents_NatProtocol.dll" "./" copy /y "%XEngine_LibArm64%\XEngine_RfcComponents\RfcComponents_NTPProtocol.dll" "./" +copy /y "%XEngine_LibArm64%\XEngine_RfcComponents\RfcComponents_DNSProtocol.dll" "./" copy /y "%XEngine_LibArm64%\XEngine_AVCodec\XEngine_AVHelp.dll" "./" copy /y "%XEngine_LibArm64%\XEngine_AVCodec\XEngine_VideoCodec.dll" "./" copy /y "%XEngine_LibArm64%\XEngine_AVCodec\XEngine_AudioCodec.dll" "./" copy /y "%XEngine_LibArm64%\XEngine_AVCodec\XEngine_AVCollect.dll" "./" +copy /y "%XEngine_LibArm64%\XEngine_AVCodec\XEngine_AVFormat.dll" "./" +copy /y "%XEngine_LibArm64%\XEngine_AVCodec\XEngine_AVFilter.dll" "./" copy /y "%XEngine_LibArm64%\XEngine_AVCodec\avcodec-61.dll" "./" copy /y "%XEngine_LibArm64%\XEngine_AVCodec\avdevice-61.dll" "./" diff --git a/XEngine_Source/VSCopy_Debug.bat b/XEngine_Source/VSCopy_Debug.bat index 46f05134..3761a186 100644 --- a/XEngine_Source/VSCopy_Debug.bat +++ b/XEngine_Source/VSCopy_Debug.bat @@ -6,7 +6,6 @@ copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_ManagePool.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_Cryption.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\XClient_APIHelp.dll" "./" -copy /y "D:\XEngine\XEngine_SourceCode\Debug\XClient_Stream.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\XClient_Socket.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\NetHelp_XSocket.dll" "./" @@ -20,11 +19,14 @@ copy /y "D:\XEngine\XEngine_SourceCode\Debug\HelpComponents_XLog.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\RfcComponents_HttpProtocol.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\RfcComponents_NatProtocol.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\RfcComponents_NTPProtocol.dll" "./" +copy /y "D:\XEngine\XEngine_SourceCode\Debug\RfcComponents_DNSProtocol.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_AVHelp.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_VideoCodec.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_AudioCodec.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_AVCollect.dll" "./" +copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_AVFormat.dll" "./" +copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_AVFilter.dll" "./" copy /y "%XEngine_Lib32%\XEngine_AVCodec\avcodec-61.dll" "./" copy /y "%XEngine_Lib32%\XEngine_AVCodec\avdevice-61.dll" "./" diff --git a/XEngine_Source/VSCopy_x64.bat b/XEngine_Source/VSCopy_x64.bat index c792bd70..171b65b7 100644 --- a/XEngine_Source/VSCopy_x64.bat +++ b/XEngine_Source/VSCopy_x64.bat @@ -6,7 +6,6 @@ copy /y "%XEngine_Lib64%\XEngine_Core\XEngine_ManagePool.dll" "./" copy /y "%XEngine_Lib64%\XEngine_Core\XEngine_Cryption.dll" "./" copy /y "%XEngine_Lib64%\XEngine_Client\XClient_APIHelp.dll" "./" -copy /y "%XEngine_Lib64%\XEngine_Client\XClient_Stream.dll" "./" copy /y "%XEngine_Lib64%\XEngine_Client\XClient_Socket.dll" "./" copy /y "%XEngine_Lib64%\XEngine_NetHelp\NetHelp_XSocket.dll" "./" @@ -20,11 +19,14 @@ copy /y "%XEngine_Lib64%\XEngine_HelpComponents\HelpComponents_XLog.dll" "./" copy /y "%XEngine_Lib64%\XEngine_RfcComponents\RfcComponents_HttpProtocol.dll" "./" copy /y "%XEngine_Lib64%\XEngine_RfcComponents\RfcComponents_NatProtocol.dll" "./" copy /y "%XEngine_Lib64%\XEngine_RfcComponents\RfcComponents_NTPProtocol.dll" "./" +copy /y "%XEngine_Lib64%\XEngine_RfcComponents\RfcComponents_DNSProtocol.dll" "./" copy /y "%XEngine_Lib64%\XEngine_AVCodec\XEngine_AVHelp.dll" "./" copy /y "%XEngine_Lib64%\XEngine_AVCodec\XEngine_VideoCodec.dll" "./" copy /y "%XEngine_Lib64%\XEngine_AVCodec\XEngine_AudioCodec.dll" "./" copy /y "%XEngine_Lib64%\XEngine_AVCodec\XEngine_AVCollect.dll" "./" +copy /y "%XEngine_Lib64%\XEngine_AVCodec\XEngine_AVFormat.dll" "./" +copy /y "%XEngine_Lib64%\XEngine_AVCodec\XEngine_AVFilter.dll" "./" copy /y "%XEngine_Lib64%\XEngine_AVCodec\avcodec-61.dll" "./" copy /y "%XEngine_Lib64%\XEngine_AVCodec\avdevice-61.dll" "./" diff --git a/XEngine_Source/VSCopy_x86.bat b/XEngine_Source/VSCopy_x86.bat index 0c058628..8f4cc678 100644 --- a/XEngine_Source/VSCopy_x86.bat +++ b/XEngine_Source/VSCopy_x86.bat @@ -6,7 +6,6 @@ copy /y "%XEngine_Lib32%\XEngine_Core\XEngine_ManagePool.dll" "./" copy /y "%XEngine_Lib32%\XEngine_Core\XEngine_Cryption.dll" "./" copy /y "%XEngine_Lib32%\XEngine_Client\XClient_APIHelp.dll" "./" -copy /y "%XEngine_Lib32%\XEngine_Client\XClient_Stream.dll" "./" copy /y "%XEngine_Lib32%\XEngine_Client\XClient_Socket.dll" "./" copy /y "%XEngine_Lib32%\XEngine_NetHelp\NetHelp_XSocket.dll" "./" @@ -20,11 +19,14 @@ copy /y "%XEngine_Lib32%\XEngine_HelpComponents\HelpComponents_XLog.dll" "./" copy /y "%XEngine_Lib32%\XEngine_RfcComponents\RfcComponents_HttpProtocol.dll" "./" copy /y "%XEngine_Lib32%\XEngine_RfcComponents\RfcComponents_NatProtocol.dll" "./" copy /y "%XEngine_Lib32%\XEngine_RfcComponents\RfcComponents_NTPProtocol.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_RfcComponents\RfcComponents_DNSProtocol.dll" "./" copy /y "%XEngine_Lib32%\XEngine_AVCodec\XEngine_AVHelp.dll" "./" copy /y "%XEngine_Lib32%\XEngine_AVCodec\XEngine_VideoCodec.dll" "./" copy /y "%XEngine_Lib32%\XEngine_AVCodec\XEngine_AudioCodec.dll" "./" copy /y "%XEngine_Lib32%\XEngine_AVCodec\XEngine_AVCollect.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_AVCodec\XEngine_AVFormat.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_AVCodec\XEngine_AVFilter.dll" "./" copy /y "%XEngine_Lib32%\XEngine_AVCodec\avcodec-61.dll" "./" copy /y "%XEngine_Lib32%\XEngine_AVCodec\avdevice-61.dll" "./" diff --git a/XEngine_Source/XEngine.sln b/XEngine_Source/XEngine.sln index c2166ada..a4746dd5 100644 --- a/XEngine_Source/XEngine.sln +++ b/XEngine_Source/XEngine.sln @@ -19,20 +19,21 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_HttpApp", "XEngine_ServiceApp\XEngine_HttpApp\XEngine_HttpApp.vcxproj", "{E756B7D2-D40D-4106-9C14-1D90F20A712E}" ProjectSection(ProjectDependencies) = postProject {140AD4A9-4918-4345-B352-507C345AEBE0} = {140AD4A9-4918-4345-B352-507C345AEBE0} - {F6520D2C-BB8E-45BB-964B-F5D6A4318A89} = {F6520D2C-BB8E-45BB-964B-F5D6A4318A89} - {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} = {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} {201B6D13-82A7-49E9-9736-D6B3BFE05B30} = {201B6D13-82A7-49E9-9736-D6B3BFE05B30} - {FFAC032D-4F8C-4C70-AF36-D79685A6961F} = {FFAC032D-4F8C-4C70-AF36-D79685A6961F} {32BB166A-3D3D-45EF-8BED-2E0471274159} = {32BB166A-3D3D-45EF-8BED-2E0471274159} {37B8E91F-EC52-41F0-B21D-441D4270C05F} = {37B8E91F-EC52-41F0-B21D-441D4270C05F} {6C935BE1-77E3-4719-A7A6-C76ABAFEE010} = {6C935BE1-77E3-4719-A7A6-C76ABAFEE010} {6D0FCB40-D544-4AB2-A239-2FEBC4B98F6D} = {6D0FCB40-D544-4AB2-A239-2FEBC4B98F6D} {6F111577-DAF8-4294-B516-0077C22D7613} = {6F111577-DAF8-4294-B516-0077C22D7613} - {A13B72E7-FC40-4A27-81C3-26DF3C8F4C0A} = {A13B72E7-FC40-4A27-81C3-26DF3C8F4C0A} {92F971AB-CAC9-4D9B-A9CA-AFD9CA17E505} = {92F971AB-CAC9-4D9B-A9CA-AFD9CA17E505} + {A13B72E7-FC40-4A27-81C3-26DF3C8F4C0A} = {A13B72E7-FC40-4A27-81C3-26DF3C8F4C0A} + {A8E43EC0-698A-4807-8A61-B2BE5FAB7256} = {A8E43EC0-698A-4807-8A61-B2BE5FAB7256} {BBC4B2B4-1143-45DF-8890-47CE26A61D0E} = {BBC4B2B4-1143-45DF-8890-47CE26A61D0E} {CB443280-E283-44CD-B956-52C404A51DB6} = {CB443280-E283-44CD-B956-52C404A51DB6} + {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} = {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} {F54F152C-594F-4465-A44E-2DB915B39760} = {F54F152C-594F-4465-A44E-2DB915B39760} + {F6520D2C-BB8E-45BB-964B-F5D6A4318A89} = {F6520D2C-BB8E-45BB-964B-F5D6A4318A89} + {FFAC032D-4F8C-4C70-AF36-D79685A6961F} = {FFAC032D-4F8C-4C70-AF36-D79685A6961F} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_ModuleDatabase", "XEngine_ModuleDatabase\XEngine_ModuleDatabase.vcxproj", "{140AD4A9-4918-4345-B352-507C345AEBE0}" @@ -78,21 +79,21 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_APIServiceApp", "XEngine_ServiceApp\XEngine_APIServiceApp\XEngine_APIServiceApp.vcxproj", "{096BEF37-4AF6-490D-868B-6306D3E251E7}" ProjectSection(ProjectDependencies) = postProject {140AD4A9-4918-4345-B352-507C345AEBE0} = {140AD4A9-4918-4345-B352-507C345AEBE0} - {F6520D2C-BB8E-45BB-964B-F5D6A4318A89} = {F6520D2C-BB8E-45BB-964B-F5D6A4318A89} - {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} = {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} {201B6D13-82A7-49E9-9736-D6B3BFE05B30} = {201B6D13-82A7-49E9-9736-D6B3BFE05B30} - {FFAC032D-4F8C-4C70-AF36-D79685A6961F} = {FFAC032D-4F8C-4C70-AF36-D79685A6961F} {32BB166A-3D3D-45EF-8BED-2E0471274159} = {32BB166A-3D3D-45EF-8BED-2E0471274159} {37B8E91F-EC52-41F0-B21D-441D4270C05F} = {37B8E91F-EC52-41F0-B21D-441D4270C05F} {6C935BE1-77E3-4719-A7A6-C76ABAFEE010} = {6C935BE1-77E3-4719-A7A6-C76ABAFEE010} {6D0FCB40-D544-4AB2-A239-2FEBC4B98F6D} = {6D0FCB40-D544-4AB2-A239-2FEBC4B98F6D} {6F111577-DAF8-4294-B516-0077C22D7613} = {6F111577-DAF8-4294-B516-0077C22D7613} - {A13B72E7-FC40-4A27-81C3-26DF3C8F4C0A} = {A13B72E7-FC40-4A27-81C3-26DF3C8F4C0A} {92F971AB-CAC9-4D9B-A9CA-AFD9CA17E505} = {92F971AB-CAC9-4D9B-A9CA-AFD9CA17E505} + {A13B72E7-FC40-4A27-81C3-26DF3C8F4C0A} = {A13B72E7-FC40-4A27-81C3-26DF3C8F4C0A} {BBC4B2B4-1143-45DF-8890-47CE26A61D0E} = {BBC4B2B4-1143-45DF-8890-47CE26A61D0E} {CB443280-E283-44CD-B956-52C404A51DB6} = {CB443280-E283-44CD-B956-52C404A51DB6} {E756B7D2-D40D-4106-9C14-1D90F20A712E} = {E756B7D2-D40D-4106-9C14-1D90F20A712E} + {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} = {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} {F54F152C-594F-4465-A44E-2DB915B39760} = {F54F152C-594F-4465-A44E-2DB915B39760} + {F6520D2C-BB8E-45BB-964B-F5D6A4318A89} = {F6520D2C-BB8E-45BB-964B-F5D6A4318A89} + {FFAC032D-4F8C-4C70-AF36-D79685A6961F} = {FFAC032D-4F8C-4C70-AF36-D79685A6961F} EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "XEngine_DependLibrary", "XEngine_DependLibrary", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" @@ -109,10 +110,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_APIModuleIPMac", "X {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} = {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_APIModulePhone", "XEngine_DependLibrary\XEngine_PhoneData\Source\C\XEngine_APIModulePhone\XEngine_APIModulePhone.vcxproj", "{A13B72E7-FC40-4A27-81C3-26DF3C8F4C0A}" - ProjectSection(ProjectDependencies) = postProject - {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} = {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} - EndProjectSection +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_APIModulePhone", "XEngine_DependLibrary\XEngine_PhoneData\XEngine_Source\XEngine_APIModulePhone\XEngine_APIModulePhone.vcxproj", "{A13B72E7-FC40-4A27-81C3-26DF3C8F4C0A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_Verification", "XEngine_DependLibrary\XEngine_OPenSource\XEngine_Module\XEngine_Verification\XEngine_Verification.vcxproj", "{A8E43EC0-698A-4807-8A61-B2BE5FAB7256}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -328,6 +328,18 @@ Global {A13B72E7-FC40-4A27-81C3-26DF3C8F4C0A}.Release|x64.Build.0 = Release|x64 {A13B72E7-FC40-4A27-81C3-26DF3C8F4C0A}.Release|x86.ActiveCfg = Release|Win32 {A13B72E7-FC40-4A27-81C3-26DF3C8F4C0A}.Release|x86.Build.0 = Release|Win32 + {A8E43EC0-698A-4807-8A61-B2BE5FAB7256}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {A8E43EC0-698A-4807-8A61-B2BE5FAB7256}.Debug|ARM64.Build.0 = Debug|ARM64 + {A8E43EC0-698A-4807-8A61-B2BE5FAB7256}.Debug|x64.ActiveCfg = Debug|x64 + {A8E43EC0-698A-4807-8A61-B2BE5FAB7256}.Debug|x64.Build.0 = Debug|x64 + {A8E43EC0-698A-4807-8A61-B2BE5FAB7256}.Debug|x86.ActiveCfg = Debug|Win32 + {A8E43EC0-698A-4807-8A61-B2BE5FAB7256}.Debug|x86.Build.0 = Debug|Win32 + {A8E43EC0-698A-4807-8A61-B2BE5FAB7256}.Release|ARM64.ActiveCfg = Release|ARM64 + {A8E43EC0-698A-4807-8A61-B2BE5FAB7256}.Release|ARM64.Build.0 = Release|ARM64 + {A8E43EC0-698A-4807-8A61-B2BE5FAB7256}.Release|x64.ActiveCfg = Release|x64 + {A8E43EC0-698A-4807-8A61-B2BE5FAB7256}.Release|x64.Build.0 = Release|x64 + {A8E43EC0-698A-4807-8A61-B2BE5FAB7256}.Release|x86.ActiveCfg = Release|Win32 + {A8E43EC0-698A-4807-8A61-B2BE5FAB7256}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -344,6 +356,7 @@ Global {F6520D2C-BB8E-45BB-964B-F5D6A4318A89} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {FFAC032D-4F8C-4C70-AF36-D79685A6961F} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {A13B72E7-FC40-4A27-81C3-26DF3C8F4C0A} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + {A8E43EC0-698A-4807-8A61-B2BE5FAB7256} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {9B202F91-A601-429E-BB0F-880DDEE096FE} diff --git a/XEngine_Source/XEngine_DependLibrary/XEngine_IPMacData b/XEngine_Source/XEngine_DependLibrary/XEngine_IPMacData index a6449e79..4e6e5aab 160000 --- a/XEngine_Source/XEngine_DependLibrary/XEngine_IPMacData +++ b/XEngine_Source/XEngine_DependLibrary/XEngine_IPMacData @@ -1 +1 @@ -Subproject commit a6449e797a2ec10e9e4a3d40c1f9f27487f7dd02 +Subproject commit 4e6e5aabee8b8c42a6f148d8e50feb44fb6f7b5f diff --git a/XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource b/XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource index 2b479668..da4c1c30 160000 --- a/XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource +++ b/XEngine_Source/XEngine_DependLibrary/XEngine_OPenSource @@ -1 +1 @@ -Subproject commit 2b4796680134656c5144b3665aac9ec65ea6292a +Subproject commit da4c1c30f9c7667e86b8e816560306b0882931a7 diff --git a/XEngine_Source/XEngine_DependLibrary/XEngine_PhoneData b/XEngine_Source/XEngine_DependLibrary/XEngine_PhoneData index 2ffa9e34..ce3fd8d9 160000 --- a/XEngine_Source/XEngine_DependLibrary/XEngine_PhoneData +++ b/XEngine_Source/XEngine_DependLibrary/XEngine_PhoneData @@ -1 +1 @@ -Subproject commit 2ffa9e3416784d44e07ef77304f4d8cda1570748 +Subproject commit ce3fd8d987f79c89dbbb707771765de95bfd90ea diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h index 10ce8dea..124e075e 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h @@ -20,6 +20,8 @@ typedef struct bool bShowWnd; //是否显示窗口启动 int nHttpPort; //HTTP服务端口 int nRFCPort; //RFC标准服务端口 + int nNTPPort; //NTP服务端口 + int nDNSPort; //DNS服务端口 struct { int nMaxClient; //最大客户端个数 @@ -104,6 +106,9 @@ typedef struct { XCHAR tszUserName[XPATH_MAX]; XCHAR tszUserPass[XPATH_MAX]; + XCHAR tszAPIAuth[XPATH_MAX]; + int nVType; + bool bEnable; struct { bool bBackService; @@ -159,6 +164,26 @@ typedef struct list stl_ListDeamonApp; }XENGINE_DEAMONAPPLIST; ////////////////////////////////////////////////////////////////////////// +//DNS +typedef struct +{ + XCHAR tszDNSName[256]; //域名名称 + XCHAR tszDNSAddr[256]; //域名地址 + int nType; //DNS地址类型,域名,IP + int nTTL; //服务器的TTL +}XENGINE_DNSADDRINFO; +typedef struct +{ + bool bEnable; + XCHAR tszDNSName[256]; + list stl_ListDNSAddr; +}XENGINE_DNSDOMAIN; +typedef struct +{ + list stl_ListDNSServer; + list stl_ListDNSList; +}XENGINE_DNSINFO; +////////////////////////////////////////////////////////////////////////// // 导出函数定义 ////////////////////////////////////////////////////////////////////////// extern "C" XLONG ModuleConfigure_GetLastError(int* pInt_ErrorCode = NULL); @@ -221,4 +246,23 @@ extern "C" bool ModuleConfigure_Json_VersionFile(LPCXSTR lpszConfigFile, XENGINE 意思:是否成功 备注: *********************************************************************/ -extern "C" bool ModuleConfigure_Json_DeamonList(LPCXSTR lpszConfigFile, XENGINE_DEAMONAPPLIST* pSt_AppConfig); \ No newline at end of file +extern "C" bool ModuleConfigure_Json_DeamonList(LPCXSTR lpszConfigFile, XENGINE_DEAMONAPPLIST* pSt_AppConfig); +/******************************************************************** +函数名称:ModuleConfigure_Json_DNSFile +函数功能:读取JSON配置文件 + 参数.一:lpszConfigFile + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要读取的配置文件 + 参数.二:pSt_DNSList + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出DNS服务器列表 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ModuleConfigure_Json_DNSFile(LPCXSTR lpszConfigFile, XENGINE_DNSINFO* pSt_DNSList); \ 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 301ddc36..8f7d0fbb 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -77,6 +77,8 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE pSt_ServerConfig->bShowWnd = st_JsonRoot["bShowWnd"].asBool(); pSt_ServerConfig->nHttpPort = st_JsonRoot["nHttpPort"].asInt(); pSt_ServerConfig->nRFCPort = st_JsonRoot["nRFCPort"].asInt(); + pSt_ServerConfig->nNTPPort = st_JsonRoot["nNTPPort"].asInt(); + pSt_ServerConfig->nDNSPort = st_JsonRoot["nDNSPort"].asInt(); if (st_JsonRoot["XMax"].empty() || (4 != st_JsonRoot["XMax"].size())) { @@ -195,13 +197,17 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE _tcsxcpy(pSt_ServerConfig->st_XImageText.tszImagePath, st_JsonXImageText["tszImagePath"].asCString()); _tcsxcpy(pSt_ServerConfig->st_XImageText.tszImageLanguage, st_JsonXImageText["tszImageLanguage"].asCString()); - if (st_JsonRoot["XVerification"].empty() || (3 != st_JsonRoot["XVerification"].size())) + if (st_JsonRoot["XVerification"].empty() || (6 != st_JsonRoot["XVerification"].size())) { Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XVERICATION; return false; } Json::Value st_JsonXVerifcation = st_JsonRoot["XVerification"]; + + pSt_ServerConfig->st_XVerifcation.bEnable = st_JsonXVerifcation["bEnable"].asBool(); + pSt_ServerConfig->st_XVerifcation.nVType = st_JsonXVerifcation["nVType"].asInt(); + _tcsxcpy(pSt_ServerConfig->st_XVerifcation.tszAPIAuth, st_JsonXVerifcation["tszAPIAuth"].asCString()); _tcsxcpy(pSt_ServerConfig->st_XVerifcation.tszUserName, st_JsonXVerifcation["tszUserName"].asCString()); _tcsxcpy(pSt_ServerConfig->st_XVerifcation.tszUserPass, st_JsonXVerifcation["tszUserPass"].asCString()); @@ -372,4 +378,80 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_DeamonList(LPCXSTR lpszConfigFi pSt_AppConfig->stl_ListDeamonApp.push_back(st_APPInfo); } return true; +} +/******************************************************************** +函数名称:ModuleConfigure_Json_DNSFile +函数功能:读取JSON配置文件 + 参数.一:lpszConfigFile + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要读取的配置文件 + 参数.二:pSt_DNSList + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出DNS服务器列表 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CModuleConfigure_Json::ModuleConfigure_Json_DNSFile(LPCXSTR lpszConfigFile, XENGINE_DNSINFO* pSt_DNSList) +{ + Config_IsErrorOccur = false; + + if ((NULL == lpszConfigFile) || (NULL == pSt_DNSList)) + { + Config_IsErrorOccur = true; + Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_PARAMENT; + return false; + } + JSONCPP_STRING st_JsonError; + Json::Value st_JsonRoot; + Json::CharReaderBuilder st_JsonBuilder; + FILE* pSt_File = fopen(lpszConfigFile, "rb"); + if (NULL == pSt_File) + { + Config_IsErrorOccur = true; + Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_OPENFILE; + return false; + } + XCHAR tszMsgBuffer[8192] = {}; + size_t nRet = fread(tszMsgBuffer, 1, sizeof(tszMsgBuffer), pSt_File); + fclose(pSt_File); + std::unique_ptr const pSt_JsonReader(st_JsonBuilder.newCharReader()); + if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nRet, &st_JsonRoot, &st_JsonError)) + { + Config_IsErrorOccur = true; + Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_PARSE; + return false; + } + Json::Value st_JsonServer = st_JsonRoot["DNSServer"]; + for (unsigned int i = 0; i < st_JsonRoot["DNSServer"].size(); i++) + { + pSt_DNSList->stl_ListDNSServer.push_back(st_JsonServer[i].asCString()); + } + Json::Value st_JsonList = st_JsonRoot["DNSList"]; + for (unsigned int i = 0; i < st_JsonRoot["DNSList"].size(); i++) + { + XENGINE_DNSDOMAIN st_DNSDomain = {}; + + st_DNSDomain.bEnable = st_JsonList[i]["bEnable"].asBool(); + _tcsxcpy(st_DNSDomain.tszDNSName, st_JsonList[i]["DNSName"].asCString()); + + Json::Value st_JsonAddr = st_JsonList[i]["DNSAddr"]; + for (unsigned int j = 0; j < st_JsonList[i]["DNSAddr"].size(); j++) + { + XENGINE_DNSADDRINFO st_DNSAddr = {}; + st_DNSAddr.nType = st_JsonAddr[j]["Type"].asInt(); + st_DNSAddr.nTTL = st_JsonAddr[j]["TTL"].asInt(); + _tcsxcpy(st_DNSAddr.tszDNSName, st_JsonAddr[j]["Name"].asCString()); + _tcsxcpy(st_DNSAddr.tszDNSAddr, st_JsonAddr[j]["Addr"].asCString()); + + st_DNSDomain.stl_ListDNSAddr.push_back(st_DNSAddr); + } + pSt_DNSList->stl_ListDNSList.push_back(st_DNSDomain); + } + return true; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h index 3a5f8478..bf977b64 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h @@ -20,6 +20,7 @@ class CModuleConfigure_Json bool ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XENGINE_SERVICECONFIG* pSt_ServerConfig); bool ModuleConfigure_Json_VersionFile(LPCXSTR lpszConfigFile, XENGINE_SERVICECONFIG* pSt_ServerConfig); bool ModuleConfigure_Json_DeamonList(LPCXSTR lpszConfigFile, XENGINE_DEAMONAPPLIST* pSt_AppConfig); + bool ModuleConfigure_Json_DNSFile(LPCXSTR lpszConfigFile, XENGINE_DNSINFO* pSt_DNSList); protected: private: }; \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.def b/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.def index 5332cde1..1d23465d 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.def +++ b/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.def @@ -5,4 +5,5 @@ EXPORTS ModuleConfigure_Json_File ModuleConfigure_Json_VersionFile - ModuleConfigure_Json_DeamonList \ No newline at end of file + ModuleConfigure_Json_DeamonList + ModuleConfigure_Json_DNSFile \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/pch.cpp b/XEngine_Source/XEngine_ModuleConfigure/pch.cpp index afb6ec4d..3be26e70 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/pch.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/pch.cpp @@ -40,4 +40,8 @@ extern "C" bool ModuleConfigure_Json_VersionFile(LPCXSTR lpszConfigFile, XENGINE extern "C" bool ModuleConfigure_Json_DeamonList(LPCXSTR lpszConfigFile, XENGINE_DEAMONAPPLIST * pSt_AppConfig) { return m_ConfigJson.ModuleConfigure_Json_DeamonList(lpszConfigFile, pSt_AppConfig); +} +extern "C" bool ModuleConfigure_Json_DNSFile(LPCXSTR lpszConfigFile, XENGINE_DNSINFO* pSt_DNSList) +{ + return m_ConfigJson.ModuleConfigure_Json_DNSFile(lpszConfigFile, pSt_DNSList); } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleHelp/Makefile b/XEngine_Source/XEngine_ModuleHelp/Makefile index 25f94c88..24ed96be 100644 --- a/XEngine_Source/XEngine_ModuleHelp/Makefile +++ b/XEngine_Source/XEngine_ModuleHelp/Makefile @@ -6,7 +6,7 @@ LOADHDR = -I ./ -I /usr/include/opencv4 -I /usr/local/include/opencv4 -I /usr/lo LOADSO = LIB = -lXEngine_BaseLib -lXClient_Socket -lNetHelp_APIAddr LIBEX = -OBJECTS = ModuleHelp_IDCard.o ModuleHelp_Language.o ModuleHelp_P2PClient.o ModuleHelp_Locker.o ModuleHelp_QRCode.o ModuleHelp_SocketTest.o ModuleHelp_ImageGet.o ModuleHelp_ImageSet.o pch.o +OBJECTS = ModuleHelp_IDCard.o ModuleHelp_Language.o ModuleHelp_P2PClient.o ModuleHelp_Locker.o ModuleHelp_QRCode.o ModuleHelp_SocketTest.o ModuleHelp_ImageGet.o ModuleHelp_ImageSet.o ModuleHelp_DNSAddr.o pch.o MACRO_QR_SUPPORT := $(shell gcc -E -dM ../XEngine_BuildSwitch.h | grep _XENGINE_BUILD_SWITCH_QRDECODEC | cut -d ' ' -f 3) MACRO_OPENCV_SUPPORT := $(shell gcc -E -dM ../XEngine_BuildSwitch.h | grep _XENGINE_BUILD_SWITCH_OPENCV | cut -d ' ' -f 3) @@ -78,6 +78,8 @@ ModuleHelp_ImageGet.o:./ModuleHelp_Image/ModuleHelp_ImageGet.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleHelp_Image/ModuleHelp_ImageGet.cpp ModuleHelp_ImageSet.o:./ModuleHelp_Image/ModuleHelp_ImageSet.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleHelp_Image/ModuleHelp_ImageSet.cpp +ModuleHelp_DNSAddr.o:./ModuleHelp_DNSAddr/ModuleHelp_DNSAddr.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleHelp_DNSAddr/ModuleHelp_DNSAddr.cpp pch.o:./pch.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./pch.cpp diff --git a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_DNSAddr/ModuleHelp_DNSAddr.cpp b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_DNSAddr/ModuleHelp_DNSAddr.cpp new file mode 100644 index 00000000..57bb1de2 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_DNSAddr/ModuleHelp_DNSAddr.cpp @@ -0,0 +1,193 @@ +#include "pch.h" +#include "ModuleHelp_DNSAddr.h" +/******************************************************************** +// Created: 2025/07/14 15:47:28 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleHelp\ModuleHelp_DNSAddr\ModuleHelp_DNSAddr.cpp +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleHelp\ModuleHelp_DNSAddr +// File Base: ModuleHelp_DNSAddr +// File Ext: cpp +// Project: XEngine +// Author: qyt +// Purpose: DNS解析处理帮助函数 +// History: +*********************************************************************/ +CModuleHelp_DNSAddr::CModuleHelp_DNSAddr() +{ +} +CModuleHelp_DNSAddr::~CModuleHelp_DNSAddr() +{ +} +////////////////////////////////////////////////////////////////////////// +// 公有函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:ModuleHelp_DNSAddr_Init +函数功能:初始化DNS数据表 + 参数.一:pSt_DNSInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要转换的列表 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CModuleHelp_DNSAddr::ModuleHelp_DNSAddr_Init(XENGINE_DNSINFO* pSt_DNSInfo) +{ + ModuleHelp_IsErrorOccur = false; + + if (NULL == pSt_DNSInfo) + { + ModuleHelp_IsErrorOccur = true; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_DNS_PARAMRT; + return false; + } + + for (auto stl_ListIterator = pSt_DNSInfo->stl_ListDNSServer.begin(); stl_ListIterator != pSt_DNSInfo->stl_ListDNSServer.end(); stl_ListIterator++) + { + stl_ListDNSServer.push_back(stl_ListIterator->c_str()); + } + for (auto stl_ListIterator = pSt_DNSInfo->stl_ListDNSList.begin(); stl_ListIterator != pSt_DNSInfo->stl_ListDNSList.end(); stl_ListIterator++) + { + if (stl_ListIterator->bEnable) + { + stl_MapDNSAddr.insert(make_pair(stl_ListIterator->tszDNSName, stl_ListIterator->stl_ListDNSAddr)); + } + } + return true; +} +/******************************************************************** +函数名称:ModuleHelp_DNSAddr_Destroy +函数功能:销毁DNS帮助函数库 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CModuleHelp_DNSAddr::ModuleHelp_DNSAddr_Destroy() +{ + ModuleHelp_IsErrorOccur = false; + + stl_ListDNSServer.clear(); + stl_MapDNSAddr.clear(); + return true; +} +/******************************************************************** +函数名称:ModuleHelp_DNSAddr_FindA +函数功能:A记录查找 + 参数.一:lpszDNSAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要查找的DNS地址 + 参数.二:pppSt_DNSList + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出查找到的列表 + 参数.三:pInt_ListCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出列表个数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CModuleHelp_DNSAddr::ModuleHelp_DNSAddr_FindA(LPCXSTR lpszDNSAddr, XENGINE_DNSADDRINFO*** pppSt_DNSList, int* pInt_ListCount) +{ + ModuleHelp_IsErrorOccur = false; + + auto stl_MapIterator = stl_MapDNSAddr.find(lpszDNSAddr); + if (stl_MapIterator == stl_MapDNSAddr.end()) + { + ModuleHelp_IsErrorOccur = true; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_DNS_NOTFOUND; + return false; + } + + *pInt_ListCount = stl_MapIterator->second.size(); + BaseLib_Memory_Malloc((XPPPMEM)pppSt_DNSList, *pInt_ListCount, sizeof(XENGINE_DNSADDRINFO)); + + auto stl_ListIterator = stl_MapIterator->second.begin(); + for (int i = 0; stl_ListIterator != stl_MapIterator->second.end(); stl_ListIterator++, i++) + { + *(*pppSt_DNSList)[i] = *stl_ListIterator; + } + + return true; +} +/******************************************************************** +函数名称:ModuleHelp_DNSAddr_FindPtr +函数功能:输出IP对应的域名 + 参数.一:lpszDNSAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要查找的IP地址 + 参数.二:pSt_DNSAddr + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出查找到的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CModuleHelp_DNSAddr::ModuleHelp_DNSAddr_FindPtr(LPCXSTR lpszDNSAddr, XENGINE_DNSADDRINFO* pSt_DNSAddr) +{ + ModuleHelp_IsErrorOccur = false; + + auto stl_MapIterator = stl_MapDNSAddr.begin(); + //查找地址 + bool bIsFound = false; + for (auto stl_ListIterator = stl_MapIterator->second.begin(); stl_ListIterator != stl_MapIterator->second.end(); stl_ListIterator++) + { + if (0 == _tcsxnicmp(stl_ListIterator->tszDNSAddr, lpszDNSAddr, _tcsxlen(stl_ListIterator->tszDNSAddr))) + { + *pSt_DNSAddr = *stl_ListIterator; + bIsFound = true; + break; + } + } + + if (!bIsFound) + { + ModuleHelp_IsErrorOccur = true; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_DNS_NOTFOUND; + return false; + } + + return true; +} +/******************************************************************** +函数名称:ModuleHelp_DNSAddr_Select +函数功能:备选地址 + 参数.一:ptszDNSServer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出选择的DNS服务器 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CModuleHelp_DNSAddr::ModuleHelp_DNSAddr_Select(XCHAR* ptszDNSServer) +{ + ModuleHelp_IsErrorOccur = false; + + if (stl_ListDNSServer.size() > 1) + { + _tcsxcpy(ptszDNSServer, stl_ListDNSServer.front().c_str()); + } + else + { + _tcsxcpy(ptszDNSServer, stl_ListDNSServer.front().c_str()); + } + + return true; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_DNSAddr/ModuleHelp_DNSAddr.h b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_DNSAddr/ModuleHelp_DNSAddr.h new file mode 100644 index 00000000..2e3fee5e --- /dev/null +++ b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_DNSAddr/ModuleHelp_DNSAddr.h @@ -0,0 +1,29 @@ +#pragma once +/******************************************************************** +// Created: 2025/07/14 15:46:17 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleHelp\ModuleHelp_DNSAddr\ModuleHelp_DNSAddr.h +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleHelp\ModuleHelp_DNSAddr +// File Base: ModuleHelp_DNSAddr +// File Ext: h +// Project: XEngine +// Author: qyt +// Purpose: DNS解析处理帮助函数 +// History: +*********************************************************************/ + +class CModuleHelp_DNSAddr +{ +public: + CModuleHelp_DNSAddr(); + ~CModuleHelp_DNSAddr(); +public: + bool ModuleHelp_DNSAddr_Init(XENGINE_DNSINFO* pSt_DNSInfo); + bool ModuleHelp_DNSAddr_Destroy(); + bool ModuleHelp_DNSAddr_FindA(LPCXSTR lpszDNSAddr, XENGINE_DNSADDRINFO*** pppSt_DNSList, int* pInt_ListCount); + bool ModuleHelp_DNSAddr_FindPtr(LPCXSTR lpszDNSAddr, XENGINE_DNSADDRINFO* pSt_DNSAddr); + bool ModuleHelp_DNSAddr_Select(XCHAR* ptszDNSServer); +protected: +private: + std::list stl_ListDNSServer; + std::unordered_map > stl_MapDNSAddr; +}; \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Define.h b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Define.h index 1d8f7ce5..098c6d67 100644 --- a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Define.h +++ b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Define.h @@ -1211,4 +1211,87 @@ extern "C" bool ModuleHelp_ImageSet_Ligth(LPCXSTR lpszSrcBuffer, int nSLen, LPCX 意思:是否成功 备注: *********************************************************************/ -extern "C" bool ModuleHelp_ImageSet_Level(LPCXSTR lpszSrcBuffer, int nSLen, LPCXSTR lpszExtFile, XCHAR* ptszDstBuffer, int* pInt_DLen, int nLevel); \ No newline at end of file +extern "C" bool ModuleHelp_ImageSet_Level(LPCXSTR lpszSrcBuffer, int nSLen, LPCXSTR lpszExtFile, XCHAR* ptszDstBuffer, int* pInt_DLen, int nLevel); +/************************************************************************/ +/* DNS处理导出函数 */ +/************************************************************************/ +/******************************************************************** +函数名称:ModuleHelp_DNSAddr_Init +函数功能:初始化DNS数据表 + 参数.一:pSt_DNSInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要转换的列表 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ModuleHelp_DNSAddr_Init(XENGINE_DNSINFO* pSt_DNSInfo); +/******************************************************************** +函数名称:ModuleHelp_DNSAddr_Destroy +函数功能:销毁DNS帮助函数库 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ModuleHelp_DNSAddr_Destroy(); +/******************************************************************** +函数名称:ModuleHelp_DNSAddr_FindA +函数功能:A记录查找 + 参数.一:lpszDNSAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要查找的DNS地址 + 参数.二:pppSt_DNSList + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出查找到的列表 + 参数.三:pInt_ListCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出列表个数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ModuleHelp_DNSAddr_FindA(LPCXSTR lpszDNSAddr, XENGINE_DNSADDRINFO*** pppSt_DNSList, int* pInt_ListCount); +/******************************************************************** +函数名称:ModuleHelp_DNSAddr_FindPtr +函数功能:输出IP对应的域名 + 参数.一:lpszDNSAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要查找的IP地址 + 参数.二:pSt_DNSAddr + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出查找到的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ModuleHelp_DNSAddr_FindPtr(LPCXSTR lpszDNSAddr, XENGINE_DNSADDRINFO* pSt_DNSAddr); +/******************************************************************** +函数名称:ModuleHelp_DNSAddr_Select +函数功能:备选地址 + 参数.一:ptszDNSServer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出选择的DNS服务器 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ModuleHelp_DNSAddr_Select(XCHAR* ptszDNSServer); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Error.h b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Error.h index 4b75530a..3a99efad 100644 --- a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Error.h +++ b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Error.h @@ -69,4 +69,9 @@ #define ERROR_XENGINE_APISERVICE_MODULE_HELP_IAMGE_CRAETE 0xD6006 //创建句柄失败 #define ERROR_XENGINE_APISERVICE_MODULE_HELP_IAMGE_INIT 0xD6007 //初始化失败 #define ERROR_XENGINE_APISERVICE_MODULE_HELP_IAMGE_READ 0xD6008 //读取数据失败 -#define ERROR_XENGINE_APISERVICE_MODULE_HELP_IAMGE_GET 0xD6009 //获取数据失败 \ No newline at end of file +#define ERROR_XENGINE_APISERVICE_MODULE_HELP_IAMGE_GET 0xD6009 //获取数据失败 +////////////////////////////////////////////////////////////////////////// +// DNS处理错误 +////////////////////////////////////////////////////////////////////////// +#define ERROR_XENGINE_APISERVICE_MODULE_HELP_DNS_PARAMRT 0xD7001 //参数错误 +#define ERROR_XENGINE_APISERVICE_MODULE_HELP_DNS_NOTFOUND 0xD7002 //没有找到 \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.def b/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.def index 20cfafef..237820b2 100644 --- a/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.def +++ b/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.def @@ -46,4 +46,10 @@ EXPORTS ModuleHelp_ImageSet_Flip ModuleHelp_ImageSet_ColorCvt ModuleHelp_ImageSet_Ligth - ModuleHelp_ImageSet_Level \ No newline at end of file + ModuleHelp_ImageSet_Level + + ModuleHelp_DNSAddr_Init + ModuleHelp_DNSAddr_Destroy + ModuleHelp_DNSAddr_FindA + ModuleHelp_DNSAddr_FindPtr + ModuleHelp_DNSAddr_Select \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.vcxproj b/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.vcxproj index 6b15a194..7ef3da9c 100644 --- a/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.vcxproj +++ b/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.vcxproj @@ -247,6 +247,7 @@ + @@ -260,6 +261,7 @@ + diff --git a/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.vcxproj.filters b/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.vcxproj.filters index df8a58e4..d15dc8e1 100644 --- a/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.vcxproj.filters +++ b/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.vcxproj.filters @@ -55,6 +55,12 @@ {660ce380-2906-43e5-a33c-ef5f97f1f585} + + {a5e13955-e617-4202-92b2-236240920728} + + + {80ae4ca3-522b-4ab9-8157-e77fc923ea11} + @@ -93,6 +99,9 @@ 头文件\ModuleHelp_Image + + 头文件\ModuleHelp_DNSAddr + @@ -125,6 +134,9 @@ 源文件\ModuleHelp_Image + + 源文件\ModuleHelp_DNSAddr + diff --git a/XEngine_Source/XEngine_ModuleHelp/pch.cpp b/XEngine_Source/XEngine_ModuleHelp/pch.cpp index 7f13afa5..a34567bd 100644 --- a/XEngine_Source/XEngine_ModuleHelp/pch.cpp +++ b/XEngine_Source/XEngine_ModuleHelp/pch.cpp @@ -7,6 +7,7 @@ #include "ModuleHelp_SocketTest/ModuleHelp_SocketTest.h" #include "ModuleHelp_Image/ModuleHelp_ImageGet.h" #include "ModuleHelp_Image/ModuleHelp_ImageSet.h" +#include "ModuleHelp_DNSAddr/ModuleHelp_DNSAddr.h" /******************************************************************** // Created: 2022/03/04 13:37:38 // File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleHelp\pch.cpp @@ -29,6 +30,7 @@ CModuleHelp_QRCode m_QRCode; CModuleHelp_SocketTest m_SocketTest; CModuleHelp_ImageGet m_ImageGet; CModuleHelp_ImageSet m_ImageSet; +CModuleHelp_DNSAddr m_DNSAddr; ////////////////////////////////////////////////////////////////////////// /// 导出的函数 ////////////////////////////////////////////////////////////////////////// @@ -212,4 +214,27 @@ extern "C" bool ModuleHelp_ImageSet_Ligth(LPCXSTR lpszSrcBuffer, int nSLen, LPCX extern "C" bool ModuleHelp_ImageSet_Level(LPCXSTR lpszSrcBuffer, int nSLen, LPCXSTR lpszExtFile, XCHAR * ptszDstBuffer, int* pInt_DLen, int nLevel) { return m_ImageSet.ModuleHelp_ImageSet_Level(lpszSrcBuffer, nSLen, lpszExtFile, ptszDstBuffer, pInt_DLen, nLevel); +} +/************************************************************************/ +/* DNS处理导出函数 */ +/************************************************************************/ +extern "C" bool ModuleHelp_DNSAddr_Init(XENGINE_DNSINFO* pSt_DNSInfo) +{ + return m_DNSAddr.ModuleHelp_DNSAddr_Init(pSt_DNSInfo); +} +extern "C" bool ModuleHelp_DNSAddr_Destroy() +{ + return m_DNSAddr.ModuleHelp_DNSAddr_Destroy(); +} +extern "C" bool ModuleHelp_DNSAddr_FindA(LPCXSTR lpszDNSAddr, XENGINE_DNSADDRINFO*** pppSt_DNSList, int* pInt_ListCount) +{ + return m_DNSAddr.ModuleHelp_DNSAddr_FindA(lpszDNSAddr, pppSt_DNSList, pInt_ListCount); +} +extern "C" bool ModuleHelp_DNSAddr_FindPtr(LPCXSTR lpszDNSAddr, XENGINE_DNSADDRINFO* pSt_DNSAddr) +{ + return m_DNSAddr.ModuleHelp_DNSAddr_FindPtr(lpszDNSAddr, pSt_DNSAddr); +} +extern "C" bool ModuleHelp_DNSAddr_Select(XCHAR* ptszDNSServer) +{ + return m_DNSAddr.ModuleHelp_DNSAddr_Select(ptszDNSServer); } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleHelp/pch.h b/XEngine_Source/XEngine_ModuleHelp/pch.h index c90076ff..930e2a64 100644 --- a/XEngine_Source/XEngine_ModuleHelp/pch.h +++ b/XEngine_Source/XEngine_ModuleHelp/pch.h @@ -54,6 +54,7 @@ using namespace std; #include #include #include "../XEngine_UserProtocol.h" +#include "../XEngine_ModuleConfigure/ModuleConfig_Define.h" #include "ModuleHelp_Define.h" #include "ModuleHelp_Error.h" /******************************************************************** diff --git a/XEngine_Source/XEngine_ModuleProtocol/pch.h b/XEngine_Source/XEngine_ModuleProtocol/pch.h index 4421c49c..c5292004 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/pch.h +++ b/XEngine_Source/XEngine_ModuleProtocol/pch.h @@ -30,11 +30,10 @@ #include #include #include -#include #include #include #include "../XEngine_DependLibrary/XEngine_IPMacData/XEngine_Source/XIPMac_CommHdr.h" -#include "../XEngine_DependLibrary/XEngine_PhoneData/Source/XPhone_CommHdr.h" +#include "../XEngine_DependLibrary/XEngine_PhoneData/XEngine_Source/XPhone_CommHdr.h" using namespace std; #include "../XEngine_UserProtocol.h" #include "ModuleProtocol_Define.h" diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile index 04771ee8..44780e39 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile @@ -4,15 +4,15 @@ FILEEXT = LIBFLAG = LOADHDR = -I ./ LOADSO = -L ../../XEngine_ModuleConfigure -L ../../XEngine_ModuleDatabase -L ../../XEngine_ModuleProtocol -L ../../XEngine_ModuleSystem -L ../../XEngine_ModuleHelp -L ../../XEngine_ModulePlugin \ - -L ../../XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp -L ../../XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/XEngine_InfoReport \ - -L ../../XEngine_DependLibrary/XEngine_IPMacData/XEngine_Source/XEngine_APIModuleIPMac -L ../../XEngine_DependLibrary/XEngine_PhoneData/Source/C/XEngine_APIModulePhone -LIB = -lXEngine_BaseSafe -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_ManagePool -lXEngine_Cryption -lXClient_Stream -lXClient_APIHelp -lNetHelp_APIAddr -lHelpComponents_XLog -lRfcComponents_HttpProtocol -lRfcComponents_NatProtocol -lRfcComponents_NTPProtocol -lXEngine_ProcFile -lXEngine_SystemApi -lXEngine_AVHelp -lXEngine_VideoCodec -lXEngine_AudioCodec -lXEngine_AVCollect \ + -L ../../XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp -L ../../XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/XEngine_InfoReport -L ../../XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/XEngine_Verification \ + -L ../../XEngine_DependLibrary/XEngine_IPMacData/XEngine_Source/XEngine_APIModuleIPMac -L ../../XEngine_DependLibrary/XEngine_PhoneData/XEngine_Source/XEngine_APIModulePhone +LIB = -lXEngine_BaseSafe -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_ManagePool -lXEngine_Cryption -lXClient_APIHelp -lXClient_Socket -lNetHelp_APIAddr -lNetHelp_XSocket -lHelpComponents_XLog -lRfcComponents_HttpProtocol -lRfcComponents_NatProtocol -lRfcComponents_NTPProtocol -lRfcComponents_DNSProtocol -lXEngine_ProcFile -lXEngine_SystemApi -lXEngine_AVHelp -lXEngine_VideoCodec -lXEngine_AudioCodec -lXEngine_AVFilter -lXEngine_AVCollect -lXEngine_AVFormat \ -lXEngine_ModuleConfigure -lXEngine_ModuleDatabase -lXEngine_ModuleProtocol -lXEngine_ModuleSystem -lXEngine_ModuleHelp -lXEngine_ModulePlugin \ - -ljsoncpp -lXEngine_InfoReport \ + -ljsoncpp -lXEngine_InfoReport -lXEngine_Verification \ -lXEngine_APIModuleIPMac -lXEngine_APIModulePhone LIBEX = OBJECTS = XEngine_Configure.o XEngine_Network.o XEngine_HTTPTask.o XEngine_PluginTask.o XEngine_HttpApp.o \ - RFCTask_Ntp.o RFCTask_Stun.o \ + RFCTask_Ntp.o RFCTask_Stun.o RFCTask_Dns.o \ TaskGet_Bank.o TaskGet_IDCard.o TaskGet_Locker.o TaskGet_Translation.o TaskGet_Reload.o TaskGet_Weather.o TaskGet_IDRegion.o TaskGet_Oil.o TaskGet_APIModule.o \ TaskPost_DTest.o TaskPost_Log.o TaskPost_P2PClient.o TaskPost_PostCode.o TaskPost_QRCode.o TaskPost_ShortLink.o TaskPost_SocketTest.o TaskPost_WordFilter.o TaskPost_Image.o TaskPost_BackService.o TaskPost_Deamon.o TaskPost_Machine.o @@ -71,6 +71,8 @@ RFCTask_Ntp.o:./XEngine_TaskRfc/RFCTask_Ntp.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_TaskRfc/RFCTask_Ntp.cpp RFCTask_Stun.o:./XEngine_TaskRfc/RFCTask_Stun.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_TaskRfc/RFCTask_Stun.cpp +RFCTask_Dns.o:./XEngine_TaskRfc/RFCTask_Dns.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_TaskRfc/RFCTask_Dns.cpp TaskGet_Bank.o:./XEngine_TaskGet/TaskGet_Bank.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_TaskGet/TaskGet_Bank.cpp diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Configure.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Configure.cpp index 8e89d04e..fb5fb2f0 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Configure.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Configure.cpp @@ -13,6 +13,7 @@ bool XEngine_Configure_Parament(int argc, char** argv) { LPCXSTR lpszConfigFile = _X("./XEngine_Config/XEngine_Config.json"); + LPCXSTR lpszDNSConfig = _X("./XEngine_Config/XEngine_DNSConfig.json"); LPCXSTR lpszVersionFile = _X("./XEngine_Config/XEngine_VersionConfig.json"); if (NULL != st_ServiceConfig.st_XVer.pStl_ListVer) @@ -26,50 +27,53 @@ bool XEngine_Configure_Parament(int argc, char** argv) printf("解析配置文件失败,ModuleConfigure_Json_File:%lX\n", ModuleConfigure_GetLastError()); return false; } + if (!ModuleConfigure_Json_DNSFile(lpszDNSConfig, &st_DNSConfig)) + { + printf("解析配置文件失败,ModuleConfigure_Json_DNSFile:%lX\n", ModuleConfigure_GetLastError()); + return false; + } if (!ModuleConfigure_Json_VersionFile(lpszVersionFile, &st_ServiceConfig)) { printf("解析配置文件失败,ModuleConfigure_Json_VersionFile:%lX\n", ModuleConfigure_GetLastError()); return false; } - for (int i = 0; i < argc; i++) { - if ((0 == _tcsxcmp("-h", argv[i])) || (0 == _tcsxcmp("-H", argv[i]))) + if ((0 == _tcsxicmp("-h", argv[i])) || (0 == _tcsxicmp("-H", argv[i]))) { XEngine_Configure_Help(); return false; } - else if (0 == _tcsxcmp("-d", argv[i])) + else if (0 == _tcsxicmp("-d", argv[i])) { st_ServiceConfig.bDeamon = _ttxoi(argv[++i]); } - else if (0 == _tcsxcmp("-w", argv[i])) + else if (0 == _tcsxicmp("-w", argv[i])) { st_ServiceConfig.bShowWnd = _ttxoi(argv[++i]); } - else if (0 == _tcsxcmp("-hp", argv[i])) + else if (0 == _tcsxicmp("-hp", argv[i])) { st_ServiceConfig.nHttpPort = _ttxoi(argv[++i]); } - else if (0 == _tcsxcmp("-rp", argv[i])) + else if (0 == _tcsxicmp("-rp", argv[i])) { st_ServiceConfig.nRFCPort = _ttxoi(argv[++i]); } - else if (0 == _tcsxcmp("-r", argv[i])) + else if (0 == _tcsxicmp("-r", argv[i])) { st_ServiceConfig.st_XReload.bReload = true; st_ServiceConfig.st_XReload.byCode = _ttxoi(argv[++i]); } - else if (0 == _tcsxcmp("-db", argv[i])) + else if (0 == _tcsxicmp("-db", argv[i])) { st_ServiceConfig.st_XSql.bEnable = _ttxoi(argv[++i]); } - else if (0 == _tcsxcmp("-t", argv[i])) + else if (0 == _tcsxicmp("-t", argv[i])) { bIsTest = true; } } - return true; } diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp index a9861279..96b0d8bb 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp @@ -33,7 +33,7 @@ XHTHREAD XCALLBACK HTTPTask_TastPost_Thread(XPVOID lParam) //再循环客户端拥有的任务个数 for (int j = 0; j < ppSst_ListAddr[i]->nPktCount; j++) { - int nMsgLen = 0; //客户端发送的数据大小,不包括头 + int nSDLen = 0; //客户端发送的数据大小,不包括头 int nHDRCount = 0; XCHAR* ptszMsgBuffer = NULL; //客户端发送的数据 XCHAR** pptszListHdr; @@ -41,10 +41,10 @@ XHTHREAD XCALLBACK HTTPTask_TastPost_Thread(XPVOID lParam) memset(&st_HTTPReqparam, '\0', sizeof(RFCCOMPONENTS_HTTP_REQPARAM)); //得到一个指定客户端的完整数据包 - if (HttpProtocol_Server_GetMemoryEx(xhHTTPPacket, ppSst_ListAddr[i]->tszClientAddr, &ptszMsgBuffer, &nMsgLen, &st_HTTPReqparam, &pptszListHdr, &nHDRCount)) + if (HttpProtocol_Server_GetMemoryEx(xhHTTPPacket, ppSst_ListAddr[i]->tszClientAddr, &ptszMsgBuffer, &nSDLen, &st_HTTPReqparam, &pptszListHdr, &nHDRCount)) { //在另外一个函数里面处理数据 - HTTPTask_TastPost_Handle(&st_HTTPReqparam, ppSst_ListAddr[i]->tszClientAddr, ptszMsgBuffer, nMsgLen, &pptszListHdr, nHDRCount); + HTTPTask_TastPost_Handle(&st_HTTPReqparam, ppSst_ListAddr[i]->tszClientAddr, ptszMsgBuffer, nSDLen, pptszListHdr, nHDRCount); //释放内存 BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBuffer); BaseLib_Memory_Free((XPPPMEM)&pptszListHdr, nHDRCount); @@ -55,16 +55,16 @@ XHTHREAD XCALLBACK HTTPTask_TastPost_Thread(XPVOID lParam) } return 0; } -bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXSTR lpszClientAddr, LPCXSTR lpszRVBuffer, int nRVLen, XCHAR*** ppptszHDRList, int nHDRCount) +bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXSTR lpszClientAddr, LPCXSTR lpszMSGBuffer, int nMSGLen, XCHAR** pptszHDRList, int nHDRCount) { - int nMsgLen = 4096; + bool bVerification = false; + int nSDLen = 4096; + int nRVLen = 4096; LPCXSTR lpszMethodPost = _X("POST"); LPCXSTR lpszMethodGet = _X("GET"); - XCHAR tszMsgBuffer[4096]; - RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam; //发送给客户端的参数 - - memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); - memset(&st_HDRParam, '\0', sizeof(RFCCOMPONENTS_HTTP_HDRPARAM)); + XCHAR tszSDBuffer[4096] = {}; + XCHAR tszRVBuffer[4096] = {}; + RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam = {}; st_HDRParam.nHttpCode = 200; //HTTP CODE码 st_HDRParam.bIsClose = true; //收到回复后就关闭 @@ -89,22 +89,127 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST if (nListCount < 1) { //是不是代理转发 - if (HTTPTask_TaskPost_SLProxy(lpszClientAddr, tszGBKBuffer, ppptszHDRList, nHDRCount)) + if (HTTPTask_TaskPost_SLProxy(lpszClientAddr, tszGBKBuffer, &pptszHDRList, nHDRCount)) { return true; } st_HDRParam.nHttpCode = 404; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam); + XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen); BaseLib_Memory_Free((XPPPMEM)&pptszList, nListCount); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, tszGBKBuffer); return false; } + //http验证 + if (st_ServiceConfig.st_XVerifcation.bEnable) + { + int nVType = 0; + RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam = {}; + + st_HDRParam.nHttpCode = 401; + st_HDRParam.bIsClose = true; + st_HDRParam.bAuth = true; + //打包验证信息 + int nHDRLen = 0; + XCHAR tszHDRBuffer[XPATH_MAX] = {}; + if (1 == st_ServiceConfig.st_XVerifcation.nVType) + { + Verification_HTTP_BasicServerPacket(tszHDRBuffer, &nHDRLen); + } + else + { + XCHAR tszNonceStr[64] = {}; + XCHAR tszOpaqueStr[64] = {}; + Verification_HTTP_DigestServerPacket(tszHDRBuffer, &nHDRLen, tszNonceStr, tszOpaqueStr); + } + //后去验证方法 + if (!Verification_HTTP_GetType(pptszHDRList, nHDRCount, &nVType)) + { + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, tszHDRBuffer); + XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户验证失败,验证方式:%d,错误:%lX"), lpszClientAddr, st_ServiceConfig.st_XVerifcation.nVType, Verification_GetLastError()); + return false; + } + //验证方式是否一致 + if (st_ServiceConfig.st_XVerifcation.nVType != nVType) + { + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, tszHDRBuffer); + XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户验证失败,验证方式错误,请求:%d,需求:%d"), lpszClientAddr, nVType, st_ServiceConfig.st_XVerifcation.nVType); + return false; + } + bool bRet = false; + + if (_tcsxlen(st_ServiceConfig.st_XVerifcation.tszAPIAuth) > 0) + { + int nHTTPCode = 0; + int nMSGLen = 0; + XCLIENT_APIHTTP st_APIHttp = {}; + XCHAR* ptszMSGBuffer = NULL; + if (!APIClient_Http_Request(_X("GET"), st_ServiceConfig.st_XVerifcation.tszAPIAuth, NULL, &nHTTPCode, &ptszMSGBuffer, &nMSGLen, NULL, NULL, &st_APIHttp)) + { + st_HDRParam.nHttpCode = 500; + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, tszHDRBuffer); + XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户验证失败,GET请求验证服务:%s 失败,错误码:%lX"), lpszClientAddr, st_ServiceConfig.st_XVerifcation.tszAPIAuth, APIClient_GetLastError()); + return false; + } + if (200 != nHTTPCode) + { + st_HDRParam.nHttpCode = 500; + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, tszHDRBuffer); + XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户验证失败,GET请求验证服务:%s 失败,错误:%d"), lpszClientAddr, st_ServiceConfig.st_XVerifcation.tszAPIAuth, nHTTPCode); + return false; + } + XENGINE_PROTOCOL_USERAUTH st_UserAuth = {}; + if (!ModuleProtocol_Parse_Verifcation(ptszMSGBuffer, nSDLen, st_UserAuth.tszUserName, st_UserAuth.tszUserPass)) + { + st_HDRParam.nHttpCode = 500; + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, tszHDRBuffer); + XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户验证失败,返回内容:%s 错误,无法继续"), lpszClientAddr, ptszMSGBuffer); + BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMSGBuffer); + return false; + } + BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMSGBuffer); + + if (1 == nVType) + { + bRet = Verification_HTTP_Basic(st_UserAuth.tszUserName, st_UserAuth.tszUserPass, pptszHDRList, nHDRCount); + } + else if (2 == nVType) + { + bRet = Verification_HTTP_Digest(st_UserAuth.tszUserName, st_UserAuth.tszUserPass, pSt_HTTPParam->tszHttpMethod, pptszHDRList, nHDRCount); + } + } + else + { + if (1 == nVType) + { + bRet = Verification_HTTP_Basic(st_ServiceConfig.st_XVerifcation.tszUserName, st_ServiceConfig.st_XVerifcation.tszUserPass, pptszHDRList, nHDRCount); + } + else if (2 == nVType) + { + bRet = Verification_HTTP_Digest(st_ServiceConfig.st_XVerifcation.tszUserName, st_ServiceConfig.st_XVerifcation.tszUserPass, pSt_HTTPParam->tszHttpMethod, pptszHDRList, nHDRCount); + } + } + + if (!bRet) + { + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, tszHDRBuffer); + XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户验证失败,验证处理错误,可能用户密码登信息不匹配,类型:%d"), lpszClientAddr, nVType); + return false; + } + bVerification = true; + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,HTTP验证类型:%d 通过"), lpszClientAddr, nVType); + } + XCHAR tszKey[XPATH_MAX]; XCHAR tszValue[XPATH_MAX]; LPCXSTR lpszFuncName = _X("api"); LPCXSTR lpszParamFuncKey = _X("function"); - LPCXSTR lpszParamName = _X("params1"); //get LPCXSTR lpszParamIDCard = _X("id"); LPCXSTR lpszParamBank = _X("bank"); @@ -137,8 +242,8 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST if (0 != _tcsxnicmp(lpszFuncName, tszUrlName, _tcsxlen(lpszFuncName))) { st_HDRParam.nHttpCode = 404; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam); + XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen); BaseLib_Memory_Free((XPPPMEM)&pptszList, nListCount); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, tszGBKBuffer); return false; @@ -148,8 +253,8 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST if (0 != _tcsxnicmp(lpszParamFuncKey, tszKey, _tcsxlen(lpszParamFuncKey))) { st_HDRParam.nHttpCode = 404; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam); + XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen); BaseLib_Memory_Free((XPPPMEM)&pptszList, nListCount); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, tszGBKBuffer); return false; @@ -158,7 +263,7 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST int nPluginType = 0; if (ModulePlugin_Loader_Find(tszValue, &nPluginType)) { - XEngine_PluginTask_Handle(tszValue, lpszClientAddr, lpszRVBuffer, nRVLen, &pptszList, nListCount, nPluginType); + XEngine_PluginTask_Handle(tszValue, lpszClientAddr, lpszMSGBuffer, nMSGLen, &pptszList, nListCount, nPluginType); return true; } if (0 == _tcsxnicmp(lpszMethodPost, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodPost))) @@ -169,16 +274,7 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST memset(tszKey, '\0', sizeof(tszKey)); memset(tszValue, '\0', sizeof(tszValue)); BaseLib_String_GetKeyValue(pptszList[1], "=", tszKey, tszValue); - if (0 != _tcsxnicmp(lpszParamName, tszKey, _tcsxlen(lpszParamName))) - { - st_HDRParam.nHttpCode = 404; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); - BaseLib_Memory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, tszGBKBuffer); - return false; - } - HTTPTask_TastPost_P2PClient(lpszClientAddr, lpszRVBuffer, nRVLen, _ttxoi(tszValue)); + HTTPTask_TastPost_P2PClient(lpszClientAddr, lpszMSGBuffer, nMSGLen, _ttxoi(tszValue)); } else if (0 == _tcsxnicmp(lpszParamZIPCode, tszValue, _tcsxlen(lpszParamZIPCode))) { @@ -186,16 +282,7 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST memset(tszKey, '\0', sizeof(tszKey)); memset(tszValue, '\0', sizeof(tszValue)); BaseLib_String_GetKeyValue(pptszList[1], "=", tszKey, tszValue); - if (0 != _tcsxnicmp(lpszParamName, tszKey, _tcsxlen(lpszParamName))) - { - st_HDRParam.nHttpCode = 404; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); - BaseLib_Memory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, tszGBKBuffer); - return false; - } - HTTPTask_TastPost_PostCode(lpszClientAddr, lpszRVBuffer, nRVLen, _ttxoi(tszValue)); + HTTPTask_TastPost_PostCode(lpszClientAddr, lpszMSGBuffer, nMSGLen, _ttxoi(tszValue)); } else if (0 == _tcsxnicmp(lpszParamXLog, tszValue, _tcsxlen(lpszParamXLog))) { @@ -203,16 +290,7 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST memset(tszKey, '\0', sizeof(tszKey)); memset(tszValue, '\0', sizeof(tszValue)); BaseLib_String_GetKeyValue(pptszList[1], "=", tszKey, tszValue); - if (0 != _tcsxnicmp(lpszParamName, tszKey, _tcsxlen(lpszParamName))) - { - st_HDRParam.nHttpCode = 404; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); - BaseLib_Memory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, tszGBKBuffer); - return false; - } - HTTPTask_TastPost_LogInfo(lpszClientAddr, lpszRVBuffer, nRVLen, _ttxoi(tszValue)); + HTTPTask_TastPost_LogInfo(lpszClientAddr, lpszMSGBuffer, nMSGLen, _ttxoi(tszValue)); } else if (0 == _tcsxnicmp(lpszParamQRCode, tszValue, _tcsxlen(lpszParamQRCode))) { @@ -220,16 +298,7 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST memset(tszKey, '\0', sizeof(tszKey)); memset(tszValue, '\0', sizeof(tszValue)); BaseLib_String_GetKeyValue(pptszList[1], "=", tszKey, tszValue); - if (0 != _tcsxnicmp(lpszParamName, tszKey, _tcsxlen(lpszParamName))) - { - st_HDRParam.nHttpCode = 404; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); - BaseLib_Memory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, tszGBKBuffer); - return false; - } - HTTPTask_TaskPost_QRCode(lpszClientAddr, lpszRVBuffer, nRVLen, _ttxoi(tszValue)); + HTTPTask_TaskPost_QRCode(lpszClientAddr, lpszMSGBuffer, nMSGLen, _ttxoi(tszValue)); } else if (0 == _tcsxnicmp(lpszParamSocket, tszValue, _tcsxlen(lpszParamSocket))) { @@ -237,16 +306,7 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST memset(tszKey, '\0', sizeof(tszKey)); memset(tszValue, '\0', sizeof(tszValue)); BaseLib_String_GetKeyValue(pptszList[1], "=", tszKey, tszValue); - if (0 != _tcsxnicmp(lpszParamName, tszKey, _tcsxlen(lpszParamName))) - { - st_HDRParam.nHttpCode = 404; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); - BaseLib_Memory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, tszGBKBuffer); - return false; - } - HTTPTask_TastPost_SocketTest(lpszClientAddr, lpszRVBuffer, nRVLen, _ttxoi(tszValue)); + HTTPTask_TastPost_SocketTest(lpszClientAddr, lpszMSGBuffer, nMSGLen, _ttxoi(tszValue)); } else if (0 == _tcsxnicmp(lpszParamDTest, tszValue, _tcsxlen(lpszParamDTest))) { @@ -254,16 +314,7 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST memset(tszKey, '\0', sizeof(tszKey)); memset(tszValue, '\0', sizeof(tszValue)); BaseLib_String_GetKeyValue(pptszList[1], "=", tszKey, tszValue); - if (0 != _tcsxnicmp(lpszParamName, tszKey, _tcsxlen(lpszParamName))) - { - st_HDRParam.nHttpCode = 404; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); - BaseLib_Memory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, tszGBKBuffer); - return false; - } - HTTPTask_TastPost_DTest(lpszClientAddr, lpszRVBuffer, nRVLen, _ttxoi(tszValue)); + HTTPTask_TastPost_DTest(lpszClientAddr, lpszMSGBuffer, nMSGLen, _ttxoi(tszValue)); } else if (0 == _tcsxnicmp(lpszParamShortLink, tszValue, _tcsxlen(lpszParamShortLink))) { @@ -272,7 +323,7 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST memset(tszType, '\0', sizeof(tszType)); BaseLib_String_GetKeyValue(pptszList[1], "=", tszKey, tszType); - HTTPTask_TaskPost_ShortLink(lpszClientAddr, lpszRVBuffer, nRVLen, _ttxoi(tszType)); + HTTPTask_TaskPost_ShortLink(lpszClientAddr, lpszMSGBuffer, nMSGLen, _ttxoi(tszType)); } else if (0 == _tcsxnicmp(lpszParamWordFilter, tszValue, _tcsxlen(lpszParamWordFilter))) { @@ -281,7 +332,7 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST memset(tszType, '\0', sizeof(tszType)); BaseLib_String_GetKeyValue(pptszList[1], "=", tszKey, tszType); - HTTPTask_TastPost_WordFilter(lpszClientAddr, lpszRVBuffer, nRVLen, _ttxoi(tszType)); + HTTPTask_TastPost_WordFilter(lpszClientAddr, lpszMSGBuffer, nMSGLen, _ttxoi(tszType)); } else if (0 == _tcsxnicmp(lpszParamBack, tszValue, _tcsxlen(lpszParamBack))) { @@ -289,18 +340,34 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST XCHAR tszType[64]; memset(tszType, '\0', sizeof(tszType)); + if (st_ServiceConfig.st_XVerifcation.st_VerSwitch.bBackService && !bVerification) + { + ModuleProtocol_Packet_Common(tszRVBuffer, &nSDLen, 403, _X("User verification required")); + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen); + XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求后台协议失败,此模式需要进行验证,但是请求未验证"), lpszClientAddr); + return false; + } BaseLib_String_GetKeyValue(pptszList[1], "=", tszKey, tszType); - HTTPTask_TaskPost_BackService(lpszClientAddr, lpszRVBuffer, nRVLen, _ttxoi(tszType)); + HTTPTask_TaskPost_BackService(lpszClientAddr, lpszMSGBuffer, nMSGLen, _ttxoi(tszType)); } else if (0 == _tcsxnicmp(lpszParamImage, tszValue, _tcsxlen(lpszParamImage))) { //图像处理接口:http://app.xyry.org:5501/api?function=image¶ms1=0 - HTTPTask_TaskPost_Image(lpszClientAddr, lpszRVBuffer, nRVLen, &pptszList, nListCount); + HTTPTask_TaskPost_Image(lpszClientAddr, lpszMSGBuffer, nMSGLen, &pptszList, nListCount); } else if (0 == _tcsxnicmp(lpszParamDeamon, tszValue, _tcsxlen(lpszParamDeamon))) { //守护进程接口:http://app.xyry.org:5501/api?function=deamon¶ms1=0 - HTTPTask_TaskPost_Deamon(lpszClientAddr, lpszRVBuffer, nRVLen); + if (st_ServiceConfig.st_XVerifcation.st_VerSwitch.bDeamon && !bVerification) + { + ModuleProtocol_Packet_Common(tszRVBuffer, &nSDLen, 403, _X("User verification required")); + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen); + XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求守护进程协议失败,此模式需要进行验证,但是请求未验证"), lpszClientAddr); + return false; + } + HTTPTask_TaskPost_Deamon(lpszClientAddr, lpszMSGBuffer, nMSGLen); } else if (0 == _tcsxnicmp(lpszParamMachine, tszValue, _tcsxlen(lpszParamMachine))) { @@ -309,14 +376,14 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST memset(tszType, '\0', sizeof(tszType)); BaseLib_String_GetKeyValue(pptszList[1], "=", tszKey, tszType); - HTTPTask_TastPost_Machine(lpszClientAddr, lpszRVBuffer, nRVLen, _ttxoi(tszType)); + HTTPTask_TastPost_Machine(lpszClientAddr, lpszMSGBuffer, nMSGLen, _ttxoi(tszType)); } else { st_HDRParam.nHttpCode = 404; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,发送的请求不支持:%s,内容:\r\n%s"), lpszClientAddr, tszGBKBuffer, lpszRVBuffer); + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam); + XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,发送的请求不支持:%s,内容:\r\n%s"), lpszClientAddr, tszGBKBuffer, lpszMSGBuffer); } } else if (0 == _tcsxnicmp(lpszMethodGet, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodGet))) @@ -334,15 +401,6 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST memset(tszKey, '\0', sizeof(tszKey)); memset(tszValue, '\0', sizeof(tszValue)); BaseLib_String_GetKeyValue(pptszList[1], "=", tszKey, tszValue); - if (0 != _tcsxnicmp(lpszParamName, tszKey, _tcsxlen(lpszParamName))) - { - st_HDRParam.nHttpCode = 404; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); - BaseLib_Memory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, tszGBKBuffer); - return false; - } HTTPTask_TaskGet_IDCard(lpszClientAddr, tszValue); } else if (0 == _tcsxnicmp(lpszParamBank, tszValue, _tcsxlen(lpszParamBank))) @@ -351,15 +409,6 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST memset(tszKey, '\0', sizeof(tszKey)); memset(tszValue, '\0', sizeof(tszValue)); BaseLib_String_GetKeyValue(pptszList[1], "=", tszKey, tszValue); - if (0 != _tcsxnicmp(lpszParamName, tszKey, _tcsxlen(lpszParamName))) - { - st_HDRParam.nHttpCode = 404; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); - BaseLib_Memory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, tszGBKBuffer); - return false; - } HTTPTask_TaskGet_BankInfo(lpszClientAddr, tszValue); } else if (0 == _tcsxnicmp(lpszParamTranslation, tszValue, _tcsxlen(lpszParamTranslation))) @@ -453,26 +502,26 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST //phone:http://127.0.0.1:5501/api?function=phone¶m=1369943 //ip:http://127.0.0.1:5501/api?function=ip¶m=117.172.221.14&language=en //mac:http://127.0.0.1:5501/api?function=mac¶m=00:00:0C - memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + memset(tszSDBuffer, '\0', sizeof(tszSDBuffer)); - BaseLib_String_GetKeyValue(pptszList[1], "=", tszKey, tszMsgBuffer); + BaseLib_String_GetKeyValue(pptszList[1], "=", tszKey, tszSDBuffer); if (nListCount <= 2) { - HTTPTask_TaskGet_APIModule(lpszClientAddr, tszValue, tszMsgBuffer, NULL); + HTTPTask_TaskGet_APIModule(lpszClientAddr, tszValue, tszSDBuffer, NULL); } else { XCHAR tszTPStr[128] = {}; BaseLib_String_GetKeyValue(pptszList[2], "=", tszKey, tszTPStr); - HTTPTask_TaskGet_APIModule(lpszClientAddr, tszValue, tszMsgBuffer, tszTPStr); + HTTPTask_TaskGet_APIModule(lpszClientAddr, tszValue, tszSDBuffer, tszTPStr); } } else { st_HDRParam.nHttpCode = 404; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,发送的请求不支持:%s,内容:\r\n%s"), lpszClientAddr, tszGBKBuffer, lpszRVBuffer); + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam); + XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,发送的请求不支持:%s,内容:\r\n%s"), lpszClientAddr, tszGBKBuffer, lpszMSGBuffer); } } else diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.h index b03864e5..5ace63af 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.h @@ -13,4 +13,4 @@ //任务处理池,用来获取一个完整包 XHTHREAD XCALLBACK HTTPTask_TastPost_Thread(XPVOID lParam); //任务处理相关函数,处理包的内容 -bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXSTR lpszClientAddr, LPCXSTR lpszRVBuffer, int nRVLen, XCHAR*** ppptszHDRList, int nHDRCount); \ No newline at end of file +bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXSTR lpszClientAddr, LPCXSTR lpszMSGBuffer, int nMSGLen, XCHAR** pptszHDRList, int nHDRCount); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h index 97422eda..9bf2f010 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h @@ -35,10 +35,10 @@ using namespace std; #include #include #include +#include +#include #include #include -#include -#include #include #include #include @@ -51,24 +51,32 @@ using namespace std; #include #include #include +#include +#include #include #include -#include -#include #include #include #include #include +#include +#include #include #include +#include +#include +#include +#include #include "../../XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/XEngine_InfoReport/InfoReport_Define.h" #include "../../XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/XEngine_InfoReport/InfoReport_Error.h" +#include "../../XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/XEngine_Verification/Verification_Define.h" +#include "../../XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/XEngine_Verification/Verification_Error.h" #include "../../XEngine_DependLibrary/XEngine_IPMacData/XEngine_Source/XIPMac_CommHdr.h" #include "../../XEngine_DependLibrary/XEngine_IPMacData/XEngine_Source/XEngine_APIModuleIPMac/APIIPMac_Define.h" #include "../../XEngine_DependLibrary/XEngine_IPMacData/XEngine_Source/XEngine_APIModuleIPMac/APIIPMac_Error.h" -#include "../../XEngine_DependLibrary/XEngine_PhoneData/Source/XPhone_CommHdr.h" -#include "../../XEngine_DependLibrary/XEngine_PhoneData/Source/C/XEngine_APIModulePhone/APIPhone_Define.h" -#include "../../XEngine_DependLibrary/XEngine_PhoneData/Source/C/XEngine_APIModulePhone/APIPhone_Error.h" +#include "../../XEngine_DependLibrary/XEngine_PhoneData/XEngine_Source/XPhone_CommHdr.h" +#include "../../XEngine_DependLibrary/XEngine_PhoneData/XEngine_Source/XEngine_APIModulePhone/APIPhone_Define.h" +#include "../../XEngine_DependLibrary/XEngine_PhoneData/XEngine_Source/XEngine_APIModulePhone/APIPhone_Error.h" //加载项目相关头文件 #include "../../XEngine_BuildSwitch.h" #include "../../XEngine_UserProtocol.h" @@ -115,6 +123,7 @@ using namespace std; //rfc #include "XEngine_TaskRfc/RFCTask_Stun.h" #include "XEngine_TaskRfc/RFCTask_Ntp.h" +#include "XEngine_TaskRfc/RFCTask_Dns.h" /******************************************************************** // Created: 2022/01/20 14:42:06 // File Name: D:\XEngine_ServiceApp\XEngine_Source\XEngine_ServiceApp\XEngine_HttpApp\XEngine_Hdr.h @@ -132,6 +141,8 @@ extern XHANDLE xhLog; //HTTP服务器 extern XHANDLE xhHTTPSocket; extern XHANDLE xhRFCSocket; +extern XHANDLE xhNTPSocket; +extern XHANDLE xhDNSSocket; extern XHANDLE xhHTTPHeart; extern XHANDLE xhHTTPPacket; extern XHANDLE xhHTTPPool; @@ -140,6 +151,7 @@ extern XHANDLE xhMemPool; extern unique_ptr pSTDThread_Deamon; //配置文件 extern XENGINE_SERVICECONFIG st_ServiceConfig; +extern XENGINE_DNSINFO st_DNSConfig; extern XENGINE_DEAMONAPPLIST st_DeamonAppConfig; #include "XEngine_MemoryPool.h" @@ -151,23 +163,27 @@ extern XENGINE_DEAMONAPPLIST st_DeamonAppConfig; #pragma comment(lib,"XEngine_Core/XEngine_Core.lib") #pragma comment(lib,"XEngine_Core/XEngine_ManagePool.lib") #pragma comment(lib,"XEngine_Core/XEngine_Cryption.lib") -#pragma comment(lib,"XEngine_Client/XClient_Stream.lib") +#pragma comment(lib,"XEngine_Client/XClient_Socket.lib") #pragma comment(lib,"XEngine_Client/XClient_APIHelp.lib") #pragma comment(lib,"XEngine_NetHelp/NetHelp_APIAddr") #pragma comment(lib,"XEngine_HelpComponents/HelpComponents_XLog.lib") #pragma comment(lib,"XEngine_RfcComponents/RfcComponents_HttpProtocol.lib") #pragma comment(lib,"XEngine_RfcComponents/RfcComponents_NatProtocol.lib") #pragma comment(lib,"XEngine_RfcComponents/RfcComponents_NTPProtocol.lib") +#pragma comment(lib,"XEngine_RfcComponents/RfcComponents_DNSProtocol.lib") #pragma comment(lib,"XEngine_SystemSdk/XEngine_SystemApi") #pragma comment(lib,"XEngine_AVCodec/XEngine_AVCollect.lib") #pragma comment(lib,"XEngine_AVCodec/XEngine_VideoCodec.lib") #pragma comment(lib,"XEngine_AVCodec/XEngine_AudioCodec.lib") #pragma comment(lib,"XEngine_AVCodec/XEngine_AVHelp.lib") +#pragma comment(lib,"XEngine_AVCodec/XEngine_AVFormat.lib") +#pragma comment(lib,"XEngine_AVCodec/XEngine_AVFilter.lib") #pragma comment(lib,"Ws2_32.lib") #pragma comment(lib,"Dbghelp.lib") #ifdef _DEBUG #ifdef _M_X64 #pragma comment(lib,"../../x64/Debug/XEngine_InfoReport.lib") +#pragma comment(lib,"../../x64/Debug/XEngine_Verification.lib") #pragma comment(lib,"../../x64/Debug/XEngine_APIModuleIPMac.lib") #pragma comment(lib,"../../x64/Debug/XEngine_APIModulePhone.lib") #pragma comment(lib,"../../x64/Debug/XEngine_ModuleConfigure.lib") @@ -178,6 +194,7 @@ extern XENGINE_DEAMONAPPLIST st_DeamonAppConfig; #pragma comment(lib,"../../x64/Debug/XEngine_ModulePlugin.lib") #elif _M_ARM64 #pragma comment(lib,"../../ARM64/Debug/XEngine_InfoReport.lib") +#pragma comment(lib,"../../ARM64/Debug/XEngine_Verification.lib") #pragma comment(lib,"../../ARM64/Debug/XEngine_APIModuleIPMac.lib") #pragma comment(lib,"../../ARM64/Debug/XEngine_APIModulePhone.lib") #pragma comment(lib,"../../ARM64/Debug/XEngine_ModuleConfigure.lib") @@ -188,6 +205,7 @@ extern XENGINE_DEAMONAPPLIST st_DeamonAppConfig; #pragma comment(lib,"../../ARM64/Debug/XEngine_ModulePlugin.lib") #elif _M_IX86 #pragma comment(lib,"../../Debug/XEngine_InfoReport.lib") +#pragma comment(lib,"../../Debug/XEngine_Verification.lib") #pragma comment(lib,"../../Debug/XEngine_APIModuleIPMac.lib") #pragma comment(lib,"../../Debug/XEngine_APIModulePhone.lib") #pragma comment(lib,"../../Debug/XEngine_ModuleConfigure.lib") @@ -200,6 +218,7 @@ extern XENGINE_DEAMONAPPLIST st_DeamonAppConfig; #else #ifdef _M_X64 #pragma comment(lib,"../../x64/Release/XEngine_InfoReport.lib") +#pragma comment(lib,"../../x64/Release/XEngine_Verification.lib") #pragma comment(lib,"../../x64/Release/XEngine_APIModuleIPMac.lib") #pragma comment(lib,"../../x64/Release/XEngine_APIModulePhone.lib") #pragma comment(lib,"../../x64/Release/XEngine_ModuleConfigure.lib") @@ -210,6 +229,7 @@ extern XENGINE_DEAMONAPPLIST st_DeamonAppConfig; #pragma comment(lib,"../../x64/Release/XEngine_ModulePlugin.lib") #elif _M_ARM64 #pragma comment(lib,"../../ARM64/Release/XEngine_InfoReport.lib") +#pragma comment(lib,"../../ARM64/Release/XEngine_Verification.lib") #pragma comment(lib,"../../ARM64/Release/XEngine_APIModuleIPMac.lib") #pragma comment(lib,"../../ARM64/Release/XEngine_APIModulePhone.lib") #pragma comment(lib,"../../ARM64/Release/XEngine_ModuleConfigure.lib") @@ -220,6 +240,7 @@ extern XENGINE_DEAMONAPPLIST st_DeamonAppConfig; #pragma comment(lib,"../../ARM64/Release/XEngine_ModulePlugin.lib") #elif _M_IX86 #pragma comment(lib,"../../Release/XEngine_InfoReport.lib") +#pragma comment(lib,"../../Release/XEngine_Verification.lib") #pragma comment(lib,"../../Release/XEngine_APIModuleIPMac.lib") #pragma comment(lib,"../../Release/XEngine_APIModulePhone.lib") #pragma comment(lib,"../../Release/XEngine_ModuleConfigure.lib") diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp index c163c9f5..9aad8f3c 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp @@ -16,6 +16,8 @@ XHANDLE xhLog = NULL; //HTTP服务器 XHANDLE xhHTTPSocket = NULL; XHANDLE xhRFCSocket = NULL; +XHANDLE xhNTPSocket = NULL; +XHANDLE xhDNSSocket = NULL; XHANDLE xhHTTPHeart = NULL; XHANDLE xhHTTPPacket = NULL; XHANDLE xhHTTPPool = NULL; @@ -24,6 +26,7 @@ XHANDLE xhMemPool = NULL; unique_ptr pSTDThread_Deamon = NULL; //配置文件 XENGINE_SERVICECONFIG st_ServiceConfig; +XENGINE_DNSINFO st_DNSConfig; XENGINE_DEAMONAPPLIST st_DeamonAppConfig; void ServiceApp_Stop(int signo) @@ -35,6 +38,8 @@ void ServiceApp_Stop(int signo) //销毁HTTP资源 NetCore_TCPXCore_DestroyEx(xhHTTPSocket); NetCore_UDPXCore_DestroyEx(xhRFCSocket); + NetCore_UDPXCore_DestroyEx(xhNTPSocket); + NetCore_UDPXCore_DestroyEx(xhDNSSocket); SocketOpt_HeartBeat_DestoryEx(xhHTTPHeart); HttpProtocol_Server_DestroyEx(xhHTTPPacket); ManagePool_Thread_NQDestroy(xhHTTPPool); @@ -55,6 +60,7 @@ void ServiceApp_Stop(int signo) ModulePlugin_Loader_Destory(); ModuleHelp_P2PClient_Destory(); ModuleHelp_ImageGet_TextDestory(); + ModuleHelp_DNSAddr_Destroy(); //销毁日志资源 HelpComponents_XLog_Destroy(xhLog); //销毁线程 @@ -147,7 +153,6 @@ int main(int argc, char** argv) THREADPOOL_PARAMENT** ppSt_ListHTTPParam; memset(&st_ServiceConfig, '\0', sizeof(XENGINE_SERVICECONFIG)); - //初始化参数 if (!XEngine_Configure_Parament(argc, argv)) { @@ -216,10 +221,10 @@ int main(int argc, char** argv) xhMemPool = ManagePool_Memory_Create(); if (NULL == xhMemPool) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化内存池失败,错误:%lX"), ManagePool_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化内存池失败,错误:%lX"), ManagePool_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化内存池成功")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化内存池成功")); if (st_ServiceConfig.st_XImageText.bEnable) { @@ -365,6 +370,47 @@ int main(int argc, char** argv) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,RFC服务没有被启用")); } + if (st_ServiceConfig.nNTPPort > 0) + { + //网络 + xhNTPSocket = NetCore_UDPXCore_StartEx(st_ServiceConfig.nNTPPort, st_ServiceConfig.st_XMax.nIOThread); + if (NULL == xhNTPSocket) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,启动NTP网络服务器失败,端口:%d,错误:%lX"), st_ServiceConfig.nNTPPort, NetCore_GetLastError()); + goto XENGINE_SERVICEAPP_EXIT; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动NTP网络服务器成功,NTP端口:%d,IO:%d"), st_ServiceConfig.nNTPPort, st_ServiceConfig.st_XMax.nIOThread); + NetCore_UDPXCore_RegisterCallBackEx(xhNTPSocket, Network_Callback_NTPRecv); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,注册NTP网络事件成功")); + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,NTP服务没有被启用")); + } + if (st_ServiceConfig.nDNSPort > 0) + { + //网络 + xhDNSSocket = NetCore_UDPXCore_StartEx(st_ServiceConfig.nDNSPort, st_ServiceConfig.st_XMax.nIOThread); + if (NULL == xhDNSSocket) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,启动DNS网络服务器失败,端口:%d,错误:%lX"), st_ServiceConfig.nDNSPort, NetCore_GetLastError()); + goto XENGINE_SERVICEAPP_EXIT; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动DNS网络服务器成功,DNS端口:%d,IO:%d"), st_ServiceConfig.nDNSPort, st_ServiceConfig.st_XMax.nIOThread); + NetCore_UDPXCore_RegisterCallBackEx(xhDNSSocket, Network_Callback_DNSRecv); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,注册DNS网络事件成功")); + + if (!ModuleHelp_DNSAddr_Init(&st_DNSConfig)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化DNS配置帮助函数库失败,错误:%lX"), ModuleHelp_GetLastError()); + goto XENGINE_SERVICEAPP_EXIT; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化DNS配置帮助函数库成功,备用DNS服务个数:%d,配置DNS地址:%d"), st_DNSConfig.stl_ListDNSList.size(), st_DNSConfig.stl_ListDNSServer.size()); + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,DNS服务没有被启用")); + } //初始化P2P if (st_ServiceConfig.st_XTime.nP2PTimeOut > 0) { @@ -420,15 +466,17 @@ int main(int argc, char** argv) } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化插件系统成功,开始加载插件")); //枚举插件 + int nListCount = 0; int nLibCount = 0; XCHAR** pptszListFile; - SystemApi_File_EnumFileA(st_ServiceConfig.st_XPlugin.tszLibPlugin, &pptszListFile, &nLibCount, false, 1); - for (int i = 0; i < nLibCount; i++) + SystemApi_File_EnumFileA(st_ServiceConfig.st_XPlugin.tszLibPlugin, &pptszListFile, &nListCount, false, 1); + for (int i = 0; i < nListCount; i++) { XCHAR tszFileExt[64] = {}; BaseLib_String_GetFileAndPath(pptszListFile[i], NULL, NULL, NULL, tszFileExt); if (0 == _tcsxnicmp(tszFileExt, _X("dll"), 3) || 0 == _tcsxnicmp(tszFileExt, _X("so"), 2) || 0 == _tcsxnicmp(tszFileExt, _X("dylib"), 5)) { + nLibCount++; //加载插件 if (ModulePlugin_Loader_Insert(pptszListFile[i], 0, &st_PluginParam)) { @@ -436,36 +484,38 @@ int main(int argc, char** argv) XCHAR tszModuleAuthor[64] = {}; XCHAR tszModuleVer[64] = {}; ModulePlugin_Loader_GetForModule(pptszListFile[i], tszModuleName, tszModuleVer, tszModuleAuthor); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,加载Lib模块插件中,当前第:%d 个加载成功,路径:%s,方法名:%s,作者:%s,版本:V%s"), i, pptszListFile[i], tszModuleName, tszModuleAuthor, tszModuleVer); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,加载Lib模块插件中,当前第:%d 个加载成功,路径:%s,方法名:%s,作者:%s,版本:V%s"), nLibCount, pptszListFile[i], tszModuleName, tszModuleAuthor, tszModuleVer); } else { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,加载Lib模块插件中,当前第:%d 个加载失败,路径:%s,错误:%lX"), i, pptszListFile[i], ModulePlugin_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,加载Lib模块插件中,当前第:%d 个加载失败,路径:%s,错误:%lX"), nLibCount, pptszListFile[i], ModulePlugin_GetLastError()); } } } - BaseLib_Memory_Free((XPPPMEM)&pptszListFile, nLibCount); + BaseLib_Memory_Free((XPPPMEM)&pptszListFile, nListCount); #if (1 == _XENGINE_BUILD_SWITCH_LUA) + nListCount = 0; int nLuaCount = 0; XCHAR tszFileExt[64] = {}; - SystemApi_File_EnumFileA(st_ServiceConfig.st_XPlugin.tszLuaPlugin, &pptszListFile, &nLuaCount, false, 1); - for (int i = 0; i < nLuaCount; i++) + SystemApi_File_EnumFileA(st_ServiceConfig.st_XPlugin.tszLuaPlugin, &pptszListFile, &nListCount, false, 1); + for (int i = 0; i < nListCount; i++) { BaseLib_String_GetFileAndPath(pptszListFile[i], NULL, NULL, NULL, tszFileExt); if (0 == _tcsxnicmp(tszFileExt, _X("lua"), 3)) { + nLuaCount++; if (ModulePlugin_Loader_Insert(pptszListFile[i], 1, &st_PluginParam)) { XCHAR tszModuleName[128] = {}; XCHAR tszModuleAuthor[64] = {}; XCHAR tszModuleVer[64] = {}; ModulePlugin_Loader_GetForModule(pptszListFile[i], tszModuleName, tszModuleVer, tszModuleAuthor); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,加载Lua模块插件中,当前第:%d 个加载成功,路径:%s,方法名:%s,作者:%s,版本:V%s"), i, pptszListFile[i], tszModuleName, tszModuleAuthor, tszModuleVer); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,加载Lua模块插件中,当前第:%d 个加载成功,路径:%s,方法名:%s,作者:%s,版本:V%s"), nLuaCount, pptszListFile[i], tszModuleName, tszModuleAuthor, tszModuleVer); } else { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,加载Lua模块插件中,当前第:%d 个加载失败,路径:%s,错误:%lX"), i, pptszListFile[i], ModulePlugin_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,加载Lua模块插件中,当前第:%d 个加载失败,路径:%s,错误:%lX"), nLuaCount, pptszListFile[i], ModulePlugin_GetLastError()); } } } @@ -507,6 +557,15 @@ int main(int argc, char** argv) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,数据查询服务没有启用")); } + + if (st_ServiceConfig.st_XVerifcation.bEnable) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启用HTTP验证,验证模式为:%d"), st_ServiceConfig.st_XVerifcation.nVType); + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,数据查询服务没有启用")); + } #ifndef _DEBUG //发送信息报告 if (st_ServiceConfig.st_XReport.bEnable && !bIsTest) @@ -552,6 +611,8 @@ int main(int argc, char** argv) //销毁HTTP资源 NetCore_TCPXCore_DestroyEx(xhHTTPSocket); NetCore_UDPXCore_DestroyEx(xhRFCSocket); + NetCore_UDPXCore_DestroyEx(xhNTPSocket); + NetCore_UDPXCore_DestroyEx(xhDNSSocket); SocketOpt_HeartBeat_DestoryEx(xhHTTPHeart); HttpProtocol_Server_DestroyEx(xhHTTPPacket); ManagePool_Thread_NQDestroy(xhHTTPPool); @@ -572,6 +633,7 @@ int main(int argc, char** argv) ModulePlugin_Loader_Destory(); ModuleHelp_P2PClient_Destory(); ModuleHelp_ImageGet_TextDestory(); + ModuleHelp_DNSAddr_Destroy(); //销毁日志资源 HelpComponents_XLog_Destroy(xhLog); //销毁线程 diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj index df2b6acf..55e051f9 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj @@ -250,6 +250,7 @@ + @@ -281,6 +282,7 @@ + diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj.filters b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj.filters index c19b0381..aab67b73 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj.filters +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj.filters @@ -117,6 +117,9 @@ 源文件\XEngine_TaskGet + + 源文件\XEngine_TaskRfc + @@ -206,5 +209,8 @@ 头文件 + + 头文件\XEngine_TaskRfc + \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_MemoryPool.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_MemoryPool.h index ab2f7b59..55f37996 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_MemoryPool.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_MemoryPool.h @@ -19,7 +19,6 @@ class CXEngine_MemoryPoolEx if (NULL == lPtr) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ALERT, _X("内存池分配失败,系统面临崩溃!")); - return; } } ~CXEngine_MemoryPoolEx() diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Network.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Network.cpp index 129d1714..c5526ac2 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Network.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Network.cpp @@ -44,10 +44,14 @@ void XCALLBACK Network_Callback_RFCRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, //STUN消息的类型字段(前两位为00)以及魔术cookie字段 RFCTask_Stun_Parse(lpszClientAddr, lpszMSGBuffer, nMSGLen); } - else if (nMSGLen == 48) - { - RFCTask_NTP_Parse(lpszClientAddr, lpszMSGBuffer, nMSGLen); - } +} +void XCALLBACK Network_Callback_NTPRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszMSGBuffer, int nMSGLen, XPVOID lParam) +{ + RFCTask_NTP_Parse(lpszClientAddr, lpszMSGBuffer, nMSGLen); +} +void XCALLBACK Network_Callback_DNSRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszMSGBuffer, int nMSGLen, XPVOID lParam) +{ + RFCTask_DNS_Parse(lpszClientAddr, lpszMSGBuffer, nMSGLen); } //////////////////////////////////////////////////////////////////////////网络IO关闭操作 void XEngine_Network_Close(LPCXSTR lpszClientAddr, bool bHeart) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Network.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Network.h index 4833db6d..0eaf830c 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Network.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Network.h @@ -17,6 +17,8 @@ void XCALLBACK Network_Callback_HTTPLeave(LPCXSTR lpszClientAddr, XSOCKET hSocke void XCALLBACK Network_Callback_HTTPHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); //RFC相关 void XCALLBACK Network_Callback_RFCRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszMSGBuffer, int nMSGLen, XPVOID lParam); +void XCALLBACK Network_Callback_NTPRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszMSGBuffer, int nMSGLen, XPVOID lParam); +void XCALLBACK Network_Callback_DNSRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszMSGBuffer, int nMSGLen, XPVOID lParam); //关闭与发送 void XEngine_Network_Close(LPCXSTR lpszClientAddr, bool bHeart); bool XEngine_Network_Send(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_BackService.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_BackService.cpp index a6738496..7ef2024d 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_BackService.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_BackService.cpp @@ -1,35 +1,55 @@ #include "../XEngine_Hdr.h" static bool bRecord = false; +static XHANDLE xhVideo = NULL; +static XHANDLE xhAudio = NULL; static XHANDLE xhSound = NULL; static XHANDLE xhScreen = NULL; -static XHANDLE xhStream = NULL; +static XHANDLE xhPacket = NULL; static XHANDLE xhAudioFifo = NULL; +static XHANDLE xhFilter = 0; -void XCALLBACK HTTPTask_TaskPost_CBVideo(uint8_t* ptszAVBuffer, int nAVLen, AVCOLLECT_TIMEINFO* pSt_TimeInfo, XPVOID lParam) +void XCALLBACK HTTPTask_TaskPost_CBVideo(AVCODEC_VIDEO_MSGBUFFER* pSt_MSGBuffer, XPVOID lParam) { - if (!XClient_StreamPush_LiveVideo(xhStream, ptszAVBuffer, nAVLen)) + int nListCount = 0; + AVCODEC_VIDEO_MSGBUFFER** ppSt_MSGBuffer; + pSt_MSGBuffer->st_TimeStamp = {}; + VideoCodec_Stream_EnCodec(xhVideo, pSt_MSGBuffer, &ppSt_MSGBuffer, &nListCount); + for (int i = 0; i < nListCount; i++) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("屏幕采集器,推流编码失败,需要关闭推流服务,错误码:%lX"), StreamClient_GetLastError()); + AVFormat_Packet_StreamWrite(xhPacket, 0, ppSt_MSGBuffer[i]->st_MSGBuffer.unData.ptszMSGBuffer, ppSt_MSGBuffer[i]->st_MSGBuffer.nMSGLen[0], &ppSt_MSGBuffer[i]->st_TimeStamp); + BaseLib_Memory_MSGFree(&ppSt_MSGBuffer[i]->st_MSGBuffer); } + BaseLib_Memory_Free((XPPPMEM)&ppSt_MSGBuffer, nListCount); } -void XCALLBACK HTTPTask_TaskPost_CBAudio(uint8_t* ptszAVBuffer, int nAVLen, AVCOLLECT_TIMEINFO* pSt_TimeInfo, XPVOID lParam) +void XCALLBACK HTTPTask_TaskPost_CBAudio(AVCODEC_AUDIO_MSGBUFFER* pSt_MSGBuffer, XPVOID lParam) { - if (AudioCodec_Help_FifoSend(xhAudioFifo, (LPCXSTR)ptszAVBuffer, nAVLen)) + int nListCount = 0; + AVCODEC_AUDIO_MSGBUFFER** ppSt_MSGBuffer; + AVFilter_Audio_Cvt(xhFilter, pSt_MSGBuffer, &ppSt_MSGBuffer, &nListCount); + for (int i = 0; i < nListCount; i++) { + AudioCodec_Help_FifoSend(xhAudioFifo, ppSt_MSGBuffer[i]); while (true) { - XBYTE tszAVBuffer[8192] = {}; - if (!AudioCodec_Help_FifoRecv(xhAudioFifo, tszAVBuffer, &nAVLen)) + AVCODEC_AUDIO_MSGBUFFER st_MSGBuffer = {}; + if (!AudioCodec_Help_FifoRecv(xhAudioFifo, &st_MSGBuffer)) { break; } - if (!XClient_StreamPush_LiveAudio(xhStream, tszAVBuffer, nAVLen)) + int nAudioCount = 0; + AVCODEC_AUDIO_MSGBUFFER** ppSt_AudioBuffer; + AudioCodec_Stream_EnCodec(xhAudio, &st_MSGBuffer, &ppSt_AudioBuffer, &nAudioCount); + for (int j = 0; j < nAudioCount; j++) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("音频采集器,推流编码失败,需要关闭推流服务,错误码:%lX"), StreamClient_GetLastError()); + AVFormat_Packet_StreamWrite(xhPacket, 1, ppSt_AudioBuffer[j]->st_MSGBuffer.unData.ptszMSGArray[0], ppSt_AudioBuffer[j]->st_MSGBuffer.nMSGLen[0], &ppSt_AudioBuffer[j]->st_TimeStamp); + BaseLib_Memory_MSGFree(&ppSt_AudioBuffer[j]->st_MSGBuffer); } + BaseLib_Memory_Free((XPPPMEM)&ppSt_AudioBuffer, nAudioCount); } + BaseLib_Memory_MSGFree(&ppSt_MSGBuffer[i]->st_MSGBuffer); } + BaseLib_Memory_Free((XPPPMEM)&ppSt_MSGBuffer, nListCount); } bool HTTPTask_TaskPost_BackService(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, int nType) @@ -47,34 +67,6 @@ bool HTTPTask_TaskPost_BackService(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer st_HDRParam.nHttpCode = 200; //HTTP CODE码 st_HDRParam.bIsClose = true; //收到回复后就关闭 - - if (st_ServiceConfig.st_XVerifcation.st_VerSwitch.bBackService) - { - XCHAR tszUserName[XPATH_MAX]; - XCHAR tszUserPass[XPATH_MAX]; - - memset(tszUserName, '\0', sizeof(tszUserName)); - memset(tszUserPass, '\0', sizeof(tszUserPass)); - - ModuleProtocol_Parse_Verifcation(lpszMsgBuffer, nMsgLen, tszUserName, tszUserPass); - - if (0 != _tcsxnicmp(st_ServiceConfig.st_XVerifcation.tszUserName, tszUserName, _tcsxlen(st_ServiceConfig.st_XVerifcation.tszUserName))) - { - st_HDRParam.nHttpCode = 400; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求后台协议失败,用户验证失败,用户名错误,提供的用户名:%s"), lpszClientAddr, tszUserName); - return false; - } - if (0 != _tcsxnicmp(st_ServiceConfig.st_XVerifcation.tszUserPass, tszUserPass, _tcsxlen(st_ServiceConfig.st_XVerifcation.tszUserPass))) - { - st_HDRParam.nHttpCode = 400; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求后台协议失败,解析协议失败,错误码:%lX"), lpszClientAddr, tszUserPass); - return false; - } - } if (!ModuleProtocol_Parse_BackService(lpszMsgBuffer, nMsgLen, tszSrcBuffer, tszDstBuffer, tszAPIBuffer, &nBSType)) { st_HDRParam.nHttpCode = 400; @@ -326,41 +318,6 @@ bool HTTPTask_TaskPost_BackService(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求屏幕录制失败,因为已经在录制中了"), lpszClientAddr); return false; } - XENGINE_PROTOCOL_AVINFO st_AVInfo; - memset(&st_AVInfo, '\0', sizeof(XENGINE_PROTOCOL_AVINFO)); - //启用音频 - if (1 == nBSType) - { -#ifdef _MSC_BUILD - xhSound = AVCollect_Audio_Init("dshow", tszSrcBuffer, HTTPTask_TaskPost_CBAudio); -#elif __linux__ - xhSound = AVCollect_Audio_Init("alsa", tszSrcBuffer, HTTPTask_TaskPost_CBAudio); -#else - xhSound = AVCollect_Audio_Init("avfoundation", tszSrcBuffer, HTTPTask_TaskPost_CBAudio); -#endif - if (NULL == xhSound) - { - st_HDRParam.nHttpCode = 400; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,初始化音频采集器请求失败,错误码:%lX"), lpszClientAddr, AVCollect_GetLastError()); - return false; - } - xhAudioFifo = AudioCodec_Help_FifoInit(ENUM_AVCODEC_AUDIO_SAMPLEFMT_S16, 2); - if (NULL == xhAudioFifo) - { - st_HDRParam.nHttpCode = 400; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,初始化音频采集器请求失败,错误码:%lX"), lpszClientAddr, AudioCodec_GetLastError()); - return false; - } - st_AVInfo.st_AudioInfo.bEnable = true; - AVCollect_Audio_GetInfo(xhSound, &st_AVInfo); - //音频编码参数 - st_AVInfo.st_AudioInfo.enAVCodec = ENUM_XENGINE_AVCODEC_AUDIO_TYPE_AAC; - st_AVInfo.st_AudioInfo.nSampleFmt = ENUM_AVCODEC_AUDIO_SAMPLEFMT_S16; - } //屏幕采集 AVCOLLECT_SCREENINFO st_AVScreen; memset(&st_AVScreen, '\0', sizeof(AVCOLLECT_SCREENINFO)); @@ -384,30 +341,99 @@ bool HTTPTask_TaskPost_BackService(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,屏幕采集器请求失败,错误码:%lX"), lpszClientAddr, AVCollect_GetLastError()); return false; } + xhPacket = AVFormat_Packet_Init(); + if (!AVFormat_Packet_Output(xhPacket, tszAPIBuffer, _X("flv"))) + { + st_HDRParam.nHttpCode = 400; + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam); + XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求屏幕录制失败,推流服务端:%s 连接失败,错误码:%lX"), lpszClientAddr, tszAPIBuffer, AVFormat_GetLastError()); + return false; + } + XHANDLE xhVideoCodec = NULL; + //初始化屏幕编码器 + XENGINE_PROTOCOL_AVINFO st_AVInfo = {}; AVCollect_Video_GetInfo(xhScreen, &st_AVInfo); st_AVInfo.st_VideoInfo.enAVCodec = ENUM_XENGINE_AVCODEC_VIDEO_TYPE_H264; - xhStream = XClient_StreamPush_LiveInit(); - if (NULL == xhStream) + xhVideo = VideoCodec_Stream_EnInit(&st_AVInfo.st_VideoInfo); + if (NULL == xhVideo) { - st_HDRParam.nHttpCode = 400; + st_HDRParam.nHttpCode = 500; HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam); XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,推流:%s 请求失败,错误码:%lX"), lpszClientAddr, tszDstBuffer, StreamClient_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求屏幕录制失败,打开编码器视频编码器失败,错误码:%lX"), lpszClientAddr, VideoCodec_GetLastError()); return false; } + VideoCodec_Stream_GetAVCodec(xhVideo, &xhVideoCodec); + AVFormat_Packet_StreamCreate(xhPacket, xhVideoCodec); + BaseLib_Memory_FreeCStyle((XPPMEM)&xhVideoCodec); + //启用音频 + if (1 == nBSType) + { +#ifdef _MSC_BUILD + xhSound = AVCollect_Audio_Init("dshow", tszSrcBuffer, HTTPTask_TaskPost_CBAudio); +#elif __linux__ + xhSound = AVCollect_Audio_Init("alsa", tszSrcBuffer, HTTPTask_TaskPost_CBAudio); +#else + xhSound = AVCollect_Audio_Init("avfoundation", tszSrcBuffer, HTTPTask_TaskPost_CBAudio); +#endif + if (NULL == xhSound) + { + st_HDRParam.nHttpCode = 400; + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam); + XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,初始化音频采集器请求失败,错误码:%lX"), lpszClientAddr, AVCollect_GetLastError()); + return false; + } + AVCollect_Audio_GetInfo(xhSound, &st_AVInfo); + AVFILTER_AUDIO_INFO st_AudioFilter = {}; + st_AudioFilter.nIndex = 0; + st_AudioFilter.st_AudioInfo = st_AVInfo.st_AudioInfo; + AVCollect_Audio_GetTimeBase(xhSound, &st_AudioFilter.st_AudioTime); + xhFilter = AVFilter_Audio_Init(_X("aresample=44100,aformat=sample_fmts=fltp:channel_layouts=stereo"), &st_AudioFilter); + if (NULL == xhFilter) + { + st_HDRParam.nHttpCode = 400; + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam); + XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,初始化音频滤镜失败,错误码:%lX"), lpszClientAddr, AVFilter_GetLastError()); + return false; + } + st_AVInfo.st_AudioInfo.nSampleRate = 44100; + st_AVInfo.st_AudioInfo.nSampleFmt = ENUM_AVCODEC_AUDIO_SAMPLEFMT_FLTP; + st_AVInfo.st_AudioInfo.enAVCodec = ENUM_XENGINE_AVCODEC_AUDIO_TYPE_AAC; + xhAudio = AudioCodec_Stream_EnInit(&st_AVInfo.st_AudioInfo); + if (NULL == xhAudio) + { + st_HDRParam.nHttpCode = 400; + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam); + XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,初始化音频采集器请求失败,错误码:%lX"), lpszClientAddr, AudioCodec_GetLastError()); + return false; + } + xhAudioFifo = AudioCodec_Help_FifoInit(ENUM_AVCODEC_AUDIO_SAMPLEFMT_FLTP, 2); + if (NULL == xhAudioFifo) + { + st_HDRParam.nHttpCode = 400; + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam); + XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,初始化音频采集器请求失败,错误码:%lX"), lpszClientAddr, AudioCodec_GetLastError()); + return false; + } + XHANDLE xhAudioCodec = NULL; + AudioCodec_Stream_GetAVCodec(xhAudio, &xhAudioCodec); + AVFormat_Packet_StreamCreate(xhPacket, xhAudioCodec); + //使用了滤镜,需要单独设置 + AVCODEC_TIMEBASE st_TimeBase = {}; + st_TimeBase.nDen = 44100; + st_TimeBase.nNum = 1; + AVFormat_Packet_TimeBase(xhPacket, 1, &st_TimeBase); + BaseLib_Memory_FreeCStyle((XPPMEM)&xhAudioCodec); + } bRecord = true; - XClient_StreamPush_LiveOutput(xhStream, tszAPIBuffer, _X("flv")); - XClient_StreamPush_LiveCreate(xhStream, &st_AVInfo); - - AVCODEC_TIMEBASE st_VideoTime = {}; - AVCODEC_TIMEBASE st_AudioTime = {}; - AVCollect_Audio_GetTimeBase(xhSound, &st_AudioTime); - AVCollect_Video_GetTimeBase(xhScreen, &st_VideoTime); - XClient_StreamPush_LiveTime(xhStream, &st_VideoTime, &st_AudioTime); - + AVFormat_Packet_Start(xhPacket); AVCollect_Audio_Start(xhSound); AVCollect_Video_Start(xhScreen); - XClient_StreamPush_LiveWriteHdr(xhStream); HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam); XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,开始屏幕录制,音频:%s,视频:%s 推流:%s 请求成功"), lpszClientAddr, tszSrcBuffer, tszDstBuffer, tszAPIBuffer); @@ -415,16 +441,24 @@ bool HTTPTask_TaskPost_BackService(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer break; case XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_BS_RECORDSTOP: { - if (bRecord) - { - AVCollect_Video_Destory(xhScreen); - AVCollect_Audio_Destory(xhSound); - XClient_StreamPush_LiveClose(xhStream); - xhScreen = NULL; - xhSound = NULL; - xhStream = NULL; - bRecord = false; - } + bRecord = false; + + AVCollect_Video_Destory(xhScreen); + AVCollect_Audio_Destory(xhSound); + + VideoCodec_Stream_Destroy(xhVideo); + AudioCodec_Stream_Destroy(xhAudio); + AudioCodec_Help_FifoClose(xhAudioFifo); + + AVFilter_Audio_Destroy(xhFilter); + + AVFormat_Packet_Stop(xhPacket); + xhScreen = NULL; + xhSound = NULL; + xhVideo = NULL; + xhAudio = NULL; + xhPacket = NULL; + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam); XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,停止屏幕录制推流请求成功"), lpszClientAddr); diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_BackService.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_BackService.h index b97742ba..d47cb876 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_BackService.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_BackService.h @@ -1,5 +1,5 @@ #pragma once -void XCALLBACK HTTPTask_TaskPost_CBVideo(uint8_t* punStringY, int nYLen, uint8_t* punStringU, int nULen, uint8_t* punStringV, int nVLen, AVCOLLECT_TIMEINFO* pSt_TimeInfo, XPVOID lParam); -void XCALLBACK HTTPTask_TaskPost_CBAudio(uint8_t* punStringAudio, int nVLen, AVCOLLECT_TIMEINFO* pSt_TimeInfo, XPVOID lParam); +void XCALLBACK HTTPTask_TaskPost_CBVideo(XENGINE_MSGBUFFER* pSt_MSGBuffer, AVCODEC_TIMESTAMP* pSt_TimeInfo, int nNBSample, int nSampleFmt, XPVOID lParam); +void XCALLBACK HTTPTask_TaskPost_CBAudio(XENGINE_MSGBUFFER* pSt_MSGBuffer, AVCODEC_TIMESTAMP* pSt_TimeInfo, int nNBSample, int nSampleFmt, XPVOID lParam); bool HTTPTask_TaskPost_BackService(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, int nType); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_DTest.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_DTest.cpp index 85ac83ce..75f5e61b 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_DTest.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_DTest.cpp @@ -21,6 +21,6 @@ bool HTTPTask_TastPost_DTest(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam); } XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求数据用例测试成功,请求的大小:%d,请求的类型:%d"), lpszClientAddr, nMsgLen, nType); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求数据用例测试成功,请求的大小:%d,请求的类型:%d,发送的内容:%s"), lpszClientAddr, nMsgLen, nType, lpszMsgBuffer); return true; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_Deamon.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_Deamon.cpp index ec14838b..fee31b09 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_Deamon.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_Deamon.cpp @@ -101,33 +101,6 @@ bool HTTPTask_TaskPost_Deamon(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int st_HDRParam.nHttpCode = 200; //HTTP CODE码 st_HDRParam.bIsClose = true; //收到回复后就关闭 - if (st_ServiceConfig.st_XVerifcation.st_VerSwitch.bDeamon) - { - XCHAR tszUserName[XPATH_MAX]; - XCHAR tszUserPass[XPATH_MAX]; - - memset(tszUserName, '\0', sizeof(tszUserName)); - memset(tszUserPass, '\0', sizeof(tszUserPass)); - - ModuleProtocol_Parse_Verifcation(lpszMsgBuffer, nMsgLen, tszUserName, tszUserPass); - if (0 != _tcsxnicmp(st_ServiceConfig.st_XVerifcation.tszUserName, tszUserName, _tcsxlen(st_ServiceConfig.st_XVerifcation.tszUserName))) - { - st_HDRParam.nHttpCode = 400; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求守护协议失败,用户验证失败,用户名错误,提供的用户名:%s"), lpszClientAddr, tszUserName); - return false; - } - if (0 != _tcsxnicmp(st_ServiceConfig.st_XVerifcation.tszUserPass, tszUserPass, _tcsxlen(st_ServiceConfig.st_XVerifcation.tszUserPass))) - { - st_HDRParam.nHttpCode = 400; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求守护协议失败,解析协议失败,错误码:%lX"), lpszClientAddr, tszUserPass); - return false; - } - } - if (!ModuleProtocol_Parse_Deamon(lpszMsgBuffer, nMsgLen, st_DeamonApp.tszAPPName, st_DeamonApp.tszAPPPath, &st_DeamonApp.nReTime, &st_DeamonApp.nReNumber, &st_DeamonApp.bEnable)) { st_HDRParam.nHttpCode = 400; diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskRfc/RFCTask_Dns.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskRfc/RFCTask_Dns.cpp new file mode 100644 index 00000000..aab57407 --- /dev/null +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskRfc/RFCTask_Dns.cpp @@ -0,0 +1,93 @@ +#include "../XEngine_Hdr.h" + +bool RFCTask_DNS_Parse(LPCXSTR lpszClientAddr, LPCXSTR lpszMSGBuffer, int nMSGLen) +{ + bool bQuery = false; + int nSDLen = 0; + int nRequestID = 0; + XCHAR tszSDBuffer[4096] = {}; + XENGINE_DNSPROTOCOL st_DNSRequest = {}; + + if (!DNSProtocol_Parse_Header(lpszMSGBuffer, nMSGLen, &nRequestID, &st_DNSRequest)) + { + DNSProtocol_Packet_Error(tszSDBuffer, &nSDLen, nRequestID, &st_DNSRequest, XENGINE_DNSPROTOCOL_QUERY_QUESTION_STATUS_FORMAT); + NetCore_UDPXCore_SendEx(xhDNSSocket, lpszClientAddr, tszSDBuffer, nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("DNS客户端:%s,发送的DNS协议不正确"), lpszClientAddr); + return false; + } + + if (XENGINE_DNSPROTOCOL_QUERY_QUESTION_TYPE_A == st_DNSRequest.st_QueryInfo.nNameType) + { + int nListCount = 0; + XENGINE_DNSADDRINFO** ppSt_DNSAddr; + if (ModuleHelp_DNSAddr_FindA(st_DNSRequest.tszNameStr, &ppSt_DNSAddr, &nListCount)) + { + //找到A记录 + XENGINE_DNSPROTOCOL** ppSt_DNSAnswer; + BaseLib_Memory_Malloc((XPPPMEM)&ppSt_DNSAnswer, nListCount, sizeof(XENGINE_DNSPROTOCOL)); + for (int i = 0; i < nListCount; i++) + { + ppSt_DNSAnswer[i]->nTTL = ppSt_DNSAddr[i]->nTTL; + ppSt_DNSAnswer[i]->st_QueryInfo.nNameType = ppSt_DNSAddr[i]->nType; + ppSt_DNSAnswer[i]->st_QueryInfo.nNameClass = XENGINE_DNSPROTOCOL_QUERY_QUESTION_CLASS_IN; + _tcsxcpy(ppSt_DNSAnswer[i]->tszNameStr, ppSt_DNSAddr[i]->tszDNSName); + _tcsxcpy(ppSt_DNSAnswer[i]->tszAddrStr, ppSt_DNSAddr[i]->tszDNSAddr); + } + DNSProtocol_Packet_REPHeader(tszSDBuffer, &nSDLen, nRequestID, &st_DNSRequest, &ppSt_DNSAnswer, nListCount); + BaseLib_Memory_Free((XPPPMEM)&ppSt_DNSAnswer, nListCount); + bQuery = true; + } + } + else if (XENGINE_DNSPROTOCOL_QUERY_QUESTION_TYPE_PTR == st_DNSRequest.st_QueryInfo.nNameType) + { + int nIPVer = 0; + int nListCount = 1; + XCHAR tszIPStr[256] = {}; + XENGINE_DNSADDRINFO st_DNSAddr = {}; + + DNSProtocol_Help_PTRStr(st_DNSRequest.tszNameStr, tszIPStr, &nIPVer); + if (ModuleHelp_DNSAddr_FindPtr(tszIPStr, &st_DNSAddr)) + { + XENGINE_DNSPROTOCOL** ppSt_DNSAnswer; + BaseLib_Memory_Malloc((XPPPMEM)&ppSt_DNSAnswer, nListCount, sizeof(XENGINE_DNSPROTOCOL)); + + ppSt_DNSAnswer[0]->nTTL = st_DNSAddr.nTTL; + ppSt_DNSAnswer[0]->st_QueryInfo.nNameType = XENGINE_DNSPROTOCOL_QUERY_QUESTION_TYPE_PTR; + ppSt_DNSAnswer[0]->st_QueryInfo.nNameClass = XENGINE_DNSPROTOCOL_QUERY_QUESTION_CLASS_IN; + _tcsxcpy(ppSt_DNSAnswer[0]->tszNameStr, st_DNSAddr.tszDNSAddr); + _tcsxcpy(ppSt_DNSAnswer[0]->tszAddrStr, st_DNSAddr.tszDNSName); + + DNSProtocol_Packet_REPHeader(tszSDBuffer, &nSDLen, nRequestID, &st_DNSRequest, &ppSt_DNSAnswer, nListCount); + BaseLib_Memory_Free((XPPPMEM)&ppSt_DNSAnswer, nListCount); + bQuery = true; + } + } + + if (!bQuery) + { + //选择一个备用DNS服务器 + XCHAR tszIPServer[128] = {}; + ModuleHelp_DNSAddr_Select(tszIPServer); + //创建UDP查询连接 + XSOCKET hSocket = XSOCKET_ERROR; + XClient_UDPSelect_Create(&hSocket); + XClient_UDPSelect_Bind(hSocket, 12331); + XClient_UDPSelect_Connect(hSocket, tszIPServer, 53); + XClient_UDPSelect_SendMsg(hSocket, lpszMSGBuffer, nMSGLen); + + if (!BaseLib_IO_Select(hSocket, true, 2000)) + { + DNSProtocol_Packet_Error(tszSDBuffer, &nSDLen, nRequestID, &st_DNSRequest, XENGINE_DNSPROTOCOL_QUERY_QUESTION_STATUS_SERVFAIL); + NetCore_UDPXCore_SendEx(xhDNSSocket, lpszClientAddr, tszSDBuffer, nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("DNS客户端:%s,请求备用服务器数据失败,数据超时"), lpszClientAddr); + return false; + } + nSDLen = 4096; + XClient_UDPSelect_RecvMsg(hSocket, tszSDBuffer, &nSDLen); + XClient_UDPSelect_Close(hSocket); + } + + NetCore_UDPXCore_SendEx(xhDNSSocket, lpszClientAddr, tszSDBuffer, nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("DNS客户端:%s,发送DNS协议给服务器,处理成功"), lpszClientAddr); + return true; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskRfc/RFCTask_Dns.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskRfc/RFCTask_Dns.h new file mode 100644 index 00000000..3c2477e1 --- /dev/null +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskRfc/RFCTask_Dns.h @@ -0,0 +1,3 @@ +#pragma once + +bool RFCTask_DNS_Parse(LPCXSTR lpszClientAddr, LPCXSTR lpszMSGBuffer, int nMSGLen); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskRfc/RFCTask_Ntp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskRfc/RFCTask_Ntp.cpp index 78971824..795245d0 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskRfc/RFCTask_Ntp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskRfc/RFCTask_Ntp.cpp @@ -2,7 +2,6 @@ bool RFCTask_NTP_Parse(LPCXSTR lpszClientAddr, LPCXSTR lpszMSGBuffer, int nMSGLen) { -#if (XENGINE_VERSION_KERNEL >= 8) && (XENGINE_VERSION_MAIN >= 31) int nSDLen = 0; XCHAR tszSDBuffer[4096] = {}; NTPPROTOCOL_TIMEINFO st_TimeRecv = {}; @@ -11,11 +10,8 @@ bool RFCTask_NTP_Parse(LPCXSTR lpszClientAddr, LPCXSTR lpszMSGBuffer, int nMSGLe NTPProtocol_Parse_Header(lpszMSGBuffer, nMSGLen, NULL, NULL, NULL, &st_TimeTras); NTPProtocol_Packet_REPHeader(tszSDBuffer, &nSDLen, NULL, &st_TimeRecv, &st_TimeTras, st_ServiceConfig.tszIPAddr); - NetCore_UDPXCore_SendEx(xhRFCSocket, lpszClientAddr, tszSDBuffer, nSDLen); + NetCore_UDPXCore_SendEx(xhNTPSocket, lpszClientAddr, tszSDBuffer, nSDLen); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("RFC客户端:%s,发送NTP时间同步请求给服务器,处理成功"), lpszClientAddr); -#else - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("RFC客户端:%s,发送NTP时间同步请求给服务器,处理失败,版本不支持"), lpszClientAddr); -#endif return true; } \ No newline at end of file