diff --git a/.github/workflows/RockyArm64_build.yml b/.github/workflows/RockyArm64_build.yml deleted file mode 100644 index 9201285..0000000 --- a/.github/workflows/RockyArm64_build.yml +++ /dev/null @@ -1,78 +0,0 @@ -name: rocky Arm64 build workflows - -on: - push: - branches: - - 'develop' - paths: - - 'XEngine_Source/**' - - 'XEngine_Release/**' - - '.github/**' - -permissions: - contents: read - -jobs: - build: - runs-on: ubuntu-24.04 - env: - IMAGE_NAME: rockylinux/rockylinux:9.5 - - strategy: - fail-fast: false - matrix: - arch: [linux/arm64] - - steps: - # 检出您的主仓库代码 - - name: Checkout main repository code - uses: actions/checkout@v4 - with: - ref: 'develop' - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Build ${{ matrix.arch }} - run: | - docker run --platform ${{ matrix.arch }} --rm \ - -v ${{ github.workspace }}:/workspace \ - -w /workspace ${{ env.IMAGE_NAME }} /bin/sh -c ' - set -e - dnf update -y - dnf install --allowerasing git make g++ wget curl jq unzip -y - - git config --global --add safe.directory /workspace - git submodule init - git submodule update - - 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_9_Arm64.zip - unzip ./XEngine_RockyLinux_9_Arm64.zip -d ./XEngine_RockyLinux_9_Arm64 - cd XEngine_RockyLinux_9_Arm64 - - chmod 777 ./XEngine_LINEnv.sh - ./XEngine_LINEnv.sh -i 0 - - cp -rf ./XEngine_Include /usr/local/include - find ./XEngine_Linux -name "*.so" -exec cp {} /usr/lib64 \; - ldconfig - cd .. - - cd XEngine_Source - make ARCH=Arm64 RELEASE=1 - make FLAGS=InstallAll - make FLAGS=CleanAll - cd .. - - cd XEngine_Release - ./XEngine_XStorageApp -t - chown -R $(id -u):$(id -g) . - chmod -R a+r . ' - - - name: Upload folder as artifact with RockyLinux - uses: actions/upload-artifact@v4 - with: - name: XEngine_XStorageApp-RockyLinux_9_Arm64 - path: XEngine_Release/ - retention-days: 1 diff --git a/.github/workflows/RockyX86_64_build.yml b/.github/workflows/Rocky_build.yml similarity index 63% rename from .github/workflows/RockyX86_64_build.yml rename to .github/workflows/Rocky_build.yml index 5b8fc71..1d14689 100644 --- a/.github/workflows/RockyX86_64_build.yml +++ b/.github/workflows/Rocky_build.yml @@ -1,4 +1,4 @@ -name: rocky x86_64 build workflows +name: rocky build workflows on: push: @@ -14,18 +14,28 @@ permissions: jobs: build: - runs-on: ubuntu-latest + runs-on: ${{ matrix.runner }} container: image: rockylinux/rockylinux:9.5 + options: --platform ${{ matrix.platform }} + strategy: + matrix: + include: + - arch: amd64 + runner: ubuntu-24.04 + platform: linux/amd64 + artifact: x86-64 + - arch: arm64 + runner: ubuntu-24.04-arm + platform: linux/arm64 + artifact: Arm64 steps: - # 检出您的主仓库代码 - name: Checkout main repository code uses: actions/checkout@v4 with: ref: 'develop' - # 检出依赖的xengine仓库到指定的xengine目录 - name: Checkout dependency repository (xengine) uses: actions/checkout@v4 with: @@ -37,28 +47,23 @@ jobs: with: repository: libxengine/XEngine_OPenSource path: XEngine_Source/XEngine_Depend - + + - 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 -y - # 设置依赖库的环境变量 - - name: Set up Dependency rocky linux Environment - run: | - cd libxengine - chmod 777 * - ./XEngine_LINEnv.sh -i 0 + dnf install gcc g++ make git jq unzip wget -y - name: install xengine library - run: | + 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_9_x86-64.zip - unzip ./XEngine_RockyLinux_9_x86-64.zip -d ./XEngine_RockyLinux_9_x86-64 - cd XEngine_RockyLinux_9_x86-64 + wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_RockyLinux_9_${{ matrix.artifact }}.zip + unzip ./XEngine_RockyLinux_9_${{ matrix.artifact }}.zip -d ./XEngine_RockyLinux_9_${{ matrix.artifact }} + cd XEngine_RockyLinux_9_${{ matrix.artifact }} - cp -rf ./XEngine_Include /usr/local/include - find ./XEngine_Linux -name "*.so" -exec cp {} /usr/lib64 \; - ldconfig - + chmod 777 * + ./XEngine_LINEnv.sh -i 3 - name: make run: | cd XEngine_Source @@ -78,6 +83,6 @@ jobs: - name: Upload folder as artifact with RockyLinux uses: actions/upload-artifact@v4 with: - name: XEngine_XStorageApp-RockyLinux_9_x86_64 + name: XEngine_XStorageApp-RockyLinux_9_${{ matrix.artifact }} path: XEngine_Release/ retention-days: 1 diff --git a/.github/workflows/UbuntuArm64_build.yml b/.github/workflows/UbuntuArm64_build.yml deleted file mode 100644 index 628b6ae..0000000 --- a/.github/workflows/UbuntuArm64_build.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: ubuntu Arm64 build workflows - -on: - push: - branches: - - 'develop' - paths: - - 'XEngine_Source/**' - - 'XEngine_Release/**' - - '.github/**' - -jobs: - build: - runs-on: ubuntu-24.04 - env: - IMAGE_NAME: ubuntu:24.04 - - strategy: - fail-fast: false - matrix: - arch: [linux/arm64] - - steps: - - name: Checkout main repository code - uses: actions/checkout@v4 - with: - ref: 'develop' - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Build ${{ matrix.arch }} - run: | - docker run --platform ${{ matrix.arch }} --rm \ - -v ${{ github.workspace }}:/workspace \ - -w /workspace ${{ env.IMAGE_NAME }} /bin/sh -c ' - set -e - apt update -y - apt install git make g++ wget curl jq unzip -y - - git config --global --add safe.directory /workspace - git submodule init - git submodule update - - latest_tag=$(curl -s https://api.github.com/repos/libxengine/libxengine/releases/latest | jq -r .tag_name) - wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_UBuntu_24.04_Arm64.zip - unzip ./XEngine_UBuntu_24.04_Arm64.zip -d ./XEngine_UBuntu_24.04_Arm64 - cd XEngine_UBuntu_24.04_Arm64 - - chmod 777 ./XEngine_LINEnv.sh - ./XEngine_LINEnv.sh -i 0 - - cp -rf ./XEngine_Include /usr/local/include - find ./XEngine_Linux -name "*.so" -exec cp {} /usr/local/lib \; - ldconfig - cd .. - - cd XEngine_Source - make ARCH=Arm64 RELEASE=1 - make FLAGS=InstallAll - make FLAGS=CleanAll - cd .. - - cd XEngine_Release - ./XEngine_XStorageApp -t - chown -R $(id -u):$(id -g) . - chmod -R a+r . ' - - - name: Upload folder as artifact with ubuntu Arm64 - uses: actions/upload-artifact@v4 - with: - name: XEngine_XStorageApp-Ubuntu_24.04_Arm64 - path: XEngine_Release/ - retention-days: 1 \ No newline at end of file diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 1716d18..2c66e5d 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -40,6 +40,9 @@ jobs: git submodule init git submodule update + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV + - name: Set up Dependency Environment run: | cd libxengine diff --git a/.github/workflows/debian_build.yml b/.github/workflows/debian_build.yml new file mode 100644 index 0000000..68e6e17 --- /dev/null +++ b/.github/workflows/debian_build.yml @@ -0,0 +1,85 @@ +name: debian build workflows + +on: + push: + branches: + - 'develop' + paths: + - 'XEngine_Source/**' + - 'XEngine_Release/**' + - '.github/**' + +permissions: + contents: read + +jobs: + build: + runs-on: ${{ matrix.runner }} + container: + image: debian:bookworm + options: --platform ${{ matrix.platform }} + strategy: + matrix: + include: + - arch: amd64 + runner: ubuntu-24.04 + platform: linux/amd64 + artifact: x86-64 + + steps: + - name: Checkout main repository code + uses: actions/checkout@v4 + with: + ref: 'develop' + + - name: Checkout dependency repository (xengine) + uses: actions/checkout@v4 + with: + repository: libxengine/libxengine + path: libxengine + + - name: sub module checkout (opensource) + uses: actions/checkout@v4 + with: + repository: libxengine/XEngine_OPenSource + path: XEngine_Source/XEngine_Depend + + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV + + - name: install system package + run: | + apt update -y + apt install gcc g++ make git jq unzip curl 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_Debian_12_${{ matrix.artifact }}.zip + unzip ./XEngine_Debian_12_${{ matrix.artifact }}.zip -d ./XEngine_Debian_12_${{ matrix.artifact }} + cd XEngine_Debian_12_${{ matrix.artifact }} + + chmod 777 * + ./XEngine_LINEnv.sh -i 3 + - name: make + run: | + cd XEngine_Source + make + make FLAGS=InstallAll + make FLAGS=CleanAll + + make RELEASE=1 + make FLAGS=InstallAll + make FLAGS=CleanAll + cd .. + - name: test + run: | + cd XEngine_Release + ./XEngine_XStorageApp -t + + - name: Upload folder as artifact + uses: actions/upload-artifact@v4 + with: + name: XEngine_XStorageApp-Debian_12_x86-64 + path: XEngine_Release/ + retention-days: 1 \ No newline at end of file diff --git a/.github/workflows/fedora_build.yml b/.github/workflows/fedora_build.yml new file mode 100644 index 0000000..8b682f6 --- /dev/null +++ b/.github/workflows/fedora_build.yml @@ -0,0 +1,89 @@ +name: fedora build workflows + +on: + push: + branches: + - 'develop' + paths: + - 'XEngine_Source/**' + - 'XEngine_Release/**' + - '.github/**' + +permissions: + contents: read + +jobs: + build: + runs-on: ${{ matrix.runner }} + container: + image: fedora:${{ matrix.fedora-version }} + options: --platform ${{ matrix.platform }} + strategy: + matrix: + include: + - arch: amd64 + runner: ubuntu-24.04 + platform: linux/amd64 + fedora-version: 42 + artifact: x86-64 + - arch: amd64 + runner: ubuntu-24.04 + platform: linux/amd64 + fedora-version: 41 + artifact: x86-64 + + 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 (opensource) + uses: actions/checkout@v4 + with: + repository: libxengine/XEngine_OPenSource + path: XEngine_Source/XEngine_Depend + + - name: install system package + run: | + dnf update -y + dnf install gcc g++ make git jq unzip wget -y + + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV + + - 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_Fedora_${{ matrix.fedora-version }}_${{ matrix.artifact }}.zip + unzip ./XEngine_Fedora_${{ matrix.fedora-version }}_${{ matrix.artifact }}.zip -d ./XEngine_Fedora_${{ matrix.fedora-version }}_${{ matrix.artifact }} + cd XEngine_Fedora_${{ matrix.fedora-version }}_${{ matrix.artifact }} + + chmod 777 * + ./XEngine_LINEnv.sh -i 3 + - name: make + run: | + cd XEngine_Source + make + make FLAGS=InstallAll + make FLAGS=CleanAll + + make RELEASE=1 + make FLAGS=InstallAll + make FLAGS=CleanAll + cd .. + - name: test + run: | + cd XEngine_Release + ./XEngine_XStorageApp -t + + - name: Upload folder as artifact + uses: actions/upload-artifact@v4 + with: + name: XEngine_XStorageApp-Fedora_${{ matrix.fedora-version }}_${{ matrix.artifact }} + 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 5c9432b..b3e59ec 100644 --- a/.github/workflows/macbuild.yml +++ b/.github/workflows/macbuild.yml @@ -41,7 +41,10 @@ jobs: - name: brew install run: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - + + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV + - name: Set up Dependency x86_64 Environment if: matrix.os == 'macos-13' run: | @@ -51,20 +54,13 @@ jobs: - name: Set up Dependency Arm64 Environment if: matrix.os == 'macos-14' run: | - cd libxengine - chmod 777 * - ./XEngine_LINEnv.sh -i 0 - latest_tag=$(git ls-remote --tags --sort="v:refname" https://github.com/libxengine/libxengine.git | awk '{print $2}' | sed 's/refs\/tags\///' | tail -n 1) - wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_Mac_Arm64.zip unzip ./XEngine_Mac_Arm64.zip -d ./XEngine_Mac_Arm64 cd XEngine_Mac_Arm64 - sudo mkdir -p /usr/local/include - sudo mkdir -p /usr/local/lib - sudo cp -rf ./XEngine_Include /usr/local/include - sudo find ./XEngine_Mac -name "*.dylib" -exec cp {} /usr/local/lib \; + chmod 777 * + ./XEngine_LINEnv.sh -i 3 - name: make debug run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4241540..fe7b00a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,37 +16,37 @@ jobs: with: fetch-depth: 0 - - name: Download x86_64 ubuntubuild + - name: Download ubuntu build uses: dawidd6/action-download-artifact@v6 with: - workflow: ubuntu86_64_build.yml + workflow: ubuntu_build.yml workflow_conclusion: success check_artifacts: false skip_unpack: true if_no_artifact_found: fail path: ./XRelease/ - - name: Download Arm64 ubuntubuild + - name: Download debian build uses: dawidd6/action-download-artifact@v6 with: - workflow: UbuntuArm64_build.yml + workflow: debian_build.yml workflow_conclusion: success check_artifacts: false skip_unpack: true if_no_artifact_found: fail path: ./XRelease/ - - name: Download x86_64 Rockylinux build + - name: Download fedora build uses: dawidd6/action-download-artifact@v6 with: - workflow: RockyX86_64_build.yml + workflow: fedora_build.yml workflow_conclusion: success check_artifacts: false skip_unpack: true if_no_artifact_found: fail path: ./XRelease/ - - name: Download Arm64 Rockylinux build + - name: Download Rocky build uses: dawidd6/action-download-artifact@v6 with: - workflow: RockyArm64_build.yml + workflow: Rocky_build.yml workflow_conclusion: success check_artifacts: false skip_unpack: true diff --git a/.github/workflows/ubuntu86_64_build.yml b/.github/workflows/ubuntu_build.yml similarity index 54% rename from .github/workflows/ubuntu86_64_build.yml rename to .github/workflows/ubuntu_build.yml index 321d54a..2ece2f2 100644 --- a/.github/workflows/ubuntu86_64_build.yml +++ b/.github/workflows/ubuntu_build.yml @@ -1,4 +1,4 @@ -name: ubuntu x86_64 build workflows +name: ubuntu build workflows on: push: @@ -21,16 +21,16 @@ jobs: include: - os: ubuntu-22.04 - os: ubuntu-24.04 + - os: ubuntu-22.04-arm + - os: ubuntu-24.04-arm runs-on: ${{ matrix.os }} steps: - # 检出您的主仓库代码 - name: Checkout main repository code uses: actions/checkout@v4 with: ref: 'develop' - # 检出依赖的xengine仓库到指定的xengine目录 - name: Checkout dependency repository (xengine) uses: actions/checkout@v4 with: @@ -41,28 +41,46 @@ jobs: run: | git submodule init git submodule update + + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV - - name: Set up Dependency ubuntu24.04 Environment + - name: Set up Dependency ubuntu24.04 x86-64 Environment if: matrix.os == 'ubuntu-24.04' run: | cd libxengine chmod 777 * sudo ./XEngine_LINEnv.sh -i 3 - - name: Set up Dependency ubuntu22.04 Environment + - name: Set up Dependency ubuntu22.04 x86-64 Environment if: matrix.os == 'ubuntu-22.04' run: | - cd libxengine - chmod 777 * - sudo ./XEngine_LINEnv.sh -i 0 - latest_tag=$(curl -s https://api.github.com/repos/libxengine/libxengine/releases/latest | jq -r .tag_name) wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_UBuntu_22.04_x86-64.zip unzip ./XEngine_UBuntu_22.04_x86-64.zip -d ./XEngine_UBuntu_22.04_x86-64 cd XEngine_UBuntu_22.04_x86-64 - sudo cp -rf ./XEngine_Include /usr/local/include - sudo find ./XEngine_Linux -name "*.so" -exec cp {} /usr/local/lib \; - sudo ldconfig + chmod 777 * + sudo ./XEngine_LINEnv.sh -i 3 + - name: Set up Dependency ubuntu22.04 Arm64 Environment + if: matrix.os == 'ubuntu-22.04-arm' + 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_UBuntu_22.04_Arm64.zip + unzip ./XEngine_UBuntu_22.04_Arm64.zip -d ./XEngine_UBuntu_22.04_Arm64 + cd XEngine_UBuntu_22.04_Arm64 + + chmod 777 * + sudo ./XEngine_LINEnv.sh -i 3 + - name: Set up Dependency ubuntu24.04 Arm64 Environment + if: matrix.os == 'ubuntu-24.04-arm' + 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_UBuntu_22.04_Arm64.zip + unzip ./XEngine_UBuntu_22.04_Arm64.zip -d ./XEngine_UBuntu_22.04_Arm64 + cd XEngine_UBuntu_22.04_Arm64 + + chmod 777 * + sudo ./XEngine_LINEnv.sh -i 3 - name: make run: | @@ -87,11 +105,24 @@ jobs: name: XEngine_XStorageApp-Ubuntu_22.04_x86_64 path: XEngine_Release/ retention-days: 1 - - name: Upload folder as artifact with ubuntu24.04 if: matrix.os == 'ubuntu-24.04' uses: actions/upload-artifact@v4 with: name: XEngine_XStorageApp-Ubuntu_24.04_x86_64 path: XEngine_Release/ + retention-days: 1 + - name: Upload folder as artifact with ubuntu22.04-arm + if: matrix.os == 'ubuntu-22.04-arm' + uses: actions/upload-artifact@v4 + with: + name: XEngine_XStorageApp-Ubuntu_22.04_Arm64 + path: XEngine_Release/ + retention-days: 1 + - name: Upload folder as artifact with ubuntu24.04-arm + if: matrix.os == 'ubuntu-24.04-arm' + uses: actions/upload-artifact@v4 + with: + name: XEngine_XStorageApp-Ubuntu_24.04_Arm64 + path: XEngine_Release/ retention-days: 1 \ No newline at end of file diff --git a/CHANGELOG b/CHANGELOG index 0c33829..15d9475 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,54 @@ +XEngine_Storage V3.20.0.1001 + +增加:更多的系统发布支持 +增加:webdav没有找到文件的时候响应问题 +增加:webdav用户授权验证 +增加:http hook 验证字段类型 +增加:webdav响应文件锁定类型和创建时间属性 +更新:g++版本 +更新:依赖库 +优化:编译选项 +优化:设置日志级别通过启动命令 +优化:回调发送失败处理 +修改:仅发布版本发送报告 +修改:center请求url方法 +修改:option方法改为get +修改:PROPFIND响应内存时间和大小 +修改:上传下载代码支持指定网络类型了 +修改:上传下载复用消息支持 +修正:http验证函数没有导出 +修正:帮助模块没有错误码的问题 +修正:webdav响应类型错误 +修正:webdav mkloc没有创建目录问题 +修正:webdav名词空间不正确 +修正:webdav空目录处理问题 +删除:http管理接口多余参数 + +added:ci debian and fedora system build support +added:not found file response for web dav +added:user verification for webdav +added:pass authorize type field +added:file lock and create time attribute support for webdav +update:make file g++ version +update:depend library +improved:make file build flags +improved:set log level though start command +improved:cb send get failure process +modify:just release report info +modify:request url method for center +modify:option method name to get +modify:PROPFIND reply contact modify time and size +modify:download and upload support specifies the network type +modify:upload and download method mix support +fixed:http verification function not export +fixed:have no error code export for help module +fixed:webdav response type is incorrect +fixed:webdav mkloc not create dir +fixed:PROPFIND sometime have no name field +fixed:name space is incorrect for web dav +fixed:empty Folders handle incorrect +delete:more parameter for manage and pass +====================================================================================== XEngine_Storage V3.19.0.1001 增加:获取bucket列表信息功能 diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx index 00d5d41..0440d75 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 32ed6d1..79bb112 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 36b24e1..0a4c13f 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -1,84 +1,85 @@ { - "tszIPAddr":"10.0.1.88", - "bDeamon":0, - "nCenterPort":5100, - "nStorageDLPort":5101, - "nStorageUPPort":5102, - "nWebdavPort":5103, - "XMax":{ - "MaxClient":10000, - "MaxQueue":10000, - "IOThread":2, - "CenterThread":2, - "nStorageUPThread":2, - "nStorageDLThread":2, - "nWebdavThread":2 + "tszIPAddr": "10.0.1.88", + "bDeamon": 0, + "nCenterPort": 5100, + "nStorageDLPort": 5101, + "nStorageUPPort": 5102, + "nWebdavPort": 5103, + "XMax": { + "MaxClient": 10000, + "MaxQueue": 10000, + "IOThread": 2, + "CenterThread": 2, + "nStorageUPThread": 2, + "nStorageDLThread": 2, + "nWebdavThread": 2 }, - "XTime":{ - "bHBTime":0, - "nDBMonth":3, - "nTimeCheck":3, - "nCenterTimeOut":5, - "nStorageTimeOut":5, - "nWebdavTimeOut":5 + "XTime": { + "bHBTime": 0, + "nDBMonth": 3, + "nTimeCheck": 3, + "nCenterTimeOut": 5, + "nStorageTimeOut": 5, + "nWebdavTimeOut": 5 }, - "XLog":{ - "LogFile":"./XEngine_XLog/XEngine_StorageApp.log", - "MaxSize":1024000, - "MaxCount":10, - "LogLeave":32, - "LogType":17 + "XLog": { + "LogFile": "./XEngine_XLog/XEngine_StorageApp.log", + "MaxSize": 1024000, + "MaxCount": 10, + "LogLeave": 32, + "LogType": 17 }, - "XSql":{ - "SQLEnable":false, - "SQLAddr":"192.168.1.10", - "SQLPort":3306, - "SQLUser":"root", - "SQLPass":"123123aa" + "XSql": { + "SQLEnable": false, + "SQLAddr": "192.168.1.10", + "SQLPort": 3306, + "SQLUser": "root", + "SQLPass": "123123aa" }, - "XStorage":{ - "bResumable":true, - "bUPHash":false, - "nHashMode":2 + "XStorage": { + "bResumable": true, + "bUPHash": false, + "bWDLocation": false, + "nHashMode": 2 }, - "XProxy":{ - "bUPPass":false, - "bDLPass":false, - "bAuthPass":false, - "tszUPPass":"http://192.168.1.7:5200/Api/Pass/UPFile", - "tszDLPass":"http://192.168.1.7:5200/Api/Pass/UPFile", - "tszAuthPass":"" + "XProxy": { + "bUPPass": false, + "bDLPass": false, + "bAuthPass": false, + "tszUPPass": "http://192.168.1.7:5200/Api/Pass/UPFile", + "tszDLPass": "http://192.168.1.7:5200/Api/Pass/UPFile", + "tszAuthPass": "" }, - "XLimit":{ - "bLimitMode":true, - "nMaxUPLoad":0, - "nMaxDNLoad":4096000, - "nMaxUPConnect":2, - "nMaxDNConnect":2 + "XLimit": { + "bLimitMode": true, + "nMaxUPLoad": 0, + "nMaxDNLoad": 4096000, + "nMaxUPConnect": 2, + "nMaxDNConnect": 2 }, - "XP2xp":{ - "bEnable":true, - "nTime":2, - "nRVPort":15000, - "nSDPort":15001 + "XP2xp": { + "bEnable": true, + "nTime": 2, + "nRVPort": 15000, + "nSDPort": 15001 }, - "XCert":{ - "bDLEnable":false, - "bUPEnable":false, - "bCHEnable":false, - "bWDEnable":false, - "tszCertChain":"./XEngine_Cert/server.crt", - "tszCertServer":"", - "tszCertKey":"./XEngine_Cert/server.key" + "XCert": { + "bDLEnable": false, + "bUPEnable": false, + "bCHEnable": false, + "bWDEnable": false, + "tszCertChain": "./XEngine_Cert/server.crt", + "tszCertServer": "", + "tszCertKey": "./XEngine_Cert/server.key" }, - "XReport":{ - "bEnable":true, - "tszServiceName":"XEngine_Storage", - "tszAPIUrl":"http://app.xyry.org:5501/api?function=machine" + "XReport": { + "bEnable": true, + "tszServiceName": "XEngine_Storage", + "tszAPIUrl": "http://app.xyry.org:5501/api?function=machine" }, - "XAction":{ - "bEnable":true, - "nSDMax":1024000, - "nRVMax":1024000 + "XAction": { + "bEnable": true, + "nSDMax": 1024000, + "nRVMax": 1024000 } } \ 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 d03c56d..6513f65 100644 --- a/XEngine_Release/XEngine_Config/XEngine_VersionConfig.json +++ b/XEngine_Release/XEngine_Config/XEngine_VersionConfig.json @@ -1,5 +1,6 @@ { "XVer":[ + "3.20.0.1001 Build20250620", "3.19.0.1001 Build20250320", "3.18.0.1001 Build20250103", "3.17.0.1001 Build20241106", diff --git a/XEngine_Source/Makefile b/XEngine_Source/Makefile index a538573..87ae372 100644 --- a/XEngine_Source/Makefile +++ b/XEngine_Source/Makefile @@ -28,39 +28,38 @@ XENGINE_MODULES = libjsoncpp.so libtinyxml2.so libXEngine_InfoReport.so .PHONY:MakeAll MakeAll:$(XENGINE_MODULES) - - + libjsoncpp.so: ifeq ($(FLAGS), InstallAll) cp $(THIRD_JSONCPP_PATH)/libjsoncpp.$(FILEEXT) ../XEngine_Release/ else - make -C $(THIRD_JSONCPP_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(THIRD_JSONCPP_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) endif libtinyxml2.so: ifeq ($(FLAGS), InstallAll) cp $(THIRD_TINYXML_PATH)/libtinyxml2.$(FILEEXT) ../XEngine_Release/ else - make -C $(THIRD_TINYXML_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(THIRD_TINYXML_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) endif libXEngine_InfoReport.so: ifeq ($(FLAGS), InstallAll) cp $(THIRD_REPORT_PATH)/libXEngine_InfoReport.$(FILEEXT) ../XEngine_Release/ else - make -C $(THIRD_REPORT_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(THIRD_REPORT_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) endif libStorageModule_Database.so: - make -C $(BASE_SQL_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(BASE_SQL_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) libStorageModule_Config.so: - make -C $(BASE_CONFIG_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(BASE_CONFIG_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) libStorageModule_Session.so: - make -C $(BASE_SESSION_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(BASE_SESSION_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) libStorageModule_APIHelp.so: - make -C $(BASE_APIHELP_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(BASE_APIHELP_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) libStorageModule_Protocol.so: - make -C $(BASE_PROTOCOL_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(BASE_PROTOCOL_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) libStorageModule_BTorrent.so: - make -C $(BASE_BTORRENT_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(BASE_BTORRENT_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) XEngine_StorageApp.exe: - make -C $(APPSERVICE_STORAGE_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(APPSERVICE_STORAGE_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) diff --git a/XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.cpp b/XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.cpp index cb03b41..15ba738 100644 --- a/XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.cpp +++ b/XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.cpp @@ -55,12 +55,12 @@ bool CAPIHelp_Api::APIHelp_Api_ProxyAuth(XCHAR* ptszUser, XCHAR* ptszPass, XCHAR APIHelp_IsErrorOccur = false; int nAuthType = 0; - int nAuthLen = MAX_PATH; + int nAuthLen = XPATH_MAX; - XCHAR tszAuthStr[MAX_PATH]; + XCHAR tszAuthStr[XPATH_MAX]; XCHAR tszSDBuffer[1024]; - memset(tszAuthStr, '\0', MAX_PATH); + memset(tszAuthStr, '\0', XPATH_MAX); memset(tszSDBuffer, '\0', sizeof(tszSDBuffer)); //是否有验证信息 if (!HttpProtocol_ServerHelp_GetAuthInfo(&pptszListHdr, nHdrCount, tszAuthStr, &nAuthLen, &nAuthType)) @@ -207,8 +207,8 @@ bool CAPIHelp_Api::APIHelp_Api_VerHash(LPCXSTR lpszFileHash, XCHAR** pptszListHd APIHelp_IsErrorOccur = false; LPCXSTR lpszKeyStr = _X("FileHash"); - XCHAR tszValueStr[MAX_PATH]; - memset(tszValueStr, '\0', MAX_PATH); + XCHAR tszValueStr[XPATH_MAX]; + memset(tszValueStr, '\0', XPATH_MAX); if (!HttpProtocol_ServerHelp_GetField(&pptszListHdr, nHdrCount, lpszKeyStr, tszValueStr)) { @@ -321,11 +321,11 @@ bool CAPIHelp_Api::APIHelp_Api_UrlParse(XCHAR*** ppptszList, int nListCount, XCH for (int i = 0; i < nListCount; i++) { - XCHAR tszKey[MAX_PATH]; - XCHAR tszValue[MAX_PATH]; + XCHAR tszKey[XPATH_MAX]; + XCHAR tszValue[XPATH_MAX]; - memset(tszKey, '\0', MAX_PATH); - memset(tszValue, '\0', MAX_PATH); + memset(tszKey, '\0', XPATH_MAX); + memset(tszValue, '\0', XPATH_MAX); BaseLib_String_GetKeyValue((*ppptszList)[i], _X("="), tszKey, tszValue); @@ -333,8 +333,8 @@ bool CAPIHelp_Api::APIHelp_Api_UrlParse(XCHAR*** ppptszList, int nListCount, XCH { //编码格式是utf8,需要转为ansi #ifdef _MSC_BUILD - XCHAR tszFileName[MAX_PATH]; - memset(tszFileName, '\0', MAX_PATH); + XCHAR tszFileName[XPATH_MAX]; + memset(tszFileName, '\0', XPATH_MAX); Cryption_Codec_UrlDeCodec(tszValue, _tcsxlen(tszValue), tszFileName); @@ -383,15 +383,15 @@ bool CAPIHelp_Api::APIHelp_Api_Boundary(XCHAR*** ppptszList, int nListCount, XCH //Content-Type: multipart/form-data; boundary=AaB03x for (int i = 0; i < nListCount; i++) { - XCHAR tszKeyStr[MAX_PATH] = {}; - XCHAR tszVluStr[MAX_PATH] = {}; + XCHAR tszKeyStr[XPATH_MAX] = {}; + XCHAR tszVluStr[XPATH_MAX] = {}; BaseLib_String_GetKeyValue((*ppptszList)[i], _X(": "), tszKeyStr, tszVluStr); if (0 == _tcsxnicmp(lpszHDRContent, tszKeyStr, _tcsxlen(lpszHDRContent))) { - XCHAR tszKeySub[MAX_PATH] = {}; - XCHAR tszVluSub[MAX_PATH] = {}; + XCHAR tszKeySub[XPATH_MAX] = {}; + XCHAR tszVluSub[XPATH_MAX] = {}; //multipart/form-data; boundary=AaB03x if (BaseLib_String_GetKeyValue(tszVluStr, _X(";"), tszKeySub, tszVluSub)) { @@ -465,18 +465,22 @@ bool CAPIHelp_Api::APIHelp_Api_UrlStr(XCHAR* ptszKeyStr, LPCXSTR lpszUrl) { APIHelp_IsErrorOccur = false; - XCHAR tszUrlStr[MAX_PATH] = {}; + XCHAR tszUrlStr[XPATH_MAX] = {}; _tcsxcpy(tszUrlStr, lpszUrl); // 查找第一个 '/' 的位置 XCHAR *ptszFirstStr = _tcsxchr(tszUrlStr, '/'); if (ptszFirstStr == NULL) { + APIHelp_IsErrorOccur = true; + APIHelp_dwErrorCode = ERROR_STORAGE_MODULE_APIHELP_FORMAT; return false; } // 查找第二个 '/' 的位置 XCHAR* ptszSecondStr = _tcsxchr(ptszFirstStr + 1, '/'); if (ptszSecondStr == NULL) { + APIHelp_IsErrorOccur = true; + APIHelp_dwErrorCode = ERROR_STORAGE_MODULE_APIHELP_FORMAT; return false; } // 计算提取字符串的长度 @@ -486,5 +490,97 @@ bool CAPIHelp_Api::APIHelp_Api_UrlStr(XCHAR* ptszKeyStr, LPCXSTR lpszUrl) // 添加字符串结束符 ptszKeyStr[nLen] = '\0'; + return true; +} +/******************************************************************** +函数名称:APIHelp_Api_GetLastName +函数功能:获取最后文件名 + 参数.一:ptszLastName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出获取到的文件名 + 参数.二:lpszPathStr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要获取的字符串 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CAPIHelp_Api::APIHelp_Api_GetLastName(XCHAR* ptszLastName, LPCXSTR lpszPathStr) +{ + APIHelp_IsErrorOccur = false; + + xstring m_StrPath = lpszPathStr; + // 如果以斜杠结尾,去掉末尾的斜杠 + if (!m_StrPath.empty() && m_StrPath.back() == '/') + { + m_StrPath.pop_back(); + } + // 找到最后一个斜杠的位置 + size_t nPos = m_StrPath.find_last_of('/'); + if (nPos == std::string::npos) + { + _tcsxcpy(ptszLastName, m_StrPath.c_str()); + } + else + { + _tcsxcpy(ptszLastName, m_StrPath.substr(nPos + 1).c_str()); + } + return true; +} +/******************************************************************** +函数名称:APIHelp_Api_WDToUrl +函数功能:webdav的路径转为存储服务标准路径 + 参数.一:lpszUrl + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要转换的路径 + 参数.二:ptszUrl + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出转换后的路径 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CAPIHelp_Api::APIHelp_Api_WDToUrl(LPCXSTR lpszUrl, XCHAR* ptszUrl) +{ + APIHelp_IsErrorOccur = false; + + xstring m_StrUrl = lpszUrl; + // 确保路径以 "/" 开头 + if (m_StrUrl.empty() || m_StrUrl[0] != '/') + { + APIHelp_IsErrorOccur = true; + APIHelp_dwErrorCode = ERROR_STORAGE_MODULE_APIHELP_FORMAT; + return false; + } + if (0 == _tcsxnicmp("api", m_StrUrl.c_str() + 1, 3)) + { + _tcsxcpy(ptszUrl, lpszUrl); + return true; + } + // 找到第一个 '/' 和第二个 '/' + size_t nFirstSlash = m_StrUrl.find('/', 1); + if (nFirstSlash == std::string::npos) + { + APIHelp_IsErrorOccur = true; + APIHelp_dwErrorCode = ERROR_STORAGE_MODULE_APIHELP_FORMAT; + return false; + } + //提取bucket + xstring m_StrBucket = m_StrUrl.substr(1, nFirstSlash - 1); + //提取剩余路径 + xstring m_StrFile = m_StrUrl.substr(nFirstSlash + 1); + // 构造目标URL + xstring m_XUrl = "/api?filename=" + m_StrFile + "&storeagekey=" + m_StrBucket; + _tcsxcpy(ptszUrl, m_XUrl.c_str()); return true; } \ No newline at end of file diff --git a/XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.h b/XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.h index a2bfaa4..61b8606 100644 --- a/XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.h +++ b/XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.h @@ -26,6 +26,8 @@ class CAPIHelp_Api bool APIHelp_Api_Boundary(XCHAR*** ppptszList, int nListCount, XCHAR* ptszBoundStr); bool APIHelp_Api_GetDIRSize(LPCXSTR lpszDIRStr, __int64u* pInt_DIRSize); bool APIHelp_Api_UrlStr(XCHAR* ptszKeyStr, LPCXSTR lpszUrl); + bool APIHelp_Api_GetLastName(XCHAR* ptszLastName, LPCXSTR lpszPathStr); + bool APIHelp_Api_WDToUrl(LPCXSTR lpszUrl, XCHAR* ptszUrl); protected: private: }; \ No newline at end of file diff --git a/XEngine_Source/StorageModule_APIHelp/APIHelp_Cryption/APIHelp_Cryption.cpp b/XEngine_Source/StorageModule_APIHelp/APIHelp_Cryption/APIHelp_Cryption.cpp index 52add75..a5a9a5a 100644 --- a/XEngine_Source/StorageModule_APIHelp/APIHelp_Cryption/APIHelp_Cryption.cpp +++ b/XEngine_Source/StorageModule_APIHelp/APIHelp_Cryption/APIHelp_Cryption.cpp @@ -203,23 +203,23 @@ bool CAPIHelp_Cryption::APIHelp_Cryption_Digest(XCHAR* ptszResponseStr, LPCXSTR { APIHelp_IsErrorOccur = false; - XCHAR tszResponseStr[2048]; + XCHAR tszResponseStr[4096]; XBYTE tszResponseMD5[2048]; - XBYTE tszUserMD5[MAX_PATH]; - XBYTE tszUrlMD5[MAX_PATH]; - XCHAR tszUserStr[MAX_PATH]; - XCHAR tszUrlStr[MAX_PATH]; - XCHAR tszUserHex[MAX_PATH]; - XCHAR tszUrlHex[MAX_PATH]; + XBYTE tszUserMD5[XPATH_MAX]; + XBYTE tszUrlMD5[XPATH_MAX]; + XCHAR tszUserStr[XPATH_MAX]; + XCHAR tszUrlStr[XPATH_MAX]; + XCHAR tszUserHex[XPATH_MAX]; + XCHAR tszUrlHex[XPATH_MAX]; memset(tszResponseStr, '\0', sizeof(tszResponseStr)); memset(tszResponseMD5, '\0', sizeof(tszResponseMD5)); - memset(tszUserMD5, '\0', MAX_PATH); - memset(tszUrlMD5, '\0', MAX_PATH); - memset(tszUserStr, '\0', MAX_PATH); - memset(tszUrlStr, '\0', MAX_PATH); - memset(tszUserHex, '\0', MAX_PATH); - memset(tszUrlHex, '\0', MAX_PATH); + memset(tszUserMD5, '\0', XPATH_MAX); + memset(tszUrlMD5, '\0', XPATH_MAX); + memset(tszUserStr, '\0', XPATH_MAX); + memset(tszUrlStr, '\0', XPATH_MAX); + memset(tszUserHex, '\0', XPATH_MAX); + memset(tszUrlHex, '\0', XPATH_MAX); //计算HA1 的MD5字符串 MD5(USER:PASS:REAL) int nRet = _xstprintf(tszUserStr, _X("%s:%s:%s"), lpszUser, lpszRealm, lpszPass); diff --git a/XEngine_Source/StorageModule_APIHelp/APIHelp_Define.h b/XEngine_Source/StorageModule_APIHelp/APIHelp_Define.h index dbebf30..05a5bb5 100644 --- a/XEngine_Source/StorageModule_APIHelp/APIHelp_Define.h +++ b/XEngine_Source/StorageModule_APIHelp/APIHelp_Define.h @@ -371,6 +371,44 @@ extern "C" bool APIHelp_Api_GetDIRSize(LPCXSTR lpszDIRStr, __int64u* pInt_DIRSiz 备注: *********************************************************************/ extern "C" bool APIHelp_Api_UrlStr(XCHAR* ptszKeyStr, LPCXSTR lpszUrl); +/******************************************************************** +函数名称:APIHelp_Api_GetLastName +函数功能:获取最后文件名 + 参数.一:ptszLastName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出获取到的文件名 + 参数.二:lpszPathStr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要获取的字符串 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool APIHelp_Api_GetLastName(XCHAR* ptszLastName, LPCXSTR lpszPathStr); +/******************************************************************** +函数名称:APIHelp_Api_WDToUrl +函数功能:webdav的路径转为存储服务标准路径 + 参数.一:lpszUrl + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要转换的路径 + 参数.二:ptszUrl + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出转换后的路径 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool APIHelp_Api_WDToUrl(LPCXSTR lpszUrl, XCHAR* ptszUrl); /************************************************************************/ /* 加解密函数 */ /************************************************************************/ diff --git a/XEngine_Source/StorageModule_APIHelp/APIHelp_Distributed/APIHelp_Distributed.cpp b/XEngine_Source/StorageModule_APIHelp/APIHelp_Distributed/APIHelp_Distributed.cpp index 3583b7a..a3fa6f4 100644 --- a/XEngine_Source/StorageModule_APIHelp/APIHelp_Distributed/APIHelp_Distributed.cpp +++ b/XEngine_Source/StorageModule_APIHelp/APIHelp_Distributed/APIHelp_Distributed.cpp @@ -59,7 +59,7 @@ bool CAPIHelp_Distributed::APIHelp_Distributed_RandomAddr(list* pStl_Lis if (1 == nMode) { XNETHANDLE xhToken = 0; - BaseLib_Handle_Create(&xhToken, 0, pStl_ListAddr->size(), false); + BaseLib_Handle_Create(&xhToken, 0, pStl_ListAddr->size()); if (xhToken == pStl_ListAddr->size()) { xhToken--; @@ -392,7 +392,7 @@ bool CAPIHelp_Distributed::APIHelp_Distributed_UPStorage(list* pStl_ListNode; diff --git a/XEngine_Source/StorageModule_BTorrent/BTorrent_DLoader/BTorrent_DLoader.h b/XEngine_Source/StorageModule_BTorrent/BTorrent_DLoader/BTorrent_DLoader.h index d6f768f..2b6c9d9 100644 --- a/XEngine_Source/StorageModule_BTorrent/BTorrent_DLoader/BTorrent_DLoader.h +++ b/XEngine_Source/StorageModule_BTorrent/BTorrent_DLoader/BTorrent_DLoader.h @@ -19,9 +19,9 @@ typedef struct #endif BTORRENT_DLOADER st_DLStatus; //下载状态 - XCHAR tszAddr[MAX_PATH]; //下载地址 - XCHAR tszFile[MAX_PATH]; //保存地址 - XCHAR tszTemp[MAX_PATH]; //临时文件 + XCHAR tszAddr[XPATH_MAX]; //下载地址 + XCHAR tszFile[XPATH_MAX]; //保存地址 + XCHAR tszTemp[XPATH_MAX]; //临时文件 bool bIsResume; //是否续传 XPVOID lPClass; //指向类的指针 }BTORRENT_DLOADINFO, * LPBTORRENT_DLOADINFO; diff --git a/XEngine_Source/StorageModule_BTorrent/BTorrent_Define.h b/XEngine_Source/StorageModule_BTorrent/BTorrent_Define.h index 5b4673a..39586b5 100644 --- a/XEngine_Source/StorageModule_BTorrent/BTorrent_Define.h +++ b/XEngine_Source/StorageModule_BTorrent/BTorrent_Define.h @@ -39,7 +39,7 @@ typedef enum ////////////////////////////////////////////////////////////////////////// typedef struct { - XCHAR tszFileName[MAX_PATH]; //文件名 + XCHAR tszFileName[XPATH_MAX]; //文件名 __int64x nDLoadTotal; //总大小 __int64x nDLCount; //已下载大小 __int64x nUPCount; //已上传大小 @@ -51,15 +51,15 @@ typedef struct }BTORRENT_DLOADER; typedef struct { - XCHAR tszValue[MAX_PATH]; + XCHAR tszValue[XPATH_MAX]; int nValue; }BTORRENT_PARSEMAP; typedef struct { - XCHAR tszFileHash[MAX_PATH]; //文件HASH - XCHAR tszFilePath[MAX_PATH]; //文件路径 - XCHAR tszFileName[MAX_PATH]; //文件名称 - XCHAR tszFileLink[MAX_PATH]; //文件连接,如果有的话 + XCHAR tszFileHash[XPATH_MAX]; //文件HASH + XCHAR tszFilePath[XPATH_MAX]; //文件路径 + XCHAR tszFileName[XPATH_MAX]; //文件名称 + XCHAR tszFileLink[XPATH_MAX]; //文件连接,如果有的话 __int64x nFileOffset; //文件偏移 __int64x nFileSize; //文件大小 time_t nFileTime; //文件时间戳 diff --git a/XEngine_Source/StorageModule_BTorrent/Makefile b/XEngine_Source/StorageModule_BTorrent/Makefile index 7afe90b..8f9b8de 100644 --- a/XEngine_Source/StorageModule_BTorrent/Makefile +++ b/XEngine_Source/StorageModule_BTorrent/Makefile @@ -1,11 +1,7 @@ -CC = g++ -Wall -std=c++17 -fPIC -PLATFORM = linux +CC = g++ -Wall -std=c++20 -fPIC PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ LIB = -lXEngine_BaseLib LIBEX = @@ -18,13 +14,30 @@ ifeq ($(MACRO_VALUE),1) LIB += -ltorrent-rasterbar endif +ifeq ($(RELEASE),1) +FLAGS = -c -D _RELEASE +DEBUG = -O2 +else + ifeq ($(PLATFORM),mac) + FLAGS = -c + DEBUG = -g -D _DEBUG + else + FLAGS = -c -lc_p + DEBUG = -g -pg -D _DEBUG + endif +endif + +ifeq ($(UNICODE),1) +override UNICODE := -D __UNICODE__ +else +override UNICODE := -D __ANSI__ +endif + ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu endif FILEEXT = so LIBFLAG = -shared @@ -33,32 +46,12 @@ ifeq ($(PLATFORM),linux) else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac FILEEXT = dylib LIBFLAG = -dynamiclib LIBEX = -lpthread -ldl LOADBIN = -Wl,-rpath,@loader_path/../XEngine_BaseLib/ endif -ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = -else - ifeq ($(PLATFORM),mac) - FLAGS = -c - DEBUG = -g - else - FLAGS = -c -lc_p - DEBUG = -g -pg - endif -endif - -ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE -else -UNICODE = -endif - all:$(OBJECTS) $(CC) $(DEBUG) $(OBJECTS) -o libStorageModule_BTorrent.$(FILEEXT) $(LIBFLAG) $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN) diff --git a/XEngine_Source/StorageModule_Config/Config_Define.h b/XEngine_Source/StorageModule_Config/Config_Define.h index e2bd859..39c0b4b 100644 --- a/XEngine_Source/StorageModule_Config/Config_Define.h +++ b/XEngine_Source/StorageModule_Config/Config_Define.h @@ -47,7 +47,7 @@ typedef struct tag_XEngine_ServerConfig }st_XTime; struct { - XCHAR tszLogFile[MAX_PATH]; + XCHAR tszLogFile[XPATH_MAX]; int nMaxSize; int nMaxCount; int nLogLeave; @@ -66,6 +66,7 @@ typedef struct tag_XEngine_ServerConfig { bool bResumable; bool bUPHash; + bool bWDLocation; int nHashMode; }st_XStorage; struct @@ -73,9 +74,9 @@ typedef struct tag_XEngine_ServerConfig bool bUPPass; bool bDLPass; bool bAuthPass; - XCHAR tszUPPass[MAX_PATH]; - XCHAR tszDLPass[MAX_PATH]; - XCHAR tszAuthPass[MAX_PATH]; + XCHAR tszUPPass[XPATH_MAX]; + XCHAR tszDLPass[XPATH_MAX]; + XCHAR tszAuthPass[XPATH_MAX]; }st_XProxy; struct { @@ -94,9 +95,9 @@ typedef struct tag_XEngine_ServerConfig }st_P2xp; struct { - XCHAR tszCertChain[MAX_PATH]; - XCHAR tszCertServer[MAX_PATH]; - XCHAR tszCertKey[MAX_PATH]; + XCHAR tszCertChain[XPATH_MAX]; + XCHAR tszCertServer[XPATH_MAX]; + XCHAR tszCertKey[XPATH_MAX]; bool bDLEnable; bool bUPEnable; bool bCHEnable; @@ -104,7 +105,7 @@ typedef struct tag_XEngine_ServerConfig }st_XCert; struct { - XCHAR tszAPIUrl[MAX_PATH]; + XCHAR tszAPIUrl[XPATH_MAX]; XCHAR tszServiceName[128]; bool bEnable; }st_XReport; @@ -122,8 +123,8 @@ typedef struct tag_XEngine_ServerConfig typedef struct { - XCHAR tszFilePath[MAX_PATH]; - XCHAR tszFileName[MAX_PATH]; + XCHAR tszFilePath[XPATH_MAX]; + XCHAR tszFileName[XPATH_MAX]; XCHAR tszBuckKey[128]; XCHAR tszBuckSize[64]; int nLevel; diff --git a/XEngine_Source/StorageModule_Config/Config_Json/Config_Json.cpp b/XEngine_Source/StorageModule_Config/Config_Json/Config_Json.cpp index 5783400..1cf16db 100644 --- a/XEngine_Source/StorageModule_Config/Config_Json/Config_Json.cpp +++ b/XEngine_Source/StorageModule_Config/Config_Json/Config_Json.cpp @@ -61,21 +61,12 @@ bool CConfig_Json::Config_Json_File(LPCXSTR lpszConfigFile, XENGINE_SERVERCONFIG Config_dwErrorCode = ERROR_XENGINE_BLOGIC_CONFIG_JSON_PARAMENT; return false; } - int nCount = 0; - XCHAR tszMsgBuffer[4096]; - while (1) - { - int nRet = fread(tszMsgBuffer + nCount, 1, 2048, pSt_File); - if (nRet <= 0) - { - break; - } - nCount += nRet; - } + 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 + nCount, &st_JsonRoot, &st_JsonError)) + if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nRet, &st_JsonRoot, &st_JsonError)) { Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_XENGINE_BLOGIC_CONFIG_JSON_PARSE; @@ -144,7 +135,7 @@ bool CConfig_Json::Config_Json_File(LPCXSTR lpszConfigFile, XENGINE_SERVERCONFIG _tcsxcpy(pSt_ServerConfig->st_XSql.tszSQLUser, st_JsonXSql["SQLUser"].asCString()); _tcsxcpy(pSt_ServerConfig->st_XSql.tszSQLPass, st_JsonXSql["SQLPass"].asCString()); - if (st_JsonRoot["XStorage"].empty() || (3 != st_JsonRoot["XStorage"].size())) + if (st_JsonRoot["XStorage"].empty() || (4 != st_JsonRoot["XStorage"].size())) { Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_XENGINE_BLOGIC_CONFIG_JSON_XSTORAGE; @@ -154,6 +145,7 @@ bool CConfig_Json::Config_Json_File(LPCXSTR lpszConfigFile, XENGINE_SERVERCONFIG pSt_ServerConfig->st_XStorage.nHashMode = st_JsonXStorage["nHashMode"].asInt(); pSt_ServerConfig->st_XStorage.bUPHash = st_JsonXStorage["bUPHash"].asBool(); pSt_ServerConfig->st_XStorage.bResumable = st_JsonXStorage["bResumable"].asBool(); + pSt_ServerConfig->st_XStorage.bWDLocation = st_JsonXStorage["bWDLocation"].asBool(); if (st_JsonRoot["XProxy"].empty() || (6 != st_JsonRoot["XProxy"].size())) { @@ -282,21 +274,12 @@ bool CConfig_Json::Config_Json_Version(LPCXSTR lpszConfigFile, XENGINE_SERVERCON Config_dwErrorCode = ERROR_XENGINE_BLOGIC_CONFIG_JSON_PARAMENT; return false; } - int nCount = 0; - XCHAR tszMsgBuffer[4096]; - while (1) - { - int nRet = fread(tszMsgBuffer + nCount, 1, 2048, pSt_File); - if (nRet <= 0) - { - break; - } - nCount += nRet; - } + 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 + nCount, &st_JsonRoot, &st_JsonError)) + if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nRet, &st_JsonRoot, &st_JsonError)) { Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_XENGINE_BLOGIC_CONFIG_JSON_PARSE; @@ -356,21 +339,12 @@ bool CConfig_Json::Config_Json_LoadBalance(LPCXSTR lpszConfigFile, XENGINE_LBCON Config_dwErrorCode = ERROR_XENGINE_BLOGIC_CONFIG_JSON_PARAMENT; return false; } - int nCount = 0; - XCHAR tszMsgBuffer[4096]; - while (1) - { - int nRet = fread(tszMsgBuffer + nCount, 1, 2048, pSt_File); - if (nRet <= 0) - { - break; - } - nCount += nRet; - } + 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 + nCount, &st_JsonRoot, &st_JsonError)) + if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nRet, &st_JsonRoot, &st_JsonError)) { Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_XENGINE_BLOGIC_CONFIG_JSON_PARSE; diff --git a/XEngine_Source/StorageModule_Config/Makefile b/XEngine_Source/StorageModule_Config/Makefile index 6e493ea..c24f28e 100644 --- a/XEngine_Source/StorageModule_Config/Makefile +++ b/XEngine_Source/StorageModule_Config/Makefile @@ -1,11 +1,7 @@ -CC = g++ -Wall -std=c++17 -fPIC -PLATFORM = linux -PLATVER = -PLATDIR = +CC = g++ -Wall -std=c++20 -fPIC +PLATVER = FILEEXT = LIBFLAG = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ -I ../XEngine_Depend/XEngine_Module/jsoncpp LOADSO = -L ../XEngine_Depend/XEngine_Module/jsoncpp LIB = -ljsoncpp @@ -13,31 +9,29 @@ LIBEX = OBJECTS = Config_Json.o pch.o ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = +FLAGS = -c -D _RELEASE +DEBUG = -O2 else ifeq ($(PLATFORM),mac) FLAGS = -c - DEBUG = -g + DEBUG = -g -D _DEBUG else FLAGS = -c -lc_p - DEBUG = -g -pg + DEBUG = -g -pg -D _DEBUG endif endif ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE +override UNICODE := -D __UNICODE__ else -UNICODE = +override UNICODE := -D __ANSI__ endif ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu endif FILEEXT = so LIBFLAG = -shared @@ -46,7 +40,6 @@ ifeq ($(PLATFORM),linux) else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac FILEEXT = dylib LIBFLAG = -dynamiclib LIBEX = -lpthread -ldl diff --git a/XEngine_Source/StorageModule_Database/Database_Define.h b/XEngine_Source/StorageModule_Database/Database_Define.h index 38dc2e3..d17ed55 100644 --- a/XEngine_Source/StorageModule_Database/Database_Define.h +++ b/XEngine_Source/StorageModule_Database/Database_Define.h @@ -16,8 +16,8 @@ typedef struct { XENGINE_PROTOCOL_FILE st_ProtocolFile; - XCHAR tszBuckKey[MAX_PATH]; //路径的关键字 - XCHAR tszTableName[MAX_PATH]; //日期表名称,插入:表示自定义插入日期表,获取:表示导出这个文件所属日期表 + XCHAR tszBuckKey[XPATH_MAX]; //路径的关键字 + XCHAR tszTableName[XPATH_MAX]; //日期表名称,插入:表示自定义插入日期表,获取:表示导出这个文件所属日期表 }XSTORAGECORE_DBFILE, *LPXSTORAGECORE_DBFILE; typedef struct { diff --git a/XEngine_Source/StorageModule_Database/Database_Help/Database_Help.cpp b/XEngine_Source/StorageModule_Database/Database_Help/Database_Help.cpp index 00370b9..3ba9cf3 100644 --- a/XEngine_Source/StorageModule_Database/Database_Help/Database_Help.cpp +++ b/XEngine_Source/StorageModule_Database/Database_Help/Database_Help.cpp @@ -232,8 +232,8 @@ bool CDatabase_Help::Database_Help_Packet(XCHAR* ptszSQLBuffer, LPCXSTR lpszBuck Database_IsErrorOccur = false; bool bInit = false; - XCHAR tszSQLQuery[MAX_PATH]; - memset(tszSQLQuery, '\0', MAX_PATH); + XCHAR tszSQLQuery[XPATH_MAX]; + memset(tszSQLQuery, '\0', XPATH_MAX); //文件所属BUCKET if (NULL != lpszBuckKey) { @@ -247,7 +247,7 @@ bool CDatabase_Help::Database_Help_Packet(XCHAR* ptszSQLBuffer, LPCXSTR lpszBuck { _tcsxcat(ptszSQLBuffer, _X(" WHERE ")); } - memset(tszSQLQuery, '\0', MAX_PATH); + memset(tszSQLQuery, '\0', XPATH_MAX); _xstprintf(tszSQLQuery, _X("BuckKey = '%s'"), lpszBuckKey); _tcsxcat(ptszSQLBuffer, tszSQLQuery); bInit = true; @@ -266,7 +266,7 @@ bool CDatabase_Help::Database_Help_Packet(XCHAR* ptszSQLBuffer, LPCXSTR lpszBuck { _tcsxcat(ptszSQLBuffer, _X("WHERE ")); } - memset(tszSQLQuery, '\0', MAX_PATH); + memset(tszSQLQuery, '\0', XPATH_MAX); _xstprintf(tszSQLQuery, _X("FilePath = '%s'"), lpszFilePath); _tcsxcat(ptszSQLBuffer, tszSQLQuery); bInit = true; @@ -285,7 +285,7 @@ bool CDatabase_Help::Database_Help_Packet(XCHAR* ptszSQLBuffer, LPCXSTR lpszBuck { _tcsxcat(ptszSQLBuffer, _X("WHERE ")); } - memset(tszSQLQuery, '\0', MAX_PATH); + memset(tszSQLQuery, '\0', XPATH_MAX); _xstprintf(tszSQLQuery, _X("FileName = '%s'"), lpszFileName); _tcsxcat(ptszSQLBuffer, tszSQLQuery); bInit = true; @@ -304,7 +304,7 @@ bool CDatabase_Help::Database_Help_Packet(XCHAR* ptszSQLBuffer, LPCXSTR lpszBuck { _tcsxcat(ptszSQLBuffer, _X("WHERE ")); } - memset(tszSQLQuery, '\0', MAX_PATH); + memset(tszSQLQuery, '\0', XPATH_MAX); _xstprintf(tszSQLQuery, _X("FileHash = '%s'"), lpszFileHash); _tcsxcat(ptszSQLBuffer, tszSQLQuery); bInit = true; @@ -323,7 +323,7 @@ bool CDatabase_Help::Database_Help_Packet(XCHAR* ptszSQLBuffer, LPCXSTR lpszBuck { _tcsxcat(ptszSQLBuffer, _X("WHERE ")); } - memset(tszSQLQuery, '\0', MAX_PATH); + memset(tszSQLQuery, '\0', XPATH_MAX); _xstprintf(tszSQLQuery, _X("FileUser = '%s'"), lpszFileUser); _tcsxcat(ptszSQLBuffer, tszSQLQuery); bInit = true; @@ -342,7 +342,7 @@ bool CDatabase_Help::Database_Help_Packet(XCHAR* ptszSQLBuffer, LPCXSTR lpszBuck { _tcsxcat(ptszSQLBuffer, _X("WHERE ")); } - memset(tszSQLQuery, '\0', MAX_PATH); + memset(tszSQLQuery, '\0', XPATH_MAX); _xstprintf(tszSQLQuery, _X("BETWEEN '%s' AND '%s'"), lpszTimeStart, lpszTimeEnd); _tcsxcat(ptszSQLBuffer, tszSQLQuery); bInit = true; diff --git a/XEngine_Source/StorageModule_Database/Database_Memory/Database_Memory.cpp b/XEngine_Source/StorageModule_Database/Database_Memory/Database_Memory.cpp index ad429b8..d5418a3 100644 --- a/XEngine_Source/StorageModule_Database/Database_Memory/Database_Memory.cpp +++ b/XEngine_Source/StorageModule_Database/Database_Memory/Database_Memory.cpp @@ -288,10 +288,10 @@ bool CDatabase_Memory::Database_Memory_Flush() int nHashLen = 0; struct _xtstat st_FileStatus; - XBYTE tszHashStr[MAX_PATH]; + XBYTE tszHashStr[XPATH_MAX]; XSTORAGECORE_DBFILE st_DBFile; - memset(tszHashStr, '\0', MAX_PATH); + memset(tszHashStr, '\0', XPATH_MAX); memset(&st_DBFile, '\0', sizeof(XSTORAGECORE_DBFILE)); _xtstat(pptszListFile[i], &st_FileStatus); diff --git a/XEngine_Source/StorageModule_Database/Makefile b/XEngine_Source/StorageModule_Database/Makefile index 6d8371d..ad177ea 100644 --- a/XEngine_Source/StorageModule_Database/Makefile +++ b/XEngine_Source/StorageModule_Database/Makefile @@ -1,11 +1,7 @@ -CC = g++ -Wall -std=c++17 -fPIC -PLATFORM = linux +CC = g++ -Wall -std=c++20 -fPIC PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ -I ../XEngine_ThirdPart/jsoncpp LOADSO = LIB = -lXEngine_BaseLib -lXEngine_Cryption -lHelpComponents_DataBase -lXEngine_SystemApi @@ -13,31 +9,29 @@ LIBEX = OBJECTS = Database_File.o Database_Memory.o Database_Help.o pch.o ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = +FLAGS = -c -D _RELEASE +DEBUG = -O2 else ifeq ($(PLATFORM),mac) FLAGS = -c - DEBUG = -g + DEBUG = -g -D _DEBUG else FLAGS = -c -lc_p - DEBUG = -g -pg + DEBUG = -g -pg -D _DEBUG endif endif ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE +override UNICODE := -D __UNICODE__ else -UNICODE = +override UNICODE := -D __ANSI__ endif ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu endif FILEEXT = so LIBFLAG = -shared @@ -46,7 +40,6 @@ ifeq ($(PLATFORM),linux) else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac FILEEXT = dylib LIBFLAG = -dynamiclib LIBEX = -lpthread -ldl diff --git a/XEngine_Source/StorageModule_Protocol/Makefile b/XEngine_Source/StorageModule_Protocol/Makefile index a6c1fe8..64339a4 100644 --- a/XEngine_Source/StorageModule_Protocol/Makefile +++ b/XEngine_Source/StorageModule_Protocol/Makefile @@ -1,11 +1,7 @@ -CC = g++ -Wall -std=c++17 -fPIC -PLATFORM = linux +CC = g++ -Wall -std=c++20 -fPIC PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ -I ../XEngine_Depend/XEngine_Module/jsoncpp -I ../XEngine_Depend/XEngine_Module/tinyxml2 LOADSO = -L ../XEngine_Depend/XEngine_Module/jsoncpp -L ../XEngine_Depend/XEngine_Module/tinyxml2 -L ../StorageModule_Session -L ../StorageModule_APIHelp LIB = -lXEngine_BaseLib -lXEngine_SystemApi -ljsoncpp -ltinyxml2 -lStorageModule_Session -lStorageModule_APIHelp @@ -13,31 +9,29 @@ LIBEX = OBJECTS = Protocol_StoragePacket.o Protocol_StorageParse.o pch.o ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = +FLAGS = -c -D _RELEASE +DEBUG = -O2 else ifeq ($(PLATFORM),mac) FLAGS = -c - DEBUG = -g + DEBUG = -g -D _DEBUG else FLAGS = -c -lc_p - DEBUG = -g -pg + DEBUG = -g -pg -D _DEBUG endif endif ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE +override UNICODE := -D __UNICODE__ else -UNICODE = +override UNICODE := -D __ANSI__ endif ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu endif FILEEXT = so LIBFLAG = -shared @@ -46,7 +40,6 @@ ifeq ($(PLATFORM),linux) else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac FILEEXT = dylib LIBFLAG = -dynamiclib LIBEX = -lpthread -ldl diff --git a/XEngine_Source/StorageModule_Protocol/Protocol_Packet/Protocol_StoragePacket.cpp b/XEngine_Source/StorageModule_Protocol/Protocol_Packet/Protocol_StoragePacket.cpp index 18bf62a..3caa8d0 100644 --- a/XEngine_Source/StorageModule_Protocol/Protocol_Packet/Protocol_StoragePacket.cpp +++ b/XEngine_Source/StorageModule_Protocol/Protocol_Packet/Protocol_StoragePacket.cpp @@ -316,37 +316,42 @@ bool CProtocol_StoragePacket::Protocol_StoragePacket_DirOperator(XCHAR* ptszMsgB /******************************************************************** 函数名称:Protocol_StoragePacket_BasicAuth 函数功能:基本验证协议代理转发 - 参数.一:lpszMethod + 参数.一:lpszRequestType + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:请求的业务类型 + 参数.二:lpszMethod In/Out:In 类型:常量字符指针 可空:N 意思:方法名称 - 参数.二:lpszPostUrl + 参数.三:lpszPostUrl In/Out:In 类型:常量字符指针 可空:N 意思:用户提交的地址 - 参数.三:lpszClientAddr + 参数.四:lpszClientAddr In/Out:In 类型:常量字符指针 可空:N 意思:用户发送的客户端地址 - 参数.四:lpszUser + 参数.五:lpszUser In/Out:In 类型:常量字符指针 可空:N 意思:用户 - 参数.五:lpszPass + 参数.六:lpszPass In/Out:In 类型:常量字符指针 可空:N 意思:密码 - 参数.六:ptszMsgBuffer + 参数.七:ptszMsgBuffer In/Out:Out 类型:字符指针 可空:N 意思:转发数据包 - 参数.七:pInt_MsgLen + 参数.八:pInt_MsgLen In/Out:Out 类型:整数型 可空:N @@ -356,7 +361,7 @@ bool CProtocol_StoragePacket::Protocol_StoragePacket_DirOperator(XCHAR* ptszMsgB 意思:是否成功 备注: *********************************************************************/ -bool CProtocol_StoragePacket::Protocol_StoragePacket_BasicAuth(LPCXSTR lpszMethod, LPCXSTR lpszPostUrl, LPCXSTR lpszClientAddr, LPCXSTR lpszUser, LPCXSTR lpszPass, XCHAR* ptszMsgBuffer, int* pInt_MsgLen) +bool CProtocol_StoragePacket::Protocol_StoragePacket_BasicAuth(int nRequestType, LPCXSTR lpszMethod, LPCXSTR lpszPostUrl, LPCXSTR lpszClientAddr, LPCXSTR lpszUser, LPCXSTR lpszPass, XCHAR* ptszMsgBuffer, int* pInt_MsgLen) { Protocol_IsErrorOccur = false; @@ -368,6 +373,7 @@ bool CProtocol_StoragePacket::Protocol_StoragePacket_BasicAuth(LPCXSTR lpszMetho } Json::Value st_JsonRoot; + st_JsonRoot["nRequestType"] = nRequestType; st_JsonRoot["lpszMethod"] = lpszMethod; st_JsonRoot["lpszPostUrl"] = lpszPostUrl; st_JsonRoot["lpszClientAddr"] = lpszClientAddr; @@ -612,7 +618,7 @@ bool CProtocol_StoragePacket::Protocol_StoragePacket_Bucket(XCHAR* ptszMsgBuffer Json::Value st_JsonArray; auto stl_ListIterator = pStl_ListBucket->begin(); - for (int i = 0; stl_ListIterator != pStl_ListBucket->end(); stl_ListIterator++) + for (; stl_ListIterator != pStl_ListBucket->end(); stl_ListIterator++) { Json::Value st_JsonObject; Json::Value st_JsonSub; @@ -640,6 +646,70 @@ bool CProtocol_StoragePacket::Protocol_StoragePacket_Bucket(XCHAR* ptszMsgBuffer return true; } /******************************************************************** +函数名称:Protocol_StoragePacket_Notfound +函数功能:没有找到 + 参数.一:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出打好包的XML数据 + 参数.二:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出大小 + 参数.三:lpszFileName + In/Out:Out + 类型:常量字符指针 + 可空:N + 意思:输入要打包的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CProtocol_StoragePacket::Protocol_StoragePacket_Notfound(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszFileName) +{ + Protocol_IsErrorOccur = false; + + if ((NULL == ptszMsgBuffer) || (NULL == pInt_MsgLen)) + { + Protocol_IsErrorOccur = true; + Protocol_dwErrorCode = ERROR_XENGINE_STORAGE_PROTOCOL_PARAMENT; + return false; + } + // 创建一个 XML 文档 + XMLDocument m_XMLDocument; + // XML 声明 + XMLDeclaration* pSt_XMLDeclaration = m_XMLDocument.NewDeclaration(R"(xml version="1.0" encoding="utf-8")"); + m_XMLDocument.InsertFirstChild(pSt_XMLDeclaration); + + // 根元素 + XMLElement* pSt_XMLRoot = m_XMLDocument.NewElement("d:error"); + pSt_XMLRoot->SetAttribute("xmlns:d", "DAV:"); + m_XMLDocument.InsertEndChild(pSt_XMLRoot); + + // 子元素 + XMLElement* pSt_XMLHerf = m_XMLDocument.NewElement("d:href"); + pSt_XMLHerf->SetText(lpszFileName); + pSt_XMLRoot->InsertEndChild(pSt_XMLHerf); + // 子元素 + XMLElement* pSt_XMLStatus = m_XMLDocument.NewElement("d:status"); + pSt_XMLStatus->SetText(_X("HTTP/1.1 404 Not Found")); + pSt_XMLRoot->InsertEndChild(pSt_XMLStatus); + // 子元素 + XMLElement* pSt_XMLResponseDesc = m_XMLDocument.NewElement("d:responsedescription"); + pSt_XMLResponseDesc->SetText(_X("Not found")); + pSt_XMLRoot->InsertEndChild(pSt_XMLResponseDesc); + // 将 XML 数据保存到字符串 + XMLPrinter m_XMLPrinter; + m_XMLDocument.Print(&m_XMLPrinter); + + *pInt_MsgLen = m_XMLPrinter.CStrSize() - 1; + memcpy(ptszMsgBuffer, m_XMLPrinter.CStr(), *pInt_MsgLen); + return true; +} +/******************************************************************** 函数名称:Protocol_StoragePacket_WDPropfind 函数功能:propfind协议打包处理函数 参数.一:ptszMsgBuffer @@ -700,7 +770,7 @@ bool CProtocol_StoragePacket::Protocol_StoragePacket_WDPropfind(XCHAR* ptszMsgBu for (int i = 0; i < nFileCount; i++) { - XCHAR tszFileName[MAX_PATH] = {}; + XCHAR tszFileName[XPATH_MAX] = {}; SYSTEMAPI_FILE_ATTR st_FileAttr = {}; BaseLib_String_GetFileAndPath((*ppptszListFile)[i], NULL, tszFileName); SystemApi_File_GetFileAttr((*ppptszListFile)[i], &st_FileAttr); @@ -714,7 +784,7 @@ bool CProtocol_StoragePacket::Protocol_StoragePacket_WDPropfind(XCHAR* ptszMsgBu //文件 XCHAR tszSourceStr[128] = {}; XCHAR tszDestStr[128] = {}; - XCHAR tszFileAlis[MAX_PATH] = {}; + XCHAR tszFileAlis[XPATH_MAX] = {}; _tcsxcpy(tszFileAlis, (*ppptszListFile)[i] + 1); APIHelp_Api_UrlStr(tszSourceStr, (*ppptszListFile)[i]); @@ -733,79 +803,115 @@ bool CProtocol_StoragePacket::Protocol_StoragePacket_WDPropfind(XCHAR* ptszMsgBu pSt_XMLPropstat->InsertEndChild(pSt_XMLProp); //属性名称 XMLElement* pSt_XMLPropName = m_XMLDocument.NewElement("d:displayname"); - pSt_XMLPropName->SetText(tszFileName); + if (_tcsxlen(tszFileName) <= 0) + { + APIHelp_Api_GetLastName(tszFileName, (*ppptszListFile)[i]); + } + pSt_XMLPropName->SetText(tszFileName); pSt_XMLProp->InsertEndChild(pSt_XMLPropName); + XCHAR tszFileSize[128] = {}; + _xstprintf(tszFileSize, _X("%llu"), st_FileAttr.nFileSize); + //属性大小 + XMLElement* pSt_XMLLength = m_XMLDocument.NewElement("d:getcontentlength"); + pSt_XMLLength->SetText(tszFileSize); + pSt_XMLProp->InsertEndChild(pSt_XMLLength); + //属性修改时间 + XMLElement* pSt_XMLModifyTime = m_XMLDocument.NewElement("d:getlastmodified"); + pSt_XMLModifyTime->SetText(tszGMTTime); + pSt_XMLProp->InsertEndChild(pSt_XMLModifyTime); + //属性创建时间 +#if XENGINE_VERSION_KERNEL >= 9 && XENGINE_VERSION_MAIN >= 22 + XCHAR tszISOTime[128] = {}; + BaseLib_Time_ISOTime(tszISOTime, st_FileAttr.nCreateTime); + + XMLElement* pSt_XMLCreateTime = m_XMLDocument.NewElement("d:creationdate"); + pSt_XMLCreateTime->SetText(tszISOTime); + pSt_XMLProp->InsertEndChild(pSt_XMLCreateTime); +#endif if (st_FileAttr.bFile) { - XCHAR tszFileSize[128] = {}; - _xstprintf(tszFileSize, _X("%llu"), st_FileAttr.nFileSize); - //属性大小 - XMLElement* pSt_XMLLength = m_XMLDocument.NewElement("d:getcontentlength"); - pSt_XMLLength->SetText(tszFileSize); - pSt_XMLProp->InsertEndChild(pSt_XMLLength); - //属性修改时间 - XMLElement* pSt_XMLModifyTime = m_XMLDocument.NewElement("d:getlastmodified"); - pSt_XMLModifyTime->SetText(tszGMTTime); - pSt_XMLProp->InsertEndChild(pSt_XMLModifyTime); //增加会话属性 //获得会话 XENGINE_WEBDAVLOCK st_WDLocker = {}; if (Session_Webdav_Get(tszFileAlis, &st_WDLocker)) { // 子元素 - XMLElement* pSt_XMLLockDiscovery = m_XMLDocument.NewElement("D:lockdiscovery"); + XMLElement* pSt_XMLLockDiscovery = m_XMLDocument.NewElement("d:lockdiscovery"); pSt_XMLProp->InsertEndChild(pSt_XMLLockDiscovery); // 子元素 - XMLElement* pSt_XMLLockActive = m_XMLDocument.NewElement("D:activelock"); + XMLElement* pSt_XMLLockActive = m_XMLDocument.NewElement("d:activelock"); pSt_XMLLockDiscovery->InsertEndChild(pSt_XMLLockActive); // 子元素 - XMLElement* pSt_XMLLockType = m_XMLDocument.NewElement("D:locktype"); + XMLElement* pSt_XMLLockType = m_XMLDocument.NewElement("d:locktype"); pSt_XMLLockActive->InsertEndChild(pSt_XMLLockType); if (1 == st_WDLocker.byLockOP) { - XMLElement* pSt_XMLLockWrite = m_XMLDocument.NewElement("D:write"); + XMLElement* pSt_XMLLockWrite = m_XMLDocument.NewElement("d:write"); pSt_XMLLockType->InsertEndChild(pSt_XMLLockWrite); } else if (2 == st_WDLocker.byLockOP) { - XMLElement* pSt_XMLLockRead = m_XMLDocument.NewElement("D:read"); + XMLElement* pSt_XMLLockRead = m_XMLDocument.NewElement("d:read"); pSt_XMLLockType->InsertEndChild(pSt_XMLLockRead); } // 子元素 - XMLElement* pSt_XMLLockScope = m_XMLDocument.NewElement("D:lockscope"); + XMLElement* pSt_XMLLockScope = m_XMLDocument.NewElement("d:lockscope"); pSt_XMLLockActive->InsertEndChild(pSt_XMLLockScope); if (1 == st_WDLocker.byLockType) { - XMLElement* pSt_XMLLockExclusive = m_XMLDocument.NewElement("D:exclusive"); + XMLElement* pSt_XMLLockExclusive = m_XMLDocument.NewElement("d:exclusive"); pSt_XMLLockScope->InsertEndChild(pSt_XMLLockExclusive); } else if (2 == st_WDLocker.byLockType) { - XMLElement* pSt_XMLLockShared = m_XMLDocument.NewElement("D:shared"); + XMLElement* pSt_XMLLockShared = m_XMLDocument.NewElement("d:shared"); pSt_XMLLockScope->InsertEndChild(pSt_XMLLockShared); } // 子元素 - XMLElement* pSt_XMLDepth = m_XMLDocument.NewElement("D:depth"); + XMLElement* pSt_XMLDepth = m_XMLDocument.NewElement("d:depth"); pSt_XMLDepth->SetText(_X("Infinity")); pSt_XMLLockActive->InsertEndChild(pSt_XMLDepth); // 子元素 - XMLElement* pSt_XMLOwner = m_XMLDocument.NewElement("D:owner"); + XMLElement* pSt_XMLOwner = m_XMLDocument.NewElement("d:owner"); pSt_XMLLockActive->InsertEndChild(pSt_XMLOwner); - XMLElement* pSt_XMHRef = m_XMLDocument.NewElement("D:href"); + XMLElement* pSt_XMHRef = m_XMLDocument.NewElement("d:href"); pSt_XMHRef->SetText(st_WDLocker.tszOwner); pSt_XMLOwner->InsertEndChild(pSt_XMHRef); // 子元素 - XMLElement* pSt_XMLTimeout = m_XMLDocument.NewElement("D:timeout"); + XMLElement* pSt_XMLTimeout = m_XMLDocument.NewElement("d:timeout"); pSt_XMLTimeout->SetText(st_WDLocker.tszTimeout); pSt_XMLLockActive->InsertEndChild(pSt_XMLTimeout); // 子元素 - XMLElement* pSt_XMLLockToken = m_XMLDocument.NewElement("D:locktoken"); + XMLElement* pSt_XMLLockToken = m_XMLDocument.NewElement("d:locktoken"); pSt_XMLLockActive->InsertEndChild(pSt_XMLLockToken); - XMLElement* pSt_XMHTokenRef = m_XMLDocument.NewElement("D:href"); + XMLElement* pSt_XMHTokenRef = m_XMLDocument.NewElement("d:href"); pSt_XMHTokenRef->SetText(st_WDLocker.tszToken); pSt_XMLLockToken->InsertEndChild(pSt_XMHTokenRef); } + else + { + //没有锁定 + // 子元素 + XMLElement* pSt_XMLLockSupport = m_XMLDocument.NewElement("d:supportedlock"); + pSt_XMLProp->InsertEndChild(pSt_XMLLockSupport); + + XMLElement* pSt_XMLLockEntry = m_XMLDocument.NewElement("d:lockentry"); + pSt_XMLLockSupport->InsertEndChild(pSt_XMLLockEntry); + + XMLElement* pSt_XMLLockScope = m_XMLDocument.NewElement("d:lockscope"); + pSt_XMLLockEntry->InsertEndChild(pSt_XMLLockScope); + XMLElement* pSt_XMLLockExclusive = m_XMLDocument.NewElement("d:exclusive"); + pSt_XMLLockScope->InsertEndChild(pSt_XMLLockExclusive); + + XMLElement* pSt_XMLLockType = m_XMLDocument.NewElement("d:locktype"); + pSt_XMLLockEntry->InsertEndChild(pSt_XMLLockType); + XMLElement* pSt_XMLLockWrite = m_XMLDocument.NewElement("d:write"); + pSt_XMLLockType->InsertEndChild(pSt_XMLLockWrite); + + XMLElement* pSt_XMLLockDiscovery = m_XMLDocument.NewElement("d:lockdiscovery"); + pSt_XMLProp->InsertEndChild(pSt_XMLLockDiscovery); + } } else { @@ -873,55 +979,55 @@ bool CProtocol_StoragePacket::Protocol_StoragePacket_WDLock(XCHAR* ptszMsgBuffer pSt_XMLRoot->SetAttribute("xmlns:d", "DAV:"); m_XMLDocument.InsertEndChild(pSt_XMLRoot); // 子元素 - XMLElement* pSt_XMLLockDiscovery = m_XMLDocument.NewElement("D:lockdiscovery"); + XMLElement* pSt_XMLLockDiscovery = m_XMLDocument.NewElement("d:lockdiscovery"); pSt_XMLRoot->InsertEndChild(pSt_XMLLockDiscovery); // 子元素 - XMLElement* pSt_XMLLockActive = m_XMLDocument.NewElement("D:activelock"); + XMLElement* pSt_XMLLockActive = m_XMLDocument.NewElement("d:activelock"); pSt_XMLLockDiscovery->InsertEndChild(pSt_XMLLockActive); // 子元素 - XMLElement* pSt_XMLLockType = m_XMLDocument.NewElement("D:locktype"); + XMLElement* pSt_XMLLockType = m_XMLDocument.NewElement("d:locktype"); pSt_XMLLockActive->InsertEndChild(pSt_XMLLockType); if (1 == pSt_WDLock->byLockOP) { - XMLElement* pSt_XMLLockWrite = m_XMLDocument.NewElement("D:write"); + XMLElement* pSt_XMLLockWrite = m_XMLDocument.NewElement("d:write"); pSt_XMLLockType->InsertEndChild(pSt_XMLLockWrite); } else if (2 == pSt_WDLock->byLockOP) { - XMLElement* pSt_XMLLockRead = m_XMLDocument.NewElement("D:read"); + XMLElement* pSt_XMLLockRead = m_XMLDocument.NewElement("d:read"); pSt_XMLLockType->InsertEndChild(pSt_XMLLockRead); } // 子元素 - XMLElement* pSt_XMLLockScope = m_XMLDocument.NewElement("D:lockscope"); + XMLElement* pSt_XMLLockScope = m_XMLDocument.NewElement("d:lockscope"); pSt_XMLLockActive->InsertEndChild(pSt_XMLLockScope); if (1 == pSt_WDLock->byLockType) { - XMLElement* pSt_XMLLockExclusive = m_XMLDocument.NewElement("D:exclusive"); + XMLElement* pSt_XMLLockExclusive = m_XMLDocument.NewElement("d:exclusive"); pSt_XMLLockScope->InsertEndChild(pSt_XMLLockExclusive); } else if (2 == pSt_WDLock->byLockType) { - XMLElement* pSt_XMLLockShared = m_XMLDocument.NewElement("D:shared"); + XMLElement* pSt_XMLLockShared = m_XMLDocument.NewElement("d:shared"); pSt_XMLLockScope->InsertEndChild(pSt_XMLLockShared); } // 子元素 - XMLElement* pSt_XMLDepth = m_XMLDocument.NewElement("D:depth"); + XMLElement* pSt_XMLDepth = m_XMLDocument.NewElement("d:depth"); pSt_XMLDepth->SetText(_X("Infinity")); pSt_XMLLockActive->InsertEndChild(pSt_XMLDepth); // 子元素 - XMLElement* pSt_XMLOwner = m_XMLDocument.NewElement("D:owner"); + XMLElement* pSt_XMLOwner = m_XMLDocument.NewElement("d:owner"); pSt_XMLLockActive->InsertEndChild(pSt_XMLOwner); - XMLElement* pSt_XMHRef = m_XMLDocument.NewElement("D:href"); + XMLElement* pSt_XMHRef = m_XMLDocument.NewElement("d:href"); pSt_XMHRef->SetText(pSt_WDLock->tszOwner); pSt_XMLOwner->InsertEndChild(pSt_XMHRef); // 子元素 - XMLElement* pSt_XMLTimeout = m_XMLDocument.NewElement("D:timeout"); + XMLElement* pSt_XMLTimeout = m_XMLDocument.NewElement("d:timeout"); pSt_XMLTimeout->SetText(pSt_WDLock->tszTimeout); pSt_XMLLockActive->InsertEndChild(pSt_XMLTimeout); // 子元素 - XMLElement* pSt_XMLLockToken = m_XMLDocument.NewElement("D:locktoken"); + XMLElement* pSt_XMLLockToken = m_XMLDocument.NewElement("d:locktoken"); pSt_XMLLockActive->InsertEndChild(pSt_XMLLockToken); - XMLElement* pSt_XMHTokenRef = m_XMLDocument.NewElement("D:href"); + XMLElement* pSt_XMHTokenRef = m_XMLDocument.NewElement("d:href"); pSt_XMHTokenRef->SetText(pSt_WDLock->tszToken); pSt_XMLLockToken->InsertEndChild(pSt_XMHTokenRef); // 将 XML 数据保存到字符串 @@ -981,17 +1087,17 @@ bool CProtocol_StoragePacket::Protocol_StoragePacket_WDPropPatch(XCHAR* ptszMsgB pSt_XMLRoot->SetAttribute("xmlns:d", "DAV:"); m_XMLDocument.InsertEndChild(pSt_XMLRoot); // 子元素 - XMLElement* pSt_XMLResponse = m_XMLDocument.NewElement("D:response"); + XMLElement* pSt_XMLResponse = m_XMLDocument.NewElement("d:response"); pSt_XMLRoot->InsertEndChild(pSt_XMLResponse); // 子元素 - XMLElement* pSt_XMLHRef = m_XMLDocument.NewElement("D:href"); + XMLElement* pSt_XMLHRef = m_XMLDocument.NewElement("d:href"); pSt_XMLHRef->SetText(lpszFileName); pSt_XMLResponse->InsertEndChild(pSt_XMLHRef); // 子元素 - XMLElement* pSt_XMLPropStat = m_XMLDocument.NewElement("D:propstat"); + XMLElement* pSt_XMLPropStat = m_XMLDocument.NewElement("d:propstat"); pSt_XMLResponse->InsertEndChild(pSt_XMLPropStat); // 子元素 - XMLElement* pSt_XMLProp = m_XMLDocument.NewElement("D:prop"); + XMLElement* pSt_XMLProp = m_XMLDocument.NewElement("d:prop"); pSt_XMLPropStat->InsertEndChild(pSt_XMLProp); // 子元素 for (auto stl_ListIterator = pStl_ListName->begin(); stl_ListIterator != pStl_ListName->end(); stl_ListIterator++) @@ -1000,7 +1106,7 @@ bool CProtocol_StoragePacket::Protocol_StoragePacket_WDPropPatch(XCHAR* ptszMsgB pSt_XMLProp->InsertEndChild(pSt_XMLListValue); } // 子元素 - XMLElement* pSt_XMLStatus = m_XMLDocument.NewElement("D:status"); + XMLElement* pSt_XMLStatus = m_XMLDocument.NewElement("d:status"); pSt_XMLStatus->SetText("HTTP/1.1 200 OK"); pSt_XMLPropStat->InsertEndChild(pSt_XMLStatus); // 将 XML 数据保存到字符串 diff --git a/XEngine_Source/StorageModule_Protocol/Protocol_Packet/Protocol_StoragePacket.h b/XEngine_Source/StorageModule_Protocol/Protocol_Packet/Protocol_StoragePacket.h index 2ff4ce8..e95a8eb 100644 --- a/XEngine_Source/StorageModule_Protocol/Protocol_Packet/Protocol_StoragePacket.h +++ b/XEngine_Source/StorageModule_Protocol/Protocol_Packet/Protocol_StoragePacket.h @@ -21,12 +21,13 @@ class CProtocol_StoragePacket bool Protocol_StoragePacket_QueryFile(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, XSTORAGECORE_DBFILE*** pppSt_DBFile, int nListCount, LPCXSTR lpszTimeStart = NULL, LPCXSTR lpszTimeEnd = NULL, XNETHANDLE xhToken = 0); bool Protocol_StoragePacket_Info(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, SESSION_STORAGEINFO*** pppSt_DLInfo, SESSION_STORAGEINFO*** pppSt_UPInfo, int nDLCount, int nUPCount); bool Protocol_StoragePacket_DirOperator(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, XCHAR*** pppszListEnum, int nListCount); - bool Protocol_StoragePacket_BasicAuth(LPCXSTR lpszMethod, LPCXSTR lpszPostUrl, LPCXSTR lpszClientAddr, LPCXSTR lpszUser, LPCXSTR lpszPass, XCHAR* ptszMsgBuffer, int* pInt_MsgLen); + bool Protocol_StoragePacket_BasicAuth(int nRequestType, LPCXSTR lpszMethod, LPCXSTR lpszPostUrl, LPCXSTR lpszClientAddr, LPCXSTR lpszUser, LPCXSTR lpszPass, XCHAR* ptszMsgBuffer, int* pInt_MsgLen); bool Protocol_StoragePacket_UPDown(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszBuckKey, LPCXSTR lpszFileName, LPCXSTR lpszClientAddr, __int64x nFileSize, bool bDown, LPCXSTR lpszFileHash = NULL); bool Protocol_StoragePacket_REQFile(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszFileName = NULL, LPCXSTR lpszFileHash = NULL, XNETHANDLE xhToken = 0); bool Protocol_StoragePacket_Action(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, XNETHANDLE xhToken, XENGINE_ACTIONINFO* pSt_ActionInfo); bool Protocol_StoragePacket_Bucket(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, list* pStl_ListBucket); public: + bool Protocol_StoragePacket_Notfound(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszFileName); bool Protocol_StoragePacket_WDPropfind(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, XCHAR*** ppptszListFile, int nFileCount, LPCXSTR lpszBucketPath, LPCXSTR lpszBucketKey); bool Protocol_StoragePacket_WDLock(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, XENGINE_WEBDAVLOCK* pSt_WDLock); bool Protocol_StoragePacket_WDPropPatch(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszFileName, std::list* pStl_ListName); diff --git a/XEngine_Source/StorageModule_Protocol/StorageModule_Protocol.def b/XEngine_Source/StorageModule_Protocol/StorageModule_Protocol.def index dff1032..a8a1b5c 100644 --- a/XEngine_Source/StorageModule_Protocol/StorageModule_Protocol.def +++ b/XEngine_Source/StorageModule_Protocol/StorageModule_Protocol.def @@ -23,6 +23,7 @@ EXPORTS Protocol_StoragePacket_REQFile Protocol_StoragePacket_Action Protocol_StoragePacket_Bucket + Protocol_StoragePacket_Notfound Protocol_StoragePacket_WDPropfind Protocol_StoragePacket_WDLock Protocol_StoragePacket_WDPropPatch \ No newline at end of file diff --git a/XEngine_Source/StorageModule_Protocol/StorageModule_Protocol.vcxproj b/XEngine_Source/StorageModule_Protocol/StorageModule_Protocol.vcxproj index 834429a..a4eca74 100644 --- a/XEngine_Source/StorageModule_Protocol/StorageModule_Protocol.vcxproj +++ b/XEngine_Source/StorageModule_Protocol/StorageModule_Protocol.vcxproj @@ -104,7 +104,7 @@ false - $(XEngine_Include);../XEngine_Depend/XEngine_Module/jsoncpp;../XEngine_Depend/XEngine_Module/tinyxml2;$(IncludePath) + $(XEngine_Include);../XEngine_Depend/XEngine_Module/jsoncpp;../XEngine_Depend/XEngine_Module/tinyxml2;..\StorageModule_Protocol;$(IncludePath) $(XEngine_Lib32);$(LibraryPath) @@ -119,7 +119,7 @@ false - $(XEngine_Include);../XEngine_Depend/XEngine_Module/jsoncpp;../XEngine_Depend/XEngine_Module/tinyxml2;$(IncludePath) + $(XEngine_Include);../XEngine_Depend/XEngine_Module/jsoncpp;../XEngine_Depend/XEngine_Module/tinyxml2;..\StorageModule_Protocol;$(IncludePath) $(XEngine_Lib64);$(LibraryPath) diff --git a/XEngine_Source/StorageModule_Protocol/StorageProtocol_Define.h b/XEngine_Source/StorageModule_Protocol/StorageProtocol_Define.h index 581b70d..9615ec6 100644 --- a/XEngine_Source/StorageModule_Protocol/StorageProtocol_Define.h +++ b/XEngine_Source/StorageModule_Protocol/StorageProtocol_Define.h @@ -328,37 +328,42 @@ extern "C" bool Protocol_StoragePacket_HTTPPacket(XCHAR* ptszMsgBuffer, int* pIn /******************************************************************** 函数名称:Protocol_StoragePacket_BasicAuth 函数功能:基本验证协议代理转发 - 参数.一:lpszMethod + 参数.一:lpszRequestType + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:请求的业务类型 + 参数.二:lpszMethod In/Out:In 类型:常量字符指针 可空:N 意思:方法名称 - 参数.二:lpszPostUrl + 参数.三:lpszPostUrl In/Out:In 类型:常量字符指针 可空:N 意思:用户提交的地址 - 参数.三:lpszClientAddr + 参数.四:lpszClientAddr In/Out:In 类型:常量字符指针 可空:N 意思:用户发送的客户端地址 - 参数.四:lpszUser + 参数.五:lpszUser In/Out:In 类型:常量字符指针 可空:N 意思:用户 - 参数.五:lpszPass + 参数.六:lpszPass In/Out:In 类型:常量字符指针 可空:N 意思:密码 - 参数.六:ptszMsgBuffer + 参数.七:ptszMsgBuffer In/Out:Out 类型:字符指针 可空:N 意思:转发数据包 - 参数.七:pInt_MsgLen + 参数.八:pInt_MsgLen In/Out:Out 类型:整数型 可空:N @@ -368,7 +373,7 @@ extern "C" bool Protocol_StoragePacket_HTTPPacket(XCHAR* ptszMsgBuffer, int* pIn 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Protocol_StoragePacket_BasicAuth(LPCXSTR lpszMethod, LPCXSTR lpszPostUrl, LPCXSTR lpszClientAddr, LPCXSTR lpszUser, LPCXSTR lpszPass, XCHAR * ptszMsgBuffer, int* pInt_MsgLen); +extern "C" bool Protocol_StoragePacket_BasicAuth(int nRequestType, LPCXSTR lpszMethod, LPCXSTR lpszPostUrl, LPCXSTR lpszClientAddr, LPCXSTR lpszUser, LPCXSTR lpszPass, XCHAR * ptszMsgBuffer, int* pInt_MsgLen); /******************************************************************** 函数名称:Protocol_StoragePacket_UPDown 函数功能:上传下载完成代理通知协议 @@ -618,6 +623,30 @@ extern "C" bool Protocol_StoragePacket_Action(XCHAR* ptszMsgBuffer, int* pInt_Ms *********************************************************************/ extern "C" bool Protocol_StoragePacket_Bucket(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, list* pStl_ListBucket); /******************************************************************** +函数名称:Protocol_StoragePacket_Notfound +函数功能:没有找到 + 参数.一:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出打好包的XML数据 + 参数.二:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出大小 + 参数.三:lpszFileName + In/Out:Out + 类型:常量字符指针 + 可空:N + 意思:输入要打包的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Protocol_StoragePacket_Notfound(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszFileName); +/******************************************************************** 函数名称:Protocol_StoragePacket_WDPropfind 函数功能:propfind协议打包处理函数 参数.一:ptszMsgBuffer diff --git a/XEngine_Source/StorageModule_Protocol/pch.cpp b/XEngine_Source/StorageModule_Protocol/pch.cpp index ba256dc..6520771 100644 --- a/XEngine_Source/StorageModule_Protocol/pch.cpp +++ b/XEngine_Source/StorageModule_Protocol/pch.cpp @@ -72,9 +72,9 @@ extern "C" bool Protocol_StoragePacket_HTTPPacket(XCHAR* ptszMsgBuffer, int* pIn { return m_StoragePacket.Protocol_StoragePacket_HTTPPacket(ptszMsgBuffer, pInt_MsgLen, nCode, lpszMSGInfo); } -extern "C" bool Protocol_StoragePacket_BasicAuth(LPCXSTR lpszMethod, LPCXSTR lpszPostUrl, LPCXSTR lpszClientAddr, LPCXSTR lpszUser, LPCXSTR lpszPass, XCHAR * ptszMsgBuffer, int* pInt_MsgLen) +extern "C" bool Protocol_StoragePacket_BasicAuth(int nRequestType, LPCXSTR lpszMethod, LPCXSTR lpszPostUrl, LPCXSTR lpszClientAddr, LPCXSTR lpszUser, LPCXSTR lpszPass, XCHAR * ptszMsgBuffer, int* pInt_MsgLen) { - return m_StoragePacket.Protocol_StoragePacket_BasicAuth(lpszMethod, lpszPostUrl, lpszClientAddr, lpszUser, lpszPass, ptszMsgBuffer, pInt_MsgLen); + return m_StoragePacket.Protocol_StoragePacket_BasicAuth(nRequestType, lpszMethod, lpszPostUrl, lpszClientAddr, lpszUser, lpszPass, ptszMsgBuffer, pInt_MsgLen); } extern "C" bool Protocol_StoragePacket_UPDown(XCHAR * ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszBuckKey, LPCXSTR lpszFileName, LPCXSTR lpszClientAddr, __int64x nFileSize, bool bDown, LPCXSTR lpszFileHash) { @@ -104,6 +104,10 @@ extern "C" bool Protocol_StoragePacket_Bucket(XCHAR* ptszMsgBuffer, int* pInt_Ms { return m_StoragePacket.Protocol_StoragePacket_Bucket(ptszMsgBuffer, pInt_MsgLen, pStl_ListBucket); } +extern "C" bool Protocol_StoragePacket_Notfound(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszFileName) +{ + return m_StoragePacket.Protocol_StoragePacket_Notfound(ptszMsgBuffer, pInt_MsgLen, lpszFileName); +} extern "C" bool Protocol_StoragePacket_WDPropfind(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, XCHAR*** ppptszListFile, int nFileCount, LPCXSTR lpszBucketPath, LPCXSTR lpszBucketKey) { return m_StoragePacket.Protocol_StoragePacket_WDPropfind(ptszMsgBuffer, pInt_MsgLen, ppptszListFile, nFileCount, lpszBucketPath, lpszBucketKey); diff --git a/XEngine_Source/StorageModule_Session/Makefile b/XEngine_Source/StorageModule_Session/Makefile index a2a0fcf..1cb6ef7 100644 --- a/XEngine_Source/StorageModule_Session/Makefile +++ b/XEngine_Source/StorageModule_Session/Makefile @@ -1,11 +1,7 @@ -CC = g++ -Wall -std=c++17 -fPIC -PLATFORM = linux +CC = g++ -Wall -std=c++20 -fPIC PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ LOADSO = LIB = -lXEngine_BaseLib -lNetHelp_APIAddr @@ -13,31 +9,29 @@ LIBEX = OBJECTS = Session_DLStroage.o Session_UPStroage.o Session_Action.o Session_Webdav.o pch.o ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = +FLAGS = -c -D _RELEASE +DEBUG = -O2 else ifeq ($(PLATFORM),mac) FLAGS = -c - DEBUG = -g + DEBUG = -g -D _DEBUG else FLAGS = -c -lc_p - DEBUG = -g -pg + DEBUG = -g -pg -D _DEBUG endif endif ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE +override UNICODE := -D __UNICODE__ else -UNICODE = +override UNICODE := -D __ANSI__ endif ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu endif FILEEXT = so LIBFLAG = -shared @@ -46,7 +40,6 @@ ifeq ($(PLATFORM),linux) else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac FILEEXT = dylib LIBFLAG = -dynamiclib LIBEX = -lpthread -ldl diff --git a/XEngine_Source/StorageModule_Session/Session_Define.h b/XEngine_Source/StorageModule_Session/Session_Define.h index ee49025..d653fea 100644 --- a/XEngine_Source/StorageModule_Session/Session_Define.h +++ b/XEngine_Source/StorageModule_Session/Session_Define.h @@ -17,11 +17,11 @@ typedef struct { struct { - XCHAR tszBoundStr[MAX_PATH]; //boundary信息 + XCHAR tszBoundStr[XPATH_MAX]; //boundary信息 bool bBoundMode; //是否是bound上传模式 bool bBoundStart; }st_Boundary; - XCHAR tszFileDir[MAX_PATH]; //文件地址 + XCHAR tszFileDir[XPATH_MAX]; //文件地址 XCHAR tszClientAddr[128]; //操作的用户地址 XCHAR tszFileHash[128]; //文件HASH值 XCHAR tszBuckKey[128]; //BUCKKey diff --git a/XEngine_Source/XEngine_Depend b/XEngine_Source/XEngine_Depend index fda9f7d..7a6b18a 160000 --- a/XEngine_Source/XEngine_Depend +++ b/XEngine_Source/XEngine_Depend @@ -1 +1 @@ -Subproject commit fda9f7d9140cc6a32eecb499e2acb67e8e1c7e6f +Subproject commit 7a6b18a4e50d6042e2a1147cf5d9f60757c09300 diff --git a/XEngine_Source/XEngine_StorageApp/Makefile b/XEngine_Source/XEngine_StorageApp/Makefile index b1cdc46..d72db36 100644 --- a/XEngine_Source/XEngine_StorageApp/Makefile +++ b/XEngine_Source/XEngine_StorageApp/Makefile @@ -1,9 +1,5 @@ -CC = g++ -Wall -std=c++17 -fPIC -PLATFORM = linux +CC = g++ -Wall -std=c++20 -fPIC -Wno-format-overflow PLATVER = -PLATDIR = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ LOADSO = -L ../XEngine_Depend/XEngine_Module/jsoncpp -L ../XEngine_Depend/XEngine_Module/tinyxml2 -L ../XEngine_Depend/XEngine_Module/XEngine_InfoReport \ -L ../StorageModule_Database -L ../StorageModule_Config -L ../StorageModule_Session -L ../StorageModule_APIHelp -L ../StorageModule_Protocol -L ../StorageModule_BTorrent @@ -15,38 +11,35 @@ OBJECTS = Storage_TaskPass.o Storage_TaskManage.o Storage_TaskP2p.o Storage_Task StorageApp_Config.o StorageApp_Download.o StorageApp_Network.o StorageApp_Center.o StorageApp_UPLoader.o StorageApp_Webdav.o XEngine_StorageApp.o ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = +FLAGS = -c -D _RELEASE +DEBUG = -O2 else ifeq ($(PLATFORM),mac) FLAGS = -c - DEBUG = -g + DEBUG = -g -D _DEBUG else FLAGS = -c -lc_p - DEBUG = -g -pg + DEBUG = -g -pg -D _DEBUG endif endif ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE +override UNICODE := -D __UNICODE__ else -UNICODE = +override UNICODE := -D __ANSI__ endif ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu endif LIBEX = -lpthread -lrt -ldl LOADBIN = -Wl,-rpath=./,--disable-new-dtags else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac LIBEX = -lpthread -ldl LOADBIN = -Wl,-rpath,@loader_path/./ endif diff --git a/XEngine_Source/XEngine_StorageApp/StorageApp_Center.cpp b/XEngine_Source/XEngine_StorageApp/StorageApp_Center.cpp index 283f602..0448450 100644 --- a/XEngine_Source/XEngine_StorageApp/StorageApp_Center.cpp +++ b/XEngine_Source/XEngine_StorageApp/StorageApp_Center.cpp @@ -1,6 +1,6 @@ #include "StorageApp_Hdr.h" -XHTHREAD CALLBACK XEngine_Center_HTTPThread(XPVOID lParam) +XHTHREAD XCALLBACK XEngine_Center_HTTPThread(XPVOID lParam) { int nThreadPos = *(int*)lParam; nThreadPos++; @@ -43,22 +43,28 @@ XHTHREAD CALLBACK XEngine_Center_HTTPThread(XPVOID lParam) bool XEngine_Task_HttpCenter(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, XCHAR** pptszListHdr, int nHdrCount) { int nSDLen = 2048; - int nRVLen = 2048; XCHAR tszSDBuffer[2048] = {}; - XCHAR tszRVBuffer[2048] = {}; - XCHAR tszAPIVersion[64]; - XCHAR tszAPIMethod[64]; - XCHAR tszAPIName[64]; - RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam; - - memset(tszAPIVersion, '\0', sizeof(tszAPIVersion)); - memset(tszAPIMethod, '\0', sizeof(tszAPIMethod)); - memset(tszAPIName, '\0', sizeof(tszAPIName)); - memset(&st_HDRParam, '\0', sizeof(RFCCOMPONENTS_HTTP_HDRPARAM)); + XCHAR tszStrKey[XPATH_MAX] = {}; + XCHAR tszStrVlu[XPATH_MAX] = {}; + RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam = {}; LPCXSTR lpszMethodPost = _X("POST"); - LPCXSTR lpszMethodOption = _X("OPTIONS"); + LPCXSTR lpszMethodGet = _X("GET"); + XCHAR** pptszUrlList; + XCHAR tszUrlName[128]; + int nUrlCount = 0; + //得到URL参数个数 + HttpProtocol_ServerHelp_GetParament(pSt_HTTPParam->tszHttpUri, &pptszUrlList, &nUrlCount, tszUrlName); + if (nUrlCount < 1) + { + st_HDRParam.nHttpCode = 400; + HttpProtocol_Server_SendMsgEx(xhCenterHttp, tszSDBuffer, &nSDLen, &st_HDRParam); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen); + BaseLib_Memory_Free((XPPPMEM)&pptszUrlList, nUrlCount); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); + return false; + } st_HDRParam.bIsClose = true; st_HDRParam.nHttpCode = 200; if (st_ServiceCfg.st_XProxy.bAuthPass) @@ -70,7 +76,6 @@ bool XEngine_Task_HttpCenter(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int memset(tszUserPass, '\0', sizeof(tszUserPass)); if (!APIHelp_Api_ProxyAuth(tszUserName, tszUserPass, pptszListHdr, nHdrCount)) { - st_HDRParam.bIsClose = true; st_HDRParam.bAuth = true; st_HDRParam.nHttpCode = 401; @@ -82,11 +87,10 @@ bool XEngine_Task_HttpCenter(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int int nResponseCode = 0; XCHAR* ptszBody = NULL; - Protocol_StoragePacket_BasicAuth(pSt_HTTPParam->tszHttpMethod, pSt_HTTPParam->tszHttpUri, lpszClientAddr, tszUserName, tszUserPass, tszSDBuffer, &nSDLen); + Protocol_StoragePacket_BasicAuth(STORAGE_NETTYPE_HTTPCENTER, pSt_HTTPParam->tszHttpMethod, pSt_HTTPParam->tszHttpUri, lpszClientAddr, tszUserName, tszUserPass, tszSDBuffer, &nSDLen); APIClient_Http_Request(_X("POST"), st_ServiceCfg.st_XProxy.tszAuthPass, tszSDBuffer, &nResponseCode, &ptszBody, &nSDLen); if (200 != nResponseCode) { - st_HDRParam.bIsClose = true; st_HDRParam.bAuth = true; st_HDRParam.nHttpCode = nResponseCode; @@ -94,46 +98,55 @@ bool XEngine_Task_HttpCenter(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPCENTER); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("业务客户端:%s,用户验证失败,用户名:%s,密码:%s,错误码:%d,错误内容:%s"), tszUserName, tszUserPass, tszUserPass, nResponseCode, ptszBody); } - BaseLib_Memory_FreeCStyle((VOID**)&ptszBody); + BaseLib_Memory_FreeCStyle((XPPMEM)&ptszBody); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("业务客户端:%s,代理服务:%s 验证通过,用户名:%s,密码:%s"), lpszClientAddr, st_ServiceCfg.st_XProxy.tszAuthPass, tszUserName, tszUserPass); st_HDRParam.bAuth = true; } if (0 == _tcsxnicmp(lpszMethodPost, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodPost))) { - LPCXSTR lpszMethodPass = _X("Pass"); - LPCXSTR lpszMehtodManage = _X("Manage"); - LPCXSTR lpszMehtodAction = _X("Action"); + LPCXSTR lpszAPIPass = _X("Pass"); + LPCXSTR lpszAPIManage = _X("Manage"); + LPCXSTR lpszAPIAction = _X("Action"); - if (!HttpProtocol_ServerHelp_GetUrlApi(pSt_HTTPParam->tszHttpUri, tszAPIVersion, tszAPIMethod, tszAPIName)) - { - Protocol_StoragePacket_HTTPPacket(tszRVBuffer, &nRVLen, ERROR_STORAGE_PROTOCOL_HTTP_MANAGE_APINAME, "api name is incorrect"); - HttpProtocol_Server_SendMsgEx(xhCenterHttp, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPCENTER); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("业务客户端:%s,请求的API不支持"), lpszClientAddr); - return false; - } + BaseLib_String_GetKeyValueA(pptszUrlList[0], "=", tszStrKey, tszStrVlu); //通知类型.用于多服务器 - if (0 == _tcsxnicmp(lpszMethodPass, tszAPIMethod, _tcsxlen(lpszMethodPass))) + if (0 == _tcsxnicmp(lpszAPIPass, tszStrVlu, _tcsxlen(lpszAPIPass))) { - XEngine_Task_Pass(tszAPIName, lpszClientAddr, lpszMsgBuffer, nMsgLen, pSt_HTTPParam, pptszListHdr, nHdrCount); + //http://127.0.0.1:5100/api?function=pass¶m=xxx + memset(tszStrVlu, '\0', sizeof(tszStrVlu)); + BaseLib_String_GetKeyValueA(pptszUrlList[1], "=", tszStrKey, tszStrVlu); + XEngine_Task_Pass(tszStrVlu, lpszClientAddr, lpszMsgBuffer, nMsgLen, pSt_HTTPParam); } - else if (0 == _tcsxnicmp(lpszMehtodManage, tszAPIMethod, _tcsxlen(lpszMehtodManage))) + else if (0 == _tcsxnicmp(lpszAPIManage, tszStrVlu, _tcsxlen(lpszAPIManage))) { - XEngine_Task_Manage(tszAPIName, lpszClientAddr, lpszMsgBuffer, nMsgLen, pSt_HTTPParam, pptszListHdr, nHdrCount); + //http://127.0.0.1:5100/api?function=manage¶m=xxx + memset(tszStrVlu, '\0', sizeof(tszStrVlu)); + BaseLib_String_GetKeyValueA(pptszUrlList[1], "=", tszStrKey, tszStrVlu); + XEngine_Task_Manage(tszStrVlu, lpszClientAddr, lpszMsgBuffer, nMsgLen, pSt_HTTPParam); } - else if (0 == _tcsxnicmp(lpszMehtodAction, tszAPIMethod, _tcsxlen(lpszMehtodAction))) + else if (0 == _tcsxnicmp(lpszAPIAction, tszStrVlu, _tcsxlen(lpszAPIAction))) { - Storage_TaskAction(tszAPIName, lpszClientAddr, lpszMsgBuffer, nMsgLen, pSt_HTTPParam); + //http://127.0.0.1:5100/api?function=action¶m=xxx + memset(tszStrVlu, '\0', sizeof(tszStrVlu)); + BaseLib_String_GetKeyValueA(pptszUrlList[1], "=", tszStrKey, tszStrVlu); + Storage_TaskAction(tszStrVlu, lpszClientAddr, lpszMsgBuffer, nMsgLen, pSt_HTTPParam); } } - else if (0 == _tcsxnicmp(lpszMethodOption, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodOption))) + else if (0 == _tcsxnicmp(lpszMethodGet, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodGet))) { //用于心跳 - LPCXSTR lpszHdrBuffer = _X("Allow: POST GET PUT\r\n"); - HttpProtocol_Server_SendMsgEx(xhCenterHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, lpszHdrBuffer); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPCENTER); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("业务客户端:%s,请求OPTIONS心跳方法成功"), lpszClientAddr); + //http://127.0.0.1:5100/api?function=heart + LPCXSTR lpszAPIHeart = _X("heart"); + + BaseLib_String_GetKeyValueA(pptszUrlList[0], "=", tszStrKey, tszStrVlu); + if (0 == _tcsxnicmp(lpszAPIHeart, tszStrVlu, _tcsxlen(lpszAPIHeart))) + { + LPCXSTR lpszHdrBuffer = _X("Allow: POST GET PUT\r\n"); + HttpProtocol_Server_SendMsgEx(xhCenterHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, lpszHdrBuffer); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPCENTER); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("业务客户端:%s,请求GET心跳方法成功"), lpszClientAddr); + } } else { diff --git a/XEngine_Source/XEngine_StorageApp/StorageApp_Center.h b/XEngine_Source/XEngine_StorageApp/StorageApp_Center.h index 9ce548a..aace083 100644 --- a/XEngine_Source/XEngine_StorageApp/StorageApp_Center.h +++ b/XEngine_Source/XEngine_StorageApp/StorageApp_Center.h @@ -10,5 +10,5 @@ // Purpose: HTTP管理服务处理类 // History: *********************************************************************/ -XHTHREAD CALLBACK XEngine_Center_HTTPThread(XPVOID lParam); +XHTHREAD XCALLBACK XEngine_Center_HTTPThread(XPVOID lParam); bool XEngine_Task_HttpCenter(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, XCHAR** pptszListHdr, int nHdrCount); \ No newline at end of file diff --git a/XEngine_Source/XEngine_StorageApp/StorageApp_Config.cpp b/XEngine_Source/XEngine_StorageApp/StorageApp_Config.cpp index bdfe294..61d3880 100644 --- a/XEngine_Source/XEngine_StorageApp/StorageApp_Config.cpp +++ b/XEngine_Source/XEngine_StorageApp/StorageApp_Config.cpp @@ -53,39 +53,47 @@ bool StorageApp_Config_Parament(int argc,char **argv) StorageApp_Config_ParamentHelp(); return false; } - if ((0 == _tcsxcmp("-v",argv[i])) || (0 == _tcsxcmp("-V",argv[i]))) + if ((0 == _tcsxcmp("-v", argv[i])) || (0 == _tcsxcmp("-V", argv[i]))) { string m_StrVersion = st_ServiceCfg.st_XVer.pStl_ListStorage->front(); printf("Version:%s\n", m_StrVersion.c_str()); return false; } - else if (0 == _tcsxcmp("-l",argv[i])) - { - st_ServiceCfg.st_XLog.nLogLeave = _ttxoi(argv[++i]); - } - else if (0 == _tcsxcmp("-d",argv[i])) + else if (0 == _tcsxcmp("-d", argv[i])) { st_ServiceCfg.bDeamon = _ttxoi(argv[++i]); } - else if (0 == _tcsxcmp("-r", argv[i])) - { + else if (0 == _tcsxcmp("-r", argv[i])) + { st_ServiceCfg.st_Memory.bReload = true; - } - else if (0 == _tcsxcmp("-u", argv[i])) - { - st_ServiceCfg.bReuseraddr = true; - } - else if (0 == _tcsxcmp("-lt", argv[i])) - { - st_ServiceCfg.st_XLog.nLogType = _ttxoi(argv[++i]); - } - else if (0 == _tcsxcmp("-ll", argv[i])) + } + else if (0 == _tcsxcmp("-u", argv[i])) + { + st_ServiceCfg.bReuseraddr = true; + } + else if (0 == _tcsxcmp("-t", argv[i])) { - st_ServiceCfg.st_XLog.nLogLeave = _ttxoi(argv[++i]); + bIsTest = true; } - else if (0 == _tcsxcmp("-t", argv[i])) + else if (0 == _tcsxcmp("-lt", argv[i])) + { + st_ServiceCfg.st_XLog.nLogType = _ttxoi(argv[++i]); + } + else if (0 == _tcsxcmp("-ll", argv[i])) + { + st_ServiceCfg.st_XLog.nLogLeave = _ttxoi(argv[++i]); + } + else if (0 == _tcsxcmp("-l", argv[i])) { - bIsTest = true; + LPCXSTR lpszLogLevel = argv[++i]; + if (0 == _tcsxcmp("debug", lpszLogLevel)) + { + st_ServiceCfg.st_XLog.nLogLeave = XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG; + } + else if (0 == _tcsxcmp("info", lpszLogLevel)) + { + st_ServiceCfg.st_XLog.nLogLeave = XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO; + } } } diff --git a/XEngine_Source/XEngine_StorageApp/StorageApp_Download.cpp b/XEngine_Source/XEngine_StorageApp/StorageApp_Download.cpp index c8f4d3d..f508826 100644 --- a/XEngine_Source/XEngine_StorageApp/StorageApp_Download.cpp +++ b/XEngine_Source/XEngine_StorageApp/StorageApp_Download.cpp @@ -1,6 +1,6 @@ #include "StorageApp_Hdr.h" -XHTHREAD CALLBACK XEngine_Download_HTTPThread(XPVOID lParam) +XHTHREAD XCALLBACK XEngine_Download_HTTPThread(XPVOID lParam) { int nThreadPos = *(int*)lParam; nThreadPos++; @@ -28,7 +28,7 @@ XHTHREAD CALLBACK XEngine_Download_HTTPThread(XPVOID lParam) //获得指定下载客户端触发信息 if (HttpProtocol_Server_GetMemoryEx(xhDLHttp, ppSt_PKTClient[i]->tszClientAddr, &ptszMsgBuffer, &nMsgLen, &st_HTTPParam, &ppszListHdr, &nHdrCount)) { - XEngine_Task_HttpDownload(ppSt_PKTClient[i]->tszClientAddr, ptszMsgBuffer, nMsgLen, &st_HTTPParam, ppszListHdr, nHdrCount); + XEngine_Task_HttpDownload(ppSt_PKTClient[i]->tszClientAddr, ptszMsgBuffer, nMsgLen, &st_HTTPParam, ppszListHdr, nHdrCount, STORAGE_NETTYPE_HTTPDOWNLOAD); } BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBuffer); BaseLib_Memory_Free((XPPPMEM)&ppszListHdr, nHdrCount); @@ -40,10 +40,11 @@ XHTHREAD CALLBACK XEngine_Download_HTTPThread(XPVOID lParam) return 0; } -void CALLBACK XEngine_Download_CBSend(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) +void XCALLBACK XEngine_Download_CBSend(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { int nMsgLen = 4096; int nListCount = 0; + int nNetType = 0; __int64u nTimeWait = 0; XCHAR tszMsgBuffer[4096]; SESSION_STORAGEINFO st_StorageInfo; @@ -51,7 +52,15 @@ void CALLBACK XEngine_Download_CBSend(LPCXSTR lpszClientAddr, XSOCKET hSocket, X memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); memset(&st_StorageInfo, '\0', sizeof(SESSION_STORAGEINFO)); - Session_DLStroage_GetInfo(lpszClientAddr, &st_StorageInfo); + if (NULL != lParam) + { + nNetType = *(int*)lParam; + } + if (!Session_DLStroage_GetInfo(lpszClientAddr, &st_StorageInfo)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("下载客户端:%s,获取用户对应文件内容失败,错误:%lX"), lpszClientAddr, Session_GetLastError()); + return; + } if (st_ServiceCfg.st_XLimit.bLimitMode && st_StorageInfo.nLimit > 0) { __int64u nLimitTime = 0; @@ -59,7 +68,14 @@ void CALLBACK XEngine_Download_CBSend(LPCXSTR lpszClientAddr, XSOCKET hSocket, X if (nLimitTime > (__int64u)st_StorageInfo.nLimit) { //当前平均速度大于限制速度,不做处理 - NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr, XEngine_Download_CBSend); + if (STORAGE_NETTYPE_HTTPWEBDAV == nNetType) + { + NetCore_TCPXCore_CBSendEx(xhNetWebdav, lpszClientAddr, XEngine_Download_CBSend, lParam); + } + else + { + NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr, XEngine_Download_CBSend, lParam); + } return; } } @@ -69,12 +85,12 @@ void CALLBACK XEngine_Download_CBSend(LPCXSTR lpszClientAddr, XSOCKET hSocket, X { if (st_ServiceCfg.st_XProxy.bDLPass) { - int nPLen = MAX_PATH; + int nPLen = XPATH_MAX; int nHttpCode = 0; - XCHAR tszProxyStr[MAX_PATH]; + XCHAR tszProxyStr[XPATH_MAX]; SESSION_STORAGEINFO st_StorageInfo; - memset(tszProxyStr, '\0', MAX_PATH); + memset(tszProxyStr, '\0', XPATH_MAX); memset(&st_StorageInfo, '\0', sizeof(SESSION_STORAGEINFO)); Session_DLStroage_GetInfo(lpszClientAddr, &st_StorageInfo); @@ -88,7 +104,15 @@ void CALLBACK XEngine_Download_CBSend(LPCXSTR lpszClientAddr, XSOCKET hSocket, X XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("下载客户端:%s,请求完成通知失败,可能对方服务没有开启,文件:%s,地址:%s"), lpszClientAddr, st_StorageInfo.tszFileDir, st_ServiceCfg.st_XProxy.tszDLPass); } } - NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr); + if (STORAGE_NETTYPE_HTTPWEBDAV == nNetType) + { + NetCore_TCPXCore_CBSendEx(xhNetWebdav, lpszClientAddr); + } + else + { + NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr); + } + free(lParam); Session_DLStroage_Delete(lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("下载客户端:%s,文件已经发送完毕,用户已经被移除发送列表"), lpszClientAddr); } @@ -98,24 +122,20 @@ void CALLBACK XEngine_Download_CBSend(LPCXSTR lpszClientAddr, XSOCKET hSocket, X { Algorithm_Calculation_ADDSDFlow(st_StorageInfo.xhToken, nMsgLen); } - XEngine_Task_SendDownload(lpszClientAddr, tszMsgBuffer, nMsgLen); + XEngine_Task_SendDownload(lpszClientAddr, tszMsgBuffer, nMsgLen, nNetType); + } + //限速,如果没有单独限速,默认全局限速 + if (st_ServiceCfg.st_XLimit.bLimitMode && (0 == st_StorageInfo.nLimit)) + { + Session_DLStroage_GetCount(&nListCount); + Algorithm_Calculation_SleepFlow(xhLimit, &nTimeWait, st_ServiceCfg.st_XLimit.nMaxDNLoader, nListCount, 4096); + //WINDOWS下sleep_for精度可能不准 + std::this_thread::sleep_for(std::chrono::microseconds(nTimeWait)); } - } - else - { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("下载客户端:%s,获取用户对应文件内容失败,错误:%lX"), lpszClientAddr, Session_GetLastError()); - } - //限速,如果没有单独限速,默认全局限速 - if (st_ServiceCfg.st_XLimit.bLimitMode && (0 == st_StorageInfo.nLimit)) - { - Session_DLStroage_GetCount(&nListCount); - Algorithm_Calculation_SleepFlow(xhLimit, &nTimeWait, st_ServiceCfg.st_XLimit.nMaxDNLoader, nListCount, 4096); - //WINDOWS下sleep_for精度可能不准 - std::this_thread::sleep_for(std::chrono::microseconds(nTimeWait)); } } -bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, XCHAR** pptszListHdr, int nHdrCount) +bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, XCHAR** pptszListHdr, int nHdrCount, int nNetType) { int nSDLen = 2048; int nLimit = 0; @@ -137,7 +157,7 @@ bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = 405; HttpProtocol_Server_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPDOWNLOAD); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("下载客户端:%s,发送的方法不支持"), lpszClientAddr); return false; } @@ -150,7 +170,7 @@ bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = 503; HttpProtocol_Server_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPDOWNLOAD); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("下载客户端:%s,请求失败,连接数超过限制:%d,无法继续"), lpszClientAddr, st_ServiceCfg.st_XLimit.nMaxDNConnect); return false; } @@ -170,7 +190,7 @@ bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = 401; HttpProtocol_Server_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPDOWNLOAD); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("下载客户端:%s,用户验证失败,错误:%lX"), lpszClientAddr, StorageHelp_GetLastError()); return false; } @@ -178,7 +198,7 @@ bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in int nResponseCode = 0; XCHAR* ptszBody = NULL; - Protocol_StoragePacket_BasicAuth(pSt_HTTPParam->tszHttpMethod, pSt_HTTPParam->tszHttpUri, lpszClientAddr, tszUserName, tszUserPass, tszSDBuffer, &nSDLen); + Protocol_StoragePacket_BasicAuth(STORAGE_NETTYPE_HTTPDOWNLOAD, pSt_HTTPParam->tszHttpMethod, pSt_HTTPParam->tszHttpUri, lpszClientAddr, tszUserName, tszUserPass, tszSDBuffer, &nSDLen); APIClient_Http_Request(_X("POST"), st_ServiceCfg.st_XProxy.tszAuthPass, tszSDBuffer, &nResponseCode, &ptszBody, &nSDLen); if (200 != nResponseCode) { @@ -187,11 +207,11 @@ bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = nResponseCode; HttpProtocol_Server_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPDOWNLOAD); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("下载客户端:%s,用户验证失败,用户名:%s,密码:%s,错误码:%d,错误内容:%s"), tszUserName, tszUserPass, tszUserPass, nResponseCode, ptszBody); } Protocol_StorageParse_SpeedLimit(ptszBody, nSDLen, &nCode, &nLimit); - BaseLib_Memory_FreeCStyle((VOID**)&ptszBody); + BaseLib_Memory_FreeCStyle((XPPMEM)&ptszBody); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("下载客户端:%s,代理服务:%s 验证通过,用户名:%s,密码:%s,值:%d"), lpszClientAddr, st_ServiceCfg.st_XProxy.tszAuthPass, tszUserName, tszUserPass, nCode); st_HDRParam.bAuth = true; } @@ -211,7 +231,7 @@ bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in _xstprintf(tszHdrBuffer, _X("Location: %s%s\r\n"), tszStorageAddr, pSt_HTTPParam->tszHttpUri); HttpProtocol_Server_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, tszHdrBuffer); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPDOWNLOAD); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("下载客户端:%s,请求的文件被要求重定向到:%s%s"), lpszClientAddr, tszStorageAddr, pSt_HTTPParam->tszHttpUri); return true; } @@ -244,7 +264,7 @@ bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = 404; HttpProtocol_Server_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPDOWNLOAD); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("下载客户端:%s,请求文件失败,可能BUCKET:%s 不正确,错误:%lX"), lpszClientAddr, pSt_HTTPParam->tszHttpUri, StorageHelp_GetLastError()); return false; } @@ -254,7 +274,7 @@ bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = 404; HttpProtocol_Server_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPDOWNLOAD); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("下载客户端:%s,请求文件失败,请求的BUCKET:%s 已经被禁用"), lpszClientAddr, st_StorageBucket.tszBuckKey); return false; } @@ -264,11 +284,11 @@ bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in BaseLib_String_FixPath(tszFileDir, nPathType); int nHashLen = 0; - XBYTE tszHashKey[MAX_PATH]; - XCHAR tszFieldStr[MAX_PATH]; + XBYTE tszHashKey[XPATH_MAX]; + XCHAR tszFieldStr[XPATH_MAX]; XCHAR tszHashStr[128]; - memset(tszHashKey, '\0', MAX_PATH); - memset(tszFieldStr, '\0', MAX_PATH); + memset(tszHashKey, '\0', XPATH_MAX); + memset(tszFieldStr, '\0', XPATH_MAX); memset(tszHashStr, '\0', sizeof(tszHashStr)); //得到文件HASH Cryption_Api_Digest(tszFileDir, tszHashKey, &nHashLen, true, st_ServiceCfg.st_XStorage.nHashMode); @@ -285,7 +305,7 @@ bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = 404; HttpProtocol_Server_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPDOWNLOAD); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("下载客户端:%s,插入用户请求失败,文件:%s,错误:%lX"), lpszClientAddr, tszFileDir, Session_GetLastError()); return false; } @@ -309,25 +329,37 @@ bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.bIsClose = true; } _xstprintf(tszFieldStr, _X("FileHash: %s\r\n"), tszHashStr); - HttpProtocol_Server_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, ullSize, tszFieldStr); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPDOWNLOAD); //不能在send之前调用 - if (!NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr, XEngine_Download_CBSend)) + HttpProtocol_Server_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, ullSize, tszFieldStr); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); + //发送 + bool bRet = false; + int* pInt_NetType = (int*)malloc(sizeof(int)); + *pInt_NetType = nNetType; + if (STORAGE_NETTYPE_HTTPWEBDAV == nNetType) + { + bRet = NetCore_TCPXCore_CBSendEx(xhNetWebdav, lpszClientAddr, XEngine_Download_CBSend, pInt_NetType); + } + else + { + bRet = NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr, XEngine_Download_CBSend, pInt_NetType); + } + if (!bRet) { st_HDRParam.bIsClose = true; st_HDRParam.nHttpCode = 404; HttpProtocol_Server_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPDOWNLOAD); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("下载客户端:%s,设置回调下载失败,文件:%s,错误:%lX"), lpszClientAddr, tszFileDir, Session_GetLastError()); return false; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("下载客户端:%s,请求下载文件成功,文件名:%s,总大小:%llu,发送大小:%llu,范围:%d - %d"), lpszClientAddr, tszFileDir, ullCount, ullSize, nPosStart, nPosEnd); return true; } -bool XEngine_Task_SendDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen) +bool XEngine_Task_SendDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, int nNetType) { - if (!XEngine_Net_SendMsg(lpszClientAddr, lpszMsgBuffer, nMsgLen, STORAGE_NETTYPE_HTTPDOWNLOAD)) + if (!XEngine_Net_SendMsg(lpszClientAddr, lpszMsgBuffer, nMsgLen, nNetType)) { if (Session_DLStorage_SetSeek(lpszClientAddr, -nMsgLen)) { @@ -335,7 +367,7 @@ bool XEngine_Task_SendDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in } else { - XEngine_Net_CloseClient(lpszClientAddr, STORAGE_LEAVETYPE_CLOSE, STORAGE_NETTYPE_HTTPDOWNLOAD); + XEngine_Net_CloseClient(lpszClientAddr, STORAGE_LEAVETYPE_CLOSE, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("下载客户端:%s,正在发送文件数据,大小:%d,发送超过重试次数,无法继续,移除发送队列"), lpszClientAddr, nMsgLen); } return false; diff --git a/XEngine_Source/XEngine_StorageApp/StorageApp_Download.h b/XEngine_Source/XEngine_StorageApp/StorageApp_Download.h index 5f989e7..f4f30ab 100644 --- a/XEngine_Source/XEngine_StorageApp/StorageApp_Download.h +++ b/XEngine_Source/XEngine_StorageApp/StorageApp_Download.h @@ -1,7 +1,7 @@ #pragma once -XHTHREAD CALLBACK XEngine_Download_HTTPThread(XPVOID lParam); -void CALLBACK XEngine_Download_CBSend(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +XHTHREAD XCALLBACK XEngine_Download_HTTPThread(XPVOID lParam); +void XCALLBACK XEngine_Download_CBSend(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); -bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, XCHAR** pptszListHdr, int nHdrCount); -bool XEngine_Task_SendDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen); \ No newline at end of file +bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, XCHAR** pptszListHdr, int nHdrCount, int nNetType); +bool XEngine_Task_SendDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, int nNetType); \ No newline at end of file diff --git a/XEngine_Source/XEngine_StorageApp/StorageApp_Hdr.h b/XEngine_Source/XEngine_StorageApp/StorageApp_Hdr.h index 39b52ed..1d1a2e1 100644 --- a/XEngine_Source/XEngine_StorageApp/StorageApp_Hdr.h +++ b/XEngine_Source/XEngine_StorageApp/StorageApp_Hdr.h @@ -67,7 +67,6 @@ using namespace std; #include "../XEngine_Depend/XEngine_Module/XEngine_InfoReport/InfoReport_Define.h" #include "../XEngine_Depend/XEngine_Module/XEngine_InfoReport/InfoReport_Error.h" - #define STORAGE_LEAVETYPE_HEARTBEAT 1 #define STORAGE_LEAVETYPE_BYSELF 2 #define STORAGE_LEAVETYPE_CLOSE 3 diff --git a/XEngine_Source/XEngine_StorageApp/StorageApp_Network.cpp b/XEngine_Source/XEngine_StorageApp/StorageApp_Network.cpp index 2f9237e..fbbd38e 100644 --- a/XEngine_Source/XEngine_StorageApp/StorageApp_Network.cpp +++ b/XEngine_Source/XEngine_StorageApp/StorageApp_Network.cpp @@ -1,6 +1,6 @@ #include "StorageApp_Hdr.h" -bool CALLBACK XEngine_Callback_DownloadLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) +bool XCALLBACK XEngine_Callback_DownloadLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { if (st_ServiceCfg.st_XCert.bDLEnable) { @@ -11,7 +11,7 @@ bool CALLBACK XEngine_Callback_DownloadLogin(LPCXSTR lpszClientAddr, XSOCKET hSo XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("下载客户端:%s,进入了服务器"), lpszClientAddr); return true; } -void CALLBACK XEngine_Callback_DownloadRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) +void XCALLBACK XEngine_Callback_DownloadRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) { if (st_ServiceCfg.st_XCert.bDLEnable) { @@ -36,12 +36,12 @@ void CALLBACK XEngine_Callback_DownloadRecv(LPCXSTR lpszClientAddr, XSOCKET hSoc SocketOpt_HeartBeat_ActiveAddrEx(xhHBDownload, lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("下载客户端:%s,投递包成功,大小:%d"), lpszClientAddr, nMsgLen); } -void CALLBACK XEngine_Callback_DownloadLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) +void XCALLBACK XEngine_Callback_DownloadLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { XEngine_Net_CloseClient(lpszClientAddr, STORAGE_LEAVETYPE_BYSELF, STORAGE_NETTYPE_HTTPDOWNLOAD); } ////////////////////////////////////////////////////////////////////////// -bool CALLBACK XEngine_Callback_UPLoaderLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) +bool XCALLBACK XEngine_Callback_UPLoaderLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { if (st_ServiceCfg.st_XCert.bUPEnable) { @@ -53,7 +53,7 @@ bool CALLBACK XEngine_Callback_UPLoaderLogin(LPCXSTR lpszClientAddr, XSOCKET hSo XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("上传客户端:%s,进入了服务器"), lpszClientAddr); return true; } -void CALLBACK XEngine_Callback_UPLoaderRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) +void XCALLBACK XEngine_Callback_UPLoaderRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) { if (st_ServiceCfg.st_XCert.bUPEnable) { @@ -78,12 +78,12 @@ void CALLBACK XEngine_Callback_UPLoaderRecv(LPCXSTR lpszClientAddr, XSOCKET hSoc SocketOpt_HeartBeat_ActiveAddrEx(xhHBUPLoader, lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("上传客户端:%s,投递包成功,大小:%d"), lpszClientAddr, nMsgLen); } -void CALLBACK XEngine_Callback_UPLoaderLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) +void XCALLBACK XEngine_Callback_UPLoaderLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { XEngine_Net_CloseClient(lpszClientAddr, STORAGE_LEAVETYPE_BYSELF, STORAGE_NETTYPE_HTTPUPLOADER); } ////////////////////////////////////////////////////////////////////////// -bool CALLBACK XEngine_Callback_CenterLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) +bool XCALLBACK XEngine_Callback_CenterLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { if (st_ServiceCfg.st_XCert.bCHEnable) { @@ -94,7 +94,7 @@ bool CALLBACK XEngine_Callback_CenterLogin(LPCXSTR lpszClientAddr, XSOCKET hSock XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("业务客户端:%s,进入了服务器"), lpszClientAddr); return true; } -void CALLBACK XEngine_Callback_CenterRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) +void XCALLBACK XEngine_Callback_CenterRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) { if (st_ServiceCfg.st_XCert.bCHEnable) { @@ -119,12 +119,12 @@ void CALLBACK XEngine_Callback_CenterRecv(LPCXSTR lpszClientAddr, XSOCKET hSocke SocketOpt_HeartBeat_ActiveAddrEx(xhHBCenter, lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("业务客户端:%s,投递包成功,大小:%d"), lpszClientAddr, nMsgLen); } -void CALLBACK XEngine_Callback_CenterLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) +void XCALLBACK XEngine_Callback_CenterLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { XEngine_Net_CloseClient(lpszClientAddr, STORAGE_LEAVETYPE_BYSELF, STORAGE_NETTYPE_HTTPCENTER); } ////////////////////////////////////////////////////////////////////////// -bool CALLBACK XEngine_Callback_WebdavLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) +bool XCALLBACK XEngine_Callback_WebdavLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { if (st_ServiceCfg.st_XCert.bWDEnable) { @@ -135,7 +135,7 @@ bool CALLBACK XEngine_Callback_WebdavLogin(LPCXSTR lpszClientAddr, XSOCKET hSock XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,进入了服务器"), lpszClientAddr); return true; } -void CALLBACK XEngine_Callback_WebdavRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) +void XCALLBACK XEngine_Callback_WebdavRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) { if (st_ServiceCfg.st_XCert.bWDEnable) { @@ -160,24 +160,24 @@ void CALLBACK XEngine_Callback_WebdavRecv(LPCXSTR lpszClientAddr, XSOCKET hSocke SocketOpt_HeartBeat_ActiveAddrEx(xhHBWebdav, lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("WEBDAV客户端:%s,投递包成功,大小:%d"), lpszClientAddr, nMsgLen); } -void CALLBACK XEngine_Callback_WebdavLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) +void XCALLBACK XEngine_Callback_WebdavLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { XEngine_Net_CloseClient(lpszClientAddr, STORAGE_LEAVETYPE_BYSELF, STORAGE_NETTYPE_HTTPWEBDAV); } ////////////////////////////////////////////////////////////////////////// -void CALLBACK XEngine_Callback_HBDownload(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) +void XCALLBACK XEngine_Callback_HBDownload(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) { XEngine_Net_CloseClient(lpszClientAddr, STORAGE_LEAVETYPE_HEARTBEAT, STORAGE_NETTYPE_HTTPDOWNLOAD); } -void CALLBACK XEngine_Callback_HBUPLoader(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) +void XCALLBACK XEngine_Callback_HBUPLoader(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) { XEngine_Net_CloseClient(lpszClientAddr, STORAGE_LEAVETYPE_HEARTBEAT, STORAGE_NETTYPE_HTTPUPLOADER); } -void CALLBACK XEngine_Callback_HBCenter(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) +void XCALLBACK XEngine_Callback_HBCenter(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) { XEngine_Net_CloseClient(lpszClientAddr, STORAGE_LEAVETYPE_HEARTBEAT, STORAGE_NETTYPE_HTTPCENTER); } -void CALLBACK XEngine_Callback_HBWebdav(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) +void XCALLBACK XEngine_Callback_HBWebdav(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) { XEngine_Net_CloseClient(lpszClientAddr, STORAGE_LEAVETYPE_HEARTBEAT, STORAGE_NETTYPE_HTTPWEBDAV); } diff --git a/XEngine_Source/XEngine_StorageApp/StorageApp_Network.h b/XEngine_Source/XEngine_StorageApp/StorageApp_Network.h index a0c1a0c..ac3dfaa 100644 --- a/XEngine_Source/XEngine_StorageApp/StorageApp_Network.h +++ b/XEngine_Source/XEngine_StorageApp/StorageApp_Network.h @@ -1,22 +1,22 @@ #pragma once -bool CALLBACK XEngine_Callback_DownloadLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); -void CALLBACK XEngine_Callback_DownloadRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); -void CALLBACK XEngine_Callback_DownloadLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); -bool CALLBACK XEngine_Callback_UPLoaderLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); -void CALLBACK XEngine_Callback_UPLoaderRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); -void CALLBACK XEngine_Callback_UPLoaderLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); -bool CALLBACK XEngine_Callback_CenterLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); -void CALLBACK XEngine_Callback_CenterRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); -void CALLBACK XEngine_Callback_CenterLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); -bool CALLBACK XEngine_Callback_WebdavLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); -void CALLBACK XEngine_Callback_WebdavRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); -void CALLBACK XEngine_Callback_WebdavLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +bool XCALLBACK XEngine_Callback_DownloadLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +void XCALLBACK XEngine_Callback_DownloadRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); +void XCALLBACK XEngine_Callback_DownloadLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +bool XCALLBACK XEngine_Callback_UPLoaderLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +void XCALLBACK XEngine_Callback_UPLoaderRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); +void XCALLBACK XEngine_Callback_UPLoaderLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +bool XCALLBACK XEngine_Callback_CenterLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +void XCALLBACK XEngine_Callback_CenterRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); +void XCALLBACK XEngine_Callback_CenterLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +bool XCALLBACK XEngine_Callback_WebdavLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +void XCALLBACK XEngine_Callback_WebdavRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); +void XCALLBACK XEngine_Callback_WebdavLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); -void CALLBACK XEngine_Callback_HBDownload(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); -void CALLBACK XEngine_Callback_HBUPLoader(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); -void CALLBACK XEngine_Callback_HBCenter(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); -void CALLBACK XEngine_Callback_HBWebdav(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); +void XCALLBACK XEngine_Callback_HBDownload(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); +void XCALLBACK XEngine_Callback_HBUPLoader(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); +void XCALLBACK XEngine_Callback_HBCenter(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); +void XCALLBACK XEngine_Callback_HBWebdav(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); bool XEngine_Net_CloseClient(LPCXSTR lpszClientAddr, int nLeaveType, int nClientType = STORAGE_NETTYPE_HTTPDOWNLOAD); bool XEngine_Net_SendMsg(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, int nType = STORAGE_NETTYPE_HTTPDOWNLOAD); \ No newline at end of file diff --git a/XEngine_Source/XEngine_StorageApp/StorageApp_UPLoader.cpp b/XEngine_Source/XEngine_StorageApp/StorageApp_UPLoader.cpp index a53c9e9..331bcd8 100644 --- a/XEngine_Source/XEngine_StorageApp/StorageApp_UPLoader.cpp +++ b/XEngine_Source/XEngine_StorageApp/StorageApp_UPLoader.cpp @@ -1,6 +1,6 @@ #include "StorageApp_Hdr.h" -XHTHREAD CALLBACK XEngine_UPLoader_HTTPThread(XPVOID lParam) +XHTHREAD XCALLBACK XEngine_UPLoader_HTTPThread(XPVOID lParam) { int nThreadPos = *(int*)lParam; nThreadPos++; @@ -28,7 +28,7 @@ XHTHREAD CALLBACK XEngine_UPLoader_HTTPThread(XPVOID lParam) //获得指定上传客户端触发信息 if (HttpProtocol_Server_GetMemoryEx(xhUPHttp, ppSt_PKTClient[i]->tszClientAddr, &ptszMsgBuffer, &nMsgLen, &st_HTTPParam, &ppszListHdr, &nHdrCount)) { - XEngine_Task_HttpUPLoader(ppSt_PKTClient[i]->tszClientAddr, ptszMsgBuffer, nMsgLen, &st_HTTPParam, ppszListHdr, nHdrCount); + XEngine_Task_HttpUPLoader(ppSt_PKTClient[i]->tszClientAddr, ptszMsgBuffer, nMsgLen, &st_HTTPParam, ppszListHdr, nHdrCount, STORAGE_NETTYPE_HTTPUPLOADER); } BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBuffer); BaseLib_Memory_Free((XPPPMEM)&ppszListHdr, nHdrCount); @@ -39,7 +39,7 @@ XHTHREAD CALLBACK XEngine_UPLoader_HTTPThread(XPVOID lParam) } return 0; } -void CALLBACK XEngine_UPLoader_UPFlow(XHANDLE xhToken, bool bSDFlow, bool bRVFlow, bool bTime, __int64u nSDFlow, __int64u nRVFlow, __int64u nTimeFlow, XPVOID lParam) +void XCALLBACK XEngine_UPLoader_UPFlow(XHANDLE xhToken, bool bSDFlow, bool bRVFlow, bool bTime, __int64u nSDFlow, __int64u nRVFlow, __int64u nTimeFlow, XPVOID lParam) { XCHAR tszIPAddr[128] = {}; _tcsxcpy(tszIPAddr, (LPCXSTR)lParam); @@ -53,7 +53,7 @@ void CALLBACK XEngine_UPLoader_UPFlow(XHANDLE xhToken, bool bSDFlow, bool bRVFlo } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("上传客户端:%s,接受数据标志:%d,当前平均流量:%llu"), tszIPAddr, bSDFlow, nSDFlow); } -bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, XCHAR** pptszListHdr, int nHdrCount) +bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, XCHAR** pptszListHdr, int nHdrCount, int nNetType) { int nSDLen = 2048; int nLimit = 0; @@ -74,7 +74,7 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = 405; HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("上传客户端:%s,发送的方法:%s 不支持"), lpszClientAddr, pSt_HTTPParam->tszHttpMethod); return false; } @@ -87,7 +87,7 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = 503; HttpProtocol_Server_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPDOWNLOAD); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("上传客户端:%s,请求失败,连接数超过限制:%d,无法继续"), lpszClientAddr, st_ServiceCfg.st_XLimit.nMaxUPConnect); return false; } @@ -107,7 +107,7 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = 401; HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("上传客户端:%s,用户验证失败,错误:%lX"), lpszClientAddr, StorageHelp_GetLastError()); return false; } @@ -115,7 +115,7 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in int nResponseCode = 0; XCHAR* ptszBody = NULL; - Protocol_StoragePacket_BasicAuth(pSt_HTTPParam->tszHttpMethod, pSt_HTTPParam->tszHttpUri, lpszClientAddr, tszUserName, tszUserPass, tszSDBuffer, &nSDLen); + Protocol_StoragePacket_BasicAuth(STORAGE_NETTYPE_HTTPUPLOADER, pSt_HTTPParam->tszHttpMethod, pSt_HTTPParam->tszHttpUri, lpszClientAddr, tszUserName, tszUserPass, tszSDBuffer, &nSDLen); APIClient_Http_Request(_X("POST"), st_ServiceCfg.st_XProxy.tszAuthPass, tszSDBuffer, &nResponseCode, &ptszBody, &nSDLen); if (200 != nResponseCode) { @@ -124,11 +124,11 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = nResponseCode; HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("上传客户端:%s,用户验证失败,用户名:%s,密码:%s,错误码:%d,错误内容:%s"), tszUserName, tszUserPass, tszUserPass, nResponseCode, ptszBody); } Protocol_StorageParse_SpeedLimit(ptszBody, nSDLen, &nCode, &nLimit); - BaseLib_Memory_FreeCStyle((VOID**)&ptszBody); + BaseLib_Memory_FreeCStyle((XPPMEM)&ptszBody); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("上传客户端:%s,代理服务:%s 验证通过,用户名:%s,密码:%s"), lpszClientAddr, st_ServiceCfg.st_XProxy.tszAuthPass, tszUserName, tszUserPass); st_HDRParam.bAuth = true; } @@ -148,17 +148,17 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in _xstprintf(tszHdrBuffer, _X("Location: %s%s\r\n"), tszStorageAddr, pSt_HTTPParam->tszHttpUri); HttpProtocol_Server_SendMsgEx(xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, tszHdrBuffer); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("上传客户端:%s,请求的文件被要求重定向到:%s%s"), lpszClientAddr, tszStorageAddr, pSt_HTTPParam->tszHttpUri); return true; } int nRVMode = 0; int nRVCount = 0; int nHDSize = 0; - XCHAR tszFileName[MAX_PATH]; + XCHAR tszFileName[XPATH_MAX]; XENGINE_STORAGEBUCKET st_StorageBucket; - memset(tszFileName, '\0', MAX_PATH); + memset(tszFileName, '\0', XPATH_MAX); memset(&st_StorageBucket, '\0', sizeof(XENGINE_STORAGEBUCKET)); //解析参数 XCHAR** pptszParamList; @@ -168,7 +168,7 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in { st_HDRParam.nHttpCode = 413; HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); BaseLib_Memory_Free((XPPPMEM)&pptszParamList, nParamCount); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("上传客户端:%s,请求上传文件失败,提供的参数:%s 不正确,错误:%lX"), lpszClientAddr, pSt_HTTPParam->tszHttpUri, HttpProtocol_GetLastError()); return false; @@ -184,7 +184,7 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = 413; HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("上传客户端:%s,请求上传文件失败,可能BUCKET:% 不正确,错误:%lX"), lpszClientAddr, pSt_HTTPParam->tszHttpUri, StorageHelp_GetLastError()); return false; } @@ -197,7 +197,7 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = 413; HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("上传客户端:%s,请求上传文件失败,可能BUCKET:% 不正确,错误:%lX"), lpszClientAddr, pSt_HTTPParam->tszHttpUri, StorageHelp_GetLastError()); return false; } @@ -221,7 +221,7 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.bIsClose = true; st_HDRParam.nHttpCode = 403; HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("上传客户端:%s,准备上传文件:%s 失败,文件已经存在"), lpszClientAddr, tszFileDir); return true; } @@ -232,7 +232,7 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.bIsClose = true; st_HDRParam.nHttpCode = 403; HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("上传客户端:%s,准备上传文件:%s 失败,创建文件失败"), lpszClientAddr, tszFileDir); return true; } @@ -241,7 +241,7 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.bIsClose = false; st_HDRParam.nHttpCode = 201; HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("上传客户端:%s,准备上传文件:%s 成功"), lpszClientAddr, tszFileDir); return true; } @@ -250,7 +250,7 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.bIsClose = true; st_HDRParam.nHttpCode = 403; HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("上传客户端:%s,准备上传文件:%s 失败,服务器关闭了UPReady,无法继续"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); return true; } @@ -268,7 +268,7 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.bIsClose = true; st_HDRParam.nHttpCode = 411; HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("上传客户端:%s,没有用户数据大小字段,无法继续"), lpszClientAddr); return false; } @@ -282,13 +282,13 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = 416; HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("上传客户端:%s,请求断点续传上传文件失败,服务端关闭了此功能,文件:%s,错误:%lX"), lpszClientAddr, tszFileDir, Session_GetLastError()); return false; } } - XCHAR tszTmpPath[MAX_PATH]; - memset(tszTmpPath, '\0', MAX_PATH); + XCHAR tszTmpPath[XPATH_MAX]; + memset(tszTmpPath, '\0', XPATH_MAX); BaseLib_String_GetFileAndPath(tszFileDir, tszTmpPath); if (0 != _xtaccess(tszTmpPath, 0)) @@ -300,7 +300,7 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = 404; HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("上传客户端:%s,请求上传文件失败,上传文件夹不存在,权限错误,文件:%s"), lpszClientAddr, tszFileDir); return false; } @@ -310,21 +310,21 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in if (nLimit > 0 || (st_ServiceCfg.st_XLimit.bLimitMode && st_ServiceCfg.st_XLimit.nMaxUPLoader > 0)) { //处理限速情况 - XCHAR* ptszIPClient = (XCHAR*)malloc(MAX_PATH); + XCHAR* ptszIPClient = (XCHAR*)malloc(XPATH_MAX); if (NULL == ptszIPClient) { st_HDRParam.bIsClose = true; st_HDRParam.nHttpCode = 500; HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("上传客户端:%s,插入用户请求失败,文件:%s,内存申请失败,服务器错误"), lpszClientAddr, tszFileDir); return false; } - memset(ptszIPClient, '\0', MAX_PATH); + memset(ptszIPClient, '\0', XPATH_MAX); _tcsxcpy(ptszIPClient, lpszClientAddr); - nLimit = nLimit == 0 ? st_ServiceCfg.st_XLimit.nMaxUPLoader : nLimit; + nLimit = nLimit == 0 ? (int)st_ServiceCfg.st_XLimit.nMaxUPLoader : nLimit; xhUPSpeed = Algorithm_Calculation_Create(); Algorithm_Calculation_PassiveOPen(xhUPSpeed, XEngine_UPLoader_UPFlow, nLimit, 0, 0, false, ptszIPClient); NetCore_TCPXCore_PasueRecvEx(xhNetUPLoader, lpszClientAddr, false); @@ -336,12 +336,12 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = 500; HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("上传客户端:%s,插入用户请求失败,文件:%s,错误:%lX"), lpszClientAddr, tszFileDir, Session_GetLastError()); return false; } //检查上传模式 - XCHAR tszBoundStr[MAX_PATH] = {}; + XCHAR tszBoundStr[XPATH_MAX] = {}; if (APIHelp_Api_Boundary(&pptszListHdr, nHdrCount, tszBoundStr)) { Session_UPStroage_SetBoundary(lpszClientAddr, tszBoundStr); @@ -396,8 +396,8 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in HttpProtocol_Server_GetRecvModeEx(xhUPHttp, lpszClientAddr, &nRVMode, &nRVCount, &nHDSize); if (nHDSize >= nRVCount) { - int nPLen = MAX_PATH; - XCHAR tszPassNotify[MAX_PATH] = {}; + int nPLen = XPATH_MAX; + XCHAR tszPassNotify[XPATH_MAX] = {}; Session_UPStroage_GetInfo(lpszClientAddr, &st_StorageInfo); if (!st_StorageInfo.st_Boundary.bBoundMode) @@ -409,16 +409,16 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = 200; Protocol_StoragePacket_UPDown(tszPassNotify, &nPLen, st_StorageInfo.tszBuckKey, st_StorageInfo.tszFileDir, st_StorageInfo.tszClientAddr, st_StorageInfo.ullRWLen, false); HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam, tszPassNotify, nPLen); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("上传客户端:%s,请求上传文件成功,文件名:%s,总大小:%lld,写入大小:%lld,文件不完整,需要等待断点续传完毕"), lpszClientAddr, tszFileDir, st_StorageInfo.ullCount, st_StorageInfo.ullRWLen); return true; } } int nHashLen = 0; - XBYTE tszHashStr[MAX_PATH]; + XBYTE tszHashStr[XPATH_MAX]; XSTORAGECORE_DBFILE st_ProtocolFile; - memset(tszHashStr, '\0', MAX_PATH); + memset(tszHashStr, '\0', XPATH_MAX); memset(&st_ProtocolFile, '\0', sizeof(XSTORAGECORE_DBFILE)); _tcsxcpy(st_ProtocolFile.st_ProtocolFile.tszFilePath, st_StorageBucket.tszFilePath); @@ -442,7 +442,7 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = 403; _xtremove(tszFileDir); HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("上传客户端:%s,上传的文件信息HASH校验失败,无法继续,文件:%s 已被删除,HASH:%s,错误:%lX"), lpszClientAddr, tszFileDir, st_ProtocolFile.st_ProtocolFile.tszFileHash, StorageHelp_GetLastError()); return false; @@ -469,7 +469,7 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.bIsClose = true; st_HDRParam.nHttpCode = 200; HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam, tszPassNotify, nPLen); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("上传客户端:%s,请求上传文件成功,文件名:%s,大小:%d"), lpszClientAddr, tszFileDir, nRVCount); } else @@ -478,7 +478,7 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.nHttpCode = 403; _xtremove(st_StorageInfo.tszFileDir); HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam, tszPassNotify, nPLen); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("上传客户端:%s,请求上传文件失败,插入数据库失败:%s,错误:%lX"), lpszClientAddr, tszFileDir, Database_GetLastError()); } } @@ -487,7 +487,7 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in st_HDRParam.bIsClose = true; st_HDRParam.nHttpCode = 200; HttpProtocol_Server_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam, tszPassNotify, nPLen); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("上传客户端:%s,请求上传文件成功,文件名:%s,大小:%d,数据库没有启用,不插入数据库"), lpszClientAddr, tszFileDir, nRVCount); } } diff --git a/XEngine_Source/XEngine_StorageApp/StorageApp_UPLoader.h b/XEngine_Source/XEngine_StorageApp/StorageApp_UPLoader.h index 67f18a9..afd1a98 100644 --- a/XEngine_Source/XEngine_StorageApp/StorageApp_UPLoader.h +++ b/XEngine_Source/XEngine_StorageApp/StorageApp_UPLoader.h @@ -1,5 +1,5 @@ #pragma once -XHTHREAD CALLBACK XEngine_UPLoader_HTTPThread(XPVOID lParam); -void CALLBACK XEngine_UPLoader_UPFlow(XHANDLE xhToken, bool bSDFlow, bool bRVFlow, bool bTime, XPVOID lParam); -bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, XCHAR** pptszListHdr, int nHdrCount); \ No newline at end of file +XHTHREAD XCALLBACK XEngine_UPLoader_HTTPThread(XPVOID lParam); +void XCALLBACK XEngine_UPLoader_UPFlow(XHANDLE xhToken, bool bSDFlow, bool bRVFlow, bool bTime, XPVOID lParam); +bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, XCHAR** pptszListHdr, int nHdrCount, int nNetType); \ No newline at end of file diff --git a/XEngine_Source/XEngine_StorageApp/StorageApp_Webdav.cpp b/XEngine_Source/XEngine_StorageApp/StorageApp_Webdav.cpp index 1aff403..d8055a1 100644 --- a/XEngine_Source/XEngine_StorageApp/StorageApp_Webdav.cpp +++ b/XEngine_Source/XEngine_StorageApp/StorageApp_Webdav.cpp @@ -1,6 +1,6 @@ #include "StorageApp_Hdr.h" -XHTHREAD CALLBACK XEngine_Webdav_HTTPThread(XPVOID lParam) +XHTHREAD XCALLBACK XEngine_Webdav_HTTPThread(XPVOID lParam) { int nThreadPos = *(int*)lParam; nThreadPos++; @@ -60,7 +60,44 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int st_HDRParam.bIsClose = false; st_HDRParam.nHttpCode = 200; + _tcsxcpy(st_HDRParam.tszMimeType, _X("xml")); + if (st_ServiceCfg.st_XProxy.bAuthPass) + { + XCHAR tszUserName[64]; + XCHAR tszUserPass[64]; + + memset(tszUserName, '\0', sizeof(tszUserName)); + memset(tszUserPass, '\0', sizeof(tszUserPass)); + if (!APIHelp_Api_ProxyAuth(tszUserName, tszUserPass, pptszListHdr, nHdrCount)) + { + st_HDRParam.bAuth = true; + st_HDRParam.nHttpCode = 401; + + HttpProtocol_Server_SendMsgEx(xhCenterHttp, tszSDBuffer, &nSDLen, &st_HDRParam); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("WEBDAV客户端:%s,用户验证失败,错误:%lX"), lpszClientAddr, StorageHelp_GetLastError()); + return false; + } + int nResponseCode = 0; + XCHAR* ptszBody = NULL; + + Protocol_StoragePacket_BasicAuth(STORAGE_NETTYPE_HTTPWEBDAV, pSt_HTTPParam->tszHttpMethod, pSt_HTTPParam->tszHttpUri, lpszClientAddr, tszUserName, tszUserPass, tszSDBuffer, &nSDLen); + APIClient_Http_Request(_X("POST"), st_ServiceCfg.st_XProxy.tszAuthPass, tszSDBuffer, &nResponseCode, &ptszBody, &nSDLen); + if (200 != nResponseCode) + { + st_HDRParam.bAuth = true; + st_HDRParam.nHttpCode = nResponseCode; + + HttpProtocol_Server_SendMsgEx(xhCenterHttp, tszSDBuffer, &nSDLen, &st_HDRParam); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPCENTER); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("WEBDAV客户端:%s,用户验证失败,用户名:%s,密码:%s,错误码:%d,错误内容:%s"), tszUserName, tszUserPass, tszUserPass, nResponseCode, ptszBody); + } + BaseLib_Memory_FreeCStyle((XPPMEM)&ptszBody); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,代理服务:%s 验证通过,用户名:%s,密码:%s"), lpszClientAddr, st_ServiceCfg.st_XProxy.tszAuthPass, tszUserName, tszUserPass); + st_HDRParam.bAuth = true; + } + //http://127.0.0.1:5103/storagekey1 if (0 == _tcsxnicmp(lpszMethodOption, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodOption))) { //用于心跳 @@ -94,17 +131,28 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int } int nListCount = 0; XCHAR** pptszListFile; - XCHAR tszFindStr[MAX_PATH] = {}; //得到是否是文件 - if (APIHelp_Api_UrlStr(st_StorageBucket.tszBuckKey, pSt_HTTPParam->tszHttpUri)) + int nALen = 0; + XCHAR tszFileUrl[XPATH_MAX] = {}; + SYSTEMAPI_FILE_ATTR st_FileAttr = {}; + _tcsxcpy(tszFileUrl, pSt_HTTPParam->tszHttpUri + 1); + BaseLib_String_Replace(tszFileUrl, &nALen, st_StorageBucket.tszBuckKey, st_StorageBucket.tszFilePath); + + if (!SystemApi_File_GetFileAttr(tszFileUrl, &st_FileAttr)) + { + st_HDRParam.nHttpCode = 404; + Protocol_StoragePacket_Notfound(tszRVBuffer, &nRVLen, pSt_HTTPParam->tszHttpUri); + HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("WEBDAV客户端:%s,处理WEBDAV协议PROPFIND方法失败,文件没有找到,URL:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); + return false; + } + if (st_FileAttr.bFile) { - int nALen = 0; - _tcsxcpy(tszFindStr, pSt_HTTPParam->tszHttpUri + 1); - BaseLib_String_Replace(tszFindStr, &nALen, st_StorageBucket.tszBuckKey, st_StorageBucket.tszFilePath, true); //如果是文件 nListCount = 1; - BaseLib_Memory_Malloc((XPPPMEM)&pptszListFile, nListCount, MAX_PATH); - _tcsxcpy(pptszListFile[0], tszFindStr); + BaseLib_Memory_Malloc((XPPPMEM)&pptszListFile, nListCount, XPATH_MAX); + _tcsxcpy(pptszListFile[0], tszFileUrl); } else { @@ -113,21 +161,19 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int HttpProtocol_ServerHelp_GetField(&pptszListHdr, nHdrCount, _X("Depth"), tszVluStr); if (1 == _ttxoi(tszVluStr)) { - SystemApi_File_EnumFile(tszFindStr, &pptszListFile, &nListCount, false, 3); + SystemApi_File_EnumFile(tszFileUrl, &pptszListFile, &nListCount, false, 3); } else { - SystemApi_File_EnumFile(tszFindStr, &pptszListFile, &nListCount); + SystemApi_File_EnumFile(tszFileUrl, &pptszListFile, &nListCount); + } + //如果是空的文件夹 + if (0 == nListCount) + { + nListCount = 1; + BaseLib_Memory_Malloc((XPPPMEM)&pptszListFile, nListCount, XPATH_MAX); + _tcsxcpy(pptszListFile[0], tszFileUrl); } - } - //枚举文件 - if (0 == nListCount) - { - st_HDRParam.nHttpCode = 404; - HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("WEBDAV客户端:%s,处理WEBDAV协议PROPFIND方法失败,文件没有找到,URL:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); - return false; } Protocol_StoragePacket_WDPropfind(tszRVBuffer, &nRVLen, &pptszListFile, nListCount, st_StorageBucket.tszFilePath, st_StorageBucket.tszBuckKey); @@ -135,66 +181,85 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int _tcsxcpy(st_HDRParam.tszMimeType, _X("xml")); HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen); XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,处理WEBDAV协议PROPFIND方法成功,文件名称:%s"), lpszClientAddr, tszFindStr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,处理WEBDAV协议PROPFIND方法成功,文件名称:%s"), lpszClientAddr, tszFileUrl); } else if (0 == _tcsxnicmp(lpszMethodGet, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodGet))) { - //使用重定向实现下载 - st_HDRParam.bIsClose = true; - st_HDRParam.nHttpCode = 302; + if (st_ServiceCfg.st_XStorage.bWDLocation) + { + XEngine_Task_HttpDownload(lpszClientAddr, lpszMsgBuffer, nMsgLen, pSt_HTTPParam, pptszListHdr, nHdrCount, STORAGE_NETTYPE_HTTPWEBDAV); + } + else + { + //使用重定向实现下载 + st_HDRParam.bIsClose = true; + st_HDRParam.nHttpCode = 302; - XCHAR tszRequestAddr[512] = {}; - XCHAR tszHostStr[128] = {}; - HttpProtocol_ServerHelp_GetField(&pptszListHdr, nHdrCount, _X("Host"), tszHostStr); + XCHAR tszRequestAddr[512] = {}; + XCHAR tszHostStr[128] = {}; + HttpProtocol_ServerHelp_GetField(&pptszListHdr, nHdrCount, _X("Host"), tszHostStr); - XCHAR tszPortWebdav[64] = {}; - XCHAR tszPortDownload[64] = {}; - _xstprintf(tszPortWebdav, _X("%d"), st_ServiceCfg.nWebdavPort); - _xstprintf(tszPortDownload, _X("%d"), st_ServiceCfg.nStorageDLPort); - //转换端口 - int nReplaceLen = 0; - BaseLib_String_Replace(tszHostStr, &nReplaceLen, tszPortWebdav, tszPortDownload, true); - _xstprintf(tszRequestAddr, _X("Location: http://%s%s\r\n"), tszHostStr, pSt_HTTPParam->tszHttpUri); + XCHAR tszPortWebdav[64] = {}; + XCHAR tszPortDownload[64] = {}; + _xstprintf(tszPortWebdav, _X("%d"), st_ServiceCfg.nWebdavPort); + _xstprintf(tszPortDownload, _X("%d"), st_ServiceCfg.nStorageDLPort); + //转换端口 + int nReplaceLen = 0; + BaseLib_String_Replace(tszHostStr, &nReplaceLen, tszPortWebdav, tszPortDownload, true); + _xstprintf(tszRequestAddr, _X("Location: http://%s%s\r\n"), tszHostStr, pSt_HTTPParam->tszHttpUri); - HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, tszRequestAddr); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,请求文件下载被重定向到:%s"), lpszClientAddr, tszRequestAddr); + HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, tszRequestAddr); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,请求文件下载被重定向到:%s"), lpszClientAddr, tszRequestAddr); + } } else if (0 == _tcsxnicmp(lpszMethodPut, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodPut))) { - //使用重定向实现上传 - st_HDRParam.bIsClose = false; - st_HDRParam.nHttpCode = 302; + if (st_ServiceCfg.st_XStorage.bWDLocation) + { + //转换参数格式:/storagekey1/webdav/clash-verge-rev-backup/backup.zip 为 /api?filename=webdav/clash-verge-rev-backup/backup.zip&storeagekey=storagekey1 + XCHAR tszConvertStr[XPATH_MAX] = {}; + APIHelp_Api_WDToUrl(pSt_HTTPParam->tszHttpUri, tszConvertStr); + memset(pSt_HTTPParam->tszHttpUri, '\0', sizeof(pSt_HTTPParam->tszHttpUri)); + _tcsxcpy(pSt_HTTPParam->tszHttpUri, tszConvertStr); + XEngine_Task_HttpUPLoader(lpszClientAddr, lpszMsgBuffer, nMsgLen, pSt_HTTPParam, pptszListHdr, nHdrCount, STORAGE_NETTYPE_HTTPWEBDAV); + } + else + { + //使用重定向实现上传 + st_HDRParam.bIsClose = false; + st_HDRParam.nHttpCode = 302; - XCHAR tszRequestAddr[1024] = {}; - XCHAR tszHostStr[128] = {}; - HttpProtocol_ServerHelp_GetField(&pptszListHdr, nHdrCount, _X("Host"), tszHostStr); + XCHAR tszRequestAddr[1024] = {}; + XCHAR tszHostStr[128] = {}; + HttpProtocol_ServerHelp_GetField(&pptszListHdr, nHdrCount, _X("Host"), tszHostStr); - XCHAR tszPortWebdav[64] = {}; - XCHAR tszPortDownload[64] = {}; - _xstprintf(tszPortWebdav, _X("%d"), st_ServiceCfg.nWebdavPort); - _xstprintf(tszPortDownload, _X("%d"), st_ServiceCfg.nStorageUPPort); - //转换端口 - int nRLen = 0; - BaseLib_String_Replace(tszHostStr, &nRLen, tszPortWebdav, tszPortDownload, true); - //转换地址 - XCHAR tszStroageKey[MAX_PATH] = {}; - XCHAR tszFileName[MAX_PATH] = {}; + XCHAR tszPortWebdav[64] = {}; + XCHAR tszPortDownload[64] = {}; + _xstprintf(tszPortWebdav, _X("%d"), st_ServiceCfg.nWebdavPort); + _xstprintf(tszPortDownload, _X("%d"), st_ServiceCfg.nStorageUPPort); + //转换端口 + int nRLen = 0; + BaseLib_String_Replace(tszHostStr, &nRLen, tszPortWebdav, tszPortDownload, true); + //转换地址 + XCHAR tszStroageKey[XPATH_MAX] = {}; + XCHAR tszFileName[XPATH_MAX] = {}; - int nRet = _stxscanf(pSt_HTTPParam->tszHttpUri + 1, _X("%99[^/]/%199[^\n]"), tszStroageKey, tszFileName); - if (2 != nRet) - { - st_HDRParam.nHttpCode = 413; - HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam); + int nRet = _stxscanf(pSt_HTTPParam->tszHttpUri + 1, _X("%99[^/]/%199[^\n]"), tszStroageKey, tszFileName); + if (2 != nRet) + { + st_HDRParam.nHttpCode = 413; + HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("WEBDAV客户端:%s,处理WEBDAV协议上传方法失败,文件请求路径不正确,URL:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); + return false; + } + _xstprintf(tszRequestAddr, _X("Location: http://%s/api?filename=%s&storeagekey=%s\r\n"), tszHostStr, tszFileName, tszStroageKey); + + HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, tszRequestAddr); XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("WEBDAV客户端:%s,处理WEBDAV协议上传方法失败,文件请求路径不正确,URL:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); - return false; + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,请求文件上传被重定向到:%s"), lpszClientAddr, tszRequestAddr); } - _xstprintf(tszRequestAddr, _X("Location: http://%s/api?filename=%s&storeagekey=%s\r\n"), tszHostStr, tszFileName, tszStroageKey); - - HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL, 0, tszRequestAddr); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,请求文件上传被重定向到:%s"), lpszClientAddr, tszRequestAddr); } else if (0 == _tcsxnicmp(lpszMethodLock, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodLock))) { @@ -259,7 +324,7 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int return false; } int nFLen = 0; - XCHAR tszFileName[MAX_PATH] = {}; + XCHAR tszFileName[XPATH_MAX] = {}; _tcsxcpy(tszFileName, pSt_HTTPParam->tszHttpUri + 1); BaseLib_String_Replace(tszFileName, &nFLen, st_StorageBucket.tszBuckKey, st_StorageBucket.tszFilePath); @@ -306,10 +371,11 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int return false; } int nALen = 0; - XCHAR tszCreateDir[MAX_PATH] = {}; + XCHAR tszCreateDir[XPATH_MAX] = {}; _tcsxcpy(tszCreateDir, pSt_HTTPParam->tszHttpUri + 1); BaseLib_String_Replace(tszCreateDir, &nALen, st_StorageBucket.tszBuckKey, st_StorageBucket.tszFilePath, true); + SystemApi_File_CreateMutilFolder(tszCreateDir); st_HDRParam.nHttpCode = 201; HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam); XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV); diff --git a/XEngine_Source/XEngine_StorageApp/StorageApp_Webdav.h b/XEngine_Source/XEngine_StorageApp/StorageApp_Webdav.h index 3e9ed28..6038b0e 100644 --- a/XEngine_Source/XEngine_StorageApp/StorageApp_Webdav.h +++ b/XEngine_Source/XEngine_StorageApp/StorageApp_Webdav.h @@ -10,5 +10,5 @@ // Purpose: WEBDAV // History: *********************************************************************/ -XHTHREAD CALLBACK XEngine_Webdav_HTTPThread(XPVOID lParam); +XHTHREAD XCALLBACK XEngine_Webdav_HTTPThread(XPVOID lParam); bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, XCHAR** pptszListHdr, int nHdrCount); \ No newline at end of file diff --git a/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskManage.cpp b/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskManage.cpp index 41859b5..2b7157b 100644 --- a/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskManage.cpp +++ b/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskManage.cpp @@ -1,6 +1,6 @@ #include "../StorageApp_Hdr.h" -bool XEngine_Task_Manage(LPCXSTR lpszAPIName, LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, XCHAR** pptszListHdr, int nHdrCount) +bool XEngine_Task_Manage(LPCXSTR lpszAPIName, LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam) { int nSDLen = 10240; int nRVLen = 10240; @@ -34,16 +34,16 @@ bool XEngine_Task_Manage(LPCXSTR lpszAPIName, LPCXSTR lpszClientAddr, LPCXSTR lp int nMode = 0; int nListCount = 0; int nMsgLen = 10240; - XCHAR tszFileName[MAX_PATH]; - XCHAR tszFileHash[MAX_PATH]; + XCHAR tszFileName[XPATH_MAX]; + XCHAR tszFileHash[XPATH_MAX]; XCHAR tszBucketKey[128]; XCHAR tszTimeStart[128]; XCHAR tszTimeEnd[128]; XCHAR tszMsgBuffer[10240]; XSTORAGECORE_DBFILE** ppSt_ListFile; - memset(tszFileName, '\0', MAX_PATH); - memset(tszFileHash, '\0', MAX_PATH); + memset(tszFileName, '\0', XPATH_MAX); + memset(tszFileHash, '\0', XPATH_MAX); memset(tszBucketKey, '\0', sizeof(tszBucketKey)); memset(tszTimeStart, '\0', sizeof(tszTimeStart)); memset(tszTimeEnd, '\0', sizeof(tszTimeEnd)); @@ -280,14 +280,14 @@ bool XEngine_Task_Manage(LPCXSTR lpszAPIName, LPCXSTR lpszClientAddr, LPCXSTR lp int nOPCode = 0; int nListCount = 0; XCHAR** ppszListDir = NULL; - XCHAR tszUserDir[MAX_PATH]; - XCHAR tszBuckKey[MAX_PATH]; - XCHAR tszBuckPath[MAX_PATH]; + XCHAR tszUserDir[XPATH_MAX]; + XCHAR tszBuckKey[XPATH_MAX]; + XCHAR tszBuckPath[XPATH_MAX]; XCHAR tszRealDir[1024]; - memset(tszUserDir, '\0', MAX_PATH); - memset(tszBuckKey, '\0', MAX_PATH); - memset(tszBuckPath, '\0', MAX_PATH); + memset(tszUserDir, '\0', XPATH_MAX); + memset(tszBuckKey, '\0', XPATH_MAX); + memset(tszBuckPath, '\0', XPATH_MAX); memset(tszRealDir, '\0', sizeof(tszRealDir)); Protocol_StorageParse_DirOperator(lpszMsgBuffer, tszUserDir, tszBuckKey, &nOPCode); @@ -343,7 +343,7 @@ bool XEngine_Task_Manage(LPCXSTR lpszAPIName, LPCXSTR lpszClientAddr, LPCXSTR lp } else if (0 == _tcsxnicmp(lpszAPIBucket, lpszAPIName, _tcsxlen(lpszAPIBucket))) { - XCHAR tszBuckKey[MAX_PATH] = {}; + XCHAR tszBuckKey[XPATH_MAX] = {}; Protocol_StorageParse_DirOperator(lpszMsgBuffer, NULL, tszBuckKey, NULL); if (_tcsxlen(tszBuckKey) > 0) { diff --git a/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskManage.h b/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskManage.h index dd5b8f0..f314bc3 100644 --- a/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskManage.h +++ b/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskManage.h @@ -1,3 +1,3 @@ #pragma once -bool XEngine_Task_Manage(LPCXSTR lpszAPIName, LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, XCHAR** pptszListHdr, int nHdrCount); \ No newline at end of file +bool XEngine_Task_Manage(LPCXSTR lpszAPIName, LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam); \ No newline at end of file diff --git a/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskP2p.cpp b/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskP2p.cpp index 35e1412..d71240d 100644 --- a/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskP2p.cpp +++ b/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskP2p.cpp @@ -6,9 +6,9 @@ XHTHREAD XEngine_Task_P2PThread() XCHAR tszIPAddr[128]; XCHAR tszTimeStart[64]; XCHAR tszTimeEnd[64]; - XCHAR tszBuckKey[MAX_PATH]; - XCHAR tszFileName[MAX_PATH]; - XCHAR tszFileHash[MAX_PATH]; + XCHAR tszBuckKey[XPATH_MAX]; + XCHAR tszFileName[XPATH_MAX]; + XCHAR tszFileHash[XPATH_MAX]; while (bIsRun) { @@ -17,9 +17,9 @@ XHTHREAD XEngine_Task_P2PThread() memset(tszIPAddr, '\0', sizeof(tszIPAddr)); memset(tszTimeStart, '\0', sizeof(tszTimeStart)); memset(tszTimeEnd, '\0', sizeof(tszTimeEnd)); - memset(tszBuckKey, '\0', MAX_PATH); - memset(tszFileName, '\0', MAX_PATH); - memset(tszFileHash, '\0', MAX_PATH); + memset(tszBuckKey, '\0', XPATH_MAX); + memset(tszFileName, '\0', XPATH_MAX); + memset(tszFileHash, '\0', XPATH_MAX); if (NetCore_BroadCast_Recv(hBroadSocket, tszMsgBuffer, &nMsgLen, tszIPAddr)) { diff --git a/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskPass.cpp b/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskPass.cpp index 8fd0d24..fe1ca14 100644 --- a/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskPass.cpp +++ b/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskPass.cpp @@ -1,6 +1,6 @@ #include "../StorageApp_Hdr.h" -bool XEngine_Task_Pass(LPCXSTR lpszAPIName, LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, XCHAR** pptszListHdr, int nHdrCount) +bool XEngine_Task_Pass(LPCXSTR lpszAPIName, LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam) { int nSDLen = 2048; XCHAR tszSDBuffer[2048]; @@ -29,14 +29,14 @@ bool XEngine_Task_Pass(LPCXSTR lpszAPIName, LPCXSTR lpszClientAddr, LPCXSTR lpsz else if (0 == _tcsxnicmp(lpszAPIDLFile, lpszAPIName, _tcsxlen(lpszAPIDLFile))) { __int64x nFileSize = 0; - XCHAR tszPathKey[MAX_PATH]; - XCHAR tszFileName[MAX_PATH]; - XCHAR tszFileHash[MAX_PATH]; + XCHAR tszPathKey[XPATH_MAX]; + XCHAR tszFileName[XPATH_MAX]; + XCHAR tszFileHash[XPATH_MAX]; XCHAR tszClientAddr[128]; - memset(tszPathKey, '\0', MAX_PATH); - memset(tszFileName, '\0', MAX_PATH); - memset(tszFileHash, '\0', MAX_PATH); + memset(tszPathKey, '\0', XPATH_MAX); + memset(tszFileName, '\0', XPATH_MAX); + memset(tszFileHash, '\0', XPATH_MAX); memset(tszClientAddr, '\0', sizeof(tszClientAddr)); Protocol_StorageParse_ProxyNotify(lpszMsgBuffer, nMsgLen, tszClientAddr, tszPathKey, tszFileName, tszFileHash, &nFileSize); diff --git a/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskPass.h b/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskPass.h index 9fb3a73..499f626 100644 --- a/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskPass.h +++ b/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskPass.h @@ -1,3 +1,3 @@ #pragma once -bool XEngine_Task_Pass(LPCXSTR lpszAPIName, LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, XCHAR** pptszListHdr, int nHdrCount); \ No newline at end of file +bool XEngine_Task_Pass(LPCXSTR lpszAPIName, LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam); \ No newline at end of file diff --git a/XEngine_Source/XEngine_StorageApp/XEngine_StorageApp.cpp b/XEngine_Source/XEngine_StorageApp/XEngine_StorageApp.cpp index 51a56aa..3fe9c3a 100644 --- a/XEngine_Source/XEngine_StorageApp/XEngine_StorageApp.cpp +++ b/XEngine_Source/XEngine_StorageApp/XEngine_StorageApp.cpp @@ -123,7 +123,7 @@ static int ServiceApp_Deamon(int wait) LONG WINAPI Coredump_ExceptionFilter(EXCEPTION_POINTERS* pExceptionPointers) { static int i = 0; - XCHAR tszFileStr[MAX_PATH] = {}; + XCHAR tszFileStr[XPATH_MAX] = {}; XCHAR tszTimeStr[128] = {}; BaseLib_Time_TimeToStr(tszTimeStr); _xstprintf(tszFileStr, _X("./XEngine_Coredump/dumpfile_%s_%d.dmp"), tszTimeStr, i++); @@ -572,6 +572,7 @@ int main(int argc, char** argv) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,转录动作没有启用")); } +#ifndef _DEBUG //发送信息报告 if (st_ServiceCfg.st_XReport.bEnable && !bIsTest) { @@ -589,7 +590,7 @@ int main(int argc, char** argv) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,信息报告给API服务器没有启用")); } - +#endif XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("所有服务成功启动,存储中心服务运行中,发行版本次数:%d,XEngine版本:%s%s 当前运行版本:%s。。。"), st_ServiceCfg.st_XVer.pStl_ListStorage->size(), BaseLib_Version_XNumberStr(), BaseLib_Version_XTypeStr(), st_ServiceCfg.st_XVer.pStl_ListStorage->front().c_str()); while (true) diff --git a/XEngine_Source/XStorage_Protocol.h b/XEngine_Source/XStorage_Protocol.h index fc6ddb4..d05127c 100644 --- a/XEngine_Source/XStorage_Protocol.h +++ b/XEngine_Source/XStorage_Protocol.h @@ -34,9 +34,9 @@ //文件传输头文件,可用于P2XP文件传输和组包管理模块文件传输 typedef struct tag_XEngine_Protocol_File { - XCHAR tszFilePath[MAX_PATH]; //文件路径 - XCHAR tszFileName[MAX_PATH]; //文件名称,文件传输的时候才需要,其他时候不需要 - XCHAR tszFileHash[MAX_PATH]; //文件HASH值,MD5或者HASH1 256等...不能超过260字节大小 + XCHAR tszFilePath[XPATH_MAX]; //文件路径 + XCHAR tszFileName[XPATH_MAX]; //文件名称,文件传输的时候才需要,其他时候不需要 + XCHAR tszFileHash[XPATH_MAX]; //文件HASH值,MD5或者HASH1 256等...不能超过260字节大小 XCHAR tszFileUser[128]; //文件所属用户 XCHAR tszFileTime[64]; //文件创建时间,如果这个参数不填,那么服务器将会设置为接受到的文件时间 __int64x nFileSize; //文件大小 @@ -77,15 +77,15 @@ typedef struct //服务器动作处理 typedef struct { - XCHAR tszFileUrl[MAX_PATH]; //文件的URL - XCHAR tszFileName[MAX_PATH]; //本地文件路径 - XCHAR tszBucketStr[MAX_PATH]; //存储的KEY + XCHAR tszFileUrl[XPATH_MAX]; //文件的URL + XCHAR tszFileName[XPATH_MAX]; //本地文件路径 + XCHAR tszBucketStr[XPATH_MAX]; //存储的KEY XBYTE byType; //操作类型,0 HTTP,1 FTP,2 BT }XENGINE_ACTIONINFO; //WEBDAV协议 typedef struct { - XCHAR tszToken[MAX_PATH]; //令牌 + XCHAR tszToken[XPATH_MAX]; //令牌 XCHAR tszOwner[128]; //所属用户 XCHAR tszTimeout[64]; //超时时间 XBYTE byLockType; //0未知,1独占,2共享