mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2024-11-22 17:39:53 +03:00
Merge branch 'SoftEtherVPN:master' into master
This commit is contained in:
commit
60496ac7fb
@ -1,33 +0,0 @@
|
|||||||
version: '{build}'
|
|
||||||
|
|
||||||
image: Ubuntu2004
|
|
||||||
|
|
||||||
configuration: Release
|
|
||||||
|
|
||||||
skip_branch_with_pr: true
|
|
||||||
clone_depth: 1
|
|
||||||
|
|
||||||
skip_commits:
|
|
||||||
files:
|
|
||||||
- .travis.yml
|
|
||||||
- .gitlab-ci.yml
|
|
||||||
- .azure-pipelines.yml
|
|
||||||
- .cirrus.yml
|
|
||||||
|
|
||||||
init:
|
|
||||||
- ps: Update-AppveyorBuild -Version "build-$env:APPVEYOR_BUILD_NUMBER-$($env:APPVEYOR_REPO_COMMIT.substring(0,7))"
|
|
||||||
|
|
||||||
install:
|
|
||||||
- sudo apt-get -y install libsodium-dev libcap-ng-dev
|
|
||||||
before_build:
|
|
||||||
- git submodule update --init --recursive
|
|
||||||
- ./configure
|
|
||||||
build_script:
|
|
||||||
- make package -C build -j $(nproc || sysctl -n hw.ncpu || echo 4)
|
|
||||||
- .ci/memory-leak-test.sh
|
|
||||||
test_script:
|
|
||||||
- .ci/appveyor-deb-install-test.sh
|
|
||||||
- sudo apt-get update && sudo apt-get -y install autoconf libtool liblzo2-dev libpam-dev fping unzip liblz4-dev libnl-genl-3-dev # openvpn build deps
|
|
||||||
- sudo .ci/start-se-openvpn.sh
|
|
||||||
- sudo .ci/run-openvpn-tests.sh
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
|||||||
jobs:
|
|
||||||
- template: .ci/azure-pipelines/linux.yml
|
|
||||||
- template: .ci/azure-pipelines/windows.yml
|
|
||||||
- template: .ci/azure-pipelines/macos.yml
|
|
@ -1,20 +0,0 @@
|
|||||||
jobs:
|
|
||||||
- job: Ubuntu_x64
|
|
||||||
pool:
|
|
||||||
vmImage: ubuntu-22.04
|
|
||||||
steps:
|
|
||||||
- checkout: self
|
|
||||||
submodules: true
|
|
||||||
persistCredentials: true
|
|
||||||
- script: sudo apt update && sudo apt-get -y install cmake gcc g++ ninja-build libncurses5-dev libreadline-dev libsodium-dev libssl-dev make zlib1g-dev liblz4-dev libnl-genl-3-dev
|
|
||||||
displayName: 'Prepare environment'
|
|
||||||
- script: "$(Build.SourcesDirectory)/.ci/azure-pipelines/linux_build.sh"
|
|
||||||
env:
|
|
||||||
SE_BUILD_NUMBER_TOKEN: $(BUILD_NUMBER_TOKEN)
|
|
||||||
displayName: 'Build'
|
|
||||||
- script: |
|
|
||||||
.ci/appveyor-deb-install-test.sh
|
|
||||||
sudo apt-get -y install autoconf libtool liblzo2-dev libpam-dev fping unzip libcap-ng-dev # To build OpenVPN
|
|
||||||
sudo BUILD_BINARIESDIRECTORY=$BUILD_BINARIESDIRECTORY .ci/start-se-openvpn.sh
|
|
||||||
sudo BUILD_BINARIESDIRECTORY=$BUILD_BINARIESDIRECTORY .ci/run-openvpn-tests.sh
|
|
||||||
displayName: 'Test'
|
|
@ -1,15 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if [[ "${#SE_BUILD_NUMBER_TOKEN}" -eq 64 ]]; then
|
|
||||||
VERSION=$(python3 "version.py")
|
|
||||||
BUILD_NUMBER=$(curl "https://softether.network/get-build-number?commit=${BUILD_SOURCEVERSION}&version=${VERSION}&token=${SE_BUILD_NUMBER_TOKEN}")
|
|
||||||
else
|
|
||||||
BUILD_NUMBER=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd ${BUILD_BINARIESDIRECTORY}
|
|
||||||
|
|
||||||
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_NUMBER=${BUILD_NUMBER} ${BUILD_SOURCESDIRECTORY}
|
|
||||||
cmake --build .
|
|
||||||
|
|
||||||
cpack -C Release -G DEB
|
|
@ -1,14 +0,0 @@
|
|||||||
jobs:
|
|
||||||
- job: macOS
|
|
||||||
pool:
|
|
||||||
vmImage: macOS-latest
|
|
||||||
steps:
|
|
||||||
- checkout: self
|
|
||||||
submodules: true
|
|
||||||
persistCredentials: true
|
|
||||||
- script: brew install pkg-config cmake ninja ncurses readline libsodium openssl zlib
|
|
||||||
displayName: 'Prepare environment'
|
|
||||||
- script: '$(Build.SourcesDirectory)/.ci/azure-pipelines/macos_build.sh'
|
|
||||||
env:
|
|
||||||
SE_BUILD_NUMBER_TOKEN: $(BUILD_NUMBER_TOKEN)
|
|
||||||
displayName: 'Build'
|
|
@ -1,13 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if [[ "${#SE_BUILD_NUMBER_TOKEN}" -eq 64 ]]; then
|
|
||||||
VERSION=$(python3 "version.py")
|
|
||||||
BUILD_NUMBER=$(curl "https://softether.network/get-build-number?commit=${BUILD_SOURCEVERSION}&version=${VERSION}&token=${SE_BUILD_NUMBER_TOKEN}")
|
|
||||||
else
|
|
||||||
BUILD_NUMBER=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd ${BUILD_BINARIESDIRECTORY}
|
|
||||||
|
|
||||||
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_NUMBER=${BUILD_NUMBER} -DOPENSSL_ROOT_DIR="/usr/local/opt/openssl" ${BUILD_SOURCESDIRECTORY}
|
|
||||||
cmake --build .
|
|
@ -1,41 +0,0 @@
|
|||||||
parameters:
|
|
||||||
- name: architecture
|
|
||||||
type: string
|
|
||||||
- name: compilerPath
|
|
||||||
type: string
|
|
||||||
- name: vcpkgTriplet
|
|
||||||
type: string
|
|
||||||
- name: vcvarsPath
|
|
||||||
type: string
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- task: Cache@2
|
|
||||||
inputs:
|
|
||||||
key: '"vcpkg-manifest" | "$(Agent.OS)" | "${{parameters.vcpkgTriplet}}" | C:/vcpkg/.git/refs/heads/master'
|
|
||||||
path: '$(Build.BinariesDirectory)/vcpkg_installed'
|
|
||||||
displayName: 'Environment storage'
|
|
||||||
- script: '$(Build.SourcesDirectory)/.ci/azure-pipelines/windows_build.bat'
|
|
||||||
env:
|
|
||||||
ARCHITECTURE: ${{parameters.architecture}}
|
|
||||||
COMPILER_PATH: ${{parameters.compilerPath}}
|
|
||||||
VCPKG_TRIPLET: ${{parameters.vcpkgTriplet}}
|
|
||||||
VCVARS_PATH: ${{parameters.vcvarsPath}}
|
|
||||||
SE_BUILD_NUMBER_TOKEN: $(BUILD_NUMBER_TOKEN)
|
|
||||||
displayName: 'Build'
|
|
||||||
- powershell: |
|
|
||||||
. .ci/appveyor-vpntest.ps1
|
|
||||||
displayName: 'Test'
|
|
||||||
- task: CopyFiles@2
|
|
||||||
inputs:
|
|
||||||
sourceFolder: '$(Build.BinariesDirectory)'
|
|
||||||
contents: '?(*.exe|*.se2|*.pdb)'
|
|
||||||
TargetFolder: '$(Build.StagingDirectory)/binaries'
|
|
||||||
flattenFolders: true
|
|
||||||
- task: PublishBuildArtifacts@1
|
|
||||||
inputs:
|
|
||||||
pathtoPublish: '$(Build.StagingDirectory)/binaries'
|
|
||||||
artifactName: 'Binaries'
|
|
||||||
- task: PublishBuildArtifacts@1
|
|
||||||
inputs:
|
|
||||||
pathtoPublish: '$(Build.StagingDirectory)/installers'
|
|
||||||
artifactName: 'Installers'
|
|
@ -1,27 +0,0 @@
|
|||||||
jobs:
|
|
||||||
- job: Windows_x64
|
|
||||||
pool:
|
|
||||||
vmImage: windows-latest
|
|
||||||
steps:
|
|
||||||
- checkout: self
|
|
||||||
submodules: true
|
|
||||||
persistCredentials: true
|
|
||||||
- template: "windows-steps.yml"
|
|
||||||
parameters:
|
|
||||||
architecture: "x64"
|
|
||||||
compilerPath: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/x64/bin/clang-cl.exe"
|
|
||||||
vcpkgTriplet: "x64-windows-static"
|
|
||||||
vcvarsPath: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
|
|
||||||
- job: Windows_x86
|
|
||||||
pool:
|
|
||||||
vmImage: windows-latest
|
|
||||||
steps:
|
|
||||||
- checkout: self
|
|
||||||
submodules: true
|
|
||||||
persistCredentials: true
|
|
||||||
- template: "windows-steps.yml"
|
|
||||||
parameters:
|
|
||||||
architecture: "x86"
|
|
||||||
compilerPath: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/bin/clang-cl.exe"
|
|
||||||
vcpkgTriplet: "x86-windows-static"
|
|
||||||
vcvarsPath: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars32.bat"
|
|
@ -1,26 +0,0 @@
|
|||||||
@echo on
|
|
||||||
|
|
||||||
:: The method we use to store a command's output into a variable:
|
|
||||||
:: https://stackoverflow.com/a/6362922
|
|
||||||
for /f "tokens=* USEBACKQ" %%g in (`python "version.py"`) do (set "VERSION=%%g")
|
|
||||||
|
|
||||||
:: https://stackoverflow.com/a/8566001
|
|
||||||
echo %SE_BUILD_NUMBER_TOKEN%> "%tmp%\length.txt"
|
|
||||||
for %%? in ("%tmp%\length.txt") do ( set /A SE_BUILD_NUMBER_TOKEN_LENGTH=%%~z? - 2 )
|
|
||||||
|
|
||||||
if %SE_BUILD_NUMBER_TOKEN_LENGTH% equ 64 (
|
|
||||||
for /f "tokens=* USEBACKQ" %%g in (`curl "https://softether.network/get-build-number?commit=%BUILD_SOURCEVERSION%&version=%VERSION%&token=%SE_BUILD_NUMBER_TOKEN%"`) do (set "BUILD_NUMBER=%%g")
|
|
||||||
) else (
|
|
||||||
set BUILD_NUMBER=0
|
|
||||||
)
|
|
||||||
|
|
||||||
cd %BUILD_BINARIESDIRECTORY%
|
|
||||||
|
|
||||||
call "%VCVARS_PATH%"
|
|
||||||
|
|
||||||
cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE="C:\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=%VCPKG_TRIPLET% -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER="%COMPILER_PATH%" -DCMAKE_CXX_COMPILER="%COMPILER_PATH%" -DBUILD_NUMBER=%BUILD_NUMBER% "%BUILD_SOURCESDIRECTORY%"
|
|
||||||
cmake --build .
|
|
||||||
|
|
||||||
mkdir "%BUILD_STAGINGDIRECTORY%\installers"
|
|
||||||
vpnsetup /SFXMODE:vpnclient /SFXOUT:"%BUILD_STAGINGDIRECTORY%\installers\softether-vpnclient-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe"
|
|
||||||
vpnsetup /SFXMODE:vpnserver_vpnbridge /SFXOUT:"%BUILD_STAGINGDIRECTORY%\installers\softether-vpnserver_vpnbridge-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe"
|
|
@ -2,8 +2,10 @@ FreeBSD_task:
|
|||||||
matrix:
|
matrix:
|
||||||
env:
|
env:
|
||||||
SSL: openssl
|
SSL: openssl
|
||||||
|
OPENSSL_ROOT_DIR: /usr/local
|
||||||
env:
|
env:
|
||||||
SSL: openssl31
|
SSL: openssl32
|
||||||
|
OPENSSL_ROOT_DIR: /usr/local
|
||||||
env:
|
env:
|
||||||
# base openssl
|
# base openssl
|
||||||
SSL:
|
SSL:
|
||||||
|
51
.github/ISSUE_TEMPLATE.md
vendored
51
.github/ISSUE_TEMPLATE.md
vendored
@ -1,51 +0,0 @@
|
|||||||
Hi, there!
|
|
||||||
|
|
||||||
Thank you for using SoftEther.
|
|
||||||
|
|
||||||
If you are running SoftEther VPN 4.x (i.e. Stable Edition), please read the comparison with Developer Edition at:
|
|
||||||
|
|
||||||
https://github.com/SoftEtherVPN/SoftEtherVPN#comparison-with-stable-edition
|
|
||||||
|
|
||||||
Before you submit an issue, please read the following:
|
|
||||||
|
|
||||||
Is this a question?
|
|
||||||
|
|
||||||
- If the answer is "yes", then please ask your question on [www.vpnusers.com](http://www.vpnusers.com).
|
|
||||||
The issue section on GitHub is reserved for bugs and feature requests.
|
|
||||||
|
|
||||||
- If the answer is "no", please read the following:
|
|
||||||
|
|
||||||
We provide a template which is specifically made for bug reports, in order to be sure that the report includes enough details to be helpful.
|
|
||||||
|
|
||||||
Please use or adapt it as needed.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Prerequisites
|
|
||||||
|
|
||||||
* [ ] Can you reproduce?
|
|
||||||
* [ ] Are you running the latest version of SoftEtherVPN?
|
|
||||||
|
|
||||||
**SoftEther version:**
|
|
||||||
**Component:** [Server, Client, Bridge, etc.]
|
|
||||||
**Operating system:** [Windows, Linux, BSD, macOS, etc.]
|
|
||||||
**Architecture:** [64 bit, 32 bit]
|
|
||||||
|
|
||||||
[In case it's a computer with known specs, such as the Raspberry Pi, you can specify it omitting the details.]
|
|
||||||
**Processor:** [Specify brand and model. Example: AMD Ryzen 7 1800x]
|
|
||||||
|
|
||||||
### Description
|
|
||||||
|
|
||||||
[Description of the bug]
|
|
||||||
|
|
||||||
**Expected behavior:**
|
|
||||||
[What you expected to happen]
|
|
||||||
|
|
||||||
**Actual behavior:**
|
|
||||||
[What actually happened]
|
|
||||||
|
|
||||||
### Steps to reproduce
|
|
||||||
|
|
||||||
1. [First step]
|
|
||||||
2. [Second step]
|
|
||||||
3. [And so on...]
|
|
87
.github/ISSUE_TEMPLATE/bug_report_or_issue_report.yml
vendored
Normal file
87
.github/ISSUE_TEMPLATE/bug_report_or_issue_report.yml
vendored
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
name: Bug Report or Issue Report
|
||||||
|
description: File a bug report or an issue report
|
||||||
|
labels: "needs-triage"
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for taking the time to fill out this bug report!
|
||||||
|
We provide a template which is specifically made for bug reports, to be sure that the report includes enough details to be helpful.
|
||||||
|
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Are you using SoftEther VPN 5.x?
|
||||||
|
description: |
|
||||||
|
This issue tracker is for SoftEther VPN Developer Edition versioned 5.x.
|
||||||
|
Please report issues about SoftEther VPN Stable Edition versioned 4.x through the correct path.
|
||||||
|
See also [the top of the issue tracker](https://github.com/SoftEtherVPN/SoftEtherVPN/issues/new/choose).
|
||||||
|
options:
|
||||||
|
- label: Yes, I'm using SoftEther VPN 5.x, not 4.x.
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: Version
|
||||||
|
description: |
|
||||||
|
The exact version you are using.
|
||||||
|
It would be very nice if you let us know version tag or commit hash.
|
||||||
|
placeholder: "5.02.5180 / 09b7e4f / 5.01.9674+git20200806+8181039+dfsg2-2build1"
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Component
|
||||||
|
description: Which component did you encounter an issue with?
|
||||||
|
multiple: true
|
||||||
|
options:
|
||||||
|
- VPN Server
|
||||||
|
- VPN Bridge
|
||||||
|
- VPN Client
|
||||||
|
- VPN Tools
|
||||||
|
- Other
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: Operating system & version
|
||||||
|
placeholder: "Windows 11 Pro 23H2 / Ubuntu 22.04 / FreeBSD 14.0 / macOS Sonoma / Independent"
|
||||||
|
description: |
|
||||||
|
Let us know about your operating system and version.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: Architecture or Hardware model
|
||||||
|
placeholder: "amd64 / aarch64 / Raspberry Pi 4B+ / Apple M2"
|
||||||
|
description: |
|
||||||
|
Necessary if your issue is architecture-specific.
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Steps to reproduce
|
||||||
|
placeholder: Having detailed steps helps us reproduce the bug.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: ✔️ Expected Behavior
|
||||||
|
placeholder: What do you expect to happen?
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: ❌ Actual Behavior
|
||||||
|
placeholder: What happened actually?
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Anything else?
|
||||||
|
description: |
|
||||||
|
Links? References?
|
||||||
|
Anything that will give us more context about the issue you are encountering!
|
||||||
|
|
8
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
8
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
contact_links:
|
||||||
|
- name: Are you using SoftEther VPN 4.x?
|
||||||
|
about: This repository is for SoftEther VPN 5.x Developer Edition, developed independently from SoftEther VPN 4.x. Visit vpnusers.com if you would like to report issues or ask questions about version 4.x!
|
||||||
|
url: https://www.vpnusers.com/
|
||||||
|
|
||||||
|
- name: Questions about SoftEtherVPN 5.x
|
||||||
|
about: Visit Discussions to ask community to help.
|
||||||
|
url: https://github.com/SoftEtherVPN/SoftEtherVPN/discussions/new?category=q-a
|
34
.github/workflows/linux.yml
vendored
Normal file
34
.github/workflows/linux.yml
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build_and_test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: sudo apt update && sudo apt-get -y install cmake gcc g++ ninja-build libncurses5-dev libreadline-dev libsodium-dev libssl-dev make zlib1g-dev liblz4-dev libnl-genl-3-dev
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
|
||||||
|
cmake --build .
|
||||||
|
|
||||||
|
- name: Build deb packages
|
||||||
|
run: |
|
||||||
|
cd build
|
||||||
|
cpack -C Release -G DEB
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: |
|
||||||
|
.ci/appveyor-deb-install-test.sh
|
||||||
|
sudo apt-get -y install autoconf libtool liblzo2-dev libpam-dev fping unzip libcap-ng-dev # To build OpenVPN
|
||||||
|
sudo .ci/start-se-openvpn.sh
|
||||||
|
sudo .ci/run-openvpn-tests.sh
|
2
.github/workflows/macos.yml
vendored
2
.github/workflows/macos.yml
vendored
@ -7,7 +7,7 @@ jobs:
|
|||||||
build_and_test:
|
build_and_test:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-13, macos-12, macos-11]
|
os: [macos-14, macos-13, macos-12]
|
||||||
name: ${{ matrix.os }}
|
name: ${{ matrix.os }}
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
steps:
|
steps:
|
||||||
|
16
.github/workflows/stb_check.yml
vendored
Normal file
16
.github/workflows/stb_check.yml
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Check
|
||||||
|
run: |
|
||||||
|
cd developer_tools/stbchecker
|
||||||
|
dotnet run ../../src/bin/hamcore
|
63
.github/workflows/windows.yml
vendored
Normal file
63
.github/workflows/windows.yml
vendored
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build_and_test:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
platform: [
|
||||||
|
{ ARCHITECTURE: x86, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/bin/clang-cl.exe", VCPKG_TRIPLET: "x86-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars32.bat"},
|
||||||
|
{ ARCHITECTURE: x64, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/x64/bin/clang-cl.exe", VCPKG_TRIPLET: "x64-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"}
|
||||||
|
]
|
||||||
|
runs-on: windows-latest
|
||||||
|
name: ${{ matrix.platform.ARCHITECTURE }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Cache vcpkg
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: 'build/vcpkg_installed/'
|
||||||
|
key: vcpkg-${{ matrix.platform.VCPKG_TRIPLET }}
|
||||||
|
- name: Set version variables
|
||||||
|
run: |
|
||||||
|
$v = python version.py
|
||||||
|
echo "VERSION=$v" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
||||||
|
shell: pwsh
|
||||||
|
- name: Build
|
||||||
|
env:
|
||||||
|
ARCHITECTURE: ${{ matrix.platform.ARCHITECTURE }}
|
||||||
|
COMPILER_PATH: ${{ matrix.platform.COMPILER_PATH }}
|
||||||
|
VCPKG_TRIPLET: ${{ matrix.platform.VCPKG_TRIPLET }}
|
||||||
|
VCVARS_PATH: ${{ matrix.platform.VCVARS_PATH }}
|
||||||
|
run: |
|
||||||
|
set BUILD_NUMBER=0
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
call "%VCVARS_PATH%"
|
||||||
|
cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE="C:\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=%VCPKG_TRIPLET% -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER="%COMPILER_PATH%" -DCMAKE_CXX_COMPILER="%COMPILER_PATH%" -DBUILD_NUMBER=%BUILD_NUMBER% ..
|
||||||
|
cmake --build .
|
||||||
|
mkdir installers
|
||||||
|
vpnsetup /SFXMODE:vpnclient /SFXOUT:"installers\softether-vpnclient-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe"
|
||||||
|
vpnsetup /SFXMODE:vpnserver_vpnbridge /SFXOUT:"installers\softether-vpnserver_vpnbridge-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe"
|
||||||
|
shell: cmd
|
||||||
|
- name: Test
|
||||||
|
shell: powershell
|
||||||
|
run: |
|
||||||
|
. .ci/appveyor-vpntest.ps1
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
if-no-files-found: error
|
||||||
|
name: Binaries-${{ matrix.platform.ARCHITECTURE }}
|
||||||
|
path: |
|
||||||
|
build/*.exe
|
||||||
|
build/*.pdb
|
||||||
|
build/*.se2
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
if-no-files-found: error
|
||||||
|
name: Installers-${{ matrix.platform.ARCHITECTURE }}
|
||||||
|
path: build/installers
|
94
.github/workflows/windows_release.yml
vendored
Normal file
94
.github/workflows/windows_release.yml
vendored
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
name: "Release"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- '*'
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: "${{ github.workflow }}-${{ github.ref }}"
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
release:
|
||||||
|
runs-on: windows-latest
|
||||||
|
outputs:
|
||||||
|
upload_url: "${{ steps.create_release.outputs.upload_url }}"
|
||||||
|
steps:
|
||||||
|
- name: "Checkout repository"
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: "Create GitHub release"
|
||||||
|
id: create_release
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
build-windows:
|
||||||
|
name: ${{ matrix.platform.ARCHITECTURE }}
|
||||||
|
runs-on: windows-latest
|
||||||
|
needs: ["release"]
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
platform: [
|
||||||
|
{ ARCHITECTURE: x86, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/bin/clang-cl.exe", VCPKG_TRIPLET: "x86-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars32.bat"},
|
||||||
|
{ ARCHITECTURE: x64, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/x64/bin/clang-cl.exe", VCPKG_TRIPLET: "x64-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"}
|
||||||
|
]
|
||||||
|
steps:
|
||||||
|
- name: "Checkout repository"
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- name: Cache vcpkg
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: 'build/vcpkg_installed/'
|
||||||
|
key: vcpkg-release-${{ matrix.platform.VCPKG_TRIPLET }}
|
||||||
|
- name: Set version variables
|
||||||
|
run: |
|
||||||
|
$b=(Get-Content CMakeSettings.json | Out-String | ConvertFrom-Json).environments.BuildNumber
|
||||||
|
echo "BUILD_NUMBER=$b" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
||||||
|
$v = python version.py
|
||||||
|
echo "VERSION=$v" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
||||||
|
shell: pwsh
|
||||||
|
- name: Build
|
||||||
|
env:
|
||||||
|
ARCHITECTURE: ${{ matrix.platform.ARCHITECTURE }}
|
||||||
|
COMPILER_PATH: ${{ matrix.platform.COMPILER_PATH }}
|
||||||
|
VCPKG_TRIPLET: ${{ matrix.platform.VCPKG_TRIPLET }}
|
||||||
|
VCVARS_PATH: ${{ matrix.platform.VCVARS_PATH }}
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
call "%VCVARS_PATH%"
|
||||||
|
cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE="C:\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=%VCPKG_TRIPLET% -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER="%COMPILER_PATH%" -DCMAKE_CXX_COMPILER="%COMPILER_PATH%" -DBUILD_NUMBER=%BUILD_NUMBER% ..
|
||||||
|
cmake --build .
|
||||||
|
mkdir installers
|
||||||
|
vpnsetup /SFXMODE:vpnclient /SFXOUT:"installers\softether-vpnclient-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe"
|
||||||
|
vpnsetup /SFXMODE:vpnserver_vpnbridge /SFXOUT:"installers\softether-vpnserver_vpnbridge-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe"
|
||||||
|
shell: cmd
|
||||||
|
|
||||||
|
- name: dir
|
||||||
|
run: |
|
||||||
|
Get-ChildItem -Recurse build/installers
|
||||||
|
shell: pwsh
|
||||||
|
|
||||||
|
- name: "Upload softether-vpnclient"
|
||||||
|
uses: actions/upload-release-asset@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: "${{ github.token }}"
|
||||||
|
with:
|
||||||
|
upload_url: "${{ needs.release.outputs.upload_url }}"
|
||||||
|
asset_path: "build/installers/softether-vpnclient-${{ env.VERSION }}.${{ env.BUILD_NUMBER }}.${{ matrix.platform.ARCHITECTURE }}.exe"
|
||||||
|
asset_name: "softether-vpnclient-${{ env.VERSION }}.${{ env.BUILD_NUMBER }}.${{ matrix.platform.ARCHITECTURE }}.exe"
|
||||||
|
asset_content_type: "application/octet-stream"
|
||||||
|
- name: "Upload softether-vpnserver_vpnbridge"
|
||||||
|
uses: actions/upload-release-asset@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: "${{ github.token }}"
|
||||||
|
with:
|
||||||
|
upload_url: "${{ needs.release.outputs.upload_url }}"
|
||||||
|
asset_path: "build/installers/softether-vpnserver_vpnbridge-${{ env.VERSION }}.${{ env.BUILD_NUMBER }}.${{ matrix.platform.ARCHITECTURE }}.exe"
|
||||||
|
asset_name: "softether-vpnserver_vpnbridge-${{ env.VERSION }}.${{ env.BUILD_NUMBER }}.${{ matrix.platform.ARCHITECTURE }}.exe"
|
||||||
|
asset_content_type: "application/octet-stream"
|
||||||
|
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -209,4 +209,4 @@ developer_tools/stbchecker/**/ASALocalRun/
|
|||||||
developer_tools/stbchecker/**/*.binlog
|
developer_tools/stbchecker/**/*.binlog
|
||||||
developer_tools/stbchecker/**/*.nvuser
|
developer_tools/stbchecker/**/*.nvuser
|
||||||
developer_tools/stbchecker/**/.mfractor/
|
developer_tools/stbchecker/**/.mfractor/
|
||||||
|
/vcpkg_installed
|
||||||
|
10
.travis.yml
10
.travis.yml
@ -38,16 +38,6 @@ matrix:
|
|||||||
before_install:
|
before_install:
|
||||||
- sudo apt-get -y install libsodium-dev
|
- sudo apt-get -y install libsodium-dev
|
||||||
- bash .ci/build-libressl.sh > build-deps.log 2>&1 || (cat build-deps.log && exit 1)
|
- bash .ci/build-libressl.sh > build-deps.log 2>&1 || (cat build-deps.log && exit 1)
|
||||||
- env: LABEL="check stb files"
|
|
||||||
os: linux
|
|
||||||
language: csharp
|
|
||||||
mono: none
|
|
||||||
dotnet: 2.2.203
|
|
||||||
before_install:
|
|
||||||
- true
|
|
||||||
script:
|
|
||||||
- cd developer_tools/stbchecker
|
|
||||||
- dotnet run ../../src/bin/hamcore
|
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
directories:
|
directories:
|
||||||
|
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"cmake.configureOnOpen": false
|
||||||
|
}
|
@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10)
|
|||||||
set(BUILD_NUMBER CACHE STRING "The number of the current build.")
|
set(BUILD_NUMBER CACHE STRING "The number of the current build.")
|
||||||
|
|
||||||
if ("${BUILD_NUMBER}" STREQUAL "")
|
if ("${BUILD_NUMBER}" STREQUAL "")
|
||||||
set(BUILD_NUMBER "5180")
|
set(BUILD_NUMBER "5185")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (BUILD_NUMBER LESS 5180)
|
if (BUILD_NUMBER LESS 5180)
|
||||||
@ -53,7 +53,7 @@ if(UNIX)
|
|||||||
#
|
#
|
||||||
# use rpath for locating installed libraries
|
# use rpath for locating installed libraries
|
||||||
#
|
#
|
||||||
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
|
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
|
||||||
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||||
|
|
||||||
include(CheckIncludeFile)
|
include(CheckIncludeFile)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"environments": [ { "BuildNumber": "5180" } ],
|
"environments": [ { "BuildNumber": "5185" } ],
|
||||||
"configurations": [
|
"configurations": [
|
||||||
{
|
{
|
||||||
"name": "x64-native",
|
"name": "x64-native",
|
||||||
|
@ -2,10 +2,8 @@
|
|||||||
|
|
||||||
||Badges|
|
||Badges|
|
||||||
|---|---|
|
|---|---|
|
||||||
|AppVeyor|[![AppVeyor build status](https://ci.appveyor.com/api/projects/status/github/softethervpn/softethervpn?branch=master&svg=true)](https://ci.appveyor.com/project/softethervpn/softethervpn) |
|
|
||||||
|GitLab CI|[![GitLab CI build status](https://gitlab.com/SoftEther/SoftEtherVPN/badges/master/pipeline.svg)](https://gitlab.com/SoftEther/SoftEtherVPN/pipelines)|
|
|GitLab CI|[![GitLab CI build status](https://gitlab.com/SoftEther/SoftEtherVPN/badges/master/pipeline.svg)](https://gitlab.com/SoftEther/SoftEtherVPN/pipelines)|
|
||||||
|Coverity Scan|[![Coverity Scan build status](https://scan.coverity.com/projects/16304/badge.svg)](https://scan.coverity.com/projects/softethervpn-softethervpn)|
|
|Coverity Scan|[![Coverity Scan build status](https://scan.coverity.com/projects/16304/badge.svg)](https://scan.coverity.com/projects/softethervpn-softethervpn)|
|
||||||
|Azure Pipelines|[![Azure Pipelines build status for Nightly](https://dev.azure.com/SoftEther-VPN/SoftEther%20VPN/_apis/build/status/6?api-version=6.0-preview.1)](https://dev.azure.com/SoftEther-VPN/SoftEther%20VPN/_build?definitionId=6)|
|
|
||||||
|Cirrus CI|[![Cirrus CI build status](https://api.cirrus-ci.com/github/SoftEtherVPN/SoftEtherVPN.svg)](https://cirrus-ci.com/github/SoftEtherVPN/SoftEtherVPN)|
|
|Cirrus CI|[![Cirrus CI build status](https://api.cirrus-ci.com/github/SoftEtherVPN/SoftEtherVPN.svg)](https://cirrus-ci.com/github/SoftEtherVPN/SoftEtherVPN)|
|
||||||
|
|
||||||
- [SoftEther VPN](#softether-vpn)
|
- [SoftEther VPN](#softether-vpn)
|
||||||
@ -101,9 +99,6 @@ https://github.com/davidebeatrici
|
|||||||
Ilya Shipitsin (Since Jul 21, 2018)
|
Ilya Shipitsin (Since Jul 21, 2018)
|
||||||
https://github.com/chipitsine
|
https://github.com/chipitsine
|
||||||
|
|
||||||
Yihong Wu (Since Jul 16, 2021)
|
|
||||||
https://github.com/domosekai
|
|
||||||
|
|
||||||
|
|
||||||
# SOFTETHER VPN ADVANTAGES
|
# SOFTETHER VPN ADVANTAGES
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
@ -216,8 +216,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
<li><a href="#getspeciallistener">GetSpecialListener - Get Current Setting of the VPN over ICMP / VPN over DNS Function</a></li>
|
<li><a href="#getspeciallistener">GetSpecialListener - Get Current Setting of the VPN over ICMP / VPN over DNS Function</a></li>
|
||||||
<li><a href="#getazurestatus">GetAzureStatus - Show the current status of VPN Azure function</a></li>
|
<li><a href="#getazurestatus">GetAzureStatus - Show the current status of VPN Azure function</a></li>
|
||||||
<li><a href="#setazurestatus">SetAzureStatus - Enable / Disable VPN Azure Function</a></li>
|
<li><a href="#setazurestatus">SetAzureStatus - Enable / Disable VPN Azure Function</a></li>
|
||||||
<li><a href="#getddnsinternetsettng">GetDDnsInternetSettng - Get the Proxy Settings for Connecting to the DDNS server</a></li>
|
<li><a href="#getddnsinternetsetting">GetDDnsInternetSetting - Get the Proxy Settings for Connecting to the DDNS server</a></li>
|
||||||
<li><a href="#setddnsinternetsettng">SetDDnsInternetSettng - Set the Proxy Settings for Connecting to the DDNS server</a></li>
|
<li><a href="#setddnsinternetsetting">SetDDnsInternetSetting - Set the Proxy Settings for Connecting to the DDNS server</a></li>
|
||||||
<li><a href="#setvgsconfig">SetVgsConfig - Set the VPN Gate Server Configuration</a></li>
|
<li><a href="#setvgsconfig">SetVgsConfig - Set the VPN Gate Server Configuration</a></li>
|
||||||
<li><a href="#getvgsconfig">GetVgsConfig - Get the VPN Gate Server Configuration</a></li>
|
<li><a href="#getvgsconfig">GetVgsConfig - Get the VPN Gate Server Configuration</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -305,7 +305,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"ServerBuildInt_u32": 0,
|
"ServerBuildInt_u32": 0,
|
||||||
"ServerHostName_str": "serverhostname",
|
"ServerHostName_str": "serverhostname",
|
||||||
"ServerType_u32": 0,
|
"ServerType_u32": 0,
|
||||||
"ServerBuildDate_dt": "2020-08-01T12:24:36.123",
|
"ServerBuildDate_dt": "2024-08-01T12:24:36.123",
|
||||||
"ServerFamilyName_str": "serverfamilyname",
|
"ServerFamilyName_str": "serverfamilyname",
|
||||||
"OsType_u32": 0,
|
"OsType_u32": 0,
|
||||||
"OsServicePack_u32": 0,
|
"OsServicePack_u32": 0,
|
||||||
@ -460,9 +460,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Send.BroadcastCount_u64": 0,
|
"Send.BroadcastCount_u64": 0,
|
||||||
"Send.UnicastBytes_u64": 0,
|
"Send.UnicastBytes_u64": 0,
|
||||||
"Send.UnicastCount_u64": 0,
|
"Send.UnicastCount_u64": 0,
|
||||||
"CurrentTime_dt": "2020-08-01T12:24:36.123",
|
"CurrentTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CurrentTick_u64": 0,
|
"CurrentTick_u64": 0,
|
||||||
"StartTime_dt": "2020-08-01T12:24:36.123",
|
"StartTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"TotalMemory_u64": 0,
|
"TotalMemory_u64": 0,
|
||||||
"UsedMemory_u64": 0,
|
"UsedMemory_u64": 0,
|
||||||
"FreeMemory_u64": 0,
|
"FreeMemory_u64": 0,
|
||||||
@ -1136,7 +1136,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"result": {
|
"result": {
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"Controller_bool": false,
|
"Controller_bool": false,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Point_u32": 0,
|
"Point_u32": 0,
|
||||||
@ -1283,7 +1283,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"Controller_bool": false,
|
"Controller_bool": false,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Point_u32": 0,
|
"Point_u32": 0,
|
||||||
@ -1296,7 +1296,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"Controller_bool": false,
|
"Controller_bool": false,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Point_u32": 0,
|
"Point_u32": 0,
|
||||||
@ -1309,7 +1309,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"Controller_bool": false,
|
"Controller_bool": false,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Point_u32": 0,
|
"Point_u32": 0,
|
||||||
@ -1422,9 +1422,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Port_u32": 0,
|
"Port_u32": 0,
|
||||||
"Online_bool": false,
|
"Online_bool": false,
|
||||||
"LastError_u32": 0,
|
"LastError_u32": 0,
|
||||||
"StartedTime_dt": "2020-08-01T12:24:36.123",
|
"StartedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"FirstConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"FirstConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CurrentConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"CurrentConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumTry_u32": 0,
|
"NumTry_u32": 0,
|
||||||
"NumConnected_u32": 0,
|
"NumConnected_u32": 0,
|
||||||
"NumFailed_u32": 0
|
"NumFailed_u32": 0
|
||||||
@ -1918,9 +1918,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"NumSessions_u32": 0,
|
"NumSessions_u32": 0,
|
||||||
"NumMacTables_u32": 0,
|
"NumMacTables_u32": 0,
|
||||||
"NumIpTables_u32": 0,
|
"NumIpTables_u32": 0,
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
@ -1941,9 +1941,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"NumSessions_u32": 0,
|
"NumSessions_u32": 0,
|
||||||
"NumMacTables_u32": 0,
|
"NumMacTables_u32": 0,
|
||||||
"NumIpTables_u32": 0,
|
"NumIpTables_u32": 0,
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
@ -1964,9 +1964,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"NumSessions_u32": 0,
|
"NumSessions_u32": 0,
|
||||||
"NumMacTables_u32": 0,
|
"NumMacTables_u32": 0,
|
||||||
"NumIpTables_u32": 0,
|
"NumIpTables_u32": 0,
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
@ -2309,7 +2309,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Port_u32": 0,
|
"Port_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Type_u32": 0
|
"Type_u32": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -2317,7 +2317,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Port_u32": 0,
|
"Port_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Type_u32": 0
|
"Type_u32": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -2325,7 +2325,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Port_u32": 0,
|
"Port_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Type_u32": 0
|
"Type_u32": 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -2450,7 +2450,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Port_u32": 0,
|
"Port_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ServerStr_str": "serverstr",
|
"ServerStr_str": "serverstr",
|
||||||
"ServerVer_u32": 0,
|
"ServerVer_u32": 0,
|
||||||
"ServerBuild_u32": 0,
|
"ServerBuild_u32": 0,
|
||||||
@ -2620,9 +2620,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Send.UnicastBytes_u64": 0,
|
"Send.UnicastBytes_u64": 0,
|
||||||
"Send.UnicastCount_u64": 0,
|
"Send.UnicastCount_u64": 0,
|
||||||
"SecureNATEnabled_bool": false,
|
"SecureNATEnabled_bool": false,
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumLogin_u32": 0
|
"NumLogin_u32": 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2992,19 +2992,19 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SubjectName_utf": "subjectname",
|
"SubjectName_utf": "subjectname",
|
||||||
"IssuerName_utf": "issuername",
|
"IssuerName_utf": "issuername",
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123"
|
"Expires_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SubjectName_utf": "subjectname",
|
"SubjectName_utf": "subjectname",
|
||||||
"IssuerName_utf": "issuername",
|
"IssuerName_utf": "issuername",
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123"
|
"Expires_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SubjectName_utf": "subjectname",
|
"SubjectName_utf": "subjectname",
|
||||||
"IssuerName_utf": "issuername",
|
"IssuerName_utf": "issuername",
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123"
|
"Expires_dt": "2024-08-01T12:24:36.123"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -4348,7 +4348,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Online_bool": false,
|
"Online_bool": false,
|
||||||
"Connected_bool": false,
|
"Connected_bool": false,
|
||||||
"LastError_u32": 0,
|
"LastError_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"TargetHubName_str": "targethubname"
|
"TargetHubName_str": "targethubname"
|
||||||
},
|
},
|
||||||
@ -4357,7 +4357,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Online_bool": false,
|
"Online_bool": false,
|
||||||
"Connected_bool": false,
|
"Connected_bool": false,
|
||||||
"LastError_u32": 0,
|
"LastError_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"TargetHubName_str": "targethubname"
|
"TargetHubName_str": "targethubname"
|
||||||
},
|
},
|
||||||
@ -4366,7 +4366,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Online_bool": false,
|
"Online_bool": false,
|
||||||
"Connected_bool": false,
|
"Connected_bool": false,
|
||||||
"LastError_u32": 0,
|
"LastError_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"TargetHubName_str": "targethubname"
|
"TargetHubName_str": "targethubname"
|
||||||
}
|
}
|
||||||
@ -4668,9 +4668,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"ServerProductBuild_u32": 0,
|
"ServerProductBuild_u32": 0,
|
||||||
"ServerX_bin": "SGVsbG8gV29ybGQ=",
|
"ServerX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"ClientX_bin": "SGVsbG8gV29ybGQ=",
|
"ClientX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"StartTime_dt": "2020-08-01T12:24:36.123",
|
"StartTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"FirstConnectionEstablisiedTime_dt": "2020-08-01T12:24:36.123",
|
"FirstConnectionEstablisiedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CurrentConnectionEstablishTime_dt": "2020-08-01T12:24:36.123",
|
"CurrentConnectionEstablishTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumConnectionsEatablished_u32": 0,
|
"NumConnectionsEatablished_u32": 0,
|
||||||
"HalfConnection_bool": false,
|
"HalfConnection_bool": false,
|
||||||
"QoS_bool": false,
|
"QoS_bool": false,
|
||||||
@ -5996,7 +5996,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Name_str": "name",
|
"Name_str": "name",
|
||||||
"Realname_utf": "realname",
|
"Realname_utf": "realname",
|
||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"Auth_Password_str": "auth_password",
|
"Auth_Password_str": "auth_password",
|
||||||
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
@ -6057,9 +6057,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"GroupName_str": "groupname",
|
"GroupName_str": "groupname",
|
||||||
"Realname_utf": "realname",
|
"Realname_utf": "realname",
|
||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"Auth_Password_str": "auth_password",
|
"Auth_Password_str": "auth_password",
|
||||||
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
@ -6247,7 +6247,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
<tr>
|
<tr>
|
||||||
<td><code>Send.UnicastCount_u64</code></td>
|
<td><code>Send.UnicastCount_u64</code></td>
|
||||||
<td><code>number</code> (uint64)</td>
|
<td><code>number</code> (uint64)</td>
|
||||||
<td>Unicast count (Send)</td>
|
<td>Unicast bytes (Send)</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>UsePolicy_bool</code></td>
|
<td><code>UsePolicy_bool</code></td>
|
||||||
@ -6467,7 +6467,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"GroupName_str": "groupname",
|
"GroupName_str": "groupname",
|
||||||
"Realname_utf": "realname",
|
"Realname_utf": "realname",
|
||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"Auth_Password_str": "auth_password",
|
"Auth_Password_str": "auth_password",
|
||||||
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
@ -6528,9 +6528,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"GroupName_str": "groupname",
|
"GroupName_str": "groupname",
|
||||||
"Realname_utf": "realname",
|
"Realname_utf": "realname",
|
||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"Auth_Password_str": "auth_password",
|
"Auth_Password_str": "auth_password",
|
||||||
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
@ -6948,9 +6948,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"GroupName_str": "groupname",
|
"GroupName_str": "groupname",
|
||||||
"Realname_utf": "realname",
|
"Realname_utf": "realname",
|
||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"Auth_Password_str": "auth_password",
|
"Auth_Password_str": "auth_password",
|
||||||
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
@ -7419,11 +7419,11 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"DenyAccess_bool": false,
|
"DenyAccess_bool": false,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"IsExpiresFilled_bool": false,
|
"IsExpiresFilled_bool": false,
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123",
|
"Expires_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
"Ex.Recv.BroadcastCount_u64": 0,
|
"Ex.Recv.BroadcastCount_u64": 0,
|
||||||
"Ex.Recv.UnicastBytes_u64": 0,
|
"Ex.Recv.UnicastBytes_u64": 0,
|
||||||
@ -7440,11 +7440,11 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"DenyAccess_bool": false,
|
"DenyAccess_bool": false,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"IsExpiresFilled_bool": false,
|
"IsExpiresFilled_bool": false,
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123",
|
"Expires_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
"Ex.Recv.BroadcastCount_u64": 0,
|
"Ex.Recv.BroadcastCount_u64": 0,
|
||||||
"Ex.Recv.UnicastBytes_u64": 0,
|
"Ex.Recv.UnicastBytes_u64": 0,
|
||||||
@ -7461,11 +7461,11 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"DenyAccess_bool": false,
|
"DenyAccess_bool": false,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"IsExpiresFilled_bool": false,
|
"IsExpiresFilled_bool": false,
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123",
|
"Expires_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
"Ex.Recv.BroadcastCount_u64": 0,
|
"Ex.Recv.BroadcastCount_u64": 0,
|
||||||
"Ex.Recv.UnicastBytes_u64": 0,
|
"Ex.Recv.UnicastBytes_u64": 0,
|
||||||
@ -8907,8 +8907,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Client_MonitorMode_bool": false,
|
"Client_MonitorMode_bool": false,
|
||||||
"VLanId_u32": 0,
|
"VLanId_u32": 0,
|
||||||
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123"
|
"LastCommTime_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Name_str": "name",
|
"Name_str": "name",
|
||||||
@ -8929,8 +8929,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Client_MonitorMode_bool": false,
|
"Client_MonitorMode_bool": false,
|
||||||
"VLanId_u32": 0,
|
"VLanId_u32": 0,
|
||||||
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123"
|
"LastCommTime_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Name_str": "name",
|
"Name_str": "name",
|
||||||
@ -8951,8 +8951,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Client_MonitorMode_bool": false,
|
"Client_MonitorMode_bool": false,
|
||||||
"VLanId_u32": 0,
|
"VLanId_u32": 0,
|
||||||
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123"
|
"LastCommTime_dt": "2024-08-01T12:24:36.123"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -9117,9 +9117,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"ServerProductName_str": "serverproductname",
|
"ServerProductName_str": "serverproductname",
|
||||||
"ServerProductVer_u32": 0,
|
"ServerProductVer_u32": 0,
|
||||||
"ServerProductBuild_u32": 0,
|
"ServerProductBuild_u32": 0,
|
||||||
"StartTime_dt": "2020-08-01T12:24:36.123",
|
"StartTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"FirstConnectionEstablisiedTime_dt": "2020-08-01T12:24:36.123",
|
"FirstConnectionEstablisiedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CurrentConnectionEstablishTime_dt": "2020-08-01T12:24:36.123",
|
"CurrentConnectionEstablishTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumConnectionsEatablished_u32": 0,
|
"NumConnectionsEatablished_u32": 0,
|
||||||
"HalfConnection_bool": false,
|
"HalfConnection_bool": false,
|
||||||
"QoS_bool": false,
|
"QoS_bool": false,
|
||||||
@ -9496,8 +9496,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname",
|
"RemoteHostname_str": "remotehostname",
|
||||||
"VlanId_u32": 0
|
"VlanId_u32": 0
|
||||||
@ -9506,8 +9506,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname",
|
"RemoteHostname_str": "remotehostname",
|
||||||
"VlanId_u32": 0
|
"VlanId_u32": 0
|
||||||
@ -9516,8 +9516,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname",
|
"RemoteHostname_str": "remotehostname",
|
||||||
"VlanId_u32": 0
|
"VlanId_u32": 0
|
||||||
@ -9663,8 +9663,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"DhcpAllocated_bool": false,
|
"DhcpAllocated_bool": false,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname"
|
"RemoteHostname_str": "remotehostname"
|
||||||
},
|
},
|
||||||
@ -9673,8 +9673,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"DhcpAllocated_bool": false,
|
"DhcpAllocated_bool": false,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname"
|
"RemoteHostname_str": "remotehostname"
|
||||||
},
|
},
|
||||||
@ -9683,8 +9683,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"DhcpAllocated_bool": false,
|
"DhcpAllocated_bool": false,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname"
|
"RemoteHostname_str": "remotehostname"
|
||||||
}
|
}
|
||||||
@ -10376,8 +10376,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"DestIp_ip": "192.168.0.1",
|
"DestIp_ip": "192.168.0.1",
|
||||||
"DestHost_str": "desthost",
|
"DestHost_str": "desthost",
|
||||||
"DestPort_u32": 0,
|
"DestPort_u32": 0,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"SendSize_u64": 0,
|
"SendSize_u64": 0,
|
||||||
"RecvSize_u64": 0,
|
"RecvSize_u64": 0,
|
||||||
"TcpStatus_u32": 0
|
"TcpStatus_u32": 0
|
||||||
@ -10391,8 +10391,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"DestIp_ip": "192.168.0.1",
|
"DestIp_ip": "192.168.0.1",
|
||||||
"DestHost_str": "desthost",
|
"DestHost_str": "desthost",
|
||||||
"DestPort_u32": 0,
|
"DestPort_u32": 0,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"SendSize_u64": 0,
|
"SendSize_u64": 0,
|
||||||
"RecvSize_u64": 0,
|
"RecvSize_u64": 0,
|
||||||
"TcpStatus_u32": 0
|
"TcpStatus_u32": 0
|
||||||
@ -10406,8 +10406,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"DestIp_ip": "192.168.0.1",
|
"DestIp_ip": "192.168.0.1",
|
||||||
"DestHost_str": "desthost",
|
"DestHost_str": "desthost",
|
||||||
"DestPort_u32": 0,
|
"DestPort_u32": 0,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"SendSize_u64": 0,
|
"SendSize_u64": 0,
|
||||||
"RecvSize_u64": 0,
|
"RecvSize_u64": 0,
|
||||||
"TcpStatus_u32": 0
|
"TcpStatus_u32": 0
|
||||||
@ -10527,8 +10527,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"DhcpTable": [
|
"DhcpTable": [
|
||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"LeasedTime_dt": "2020-08-01T12:24:36.123",
|
"LeasedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"Mask_u32": 0,
|
"Mask_u32": 0,
|
||||||
@ -10536,8 +10536,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"LeasedTime_dt": "2020-08-01T12:24:36.123",
|
"LeasedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"Mask_u32": 0,
|
"Mask_u32": 0,
|
||||||
@ -10545,8 +10545,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"LeasedTime_dt": "2020-08-01T12:24:36.123",
|
"LeasedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"Mask_u32": 0,
|
"Mask_u32": 0,
|
||||||
@ -13090,19 +13090,19 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"ServerName_str": "servername",
|
"ServerName_str": "servername",
|
||||||
"FilePath_str": "filepath",
|
"FilePath_str": "filepath",
|
||||||
"FileSize_u32": 0,
|
"FileSize_u32": 0,
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123"
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ServerName_str": "servername",
|
"ServerName_str": "servername",
|
||||||
"FilePath_str": "filepath",
|
"FilePath_str": "filepath",
|
||||||
"FileSize_u32": 0,
|
"FileSize_u32": 0,
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123"
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ServerName_str": "servername",
|
"ServerName_str": "servername",
|
||||||
"FilePath_str": "filepath",
|
"FilePath_str": "filepath",
|
||||||
"FileSize_u32": 0,
|
"FileSize_u32": 0,
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123"
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -14508,15 +14508,15 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<hr />
|
<hr />
|
||||||
<p><a id="getddnsinternetsettng"></a></p>
|
<p><a id="getddnsinternetsetting"></a></p>
|
||||||
<h2 id="getddnsinternetsettng-rpc-api-get-the-proxy-settings-for-connecting-to-the-ddns-server">"GetDDnsInternetSettng" RPC API - Get the Proxy Settings for Connecting to the DDNS server</h2>
|
<h2 id="getddnsinternetsetting-rpc-api-get-the-proxy-settings-for-connecting-to-the-ddns-server">"GetDDnsInternetSetting" RPC API - Get the Proxy Settings for Connecting to the DDNS server</h2>
|
||||||
<h3 id="description-131">Description</h3>
|
<h3 id="description-131">Description</h3>
|
||||||
<p>Get the Proxy Settings for Connecting to the DDNS server.</p>
|
<p>Get the Proxy Settings for Connecting to the DDNS server.</p>
|
||||||
<h3 id="input-json-rpc-format-131">Input JSON-RPC Format</h3>
|
<h3 id="input-json-rpc-format-131">Input JSON-RPC Format</h3>
|
||||||
<pre><code class="language-json">{
|
<pre><code class="language-json">{
|
||||||
"jsonrpc": "2.0",
|
"jsonrpc": "2.0",
|
||||||
"id": "rpc_call_id",
|
"id": "rpc_call_id",
|
||||||
"method": "GetDDnsInternetSettng",
|
"method": "GetDDnsInternetSetting",
|
||||||
"params": {}
|
"params": {}
|
||||||
}
|
}
|
||||||
</code></pre>
|
</code></pre>
|
||||||
@ -14571,15 +14571,15 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<hr />
|
<hr />
|
||||||
<p><a id="setddnsinternetsettng"></a></p>
|
<p><a id="setddnsinternetsetting"></a></p>
|
||||||
<h2 id="setddnsinternetsettng-rpc-api-set-the-proxy-settings-for-connecting-to-the-ddns-server">"SetDDnsInternetSettng" RPC API - Set the Proxy Settings for Connecting to the DDNS server</h2>
|
<h2 id="setddnsinternetsetting-rpc-api-set-the-proxy-settings-for-connecting-to-the-ddns-server">"SetDDnsInternetSetting" RPC API - Set the Proxy Settings for Connecting to the DDNS server</h2>
|
||||||
<h3 id="description-132">Description</h3>
|
<h3 id="description-132">Description</h3>
|
||||||
<p>Set the Proxy Settings for Connecting to the DDNS server.</p>
|
<p>Set the Proxy Settings for Connecting to the DDNS server.</p>
|
||||||
<h3 id="input-json-rpc-format-132">Input JSON-RPC Format</h3>
|
<h3 id="input-json-rpc-format-132">Input JSON-RPC Format</h3>
|
||||||
<pre><code class="language-json">{
|
<pre><code class="language-json">{
|
||||||
"jsonrpc": "2.0",
|
"jsonrpc": "2.0",
|
||||||
"id": "rpc_call_id",
|
"id": "rpc_call_id",
|
||||||
"method": "SetDDnsInternetSettng",
|
"method": "SetDDnsInternetSetting",
|
||||||
"params": {
|
"params": {
|
||||||
"ProxyType_u32": 0,
|
"ProxyType_u32": 0,
|
||||||
"ProxyHostName_str": "proxyhostname",
|
"ProxyHostName_str": "proxyhostname",
|
||||||
@ -14640,8 +14640,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<hr />
|
<hr />
|
||||||
<p>Automatically generated at 2019-07-10 14:36:11 by vpnserver-jsonrpc-codegen.<br />
|
<p>Automatically generated at 2023-05-10 14:43:37 by vpnserver-jsonrpc-codegen.<br />
|
||||||
Copyright (c) 2014-2019 <a href="https://www.softether.org/">SoftEther VPN Project</a> under the Apache License 2.0.</p>
|
Copyright (c) 2014-2023 <a href="https://www.softether.org/">SoftEther VPN Project</a> under the Apache License 2.0.</p>
|
||||||
|
|
||||||
</article>
|
</article>
|
||||||
</body>
|
</body>
|
||||||
|
@ -208,8 +208,8 @@ Value | Description
|
|||||||
- [GetSpecialListener - Get Current Setting of the VPN over ICMP / VPN over DNS Function](#getspeciallistener)
|
- [GetSpecialListener - Get Current Setting of the VPN over ICMP / VPN over DNS Function](#getspeciallistener)
|
||||||
- [GetAzureStatus - Show the current status of VPN Azure function](#getazurestatus)
|
- [GetAzureStatus - Show the current status of VPN Azure function](#getazurestatus)
|
||||||
- [SetAzureStatus - Enable / Disable VPN Azure Function](#setazurestatus)
|
- [SetAzureStatus - Enable / Disable VPN Azure Function](#setazurestatus)
|
||||||
- [GetDDnsInternetSettng - Get the Proxy Settings for Connecting to the DDNS server](#getddnsinternetsettng)
|
- [GetDDnsInternetSetting - Get the Proxy Settings for Connecting to the DDNS server](#getddnsinternetsetting)
|
||||||
- [SetDDnsInternetSettng - Set the Proxy Settings for Connecting to the DDNS server](#setddnsinternetsettng)
|
- [SetDDnsInternetSetting - Set the Proxy Settings for Connecting to the DDNS server](#setddnsinternetsetting)
|
||||||
- [SetVgsConfig - Set the VPN Gate Server Configuration](#setvgsconfig)
|
- [SetVgsConfig - Set the VPN Gate Server Configuration](#setvgsconfig)
|
||||||
- [GetVgsConfig - Get the VPN Gate Server Configuration](#getvgsconfig)
|
- [GetVgsConfig - Get the VPN Gate Server Configuration](#getvgsconfig)
|
||||||
|
|
||||||
@ -283,7 +283,7 @@ Get server information. This allows you to obtain the server information of the
|
|||||||
"ServerBuildInt_u32": 0,
|
"ServerBuildInt_u32": 0,
|
||||||
"ServerHostName_str": "serverhostname",
|
"ServerHostName_str": "serverhostname",
|
||||||
"ServerType_u32": 0,
|
"ServerType_u32": 0,
|
||||||
"ServerBuildDate_dt": "2020-08-01T12:24:36.123",
|
"ServerBuildDate_dt": "2024-08-01T12:24:36.123",
|
||||||
"ServerFamilyName_str": "serverfamilyname",
|
"ServerFamilyName_str": "serverfamilyname",
|
||||||
"OsType_u32": 0,
|
"OsType_u32": 0,
|
||||||
"OsServicePack_u32": 0,
|
"OsServicePack_u32": 0,
|
||||||
@ -368,9 +368,9 @@ Get Current Server Status. This allows you to obtain in real-time the current st
|
|||||||
"Send.BroadcastCount_u64": 0,
|
"Send.BroadcastCount_u64": 0,
|
||||||
"Send.UnicastBytes_u64": 0,
|
"Send.UnicastBytes_u64": 0,
|
||||||
"Send.UnicastCount_u64": 0,
|
"Send.UnicastCount_u64": 0,
|
||||||
"CurrentTime_dt": "2020-08-01T12:24:36.123",
|
"CurrentTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CurrentTick_u64": 0,
|
"CurrentTick_u64": 0,
|
||||||
"StartTime_dt": "2020-08-01T12:24:36.123",
|
"StartTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"TotalMemory_u64": 0,
|
"TotalMemory_u64": 0,
|
||||||
"UsedMemory_u64": 0,
|
"UsedMemory_u64": 0,
|
||||||
"FreeMemory_u64": 0,
|
"FreeMemory_u64": 0,
|
||||||
@ -768,7 +768,7 @@ Get Cluster Member Information. When the VPN Server is operating as a cluster co
|
|||||||
"result": {
|
"result": {
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"Controller_bool": false,
|
"Controller_bool": false,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Point_u32": 0,
|
"Point_u32": 0,
|
||||||
@ -849,7 +849,7 @@ Get List of Cluster Members. Use this API when the VPN Server is operating as a
|
|||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"Controller_bool": false,
|
"Controller_bool": false,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Point_u32": 0,
|
"Point_u32": 0,
|
||||||
@ -862,7 +862,7 @@ Get List of Cluster Members. Use this API when the VPN Server is operating as a
|
|||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"Controller_bool": false,
|
"Controller_bool": false,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Point_u32": 0,
|
"Point_u32": 0,
|
||||||
@ -875,7 +875,7 @@ Get List of Cluster Members. Use this API when the VPN Server is operating as a
|
|||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"Controller_bool": false,
|
"Controller_bool": false,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Point_u32": 0,
|
"Point_u32": 0,
|
||||||
@ -934,9 +934,9 @@ Get Connection Status to Cluster Controller. Use this API when the VPN Server is
|
|||||||
"Port_u32": 0,
|
"Port_u32": 0,
|
||||||
"Online_bool": false,
|
"Online_bool": false,
|
||||||
"LastError_u32": 0,
|
"LastError_u32": 0,
|
||||||
"StartedTime_dt": "2020-08-01T12:24:36.123",
|
"StartedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"FirstConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"FirstConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CurrentConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"CurrentConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumTry_u32": 0,
|
"NumTry_u32": 0,
|
||||||
"NumConnected_u32": 0,
|
"NumConnected_u32": 0,
|
||||||
"NumFailed_u32": 0
|
"NumFailed_u32": 0
|
||||||
@ -1278,9 +1278,9 @@ Get List of Virtual Hubs. Use this to get a list of existing Virtual Hubs on the
|
|||||||
"NumSessions_u32": 0,
|
"NumSessions_u32": 0,
|
||||||
"NumMacTables_u32": 0,
|
"NumMacTables_u32": 0,
|
||||||
"NumIpTables_u32": 0,
|
"NumIpTables_u32": 0,
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
@ -1301,9 +1301,9 @@ Get List of Virtual Hubs. Use this to get a list of existing Virtual Hubs on the
|
|||||||
"NumSessions_u32": 0,
|
"NumSessions_u32": 0,
|
||||||
"NumMacTables_u32": 0,
|
"NumMacTables_u32": 0,
|
||||||
"NumIpTables_u32": 0,
|
"NumIpTables_u32": 0,
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
@ -1324,9 +1324,9 @@ Get List of Virtual Hubs. Use this to get a list of existing Virtual Hubs on the
|
|||||||
"NumSessions_u32": 0,
|
"NumSessions_u32": 0,
|
||||||
"NumMacTables_u32": 0,
|
"NumMacTables_u32": 0,
|
||||||
"NumIpTables_u32": 0,
|
"NumIpTables_u32": 0,
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
@ -1525,7 +1525,7 @@ Get List of TCP Connections Connecting to the VPN Server. Use this to get a list
|
|||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Port_u32": 0,
|
"Port_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Type_u32": 0
|
"Type_u32": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -1533,7 +1533,7 @@ Get List of TCP Connections Connecting to the VPN Server. Use this to get a list
|
|||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Port_u32": 0,
|
"Port_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Type_u32": 0
|
"Type_u32": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -1541,7 +1541,7 @@ Get List of TCP Connections Connecting to the VPN Server. Use this to get a list
|
|||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Port_u32": 0,
|
"Port_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Type_u32": 0
|
"Type_u32": 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -1626,7 +1626,7 @@ Get Information of TCP Connections Connecting to the VPN Server. Use this to get
|
|||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Port_u32": 0,
|
"Port_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ServerStr_str": "serverstr",
|
"ServerStr_str": "serverstr",
|
||||||
"ServerVer_u32": 0,
|
"ServerVer_u32": 0,
|
||||||
"ServerBuild_u32": 0,
|
"ServerBuild_u32": 0,
|
||||||
@ -1736,9 +1736,9 @@ Get Current Status of Virtual Hub. Use this to get the current status of the Vir
|
|||||||
"Send.UnicastBytes_u64": 0,
|
"Send.UnicastBytes_u64": 0,
|
||||||
"Send.UnicastCount_u64": 0,
|
"Send.UnicastCount_u64": 0,
|
||||||
"SecureNATEnabled_bool": false,
|
"SecureNATEnabled_bool": false,
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumLogin_u32": 0
|
"NumLogin_u32": 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1948,19 +1948,19 @@ Get List of Trusted CA Certificates. Here you can manage the certificate authori
|
|||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SubjectName_utf": "subjectname",
|
"SubjectName_utf": "subjectname",
|
||||||
"IssuerName_utf": "issuername",
|
"IssuerName_utf": "issuername",
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123"
|
"Expires_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SubjectName_utf": "subjectname",
|
"SubjectName_utf": "subjectname",
|
||||||
"IssuerName_utf": "issuername",
|
"IssuerName_utf": "issuername",
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123"
|
"Expires_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SubjectName_utf": "subjectname",
|
"SubjectName_utf": "subjectname",
|
||||||
"IssuerName_utf": "issuername",
|
"IssuerName_utf": "issuername",
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123"
|
"Expires_dt": "2024-08-01T12:24:36.123"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -2210,7 +2210,7 @@ Name | Type | Description
|
|||||||
`NoUdpAcceleration_bool` | `boolean` | Client Option Parameters: Do not use UDP acceleration mode if the value is true
|
`NoUdpAcceleration_bool` | `boolean` | Client Option Parameters: Do not use UDP acceleration mode if the value is true
|
||||||
`AuthType_u32` | `number` (enum) | Authentication type<BR>Values:<BR>`0`: Anonymous authentication<BR>`1`: SHA-0 hashed password authentication<BR>`2`: Plain password authentication<BR>`3`: Certificate authentication
|
`AuthType_u32` | `number` (enum) | Authentication type<BR>Values:<BR>`0`: Anonymous authentication<BR>`1`: SHA-0 hashed password authentication<BR>`2`: Plain password authentication<BR>`3`: Certificate authentication
|
||||||
`Username_str` | `string` (ASCII) | User name
|
`Username_str` | `string` (ASCII) | User name
|
||||||
`HashedPassword_bin` | `string` (Base64 binary) | SHA-0 Hashed password. Valid only if ClientAuth_AuthType_u32 == SHA0_Hashed_Password (1). The SHA-0 hashed password must be caluclated by the SHA0(password_ascii_string + UpperCase(username_ascii_string)).
|
`HashedPassword_bin` | `string` (Base64 binary) | SHA-0 Hashed password. Valid only if ClientAuth_AuthType_u32 == SHA0_Hashed_Password (1). The SHA-0 hashed password must be caluclated by the SHA0(UpperCase(username_ascii_string) + password_ascii_string).
|
||||||
`PlainPassword_str` | `string` (ASCII) | Plaintext Password. Valid only if ClientAuth_AuthType_u32 == PlainPassword (2).
|
`PlainPassword_str` | `string` (ASCII) | Plaintext Password. Valid only if ClientAuth_AuthType_u32 == PlainPassword (2).
|
||||||
`ClientX_bin` | `string` (Base64 binary) | Client certificate. Valid only if ClientAuth_AuthType_u32 == Cert (3).
|
`ClientX_bin` | `string` (Base64 binary) | Client certificate. Valid only if ClientAuth_AuthType_u32 == Cert (3).
|
||||||
`ClientK_bin` | `string` (Base64 binary) | Client private key of the certificate. Valid only if ClientAuth_AuthType_u32 == Cert (3).
|
`ClientK_bin` | `string` (Base64 binary) | Client private key of the certificate. Valid only if ClientAuth_AuthType_u32 == Cert (3).
|
||||||
@ -2537,7 +2537,7 @@ Name | Type | Description
|
|||||||
`NoUdpAcceleration_bool` | `boolean` | Client Option Parameters: Do not use UDP acceleration mode if the value is true
|
`NoUdpAcceleration_bool` | `boolean` | Client Option Parameters: Do not use UDP acceleration mode if the value is true
|
||||||
`AuthType_u32` | `number` (enum) | Authentication type<BR>Values:<BR>`0`: Anonymous authentication<BR>`1`: SHA-0 hashed password authentication<BR>`2`: Plain password authentication<BR>`3`: Certificate authentication
|
`AuthType_u32` | `number` (enum) | Authentication type<BR>Values:<BR>`0`: Anonymous authentication<BR>`1`: SHA-0 hashed password authentication<BR>`2`: Plain password authentication<BR>`3`: Certificate authentication
|
||||||
`Username_str` | `string` (ASCII) | User name
|
`Username_str` | `string` (ASCII) | User name
|
||||||
`HashedPassword_bin` | `string` (Base64 binary) | SHA-0 Hashed password. Valid only if ClientAuth_AuthType_u32 == SHA0_Hashed_Password (1). The SHA-0 hashed password must be caluclated by the SHA0(password_ascii_string + UpperCase(username_ascii_string)).
|
`HashedPassword_bin` | `string` (Base64 binary) | SHA-0 Hashed password. Valid only if ClientAuth_AuthType_u32 == SHA0_Hashed_Password (1). The SHA-0 hashed password must be caluclated by the SHA0(UpperCase(username_ascii_string) + password_ascii_string).
|
||||||
`PlainPassword_str` | `string` (ASCII) | Plaintext Password. Valid only if ClientAuth_AuthType_u32 == PlainPassword (2).
|
`PlainPassword_str` | `string` (ASCII) | Plaintext Password. Valid only if ClientAuth_AuthType_u32 == PlainPassword (2).
|
||||||
`ClientX_bin` | `string` (Base64 binary) | Client certificate. Valid only if ClientAuth_AuthType_u32 == Cert (3).
|
`ClientX_bin` | `string` (Base64 binary) | Client certificate. Valid only if ClientAuth_AuthType_u32 == Cert (3).
|
||||||
`ClientK_bin` | `string` (Base64 binary) | Client private key of the certificate. Valid only if ClientAuth_AuthType_u32 == Cert (3).
|
`ClientK_bin` | `string` (Base64 binary) | Client private key of the certificate. Valid only if ClientAuth_AuthType_u32 == Cert (3).
|
||||||
@ -2600,7 +2600,7 @@ Get List of Cascade Connections. Use this to get a list of Cascade Connections t
|
|||||||
"Online_bool": false,
|
"Online_bool": false,
|
||||||
"Connected_bool": false,
|
"Connected_bool": false,
|
||||||
"LastError_u32": 0,
|
"LastError_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"TargetHubName_str": "targethubname"
|
"TargetHubName_str": "targethubname"
|
||||||
},
|
},
|
||||||
@ -2609,7 +2609,7 @@ Get List of Cascade Connections. Use this to get a list of Cascade Connections t
|
|||||||
"Online_bool": false,
|
"Online_bool": false,
|
||||||
"Connected_bool": false,
|
"Connected_bool": false,
|
||||||
"LastError_u32": 0,
|
"LastError_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"TargetHubName_str": "targethubname"
|
"TargetHubName_str": "targethubname"
|
||||||
},
|
},
|
||||||
@ -2618,7 +2618,7 @@ Get List of Cascade Connections. Use this to get a list of Cascade Connections t
|
|||||||
"Online_bool": false,
|
"Online_bool": false,
|
||||||
"Connected_bool": false,
|
"Connected_bool": false,
|
||||||
"LastError_u32": 0,
|
"LastError_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"TargetHubName_str": "targethubname"
|
"TargetHubName_str": "targethubname"
|
||||||
}
|
}
|
||||||
@ -2834,9 +2834,9 @@ Get Current Cascade Connection Status. When a Cascade Connection registered on t
|
|||||||
"ServerProductBuild_u32": 0,
|
"ServerProductBuild_u32": 0,
|
||||||
"ServerX_bin": "SGVsbG8gV29ybGQ=",
|
"ServerX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"ClientX_bin": "SGVsbG8gV29ybGQ=",
|
"ClientX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"StartTime_dt": "2020-08-01T12:24:36.123",
|
"StartTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"FirstConnectionEstablisiedTime_dt": "2020-08-01T12:24:36.123",
|
"FirstConnectionEstablisiedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CurrentConnectionEstablishTime_dt": "2020-08-01T12:24:36.123",
|
"CurrentConnectionEstablishTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumConnectionsEatablished_u32": 0,
|
"NumConnectionsEatablished_u32": 0,
|
||||||
"HalfConnection_bool": false,
|
"HalfConnection_bool": false,
|
||||||
"QoS_bool": false,
|
"QoS_bool": false,
|
||||||
@ -3566,7 +3566,7 @@ Create a user. Use this to create a new user in the security account database of
|
|||||||
"Name_str": "name",
|
"Name_str": "name",
|
||||||
"Realname_utf": "realname",
|
"Realname_utf": "realname",
|
||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"Auth_Password_str": "auth_password",
|
"Auth_Password_str": "auth_password",
|
||||||
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
@ -3629,9 +3629,9 @@ Create a user. Use this to create a new user in the security account database of
|
|||||||
"GroupName_str": "groupname",
|
"GroupName_str": "groupname",
|
||||||
"Realname_utf": "realname",
|
"Realname_utf": "realname",
|
||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"Auth_Password_str": "auth_password",
|
"Auth_Password_str": "auth_password",
|
||||||
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
@ -3779,7 +3779,7 @@ Change User Settings. Use this to change user settings that is registered on the
|
|||||||
"GroupName_str": "groupname",
|
"GroupName_str": "groupname",
|
||||||
"Realname_utf": "realname",
|
"Realname_utf": "realname",
|
||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"Auth_Password_str": "auth_password",
|
"Auth_Password_str": "auth_password",
|
||||||
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
@ -3842,9 +3842,9 @@ Change User Settings. Use this to change user settings that is registered on the
|
|||||||
"GroupName_str": "groupname",
|
"GroupName_str": "groupname",
|
||||||
"Realname_utf": "realname",
|
"Realname_utf": "realname",
|
||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"Auth_Password_str": "auth_password",
|
"Auth_Password_str": "auth_password",
|
||||||
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
@ -4004,9 +4004,9 @@ Get User Settings. Use this to get user settings information that is registered
|
|||||||
"GroupName_str": "groupname",
|
"GroupName_str": "groupname",
|
||||||
"Realname_utf": "realname",
|
"Realname_utf": "realname",
|
||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"Auth_Password_str": "auth_password",
|
"Auth_Password_str": "auth_password",
|
||||||
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
@ -4207,11 +4207,11 @@ Get List of Users. Use this to get a list of users that are registered on the se
|
|||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"DenyAccess_bool": false,
|
"DenyAccess_bool": false,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"IsExpiresFilled_bool": false,
|
"IsExpiresFilled_bool": false,
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123",
|
"Expires_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
"Ex.Recv.BroadcastCount_u64": 0,
|
"Ex.Recv.BroadcastCount_u64": 0,
|
||||||
"Ex.Recv.UnicastBytes_u64": 0,
|
"Ex.Recv.UnicastBytes_u64": 0,
|
||||||
@ -4228,11 +4228,11 @@ Get List of Users. Use this to get a list of users that are registered on the se
|
|||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"DenyAccess_bool": false,
|
"DenyAccess_bool": false,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"IsExpiresFilled_bool": false,
|
"IsExpiresFilled_bool": false,
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123",
|
"Expires_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
"Ex.Recv.BroadcastCount_u64": 0,
|
"Ex.Recv.BroadcastCount_u64": 0,
|
||||||
"Ex.Recv.UnicastBytes_u64": 0,
|
"Ex.Recv.UnicastBytes_u64": 0,
|
||||||
@ -4249,11 +4249,11 @@ Get List of Users. Use this to get a list of users that are registered on the se
|
|||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"DenyAccess_bool": false,
|
"DenyAccess_bool": false,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"IsExpiresFilled_bool": false,
|
"IsExpiresFilled_bool": false,
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123",
|
"Expires_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
"Ex.Recv.BroadcastCount_u64": 0,
|
"Ex.Recv.BroadcastCount_u64": 0,
|
||||||
"Ex.Recv.UnicastBytes_u64": 0,
|
"Ex.Recv.UnicastBytes_u64": 0,
|
||||||
@ -4605,14 +4605,14 @@ Name | Type | Description
|
|||||||
`Name_str` | `string` (ASCII) | The group name
|
`Name_str` | `string` (ASCII) | The group name
|
||||||
`Realname_utf` | `string` (UTF8) | Optional real name (full name) of the group, allow using any Unicode characters
|
`Realname_utf` | `string` (UTF8) | Optional real name (full name) of the group, allow using any Unicode characters
|
||||||
`Note_utf` | `string` (UTF8) | Optional, specify a description of the group
|
`Note_utf` | `string` (UTF8) | Optional, specify a description of the group
|
||||||
`Recv.BroadcastBytes_u64` | `number` (uint64) | Broadcast bytes (Recv)
|
`Recv.BroadcastBytes_u64` | `number` (uint64) | Number of broadcast packets (Recv)
|
||||||
`Recv.BroadcastCount_u64` | `number` (uint64) | Number of broadcast packets (Recv)
|
`Recv.BroadcastCount_u64` | `number` (uint64) | Broadcast bytes (Recv)
|
||||||
`Recv.UnicastBytes_u64` | `number` (uint64) | Unicast bytes (Recv)
|
`Recv.UnicastBytes_u64` | `number` (uint64) | Unicast count (Recv)
|
||||||
`Recv.UnicastCount_u64` | `number` (uint64) | Unicast count (Recv)
|
`Recv.UnicastCount_u64` | `number` (uint64) | Unicast bytes (Recv)
|
||||||
`Send.BroadcastBytes_u64` | `number` (uint64) | Broadcast bytes (Send)
|
`Send.BroadcastBytes_u64` | `number` (uint64) | Number of broadcast packets (Send)
|
||||||
`Send.BroadcastCount_u64` | `number` (uint64) | Number of broadcast packets (Send)
|
`Send.BroadcastCount_u64` | `number` (uint64) | Broadcast bytes (Send)
|
||||||
`Send.UnicastBytes_u64` | `number` (uint64) | Unicast bytes (Send)
|
`Send.UnicastBytes_u64` | `number` (uint64) | Unicast bytes (Send)
|
||||||
`Send.UnicastCount_u64` | `number` (uint64) | Unicast count (Send)
|
`Send.UnicastCount_u64` | `number` (uint64) | Unicast bytes (Send)
|
||||||
`UsePolicy_bool` | `boolean` | The flag whether to use security policy
|
`UsePolicy_bool` | `boolean` | The flag whether to use security policy
|
||||||
`policy:Access_bool` | `boolean` | Security policy: Allow Access. The users, which this policy value is true, have permission to make VPN connection to VPN Server.
|
`policy:Access_bool` | `boolean` | Security policy: Allow Access. The users, which this policy value is true, have permission to make VPN connection to VPN Server.
|
||||||
`policy:DHCPFilter_bool` | `boolean` | Security policy: Filter DHCP Packets (IPv4). All IPv4 DHCP packets in sessions defined this policy will be filtered.
|
`policy:DHCPFilter_bool` | `boolean` | Security policy: Filter DHCP Packets (IPv4). All IPv4 DHCP packets in sessions defined this policy will be filtered.
|
||||||
@ -4939,8 +4939,8 @@ Get List of Connected VPN Sessions. Use this to get a list of the sessions conne
|
|||||||
"Client_MonitorMode_bool": false,
|
"Client_MonitorMode_bool": false,
|
||||||
"VLanId_u32": 0,
|
"VLanId_u32": 0,
|
||||||
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123"
|
"LastCommTime_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Name_str": "name",
|
"Name_str": "name",
|
||||||
@ -4961,8 +4961,8 @@ Get List of Connected VPN Sessions. Use this to get a list of the sessions conne
|
|||||||
"Client_MonitorMode_bool": false,
|
"Client_MonitorMode_bool": false,
|
||||||
"VLanId_u32": 0,
|
"VLanId_u32": 0,
|
||||||
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123"
|
"LastCommTime_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Name_str": "name",
|
"Name_str": "name",
|
||||||
@ -4983,8 +4983,8 @@ Get List of Connected VPN Sessions. Use this to get a list of the sessions conne
|
|||||||
"Client_MonitorMode_bool": false,
|
"Client_MonitorMode_bool": false,
|
||||||
"VLanId_u32": 0,
|
"VLanId_u32": 0,
|
||||||
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123"
|
"LastCommTime_dt": "2024-08-01T12:24:36.123"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -5059,9 +5059,9 @@ Get Session Status. Use this to specify a session currently connected to the cur
|
|||||||
"ServerProductName_str": "serverproductname",
|
"ServerProductName_str": "serverproductname",
|
||||||
"ServerProductVer_u32": 0,
|
"ServerProductVer_u32": 0,
|
||||||
"ServerProductBuild_u32": 0,
|
"ServerProductBuild_u32": 0,
|
||||||
"StartTime_dt": "2020-08-01T12:24:36.123",
|
"StartTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"FirstConnectionEstablisiedTime_dt": "2020-08-01T12:24:36.123",
|
"FirstConnectionEstablisiedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CurrentConnectionEstablishTime_dt": "2020-08-01T12:24:36.123",
|
"CurrentConnectionEstablishTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumConnectionsEatablished_u32": 0,
|
"NumConnectionsEatablished_u32": 0,
|
||||||
"HalfConnection_bool": false,
|
"HalfConnection_bool": false,
|
||||||
"QoS_bool": false,
|
"QoS_bool": false,
|
||||||
@ -5222,8 +5222,8 @@ Get the MAC Address Table Database. Use this to get the MAC address table databa
|
|||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname",
|
"RemoteHostname_str": "remotehostname",
|
||||||
"VlanId_u32": 0
|
"VlanId_u32": 0
|
||||||
@ -5232,8 +5232,8 @@ Get the MAC Address Table Database. Use this to get the MAC address table databa
|
|||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname",
|
"RemoteHostname_str": "remotehostname",
|
||||||
"VlanId_u32": 0
|
"VlanId_u32": 0
|
||||||
@ -5242,8 +5242,8 @@ Get the MAC Address Table Database. Use this to get the MAC address table databa
|
|||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname",
|
"RemoteHostname_str": "remotehostname",
|
||||||
"VlanId_u32": 0
|
"VlanId_u32": 0
|
||||||
@ -5337,8 +5337,8 @@ Get the IP Address Table Database. Use this to get the IP address table database
|
|||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"DhcpAllocated_bool": false,
|
"DhcpAllocated_bool": false,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname"
|
"RemoteHostname_str": "remotehostname"
|
||||||
},
|
},
|
||||||
@ -5347,8 +5347,8 @@ Get the IP Address Table Database. Use this to get the IP address table database
|
|||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"DhcpAllocated_bool": false,
|
"DhcpAllocated_bool": false,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname"
|
"RemoteHostname_str": "remotehostname"
|
||||||
},
|
},
|
||||||
@ -5357,8 +5357,8 @@ Get the IP Address Table Database. Use this to get the IP address table database
|
|||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"DhcpAllocated_bool": false,
|
"DhcpAllocated_bool": false,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname"
|
"RemoteHostname_str": "remotehostname"
|
||||||
}
|
}
|
||||||
@ -5778,8 +5778,8 @@ Get Virtual NAT Function Session Table of SecureNAT Function. Use this to get th
|
|||||||
"DestIp_ip": "192.168.0.1",
|
"DestIp_ip": "192.168.0.1",
|
||||||
"DestHost_str": "desthost",
|
"DestHost_str": "desthost",
|
||||||
"DestPort_u32": 0,
|
"DestPort_u32": 0,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"SendSize_u64": 0,
|
"SendSize_u64": 0,
|
||||||
"RecvSize_u64": 0,
|
"RecvSize_u64": 0,
|
||||||
"TcpStatus_u32": 0
|
"TcpStatus_u32": 0
|
||||||
@ -5793,8 +5793,8 @@ Get Virtual NAT Function Session Table of SecureNAT Function. Use this to get th
|
|||||||
"DestIp_ip": "192.168.0.1",
|
"DestIp_ip": "192.168.0.1",
|
||||||
"DestHost_str": "desthost",
|
"DestHost_str": "desthost",
|
||||||
"DestPort_u32": 0,
|
"DestPort_u32": 0,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"SendSize_u64": 0,
|
"SendSize_u64": 0,
|
||||||
"RecvSize_u64": 0,
|
"RecvSize_u64": 0,
|
||||||
"TcpStatus_u32": 0
|
"TcpStatus_u32": 0
|
||||||
@ -5808,8 +5808,8 @@ Get Virtual NAT Function Session Table of SecureNAT Function. Use this to get th
|
|||||||
"DestIp_ip": "192.168.0.1",
|
"DestIp_ip": "192.168.0.1",
|
||||||
"DestHost_str": "desthost",
|
"DestHost_str": "desthost",
|
||||||
"DestPort_u32": 0,
|
"DestPort_u32": 0,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"SendSize_u64": 0,
|
"SendSize_u64": 0,
|
||||||
"RecvSize_u64": 0,
|
"RecvSize_u64": 0,
|
||||||
"TcpStatus_u32": 0
|
"TcpStatus_u32": 0
|
||||||
@ -5867,8 +5867,8 @@ Get Virtual DHCP Server Function Lease Table of SecureNAT Function. Use this to
|
|||||||
"DhcpTable": [
|
"DhcpTable": [
|
||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"LeasedTime_dt": "2020-08-01T12:24:36.123",
|
"LeasedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"Mask_u32": 0,
|
"Mask_u32": 0,
|
||||||
@ -5876,8 +5876,8 @@ Get Virtual DHCP Server Function Lease Table of SecureNAT Function. Use this to
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"LeasedTime_dt": "2020-08-01T12:24:36.123",
|
"LeasedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"Mask_u32": 0,
|
"Mask_u32": 0,
|
||||||
@ -5885,8 +5885,8 @@ Get Virtual DHCP Server Function Lease Table of SecureNAT Function. Use this to
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"LeasedTime_dt": "2020-08-01T12:24:36.123",
|
"LeasedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"Mask_u32": 0,
|
"Mask_u32": 0,
|
||||||
@ -7642,19 +7642,19 @@ Get List of Log Files. Use this to display a list of log files outputted by the
|
|||||||
"ServerName_str": "servername",
|
"ServerName_str": "servername",
|
||||||
"FilePath_str": "filepath",
|
"FilePath_str": "filepath",
|
||||||
"FileSize_u32": 0,
|
"FileSize_u32": 0,
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123"
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ServerName_str": "servername",
|
"ServerName_str": "servername",
|
||||||
"FilePath_str": "filepath",
|
"FilePath_str": "filepath",
|
||||||
"FileSize_u32": 0,
|
"FileSize_u32": 0,
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123"
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ServerName_str": "servername",
|
"ServerName_str": "servername",
|
||||||
"FilePath_str": "filepath",
|
"FilePath_str": "filepath",
|
||||||
"FileSize_u32": 0,
|
"FileSize_u32": 0,
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123"
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -8642,8 +8642,8 @@ Name | Type | Description
|
|||||||
`IsConnected_bool` | `boolean` | Whether connection to VPN Azure Cloud Server is established
|
`IsConnected_bool` | `boolean` | Whether connection to VPN Azure Cloud Server is established
|
||||||
|
|
||||||
***
|
***
|
||||||
<a id="getddnsinternetsettng"></a>
|
<a id="getddnsinternetsetting"></a>
|
||||||
## "GetDDnsInternetSettng" RPC API - Get the Proxy Settings for Connecting to the DDNS server
|
## "GetDDnsInternetSetting" RPC API - Get the Proxy Settings for Connecting to the DDNS server
|
||||||
### Description
|
### Description
|
||||||
Get the Proxy Settings for Connecting to the DDNS server.
|
Get the Proxy Settings for Connecting to the DDNS server.
|
||||||
|
|
||||||
@ -8652,7 +8652,7 @@ Get the Proxy Settings for Connecting to the DDNS server.
|
|||||||
{
|
{
|
||||||
"jsonrpc": "2.0",
|
"jsonrpc": "2.0",
|
||||||
"id": "rpc_call_id",
|
"id": "rpc_call_id",
|
||||||
"method": "GetDDnsInternetSettng",
|
"method": "GetDDnsInternetSetting",
|
||||||
"params": {}
|
"params": {}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@ -8683,8 +8683,8 @@ Name | Type | Description
|
|||||||
`ProxyPassword_str` | `string` (ASCII) | Proxy server password
|
`ProxyPassword_str` | `string` (ASCII) | Proxy server password
|
||||||
|
|
||||||
***
|
***
|
||||||
<a id="setddnsinternetsettng"></a>
|
<a id="setddnsinternetsetting"></a>
|
||||||
## "SetDDnsInternetSettng" RPC API - Set the Proxy Settings for Connecting to the DDNS server
|
## "SetDDnsInternetSetting" RPC API - Set the Proxy Settings for Connecting to the DDNS server
|
||||||
### Description
|
### Description
|
||||||
Set the Proxy Settings for Connecting to the DDNS server.
|
Set the Proxy Settings for Connecting to the DDNS server.
|
||||||
|
|
||||||
@ -8693,7 +8693,7 @@ Set the Proxy Settings for Connecting to the DDNS server.
|
|||||||
{
|
{
|
||||||
"jsonrpc": "2.0",
|
"jsonrpc": "2.0",
|
||||||
"id": "rpc_call_id",
|
"id": "rpc_call_id",
|
||||||
"method": "SetDDnsInternetSettng",
|
"method": "SetDDnsInternetSetting",
|
||||||
"params": {
|
"params": {
|
||||||
"ProxyType_u32": 0,
|
"ProxyType_u32": 0,
|
||||||
"ProxyHostName_str": "proxyhostname",
|
"ProxyHostName_str": "proxyhostname",
|
||||||
@ -8730,6 +8730,6 @@ Name | Type | Description
|
|||||||
`ProxyPassword_str` | `string` (ASCII) | Proxy server password
|
`ProxyPassword_str` | `string` (ASCII) | Proxy server password
|
||||||
|
|
||||||
***
|
***
|
||||||
Automatically generated at 2019-07-10 14:36:11 by vpnserver-jsonrpc-codegen.
|
Automatically generated at 2023-05-10 14:43:37 by vpnserver-jsonrpc-codegen.
|
||||||
Copyright (c) 2014-2019 [SoftEther VPN Project](https://www.softether.org/) under the Apache License 2.0.
|
Copyright (c) 2014-2023 [SoftEther VPN Project](https://www.softether.org/) under the Apache License 2.0.
|
||||||
|
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
//
|
//
|
||||||
// JsonRpc.cs - JSON-RPC Client Utility Functions
|
// JsonRpc.cs - JSON-RPC Client Utility Functions
|
||||||
//
|
//
|
||||||
// Automatically generated at 2019-07-10 14:36:11 by vpnserver-jsonrpc-codegen
|
// Automatically generated at 2023-05-10 14:43:37 by vpnserver-jsonrpc-codegen
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License 2.0
|
// Licensed under the Apache License 2.0
|
||||||
// Copyright (c) 2014-2019 SoftEther VPN Project
|
// Copyright (c) 2014-2023 SoftEther VPN Project
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
//
|
//
|
||||||
// VPNServerRpc.cs - SoftEther VPN Server's JSON-RPC Stubs
|
// VPNServerRpc.cs - SoftEther VPN Server's JSON-RPC Stubs
|
||||||
//
|
//
|
||||||
// Automatically generated at 2019-07-10 14:36:11 by vpnserver-jsonrpc-codegen
|
// Automatically generated at 2023-05-10 14:43:37 by vpnserver-jsonrpc-codegen
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License 2.0
|
// Licensed under the Apache License 2.0
|
||||||
// Copyright (c) 2014-2019 SoftEther VPN Project
|
// Copyright (c) 2014-2023 SoftEther VPN Project
|
||||||
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using SoftEther.JsonRpc;
|
using SoftEther.JsonRpc;
|
||||||
@ -1357,22 +1357,22 @@ namespace SoftEther.VPNServerRpc
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get the Proxy Settings for Connecting to the DDNS server (Async mode).
|
/// Get the Proxy Settings for Connecting to the DDNS server (Async mode).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public async Task<VpnInternetSetting> GetDDnsInternetSettngAsync() => await CallAsync<VpnInternetSetting>("GetDDnsInternetSettng", new VpnInternetSetting());
|
public async Task<VpnInternetSetting> GetDDnsInternetSettingAsync() => await CallAsync<VpnInternetSetting>("GetDDnsInternetSetting", new VpnInternetSetting());
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get the Proxy Settings for Connecting to the DDNS server (Async mode).
|
/// Get the Proxy Settings for Connecting to the DDNS server (Async mode).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public VpnInternetSetting GetDDnsInternetSettng() => GetDDnsInternetSettngAsync().Result;
|
public VpnInternetSetting GetDDnsInternetSetting() => GetDDnsInternetSettingAsync().Result;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Set the Proxy Settings for Connecting to the DDNS server (Async mode).
|
/// Set the Proxy Settings for Connecting to the DDNS server (Async mode).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public async Task<VpnInternetSetting> SetDDnsInternetSettngAsync(VpnInternetSetting input_param) => await CallAsync<VpnInternetSetting>("SetDDnsInternetSettng", input_param);
|
public async Task<VpnInternetSetting> SetDDnsInternetSettingAsync(VpnInternetSetting input_param) => await CallAsync<VpnInternetSetting>("SetDDnsInternetSetting", input_param);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Set the Proxy Settings for Connecting to the DDNS server (Sync mode).
|
/// Set the Proxy Settings for Connecting to the DDNS server (Sync mode).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public VpnInternetSetting SetDDnsInternetSettng(VpnInternetSetting input_param) => SetDDnsInternetSettngAsync(input_param).Result;
|
public VpnInternetSetting SetDDnsInternetSetting(VpnInternetSetting input_param) => SetDDnsInternetSettingAsync(input_param).Result;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Set the VPN Gate Server Configuration (Async mode). This API is valid for Win32 binary distribution of the Stable Edition of SoftEther VPN Server.
|
/// Set the VPN Gate Server Configuration (Async mode). This API is valid for Win32 binary distribution of the Stable Edition of SoftEther VPN Server.
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
//
|
//
|
||||||
// VPNServerRpcTypes.cs - Data Type Definition for SoftEther VPN Server JSON-RPC Stubs
|
// VPNServerRpcTypes.cs - Data Type Definition for SoftEther VPN Server JSON-RPC Stubs
|
||||||
//
|
//
|
||||||
// Automatically generated at 2019-07-10 14:36:11 by vpnserver-jsonrpc-codegen
|
// Automatically generated at 2023-05-10 14:43:37 by vpnserver-jsonrpc-codegen
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License 2.0
|
// Licensed under the Apache License 2.0
|
||||||
// Copyright (c) 2014-2019 SoftEther VPN Project
|
// Copyright (c) 2014-2023 SoftEther VPN Project
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
//
|
//
|
||||||
// Program.cs - The Main() entry point
|
// Program.cs - The Main() entry point
|
||||||
//
|
//
|
||||||
// Automatically generated at 2019-07-10 14:36:11 by vpnserver-jsonrpc-codegen
|
// Automatically generated at 2023-05-10 14:43:37 by vpnserver-jsonrpc-codegen
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License 2.0
|
// Licensed under the Apache License 2.0
|
||||||
// Copyright (c) 2014-2019 SoftEther VPN Project
|
// Copyright (c) 2014-2023 SoftEther VPN Project
|
||||||
|
|
||||||
class Program
|
class Program
|
||||||
{
|
{
|
||||||
|
@ -5,10 +5,10 @@
|
|||||||
// This sample code shows how to call all available RPC functions.
|
// This sample code shows how to call all available RPC functions.
|
||||||
// You can copy and paste test code to write your own C# codes.
|
// You can copy and paste test code to write your own C# codes.
|
||||||
//
|
//
|
||||||
// Automatically generated at 2019-07-10 14:36:11 by vpnserver-jsonrpc-codegen
|
// Automatically generated at 2023-05-10 14:43:37 by vpnserver-jsonrpc-codegen
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License 2.0
|
// Licensed under the Apache License 2.0
|
||||||
// Copyright (c) 2014-2019 SoftEther VPN Project
|
// Copyright (c) 2014-2023 SoftEther VPN Project
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using SoftEther.VPNServerRpc;
|
using SoftEther.VPNServerRpc;
|
||||||
@ -255,8 +255,8 @@ class VPNRPCTest
|
|||||||
Test_GetOpenVpnSstpConfig();
|
Test_GetOpenVpnSstpConfig();
|
||||||
|
|
||||||
Test_GetDDnsClientStatus();
|
Test_GetDDnsClientStatus();
|
||||||
Test_SetDDnsInternetSettng();
|
Test_SetDDnsInternetSetting();
|
||||||
Test_GetDDnsInternetSettng();
|
Test_GetDDnsInternetSetting();
|
||||||
|
|
||||||
Test_ChangeDDnsClientHostname();
|
Test_ChangeDDnsClientHostname();
|
||||||
Test_RegenerateServerCert();
|
Test_RegenerateServerCert();
|
||||||
@ -3641,27 +3641,27 @@ class VPNRPCTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// API test for 'GetDDnsInternetSettng', Get DDNS proxy configuration
|
/// API test for 'GetDDnsInternetSetting', Get DDNS proxy configuration
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Test_GetDDnsInternetSettng()
|
public void Test_GetDDnsInternetSetting()
|
||||||
{
|
{
|
||||||
Console.WriteLine("Begin: Test_GetDDnsInternetSettng");
|
Console.WriteLine("Begin: Test_GetDDnsInternetSetting");
|
||||||
|
|
||||||
VpnInternetSetting out_internet_setting = api.GetDDnsInternetSettng();
|
VpnInternetSetting out_internet_setting = api.GetDDnsInternetSetting();
|
||||||
|
|
||||||
print_object(out_internet_setting);
|
print_object(out_internet_setting);
|
||||||
|
|
||||||
Console.WriteLine("End: Test_GetDDnsInternetSettng");
|
Console.WriteLine("End: Test_GetDDnsInternetSetting");
|
||||||
Console.WriteLine("-----");
|
Console.WriteLine("-----");
|
||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// API test for 'SetDDnsInternetSettng', Set DDNS proxy configuration
|
/// API test for 'SetDDnsInternetSetting', Set DDNS proxy configuration
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Test_SetDDnsInternetSettng()
|
public void Test_SetDDnsInternetSetting()
|
||||||
{
|
{
|
||||||
Console.WriteLine("Begin: Test_SetDDnsInternetSettng");
|
Console.WriteLine("Begin: Test_SetDDnsInternetSetting");
|
||||||
|
|
||||||
VpnInternetSetting in_internet_setting = new VpnInternetSetting()
|
VpnInternetSetting in_internet_setting = new VpnInternetSetting()
|
||||||
{
|
{
|
||||||
@ -3671,11 +3671,11 @@ class VPNRPCTest
|
|||||||
ProxyUsername_str = "neko",
|
ProxyUsername_str = "neko",
|
||||||
ProxyPassword_str = "dog",
|
ProxyPassword_str = "dog",
|
||||||
};
|
};
|
||||||
VpnInternetSetting out_internet_setting = api.SetDDnsInternetSettng(in_internet_setting);
|
VpnInternetSetting out_internet_setting = api.SetDDnsInternetSetting(in_internet_setting);
|
||||||
|
|
||||||
print_object(out_internet_setting);
|
print_object(out_internet_setting);
|
||||||
|
|
||||||
Console.WriteLine("End: Test_SetDDnsInternetSettng");
|
Console.WriteLine("End: Test_SetDDnsInternetSetting");
|
||||||
Console.WriteLine("-----");
|
Console.WriteLine("-----");
|
||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
}
|
}
|
||||||
|
@ -560,10 +560,10 @@ function Test_All() {
|
|||||||
return [4 /*yield*/, Test_GetDDnsClientStatus()];
|
return [4 /*yield*/, Test_GetDDnsClientStatus()];
|
||||||
case 157:
|
case 157:
|
||||||
_x.sent();
|
_x.sent();
|
||||||
return [4 /*yield*/, Test_SetDDnsInternetSettng()];
|
return [4 /*yield*/, Test_SetDDnsInternetSetting()];
|
||||||
case 158:
|
case 158:
|
||||||
_x.sent();
|
_x.sent();
|
||||||
return [4 /*yield*/, Test_GetDDnsInternetSettng()];
|
return [4 /*yield*/, Test_GetDDnsInternetSetting()];
|
||||||
case 159:
|
case 159:
|
||||||
_x.sent();
|
_x.sent();
|
||||||
return [4 /*yield*/, Test_ChangeDDnsClientHostname()];
|
return [4 /*yield*/, Test_ChangeDDnsClientHostname()];
|
||||||
@ -4047,19 +4047,19 @@ function Test_SetAzureStatus() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
/** API test for 'GetDDnsInternetSettng', Get DDNS proxy configuration */
|
/** API test for 'GetDDnsInternetSetting', Get DDNS proxy configuration */
|
||||||
function Test_GetDDnsInternetSettng() {
|
function Test_GetDDnsInternetSetting() {
|
||||||
return __awaiter(this, void 0, void 0, function () {
|
return __awaiter(this, void 0, void 0, function () {
|
||||||
var out_internet_setting;
|
var out_internet_setting;
|
||||||
return __generator(this, function (_a) {
|
return __generator(this, function (_a) {
|
||||||
switch (_a.label) {
|
switch (_a.label) {
|
||||||
case 0:
|
case 0:
|
||||||
console.log("Begin: Test_GetDDnsInternetSettng");
|
console.log("Begin: Test_GetDDnsInternetSetting");
|
||||||
return [4 /*yield*/, api.GetDDnsInternetSettng()];
|
return [4 /*yield*/, api.GetDDnsInternetSetting()];
|
||||||
case 1:
|
case 1:
|
||||||
out_internet_setting = _a.sent();
|
out_internet_setting = _a.sent();
|
||||||
console.log(out_internet_setting);
|
console.log(out_internet_setting);
|
||||||
console.log("End: Test_GetDDnsInternetSettng");
|
console.log("End: Test_GetDDnsInternetSetting");
|
||||||
console.log("-----");
|
console.log("-----");
|
||||||
console.log();
|
console.log();
|
||||||
return [2 /*return*/];
|
return [2 /*return*/];
|
||||||
@ -4067,14 +4067,14 @@ function Test_GetDDnsInternetSettng() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
/** API test for 'SetDDnsInternetSettng', Set DDNS proxy configuration */
|
/** API test for 'SetDDnsInternetSetting', Set DDNS proxy configuration */
|
||||||
function Test_SetDDnsInternetSettng() {
|
function Test_SetDDnsInternetSetting() {
|
||||||
return __awaiter(this, void 0, void 0, function () {
|
return __awaiter(this, void 0, void 0, function () {
|
||||||
var in_internet_setting, out_internet_setting;
|
var in_internet_setting, out_internet_setting;
|
||||||
return __generator(this, function (_a) {
|
return __generator(this, function (_a) {
|
||||||
switch (_a.label) {
|
switch (_a.label) {
|
||||||
case 0:
|
case 0:
|
||||||
console.log("Begin: Test_SetDDnsInternetSettng");
|
console.log("Begin: Test_SetDDnsInternetSetting");
|
||||||
in_internet_setting = new VPN.VpnInternetSetting({
|
in_internet_setting = new VPN.VpnInternetSetting({
|
||||||
ProxyType_u32: VPN.VpnRpcProxyType.Direct,
|
ProxyType_u32: VPN.VpnRpcProxyType.Direct,
|
||||||
ProxyHostName_str: "1.2.3.4",
|
ProxyHostName_str: "1.2.3.4",
|
||||||
@ -4082,11 +4082,11 @@ function Test_SetDDnsInternetSettng() {
|
|||||||
ProxyUsername_str: "neko",
|
ProxyUsername_str: "neko",
|
||||||
ProxyPassword_str: "dog"
|
ProxyPassword_str: "dog"
|
||||||
});
|
});
|
||||||
return [4 /*yield*/, api.SetDDnsInternetSettng(in_internet_setting)];
|
return [4 /*yield*/, api.SetDDnsInternetSetting(in_internet_setting)];
|
||||||
case 1:
|
case 1:
|
||||||
out_internet_setting = _a.sent();
|
out_internet_setting = _a.sent();
|
||||||
console.log(out_internet_setting);
|
console.log(out_internet_setting);
|
||||||
console.log("End: Test_SetDDnsInternetSettng");
|
console.log("End: Test_SetDDnsInternetSetting");
|
||||||
console.log("-----");
|
console.log("-----");
|
||||||
console.log();
|
console.log();
|
||||||
return [2 /*return*/];
|
return [2 /*return*/];
|
||||||
|
@ -278,9 +278,9 @@ export declare class VpnServerRpc {
|
|||||||
/** Enable / Disable VPN Azure Function. Enable or disable the VPN Azure function. VPN Azure makes it easier to establish a VPN Session from your home PC to your office PC. While a VPN connection is established, you can access to any other servers on the private network of your company. You don't need a global IP address on the office PC (VPN Server). It can work behind firewalls or NATs. No network administrator's configuration required. You can use the built-in SSTP-VPN Client of Windows in your home PC. VPN Azure is a cloud VPN service operated by SoftEther Corporation. VPN Azure is free of charge and available to anyone. Visit http://www.vpnazure.net/ to see details and how-to-use instructions. The VPN Azure hostname is same to the hostname of the Dynamic DNS setting, but altering the domain suffix to "vpnazure.net". To change the hostname use the ChangeDDnsClientHostname API. To call this API, you must have VPN Server administrator privileges. This API cannot be invoked on VPN Bridge. You cannot execute this API for Virtual Hubs of VPN Servers operating as a cluster. */
|
/** Enable / Disable VPN Azure Function. Enable or disable the VPN Azure function. VPN Azure makes it easier to establish a VPN Session from your home PC to your office PC. While a VPN connection is established, you can access to any other servers on the private network of your company. You don't need a global IP address on the office PC (VPN Server). It can work behind firewalls or NATs. No network administrator's configuration required. You can use the built-in SSTP-VPN Client of Windows in your home PC. VPN Azure is a cloud VPN service operated by SoftEther Corporation. VPN Azure is free of charge and available to anyone. Visit http://www.vpnazure.net/ to see details and how-to-use instructions. The VPN Azure hostname is same to the hostname of the Dynamic DNS setting, but altering the domain suffix to "vpnazure.net". To change the hostname use the ChangeDDnsClientHostname API. To call this API, you must have VPN Server administrator privileges. This API cannot be invoked on VPN Bridge. You cannot execute this API for Virtual Hubs of VPN Servers operating as a cluster. */
|
||||||
SetAzureStatus: (in_param: VpnRpcAzureStatus) => Promise<VpnRpcAzureStatus>;
|
SetAzureStatus: (in_param: VpnRpcAzureStatus) => Promise<VpnRpcAzureStatus>;
|
||||||
/** Get the Proxy Settings for Connecting to the DDNS server. */
|
/** Get the Proxy Settings for Connecting to the DDNS server. */
|
||||||
GetDDnsInternetSettng: () => Promise<VpnInternetSetting>;
|
GetDDnsInternetSetting: () => Promise<VpnInternetSetting>;
|
||||||
/** Set the Proxy Settings for Connecting to the DDNS server. */
|
/** Set the Proxy Settings for Connecting to the DDNS server. */
|
||||||
SetDDnsInternetSettng: (in_param: VpnInternetSetting) => Promise<VpnInternetSetting>;
|
SetDDnsInternetSetting: (in_param: VpnInternetSetting) => Promise<VpnInternetSetting>;
|
||||||
/** Set the VPN Gate Server Configuration. This API is valid for Win32 binary distribution of the Stable Edition of SoftEther VPN Server. */
|
/** Set the VPN Gate Server Configuration. This API is valid for Win32 binary distribution of the Stable Edition of SoftEther VPN Server. */
|
||||||
SetVgsConfig: (in_param: VpnVgsConfig) => Promise<VpnVgsConfig>;
|
SetVgsConfig: (in_param: VpnVgsConfig) => Promise<VpnVgsConfig>;
|
||||||
/** Get the VPN Gate Server Configuration. This API is valid for Win32 binary distribution of the Stable Edition of SoftEther VPN Server. */
|
/** Get the VPN Gate Server Configuration. This API is valid for Win32 binary distribution of the Stable Edition of SoftEther VPN Server. */
|
||||||
|
@ -599,12 +599,12 @@ var VpnServerRpc = /** @class */ (function () {
|
|||||||
return _this.CallAsync("SetAzureStatus", in_param);
|
return _this.CallAsync("SetAzureStatus", in_param);
|
||||||
};
|
};
|
||||||
/** Get the Proxy Settings for Connecting to the DDNS server. */
|
/** Get the Proxy Settings for Connecting to the DDNS server. */
|
||||||
this.GetDDnsInternetSettng = function () {
|
this.GetDDnsInternetSetting = function () {
|
||||||
return _this.CallAsync("GetDDnsInternetSettng", new VpnInternetSetting());
|
return _this.CallAsync("GetDDnsInternetSetting", new VpnInternetSetting());
|
||||||
};
|
};
|
||||||
/** Set the Proxy Settings for Connecting to the DDNS server. */
|
/** Set the Proxy Settings for Connecting to the DDNS server. */
|
||||||
this.SetDDnsInternetSettng = function (in_param) {
|
this.SetDDnsInternetSetting = function (in_param) {
|
||||||
return _this.CallAsync("SetDDnsInternetSettng", in_param);
|
return _this.CallAsync("SetDDnsInternetSetting", in_param);
|
||||||
};
|
};
|
||||||
/** Set the VPN Gate Server Configuration. This API is valid for Win32 binary distribution of the Stable Edition of SoftEther VPN Server. */
|
/** Set the VPN Gate Server Configuration. This API is valid for Win32 binary distribution of the Stable Edition of SoftEther VPN Server. */
|
||||||
this.SetVgsConfig = function (in_param) {
|
this.SetVgsConfig = function (in_param) {
|
||||||
|
@ -2,13 +2,13 @@
|
|||||||
// Runs on both web browsers and Node.js
|
// Runs on both web browsers and Node.js
|
||||||
//
|
//
|
||||||
// sample.ts
|
// sample.ts
|
||||||
// Automatically generated at 2019-07-10 14:36:11 by vpnserver-jsonrpc-codegen
|
// Automatically generated at 2023-05-10 14:43:37 by vpnserver-jsonrpc-codegen
|
||||||
//
|
//
|
||||||
// This sample code shows how to call all available RPC functions.
|
// This sample code shows how to call all available RPC functions.
|
||||||
// You can copy and paste test code to write your own web browser TypeScript / JavaScript codes.
|
// You can copy and paste test code to write your own web browser TypeScript / JavaScript codes.
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License 2.0
|
// Licensed under the Apache License 2.0
|
||||||
// Copyright (c) 2014-2019 SoftEther VPN Project
|
// Copyright (c) 2014-2023 SoftEther VPN Project
|
||||||
|
|
||||||
// On the web browser uncomment below imports as necessary to support old browsers.
|
// On the web browser uncomment below imports as necessary to support old browsers.
|
||||||
// import "core-js/es6/promise";
|
// import "core-js/es6/promise";
|
||||||
@ -216,8 +216,8 @@ async function Test_All(): Promise<void>
|
|||||||
await Test_SetOpenVpnSstpConfig();
|
await Test_SetOpenVpnSstpConfig();
|
||||||
await Test_GetOpenVpnSstpConfig();
|
await Test_GetOpenVpnSstpConfig();
|
||||||
await Test_GetDDnsClientStatus();
|
await Test_GetDDnsClientStatus();
|
||||||
await Test_SetDDnsInternetSettng();
|
await Test_SetDDnsInternetSetting();
|
||||||
await Test_GetDDnsInternetSettng();
|
await Test_GetDDnsInternetSetting();
|
||||||
await Test_ChangeDDnsClientHostname();
|
await Test_ChangeDDnsClientHostname();
|
||||||
await Test_RegenerateServerCert();
|
await Test_RegenerateServerCert();
|
||||||
await Test_MakeOpenVpnConfigFile();
|
await Test_MakeOpenVpnConfigFile();
|
||||||
@ -2624,21 +2624,21 @@ async function Test_SetAzureStatus(): Promise<void>
|
|||||||
console.log();
|
console.log();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** API test for 'GetDDnsInternetSettng', Get DDNS proxy configuration */
|
/** API test for 'GetDDnsInternetSetting', Get DDNS proxy configuration */
|
||||||
async function Test_GetDDnsInternetSettng(): Promise<void>
|
async function Test_GetDDnsInternetSetting(): Promise<void>
|
||||||
{
|
{
|
||||||
console.log("Begin: Test_GetDDnsInternetSettng");
|
console.log("Begin: Test_GetDDnsInternetSetting");
|
||||||
let out_internet_setting: VPN.VpnInternetSetting = await api.GetDDnsInternetSettng();
|
let out_internet_setting: VPN.VpnInternetSetting = await api.GetDDnsInternetSetting();
|
||||||
console.log(out_internet_setting);
|
console.log(out_internet_setting);
|
||||||
console.log("End: Test_GetDDnsInternetSettng");
|
console.log("End: Test_GetDDnsInternetSetting");
|
||||||
console.log("-----");
|
console.log("-----");
|
||||||
console.log();
|
console.log();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** API test for 'SetDDnsInternetSettng', Set DDNS proxy configuration */
|
/** API test for 'SetDDnsInternetSetting', Set DDNS proxy configuration */
|
||||||
async function Test_SetDDnsInternetSettng(): Promise<void>
|
async function Test_SetDDnsInternetSetting(): Promise<void>
|
||||||
{
|
{
|
||||||
console.log("Begin: Test_SetDDnsInternetSettng");
|
console.log("Begin: Test_SetDDnsInternetSetting");
|
||||||
let in_internet_setting: VPN.VpnInternetSetting = new VPN.VpnInternetSetting(
|
let in_internet_setting: VPN.VpnInternetSetting = new VPN.VpnInternetSetting(
|
||||||
{
|
{
|
||||||
ProxyType_u32: VPN.VpnRpcProxyType.Direct,
|
ProxyType_u32: VPN.VpnRpcProxyType.Direct,
|
||||||
@ -2647,9 +2647,9 @@ async function Test_SetDDnsInternetSettng(): Promise<void>
|
|||||||
ProxyUsername_str: "neko",
|
ProxyUsername_str: "neko",
|
||||||
ProxyPassword_str: "dog",
|
ProxyPassword_str: "dog",
|
||||||
});
|
});
|
||||||
let out_internet_setting: VPN.VpnInternetSetting = await api.SetDDnsInternetSettng(in_internet_setting);
|
let out_internet_setting: VPN.VpnInternetSetting = await api.SetDDnsInternetSetting(in_internet_setting);
|
||||||
console.log(out_internet_setting);
|
console.log(out_internet_setting);
|
||||||
console.log("End: Test_SetDDnsInternetSettng");
|
console.log("End: Test_SetDDnsInternetSetting");
|
||||||
console.log("-----");
|
console.log("-----");
|
||||||
console.log();
|
console.log();
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
// SoftEther VPN Server JSON-RPC Stub code for TypeScript
|
// SoftEther VPN Server JSON-RPC Stub code for TypeScript
|
||||||
//
|
//
|
||||||
// vpnrpc.ts
|
// vpnrpc.ts
|
||||||
// Automatically generated at 2019-07-10 14:36:11 by vpnserver-jsonrpc-codegen
|
// Automatically generated at 2023-05-10 14:43:37 by vpnserver-jsonrpc-codegen
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License 2.0
|
// Licensed under the Apache License 2.0
|
||||||
// Copyright (c) 2014-2019 SoftEther VPN Project
|
// Copyright (c) 2014-2023 SoftEther VPN Project
|
||||||
|
|
||||||
|
|
||||||
// Trivial utility codes
|
// Trivial utility codes
|
||||||
@ -856,15 +856,15 @@ export class VpnServerRpc
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Get the Proxy Settings for Connecting to the DDNS server. */
|
/** Get the Proxy Settings for Connecting to the DDNS server. */
|
||||||
public GetDDnsInternetSettng = (): Promise<VpnInternetSetting> =>
|
public GetDDnsInternetSetting = (): Promise<VpnInternetSetting> =>
|
||||||
{
|
{
|
||||||
return this.CallAsync<VpnInternetSetting>("GetDDnsInternetSettng", new VpnInternetSetting());
|
return this.CallAsync<VpnInternetSetting>("GetDDnsInternetSetting", new VpnInternetSetting());
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Set the Proxy Settings for Connecting to the DDNS server. */
|
/** Set the Proxy Settings for Connecting to the DDNS server. */
|
||||||
public SetDDnsInternetSettng = (in_param: VpnInternetSetting): Promise<VpnInternetSetting> =>
|
public SetDDnsInternetSetting = (in_param: VpnInternetSetting): Promise<VpnInternetSetting> =>
|
||||||
{
|
{
|
||||||
return this.CallAsync<VpnInternetSetting>("SetDDnsInternetSettng", in_param);
|
return this.CallAsync<VpnInternetSetting>("SetDDnsInternetSetting", in_param);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Set the VPN Gate Server Configuration. This API is valid for Win32 binary distribution of the Stable Edition of SoftEther VPN Server. */
|
/** Set the VPN Gate Server Configuration. This API is valid for Win32 binary distribution of the Stable Edition of SoftEther VPN Server. */
|
||||||
|
@ -2,13 +2,13 @@
|
|||||||
// Runs on both web browsers and Node.js
|
// Runs on both web browsers and Node.js
|
||||||
//
|
//
|
||||||
// sample.ts
|
// sample.ts
|
||||||
// Automatically generated at 2019-07-10 14:36:11 by vpnserver-jsonrpc-codegen
|
// Automatically generated at 2023-05-10 14:43:37 by vpnserver-jsonrpc-codegen
|
||||||
//
|
//
|
||||||
// This sample code shows how to call all available RPC functions.
|
// This sample code shows how to call all available RPC functions.
|
||||||
// You can copy and paste test code to write your own web browser TypeScript / JavaScript codes.
|
// You can copy and paste test code to write your own web browser TypeScript / JavaScript codes.
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License 2.0
|
// Licensed under the Apache License 2.0
|
||||||
// Copyright (c) 2014-2019 SoftEther VPN Project
|
// Copyright (c) 2014-2023 SoftEther VPN Project
|
||||||
|
|
||||||
// On the web browser uncomment below imports as necessary to support old browsers.
|
// On the web browser uncomment below imports as necessary to support old browsers.
|
||||||
// import "core-js/es6/promise";
|
// import "core-js/es6/promise";
|
||||||
@ -216,8 +216,8 @@ async function Test_All(): Promise<void>
|
|||||||
await Test_SetOpenVpnSstpConfig();
|
await Test_SetOpenVpnSstpConfig();
|
||||||
await Test_GetOpenVpnSstpConfig();
|
await Test_GetOpenVpnSstpConfig();
|
||||||
await Test_GetDDnsClientStatus();
|
await Test_GetDDnsClientStatus();
|
||||||
await Test_SetDDnsInternetSettng();
|
await Test_SetDDnsInternetSetting();
|
||||||
await Test_GetDDnsInternetSettng();
|
await Test_GetDDnsInternetSetting();
|
||||||
await Test_ChangeDDnsClientHostname();
|
await Test_ChangeDDnsClientHostname();
|
||||||
await Test_RegenerateServerCert();
|
await Test_RegenerateServerCert();
|
||||||
await Test_MakeOpenVpnConfigFile();
|
await Test_MakeOpenVpnConfigFile();
|
||||||
@ -2624,21 +2624,21 @@ async function Test_SetAzureStatus(): Promise<void>
|
|||||||
console.log();
|
console.log();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** API test for 'GetDDnsInternetSettng', Get DDNS proxy configuration */
|
/** API test for 'GetDDnsInternetSetting', Get DDNS proxy configuration */
|
||||||
async function Test_GetDDnsInternetSettng(): Promise<void>
|
async function Test_GetDDnsInternetSetting(): Promise<void>
|
||||||
{
|
{
|
||||||
console.log("Begin: Test_GetDDnsInternetSettng");
|
console.log("Begin: Test_GetDDnsInternetSetting");
|
||||||
let out_internet_setting: VPN.VpnInternetSetting = await api.GetDDnsInternetSettng();
|
let out_internet_setting: VPN.VpnInternetSetting = await api.GetDDnsInternetSetting();
|
||||||
console.log(out_internet_setting);
|
console.log(out_internet_setting);
|
||||||
console.log("End: Test_GetDDnsInternetSettng");
|
console.log("End: Test_GetDDnsInternetSetting");
|
||||||
console.log("-----");
|
console.log("-----");
|
||||||
console.log();
|
console.log();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** API test for 'SetDDnsInternetSettng', Set DDNS proxy configuration */
|
/** API test for 'SetDDnsInternetSetting', Set DDNS proxy configuration */
|
||||||
async function Test_SetDDnsInternetSettng(): Promise<void>
|
async function Test_SetDDnsInternetSetting(): Promise<void>
|
||||||
{
|
{
|
||||||
console.log("Begin: Test_SetDDnsInternetSettng");
|
console.log("Begin: Test_SetDDnsInternetSetting");
|
||||||
let in_internet_setting: VPN.VpnInternetSetting = new VPN.VpnInternetSetting(
|
let in_internet_setting: VPN.VpnInternetSetting = new VPN.VpnInternetSetting(
|
||||||
{
|
{
|
||||||
ProxyType_u32: VPN.VpnRpcProxyType.Direct,
|
ProxyType_u32: VPN.VpnRpcProxyType.Direct,
|
||||||
@ -2647,9 +2647,9 @@ async function Test_SetDDnsInternetSettng(): Promise<void>
|
|||||||
ProxyUsername_str: "neko",
|
ProxyUsername_str: "neko",
|
||||||
ProxyPassword_str: "dog",
|
ProxyPassword_str: "dog",
|
||||||
});
|
});
|
||||||
let out_internet_setting: VPN.VpnInternetSetting = await api.SetDDnsInternetSettng(in_internet_setting);
|
let out_internet_setting: VPN.VpnInternetSetting = await api.SetDDnsInternetSetting(in_internet_setting);
|
||||||
console.log(out_internet_setting);
|
console.log(out_internet_setting);
|
||||||
console.log("End: Test_SetDDnsInternetSettng");
|
console.log("End: Test_SetDDnsInternetSetting");
|
||||||
console.log("-----");
|
console.log("-----");
|
||||||
console.log();
|
console.log();
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
// SoftEther VPN Server JSON-RPC Stub code for TypeScript
|
// SoftEther VPN Server JSON-RPC Stub code for TypeScript
|
||||||
//
|
//
|
||||||
// vpnrpc.ts
|
// vpnrpc.ts
|
||||||
// Automatically generated at 2019-07-10 14:36:11 by vpnserver-jsonrpc-codegen
|
// Automatically generated at 2023-05-10 14:43:37 by vpnserver-jsonrpc-codegen
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License 2.0
|
// Licensed under the Apache License 2.0
|
||||||
// Copyright (c) 2014-2019 SoftEther VPN Project
|
// Copyright (c) 2014-2023 SoftEther VPN Project
|
||||||
|
|
||||||
|
|
||||||
// Trivial utility codes
|
// Trivial utility codes
|
||||||
@ -856,15 +856,15 @@ export class VpnServerRpc
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Get the Proxy Settings for Connecting to the DDNS server. */
|
/** Get the Proxy Settings for Connecting to the DDNS server. */
|
||||||
public GetDDnsInternetSettng = (): Promise<VpnInternetSetting> =>
|
public GetDDnsInternetSetting = (): Promise<VpnInternetSetting> =>
|
||||||
{
|
{
|
||||||
return this.CallAsync<VpnInternetSetting>("GetDDnsInternetSettng", new VpnInternetSetting());
|
return this.CallAsync<VpnInternetSetting>("GetDDnsInternetSetting", new VpnInternetSetting());
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Set the Proxy Settings for Connecting to the DDNS server. */
|
/** Set the Proxy Settings for Connecting to the DDNS server. */
|
||||||
public SetDDnsInternetSettng = (in_param: VpnInternetSetting): Promise<VpnInternetSetting> =>
|
public SetDDnsInternetSetting = (in_param: VpnInternetSetting): Promise<VpnInternetSetting> =>
|
||||||
{
|
{
|
||||||
return this.CallAsync<VpnInternetSetting>("SetDDnsInternetSettng", in_param);
|
return this.CallAsync<VpnInternetSetting>("SetDDnsInternetSetting", in_param);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Set the VPN Gate Server Configuration. This API is valid for Win32 binary distribution of the Stable Edition of SoftEther VPN Server. */
|
/** Set the VPN Gate Server Configuration. This API is valid for Win32 binary distribution of the Stable Edition of SoftEther VPN Server. */
|
||||||
|
@ -1357,22 +1357,22 @@ namespace SoftEther.VPNServerRpc
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get the Proxy Settings for Connecting to the DDNS server (Async mode).
|
/// Get the Proxy Settings for Connecting to the DDNS server (Async mode).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public async Task<VpnInternetSetting> GetDDnsInternetSettngAsync() => await CallAsync<VpnInternetSetting>("GetDDnsInternetSettng", new VpnInternetSetting());
|
public async Task<VpnInternetSetting> GetDDnsInternetSettingAsync() => await CallAsync<VpnInternetSetting>("GetDDnsInternetSetting", new VpnInternetSetting());
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get the Proxy Settings for Connecting to the DDNS server (Async mode).
|
/// Get the Proxy Settings for Connecting to the DDNS server (Async mode).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public VpnInternetSetting GetDDnsInternetSettng() => GetDDnsInternetSettngAsync().Result;
|
public VpnInternetSetting GetDDnsInternetSetting() => GetDDnsInternetSettingAsync().Result;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Set the Proxy Settings for Connecting to the DDNS server (Async mode).
|
/// Set the Proxy Settings for Connecting to the DDNS server (Async mode).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public async Task<VpnInternetSetting> SetDDnsInternetSettngAsync(VpnInternetSetting input_param) => await CallAsync<VpnInternetSetting>("SetDDnsInternetSettng", input_param);
|
public async Task<VpnInternetSetting> SetDDnsInternetSettingAsync(VpnInternetSetting input_param) => await CallAsync<VpnInternetSetting>("SetDDnsInternetSetting", input_param);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Set the Proxy Settings for Connecting to the DDNS server (Sync mode).
|
/// Set the Proxy Settings for Connecting to the DDNS server (Sync mode).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public VpnInternetSetting SetDDnsInternetSettng(VpnInternetSetting input_param) => SetDDnsInternetSettngAsync(input_param).Result;
|
public VpnInternetSetting SetDDnsInternetSetting(VpnInternetSetting input_param) => SetDDnsInternetSettingAsync(input_param).Result;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Set the VPN Gate Server Configuration (Async mode). This API is valid for Win32 binary distribution of the Stable Edition of SoftEther VPN Server.
|
/// Set the VPN Gate Server Configuration (Async mode). This API is valid for Win32 binary distribution of the Stable Edition of SoftEther VPN Server.
|
||||||
|
@ -255,8 +255,8 @@ class VPNRPCTest
|
|||||||
Test_GetOpenVpnSstpConfig();
|
Test_GetOpenVpnSstpConfig();
|
||||||
|
|
||||||
Test_GetDDnsClientStatus();
|
Test_GetDDnsClientStatus();
|
||||||
Test_SetDDnsInternetSettng();
|
Test_SetDDnsInternetSetting();
|
||||||
Test_GetDDnsInternetSettng();
|
Test_GetDDnsInternetSetting();
|
||||||
|
|
||||||
Test_ChangeDDnsClientHostname();
|
Test_ChangeDDnsClientHostname();
|
||||||
Test_RegenerateServerCert();
|
Test_RegenerateServerCert();
|
||||||
@ -3641,27 +3641,27 @@ class VPNRPCTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// API test for 'GetDDnsInternetSettng', Get DDNS proxy configuration
|
/// API test for 'GetDDnsInternetSetting', Get DDNS proxy configuration
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Test_GetDDnsInternetSettng()
|
public void Test_GetDDnsInternetSetting()
|
||||||
{
|
{
|
||||||
Console.WriteLine("Begin: Test_GetDDnsInternetSettng");
|
Console.WriteLine("Begin: Test_GetDDnsInternetSetting");
|
||||||
|
|
||||||
VpnInternetSetting out_internet_setting = api.GetDDnsInternetSettng();
|
VpnInternetSetting out_internet_setting = api.GetDDnsInternetSetting();
|
||||||
|
|
||||||
print_object(out_internet_setting);
|
print_object(out_internet_setting);
|
||||||
|
|
||||||
Console.WriteLine("End: Test_GetDDnsInternetSettng");
|
Console.WriteLine("End: Test_GetDDnsInternetSetting");
|
||||||
Console.WriteLine("-----");
|
Console.WriteLine("-----");
|
||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// API test for 'SetDDnsInternetSettng', Set DDNS proxy configuration
|
/// API test for 'SetDDnsInternetSetting', Set DDNS proxy configuration
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Test_SetDDnsInternetSettng()
|
public void Test_SetDDnsInternetSetting()
|
||||||
{
|
{
|
||||||
Console.WriteLine("Begin: Test_SetDDnsInternetSettng");
|
Console.WriteLine("Begin: Test_SetDDnsInternetSetting");
|
||||||
|
|
||||||
VpnInternetSetting in_internet_setting = new VpnInternetSetting()
|
VpnInternetSetting in_internet_setting = new VpnInternetSetting()
|
||||||
{
|
{
|
||||||
@ -3671,11 +3671,11 @@ class VPNRPCTest
|
|||||||
ProxyUsername_str = "neko",
|
ProxyUsername_str = "neko",
|
||||||
ProxyPassword_str = "dog",
|
ProxyPassword_str = "dog",
|
||||||
};
|
};
|
||||||
VpnInternetSetting out_internet_setting = api.SetDDnsInternetSettng(in_internet_setting);
|
VpnInternetSetting out_internet_setting = api.SetDDnsInternetSetting(in_internet_setting);
|
||||||
|
|
||||||
print_object(out_internet_setting);
|
print_object(out_internet_setting);
|
||||||
|
|
||||||
Console.WriteLine("End: Test_SetDDnsInternetSettng");
|
Console.WriteLine("End: Test_SetDDnsInternetSetting");
|
||||||
Console.WriteLine("-----");
|
Console.WriteLine("-----");
|
||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
}
|
}
|
||||||
|
@ -228,7 +228,7 @@ You can write your own VPN Server management application in your favorite langua
|
|||||||
|
|
||||||
You can use any SoftEtherVPN component (server, client, bridge) without installing it, if you wish so.
|
You can use any SoftEtherVPN component (server, client, bridge) without installing it, if you wish so.
|
||||||
|
|
||||||
In this case please do not run the `make install` command after compiling the source code, and head directly to the **bin/** directory. There you will find the generated binaries for SoftEtherVPN and those could be used without installing SoftEtherVPN.
|
In this case please do not run the `make install` command after compiling the source code, and head directly to the **build/** directory. There you will find the generated binaries for SoftEtherVPN and those could be used without installing SoftEtherVPN.
|
||||||
|
|
||||||
************************************
|
************************************
|
||||||
Thank You Using SoftEther VPN !
|
Thank You Using SoftEther VPN !
|
||||||
|
@ -726,9 +726,8 @@ void AdminWebProcPost(CONNECTION *c, SOCK *s, HTTP_HEADER *h, UINT post_data_siz
|
|||||||
if (RecvAll(s, data, post_data_size, s->SecureMode))
|
if (RecvAll(s, data, post_data_size, s->SecureMode))
|
||||||
{
|
{
|
||||||
c->JsonRpcAuthed = true;
|
c->JsonRpcAuthed = true;
|
||||||
#ifndef GC_SOFTETHER_OSS
|
|
||||||
RemoveDosEntry(c->Listener, s);
|
RemoveDosEntry(c->Listener, s);
|
||||||
#endif // GC_SOFTETHER_OSS
|
|
||||||
|
|
||||||
// Divide url_target into URL and query string
|
// Divide url_target into URL and query string
|
||||||
StrCpy(url, sizeof(url), url_target);
|
StrCpy(url, sizeof(url), url_target);
|
||||||
@ -767,9 +766,8 @@ void AdminWebProcGet(CONNECTION *c, SOCK *s, HTTP_HEADER *h, char *url_target)
|
|||||||
}
|
}
|
||||||
|
|
||||||
c->JsonRpcAuthed = true;
|
c->JsonRpcAuthed = true;
|
||||||
#ifndef GC_SOFTETHER_OSS
|
|
||||||
RemoveDosEntry(c->Listener, s);
|
RemoveDosEntry(c->Listener, s);
|
||||||
#endif // GC_SOFTETHER_OSS
|
|
||||||
|
|
||||||
// Divide url_target into URL and query string
|
// Divide url_target into URL and query string
|
||||||
StrCpy(url, sizeof(url), url_target);
|
StrCpy(url, sizeof(url), url_target);
|
||||||
@ -1199,9 +1197,7 @@ void JsonRpcProcOptions(CONNECTION *c, SOCK *s, HTTP_HEADER *h, char *url_target
|
|||||||
|
|
||||||
c->JsonRpcAuthed = true;
|
c->JsonRpcAuthed = true;
|
||||||
|
|
||||||
#ifndef GC_SOFTETHER_OSS
|
|
||||||
RemoveDosEntry(c->Listener, s);
|
RemoveDosEntry(c->Listener, s);
|
||||||
#endif // GC_SOFTETHER_OSS
|
|
||||||
|
|
||||||
AdminWebSendBody(s, 200, "OK", NULL, 0, NULL, NULL, NULL, h);
|
AdminWebSendBody(s, 200, "OK", NULL, 0, NULL, NULL, NULL, h);
|
||||||
}
|
}
|
||||||
@ -1228,9 +1224,7 @@ void JsonRpcProcGet(CONNECTION *c, SOCK *s, HTTP_HEADER *h, char *url_target)
|
|||||||
|
|
||||||
c->JsonRpcAuthed = true;
|
c->JsonRpcAuthed = true;
|
||||||
|
|
||||||
#ifndef GC_SOFTETHER_OSS
|
|
||||||
RemoveDosEntry(c->Listener, s);
|
RemoveDosEntry(c->Listener, s);
|
||||||
#endif // GC_SOFTETHER_OSS
|
|
||||||
|
|
||||||
// Divide url_target into URL and query string
|
// Divide url_target into URL and query string
|
||||||
StrCpy(url, sizeof(url), url_target);
|
StrCpy(url, sizeof(url), url_target);
|
||||||
@ -1357,9 +1351,7 @@ void JsonRpcProcPost(CONNECTION *c, SOCK *s, HTTP_HEADER *h, UINT post_data_size
|
|||||||
|
|
||||||
c->JsonRpcAuthed = true;
|
c->JsonRpcAuthed = true;
|
||||||
|
|
||||||
#ifndef GC_SOFTETHER_OSS
|
|
||||||
RemoveDosEntry(c->Listener, s);
|
RemoveDosEntry(c->Listener, s);
|
||||||
#endif // GC_SOFTETHER_OSS
|
|
||||||
|
|
||||||
if (json_req == NULL || json_req_object == NULL)
|
if (json_req == NULL || json_req_object == NULL)
|
||||||
{
|
{
|
||||||
@ -1644,8 +1636,8 @@ PACK *AdminDispatch(RPC *rpc, char *name, PACK *p)
|
|||||||
DECLARE_RPC("GetSpecialListener", RPC_SPECIAL_LISTENER, StGetSpecialListener, InRpcSpecialListener, OutRpcSpecialListener)
|
DECLARE_RPC("GetSpecialListener", RPC_SPECIAL_LISTENER, StGetSpecialListener, InRpcSpecialListener, OutRpcSpecialListener)
|
||||||
DECLARE_RPC("GetAzureStatus", RPC_AZURE_STATUS, StGetAzureStatus, InRpcAzureStatus, OutRpcAzureStatus)
|
DECLARE_RPC("GetAzureStatus", RPC_AZURE_STATUS, StGetAzureStatus, InRpcAzureStatus, OutRpcAzureStatus)
|
||||||
DECLARE_RPC("SetAzureStatus", RPC_AZURE_STATUS, StSetAzureStatus, InRpcAzureStatus, OutRpcAzureStatus)
|
DECLARE_RPC("SetAzureStatus", RPC_AZURE_STATUS, StSetAzureStatus, InRpcAzureStatus, OutRpcAzureStatus)
|
||||||
DECLARE_RPC("GetDDnsInternetSettng", INTERNET_SETTING, StGetDDnsInternetSetting, InRpcInternetSetting, OutRpcInternetSetting)
|
DECLARE_RPC("GetDDnsInternetSetting", INTERNET_SETTING, StGetDDnsInternetSetting, InRpcInternetSetting, OutRpcInternetSetting)
|
||||||
DECLARE_RPC("SetDDnsInternetSettng", INTERNET_SETTING, StSetDDnsInternetSetting, InRpcInternetSetting, OutRpcInternetSetting)
|
DECLARE_RPC("SetDDnsInternetSetting", INTERNET_SETTING, StSetDDnsInternetSetting, InRpcInternetSetting, OutRpcInternetSetting)
|
||||||
// RPC function declaration: till here
|
// RPC function declaration: till here
|
||||||
|
|
||||||
|
|
||||||
@ -1831,8 +1823,8 @@ DECLARE_SC("SetSpecialListener", RPC_SPECIAL_LISTENER, ScSetSpecialListener, InR
|
|||||||
DECLARE_SC("GetSpecialListener", RPC_SPECIAL_LISTENER, ScGetSpecialListener, InRpcSpecialListener, OutRpcSpecialListener)
|
DECLARE_SC("GetSpecialListener", RPC_SPECIAL_LISTENER, ScGetSpecialListener, InRpcSpecialListener, OutRpcSpecialListener)
|
||||||
DECLARE_SC("GetAzureStatus", RPC_AZURE_STATUS, ScGetAzureStatus, InRpcAzureStatus, OutRpcAzureStatus)
|
DECLARE_SC("GetAzureStatus", RPC_AZURE_STATUS, ScGetAzureStatus, InRpcAzureStatus, OutRpcAzureStatus)
|
||||||
DECLARE_SC("SetAzureStatus", RPC_AZURE_STATUS, ScSetAzureStatus, InRpcAzureStatus, OutRpcAzureStatus)
|
DECLARE_SC("SetAzureStatus", RPC_AZURE_STATUS, ScSetAzureStatus, InRpcAzureStatus, OutRpcAzureStatus)
|
||||||
DECLARE_SC("GetDDnsInternetSettng", INTERNET_SETTING, ScGetDDnsInternetSetting, InRpcInternetSetting, OutRpcInternetSetting)
|
DECLARE_SC("GetDDnsInternetSetting", INTERNET_SETTING, ScGetDDnsInternetSetting, InRpcInternetSetting, OutRpcInternetSetting)
|
||||||
DECLARE_SC("SetDDnsInternetSettng", INTERNET_SETTING, ScSetDDnsInternetSetting, InRpcInternetSetting, OutRpcInternetSetting)
|
DECLARE_SC("SetDDnsInternetSetting", INTERNET_SETTING, ScSetDDnsInternetSetting, InRpcInternetSetting, OutRpcInternetSetting)
|
||||||
// RPC call function declaration: till here
|
// RPC call function declaration: till here
|
||||||
|
|
||||||
// Setting VPN Gate Server Configuration
|
// Setting VPN Gate Server Configuration
|
||||||
|
@ -805,7 +805,12 @@ bool EthIsChangeMtuSupported(ETH *e)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FreeBSD seriously dislikes MTU changes; disable if compiled on that platform
|
||||||
|
#ifndef __FreeBSD__
|
||||||
return true;
|
return true;
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
#else // defined(UNIX_LINUX) || defined(UNIX_BSD) || defined(UNIX_SOLARIS)
|
#else // defined(UNIX_LINUX) || defined(UNIX_BSD) || defined(UNIX_SOLARIS)
|
||||||
return false;
|
return false;
|
||||||
#endif // defined(UNIX_LINUX) || defined(UNIX_BSD) || defined(UNIX_SOLARIS)
|
#endif // defined(UNIX_LINUX) || defined(UNIX_BSD) || defined(UNIX_SOLARIS)
|
||||||
|
@ -1161,7 +1161,8 @@ void Win32EthMakeCombinedName(char *dst, UINT dst_size, char *nicname, char *gui
|
|||||||
|
|
||||||
if (IsEmptyStr(guid) == false)
|
if (IsEmptyStr(guid) == false)
|
||||||
{
|
{
|
||||||
Format(dst, dst_size, "%s (ID=%010u)", nicname, Win32EthGenIdFromGuid(guid));
|
// Allow to combine "FriendlyName" consisting of a NULL character and ID.
|
||||||
|
Format(dst, dst_size, "%s(ID=%010u)", nicname, Win32EthGenIdFromGuid(guid));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1185,18 +1186,19 @@ UINT Win32EthGetNameAndIdFromCombinedName(char *name, UINT name_size, char *str)
|
|||||||
|
|
||||||
len = StrLen(str);
|
len = StrLen(str);
|
||||||
|
|
||||||
if (len >= 16)
|
// Allow to combine "FriendlyName" consisting of a NULL character and ID beginning with "(ID=".
|
||||||
|
if (len >= 15)
|
||||||
{
|
{
|
||||||
StrCpy(id_str, sizeof(id_str), str + len - 16);
|
StrCpy(id_str, sizeof(id_str), str + len - 15);
|
||||||
|
|
||||||
if (StartWith(id_str, " (ID="))
|
if (StartWith(id_str, "(ID="))
|
||||||
{
|
{
|
||||||
if (EndWith(id_str, ")"))
|
if (EndWith(id_str, ")"))
|
||||||
{
|
{
|
||||||
char num[MAX_SIZE];
|
char num[MAX_SIZE];
|
||||||
|
|
||||||
Zero(num, sizeof(num));
|
Zero(num, sizeof(num));
|
||||||
StrCpy(num, sizeof(num), id_str + 5);
|
StrCpy(num, sizeof(num), id_str + 4);
|
||||||
|
|
||||||
num[StrLen(num) - 1] = 0;
|
num[StrLen(num) - 1] = 0;
|
||||||
|
|
||||||
@ -1204,7 +1206,7 @@ UINT Win32EthGetNameAndIdFromCombinedName(char *name, UINT name_size, char *str)
|
|||||||
|
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
{
|
{
|
||||||
name[len - 16] = 0;
|
name[len - 15] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1346,6 +1348,8 @@ TOKEN_LIST *GetEthListEx(UINT *total_num_including_hidden, bool enum_normal, boo
|
|||||||
|
|
||||||
Debug("%s - %s\n", a->Guid, a->Title);
|
Debug("%s - %s\n", a->Guid, a->Title);
|
||||||
}
|
}
|
||||||
|
// Make sure that "FriendlyName" does not cosist a NULL character.
|
||||||
|
Debug("%s,- s=%d, t=%s, %s,\n", a->Guid, show, tmp, a->Title[0] == 0 ? "check=NG FriendlyName(Title) is NULL !" : "check=OK");
|
||||||
}
|
}
|
||||||
|
|
||||||
*total_num_including_hidden = ret->NumTokens;
|
*total_num_including_hidden = ret->NumTokens;
|
||||||
@ -1405,7 +1409,7 @@ LIST *GetEthAdapterListInternal()
|
|||||||
UINT size;
|
UINT size;
|
||||||
char *buf;
|
char *buf;
|
||||||
UINT i, j;
|
UINT i, j;
|
||||||
char *qos_tag = " (Microsoft's Packet Scheduler)";
|
char *qos_tag = "(Microsoft's Packet Scheduler)"; // Allow to combine "FriendlyName" consisting of a NULL character and QOS tag.
|
||||||
SU *su = NULL;
|
SU *su = NULL;
|
||||||
LIST *su_adapter_list = NULL;
|
LIST *su_adapter_list = NULL;
|
||||||
|
|
||||||
@ -1660,7 +1664,8 @@ ANSI_STR:
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Format(tmp, sizeof(tmp), "%s (%u)", a->Title, k + 1);
|
// Allow to combine "FriendlyName" consisting of a NULL character and SEQ number.
|
||||||
|
Format(tmp, sizeof(tmp), "%s(%u)", a->Title, k + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
ok = true;
|
ok = true;
|
||||||
|
@ -6150,6 +6150,8 @@ void CmImportAccountMainEx(HWND hWnd, wchar_t *filename, bool overwrite)
|
|||||||
t->ClientOption->RequireMonitorMode = old_option->RequireMonitorMode;
|
t->ClientOption->RequireMonitorMode = old_option->RequireMonitorMode;
|
||||||
t->ClientOption->RequireBridgeRoutingMode = old_option->RequireBridgeRoutingMode;
|
t->ClientOption->RequireBridgeRoutingMode = old_option->RequireBridgeRoutingMode;
|
||||||
t->ClientOption->DisableQoS = old_option->DisableQoS;
|
t->ClientOption->DisableQoS = old_option->DisableQoS;
|
||||||
|
t->ClientOption->BindLocalIP = old_option->BindLocalIP;// Source IP address for outgoing connection
|
||||||
|
t->ClientOption->BindLocalPort = old_option->BindLocalPort;// Source port number for outgoing connection
|
||||||
|
|
||||||
// Inherit the authentication data
|
// Inherit the authentication data
|
||||||
CiFreeClientAuth(t->ClientAuth);
|
CiFreeClientAuth(t->ClientAuth);
|
||||||
@ -6456,9 +6458,55 @@ void CmDetailDlgUpdate(HWND hWnd, CM_ACCOUNT *a)
|
|||||||
Disable(hWnd, R_BRIDGE);
|
Disable(hWnd, R_BRIDGE);
|
||||||
Disable(hWnd, R_MONITOR);
|
Disable(hWnd, R_MONITOR);
|
||||||
Disable(hWnd, R_NO_ROUTING);
|
Disable(hWnd, R_NO_ROUTING);
|
||||||
|
#if TYPE_BINDLOCALIP
|
||||||
|
Disable(hWnd, E_BIND_LOCALIP);// Source IP address for outgoing connection
|
||||||
|
Disable(hWnd, E_BIND_LOCALPORT);// Source port number for outgoing connection
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if TYPE_BINDLOCALIP
|
||||||
|
// Set the value of the IP type
|
||||||
|
void SetIp(HWND hWnd, UINT id, IP* ip)
|
||||||
|
{
|
||||||
|
char tmp[MAX_SIZE];
|
||||||
|
// Validate arguments
|
||||||
|
if (hWnd == NULL || ip == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
IPToStr(tmp, sizeof(tmp), ip);
|
||||||
|
SetTextA(hWnd, id, tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get an IP address
|
||||||
|
bool GetIp(HWND hWnd, UINT id, IP* ip)
|
||||||
|
{
|
||||||
|
char tmp[MAX_SIZE];
|
||||||
|
// Validate arguments
|
||||||
|
if (hWnd == NULL || ip == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Zero(ip, sizeof(IP));
|
||||||
|
|
||||||
|
if (GetTxtA(hWnd, id, tmp, sizeof(tmp)) == false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StrToIP(ip, tmp) == false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Advanced Settings dialog procedure
|
// Advanced Settings dialog procedure
|
||||||
UINT CmDetailDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
|
UINT CmDetailDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
|
||||||
{
|
{
|
||||||
@ -6495,6 +6543,11 @@ UINT CmDetailDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *pa
|
|||||||
Check(hWnd, R_NO_ROUTING, a->ClientOption->NoRoutingTracking);
|
Check(hWnd, R_NO_ROUTING, a->ClientOption->NoRoutingTracking);
|
||||||
Check(hWnd, R_DISABLE_QOS, a->ClientOption->DisableQoS);
|
Check(hWnd, R_DISABLE_QOS, a->ClientOption->DisableQoS);
|
||||||
Check(hWnd, R_DISABLE_UDP, a->ClientOption->NoUdpAcceleration);
|
Check(hWnd, R_DISABLE_UDP, a->ClientOption->NoUdpAcceleration);
|
||||||
|
#if TYPE_BINDLOCALIP
|
||||||
|
SetIp(hWnd, E_BIND_LOCALIP, &a->ClientOption->BindLocalIP);// Source IP address for outgoing connection
|
||||||
|
SetIntEx(hWnd, E_BIND_LOCALPORT, a->ClientOption->BindLocalPort);// Source port number for outgoing connection
|
||||||
|
//Disable(hWnd, E_BIND_LOCALPORT); // You can not edit
|
||||||
|
#endif
|
||||||
|
|
||||||
// Select the Connection Mode
|
// Select the Connection Mode
|
||||||
if (a->LinkMode == false)
|
if (a->LinkMode == false)
|
||||||
@ -6542,6 +6595,20 @@ UINT CmDetailDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *pa
|
|||||||
Focus(hWnd, E_INTERVAL);
|
Focus(hWnd, E_INTERVAL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#if TYPE_BINDLOCALIP
|
||||||
|
// Source IP address for outgoing connection
|
||||||
|
IP tmpIP;
|
||||||
|
if (GetIp(hWnd, E_BIND_LOCALIP, &tmpIP) == false)
|
||||||
|
{
|
||||||
|
FocusEx(hWnd, E_BIND_LOCALIP);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Source port number for outgoing connection
|
||||||
|
if ((GetInt(hWnd, E_BIND_LOCALPORT) < 0) || (GetInt(hWnd, E_BIND_LOCALPORT) > 65535)){
|
||||||
|
FocusEx(hWnd, E_BIND_LOCALPORT);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
a->ClientOption->MaxConnection = num;
|
a->ClientOption->MaxConnection = num;
|
||||||
a->ClientOption->AdditionalConnectionInterval = GetInt(hWnd, E_INTERVAL);
|
a->ClientOption->AdditionalConnectionInterval = GetInt(hWnd, E_INTERVAL);
|
||||||
@ -6559,6 +6626,10 @@ UINT CmDetailDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *pa
|
|||||||
a->ClientOption->NoRoutingTracking = IsChecked(hWnd, R_NO_ROUTING);
|
a->ClientOption->NoRoutingTracking = IsChecked(hWnd, R_NO_ROUTING);
|
||||||
a->ClientOption->DisableQoS = IsChecked(hWnd, R_DISABLE_QOS);
|
a->ClientOption->DisableQoS = IsChecked(hWnd, R_DISABLE_QOS);
|
||||||
a->ClientOption->NoUdpAcceleration = IsChecked(hWnd, R_DISABLE_UDP);
|
a->ClientOption->NoUdpAcceleration = IsChecked(hWnd, R_DISABLE_UDP);
|
||||||
|
#if TYPE_BINDLOCALIP
|
||||||
|
a->ClientOption->BindLocalIP = tmpIP;// Source IP address for outgoing connection
|
||||||
|
a->ClientOption->BindLocalPort = GetInt(hWnd, E_BIND_LOCALPORT);// Source port number for outgoing connection
|
||||||
|
#endif
|
||||||
|
|
||||||
if (a->LinkMode)
|
if (a->LinkMode)
|
||||||
{
|
{
|
||||||
|
@ -322,6 +322,34 @@ void DecrementNoSsl(CEDAR *c, IP *ip, UINT num_dec)
|
|||||||
UnlockList(c->NonSslList);
|
UnlockList(c->NonSslList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check whether the specified IP address is in Non-SSL connection list
|
||||||
|
bool IsInNoSsl(CEDAR *c, IP *ip)
|
||||||
|
{
|
||||||
|
bool ret = false;
|
||||||
|
// Validate arguments
|
||||||
|
if (c == NULL || ip == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
LockList(c->NonSslList);
|
||||||
|
{
|
||||||
|
NON_SSL *n = SearchNoSslList(c, ip);
|
||||||
|
|
||||||
|
if (n != NULL)
|
||||||
|
{
|
||||||
|
if (n->EntryExpires > Tick64() && n->Count > NON_SSL_MIN_COUNT)
|
||||||
|
{
|
||||||
|
n->EntryExpires = Tick64() + (UINT64)NON_SSL_ENTRY_EXPIRES;
|
||||||
|
ret = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
UnlockList(c->NonSslList);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
// Add new entry to Non-SSL connection list
|
// Add new entry to Non-SSL connection list
|
||||||
bool AddNoSsl(CEDAR *c, IP *ip)
|
bool AddNoSsl(CEDAR *c, IP *ip)
|
||||||
{
|
{
|
||||||
@ -704,6 +732,47 @@ void DelConnection(CEDAR *cedar, CONNECTION *c)
|
|||||||
UnlockList(cedar->ConnectionList);
|
UnlockList(cedar->ConnectionList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get the number of unestablished connections
|
||||||
|
UINT GetUnestablishedConnections(CEDAR *cedar)
|
||||||
|
{
|
||||||
|
UINT i, ret;
|
||||||
|
// Validate arguments
|
||||||
|
if (cedar == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
LockList(cedar->ConnectionList);
|
||||||
|
{
|
||||||
|
for (i = 0;i < LIST_NUM(cedar->ConnectionList);i++)
|
||||||
|
{
|
||||||
|
CONNECTION *c = LIST_DATA(cedar->ConnectionList, i);
|
||||||
|
|
||||||
|
switch (c->Type)
|
||||||
|
{
|
||||||
|
case CONNECTION_TYPE_CLIENT:
|
||||||
|
case CONNECTION_TYPE_INIT:
|
||||||
|
case CONNECTION_TYPE_LOGIN:
|
||||||
|
case CONNECTION_TYPE_ADDITIONAL:
|
||||||
|
switch (c->Status)
|
||||||
|
{
|
||||||
|
case CONNECTION_STATUS_ACCEPTED:
|
||||||
|
case CONNECTION_STATUS_NEGOTIATION:
|
||||||
|
case CONNECTION_STATUS_USERAUTH:
|
||||||
|
ret++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
UnlockList(cedar->ConnectionList);
|
||||||
|
|
||||||
|
return ret + Count(cedar->AcceptingSockets);
|
||||||
|
}
|
||||||
|
|
||||||
// Add connection to Cedar
|
// Add connection to Cedar
|
||||||
void AddConnection(CEDAR *cedar, CONNECTION *c)
|
void AddConnection(CEDAR *cedar, CONNECTION *c)
|
||||||
{
|
{
|
||||||
|
@ -1022,6 +1022,7 @@ void DelHubEx(CEDAR *c, HUB *h, bool no_lock);
|
|||||||
void StopAllHub(CEDAR *c);
|
void StopAllHub(CEDAR *c);
|
||||||
void StopAllConnection(CEDAR *c);
|
void StopAllConnection(CEDAR *c);
|
||||||
void AddConnection(CEDAR *cedar, CONNECTION *c);
|
void AddConnection(CEDAR *cedar, CONNECTION *c);
|
||||||
|
UINT GetUnestablishedConnections(CEDAR *cedar);
|
||||||
void DelConnection(CEDAR *cedar, CONNECTION *c);
|
void DelConnection(CEDAR *cedar, CONNECTION *c);
|
||||||
void SetCedarCipherList(CEDAR *cedar, char *name);
|
void SetCedarCipherList(CEDAR *cedar, char *name);
|
||||||
void InitCedar();
|
void InitCedar();
|
||||||
@ -1046,6 +1047,7 @@ bool AddNoSsl(CEDAR *c, IP *ip);
|
|||||||
void DecrementNoSsl(CEDAR *c, IP *ip, UINT num_dec);
|
void DecrementNoSsl(CEDAR *c, IP *ip, UINT num_dec);
|
||||||
void DeleteOldNoSsl(CEDAR *c);
|
void DeleteOldNoSsl(CEDAR *c);
|
||||||
NON_SSL *SearchNoSslList(CEDAR *c, IP *ip);
|
NON_SSL *SearchNoSslList(CEDAR *c, IP *ip);
|
||||||
|
bool IsInNoSsl(CEDAR *c, IP *ip);
|
||||||
void FreeTinyLog(TINY_LOG *t);
|
void FreeTinyLog(TINY_LOG *t);
|
||||||
void WriteTinyLog(TINY_LOG *t, char *str);
|
void WriteTinyLog(TINY_LOG *t, char *str);
|
||||||
TINY_LOG *NewTinyLog();
|
TINY_LOG *NewTinyLog();
|
||||||
|
@ -4345,6 +4345,9 @@ void InRpcClientOption(CLIENT_OPTION *c, PACK *p)
|
|||||||
PackGetStr(p, "CustomHttpHeader", c->CustomHttpHeader, sizeof(c->CustomHttpHeader));
|
PackGetStr(p, "CustomHttpHeader", c->CustomHttpHeader, sizeof(c->CustomHttpHeader));
|
||||||
PackGetStr(p, "HubName", c->HubName, sizeof(c->HubName));
|
PackGetStr(p, "HubName", c->HubName, sizeof(c->HubName));
|
||||||
PackGetStr(p, "DeviceName", c->DeviceName, sizeof(c->DeviceName));
|
PackGetStr(p, "DeviceName", c->DeviceName, sizeof(c->DeviceName));
|
||||||
|
PackGetIp(p, "BindLocalIP", &c->BindLocalIP);// Source IP address for outgoing connection
|
||||||
|
c->BindLocalPort = PackGetInt(p, "BindLocalPort");// Source port nubmer for outgoing connection
|
||||||
|
|
||||||
c->UseEncrypt = PackGetInt(p, "UseEncrypt") ? true : false;
|
c->UseEncrypt = PackGetInt(p, "UseEncrypt") ? true : false;
|
||||||
c->UseCompress = PackGetInt(p, "UseCompress") ? true : false;
|
c->UseCompress = PackGetInt(p, "UseCompress") ? true : false;
|
||||||
c->HalfConnection = PackGetInt(p, "HalfConnection") ? true : false;
|
c->HalfConnection = PackGetInt(p, "HalfConnection") ? true : false;
|
||||||
@ -4405,6 +4408,8 @@ void OutRpcClientOption(PACK *p, CLIENT_OPTION *c)
|
|||||||
PackAddBool(p, "FromAdminPack", c->FromAdminPack);
|
PackAddBool(p, "FromAdminPack", c->FromAdminPack);
|
||||||
PackAddBool(p, "NoUdpAcceleration", c->NoUdpAcceleration);
|
PackAddBool(p, "NoUdpAcceleration", c->NoUdpAcceleration);
|
||||||
PackAddData(p, "HostUniqueKey", c->HostUniqueKey, SHA1_SIZE);
|
PackAddData(p, "HostUniqueKey", c->HostUniqueKey, SHA1_SIZE);
|
||||||
|
PackAddIp(p, "BindLocalIP", &c->BindLocalIP);// Source IP address for outgoing connection
|
||||||
|
PackAddInt(p, "BindLocalPort", c->BindLocalPort);// Source port number for outgoing connection
|
||||||
}
|
}
|
||||||
|
|
||||||
// CLIENT_AUTH
|
// CLIENT_AUTH
|
||||||
@ -5150,6 +5155,22 @@ void CiRpcAccepted(CLIENT *c, SOCK *s)
|
|||||||
retcode = 0;
|
retcode = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (retcode == 0)
|
||||||
|
{
|
||||||
|
if (IsLocalHostIP(&s->RemoteIP) == false)
|
||||||
|
{
|
||||||
|
// If the RPC client is from network check whether the password is empty
|
||||||
|
UCHAR empty_password_hash[20];
|
||||||
|
Sha0(empty_password_hash, "", 0);
|
||||||
|
if (Cmp(empty_password_hash, hashed_password, SHA1_SIZE) == 0 ||
|
||||||
|
IsZero(hashed_password, SHA1_SIZE))
|
||||||
|
{
|
||||||
|
// Regard it as incorrect password
|
||||||
|
retcode = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Lock(c->lock);
|
Lock(c->lock);
|
||||||
{
|
{
|
||||||
if (c->Config.AllowRemoteConfig == false)
|
if (c->Config.AllowRemoteConfig == false)
|
||||||
@ -5253,14 +5274,21 @@ void CiRpcServerThread(THREAD *thread, void *param)
|
|||||||
|
|
||||||
// Open the port
|
// Open the port
|
||||||
listener = NULL;
|
listener = NULL;
|
||||||
for (i = CLIENT_CONFIG_PORT;i < (CLIENT_CONFIG_PORT + 5);i++)
|
if (c->Config.DisableRpcDynamicPortListener == false)
|
||||||
{
|
{
|
||||||
listener = Listen(i);
|
for (i = CLIENT_CONFIG_PORT;i < (CLIENT_CONFIG_PORT + 5);i++)
|
||||||
if (listener != NULL)
|
|
||||||
{
|
{
|
||||||
break;
|
listener = ListenEx(i, !c->Config.AllowRemoteConfig);
|
||||||
|
if (listener != NULL)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
listener = ListenEx(CLIENT_CONFIG_PORT, !c->Config.AllowRemoteConfig);
|
||||||
|
}
|
||||||
|
|
||||||
if (listener == NULL)
|
if (listener == NULL)
|
||||||
{
|
{
|
||||||
@ -9023,6 +9051,12 @@ void CiInitConfiguration(CLIENT *c)
|
|||||||
c->Config.UseKeepConnect = false; // Don't use the connection maintenance function by default in the Client
|
c->Config.UseKeepConnect = false; // Don't use the connection maintenance function by default in the Client
|
||||||
// Eraser
|
// Eraser
|
||||||
c->Eraser = NewEraser(c->Logger, 0);
|
c->Eraser = NewEraser(c->Logger, 0);
|
||||||
|
|
||||||
|
#ifdef OS_WIN32
|
||||||
|
c->Config.DisableRpcDynamicPortListener = false;
|
||||||
|
#else // OS_WIN32
|
||||||
|
c->Config.DisableRpcDynamicPortListener = true;
|
||||||
|
#endif // OS_WIN32
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -9169,6 +9203,19 @@ void CiLoadClientConfig(CLIENT_CONFIG *c, FOLDER *f)
|
|||||||
c->AllowRemoteConfig = CfgGetBool(f, "AllowRemoteConfig");
|
c->AllowRemoteConfig = CfgGetBool(f, "AllowRemoteConfig");
|
||||||
c->KeepConnectInterval = MAKESURE(CfgGetInt(f, "KeepConnectInterval"), KEEP_INTERVAL_MIN, KEEP_INTERVAL_MAX);
|
c->KeepConnectInterval = MAKESURE(CfgGetInt(f, "KeepConnectInterval"), KEEP_INTERVAL_MIN, KEEP_INTERVAL_MAX);
|
||||||
c->NoChangeWcmNetworkSettingOnWindows8 = CfgGetBool(f, "NoChangeWcmNetworkSettingOnWindows8");
|
c->NoChangeWcmNetworkSettingOnWindows8 = CfgGetBool(f, "NoChangeWcmNetworkSettingOnWindows8");
|
||||||
|
|
||||||
|
if (CfgIsItem(f, "DisableRpcDynamicPortListener"))
|
||||||
|
{
|
||||||
|
c->DisableRpcDynamicPortListener = CfgGetBool(f, "DisableRpcDynamicPortListener");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#ifdef OS_WIN32
|
||||||
|
c->DisableRpcDynamicPortListener = false;
|
||||||
|
#else // OS_WIN32
|
||||||
|
c->DisableRpcDynamicPortListener = true;
|
||||||
|
#endif // OS_WIN32
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read the client authentication data
|
// Read the client authentication data
|
||||||
@ -9299,6 +9346,8 @@ CLIENT_OPTION *CiLoadClientOption(FOLDER *f)
|
|||||||
o->DisableQoS = CfgGetBool(f, "DisableQoS");
|
o->DisableQoS = CfgGetBool(f, "DisableQoS");
|
||||||
o->FromAdminPack = CfgGetBool(f, "FromAdminPack");
|
o->FromAdminPack = CfgGetBool(f, "FromAdminPack");
|
||||||
o->NoUdpAcceleration = CfgGetBool(f, "NoUdpAcceleration");
|
o->NoUdpAcceleration = CfgGetBool(f, "NoUdpAcceleration");
|
||||||
|
CfgGetIp(f, "BindLocalIP", &o->BindLocalIP);// Source IP address for outgoing connection
|
||||||
|
o->BindLocalPort = CfgGetInt(f, "BindLocalPort");// Source port number for outgoing connection
|
||||||
|
|
||||||
b = CfgGetBuf(f, "HostUniqueKey");
|
b = CfgGetBuf(f, "HostUniqueKey");
|
||||||
if (b != NULL)
|
if (b != NULL)
|
||||||
@ -9741,6 +9790,7 @@ void CiWriteClientConfig(FOLDER *cc, CLIENT_CONFIG *config)
|
|||||||
CfgAddBool(cc, "AllowRemoteConfig", config->AllowRemoteConfig);
|
CfgAddBool(cc, "AllowRemoteConfig", config->AllowRemoteConfig);
|
||||||
CfgAddInt(cc, "KeepConnectInterval", config->KeepConnectInterval);
|
CfgAddInt(cc, "KeepConnectInterval", config->KeepConnectInterval);
|
||||||
CfgAddBool(cc, "NoChangeWcmNetworkSettingOnWindows8", config->NoChangeWcmNetworkSettingOnWindows8);
|
CfgAddBool(cc, "NoChangeWcmNetworkSettingOnWindows8", config->NoChangeWcmNetworkSettingOnWindows8);
|
||||||
|
CfgAddBool(cc, "DisableRpcDynamicPortListener", config->DisableRpcDynamicPortListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write the client authentication data
|
// Write the client authentication data
|
||||||
@ -9853,6 +9903,8 @@ void CiWriteClientOption(FOLDER *f, CLIENT_OPTION *o)
|
|||||||
CfgAddBool(f, "RequireBridgeRoutingMode", o->RequireBridgeRoutingMode);
|
CfgAddBool(f, "RequireBridgeRoutingMode", o->RequireBridgeRoutingMode);
|
||||||
CfgAddBool(f, "DisableQoS", o->DisableQoS);
|
CfgAddBool(f, "DisableQoS", o->DisableQoS);
|
||||||
CfgAddBool(f, "NoUdpAcceleration", o->NoUdpAcceleration);
|
CfgAddBool(f, "NoUdpAcceleration", o->NoUdpAcceleration);
|
||||||
|
CfgAddIp(f, "BindLocalIP", &o->BindLocalIP);// Source IP address for outgoing connection
|
||||||
|
CfgAddInt(f, "BindLocalPort", o->BindLocalPort);// Source port number for outgoing connection
|
||||||
|
|
||||||
if (o->FromAdminPack)
|
if (o->FromAdminPack)
|
||||||
{
|
{
|
||||||
|
@ -87,6 +87,7 @@ struct CLIENT_CONFIG
|
|||||||
UINT KeepConnectProtocol; // Protocol
|
UINT KeepConnectProtocol; // Protocol
|
||||||
UINT KeepConnectInterval; // Interval
|
UINT KeepConnectInterval; // Interval
|
||||||
bool NoChangeWcmNetworkSettingOnWindows8; // Don't change the WCM network settings on Windows 8
|
bool NoChangeWcmNetworkSettingOnWindows8; // Don't change the WCM network settings on Windows 8
|
||||||
|
bool DisableRpcDynamicPortListener;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Version acquisition
|
// Version acquisition
|
||||||
|
@ -24496,6 +24496,34 @@ void CmdPrintAbout(CONSOLE *c)
|
|||||||
|
|
||||||
c->Write(c, tmp);
|
c->Write(c, tmp);
|
||||||
|
|
||||||
|
// Showing an explanation of the purpose of the Developer Edition and the difference from the Stable Editon by Daiyuu Nobori
|
||||||
|
/*
|
||||||
|
* Welcome to the Developer Edition of SoftEther VPN.
|
||||||
|
|
||||||
|
Please note: SoftEther VPN Developer Edition (Version 5.x) has accepted
|
||||||
|
great code contributions on GitHub from many excellent open source
|
||||||
|
developers. This edition contains some very bright experimental code.
|
||||||
|
The experimental code in this Developer Edition has *NOT* been fully
|
||||||
|
reviewed by Daiyuu Nobori (the first original author of SoftEther VPN)
|
||||||
|
and has not been endorsed by him for stability and quality. It is his
|
||||||
|
policy to encourage many developers to contribute code with their
|
||||||
|
creative minds and ambitions. The succession of low-level system
|
||||||
|
software and network developers is of critical importance worldwide,
|
||||||
|
and SoftEther VPN Developer Edition is very important to increase
|
||||||
|
the number of such great developers.
|
||||||
|
- If you are a programmer of VPN software, or if you want a variety of
|
||||||
|
experimental code, this edition is very suitable for you.
|
||||||
|
- On the other hand, if you are building VPNs for mission-critical
|
||||||
|
business systems that require stability and security,
|
||||||
|
Stable Edition (Version 4.x) is highly recommended.
|
||||||
|
- All code in Stable Edition is reviewed by Daiyuu Nobori. He is also
|
||||||
|
responsible for porting features from the Developer Edition
|
||||||
|
to the Stable Edition.
|
||||||
|
- SoftEther VPN Stable Edition can be downloaded at:
|
||||||
|
https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/
|
||||||
|
*/
|
||||||
|
c->Write(c, L"\nWelcome to the Developer Edition of SoftEther VPN.\n\nPlease note: SoftEther VPN Developer Edition (Version 5.x) has accepted\ngreat code contributions on GitHub from many excellent open source\ndevelopers. This edition contains some very bright experimental code.\n The experimental code in this Developer Edition has *NOT* been fully\nreviewed by Daiyuu Nobori (the first original author of SoftEther VPN)\nand has not been endorsed by him for stability and quality. It is his\npolicy to encourage many developers to contribute code with their\ncreative minds and ambitions. The succession of low-level system\nsoftware and network developers is of critical importance worldwide,\nand SoftEther VPN Developer Edition is very important to increase\nthe number of such great developers.\n- If you are a programmer of VPN software, or if you want a variety of\n experimental code, this edition is very suitable for you.\n- On the other hand, if you are building VPNs for mission-critical\n business systems that require stability and security,\n Stable Edition (Version 4.x) is highly recommended.\n- All code in Stable Edition is reviewed by Daiyuu Nobori. He is also\n responsible for porting features from the Developer Edition\n to the Stable Edition.\n- SoftEther VPN Stable Edition can be downloaded at:\n https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/\n\n");
|
||||||
|
|
||||||
ReleaseCedar(cedar);
|
ReleaseCedar(cedar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,6 +58,7 @@ struct RC4_KEY_PAIR
|
|||||||
UCHAR ServerToClientKey[16];
|
UCHAR ServerToClientKey[16];
|
||||||
UCHAR ClientToServerKey[16];
|
UCHAR ClientToServerKey[16];
|
||||||
};
|
};
|
||||||
|
#define TYPE_BINDLOCALIP 1 // Enable HMI user to edit Source IP address & Source port number for outgoing connection
|
||||||
|
|
||||||
// Client Options
|
// Client Options
|
||||||
// Do not change item size or order and only add new items at the end!
|
// Do not change item size or order and only add new items at the end!
|
||||||
@ -106,6 +107,8 @@ struct CLIENT_OPTION
|
|||||||
UCHAR HostUniqueKey[SHA1_SIZE]; // Host unique key
|
UCHAR HostUniqueKey[SHA1_SIZE]; // Host unique key
|
||||||
char CustomHttpHeader[HTTP_CUSTOM_HEADER_MAX_SIZE]; // Custom HTTP proxy header
|
char CustomHttpHeader[HTTP_CUSTOM_HEADER_MAX_SIZE]; // Custom HTTP proxy header
|
||||||
char HintStr[MAX_HOST_NAME_LEN + 1]; // Hint string for NAT-T
|
char HintStr[MAX_HOST_NAME_LEN + 1]; // Hint string for NAT-T
|
||||||
|
IP BindLocalIP; // Source IP address for outgoing connection
|
||||||
|
UINT BindLocalPort; // Source port number for outgoing connection
|
||||||
};
|
};
|
||||||
|
|
||||||
// Client authentication data
|
// Client authentication data
|
||||||
|
@ -541,13 +541,9 @@ UINT DCRegister(DDNS_CLIENT *c, bool ipv6, DDNS_REGISTER_PARAM *p, char *replace
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Format(url2, sizeof(url2), "%s?v=%I64u", url, Rand64());
|
Format(url2, sizeof(url2), "%s?v=%I64u", url, Rand64());
|
||||||
Format(url3, sizeof(url3), url2, key_hash_str[2], key_hash_str[3]);
|
Format(url3, sizeof(url3), url2, key_hash_str[2], key_hash_str[3]);
|
||||||
|
|
||||||
ReplaceStr(url3, sizeof(url3), url3, "https://", "http://");
|
|
||||||
|
|
||||||
ReplaceStr(url3, sizeof(url3), url3, ".servers", ".open.servers");
|
ReplaceStr(url3, sizeof(url3), url3, ".servers", ".open.servers");
|
||||||
|
|
||||||
cert_hash = StrToBin(DDNS_CERT_HASH);
|
cert_hash = StrToBin(DDNS_CERT_HASH);
|
||||||
|
@ -18,7 +18,11 @@
|
|||||||
"439BAFA75A6EE5671FC9F9A02D34FF29881761A0" \
|
"439BAFA75A6EE5671FC9F9A02D34FF29881761A0" \
|
||||||
"EFAC5FA0CDD14E0F864EED58A73C35D7E33B62F3" \
|
"EFAC5FA0CDD14E0F864EED58A73C35D7E33B62F3" \
|
||||||
"74DF99D4B1B5F0488A388B50D347D26013DC67A5" \
|
"74DF99D4B1B5F0488A388B50D347D26013DC67A5" \
|
||||||
"6EBB39AFCA8C900635CFC11218CF293A612457E4"
|
"6EBB39AFCA8C900635CFC11218CF293A612457E4" \
|
||||||
|
"05A9386C5E2B233F7BAB2479620EAAA2793709ED" \
|
||||||
|
"A811C64BB715351E36B6C1E022648D8BE0ACD128" \
|
||||||
|
"BD264DB3B0B1B3ABA0AF3074AA574ED1EF3B42D7" \
|
||||||
|
"9AB61D691536645DD55A8730FC6D2CDF33C8C73F"
|
||||||
|
|
||||||
#define DDNS_SNI_VER_STRING "DDNS"
|
#define DDNS_SNI_VER_STRING "DDNS"
|
||||||
|
|
||||||
@ -43,7 +47,7 @@
|
|||||||
#define DDNS_URL2_V4_ALT "http://get-my-ip.ddns.uxcom.jp/ddns/getmyip.ashx"
|
#define DDNS_URL2_V4_ALT "http://get-my-ip.ddns.uxcom.jp/ddns/getmyip.ashx"
|
||||||
#define DDNS_URL2_V6_ALT "http://get-my-ip-v6.ddns.uxcom.jp/ddns/getmyip.ashx"
|
#define DDNS_URL2_V6_ALT "http://get-my-ip-v6.ddns.uxcom.jp/ddns/getmyip.ashx"
|
||||||
|
|
||||||
#define DDNS_RPC_MAX_RECV_SIZE DYN32(DDNS_RPC_MAX_RECV_SIZE, (128 * 1024 * 1024))
|
#define DDNS_RPC_MAX_RECV_SIZE DYN32(DDNS_RPC_MAX_RECV_SIZE, (38 * 1024 * 1024))
|
||||||
|
|
||||||
// Connection Timeout
|
// Connection Timeout
|
||||||
#define DDNS_CONNECT_TIMEOUT DYN32(DDNS_CONNECT_TIMEOUT, (15 * 1000))
|
#define DDNS_CONNECT_TIMEOUT DYN32(DDNS_CONNECT_TIMEOUT, (15 * 1000))
|
||||||
|
@ -1517,7 +1517,9 @@ void IPCProcessL3EventsEx(IPC *ipc, UINT64 now)
|
|||||||
// We save the router advertisement data for later use
|
// We save the router advertisement data for later use
|
||||||
IPCIPv6AddRouterPrefixes(ipc, &p->ICMPv6HeaderPacketInfo.OptionList, src_mac, &ip_src);
|
IPCIPv6AddRouterPrefixes(ipc, &p->ICMPv6HeaderPacketInfo.OptionList, src_mac, &ip_src);
|
||||||
IPCIPv6AssociateOnNDTEx(ipc, &ip_src, src_mac, true);
|
IPCIPv6AssociateOnNDTEx(ipc, &ip_src, src_mac, true);
|
||||||
IPCIPv6AssociateOnNDTEx(ipc, &ip_src, p->ICMPv6HeaderPacketInfo.OptionList.SourceLinkLayer->Address, true);
|
if (p->ICMPv6HeaderPacketInfo.OptionList.SourceLinkLayer != NULL) {
|
||||||
|
IPCIPv6AssociateOnNDTEx(ipc, &ip_src, p->ICMPv6HeaderPacketInfo.OptionList.SourceLinkLayer->Address, true);
|
||||||
|
}
|
||||||
ndtProcessed = true;
|
ndtProcessed = true;
|
||||||
header_size = sizeof(ICMPV6_ROUTER_ADVERTISEMENT_HEADER);
|
header_size = sizeof(ICMPV6_ROUTER_ADVERTISEMENT_HEADER);
|
||||||
break;
|
break;
|
||||||
@ -1537,7 +1539,8 @@ void IPCProcessL3EventsEx(IPC *ipc, UINT64 now)
|
|||||||
// Remove link-layer address options for Windows clients (required on Windows 11)
|
// Remove link-layer address options for Windows clients (required on Windows 11)
|
||||||
if (header_size > 0)
|
if (header_size > 0)
|
||||||
{
|
{
|
||||||
UCHAR *src = p->ICMPv6HeaderPacketInfo.Headers.HeaderPointer + header_size;
|
//UCHAR *src = p->ICMPv6HeaderPacketInfo.Headers.HeaderPointer + header_size;
|
||||||
|
UCHAR* src = (UCHAR *)p->ICMPv6HeaderPacketInfo.Headers.HeaderPointer + header_size;// Cast the pointer to UCHAR *.
|
||||||
UINT opt_size = p->ICMPv6HeaderPacketInfo.DataSize - header_size;
|
UINT opt_size = p->ICMPv6HeaderPacketInfo.DataSize - header_size;
|
||||||
UCHAR *dst = src;
|
UCHAR *dst = src;
|
||||||
UINT removed = 0;
|
UINT removed = 0;
|
||||||
@ -2353,7 +2356,14 @@ void IPCIPv6AddRouterPrefixes(IPC *ipc, ICMPV6_OPTION_LIST *recvPrefix, UCHAR *m
|
|||||||
IntToSubnetMask6(&newRA->RoutedMask, recvPrefix->Prefix[i]->SubnetLength);
|
IntToSubnetMask6(&newRA->RoutedMask, recvPrefix->Prefix[i]->SubnetLength);
|
||||||
CopyIP(&newRA->RouterAddress, ip);
|
CopyIP(&newRA->RouterAddress, ip);
|
||||||
Copy(newRA->RouterMacAddress, macAddress, 6);
|
Copy(newRA->RouterMacAddress, macAddress, 6);
|
||||||
Copy(newRA->RouterLinkLayerAddress, recvPrefix->SourceLinkLayer->Address, 6);
|
if (recvPrefix->SourceLinkLayer != NULL)
|
||||||
|
{
|
||||||
|
Copy(newRA->RouterLinkLayerAddress, recvPrefix->SourceLinkLayer->Address, 6);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Zero(newRA->RouterLinkLayerAddress, 6);
|
||||||
|
}
|
||||||
Add(ipc->IPv6RouterAdvs, newRA);
|
Add(ipc->IPv6RouterAdvs, newRA);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2656,7 +2666,7 @@ void IPCIPv6SendUnicast(IPC *ipc, void *data, UINT size, IP *next_ip)
|
|||||||
}
|
}
|
||||||
|
|
||||||
destMac = ra.RouterMacAddress;
|
destMac = ra.RouterMacAddress;
|
||||||
if (!IsMacUnicast(destMac) && !IsMacInvalid(ra.RouterMacAddress))
|
if (!IsMacUnicast(destMac) && !IsMacInvalid(ra.RouterLinkLayerAddress))
|
||||||
{
|
{
|
||||||
destMac = ra.RouterLinkLayerAddress;
|
destMac = ra.RouterLinkLayerAddress;
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "Mayaqua/Memory.h"
|
#include "Mayaqua/Memory.h"
|
||||||
#include "Mayaqua/Object.h"
|
#include "Mayaqua/Object.h"
|
||||||
#include "Mayaqua/Str.h"
|
#include "Mayaqua/Str.h"
|
||||||
|
#include "Mayaqua/Tick64.h"
|
||||||
|
|
||||||
static bool disable_dos = false;
|
static bool disable_dos = false;
|
||||||
static UINT max_connections_per_ip = DEFAULT_MAX_CONNECTIONS_PER_IP;
|
static UINT max_connections_per_ip = DEFAULT_MAX_CONNECTIONS_PER_IP;
|
||||||
@ -181,6 +182,11 @@ void TCPAcceptedThread(THREAD *t, void *param)
|
|||||||
ConnectionAccept(c);
|
ConnectionAccept(c);
|
||||||
flag1 = c->flag1;
|
flag1 = c->flag1;
|
||||||
|
|
||||||
|
if (c->JsonRpcAuthed)
|
||||||
|
{
|
||||||
|
RemoveDosEntry(r, s);
|
||||||
|
}
|
||||||
|
|
||||||
// Release
|
// Release
|
||||||
SLog(r->Cedar, "LS_CONNECTION_END_1", c->Name);
|
SLog(r->Cedar, "LS_CONNECTION_END_1", c->Name);
|
||||||
ReleaseListener(c->Listener);
|
ReleaseListener(c->Listener);
|
||||||
@ -221,6 +227,46 @@ void TCPAccepted(LISTENER *r, SOCK *s)
|
|||||||
|
|
||||||
num_clients_from_this_ip = GetNumIpClient(&s->RemoteIP);
|
num_clients_from_this_ip = GetNumIpClient(&s->RemoteIP);
|
||||||
|
|
||||||
|
#ifdef USE_DOS_ATTACK_DETECTION
|
||||||
|
if (disable_dos == false && r->DisableDos == false && r->Protocol != LISTENER_INPROC)
|
||||||
|
{
|
||||||
|
UINT max_uec, now_uec;
|
||||||
|
// DOS attack check
|
||||||
|
if (CheckDosAttack(r, s) == false)
|
||||||
|
{
|
||||||
|
Debug("DOS Attack 1 !!\n");
|
||||||
|
IPToStr(tmp, sizeof(tmp), &s->RemoteIP);
|
||||||
|
SLog(r->Cedar, "LS_LISTENER_DOS", r->Port, tmp, s->RemotePort);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (StrCmpi(s->UnderlayProtocol, SOCK_UNDERLAY_NATIVE_V6) == 0 ||
|
||||||
|
StrCmpi(s->UnderlayProtocol, SOCK_UNDERLAY_NATIVE_V4) == 0)
|
||||||
|
{
|
||||||
|
if (IsInNoSsl(r->Cedar, &s->RemoteIP))
|
||||||
|
{
|
||||||
|
Debug("DOS Attack 2 !!\n");
|
||||||
|
IPToStr(tmp, sizeof(tmp), &s->RemoteIP);
|
||||||
|
SLog(r->Cedar, "LS_LISTENER_DOS", r->Port, tmp, s->RemotePort);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (num_clients_from_this_ip > GetMaxConnectionsPerIp())
|
||||||
|
{
|
||||||
|
Debug("DOS Attack 3 !!\n");
|
||||||
|
IPToStr(tmp, sizeof(tmp), &s->RemoteIP);
|
||||||
|
SLog(r->Cedar, "LS_LISTENER_DOS", r->Port, tmp, s->RemotePort);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
max_uec = GetMaxUnestablishedConnections();
|
||||||
|
now_uec = GetUnestablishedConnections(cedar);
|
||||||
|
if (now_uec > max_uec)
|
||||||
|
{
|
||||||
|
Debug("DOS Attack 4 !!\n");
|
||||||
|
SLog(r->Cedar, "LS_LISTENER_MAXUEC", max_uec, now_uec);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // USE_DOS_ATTACK_DETECTION
|
||||||
|
|
||||||
IPToStr(tmp, sizeof(tmp), &s->RemoteIP);
|
IPToStr(tmp, sizeof(tmp), &s->RemoteIP);
|
||||||
|
|
||||||
@ -239,6 +285,169 @@ void TCPAccepted(LISTENER *r, SOCK *s)
|
|||||||
ReleaseThread(t);
|
ReleaseThread(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove a DOS entry
|
||||||
|
bool RemoveDosEntry(LISTENER *r, SOCK *s)
|
||||||
|
{
|
||||||
|
DOS *d;
|
||||||
|
bool ok = false;
|
||||||
|
// Validate arguments
|
||||||
|
if (r == NULL || s == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
LockList(r->DosList);
|
||||||
|
{
|
||||||
|
// Delete old entries from the DOS attack list
|
||||||
|
RefreshDosList(r);
|
||||||
|
|
||||||
|
// Search the table
|
||||||
|
d = SearchDosList(r, &s->RemoteIP);
|
||||||
|
|
||||||
|
if (d != NULL)
|
||||||
|
{
|
||||||
|
Delete(r->DosList, d);
|
||||||
|
Free(d);
|
||||||
|
ok = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
UnlockList(r->DosList);
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check whether this is a DOS attack
|
||||||
|
bool CheckDosAttack(LISTENER *r, SOCK *s)
|
||||||
|
{
|
||||||
|
DOS *d;
|
||||||
|
bool ok = true;
|
||||||
|
// Validate arguments
|
||||||
|
if (r == NULL || s == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
LockList(r->DosList);
|
||||||
|
{
|
||||||
|
// Delete old entries from the DOS attack list
|
||||||
|
RefreshDosList(r);
|
||||||
|
|
||||||
|
// Search the table
|
||||||
|
d = SearchDosList(r, &s->RemoteIP);
|
||||||
|
|
||||||
|
if (d != NULL)
|
||||||
|
{
|
||||||
|
// There is a entry already
|
||||||
|
// This should mean being under a DOS attack
|
||||||
|
d->LastConnectedTick = Tick64();
|
||||||
|
d->CurrentExpireSpan = MIN(d->CurrentExpireSpan * (UINT64)2, DOS_TABLE_EXPIRES_MAX);
|
||||||
|
d->AccessCount++;
|
||||||
|
if (d->AccessCount > DOS_TABLE_MAX_LIMIT_PER_IP)
|
||||||
|
{
|
||||||
|
ok = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Create a new entry
|
||||||
|
d = ZeroMalloc(sizeof(DOS));
|
||||||
|
d->CurrentExpireSpan = (UINT64)DOS_TABLE_EXPIRES_FIRST;
|
||||||
|
d->FirstConnectedTick = d->LastConnectedTick = Tick64();
|
||||||
|
d->AccessCount = 1;
|
||||||
|
d->DeleteEntryTick = d->FirstConnectedTick + (UINT64)DOS_TABLE_EXPIRES_TOTAL;
|
||||||
|
Copy(&d->IpAddress, &s->RemoteIP, sizeof(IP));
|
||||||
|
Add(r->DosList, d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
UnlockList(r->DosList);
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete old entries from the DOS attack list
|
||||||
|
void RefreshDosList(LISTENER *r)
|
||||||
|
{
|
||||||
|
// Validate arguments
|
||||||
|
if (r == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (r->DosListLastRefreshTime == 0 ||
|
||||||
|
(r->DosListLastRefreshTime + (UINT64)DOS_TABLE_REFRESH_INTERVAL) <= Tick64())
|
||||||
|
{
|
||||||
|
UINT i;
|
||||||
|
LIST *o;
|
||||||
|
r->DosListLastRefreshTime = Tick64();
|
||||||
|
|
||||||
|
o = NewListFast(NULL);
|
||||||
|
for (i = 0;i < LIST_NUM(r->DosList);i++)
|
||||||
|
{
|
||||||
|
DOS *d = LIST_DATA(r->DosList, i);
|
||||||
|
if ((d->LastConnectedTick + d->CurrentExpireSpan) <= Tick64() ||
|
||||||
|
(d->DeleteEntryTick <= Tick64()))
|
||||||
|
{
|
||||||
|
Add(o, d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0;i < LIST_NUM(o);i++)
|
||||||
|
{
|
||||||
|
DOS *d = LIST_DATA(o, i);
|
||||||
|
Delete(r->DosList, d);
|
||||||
|
Free(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
ReleaseList(o);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Search the DOS attack list by the IP address
|
||||||
|
DOS *SearchDosList(LISTENER *r, IP *ip)
|
||||||
|
{
|
||||||
|
DOS *d, t;
|
||||||
|
// Validate arguments
|
||||||
|
if (r == NULL || ip == NULL)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
Copy(&t.IpAddress, ip, sizeof(IP));
|
||||||
|
|
||||||
|
d = Search(r->DosList, &t);
|
||||||
|
|
||||||
|
if (d != NULL)
|
||||||
|
{
|
||||||
|
if ((d->LastConnectedTick + d->CurrentExpireSpan) <= Tick64() ||
|
||||||
|
(d->DeleteEntryTick <= Tick64()))
|
||||||
|
{
|
||||||
|
// Delete old entries
|
||||||
|
Delete(r->DosList, d);
|
||||||
|
Free(d);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Comparison of DOS attack list entries
|
||||||
|
int CompareDos(void *p1, void *p2)
|
||||||
|
{
|
||||||
|
DOS *d1, *d2;
|
||||||
|
if (p1 == NULL || p2 == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
d1 = *(DOS **)p1;
|
||||||
|
d2 = *(DOS **)p2;
|
||||||
|
if (d1 == NULL || d2 == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CmpIpAddr(&d1->IpAddress, &d2->IpAddress);
|
||||||
|
}
|
||||||
|
|
||||||
// UDP listener main loop
|
// UDP listener main loop
|
||||||
void ListenerUDPMainLoop(LISTENER *r)
|
void ListenerUDPMainLoop(LISTENER *r)
|
||||||
@ -653,6 +862,13 @@ void CleanupListener(LISTENER *r)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Release the DOS attack list
|
||||||
|
for (i = 0;i < LIST_NUM(r->DosList);i++)
|
||||||
|
{
|
||||||
|
DOS *d = LIST_DATA(r->DosList, i);
|
||||||
|
Free(d);
|
||||||
|
}
|
||||||
|
ReleaseList(r->DosList);
|
||||||
|
|
||||||
if (r->Sock != NULL)
|
if (r->Sock != NULL)
|
||||||
{
|
{
|
||||||
@ -802,6 +1018,7 @@ LISTENER *NewListenerEx5(CEDAR *cedar, UINT proto, UINT port, THREAD_PROC *proc,
|
|||||||
r->Port = port;
|
r->Port = port;
|
||||||
r->Event = NewEvent();
|
r->Event = NewEvent();
|
||||||
|
|
||||||
|
r->DosList = NewList(CompareDos);
|
||||||
|
|
||||||
r->LocalOnly = local_only;
|
r->LocalOnly = local_only;
|
||||||
r->ShadowIPv6 = shadow_ipv6;
|
r->ShadowIPv6 = shadow_ipv6;
|
||||||
|
@ -10,12 +10,24 @@
|
|||||||
|
|
||||||
#include "CedarType.h"
|
#include "CedarType.h"
|
||||||
|
|
||||||
|
#include "Mayaqua/MayaType.h"
|
||||||
#include "Mayaqua/Kernel.h"
|
#include "Mayaqua/Kernel.h"
|
||||||
|
#include "Mayaqua/Network.h"
|
||||||
|
|
||||||
// Function to call when receiving a new connection
|
// Function to call when receiving a new connection
|
||||||
typedef void (NEW_CONNECTION_PROC)(CONNECTION *c);
|
typedef void (NEW_CONNECTION_PROC)(CONNECTION *c);
|
||||||
|
|
||||||
|
|
||||||
|
// DOS attack list
|
||||||
|
struct DOS
|
||||||
|
{
|
||||||
|
IP IpAddress; // IP address
|
||||||
|
UINT64 FirstConnectedTick; // Time which a client connects at the first time
|
||||||
|
UINT64 LastConnectedTick; // Time which a client connected at the last time
|
||||||
|
UINT64 CurrentExpireSpan; // Current time-out period of this record
|
||||||
|
UINT64 DeleteEntryTick; // Time planned to delete this entry
|
||||||
|
UINT AccessCount; // The number of accesses
|
||||||
|
};
|
||||||
|
|
||||||
// Listener structure
|
// Listener structure
|
||||||
struct LISTENER
|
struct LISTENER
|
||||||
@ -31,6 +43,8 @@ struct LISTENER
|
|||||||
volatile bool Halt; // Halting flag
|
volatile bool Halt; // Halting flag
|
||||||
UINT Status; // State
|
UINT Status; // State
|
||||||
|
|
||||||
|
LIST *DosList; // DOS attack list
|
||||||
|
UINT64 DosListLastRefreshTime; // Time that the DOS list is refreshed at the last
|
||||||
|
|
||||||
THREAD_PROC *ThreadProc; // Thread procedure
|
THREAD_PROC *ThreadProc; // Thread procedure
|
||||||
void *ThreadParam; // Thread parameters
|
void *ThreadParam; // Thread parameters
|
||||||
@ -105,6 +119,11 @@ void FreeDynamicListener(DYNAMIC_LISTENER *d);
|
|||||||
bool ListenerRUDPRpcRecvProc(RUDP_STACK *r, UDPPACKET *p);
|
bool ListenerRUDPRpcRecvProc(RUDP_STACK *r, UDPPACKET *p);
|
||||||
void ListenerSetProcRecvRpcEnable(bool b);
|
void ListenerSetProcRecvRpcEnable(bool b);
|
||||||
|
|
||||||
|
int CompareDos(void *p1, void *p2);
|
||||||
|
DOS *SearchDosList(LISTENER *r, IP *ip);
|
||||||
|
void RefreshDosList(LISTENER *r);
|
||||||
|
bool CheckDosAttack(LISTENER *r, SOCK *s);
|
||||||
|
bool RemoveDosEntry(LISTENER *r, SOCK *s);
|
||||||
|
|
||||||
#endif // LISTENER_H
|
#endif // LISTENER_H
|
||||||
|
|
||||||
|
@ -6196,6 +6196,8 @@ SOCK *ClientConnectGetSocket(CONNECTION *c, bool additional_connect)
|
|||||||
{
|
{
|
||||||
volatile bool *cancel_flag = NULL;
|
volatile bool *cancel_flag = NULL;
|
||||||
char hostname[MAX_HOST_NAME_LEN];
|
char hostname[MAX_HOST_NAME_LEN];
|
||||||
|
char localaddr[MAX_HOST_NAME_LEN];
|
||||||
|
|
||||||
bool save_resolved_ip = false;
|
bool save_resolved_ip = false;
|
||||||
CLIENT_OPTION *o;
|
CLIENT_OPTION *o;
|
||||||
SESSION *sess;
|
SESSION *sess;
|
||||||
@ -6255,10 +6257,48 @@ SOCK *ClientConnectGetSocket(CONNECTION *c, bool additional_connect)
|
|||||||
|
|
||||||
if (o->PortUDP == 0)
|
if (o->PortUDP == 0)
|
||||||
{
|
{
|
||||||
|
IP *localIP;
|
||||||
|
UINT localport;
|
||||||
|
|
||||||
|
// Top of Bind outgoing connection
|
||||||
|
// Decide the binding operation which is explicitly executed on the client-side
|
||||||
|
|
||||||
|
// In the case of first TCP/IP connection
|
||||||
|
if (additional_connect == false) {
|
||||||
|
if (sess->ClientOption->NoRoutingTracking == false) {
|
||||||
|
localIP = BIND_LOCALIP_NULL; // Specify not to bind
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Nonzero address is for source IP address to bind. Zero address is for dummy not to bind.
|
||||||
|
if (IsZeroIP(&sess->ClientOption->BindLocalIP) == true) {
|
||||||
|
localIP = BIND_LOCALIP_NULL;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
localIP = &sess->ClientOption->BindLocalIP;
|
||||||
|
}
|
||||||
|
Debug("ClientConnectGetSocket(): Source IP address %r and source port number %d for binding\n"
|
||||||
|
, &sess->ClientOption->BindLocalIP, sess->ClientOption->BindLocalPort);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// In the case of second and subsequent TCP/IP connections
|
||||||
|
else {
|
||||||
|
// Bind the socket to the actual local IP address of first TCP / IP connection
|
||||||
|
localIP = &sess->LocalIP_CacheForNextConnect;
|
||||||
|
//localIP = BIND_LOCALIP_NULL; // Specify not to bind for test
|
||||||
|
}
|
||||||
|
if (sess->ClientOption->BindLocalPort == 0) {
|
||||||
|
localport = BIND_LOCALPORT_NULL;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
localport = sess->ClientOption->BindLocalPort + Count(sess->Connection->CurrentNumConnection) - 1;
|
||||||
|
Debug("ClientConnectGetSocket(): Additional source port number %u\n", localport);
|
||||||
|
}
|
||||||
|
// Bottom of Bind outgoing connection
|
||||||
|
|
||||||
// If additional_connect == false, enable trying to NAT-T connection
|
// If additional_connect == false, enable trying to NAT-T connection
|
||||||
// If additional_connect == true, follow the IsRUDPSession setting in this session
|
// If additional_connect == true, follow the IsRUDPSession setting in this session
|
||||||
// In additional connect or redirect we do not need ssl verification as the certificate is always compared with a saved one
|
// In additional connect or redirect we do not need ssl verification as the certificate is always compared with a saved one
|
||||||
sock = TcpIpConnectEx2(hostname, c->ServerPort,
|
sock = BindTcpIpConnectEx2(localIP, localport, hostname, c->ServerPort,
|
||||||
(bool *)cancel_flag, c->hWndForUI, &nat_t_err, (additional_connect ? (!sess->IsRUDPSession) : false),
|
(bool *)cancel_flag, c->hWndForUI, &nat_t_err, (additional_connect ? (!sess->IsRUDPSession) : false),
|
||||||
true, ((additional_connect || c->UseTicket) ? NULL : sess->SslOption), &ssl_err, o->HintStr, &resolved_ip);
|
true, ((additional_connect || c->UseTicket) ? NULL : sess->SslOption), &ssl_err, o->HintStr, &resolved_ip);
|
||||||
}
|
}
|
||||||
@ -6328,6 +6368,33 @@ SOCK *ClientConnectGetSocket(CONNECTION *c, bool additional_connect)
|
|||||||
StrCpy(in.HttpCustomHeader, sizeof(in.HttpCustomHeader), o->CustomHttpHeader);
|
StrCpy(in.HttpCustomHeader, sizeof(in.HttpCustomHeader), o->CustomHttpHeader);
|
||||||
StrCpy(in.HttpUserAgent, sizeof(in.HttpUserAgent), c->Cedar->HttpUserAgent);
|
StrCpy(in.HttpUserAgent, sizeof(in.HttpUserAgent), c->Cedar->HttpUserAgent);
|
||||||
|
|
||||||
|
// Top of Bind outgoing connection
|
||||||
|
// In the case of first TCP/IP connection
|
||||||
|
if (additional_connect == false) {
|
||||||
|
if (sess->ClientOption->NoRoutingTracking == false) {
|
||||||
|
in.BindLocalIP = BIND_LOCALIP_NULL; // Specify not to bind
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (IsZeroIP(&sess->ClientOption->BindLocalIP) == true) {
|
||||||
|
in.BindLocalIP = BIND_LOCALIP_NULL;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
in.BindLocalIP = &sess->ClientOption->BindLocalIP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// In the case of second and subsequent TCP/IP connections
|
||||||
|
else {
|
||||||
|
in.BindLocalIP = &sess->LocalIP_CacheForNextConnect;
|
||||||
|
}
|
||||||
|
if (sess->ClientOption->BindLocalPort == 0) {
|
||||||
|
in.BindLocalPort = BIND_LOCALPORT_NULL;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
in.BindLocalPort = sess->ClientOption->BindLocalPort + Count(sess->Connection->CurrentNumConnection) - 1;
|
||||||
|
}
|
||||||
|
// Bottom of Bind outgoing connection
|
||||||
|
|
||||||
#ifdef OS_WIN32
|
#ifdef OS_WIN32
|
||||||
in.Hwnd = c->hWndForUI;
|
in.Hwnd = c->hWndForUI;
|
||||||
#endif
|
#endif
|
||||||
@ -6338,13 +6405,16 @@ SOCK *ClientConnectGetSocket(CONNECTION *c, bool additional_connect)
|
|||||||
switch (o->ProxyType)
|
switch (o->ProxyType)
|
||||||
{
|
{
|
||||||
case PROXY_HTTP:
|
case PROXY_HTTP:
|
||||||
ret = ProxyHttpConnect(&out, &in, cancel_flag);
|
// ret = ProxyHttpConnect(&out, &in, cancel_flag);
|
||||||
|
ret = BindProxyHttpConnect(&out, &in, cancel_flag); // Bind outgoing connection
|
||||||
break;
|
break;
|
||||||
case PROXY_SOCKS:
|
case PROXY_SOCKS:
|
||||||
ret = ProxySocks4Connect(&out, &in, cancel_flag);
|
// ret = ProxySocks4Connect(&out, &in, cancel_flag);
|
||||||
|
ret = BindProxySocks4Connect(&out, &in, cancel_flag); // Bind outgoing connection
|
||||||
break;
|
break;
|
||||||
case PROXY_SOCKS5:
|
case PROXY_SOCKS5:
|
||||||
ret = ProxySocks5Connect(&out, &in, cancel_flag);
|
// ret = ProxySocks5Connect(&out, &in, cancel_flag);
|
||||||
|
ret = BindProxySocks5Connect(&out, &in, cancel_flag); // Bind outgoing connection
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
c->Err = ERR_INTERNAL_ERROR;
|
c->Err = ERR_INTERNAL_ERROR;
|
||||||
@ -6379,6 +6449,25 @@ SOCK *ClientConnectGetSocket(CONNECTION *c, bool additional_connect)
|
|||||||
Debug("ClientConnectGetSocket(): Saved %s IP address %r for future connections.\n", hostname, &resolved_ip);
|
Debug("ClientConnectGetSocket(): Saved %s IP address %r for future connections.\n", hostname, &resolved_ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Top of Bind outgoing connection
|
||||||
|
IPToStr(localaddr, sizeof(localaddr), &sock->LocalIP);
|
||||||
|
|
||||||
|
// In the case of first TCP/IP connection, save the local IP address
|
||||||
|
if (additional_connect == false) {
|
||||||
|
c->Session->LocalIP_CacheForNextConnect = sock->LocalIP;
|
||||||
|
Debug("ClientConnectGetSocket(): Saved local IP address %r for future connections.\n", &sock->LocalIP);
|
||||||
|
}
|
||||||
|
// In the case of second and subsequent TCP/IP connections, check to see whether or not the local IP address is same as the first one
|
||||||
|
else {
|
||||||
|
if (memcmp(sock->LocalIP.address, c->Session->LocalIP_CacheForNextConnect.address, sizeof(sock->LocalIP.address)) == 0) {
|
||||||
|
Debug("ClientConnectGetSocket(): Binded local IP address %s OK\n", localaddr);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Debug("ClientConnectGetSocket(): Binded local IP address %s NG\n", localaddr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Bottom of Bind outgoing connection
|
||||||
|
|
||||||
return sock;
|
return sock;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6409,15 +6498,41 @@ UINT ProxyCodeToCedar(UINT code)
|
|||||||
// TCP connection function
|
// TCP connection function
|
||||||
SOCK *TcpConnectEx3(char *hostname, UINT port, UINT timeout, bool *cancel_flag, void *hWnd, bool no_nat_t, UINT *nat_t_error_code, bool try_start_ssl, IP *ret_ip)
|
SOCK *TcpConnectEx3(char *hostname, UINT port, UINT timeout, bool *cancel_flag, void *hWnd, bool no_nat_t, UINT *nat_t_error_code, bool try_start_ssl, IP *ret_ip)
|
||||||
{
|
{
|
||||||
return TcpConnectEx4(hostname, port, timeout, cancel_flag, hWnd, no_nat_t, nat_t_error_code, try_start_ssl, NULL, NULL, NULL, ret_ip);
|
return BindTcpConnectEx3(BIND_LOCALIP_NULL, BIND_LOCALPORT_NULL, hostname, port, timeout, cancel_flag, hWnd, no_nat_t, nat_t_error_code, try_start_ssl, ret_ip);
|
||||||
}
|
}
|
||||||
SOCK *TcpConnectEx4(char *hostname, UINT port, UINT timeout, bool *cancel_flag, void *hWnd, bool no_nat_t, UINT *nat_t_error_code, bool try_start_ssl, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip)
|
|
||||||
|
SOCK *TcpConnectEx4(char * hostname, UINT port, UINT timeout, bool * cancel_flag, void *hWnd, bool no_nat_t, UINT *nat_t_error_code, bool try_start_ssl, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip)
|
||||||
|
{
|
||||||
|
return BindTcpConnectEx4(BIND_LOCALIP_NULL, BIND_LOCALPORT_NULL, hostname, port, timeout, cancel_flag, hWnd, no_nat_t, nat_t_error_code, try_start_ssl, ssl_option, ssl_err, hint_str, ret_ip);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Connect with TCP/IP
|
||||||
|
SOCK *TcpIpConnectEx(char *hostname, UINT port, bool *cancel_flag, void *hWnd, UINT *nat_t_error_code, bool no_nat_t, bool try_start_ssl, IP *ret_ip)
|
||||||
|
{
|
||||||
|
return BindTcpIpConnectEx(BIND_LOCALIP_NULL, BIND_LOCALPORT_NULL, hostname, port, cancel_flag, hWnd, nat_t_error_code, no_nat_t, try_start_ssl, ret_ip);
|
||||||
|
}
|
||||||
|
|
||||||
|
SOCK *TcpIpConnectEx2(char * hostname, UINT port, bool * cancel_flag, void *hWnd, UINT *nat_t_error_code, bool no_nat_t, bool try_start_ssl, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip)
|
||||||
|
{
|
||||||
|
return BindTcpIpConnectEx2(BIND_LOCALIP_NULL, BIND_LOCALPORT_NULL, hostname, port, cancel_flag, hWnd, nat_t_error_code, no_nat_t, try_start_ssl, ssl_option, ssl_err, hint_str, ret_ip);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TCP connection function
|
||||||
|
//SOCK* TcpConnectEx3(char* hostname, UINT port, UINT timeout, bool* cancel_flag, void* hWnd, bool no_nat_t, UINT* nat_t_error_code, bool try_start_ssl, IP* ret_ip)
|
||||||
|
SOCK *BindTcpConnectEx3(IP *localIP, UINT localport, char *hostname, UINT port, UINT timeout, bool *cancel_flag, void *hWnd, bool no_nat_t, UINT *nat_t_error_code, bool try_start_ssl, IP *ret_ip)
|
||||||
|
{
|
||||||
|
// return TcpConnectEx4(hostname, port, timeout, cancel_flag, hWnd, no_nat_t, nat_t_error_code, try_start_ssl, NULL, NULL, NULL, ret_ip);
|
||||||
|
return BindTcpConnectEx4(localIP, localport, hostname, port, timeout, cancel_flag, hWnd, no_nat_t, nat_t_error_code, try_start_ssl, NULL, NULL, NULL, ret_ip);
|
||||||
|
}
|
||||||
|
//SOCK *TcpConnectEx4(char *hostname, UINT port, UINT timeout, bool *cancel_flag, void *hWnd, bool no_nat_t, UINT *nat_t_error_code, bool try_start_ssl, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip)
|
||||||
|
SOCK *BindTcpConnectEx4(IP *localIP, UINT localport, char *hostname, UINT port, UINT timeout, bool *cancel_flag, void *hWnd, bool no_nat_t, UINT *nat_t_error_code, bool try_start_ssl, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip)
|
||||||
{
|
{
|
||||||
#ifdef OS_WIN32
|
#ifdef OS_WIN32
|
||||||
if (hWnd == NULL)
|
if (hWnd == NULL)
|
||||||
{
|
{
|
||||||
#endif // OS_WIN32
|
#endif // OS_WIN32
|
||||||
return ConnectEx5(hostname, port, timeout, cancel_flag, (no_nat_t ? NULL : VPN_RUDP_SVC_NAME), nat_t_error_code, try_start_ssl, true, ssl_option, ssl_err, hint_str, ret_ip);
|
// return ConnectEx5(hostname, port, timeout, cancel_flag, (no_nat_t ? NULL : VPN_RUDP_SVC_NAME), nat_t_error_code, try_start_ssl, true, ssl_option, ssl_err, hint_str, ret_ip);
|
||||||
|
return BindConnectEx5(localIP, localport, hostname, port, timeout, cancel_flag, (no_nat_t ? NULL : VPN_RUDP_SVC_NAME), nat_t_error_code, try_start_ssl, true, ssl_option, ssl_err, hint_str, ret_ip);
|
||||||
#ifdef OS_WIN32
|
#ifdef OS_WIN32
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -6428,11 +6543,14 @@ SOCK *TcpConnectEx4(char *hostname, UINT port, UINT timeout, bool *cancel_flag,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Connect with TCP/IP
|
// Connect with TCP/IP
|
||||||
SOCK *TcpIpConnectEx(char *hostname, UINT port, bool *cancel_flag, void *hWnd, UINT *nat_t_error_code, bool no_nat_t, bool try_start_ssl, IP *ret_ip)
|
//SOCK *TcpIpConnectEx(char *hostname, UINT port, bool *cancel_flag, void *hWnd, UINT *nat_t_error_code, bool no_nat_t, bool try_start_ssl, IP *ret_ip)
|
||||||
|
SOCK *BindTcpIpConnectEx(IP *localIP, UINT localport, char *hostname, UINT port, bool *cancel_flag, void *hWnd, UINT *nat_t_error_code, bool no_nat_t, bool try_start_ssl, IP *ret_ip)
|
||||||
{
|
{
|
||||||
return TcpIpConnectEx2(hostname, port, cancel_flag, hWnd, nat_t_error_code, no_nat_t, try_start_ssl, NULL, NULL, NULL, ret_ip);
|
// return TcpIpConnectEx2(hostname, port, cancel_flag, hWnd, nat_t_error_code, no_nat_t, try_start_ssl, NULL, NULL, NULL, ret_ip);
|
||||||
|
return BindTcpIpConnectEx2(localIP, localport, hostname, port, cancel_flag, hWnd, nat_t_error_code, no_nat_t, try_start_ssl, NULL, NULL, NULL, ret_ip);
|
||||||
}
|
}
|
||||||
SOCK *TcpIpConnectEx2(char *hostname, UINT port, bool *cancel_flag, void *hWnd, UINT *nat_t_error_code, bool no_nat_t, bool try_start_ssl, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip)
|
//SOCK *TcpIpConnectEx2(char *hostname, UINT port, bool *cancel_flag, void *hWnd, UINT *nat_t_error_code, bool no_nat_t, bool try_start_ssl, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip)
|
||||||
|
SOCK *BindTcpIpConnectEx2(IP *localIP, UINT localport, char *hostname, UINT port, bool *cancel_flag, void *hWnd, UINT *nat_t_error_code, bool no_nat_t, bool try_start_ssl, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip)
|
||||||
{
|
{
|
||||||
SOCK *s = NULL;
|
SOCK *s = NULL;
|
||||||
UINT dummy_int = 0;
|
UINT dummy_int = 0;
|
||||||
@ -6447,7 +6565,8 @@ SOCK *TcpIpConnectEx2(char *hostname, UINT port, bool *cancel_flag, void *hWnd,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
s = TcpConnectEx4(hostname, port, 0, cancel_flag, hWnd, no_nat_t, nat_t_error_code, try_start_ssl, ssl_option, ssl_err, hint_str, ret_ip);
|
// s = TcpConnectEx4(hostname, port, 0, cancel_flag, hWnd, no_nat_t, nat_t_error_code, try_start_ssl, ssl_option, ssl_err, hint_str, ret_ip);
|
||||||
|
s = BindTcpConnectEx4(localIP, localport, hostname, port, 0, cancel_flag, hWnd, no_nat_t, nat_t_error_code, try_start_ssl, ssl_option, ssl_err, hint_str, ret_ip);
|
||||||
if (s == NULL)
|
if (s == NULL)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -6654,7 +6773,6 @@ PACK *PackLoginWithOpenVPNCertificate(char *hubname, char *username, X *x)
|
|||||||
|
|
||||||
p = NewPack();
|
p = NewPack();
|
||||||
PackAddStr(p, "method", "login");
|
PackAddStr(p, "method", "login");
|
||||||
PackAddStr(p, "hubname", hubname);
|
|
||||||
|
|
||||||
if (IsEmptyStr(username))
|
if (IsEmptyStr(username))
|
||||||
{
|
{
|
||||||
@ -6663,12 +6781,26 @@ PACK *PackLoginWithOpenVPNCertificate(char *hubname, char *username, X *x)
|
|||||||
FreePack(p);
|
FreePack(p);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
UniToStr(cn_username, sizeof(cn_username), x->subject_name->CommonName);
|
UniToStr(cn_username, sizeof(cn_username), x->subject_name->CommonName);
|
||||||
PackAddStr(p, "username", cn_username);
|
|
||||||
|
if (strchr(cn_username, '@') != NULL)
|
||||||
|
|
||||||
|
{
|
||||||
|
PackAddStr(p, "username", strtok(cn_username, "@"));
|
||||||
|
PackAddStr(p, "hubname", strtok(NULL, ""));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PackAddStr(p, "username", cn_username);
|
||||||
|
PackAddStr(p, "hubname", hubname);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PackAddStr(p, "username", username);
|
PackAddStr(p, "username", username);
|
||||||
|
PackAddStr(p, "hubname", hubname);
|
||||||
}
|
}
|
||||||
|
|
||||||
PackAddInt(p, "authtype", AUTHTYPE_OPENVPN_CERT);
|
PackAddInt(p, "authtype", AUTHTYPE_OPENVPN_CERT);
|
||||||
|
@ -115,6 +115,11 @@ bool ClientConnect(CONNECTION *c);
|
|||||||
SOCK *ClientConnectToServer(CONNECTION *c);
|
SOCK *ClientConnectToServer(CONNECTION *c);
|
||||||
SOCK *TcpIpConnectEx(char *hostname, UINT port, bool *cancel_flag, void *hWnd, UINT *nat_t_error_code, bool no_nat_t, bool try_start_ssl, IP *ret_ip);
|
SOCK *TcpIpConnectEx(char *hostname, UINT port, bool *cancel_flag, void *hWnd, UINT *nat_t_error_code, bool no_nat_t, bool try_start_ssl, IP *ret_ip);
|
||||||
SOCK *TcpIpConnectEx2(char *hostname, UINT port, bool *cancel_flag, void *hWnd, UINT *nat_t_error_code, bool no_nat_t, bool try_start_ssl, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip);
|
SOCK *TcpIpConnectEx2(char *hostname, UINT port, bool *cancel_flag, void *hWnd, UINT *nat_t_error_code, bool no_nat_t, bool try_start_ssl, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip);
|
||||||
|
|
||||||
|
// New function named with prefix "Bind" binds outgoing connection to a specific address. New one is wrapped in original one.
|
||||||
|
SOCK* BindTcpIpConnectEx(IP *localIP, UINT localport, char *hostname, UINT port, bool *cancel_flag, void *hWnd, UINT *nat_t_error_code, bool no_nat_t, bool try_start_ssl, IP *ret_ip);
|
||||||
|
SOCK* BindTcpIpConnectEx2(IP *localIP, UINT localport, char *hostname, UINT port, bool *cancel_flag, void *hWnd, UINT *nat_t_error_code, bool no_nat_t, bool try_start_ssl, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip);
|
||||||
|
|
||||||
bool ClientUploadSignature(SOCK *s);
|
bool ClientUploadSignature(SOCK *s);
|
||||||
bool ClientDownloadHello(CONNECTION *c, SOCK *s);
|
bool ClientDownloadHello(CONNECTION *c, SOCK *s);
|
||||||
bool ServerDownloadSignature(CONNECTION *c, char **error_detail_str);
|
bool ServerDownloadSignature(CONNECTION *c, char **error_detail_str);
|
||||||
@ -124,6 +129,10 @@ SOCK *ClientConnectGetSocket(CONNECTION *c, bool additional_connect);
|
|||||||
SOCK *TcpConnectEx3(char *hostname, UINT port, UINT timeout, bool *cancel_flag, void *hWnd, bool no_nat_t, UINT *nat_t_error_code, bool try_start_ssl, IP *ret_ip);
|
SOCK *TcpConnectEx3(char *hostname, UINT port, UINT timeout, bool *cancel_flag, void *hWnd, bool no_nat_t, UINT *nat_t_error_code, bool try_start_ssl, IP *ret_ip);
|
||||||
SOCK *TcpConnectEx4(char *hostname, UINT port, UINT timeout, bool *cancel_flag, void *hWnd, bool no_nat_t, UINT *nat_t_error_code, bool try_start_ssl, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip);
|
SOCK *TcpConnectEx4(char *hostname, UINT port, UINT timeout, bool *cancel_flag, void *hWnd, bool no_nat_t, UINT *nat_t_error_code, bool try_start_ssl, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip);
|
||||||
|
|
||||||
|
// New function named with prefix "Bind" binds outgoing connection to a specific address. New one is wrapped in original one.
|
||||||
|
SOCK* BindTcpConnectEx3(IP *localIP, UINT localport, char *hostname, UINT port, UINT timeout, bool *cancel_flag, void *hWnd, bool no_nat_t, UINT *nat_t_error_code, bool try_start_ssl, IP *ret_ip);
|
||||||
|
SOCK* BindTcpConnectEx4(IP *localIP, UINT localport, char *hostname, UINT port, UINT timeout, bool *cancel_flag, void *hWnd, bool no_nat_t, UINT *nat_t_error_code, bool try_start_ssl, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip);
|
||||||
|
|
||||||
UINT ProxyCodeToCedar(UINT code);
|
UINT ProxyCodeToCedar(UINT code);
|
||||||
|
|
||||||
void InitProtocol();
|
void InitProtocol();
|
||||||
|
@ -41,7 +41,10 @@ typedef struct SETTING
|
|||||||
char HubName[MAX_HUBNAME_LEN + 1]; // HUB name
|
char HubName[MAX_HUBNAME_LEN + 1]; // HUB name
|
||||||
UCHAR HashedPassword[SHA1_SIZE]; // Password
|
UCHAR HashedPassword[SHA1_SIZE]; // Password
|
||||||
CLIENT_OPTION ClientOption; // Client Option
|
CLIENT_OPTION ClientOption; // Client Option
|
||||||
UCHAR Reserved[10240 - sizeof(UINT) * 8 - SHA1_SIZE - HTTP_CUSTOM_HEADER_MAX_SIZE - MAX_HOST_NAME_LEN - 1]; // Reserved area
|
|
||||||
|
#define SRC_SIZE (sizeof(IP) + sizeof(UINT)) // Source IP address & port number for outgoing connection
|
||||||
|
// UCHAR Reserved[10240 - sizeof(UINT) * 8 - SHA1_SIZE - HTTP_CUSTOM_HEADER_MAX_SIZE - MAX_HOST_NAME_LEN - 1]; // Reserved area
|
||||||
|
UCHAR Reserved[10240 - sizeof(UINT) * 8 - SHA1_SIZE - HTTP_CUSTOM_HEADER_MAX_SIZE - MAX_HOST_NAME_LEN - 1 - SRC_SIZE]; // Reserved area
|
||||||
} SETTING;
|
} SETTING;
|
||||||
|
|
||||||
// Structure declaration
|
// Structure declaration
|
||||||
|
@ -113,9 +113,12 @@ bool SwCompileSfx(LIST *o, wchar_t *dst_filename)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get the API related to the resource editing
|
// Get the API related to the resource editing
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
|
||||||
_BeginUpdateResourceW = (HANDLE (__stdcall *)(LPCWSTR,UINT))GetProcAddress(hKernel32, "BeginUpdateResourceW");
|
_BeginUpdateResourceW = (HANDLE (__stdcall *)(LPCWSTR,UINT))GetProcAddress(hKernel32, "BeginUpdateResourceW");
|
||||||
_UpdateResourceA = (UINT (__stdcall *)(HANDLE,LPCSTR,LPCSTR,WORD,LPVOID,DWORD))GetProcAddress(hKernel32, "UpdateResourceA");
|
_UpdateResourceA = (UINT (__stdcall *)(HANDLE,LPCSTR,LPCSTR,WORD,LPVOID,DWORD))GetProcAddress(hKernel32, "UpdateResourceA");
|
||||||
_EndUpdateResourceW = (UINT (__stdcall *)(HANDLE,UINT))GetProcAddress(hKernel32, "EndUpdateResourceW");
|
_EndUpdateResourceW = (UINT (__stdcall *)(HANDLE,UINT))GetProcAddress(hKernel32, "EndUpdateResourceW");
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
|
||||||
if (_BeginUpdateResourceW != NULL && _UpdateResourceA != NULL && _EndUpdateResourceW != NULL)
|
if (_BeginUpdateResourceW != NULL && _UpdateResourceA != NULL && _EndUpdateResourceW != NULL)
|
||||||
{
|
{
|
||||||
@ -647,7 +650,10 @@ UINT SWExec()
|
|||||||
bool is_datafile_exists = false;
|
bool is_datafile_exists = false;
|
||||||
|
|
||||||
// Examine whether DATAFILE resources are stored in setup.exe that is currently running
|
// Examine whether DATAFILE resources are stored in setup.exe that is currently running
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
|
||||||
EnumResourceNamesA(NULL, SW_SFX_RESOURCE_TYPE, SwEnumResourceNamesProc, (LONG_PTR)(&is_datafile_exists));
|
EnumResourceNamesA(NULL, SW_SFX_RESOURCE_TYPE, SwEnumResourceNamesProc, (LONG_PTR)(&is_datafile_exists));
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
|
||||||
if (is_datafile_exists)
|
if (is_datafile_exists)
|
||||||
{
|
{
|
||||||
|
@ -93,9 +93,12 @@ void SuDeleteGarbageInfsInner()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
|
||||||
_SetupUninstallOEMInfA =
|
_SetupUninstallOEMInfA =
|
||||||
(UINT (__stdcall *)(PCSTR,DWORD,PVOID))
|
(UINT (__stdcall *)(PCSTR,DWORD,PVOID))
|
||||||
GetProcAddress(hSetupApiDll, "SetupUninstallOEMInfA");
|
GetProcAddress(hSetupApiDll, "SetupUninstallOEMInfA");
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
|
||||||
if (_SetupUninstallOEMInfA != NULL)
|
if (_SetupUninstallOEMInfA != NULL)
|
||||||
{
|
{
|
||||||
@ -750,11 +753,45 @@ LIST *SuGetAdapterList(SU *u)
|
|||||||
for (i = 0;i < u->AdapterInfoList.NumAdapters;i++)
|
for (i = 0;i < u->AdapterInfoList.NumAdapters;i++)
|
||||||
{
|
{
|
||||||
SL_ADAPTER_INFO *info = &u->AdapterInfoList.Adapters[i];
|
SL_ADAPTER_INFO *info = &u->AdapterInfoList.Adapters[i];
|
||||||
SU_ADAPTER_LIST *a = SuAdapterInfoToAdapterList(info);
|
|
||||||
|
|
||||||
if (a != NULL)
|
if (IsEmptyStr(info->FriendlyName))
|
||||||
{
|
{
|
||||||
Add(ret, a);
|
// Some NetAdapterCx drivers doesn't report the FriendlyName in the kernel mode.
|
||||||
|
// So we attempt to obtain the DriverDesc string from NetCfg registry key alternatively.
|
||||||
|
char regkey[MAX_PATH] = {0};
|
||||||
|
char tmp[MAX_PATH] = {0};
|
||||||
|
char adapter_guid[MAX_PATH] = {0};
|
||||||
|
|
||||||
|
UniToStr(adapter_guid, sizeof(adapter_guid), info->AdapterId + StrLen(SL_ADAPTER_ID_PREFIX));
|
||||||
|
|
||||||
|
if (GetClassRegKeyWin32(regkey, sizeof(regkey), tmp, sizeof(tmp), adapter_guid))
|
||||||
|
{
|
||||||
|
char *driver_desc = MsRegReadStrEx2(REG_LOCAL_MACHINE, regkey, "DriverDesc", false, true);
|
||||||
|
|
||||||
|
if (driver_desc != NULL)
|
||||||
|
{
|
||||||
|
StrCpy(info->FriendlyName, sizeof(info->FriendlyName), driver_desc);
|
||||||
|
Free(driver_desc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
SU_ADAPTER_LIST *a = SuAdapterInfoToAdapterList(info);
|
||||||
|
|
||||||
|
char macstr[128] = {0};
|
||||||
|
BinToStr(macstr, sizeof(macstr), info->MacAddress, sizeof(info->MacAddress));
|
||||||
|
|
||||||
|
if (a != NULL)
|
||||||
|
{
|
||||||
|
// Debug("SU: Adapter %u (OK): ID=%S, MAC=%s, FriendlyName=%s\n", i, info->AdapterId, macstr, info->FriendlyName);
|
||||||
|
|
||||||
|
Add(ret, a);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Debug("SU: Adapter %u (NG): ID=%S, MAC=%s, FriendlyName=%s\n", i, info->AdapterId, macstr, info->FriendlyName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -824,7 +861,8 @@ SU_ADAPTER_LIST *SuAdapterInfoToAdapterList(SL_ADAPTER_INFO *info)
|
|||||||
Copy(&t.Info, info, sizeof(SL_ADAPTER_INFO));
|
Copy(&t.Info, info, sizeof(SL_ADAPTER_INFO));
|
||||||
|
|
||||||
UniToStr(tmp, sizeof(tmp), info->AdapterId);
|
UniToStr(tmp, sizeof(tmp), info->AdapterId);
|
||||||
if (IsEmptyStr(tmp) || IsEmptyStr(info->FriendlyName) || StartWith(tmp, SL_ADAPTER_ID_PREFIX) == false)
|
// Make the NIC appear in the "Local Bridge Settings" list regardless of a NULL character consisted in "FriendlyName".
|
||||||
|
if (IsEmptyStr(tmp) || /* IsEmptyStr(info->FriendlyName) || */ StartWith(tmp, SL_ADAPTER_ID_PREFIX) == false)
|
||||||
{
|
{
|
||||||
// Name is invalid
|
// Name is invalid
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -609,6 +609,24 @@ void SessionMain(SESSION *s)
|
|||||||
WHERE;
|
WHERE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If all the specified number of tcp connections are not alive continuously, then terminate the session.
|
||||||
|
UINT num_tcp_conn = LIST_NUM(s->Connection->Tcp->TcpSockList);
|
||||||
|
UINT max_conn = s->ClientOption->MaxConnection;
|
||||||
|
|
||||||
|
if ((s->CurrentConnectionEstablishTime +
|
||||||
|
(UINT64)(num_tcp_conn * s->ClientOption->AdditionalConnectionInterval * 1000 * 2 + CONNECTING_TIMEOUT * 2))
|
||||||
|
<= Tick64())
|
||||||
|
{
|
||||||
|
if (s->ClientOption->BindLocalPort != 0 || num_tcp_conn == 0)
|
||||||
|
{
|
||||||
|
timeouted = true;
|
||||||
|
WHERE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Debug("SessionMain(): The number of TCP connections short... Num_Tcp_Conn=%d Max_Conn=%d Curr_Conn_Time=%llu Tick64=%llu\n"
|
||||||
|
// , num_tcp_conn, max_conn, s->CurrentConnectionEstablishTime, Tick64());
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1430,6 +1448,7 @@ void ClientThread(THREAD *t, void *param)
|
|||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
Zero(&s->ServerIP_CacheForNextConnect, sizeof(IP));
|
Zero(&s->ServerIP_CacheForNextConnect, sizeof(IP));
|
||||||
|
Zero(&s->LocalIP_CacheForNextConnect, sizeof(IP)); // Assigned by first outgoing connection
|
||||||
Zero(s->UnderlayProtocol, sizeof(s->UnderlayProtocol));
|
Zero(s->UnderlayProtocol, sizeof(s->UnderlayProtocol));
|
||||||
Zero(s->ProtocolDetails, sizeof(s->ProtocolDetails));
|
Zero(s->ProtocolDetails, sizeof(s->ProtocolDetails));
|
||||||
|
|
||||||
|
@ -130,6 +130,7 @@ struct SESSION
|
|||||||
UCHAR Padding[2];
|
UCHAR Padding[2];
|
||||||
|
|
||||||
IP ServerIP_CacheForNextConnect; // Server IP, cached for next connect
|
IP ServerIP_CacheForNextConnect; // Server IP, cached for next connect
|
||||||
|
IP LocalIP_CacheForNextConnect; // Local IP, cached for next connect (2nd and subsequent), assigned by first outgoing connection
|
||||||
|
|
||||||
UINT64 CreatedTime; // Creation date and time
|
UINT64 CreatedTime; // Creation date and time
|
||||||
UINT64 LastCommTime; // Last communication date and time
|
UINT64 LastCommTime; // Last communication date and time
|
||||||
|
@ -9340,20 +9340,75 @@ UINT ServeDhcpDiscoverEx(VH *v, UCHAR *mac, UINT request_ip, bool is_static_ip)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UINT ret = 0;
|
||||||
DHCP_LEASE *d = SearchDhcpLeaseByIp(v, request_ip);
|
DHCP_LEASE *d = SearchDhcpLeaseByIp(v, request_ip);
|
||||||
|
|
||||||
if (d != NULL)
|
if (d != NULL)
|
||||||
{
|
{
|
||||||
// The requested IP address is used already
|
// If an entry for the same IP address already exists,
|
||||||
return 0;
|
// check whether it is a request from the same MAC address
|
||||||
|
if (Cmp(mac, d->MacAddress, 6) == 0)
|
||||||
|
{
|
||||||
|
// Examine whether the specified IP address is within the range of assignment
|
||||||
|
if (Endian32(v->DhcpIpStart) > Endian32(request_ip) ||
|
||||||
|
Endian32(request_ip) > Endian32(v->DhcpIpEnd))
|
||||||
|
{
|
||||||
|
// Accept if within the range
|
||||||
|
ret = request_ip;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Duplicated IPV4 address found. The DHCP server replies to DHCPREQUEST with DHCP NAK.
|
||||||
|
char ipstr[MAX_HOST_NAME_LEN + 1] = { 0 };
|
||||||
|
char macstr[128] = { 0 };
|
||||||
|
IPToStr32(ipstr, sizeof(ipstr), request_ip);
|
||||||
|
BinToStr(macstr, sizeof(macstr), d->MacAddress, 6);
|
||||||
|
Debug("Virtual DHC Server: Duplicated IP address detected. Static IP: %s, Used by MAC:%s\n", ipstr, macstr);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
// For static IP, the requested IP address must NOT be within the range of the DHCP pool
|
|
||||||
if (Endian32(request_ip) < Endian32(v->DhcpIpStart) || Endian32(request_ip) > Endian32(v->DhcpIpEnd))
|
|
||||||
{
|
{
|
||||||
return request_ip;
|
// Examine whether the specified IP address is within the range of assignment
|
||||||
|
if (Endian32(v->DhcpIpStart) > Endian32(request_ip) ||
|
||||||
|
Endian32(request_ip) > Endian32(v->DhcpIpEnd))
|
||||||
|
{
|
||||||
|
// Accept if within the range
|
||||||
|
ret = request_ip;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Propose an IP in the range since it's a Discover although It is out of range
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ret == 0)
|
||||||
|
{
|
||||||
|
// If there is any entry with the same MAC address
|
||||||
|
// that are already registered, use it with priority
|
||||||
|
DHCP_LEASE *d = SearchDhcpLeaseByMac(v, mac);
|
||||||
|
|
||||||
|
if (d != NULL)
|
||||||
|
{
|
||||||
|
// Examine whether the found IP address is in the allocation region
|
||||||
|
if (Endian32(v->DhcpIpStart) > Endian32(d->IpAddress) ||
|
||||||
|
Endian32(d->IpAddress) > Endian32(v->DhcpIpEnd))
|
||||||
|
{
|
||||||
|
// Use the IP address if it's found within the range
|
||||||
|
ret = d->IpAddress;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ret == 0)
|
||||||
|
{
|
||||||
|
// For static IP, the requested IP address must NOT be within the range of the DHCP pool
|
||||||
|
if (Endian32(v->DhcpIpStart) > Endian32(request_ip) ||
|
||||||
|
Endian32(request_ip) > Endian32(v->DhcpIpEnd))
|
||||||
|
{
|
||||||
|
ret = request_ip;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Take an appropriate IP addresses that can be assigned newly
|
// Take an appropriate IP addresses that can be assigned newly
|
||||||
@ -9710,36 +9765,40 @@ void VirtualDhcpServer(VH *v, PKT *p)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// There is no IP address that can be provided
|
// Reply of DHCP_REQUEST must be either DHCP_ACK or DHCP_NAK.
|
||||||
DHCP_OPTION_LIST ret;
|
if (opt->Opcode == DHCP_REQUEST)
|
||||||
LIST *o;
|
|
||||||
Zero(&ret, sizeof(ret));
|
|
||||||
|
|
||||||
ret.Opcode = DHCP_NACK;
|
|
||||||
ret.ServerAddress = v->HostIP;
|
|
||||||
StrCpy(ret.DomainName, sizeof(ret.DomainName), v->DhcpDomain);
|
|
||||||
ret.SubnetMask = v->DhcpMask;
|
|
||||||
|
|
||||||
// Build the DHCP option
|
|
||||||
o = BuildDhcpOption(&ret);
|
|
||||||
if (o != NULL)
|
|
||||||
{
|
{
|
||||||
BUF *b = BuildDhcpOptionsBuf(o);
|
// There is no IP address that can be provided
|
||||||
if (b != NULL)
|
DHCP_OPTION_LIST ret;
|
||||||
{
|
LIST *o;
|
||||||
UINT dest_ip = p->L3.IPv4Header->SrcIP;
|
Zero(&ret, sizeof(ret));
|
||||||
if (dest_ip == 0)
|
|
||||||
{
|
|
||||||
dest_ip = 0xffffffff;
|
|
||||||
}
|
|
||||||
// Transmission
|
|
||||||
VirtualDhcpSend(v, tran_id, dest_ip, Endian16(p->L4.UDPHeader->SrcPort),
|
|
||||||
ip, dhcp->ClientMacAddress, b, dhcp->HardwareType, dhcp->HardwareAddressSize);
|
|
||||||
|
|
||||||
// Release the memory
|
ret.Opcode = DHCP_NACK;
|
||||||
FreeBuf(b);
|
ret.ServerAddress = v->HostIP;
|
||||||
|
StrCpy(ret.DomainName, sizeof(ret.DomainName), v->DhcpDomain);
|
||||||
|
ret.SubnetMask = v->DhcpMask;
|
||||||
|
|
||||||
|
// Build the DHCP option
|
||||||
|
o = BuildDhcpOption(&ret);
|
||||||
|
if (o != NULL)
|
||||||
|
{
|
||||||
|
BUF *b = BuildDhcpOptionsBuf(o);
|
||||||
|
if (b != NULL)
|
||||||
|
{
|
||||||
|
UINT dest_ip = p->L3.IPv4Header->SrcIP;
|
||||||
|
if (dest_ip == 0)
|
||||||
|
{
|
||||||
|
dest_ip = 0xffffffff;
|
||||||
|
}
|
||||||
|
// Transmission
|
||||||
|
VirtualDhcpSend(v, tran_id, dest_ip, Endian16(p->L4.UDPHeader->SrcPort),
|
||||||
|
ip, dhcp->ClientMacAddress, b, dhcp->HardwareType, dhcp->HardwareAddressSize);
|
||||||
|
|
||||||
|
// Release the memory
|
||||||
|
FreeBuf(b);
|
||||||
|
}
|
||||||
|
FreeDhcpOptions(o);
|
||||||
}
|
}
|
||||||
FreeDhcpOptions(o);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -903,7 +903,10 @@ void ShowWizard(HWND hWndParent, WIZARD *w, UINT start_id)
|
|||||||
h.phpage = (HPROPSHEETPAGE *)pages_array;
|
h.phpage = (HPROPSHEETPAGE *)pages_array;
|
||||||
h.pszbmHeader = MAKEINTRESOURCEW(w->Bitmap);
|
h.pszbmHeader = MAKEINTRESOURCEW(w->Bitmap);
|
||||||
h.pszCaption = w->Caption;
|
h.pszCaption = w->Caption;
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
|
||||||
h.pfnCallback = WizardDlgProc;
|
h.pfnCallback = WizardDlgProc;
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
|
||||||
start_page = GetWizardPage(w, start_id);
|
start_page = GetWizardPage(w, start_id);
|
||||||
if (start_page != NULL)
|
if (start_page != NULL)
|
||||||
@ -3487,7 +3490,10 @@ HWND SearchWindow(wchar_t *caption)
|
|||||||
p.caption = caption;
|
p.caption = caption;
|
||||||
p.hWndFound = NULL;
|
p.hWndFound = NULL;
|
||||||
|
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
|
||||||
EnumWindows(SearchWindowEnumProc, (LPARAM)&p);
|
EnumWindows(SearchWindowEnumProc, (LPARAM)&p);
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
|
||||||
return p.hWndFound;
|
return p.hWndFound;
|
||||||
}
|
}
|
||||||
|
@ -313,8 +313,16 @@ BUF *WpcDataEntryToBuf(WPC_ENTRY *e)
|
|||||||
}
|
}
|
||||||
|
|
||||||
data_size = e->Size + 4096;
|
data_size = e->Size + 4096;
|
||||||
data = Malloc(data_size);
|
data = ZeroMalloc(data_size);
|
||||||
size = DecodeSafe64(data, e->Data, e->Size);
|
|
||||||
|
if (e->Size >= 1)
|
||||||
|
{
|
||||||
|
size = DecodeSafe64(data, e->Data, e->Size);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
b = NewBuf();
|
b = NewBuf();
|
||||||
WriteBuf(b, data, size);
|
WriteBuf(b, data, size);
|
||||||
|
@ -712,7 +712,8 @@ UINT RsaPublicSize(K *k)
|
|||||||
// Hash a pointer to a 32-bit
|
// Hash a pointer to a 32-bit
|
||||||
UINT HashPtrToUINT(void *p)
|
UINT HashPtrToUINT(void *p)
|
||||||
{
|
{
|
||||||
UCHAR hash_data[MD5_SIZE];
|
UCHAR hash_data[SHA256_SIZE];
|
||||||
|
UCHAR hash_src[CANARY_RAND_SIZE + sizeof(void *)];
|
||||||
UINT ret;
|
UINT ret;
|
||||||
// Validate arguments
|
// Validate arguments
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
@ -720,7 +721,11 @@ UINT HashPtrToUINT(void *p)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Md5(hash_data, &p, sizeof(p));
|
Zero(hash_src, sizeof(hash_src));
|
||||||
|
Copy(hash_src + 0, GetCanaryRand(CANARY_RAND_ID_PTR_KEY_HASH), CANARY_RAND_SIZE);
|
||||||
|
Copy(hash_src + CANARY_RAND_SIZE, p, sizeof(void *));
|
||||||
|
|
||||||
|
Sha2_256(hash_data, hash_src, sizeof(hash_src));
|
||||||
|
|
||||||
Copy(&ret, hash_data, sizeof(ret));
|
Copy(&ret, hash_data, sizeof(ret));
|
||||||
|
|
||||||
|
@ -2124,6 +2124,24 @@ IO *FileOpenEx(char *name, bool write_mode, bool read_lock)
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Replace the specified character in the string with a new character
|
||||||
|
wchar_t *UniReplaceCharW(wchar_t *src, UINT size, wchar_t c, wchar_t newc) {
|
||||||
|
if (src == NULL)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
for (; *src; src++, size -= sizeof(wchar_t)) {
|
||||||
|
if (size < sizeof(wchar_t)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (*src == c) {
|
||||||
|
*src = newc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (wchar_t *)src;
|
||||||
|
}
|
||||||
|
|
||||||
IO *FileOpenExW(wchar_t *name, bool write_mode, bool read_lock)
|
IO *FileOpenExW(wchar_t *name, bool write_mode, bool read_lock)
|
||||||
{
|
{
|
||||||
wchar_t tmp[MAX_SIZE];
|
wchar_t tmp[MAX_SIZE];
|
||||||
@ -2140,9 +2158,12 @@ IO *FileOpenExW(wchar_t *name, bool write_mode, bool read_lock)
|
|||||||
IO *o = ZeroMalloc(sizeof(IO));
|
IO *o = ZeroMalloc(sizeof(IO));
|
||||||
name++;
|
name++;
|
||||||
UniStrCpy(o->NameW, sizeof(o->NameW), name);
|
UniStrCpy(o->NameW, sizeof(o->NameW), name);
|
||||||
|
#ifdef OS_WIN32
|
||||||
|
UniReplaceCharW(o->NameW, sizeof(o->NameW), L'\\', L'/'); // Path separator "/" is used.
|
||||||
|
#endif // OS_WIN32
|
||||||
UniToStr(o->Name, sizeof(o->Name), o->NameW);
|
UniToStr(o->Name, sizeof(o->Name), o->NameW);
|
||||||
o->HamMode = true;
|
o->HamMode = true;
|
||||||
o->HamBuf = ReadHamcoreW(name);
|
o->HamBuf = ReadHamcoreW(o->NameW);
|
||||||
if (o->HamBuf == NULL)
|
if (o->HamBuf == NULL)
|
||||||
{
|
{
|
||||||
Free(o);
|
Free(o);
|
||||||
|
@ -2100,7 +2100,31 @@ void AbortExitEx(char *msg)
|
|||||||
f = fopen("abort_error_log.txt", "w");
|
f = fopen("abort_error_log.txt", "w");
|
||||||
if (f != NULL)
|
if (f != NULL)
|
||||||
{
|
{
|
||||||
|
SYSTEMTIME time = { 0 };
|
||||||
|
char time_str[128] = { 0 };
|
||||||
|
char *crlf = "\r\n";
|
||||||
|
char *tag = "---------";
|
||||||
|
|
||||||
|
LocalTime(&time);
|
||||||
|
|
||||||
|
sprintf(time_str, "%04u-%02u-%02u %02u:%02u:%02u",
|
||||||
|
time.wYear, time.wMonth, time.wDay,
|
||||||
|
time.wHour, time.wMinute, time.wSecond);
|
||||||
|
|
||||||
|
fwrite(tag, 1, strlen(tag), f);
|
||||||
|
|
||||||
|
fwrite(crlf, 1, strlen(crlf), f);
|
||||||
|
|
||||||
|
fwrite(time_str, 1, strlen(time_str), f);
|
||||||
|
|
||||||
|
fwrite(crlf, 1, strlen(crlf), f);
|
||||||
|
|
||||||
fwrite(msg, 1, strlen(msg), f);
|
fwrite(msg, 1, strlen(msg), f);
|
||||||
|
|
||||||
|
fwrite(crlf, 1, strlen(crlf), f);
|
||||||
|
|
||||||
|
fwrite(crlf, 1, strlen(crlf), f);
|
||||||
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,11 +123,7 @@ typedef int (COMPARE)(void *p1, void *p2);
|
|||||||
#define GET_ABS(a) ((a) >= 0 ? (a) : -(a))
|
#define GET_ABS(a) ((a) >= 0 ? (a) : -(a))
|
||||||
|
|
||||||
// Convert the pointer to UINT
|
// Convert the pointer to UINT
|
||||||
#ifdef CPU_64
|
#define POINTER_TO_KEY(p) (HashPtrToUINT(p))
|
||||||
#define POINTER_TO_KEY(p) HashPtrToUINT(p)
|
|
||||||
#else
|
|
||||||
#define POINTER_TO_KEY(p) (UINT)(p)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Compare the pointer and UINT
|
// Compare the pointer and UINT
|
||||||
#define COMPARE_POINTER_AND_KEY(p, i) (POINTER_TO_KEY(p) == (i))
|
#define COMPARE_POINTER_AND_KEY(p, i) (POINTER_TO_KEY(p) == (i))
|
||||||
@ -282,7 +278,8 @@ typedef struct TRACKING_LIST TRACKING_LIST;
|
|||||||
typedef struct IO IO;
|
typedef struct IO IO;
|
||||||
|
|
||||||
// Memory.h
|
// Memory.h
|
||||||
typedef struct MEMTAG MEMTAG;
|
typedef struct MEMTAG1 MEMTAG1;
|
||||||
|
typedef struct MEMTAG2 MEMTAG2;
|
||||||
typedef struct BUF BUF;
|
typedef struct BUF BUF;
|
||||||
typedef struct FIFO FIFO;
|
typedef struct FIFO FIFO;
|
||||||
typedef struct LIST LIST;
|
typedef struct LIST LIST;
|
||||||
|
@ -65,6 +65,8 @@ void InitProcessCallOnce()
|
|||||||
{
|
{
|
||||||
init_proc_once_flag = true;
|
init_proc_once_flag = true;
|
||||||
|
|
||||||
|
InitCanaryRand();
|
||||||
|
|
||||||
#ifdef OS_WIN32
|
#ifdef OS_WIN32
|
||||||
MsInitProcessCallOnce();
|
MsInitProcessCallOnce();
|
||||||
#endif // OS_WIN32
|
#endif // OS_WIN32
|
||||||
|
@ -16,10 +16,16 @@
|
|||||||
#include "Object.h"
|
#include "Object.h"
|
||||||
#include "OS.h"
|
#include "OS.h"
|
||||||
#include "Str.h"
|
#include "Str.h"
|
||||||
|
#include "Tick64.h"
|
||||||
#include "Tracking.h"
|
#include "Tracking.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#ifdef OS_UNIX
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
|
|
||||||
@ -34,6 +40,105 @@
|
|||||||
|
|
||||||
static UINT fifo_current_realloc_mem_size = FIFO_REALLOC_MEM_SIZE;
|
static UINT fifo_current_realloc_mem_size = FIFO_REALLOC_MEM_SIZE;
|
||||||
|
|
||||||
|
static bool canary_inited = false;
|
||||||
|
typedef struct CANARY_RAND_DATA
|
||||||
|
{
|
||||||
|
UCHAR Data[CANARY_RAND_SIZE + 4];
|
||||||
|
} CANARY_RAND_DATA;
|
||||||
|
|
||||||
|
static CANARY_RAND_DATA canary_rand_data[NUM_CANARY_RAND] = { 0 };
|
||||||
|
|
||||||
|
static UINT64 canary_memtag_magic1 = 0;
|
||||||
|
static UINT64 canary_memtag_magic2 = 0;
|
||||||
|
|
||||||
|
UCHAR *GetCanaryRand(UINT id)
|
||||||
|
{
|
||||||
|
if (id >= NUM_CANARY_RAND)
|
||||||
|
{
|
||||||
|
id = NUM_CANARY_RAND - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return &((canary_rand_data[id].Data)[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void InitCanaryRand()
|
||||||
|
{
|
||||||
|
SYSTEMTIME st = { 0 };
|
||||||
|
char random_seed[1024] = { 0 };
|
||||||
|
UINT64 t1 = 0, t2 = 0;
|
||||||
|
if (canary_inited)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef OS_WIN32
|
||||||
|
Win32GetSystemTime(&st);
|
||||||
|
memcpy(&t1, ((UCHAR *)&st) + 0, 8);
|
||||||
|
memcpy(&t2, ((UCHAR *)&st) + 8, 8);
|
||||||
|
#else // OS_WIN32
|
||||||
|
struct timeval tv = { 0 };
|
||||||
|
struct timezone tz = { 0 };
|
||||||
|
gettimeofday(&tv, &tz);
|
||||||
|
t1 = (UINT64)tv.tv_sec;
|
||||||
|
t2 = (UINT64)tv.tv_usec;
|
||||||
|
#endif // OS_WIN32
|
||||||
|
|
||||||
|
{
|
||||||
|
UINT64 dos_rand = (UINT64)rand();
|
||||||
|
UINT64 tick1 = TickHighresNano64(true);
|
||||||
|
UINT64 tick2 = TickHighresNano64(true);
|
||||||
|
|
||||||
|
UINT i;
|
||||||
|
|
||||||
|
void *p1 = malloc(1);
|
||||||
|
void *p2 = malloc(1);
|
||||||
|
|
||||||
|
for (i = 0;i < NUM_CANARY_RAND;i++)
|
||||||
|
{
|
||||||
|
// using sprintf() here is safe.
|
||||||
|
sprintf(random_seed,
|
||||||
|
"%u "
|
||||||
|
"%llu "
|
||||||
|
"%llu "
|
||||||
|
"%llu "
|
||||||
|
"%llu "
|
||||||
|
"%llu "
|
||||||
|
"%llu "
|
||||||
|
"%llu "
|
||||||
|
"%llu "
|
||||||
|
"%llu "
|
||||||
|
"%llu "
|
||||||
|
"%llu "
|
||||||
|
"%u "
|
||||||
|
,
|
||||||
|
i,
|
||||||
|
(UINT64)InitCanaryRand,
|
||||||
|
(UINT64)&canary_inited,
|
||||||
|
(UINT64) & ((canary_rand_data[0].Data)[0]),
|
||||||
|
(UINT64)&random_seed[0],
|
||||||
|
tick1,
|
||||||
|
tick2,
|
||||||
|
dos_rand,
|
||||||
|
(UINT64)p1,
|
||||||
|
(UINT64)p2,
|
||||||
|
t1,
|
||||||
|
t2,
|
||||||
|
~i
|
||||||
|
);
|
||||||
|
|
||||||
|
Sha0(canary_rand_data[i].Data, random_seed, (UINT)strlen(random_seed));
|
||||||
|
}
|
||||||
|
|
||||||
|
free(p1);
|
||||||
|
free(p2);
|
||||||
|
|
||||||
|
canary_memtag_magic1 = *((UINT64 *)(GetCanaryRand(CANARY_RAND_ID_MEMTAG_MAGIC) + 0));
|
||||||
|
canary_memtag_magic2 = *((UINT64 *)(GetCanaryRand(CANARY_RAND_ID_MEMTAG_MAGIC) + 8));
|
||||||
|
|
||||||
|
canary_inited = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// New PRand
|
// New PRand
|
||||||
PRAND *NewPRand(void *key, UINT key_size)
|
PRAND *NewPRand(void *key, UINT key_size)
|
||||||
{
|
{
|
||||||
@ -3114,6 +3219,10 @@ void AdjustBufSize(BUF *b, UINT new_size)
|
|||||||
|
|
||||||
while (b->SizeReserved < new_size)
|
while (b->SizeReserved < new_size)
|
||||||
{
|
{
|
||||||
|
if (b->SizeReserved > 0x7FFFFFFF)
|
||||||
|
{
|
||||||
|
AbortExitEx("AdjustBufSize(): too large buffer size");
|
||||||
|
}
|
||||||
b->SizeReserved = b->SizeReserved * 2;
|
b->SizeReserved = b->SizeReserved * 2;
|
||||||
}
|
}
|
||||||
b->Buf = ReAlloc(b->Buf, b->SizeReserved);
|
b->Buf = ReAlloc(b->Buf, b->SizeReserved);
|
||||||
@ -3515,33 +3624,52 @@ void *Malloc(UINT size)
|
|||||||
}
|
}
|
||||||
void *MallocEx(UINT size, bool zero_clear_when_free)
|
void *MallocEx(UINT size, bool zero_clear_when_free)
|
||||||
{
|
{
|
||||||
MEMTAG *tag;
|
MEMTAG1 *tag1;
|
||||||
|
MEMTAG2 *tag2;
|
||||||
UINT real_size;
|
UINT real_size;
|
||||||
|
|
||||||
|
if (canary_inited == false)
|
||||||
|
{
|
||||||
|
InitCanaryRand();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size > MAX_MALLOC_MEM_SIZE)
|
||||||
|
{
|
||||||
|
AbortExitEx("MallocEx() error: too large size");
|
||||||
|
}
|
||||||
|
|
||||||
real_size = CALC_MALLOCSIZE(size);
|
real_size = CALC_MALLOCSIZE(size);
|
||||||
|
|
||||||
tag = InternalMalloc(real_size);
|
tag1 = InternalMalloc(real_size);
|
||||||
|
|
||||||
Zero(tag, sizeof(MEMTAG));
|
tag1->Magic = canary_memtag_magic1 ^ ((UINT64)tag1 * GOLDEN_RATION_PRIME_U64);
|
||||||
tag->Magic = MEMTAG_MAGIC;
|
tag1->Size = size;
|
||||||
tag->Size = size;
|
tag1->ZeroFree = zero_clear_when_free;
|
||||||
tag->ZeroFree = zero_clear_when_free;
|
|
||||||
|
|
||||||
return MEMTAG_TO_POINTER(tag);
|
tag2 = (MEMTAG2 *)(((UCHAR *)tag1) + CALC_MALLOCSIZE(tag1->Size) - sizeof(MEMTAG2));
|
||||||
|
tag2->Magic = canary_memtag_magic2 ^ ((UINT64)tag2 * GOLDEN_RATION_PRIME_U64);
|
||||||
|
|
||||||
|
return MEMTAG1_TO_POINTER(tag1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get memory size
|
// Get memory size
|
||||||
UINT GetMemSize(void *addr)
|
UINT GetMemSize(void *addr)
|
||||||
{
|
{
|
||||||
MEMTAG *tag;
|
MEMTAG1 *tag;
|
||||||
|
|
||||||
|
if (canary_inited == false)
|
||||||
|
{
|
||||||
|
InitCanaryRand();
|
||||||
|
}
|
||||||
|
|
||||||
// Validate arguments
|
// Validate arguments
|
||||||
if (IS_NULL_POINTER(addr))
|
if (IS_NULL_POINTER(addr))
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
tag = POINTER_TO_MEMTAG(addr);
|
tag = POINTER_TO_MEMTAG1(addr);
|
||||||
CheckMemTag(tag);
|
CheckMemTag1(tag);
|
||||||
|
|
||||||
return tag->Size;
|
return tag->Size;
|
||||||
}
|
}
|
||||||
@ -3549,20 +3677,35 @@ UINT GetMemSize(void *addr)
|
|||||||
// ReAlloc
|
// ReAlloc
|
||||||
void *ReAlloc(void *addr, UINT size)
|
void *ReAlloc(void *addr, UINT size)
|
||||||
{
|
{
|
||||||
MEMTAG *tag;
|
MEMTAG1 *tag1;
|
||||||
|
MEMTAG2 *tag2;
|
||||||
bool zerofree;
|
bool zerofree;
|
||||||
|
|
||||||
|
if (canary_inited == false)
|
||||||
|
{
|
||||||
|
InitCanaryRand();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size > MAX_MALLOC_MEM_SIZE)
|
||||||
|
{
|
||||||
|
AbortExitEx("ReAlloc() error: too large size");
|
||||||
|
}
|
||||||
|
|
||||||
// Validate arguments
|
// Validate arguments
|
||||||
if (IS_NULL_POINTER(addr))
|
if (IS_NULL_POINTER(addr))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
tag = POINTER_TO_MEMTAG(addr);
|
tag1 = POINTER_TO_MEMTAG1(addr);
|
||||||
CheckMemTag(tag);
|
CheckMemTag1(tag1);
|
||||||
|
|
||||||
zerofree = tag->ZeroFree;
|
tag2 = (MEMTAG2 *)(((UCHAR *)tag1) + CALC_MALLOCSIZE(tag1->Size) - sizeof(MEMTAG2));
|
||||||
|
CheckMemTag2(tag2);
|
||||||
|
|
||||||
if (tag->Size == size)
|
zerofree = tag1->ZeroFree;
|
||||||
|
|
||||||
|
if (tag1->Size == size)
|
||||||
{
|
{
|
||||||
// No size change
|
// No size change
|
||||||
return addr;
|
return addr;
|
||||||
@ -3574,10 +3717,10 @@ void *ReAlloc(void *addr, UINT size)
|
|||||||
// Size changed (zero clearing required)
|
// Size changed (zero clearing required)
|
||||||
void *new_p = MallocEx(size, true);
|
void *new_p = MallocEx(size, true);
|
||||||
|
|
||||||
if (tag->Size <= size)
|
if (tag1->Size <= size)
|
||||||
{
|
{
|
||||||
// Size expansion
|
// Size expansion
|
||||||
Copy(new_p, addr, tag->Size);
|
Copy(new_p, addr, tag1->Size);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -3593,13 +3736,22 @@ void *ReAlloc(void *addr, UINT size)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Size changed
|
// Size changed
|
||||||
MEMTAG *tag2 = InternalReAlloc(tag, CALC_MALLOCSIZE(size));
|
MEMTAG1 *tag1_new;
|
||||||
|
MEMTAG2 *tag2_new;
|
||||||
|
|
||||||
Zero(tag2, sizeof(MEMTAG));
|
tag1->Magic = 0;
|
||||||
tag2->Magic = MEMTAG_MAGIC;
|
tag2->Magic = 0;
|
||||||
tag2->Size = size;
|
|
||||||
|
|
||||||
return MEMTAG_TO_POINTER(tag2);
|
tag1_new = InternalReAlloc(tag1, CALC_MALLOCSIZE(size));
|
||||||
|
|
||||||
|
tag1_new->Magic = canary_memtag_magic1 ^ ((UINT64)tag1_new * GOLDEN_RATION_PRIME_U64);
|
||||||
|
tag1_new->Size = size;
|
||||||
|
tag1_new->ZeroFree = 0;
|
||||||
|
|
||||||
|
tag2_new = (MEMTAG2 *)(((UCHAR *)tag1_new) + CALC_MALLOCSIZE(size) - sizeof(MEMTAG2));
|
||||||
|
tag2_new->Magic = canary_memtag_magic2 ^ ((UINT64)tag2_new * GOLDEN_RATION_PRIME_U64);
|
||||||
|
|
||||||
|
return MEMTAG1_TO_POINTER(tag1_new);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3607,25 +3759,35 @@ void *ReAlloc(void *addr, UINT size)
|
|||||||
// Free
|
// Free
|
||||||
void Free(void *addr)
|
void Free(void *addr)
|
||||||
{
|
{
|
||||||
MEMTAG *tag;
|
MEMTAG1 *tag1;
|
||||||
|
MEMTAG2 *tag2;
|
||||||
// Validate arguments
|
// Validate arguments
|
||||||
if (IS_NULL_POINTER(addr))
|
if (IS_NULL_POINTER(addr))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
tag = POINTER_TO_MEMTAG(addr);
|
if (canary_inited == false)
|
||||||
CheckMemTag(tag);
|
{
|
||||||
|
InitCanaryRand();
|
||||||
|
}
|
||||||
|
|
||||||
if (tag->ZeroFree)
|
tag1 = POINTER_TO_MEMTAG1(addr);
|
||||||
|
CheckMemTag1(tag1);
|
||||||
|
|
||||||
|
tag2 = (MEMTAG2 *)(((UCHAR *)tag1) + CALC_MALLOCSIZE(tag1->Size) - sizeof(MEMTAG2));
|
||||||
|
CheckMemTag2(tag2);
|
||||||
|
|
||||||
|
if (tag1->ZeroFree)
|
||||||
{
|
{
|
||||||
// Zero clear
|
// Zero clear
|
||||||
Zero(addr, tag->Size);
|
Zero(addr, tag1->Size);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Memory release
|
// Memory release
|
||||||
tag->Magic = 0;
|
tag1->Magic = 0;
|
||||||
InternalFree(tag);
|
tag2->Magic = 0;
|
||||||
|
InternalFree(tag1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Free and set pointer's value to NULL
|
// Free and set pointer's value to NULL
|
||||||
@ -3635,24 +3797,36 @@ void FreeSafe(void **addr)
|
|||||||
*addr = NULL;
|
*addr = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check the memtag
|
// Check the memtag1
|
||||||
void CheckMemTag(MEMTAG *tag)
|
void CheckMemTag1(MEMTAG1 *tag)
|
||||||
{
|
{
|
||||||
if (IsTrackingEnabled() == false)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validate arguments
|
// Validate arguments
|
||||||
if (tag == NULL)
|
if (tag == NULL)
|
||||||
{
|
{
|
||||||
AbortExitEx("CheckMemTag: tag == NULL");
|
AbortExitEx("CheckMemTag1: tag1 == NULL");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tag->Magic != MEMTAG_MAGIC)
|
if (tag->Magic != (canary_memtag_magic1 ^ ((UINT64)tag * GOLDEN_RATION_PRIME_U64)))
|
||||||
{
|
{
|
||||||
AbortExitEx("CheckMemTag: tag->Magic != MEMTAG_MAGIC");
|
AbortExitEx("CheckMemTag1: tag1->Magic != canary_memtag_magic1");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check the memtag2
|
||||||
|
void CheckMemTag2(MEMTAG2 *tag)
|
||||||
|
{
|
||||||
|
// Validate arguments
|
||||||
|
if (tag == NULL)
|
||||||
|
{
|
||||||
|
AbortExitEx("CheckMemTag2: tag2 == NULL");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tag->Magic != (canary_memtag_magic2 ^ ((UINT64)tag * GOLDEN_RATION_PRIME_U64)))
|
||||||
|
{
|
||||||
|
AbortExitEx("CheckMemTag2: tag2->Magic != canary_memtag_magic2");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,29 +14,38 @@
|
|||||||
#define MallocFast Malloc
|
#define MallocFast Malloc
|
||||||
#define ZeroMallocFast ZeroMalloc
|
#define ZeroMallocFast ZeroMalloc
|
||||||
|
|
||||||
|
#define MAX_MALLOC_MEM_SIZE (0xffffffff - 64)
|
||||||
|
|
||||||
// Memory size that can be passed to the kernel at a time
|
// Memory size that can be passed to the kernel at a time
|
||||||
#define MAX_SEND_BUF_MEM_SIZE (10 * 1024 * 1024)
|
#define MAX_SEND_BUF_MEM_SIZE (10 * 1024 * 1024)
|
||||||
|
|
||||||
// The magic number for memory tag
|
#define CALC_MALLOCSIZE(size) (((MAX(size, 1) + 7) / 8) * 8 + sizeof(MEMTAG1) + sizeof(MEMTAG2))
|
||||||
#define MEMTAG_MAGIC 0x49414449
|
#define MEMTAG1_TO_POINTER(p) ((void *)(((UCHAR *)(p)) + sizeof(MEMTAG1)))
|
||||||
|
#define POINTER_TO_MEMTAG1(p) ((MEMTAG1 *)(((UCHAR *)(p)) - sizeof(MEMTAG1)))
|
||||||
#define CALC_MALLOCSIZE(size) ((MAX(size, 1)) + sizeof(MEMTAG))
|
#define IS_NULL_POINTER(p) (((p) == NULL) || ((POINTER_TO_UINT64(p) == (UINT64)sizeof(MEMTAG1))))
|
||||||
#define MEMTAG_TO_POINTER(p) ((void *)(((UCHAR *)(p)) + sizeof(MEMTAG)))
|
|
||||||
#define POINTER_TO_MEMTAG(p) ((MEMTAG *)(((UCHAR *)(p)) - sizeof(MEMTAG)))
|
|
||||||
#define IS_NULL_POINTER(p) (((p) == NULL) || ((POINTER_TO_UINT64(p) == (UINT64)sizeof(MEMTAG))))
|
|
||||||
#define PTR_TO_PTR(p) ((void **)(&p))
|
#define PTR_TO_PTR(p) ((void **)(&p))
|
||||||
|
|
||||||
|
// Golden Ratio Prime
|
||||||
|
// From https://github.com/torvalds/linux/blob/88c5083442454e5e8a505b11fa16f32d2879651e/include/linux/hash.h
|
||||||
|
#define GOLDEN_RATION_PRIME_U32 ((UINT32)0x61C88647)
|
||||||
|
#define GOLDEN_RATION_PRIME_U64 ((UINT64)7046029254386353131ULL) // 0x61C8864680B583EB
|
||||||
|
|
||||||
// Fixed size of a block of memory pool
|
// Fixed size of a block of memory pool
|
||||||
#define MEMPOOL_MAX_SIZE 3000
|
#define MEMPOOL_MAX_SIZE 3000
|
||||||
|
|
||||||
|
|
||||||
// Memory tag
|
// Memory tag 1
|
||||||
struct MEMTAG
|
struct MEMTAG1
|
||||||
{
|
{
|
||||||
UINT Magic;
|
UINT64 Magic;
|
||||||
UINT Size;
|
UINT Size;
|
||||||
bool ZeroFree;
|
bool ZeroFree;
|
||||||
UINT Padding;
|
};
|
||||||
|
|
||||||
|
// Memory tag 2
|
||||||
|
struct MEMTAG2
|
||||||
|
{
|
||||||
|
UINT64 Magic;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Buffer
|
// Buffer
|
||||||
@ -174,7 +183,8 @@ void *ZeroMallocEx(UINT size, bool zero_clear_when_free);
|
|||||||
void *ReAlloc(void *addr, UINT size);
|
void *ReAlloc(void *addr, UINT size);
|
||||||
void Free(void *addr);
|
void Free(void *addr);
|
||||||
void FreeSafe(void **addr);
|
void FreeSafe(void **addr);
|
||||||
void CheckMemTag(MEMTAG *tag);
|
void CheckMemTag1(MEMTAG1 *tag);
|
||||||
|
void CheckMemTag2(MEMTAG2 *tag);
|
||||||
UINT GetMemSize(void *addr);
|
UINT GetMemSize(void *addr);
|
||||||
|
|
||||||
void *InternalMalloc(UINT size);
|
void *InternalMalloc(UINT size);
|
||||||
@ -364,5 +374,14 @@ LIST *NewStrList();
|
|||||||
void ReleaseStrList(LIST *o);
|
void ReleaseStrList(LIST *o);
|
||||||
bool AddStrToStrListDistinct(LIST *o, char *str);
|
bool AddStrToStrListDistinct(LIST *o, char *str);
|
||||||
|
|
||||||
|
#define NUM_CANARY_RAND 32
|
||||||
|
#define CANARY_RAND_ID_MEMTAG_MAGIC 0
|
||||||
|
#define CANARY_RAND_SIZE 20
|
||||||
|
|
||||||
|
#define CANARY_RAND_ID_PTR_KEY_HASH 1
|
||||||
|
|
||||||
|
void InitCanaryRand();
|
||||||
|
UCHAR *GetCanaryRand(UINT id);
|
||||||
|
|
||||||
#endif // MEMORY_H
|
#endif // MEMORY_H
|
||||||
|
|
||||||
|
@ -2568,6 +2568,7 @@ MS_ADAPTER_LIST *MsCreateAdapterListInnerExVista(bool no_info)
|
|||||||
UniStrCpy(a->TitleW, sizeof(a->TitleW), title);
|
UniStrCpy(a->TitleW, sizeof(a->TitleW), title);
|
||||||
UniToStr(a->Title, sizeof(a->Title), title);
|
UniToStr(a->Title, sizeof(a->Title), title);
|
||||||
a->Index = r->InterfaceIndex;
|
a->Index = r->InterfaceIndex;
|
||||||
|
a->MediaConnectState = r->MediaConnectState;
|
||||||
a->Type = r->Type;
|
a->Type = r->Type;
|
||||||
a->Status = ConvertMidStatusVistaToXp(r->OperStatus);
|
a->Status = ConvertMidStatusVistaToXp(r->OperStatus);
|
||||||
a->Mtu = r->Mtu;
|
a->Mtu = r->Mtu;
|
||||||
|
@ -281,6 +281,7 @@ typedef struct MS_ADAPTER
|
|||||||
char Title[MAX_PATH]; // Display name
|
char Title[MAX_PATH]; // Display name
|
||||||
wchar_t TitleW[MAX_PATH]; // Display Name (Unicode)
|
wchar_t TitleW[MAX_PATH]; // Display Name (Unicode)
|
||||||
UINT Index; // Index
|
UINT Index; // Index
|
||||||
|
UINT MediaConnectState; // Media Connect State
|
||||||
UINT Type; // Type
|
UINT Type; // Type
|
||||||
UINT Status; // Status
|
UINT Status; // Status
|
||||||
UINT Mtu; // MTU
|
UINT Mtu; // MTU
|
||||||
|
@ -540,6 +540,13 @@ LIST *Win32GetNicList()
|
|||||||
|
|
||||||
if (a->Type == 6 && a->AddressSize == 6)
|
if (a->Type == 6 && a->AddressSize == 6)
|
||||||
{
|
{
|
||||||
|
// If the connection state of the interface is unknown, then exclude it.
|
||||||
|
// Unknown means that the device is not plugged into the local host.
|
||||||
|
if (a->MediaConnectState == MediaConnectStateUnknown)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
NIC_ENTRY *e = ZeroMalloc(sizeof(NIC_ENTRY));
|
NIC_ENTRY *e = ZeroMalloc(sizeof(NIC_ENTRY));
|
||||||
|
|
||||||
StrCpy(e->IfName, sizeof(e->IfName), a->Title);
|
StrCpy(e->IfName, sizeof(e->IfName), a->Title);
|
||||||
@ -1191,7 +1198,9 @@ void RUDPProcess_NatT_Recv(RUDP_STACK *r, UDPPACKET *udp)
|
|||||||
bool is_ok = PackGetBool(p, "ok");
|
bool is_ok = PackGetBool(p, "ok");
|
||||||
UINT64 tran_id = PackGetInt64(p, "tran_id");
|
UINT64 tran_id = PackGetInt64(p, "tran_id");
|
||||||
|
|
||||||
ExtractAndApplyDynList(p);
|
// This ExtractAndApplyDynList() calling was removed because it is not actually used and could be abused by
|
||||||
|
// illegal UDP packets that spoof the source IP address. 2023-6-14 Daiyuu Nobori
|
||||||
|
// ExtractAndApplyDynList(p);
|
||||||
|
|
||||||
if (r->ServerMode)
|
if (r->ServerMode)
|
||||||
{
|
{
|
||||||
@ -5801,6 +5810,10 @@ SSL_PIPE *NewSslPipeEx3(bool server_mode, X *x, K *k, LIST *chain, DH_CTX *dh, b
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
ssl = SSL_new(ssl_ctx);
|
ssl = SSL_new(ssl_ctx);
|
||||||
|
if (ssl == NULL)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
SSL_set_ex_data(ssl, GetSslClientCertIndex(), clientcert);
|
SSL_set_ex_data(ssl, GetSslClientCertIndex(), clientcert);
|
||||||
}
|
}
|
||||||
@ -13116,7 +13129,6 @@ SOCK *ListenEx63(UINT port, bool local_only, bool enable_ca, IP *listen_ip)
|
|||||||
#ifdef OS_WIN32
|
#ifdef OS_WIN32
|
||||||
if (enable_ca)
|
if (enable_ca)
|
||||||
{
|
{
|
||||||
setsockopt(s, SOL_SOCKET, SO_CONDITIONAL_ACCEPT, (char *)&true_flag, sizeof(true_flag));
|
|
||||||
backlog = 1;
|
backlog = 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -13642,6 +13654,70 @@ int connect_timeout(SOCKET s, struct sockaddr *addr, int size, int timeout, bool
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
#if 0
|
||||||
|
LPSTR PrintError(int ErrorCode)
|
||||||
|
{
|
||||||
|
static char Message[1024];
|
||||||
|
|
||||||
|
// If this program was multithreaded, we'd want to use
|
||||||
|
// FORMAT_MESSAGE_ALLOCATE_BUFFER instead of a static buffer here.
|
||||||
|
// (And of course, free the buffer when we were done with it)
|
||||||
|
|
||||||
|
FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS |
|
||||||
|
FORMAT_MESSAGE_MAX_WIDTH_MASK, NULL, ErrorCode,
|
||||||
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||||
|
(LPSTR)Message, 1024, NULL);
|
||||||
|
return Message;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
char *PrintError(int ErrorCode)
|
||||||
|
{
|
||||||
|
char *Message;
|
||||||
|
switch (ErrorCode) {
|
||||||
|
case WSAEFAULT:
|
||||||
|
Message = "Bad address.";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WSAEWOULDBLOCK:
|
||||||
|
Message = "Resource temporarily unavailable.";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WSAEINPROGRESS:
|
||||||
|
Message = "Operation now in progress.";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WSAEALREADY:
|
||||||
|
Message = "Operation already in progress.";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WSAEAFNOSUPPORT:
|
||||||
|
Message = "Address family not supported by protocol family.";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WSAEADDRINUSE:
|
||||||
|
Message = "Address already in use.";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WSAEADDRNOTAVAIL:
|
||||||
|
Message = "Cannot assign requested address.";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WSAEISCONN:
|
||||||
|
Message = "Socket is already connected."; // Added on AUG.10, 2023
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WSAEINVAL:
|
||||||
|
Message = "Invalid argument."; // Added on AUG.10, 2023
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Message = "";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return Message;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Connection with timeout (Win32 version)
|
// Connection with timeout (Win32 version)
|
||||||
int connect_timeout(SOCKET s, struct sockaddr *addr, int size, int timeout, bool *cancel_flag)
|
int connect_timeout(SOCKET s, struct sockaddr *addr, int size, int timeout, bool *cancel_flag)
|
||||||
{
|
{
|
||||||
@ -13773,8 +13849,71 @@ void SetSockHighPriority(SOCK *s, bool flag)
|
|||||||
SetSockTos(s, (flag ? 16 : 0));
|
SetSockTos(s, (flag ? 16 : 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bind the socket to IPv4 or IPV6 address
|
||||||
|
int bind_sock(SOCKET sock, IP *ip, UINT port)
|
||||||
|
{
|
||||||
|
//char tmp[MAX_HOST_NAME_LEN + 1];
|
||||||
|
//memset(tmp, 0, sizeof(tmp));
|
||||||
|
//IPToStr(tmp, sizeof(tmp), ip);
|
||||||
|
//Debug("bind_sock(): Binding... IP address %s:%d\n", tmp, port);
|
||||||
|
|
||||||
|
if (IsIP4(ip))
|
||||||
|
{
|
||||||
|
// Declare variables
|
||||||
|
struct sockaddr_in sockaddr_in;
|
||||||
|
|
||||||
|
Zero(&sockaddr_in, sizeof(sockaddr_in));
|
||||||
|
|
||||||
|
// Set up the sockaddr structure
|
||||||
|
sockaddr_in.sin_family = AF_INET;
|
||||||
|
IPToInAddr(&sockaddr_in.sin_addr, ip);
|
||||||
|
sockaddr_in.sin_port = htons((USHORT)port);
|
||||||
|
//inet_pton(AF_INET, tmp, &addr_in.sin_addr.s_addr);
|
||||||
|
|
||||||
|
UINT true_flag = 1;
|
||||||
|
// This only have enabled for UNIX system since there is a bug
|
||||||
|
// in the implementation of REUSEADDR in Windows OS
|
||||||
|
(void)setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char*)&true_flag, sizeof(true_flag));
|
||||||
|
|
||||||
|
// Bind the socket using the information in the sockaddr structure
|
||||||
|
return (bind(sock, (struct sockaddr *)&sockaddr_in, sizeof(sockaddr_in)));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Declare variables
|
||||||
|
struct sockaddr_in6 sockaddr_in;
|
||||||
|
|
||||||
|
Zero(&sockaddr_in, sizeof(sockaddr_in));
|
||||||
|
|
||||||
|
// Set up the sockaddr structure
|
||||||
|
sockaddr_in.sin6_family = AF_INET6;
|
||||||
|
IPToInAddr6(&sockaddr_in.sin6_addr, ip);
|
||||||
|
sockaddr_in.sin6_scope_id = ip->ipv6_scope_id;
|
||||||
|
sockaddr_in.sin6_port = htons((USHORT)port);
|
||||||
|
//inet_pton(AF_INET6, tmp, &sockaddr_in.sin6_addr.s6_bytes);
|
||||||
|
|
||||||
|
UINT true_flag = 1;
|
||||||
|
#ifdef OS_UNIX
|
||||||
|
// It is necessary to set the IPv6 Only flag on a UNIX system
|
||||||
|
(void)setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &true_flag, sizeof(true_flag));
|
||||||
|
#endif // OS_UNIX
|
||||||
|
// This only have enabled for UNIX system since there is a bug
|
||||||
|
// in the implementation of REUSEADDR in Windows OS
|
||||||
|
(void)setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char*)&true_flag, sizeof(true_flag));
|
||||||
|
|
||||||
|
// Bind the socket using the information in the sockaddr structure
|
||||||
|
return (bind(sock, (struct sockaddr *)&sockaddr_in, sizeof(sockaddr_in)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Connect to the IPv4 host using a socket
|
// Connect to the IPv4 host using a socket
|
||||||
SOCKET ConnectTimeoutIPv4(IP *ip, UINT port, UINT timeout, bool *cancel_flag)
|
SOCKET ConnectTimeoutIPv4(IP* ip, UINT port, UINT timeout, bool* cancel_flag)
|
||||||
|
{
|
||||||
|
return BindConnectTimeoutIPv4(BIND_LOCALIP_NULL, BIND_LOCALPORT_NULL, ip, port, timeout, cancel_flag);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Connect to the IPv4 host using a socket
|
||||||
|
SOCKET BindConnectTimeoutIPv4(IP* localIP, UINT localport, IP* ip, UINT port, UINT timeout, bool* cancel_flag)
|
||||||
{
|
{
|
||||||
SOCKET s;
|
SOCKET s;
|
||||||
struct sockaddr_in sockaddr4;
|
struct sockaddr_in sockaddr4;
|
||||||
@ -13791,6 +13930,38 @@ SOCKET ConnectTimeoutIPv4(IP *ip, UINT port, UINT timeout, bool *cancel_flag)
|
|||||||
|
|
||||||
// Socket creation
|
// Socket creation
|
||||||
s = socket(AF_INET, SOCK_STREAM, 0);
|
s = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
|
||||||
|
// Top of Bind outgoing connection
|
||||||
|
if (s != INVALID_SOCKET) {
|
||||||
|
int ier;
|
||||||
|
IP tmpIP;
|
||||||
|
IP *tmpIP2;
|
||||||
|
|
||||||
|
if (localIP == BIND_LOCALIP_NULL) {
|
||||||
|
StrToIP(&tmpIP, "0.0.0.0"); // A NULL address for the argument "localIP" is treated as if "0.0.0.0" in IPV4 was specified.
|
||||||
|
tmpIP2 = &tmpIP;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tmpIP2 = localIP;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((IsZeroIP(tmpIP2) == false) || (localport != 0)) {
|
||||||
|
|
||||||
|
// Bind the socket
|
||||||
|
if (bind_sock(s, tmpIP2, localport) != 0) {
|
||||||
|
#ifdef OS_WIN32
|
||||||
|
ier = WSAGetLastError();
|
||||||
|
Debug("IPv4 bind() failed with error: %d %s\n", ier, PrintError(ier));
|
||||||
|
#else
|
||||||
|
Debug("IPv4 bind() failed with error: %d %s\n", errno, strerror(errno));
|
||||||
|
#endif
|
||||||
|
closesocket(s);
|
||||||
|
s = INVALID_SOCKET;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Bottom of Bind outgoing connection
|
||||||
|
|
||||||
if (s != INVALID_SOCKET)
|
if (s != INVALID_SOCKET)
|
||||||
{
|
{
|
||||||
// Connection
|
// Connection
|
||||||
@ -14053,7 +14224,21 @@ void ConnectThreadForRUDP(THREAD *thread, void *param)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// IPv4 connection thread (multiple protocols, multiple addresses)
|
// IPv4 connection thread (multiple protocols, multiple addresses)
|
||||||
void ConnectThreadForIPv4(THREAD *thread, void *param)
|
void ConnectThreadForIPv4(THREAD* thread, void* param)
|
||||||
|
{
|
||||||
|
CONNECT_SERIAL_PARAM* p = (CONNECT_SERIAL_PARAM*)param;
|
||||||
|
if (thread == NULL || p == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
p->LocalIP = BIND_LOCALIP_NULL;
|
||||||
|
p->LocalPort = BIND_LOCALPORT_NULL;
|
||||||
|
return BindConnectThreadForIPv4(thread, param);
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPv4 connection thread (multiple protocols, multiple addresses)
|
||||||
|
//void ConnectThreadForIPv4(THREAD* thread, void* param)
|
||||||
|
void BindConnectThreadForIPv4(THREAD *thread, void *param)
|
||||||
{
|
{
|
||||||
SOCKET s = INVALID_SOCKET;
|
SOCKET s = INVALID_SOCKET;
|
||||||
IP current_ip;
|
IP current_ip;
|
||||||
@ -14106,7 +14291,8 @@ void ConnectThreadForIPv4(THREAD *thread, void *param)
|
|||||||
if (use_natt == false)
|
if (use_natt == false)
|
||||||
{
|
{
|
||||||
// Normal connection without using NAT-T
|
// Normal connection without using NAT-T
|
||||||
s = ConnectTimeoutIPv4(ip, p->Port, p->Timeout, p->CancelFlag);
|
// s = ConnectTimeoutIPv4(ip, p->Port, p->Timeout, p->CancelFlag);
|
||||||
|
s = BindConnectTimeoutIPv4(p->LocalIP, p->LocalPort, ip, p->Port, p->Timeout, p->CancelFlag);
|
||||||
|
|
||||||
if (s != INVALID_SOCKET)
|
if (s != INVALID_SOCKET)
|
||||||
{
|
{
|
||||||
@ -14408,7 +14594,21 @@ void ConnectThreadForIPv4(THREAD *thread, void *param)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// IPv6 connection thread (multiple addresses)
|
// IPv6 connection thread (multiple addresses)
|
||||||
void ConnectThreadForIPv6(THREAD *thread, void *param)
|
void ConnectThreadForIPv6(THREAD* thread, void* param)
|
||||||
|
{
|
||||||
|
CONNECT_SERIAL_PARAM* p = (CONNECT_SERIAL_PARAM*)param;
|
||||||
|
if (thread == NULL || p == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
p->LocalIP = BIND_LOCALIP_NULL;
|
||||||
|
p->LocalPort = BIND_LOCALPORT_NULL;
|
||||||
|
return BindConnectThreadForIPv6(thread, param);
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPv6 connection thread (multiple addresses)
|
||||||
|
//void ConnectThreadForIPv6(THREAD *thread, void *param)
|
||||||
|
void BindConnectThreadForIPv6(THREAD* thread, void* param)
|
||||||
{
|
{
|
||||||
SOCKET s = INVALID_SOCKET;
|
SOCKET s = INVALID_SOCKET;
|
||||||
IP current_ip;
|
IP current_ip;
|
||||||
@ -14463,6 +14663,38 @@ void ConnectThreadForIPv6(THREAD *thread, void *param)
|
|||||||
|
|
||||||
// Socket creation
|
// Socket creation
|
||||||
s = socket(AF_INET6, SOCK_STREAM, 0);
|
s = socket(AF_INET6, SOCK_STREAM, 0);
|
||||||
|
|
||||||
|
// Top of Bind outgoing connection
|
||||||
|
if (s != INVALID_SOCKET){
|
||||||
|
int ier;
|
||||||
|
IP tmpIP;
|
||||||
|
IP *tmpIP2;
|
||||||
|
|
||||||
|
if (p->LocalIP == BIND_LOCALIP_NULL) {
|
||||||
|
StrToIP(&tmpIP, "0::0"); // A NULL address for the argument "p->LocalIP" is treated as if "0::0" in IPV6 was specified.
|
||||||
|
tmpIP2 = &tmpIP;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tmpIP2 = p->LocalIP;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((IsZeroIP(tmpIP2) == false) || (p->LocalPort != 0)){
|
||||||
|
|
||||||
|
// Bind the socket
|
||||||
|
if (bind_sock(s, tmpIP2, p->LocalPort) != 0) {
|
||||||
|
#ifdef OS_WIN32
|
||||||
|
ier = WSAGetLastError();
|
||||||
|
Debug("IPv6 bind() failed with error: %d %s\n", ier, PrintError(ier));
|
||||||
|
#else
|
||||||
|
Debug("IPv6 bind() failed with error: %d %s\n", errno, strerror(errno));
|
||||||
|
#endif
|
||||||
|
closesocket(s);
|
||||||
|
s = INVALID_SOCKET;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Bottom of Bind outgoing connection
|
||||||
|
|
||||||
if (s != INVALID_SOCKET)
|
if (s != INVALID_SOCKET)
|
||||||
{
|
{
|
||||||
// Connection
|
// Connection
|
||||||
@ -14588,6 +14820,18 @@ SOCK *ConnectEx4(char *hostname, UINT port, UINT timeout, bool *cancel_flag, cha
|
|||||||
return ConnectEx5(hostname, port, timeout, cancel_flag, nat_t_svc_name, nat_t_error_code, try_start_ssl, no_get_hostname, NULL, NULL, NULL, ret_ip);
|
return ConnectEx5(hostname, port, timeout, cancel_flag, nat_t_svc_name, nat_t_error_code, try_start_ssl, no_get_hostname, NULL, NULL, NULL, ret_ip);
|
||||||
}
|
}
|
||||||
SOCK *ConnectEx5(char *hostname, UINT port, UINT timeout, bool *cancel_flag, char *nat_t_svc_name, UINT *nat_t_error_code, bool try_start_ssl, bool no_get_hostname, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip)
|
SOCK *ConnectEx5(char *hostname, UINT port, UINT timeout, bool *cancel_flag, char *nat_t_svc_name, UINT *nat_t_error_code, bool try_start_ssl, bool no_get_hostname, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip)
|
||||||
|
{
|
||||||
|
return BindConnectEx5(BIND_LOCALIP_NULL, BIND_LOCALPORT_NULL, hostname, port, timeout, cancel_flag, nat_t_svc_name, nat_t_error_code, try_start_ssl, no_get_hostname, ssl_option, ssl_err, hint_str, ret_ip);
|
||||||
|
}
|
||||||
|
|
||||||
|
//SOCK* ConnectEx4(char* hostname, UINT port, UINT timeout, bool* cancel_flag, char* nat_t_svc_name, UINT* nat_t_error_code, bool try_start_ssl, bool no_get_hostname, IP* ret_ip)
|
||||||
|
SOCK *BindConnectEx4(IP *localIP, UINT localport, char *hostname, UINT port, UINT timeout, bool *cancel_flag, char *nat_t_svc_name, UINT *nat_t_error_code, bool try_start_ssl, bool no_get_hostname, IP *ret_ip)
|
||||||
|
{
|
||||||
|
// return ConnectEx5(hostname, port, timeout, cancel_flag, nat_t_svc_name, nat_t_error_code, try_start_ssl, no_get_hostname, NULL, NULL, NULL, ret_ip);
|
||||||
|
return BindConnectEx5(localIP, localport, hostname, port, timeout, cancel_flag, nat_t_svc_name, nat_t_error_code, try_start_ssl, no_get_hostname, NULL, NULL, NULL, ret_ip);
|
||||||
|
}
|
||||||
|
//SOCK *ConnectEx5(char *hostname, UINT port, UINT timeout, bool *cancel_flag, char *nat_t_svc_name, UINT *nat_t_error_code, bool try_start_ssl, bool no_get_hostname, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip)
|
||||||
|
SOCK *BindConnectEx5(IP *localIP, UINT localport, char *hostname, UINT port, UINT timeout, bool *cancel_flag, char *nat_t_svc_name, UINT *nat_t_error_code, bool try_start_ssl, bool no_get_hostname, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip)
|
||||||
{
|
{
|
||||||
bool dummy = false;
|
bool dummy = false;
|
||||||
bool use_natt = false;
|
bool use_natt = false;
|
||||||
@ -14683,6 +14927,16 @@ SOCK *ConnectEx5(char *hostname, UINT port, UINT timeout, bool *cancel_flag, cha
|
|||||||
if (LIST_NUM(iplist_v6) > 0)
|
if (LIST_NUM(iplist_v6) > 0)
|
||||||
{
|
{
|
||||||
p6.IpList = iplist_v6;
|
p6.IpList = iplist_v6;
|
||||||
|
|
||||||
|
if (localIP == BIND_LOCALIP_NULL) {
|
||||||
|
p6.LocalIP = BIND_LOCALIP_NULL; // Make the NULL address passing through
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
CopyIP(&p6.LocalIP_Cache, localIP);
|
||||||
|
p6.LocalIP = &p6.LocalIP_Cache;
|
||||||
|
}
|
||||||
|
p6.LocalPort = localport;
|
||||||
|
|
||||||
p6.Port = port;
|
p6.Port = port;
|
||||||
p6.Timeout = timeout;
|
p6.Timeout = timeout;
|
||||||
StrCpy(p6.Hostname, sizeof(p6.Hostname), hostname);
|
StrCpy(p6.Hostname, sizeof(p6.Hostname), hostname);
|
||||||
@ -14696,13 +14950,24 @@ SOCK *ConnectEx5(char *hostname, UINT port, UINT timeout, bool *cancel_flag, cha
|
|||||||
p6.Ret_Ip = &ret_ip6;
|
p6.Ret_Ip = &ret_ip6;
|
||||||
p6.RetryDelay = 250;
|
p6.RetryDelay = 250;
|
||||||
p6.Delay = 0;
|
p6.Delay = 0;
|
||||||
t6 = NewThread(ConnectThreadForIPv6, &p6);
|
// t6 = NewThread(ConnectThreadForIPv6, &p6);
|
||||||
|
t6 = NewThread(BindConnectThreadForIPv6, &p6); // For binding a socket
|
||||||
}
|
}
|
||||||
|
|
||||||
// IPv4 connection thread
|
// IPv4 connection thread
|
||||||
if (LIST_NUM(iplist_v4) > 0)
|
if (LIST_NUM(iplist_v4) > 0)
|
||||||
{
|
{
|
||||||
p4.IpList = iplist_v4;
|
p4.IpList = iplist_v4;
|
||||||
|
|
||||||
|
if (localIP == BIND_LOCALIP_NULL) {
|
||||||
|
p4.LocalIP = BIND_LOCALIP_NULL; // Make the NULL address passing through
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
CopyIP(&p4.LocalIP_Cache, localIP);
|
||||||
|
p4.LocalIP = &p4.LocalIP_Cache;
|
||||||
|
}
|
||||||
|
p4.LocalPort = localport;
|
||||||
|
|
||||||
p4.Port = port;
|
p4.Port = port;
|
||||||
p4.Timeout = timeout;
|
p4.Timeout = timeout;
|
||||||
StrCpy(p4.Hostname, sizeof(p4.Hostname), hostname);
|
StrCpy(p4.Hostname, sizeof(p4.Hostname), hostname);
|
||||||
@ -14721,7 +14986,8 @@ SOCK *ConnectEx5(char *hostname, UINT port, UINT timeout, bool *cancel_flag, cha
|
|||||||
p4.Ret_Ip = &ret_ip4;
|
p4.Ret_Ip = &ret_ip4;
|
||||||
p4.RetryDelay = 250;
|
p4.RetryDelay = 250;
|
||||||
p4.Delay = 250; // Delay by 250ms to prioritize IPv6 (RFC 6555 recommends 150-250ms, Chrome uses 300ms)
|
p4.Delay = 250; // Delay by 250ms to prioritize IPv6 (RFC 6555 recommends 150-250ms, Chrome uses 300ms)
|
||||||
t4 = NewThread(ConnectThreadForIPv4, &p4);
|
// t4 = NewThread(ConnectThreadForIPv4, &p4);
|
||||||
|
t4 = NewThread(BindConnectThreadForIPv4, &p4); // For binding a socket
|
||||||
}
|
}
|
||||||
|
|
||||||
if (t6 == NULL || t4 == NULL)
|
if (t6 == NULL || t4 == NULL)
|
||||||
|
@ -812,6 +812,9 @@ struct RUDP_STACK
|
|||||||
struct CONNECT_SERIAL_PARAM
|
struct CONNECT_SERIAL_PARAM
|
||||||
{
|
{
|
||||||
LIST *IpList;
|
LIST *IpList;
|
||||||
|
UINT LocalPort; // Local port number to bind
|
||||||
|
IP *LocalIP; // Local IP address to bind. NULL address allowed to use.
|
||||||
|
IP LocalIP_Cache; // Local IP address to bind
|
||||||
UINT Port;
|
UINT Port;
|
||||||
UINT Timeout;
|
UINT Timeout;
|
||||||
char Hostname[MAX_SIZE];
|
char Hostname[MAX_SIZE];
|
||||||
@ -950,6 +953,10 @@ void ConnectThreadForRUDP(THREAD *thread, void *param);
|
|||||||
void ConnectThreadForOverDnsOrIcmp(THREAD *thread, void *param);
|
void ConnectThreadForOverDnsOrIcmp(THREAD *thread, void *param);
|
||||||
void ConnectThreadForIPv4(THREAD *thread, void *param);
|
void ConnectThreadForIPv4(THREAD *thread, void *param);
|
||||||
void ConnectThreadForIPv6(THREAD *thread, void *param);
|
void ConnectThreadForIPv6(THREAD *thread, void *param);
|
||||||
|
|
||||||
|
void BindConnectThreadForIPv4(THREAD *thread, void *param);
|
||||||
|
void BindConnectThreadForIPv6(THREAD *thread, void *param);
|
||||||
|
|
||||||
SOCK *CreateTCPSock(SOCKET s, bool is_ipv6, IP *current_ip, bool no_get_hostname, char *hostname_original);
|
SOCK *CreateTCPSock(SOCKET s, bool is_ipv6, IP *current_ip, bool no_get_hostname, char *hostname_original);
|
||||||
SOCK *NewRUDPClientNatT(char *svc_name, IP *ip, UINT *error_code, UINT timeout, bool *cancel, char *hint_str, char *target_hostname);
|
SOCK *NewRUDPClientNatT(char *svc_name, IP *ip, UINT *error_code, UINT timeout, bool *cancel, char *hint_str, char *target_hostname);
|
||||||
RUDP_STACK *NewRUDPServer(char *svc_name, RUDP_STACK_INTERRUPTS_PROC *proc_interrupts, RUDP_STACK_RPC_RECV_PROC *proc_rpc_recv, void *param, UINT port, bool no_natt_register, bool over_dns_mode, volatile UINT *natt_global_udp_port, UCHAR rand_port_id, IP *listen_ip);
|
RUDP_STACK *NewRUDPServer(char *svc_name, RUDP_STACK_INTERRUPTS_PROC *proc_interrupts, RUDP_STACK_RPC_RECV_PROC *proc_rpc_recv, void *param, UINT port, bool no_natt_register, bool over_dns_mode, volatile UINT *natt_global_udp_port, UCHAR rand_port_id, IP *listen_ip);
|
||||||
@ -1113,6 +1120,14 @@ SOCK *ConnectEx3(char *hostname, UINT port, UINT timeout, bool *cancel_flag, cha
|
|||||||
SOCK *ConnectEx4(char *hostname, UINT port, UINT timeout, bool *cancel_flag, char *nat_t_svc_name, UINT *nat_t_error_code, bool try_start_ssl, bool no_get_hostname, IP *ret_ip);
|
SOCK *ConnectEx4(char *hostname, UINT port, UINT timeout, bool *cancel_flag, char *nat_t_svc_name, UINT *nat_t_error_code, bool try_start_ssl, bool no_get_hostname, IP *ret_ip);
|
||||||
SOCK *ConnectEx5(char *hostname, UINT port, UINT timeout, bool *cancel_flag, char *nat_t_svc_name, UINT *nat_t_error_code, bool try_start_ssl, bool no_get_hostname, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip);
|
SOCK *ConnectEx5(char *hostname, UINT port, UINT timeout, bool *cancel_flag, char *nat_t_svc_name, UINT *nat_t_error_code, bool try_start_ssl, bool no_get_hostname, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip);
|
||||||
SOCKET ConnectTimeoutIPv4(IP *ip, UINT port, UINT timeout, bool *cancel_flag);
|
SOCKET ConnectTimeoutIPv4(IP *ip, UINT port, UINT timeout, bool *cancel_flag);
|
||||||
|
|
||||||
|
// New function named with prefix "Bind" binds outgoing connection to a specific address. New one is wrapped in original one.
|
||||||
|
#define BIND_LOCALIP_NULL NULL // NULL IP address specifies no binding
|
||||||
|
#define BIND_LOCALPORT_NULL 0 // NULL port number specifies no binding
|
||||||
|
SOCK *BindConnectEx4(IP *localIP, UINT localport, char *hostname, UINT port, UINT timeout, bool *cancel_flag, char *nat_t_svc_name, UINT *nat_t_error_code, bool try_start_ssl, bool no_get_hostname, IP *ret_ip);
|
||||||
|
SOCK *BindConnectEx5(IP *localIP, UINT localport, char *hostname, UINT port, UINT timeout, bool *cancel_flag, char *nat_t_svc_name, UINT *nat_t_error_code, bool try_start_ssl, bool no_get_hostname, SSL_VERIFY_OPTION *ssl_option, UINT *ssl_err, char *hint_str, IP *ret_ip);
|
||||||
|
SOCKET BindConnectTimeoutIPv4(IP *localIP, UINT localport, IP *ip, UINT port, UINT timeout, bool *cancel_flag);
|
||||||
|
|
||||||
bool SetSocketBufferSize(SOCKET s, bool send, UINT size);
|
bool SetSocketBufferSize(SOCKET s, bool send, UINT size);
|
||||||
UINT SetSocketBufferSizeWithBestEffort(SOCKET s, bool send, UINT size);
|
UINT SetSocketBufferSizeWithBestEffort(SOCKET s, bool send, UINT size);
|
||||||
void InitUdpSocketBufferSize(SOCKET s);
|
void InitUdpSocketBufferSize(SOCKET s);
|
||||||
|
@ -16,11 +16,25 @@ SOCK *Internal_ProxyTcpConnect(PROXY_PARAM_IN *param, volatile bool *cancel_flag
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return ConnectEx4(param->Hostname, param->Port, param->Timeout, (bool *)cancel_flag, NULL, NULL, false, true, resolved_ip);
|
//return ConnectEx4(param->Hostname, param->Port, param->Timeout, (bool*)cancel_flag, NULL, NULL, false, true, resolved_ip);
|
||||||
|
return BindConnectEx4(param->BindLocalIP, param->BindLocalPort, param->Hostname, param->Port, param->Timeout, (bool *)cancel_flag, NULL, NULL, false, true, resolved_ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Connect to an HTTP proxy
|
// Connect to an HTTP proxy
|
||||||
UINT ProxyHttpConnect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag)
|
UINT ProxyHttpConnect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag)
|
||||||
|
{
|
||||||
|
// Validate arguments
|
||||||
|
if (out == NULL || in == NULL || in->Port == 0 || in->TargetPort == 0 || IsEmptyStr(in->Hostname) || IsEmptyStr(in->TargetHostname))
|
||||||
|
{
|
||||||
|
return PROXY_ERROR_PARAMETER;
|
||||||
|
}
|
||||||
|
in->BindLocalIP = BIND_LOCALIP_NULL;
|
||||||
|
in->BindLocalPort = BIND_LOCALPORT_NULL;
|
||||||
|
return BindProxyHttpConnect(out, in, cancel_flag);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Connect to an HTTP proxy
|
||||||
|
UINT BindProxyHttpConnect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag)
|
||||||
{
|
{
|
||||||
bool dummy_cancel_flag = false, use_auth = false;
|
bool dummy_cancel_flag = false, use_auth = false;
|
||||||
char target_hostname[MAX_HOST_NAME_LEN + 1];
|
char target_hostname[MAX_HOST_NAME_LEN + 1];
|
||||||
@ -208,6 +222,19 @@ FAILURE:
|
|||||||
|
|
||||||
// Connect to a SOCKS5 proxy (RFC1928, RFC1929 defines username/password authentication)
|
// Connect to a SOCKS5 proxy (RFC1928, RFC1929 defines username/password authentication)
|
||||||
UINT ProxySocks5Connect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag)
|
UINT ProxySocks5Connect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag)
|
||||||
|
{
|
||||||
|
// Validate arguments
|
||||||
|
if (out == NULL || in == NULL || in->Port == 0 || in->TargetPort == 0 || IsEmptyStr(in->Hostname) || IsEmptyStr(in->TargetHostname))
|
||||||
|
{
|
||||||
|
return PROXY_ERROR_PARAMETER;
|
||||||
|
}
|
||||||
|
in->BindLocalIP = BIND_LOCALIP_NULL;
|
||||||
|
in->BindLocalPort = BIND_LOCALPORT_NULL;
|
||||||
|
return BindProxySocks5Connect(out, in, cancel_flag);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Connect to a SOCKS5 proxy (RFC1928, RFC1929 defines username/password authentication)
|
||||||
|
UINT BindProxySocks5Connect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag)
|
||||||
{
|
{
|
||||||
bool dummy_cancel_flag = false;
|
bool dummy_cancel_flag = false;
|
||||||
UCHAR tmp, recv_buf[2], *recv_buf_final;
|
UCHAR tmp, recv_buf[2], *recv_buf_final;
|
||||||
@ -521,6 +548,19 @@ FAILURE:
|
|||||||
|
|
||||||
// Connect to a SOCKS4 proxy
|
// Connect to a SOCKS4 proxy
|
||||||
UINT ProxySocks4Connect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag)
|
UINT ProxySocks4Connect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag)
|
||||||
|
{
|
||||||
|
// Validate arguments
|
||||||
|
if (out == NULL || in == NULL || in->Port == 0 || in->TargetPort == 0 || IsEmptyStr(in->Hostname) || IsEmptyStr(in->TargetHostname))
|
||||||
|
{
|
||||||
|
return PROXY_ERROR_PARAMETER;
|
||||||
|
}
|
||||||
|
in->BindLocalIP = BIND_LOCALIP_NULL;
|
||||||
|
in->BindLocalPort = BIND_LOCALPORT_NULL;
|
||||||
|
return BindProxySocks4Connect(out, in, cancel_flag);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Connect to a SOCKS4 proxy
|
||||||
|
UINT BindProxySocks4Connect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag)
|
||||||
{
|
{
|
||||||
bool dummy_cancel_flag = false;
|
bool dummy_cancel_flag = false;
|
||||||
UCHAR tmp, recv_buf[8];
|
UCHAR tmp, recv_buf[8];
|
||||||
|
@ -30,6 +30,8 @@ struct PROXY_PARAM_IN
|
|||||||
UINT Timeout;
|
UINT Timeout;
|
||||||
char HttpCustomHeader[HTTP_CUSTOM_HEADER_MAX_SIZE];
|
char HttpCustomHeader[HTTP_CUSTOM_HEADER_MAX_SIZE];
|
||||||
char HttpUserAgent[HTTP_HEADER_USER_AGENT_MAX_SIZE + 1];
|
char HttpUserAgent[HTTP_HEADER_USER_AGENT_MAX_SIZE + 1];
|
||||||
|
IP *BindLocalIP; // Source IP address for outgoing connection
|
||||||
|
UINT BindLocalPort; // UINT used not USHORT // Source port number for outgoing connection
|
||||||
#ifdef OS_WIN32
|
#ifdef OS_WIN32
|
||||||
void *Hwnd;
|
void *Hwnd;
|
||||||
#endif
|
#endif
|
||||||
@ -45,4 +47,9 @@ UINT ProxyHttpConnect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *c
|
|||||||
UINT ProxySocks5Connect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag);
|
UINT ProxySocks5Connect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag);
|
||||||
UINT ProxySocks4Connect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag);
|
UINT ProxySocks4Connect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag);
|
||||||
|
|
||||||
|
// New function named with prefix "Bind" binds outgoing connection to a specific address. New one is wrapped in original one.
|
||||||
|
UINT BindProxyHttpConnect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag);
|
||||||
|
UINT BindProxySocks5Connect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag);
|
||||||
|
UINT BindProxySocks4Connect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -4168,6 +4168,7 @@ BUF *DhcpModify(DHCP_MODIFY_OPTION *m, void *data, UINT size)
|
|||||||
LIST *opt_list2 = NULL;
|
LIST *opt_list2 = NULL;
|
||||||
UINT src_size = size;
|
UINT src_size = size;
|
||||||
UINT i;
|
UINT i;
|
||||||
|
UINT dhcp_min_size;
|
||||||
// Validate arguments
|
// Validate arguments
|
||||||
if (m == NULL || data == NULL || size == 0)
|
if (m == NULL || data == NULL || size == 0)
|
||||||
{
|
{
|
||||||
@ -4270,11 +4271,13 @@ BUF *DhcpModify(DHCP_MODIFY_OPTION *m, void *data, UINT size)
|
|||||||
// Rewrite if anything changes. Do not rewrite if there is no change
|
// Rewrite if anything changes. Do not rewrite if there is no change
|
||||||
ret_ok = true;
|
ret_ok = true;
|
||||||
|
|
||||||
if (ret->Size < DHCP_MIN_SIZE)
|
// If src_size is greater than DHCP_MIN_SIZE, then use the src_size as minimum size of DHCP.
|
||||||
|
dhcp_min_size = MAX(src_size, DHCP_MIN_SIZE);
|
||||||
|
if (ret->Size < dhcp_min_size)
|
||||||
{
|
{
|
||||||
// Padding
|
// Padding
|
||||||
UCHAR *pad_buf;
|
UCHAR *pad_buf;
|
||||||
UINT pad_size = DHCP_MIN_SIZE - ret->Size;
|
UINT pad_size = dhcp_min_size - ret->Size;
|
||||||
|
|
||||||
pad_buf = ZeroMalloc(pad_size);
|
pad_buf = ZeroMalloc(pad_size);
|
||||||
|
|
||||||
|
@ -34,6 +34,23 @@ UINT64 TickHighres64()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UINT64 TickHighresNano64(bool raw)
|
||||||
|
{
|
||||||
|
UINT64 ret = 0;
|
||||||
|
|
||||||
|
#ifdef OS_WIN32
|
||||||
|
|
||||||
|
ret = (UINT64)(MsGetHiResTimeSpan(MsGetHiResCounter()) * 1000000000.0f);
|
||||||
|
|
||||||
|
#else // OS_WIN32
|
||||||
|
|
||||||
|
ret = UnixGetHighresTickNano64(raw);
|
||||||
|
|
||||||
|
#endif // OS_WIN32
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
// Convert the Tick value to time
|
// Convert the Tick value to time
|
||||||
UINT64 Tick64ToTime64(UINT64 tick)
|
UINT64 Tick64ToTime64(UINT64 tick)
|
||||||
{
|
{
|
||||||
|
@ -49,6 +49,7 @@ UINT64 Diff64(UINT64 a, UINT64 b);
|
|||||||
UINT64 Tick64ToTime64(UINT64 tick);
|
UINT64 Tick64ToTime64(UINT64 tick);
|
||||||
UINT64 TickToTime(UINT64 tick);
|
UINT64 TickToTime(UINT64 tick);
|
||||||
UINT64 TickHighres64();
|
UINT64 TickHighres64();
|
||||||
|
UINT64 TickHighresNano64(bool raw);
|
||||||
|
|
||||||
#endif // TICK64_H
|
#endif // TICK64_H
|
||||||
|
|
||||||
|
@ -2008,6 +2008,68 @@ void UnixGetSystemTime(SYSTEMTIME *system_time)
|
|||||||
pthread_mutex_unlock(&get_time_lock);
|
pthread_mutex_unlock(&get_time_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UINT64 UnixGetHighresTickNano64(bool raw)
|
||||||
|
{
|
||||||
|
#if defined(OS_WIN32) || defined(CLOCK_REALTIME) || defined(CLOCK_MONOTONIC) || defined(CLOCK_HIGHRES)
|
||||||
|
struct timespec t;
|
||||||
|
UINT64 ret;
|
||||||
|
static bool akirame = false;
|
||||||
|
|
||||||
|
if (akirame)
|
||||||
|
{
|
||||||
|
return UnixGetTick64() * 1000000ULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
Zero(&t, sizeof(t));
|
||||||
|
|
||||||
|
if (raw == false)
|
||||||
|
{
|
||||||
|
// Function to get the boot time of the system
|
||||||
|
// Be careful. The Implementation is depend on the system.
|
||||||
|
#ifdef CLOCK_HIGHRES
|
||||||
|
clock_gettime(CLOCK_HIGHRES, &t);
|
||||||
|
#else // CLOCK_HIGHRES
|
||||||
|
#ifdef CLOCK_MONOTONIC
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &t);
|
||||||
|
#else // CLOCK_MONOTONIC
|
||||||
|
clock_gettime(CLOCK_REALTIME, &t);
|
||||||
|
#endif // CLOCK_MONOTONIC
|
||||||
|
#endif // CLOCK_HIGHRES
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Function to get the boot time of the system
|
||||||
|
// Be careful. The Implementation is depend on the system.
|
||||||
|
#ifdef CLOCK_HIGHRES
|
||||||
|
clock_gettime(CLOCK_HIGHRES, &t);
|
||||||
|
#else // CLOCK_HIGHRES
|
||||||
|
#ifdef CLOCK_MONOTONIC_RAW
|
||||||
|
clock_gettime(CLOCK_MONOTONIC_RAW, &t);
|
||||||
|
#else // CLOCK_MONOTONIC_RAW
|
||||||
|
#ifdef CLOCK_MONOTONIC
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &t);
|
||||||
|
#else // CLOCK_MONOTONIC
|
||||||
|
clock_gettime(CLOCK_REALTIME, &t);
|
||||||
|
#endif // CLOCK_MONOTONIC
|
||||||
|
#endif // CLOCK_MONOTONIC_RAW
|
||||||
|
#endif // CLOCK_HIGHRES
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = ((UINT64)((UINT)t.tv_sec)) * 1000000000LL + (UINT64)t.tv_nsec;
|
||||||
|
|
||||||
|
if (akirame == false && ret == 0)
|
||||||
|
{
|
||||||
|
ret = UnixGetTick64() * 1000000ULL;
|
||||||
|
akirame = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
#else
|
||||||
|
return UnixGetTick64() * 1000000ULL;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
// Get the system timer (64bit)
|
// Get the system timer (64bit)
|
||||||
UINT64 UnixGetTick64()
|
UINT64 UnixGetTick64()
|
||||||
{
|
{
|
||||||
|
@ -117,6 +117,7 @@ void UnixSetThreadPriorityRealtime();
|
|||||||
void UnixSetResourceLimit(UINT id, UINT64 value);
|
void UnixSetResourceLimit(UINT id, UINT64 value);
|
||||||
bool UnixIs64BitRlimSupported();
|
bool UnixIs64BitRlimSupported();
|
||||||
UINT64 UnixGetTick64();
|
UINT64 UnixGetTick64();
|
||||||
|
UINT64 UnixGetHighresTickNano64(bool raw);
|
||||||
void UnixSigChldHandler(int sig);
|
void UnixSigChldHandler(int sig);
|
||||||
void UnixCloseIO();
|
void UnixCloseIO();
|
||||||
void UnixGetCurrentDir(char *dir, UINT size);
|
void UnixGetCurrentDir(char *dir, UINT size);
|
||||||
|
@ -2846,7 +2846,10 @@ bool Win32InitThread(THREAD *t)
|
|||||||
|
|
||||||
// Thread creation
|
// Thread creation
|
||||||
t->pData = w;
|
t->pData = w;
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
|
||||||
hThread = (HANDLE)_beginthreadex(NULL, 0, Win32DefaultThreadProc, info, 0, &thread_id);
|
hThread = (HANDLE)_beginthreadex(NULL, 0, Win32DefaultThreadProc, info, 0, &thread_id);
|
||||||
|
#pragma clang diagnostic pop
|
||||||
if (hThread == NULL)
|
if (hThread == NULL)
|
||||||
{
|
{
|
||||||
// Thread creation failure
|
// Thread creation failure
|
||||||
|
@ -73,7 +73,7 @@ CK_PKCS11_FUNCTION_INFO(C_GetSlotList)
|
|||||||
(
|
(
|
||||||
CK_BBOOL tokenPresent, /* only slots with tokens? */
|
CK_BBOOL tokenPresent, /* only slots with tokens? */
|
||||||
CK_SLOT_ID_PTR pSlotList, /* receives array of slot IDs */
|
CK_SLOT_ID_PTR pSlotList, /* receives array of slot IDs */
|
||||||
CK_ULONG_PTR pulCount /* receives number of slots */
|
CK_UINT_PTR pulCount /* receives number of slots */
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -351,7 +351,7 @@ CK_PKCS11_FUNCTION_INFO(C_FindObjects)
|
|||||||
CK_SESSION_HANDLE hSession, /* session's handle */
|
CK_SESSION_HANDLE hSession, /* session's handle */
|
||||||
CK_OBJECT_HANDLE_PTR phObject, /* gets obj. handles */
|
CK_OBJECT_HANDLE_PTR phObject, /* gets obj. handles */
|
||||||
CK_ULONG ulMaxObjectCount, /* max handles to get */
|
CK_ULONG ulMaxObjectCount, /* max handles to get */
|
||||||
CK_ULONG_PTR pulObjectCount /* actual # returned */
|
CK_UINT_PTR pulObjectCount /* actual # returned */
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -558,7 +558,7 @@ CK_PKCS11_FUNCTION_INFO(C_Sign)
|
|||||||
CK_BYTE_PTR pData, /* the data to sign */
|
CK_BYTE_PTR pData, /* the data to sign */
|
||||||
CK_ULONG ulDataLen, /* count of bytes to sign */
|
CK_ULONG ulDataLen, /* count of bytes to sign */
|
||||||
CK_BYTE_PTR pSignature, /* gets the signature */
|
CK_BYTE_PTR pSignature, /* gets the signature */
|
||||||
CK_ULONG_PTR pulSignatureLen /* gets signature length */
|
CK_UINT_PTR pulSignatureLen /* gets signature length */
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -51,6 +51,8 @@ typedef CK_BYTE CK_BBOOL;
|
|||||||
/* an unsigned value, at least 32 bits long */
|
/* an unsigned value, at least 32 bits long */
|
||||||
typedef unsigned long int CK_ULONG;
|
typedef unsigned long int CK_ULONG;
|
||||||
|
|
||||||
|
typedef unsigned int CK_UINT;
|
||||||
|
|
||||||
/* a signed value, the same size as a CK_ULONG */
|
/* a signed value, the same size as a CK_ULONG */
|
||||||
/* CK_LONG is new for v2.0 */
|
/* CK_LONG is new for v2.0 */
|
||||||
typedef long int CK_LONG;
|
typedef long int CK_LONG;
|
||||||
@ -68,6 +70,7 @@ typedef CK_BYTE CK_PTR CK_BYTE_PTR;
|
|||||||
typedef CK_CHAR CK_PTR CK_CHAR_PTR;
|
typedef CK_CHAR CK_PTR CK_CHAR_PTR;
|
||||||
typedef CK_UTF8CHAR CK_PTR CK_UTF8CHAR_PTR;
|
typedef CK_UTF8CHAR CK_PTR CK_UTF8CHAR_PTR;
|
||||||
typedef CK_ULONG CK_PTR CK_ULONG_PTR;
|
typedef CK_ULONG CK_PTR CK_ULONG_PTR;
|
||||||
|
typedef CK_UINT CK_PTR CK_UINT_PTR;
|
||||||
typedef void CK_PTR CK_VOID_PTR;
|
typedef void CK_PTR CK_VOID_PTR;
|
||||||
|
|
||||||
/* Pointer to a CK_VOID_PTR-- i.e., pointer to pointer to void */
|
/* Pointer to a CK_VOID_PTR-- i.e., pointer to pointer to void */
|
||||||
@ -110,7 +113,7 @@ typedef CK_ULONG CK_NOTIFICATION;
|
|||||||
#define CKN_SURRENDER 0
|
#define CKN_SURRENDER 0
|
||||||
|
|
||||||
|
|
||||||
typedef CK_ULONG CK_SLOT_ID;
|
typedef CK_UINT CK_SLOT_ID;
|
||||||
|
|
||||||
typedef CK_SLOT_ID CK_PTR CK_SLOT_ID_PTR;
|
typedef CK_SLOT_ID CK_PTR CK_SLOT_ID_PTR;
|
||||||
|
|
||||||
@ -262,7 +265,7 @@ typedef CK_TOKEN_INFO CK_PTR CK_TOKEN_INFO_PTR;
|
|||||||
|
|
||||||
/* CK_SESSION_HANDLE is a Cryptoki-assigned value that
|
/* CK_SESSION_HANDLE is a Cryptoki-assigned value that
|
||||||
* identifies a session */
|
* identifies a session */
|
||||||
typedef CK_ULONG CK_SESSION_HANDLE;
|
typedef CK_UINT CK_SESSION_HANDLE;
|
||||||
|
|
||||||
typedef CK_SESSION_HANDLE CK_PTR CK_SESSION_HANDLE_PTR;
|
typedef CK_SESSION_HANDLE CK_PTR CK_SESSION_HANDLE_PTR;
|
||||||
|
|
||||||
@ -310,7 +313,7 @@ typedef CK_SESSION_INFO CK_PTR CK_SESSION_INFO_PTR;
|
|||||||
|
|
||||||
/* CK_OBJECT_HANDLE is a token-specific identifier for an
|
/* CK_OBJECT_HANDLE is a token-specific identifier for an
|
||||||
* object */
|
* object */
|
||||||
typedef CK_ULONG CK_OBJECT_HANDLE;
|
typedef CK_UINT CK_OBJECT_HANDLE;
|
||||||
|
|
||||||
typedef CK_OBJECT_HANDLE CK_PTR CK_OBJECT_HANDLE_PTR;
|
typedef CK_OBJECT_HANDLE CK_PTR CK_OBJECT_HANDLE_PTR;
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
#undef APSTUDIO_READONLY_SYMBOLS
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// 日文 resources
|
// 、鬢・resources
|
||||||
|
|
||||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@ -1654,14 +1654,18 @@ BEGIN
|
|||||||
LTEXT "@S_MODE",S_MODE,254,169,166,17
|
LTEXT "@S_MODE",S_MODE,254,169,166,17
|
||||||
CONTROL "@R_BRIDGE",R_BRIDGE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,254,191,166,9
|
CONTROL "@R_BRIDGE",R_BRIDGE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,254,191,166,9
|
||||||
CONTROL "@R_MONITOR",R_MONITOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,254,205,166,9
|
CONTROL "@R_MONITOR",R_MONITOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,254,205,166,9
|
||||||
GROUPBOX "@STATIC17",IDC_STATIC,222,225,205,30
|
GROUPBOX "@STATIC17", IDC_STATIC, 222, 225, 205, 43
|
||||||
CONTROL "@R_NO_ROUTING",R_NO_ROUTING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,233,238,181,9
|
CONTROL "@R_NO_ROUTING",R_NO_ROUTING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,233,234,181,9
|
||||||
ICON ICO_WARNING,S_WARNING_ICON,223,261,18,18
|
LTEXT "@STATIC20", IDC_STATIC, 233, 243, 58, 17
|
||||||
LTEXT "@STATIC18",IDC_STATIC,247,261,180,26
|
EDITTEXT E_BIND_LOCALIP, 292, 243, 126, 11, ES_RIGHT | ES_AUTOHSCROLL
|
||||||
|
LTEXT "@STATIC21", IDC_STATIC, 233, 255, 58, 12
|
||||||
|
EDITTEXT E_BIND_LOCALPORT, 292, 255, 40, 11, ES_RIGHT | ES_AUTOHSCROLL
|
||||||
|
ICON ICO_WARNING,S_WARNING_ICON,223,270,18,18
|
||||||
|
LTEXT "@STATIC18",IDC_STATIC,247,270,180,26
|
||||||
DEFPUSHBUTTON "@IDOK",IDOK,294,291,64,15
|
DEFPUSHBUTTON "@IDOK",IDOK,294,291,64,15
|
||||||
PUSHBUTTON "@IDCANCEL",IDCANCEL,363,291,64,15
|
PUSHBUTTON "@IDCANCEL",IDCANCEL,363,291,64,15
|
||||||
ICON ICO_SWITCH,IDC_STATIC,230,169,18,18
|
ICON ICO_SWITCH,IDC_STATIC,230,169,18,18
|
||||||
END
|
END
|
||||||
|
|
||||||
D_CM_NEW_VLAN DIALOGEX 0, 0, 251, 98
|
D_CM_NEW_VLAN DIALOGEX 0, 0, 251, 98
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
@ -4865,12 +4869,12 @@ END
|
|||||||
//
|
//
|
||||||
|
|
||||||
BIN_WINPCAP BIN "Dummy.bin"
|
BIN_WINPCAP BIN "Dummy.bin"
|
||||||
#endif // 日文 resources
|
#endif // 、鬢・resources
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// 中文 (台灣) resources
|
// 、、、・(・xニW) resources
|
||||||
|
|
||||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHT)
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHT)
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@ -4886,12 +4890,12 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
|
|||||||
// Icon with lowest ID value placed first to ensure application icon
|
// Icon with lowest ID value placed first to ensure application icon
|
||||||
// remains consistent on all systems.
|
// remains consistent on all systems.
|
||||||
ICO_LANG_TRADITIONAL_CHINESE ICON "LANG_TRADITIONAL_CHINESE.ico"
|
ICO_LANG_TRADITIONAL_CHINESE ICON "LANG_TRADITIONAL_CHINESE.ico"
|
||||||
#endif // 中文 (台灣) resources
|
#endif // 、、、・(・xニW) resources
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// 英文 (美國) resources
|
// ュ^、・(ャ・・ resources
|
||||||
|
|
||||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@ -4952,7 +4956,7 @@ BMP_ZURUKKO BITMAP "Zurukko.bmp"
|
|||||||
BMP_VPNGATEEN BITMAP "VPNGateEN.bmp"
|
BMP_VPNGATEEN BITMAP "VPNGateEN.bmp"
|
||||||
BMP_VPNGATEJA BITMAP "VPNGateJA.bmp"
|
BMP_VPNGATEJA BITMAP "VPNGateJA.bmp"
|
||||||
BMP_UNIVTSUKUBA BITMAP "UnivTsukuba.bmp"
|
BMP_UNIVTSUKUBA BITMAP "UnivTsukuba.bmp"
|
||||||
#endif // 英文 (美國) resources
|
#endif // ュ^、・(ャ・・ resources
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
@ -339,6 +339,8 @@
|
|||||||
#define C_NUM_TCP 1075
|
#define C_NUM_TCP 1075
|
||||||
#define B_TRUST 1076
|
#define B_TRUST 1076
|
||||||
#define E_INTERVAL 1076
|
#define E_INTERVAL 1076
|
||||||
|
#define E_BIND_LOCALIP 9076 // Bind source IP address
|
||||||
|
#define E_BIND_LOCALPORT 9077 // Bind source port number
|
||||||
#define B_PROXY_CONFIG 1077
|
#define B_PROXY_CONFIG 1077
|
||||||
#define B_SERVER_CERT 1078
|
#define B_SERVER_CERT 1078
|
||||||
#define B_VIEW_SERVER_CERT 1079
|
#define B_VIEW_SERVER_CERT 1079
|
||||||
|
@ -2437,6 +2437,8 @@ STATIC17 其它配置(&G):
|
|||||||
R_NO_ROUTING 不要调整路由表(&R)
|
R_NO_ROUTING 不要调整路由表(&R)
|
||||||
STATIC18 除非你得到系统管理员的同意或者你有网络和安全方面的专业知识,否则请保持此对话框的默认设置。
|
STATIC18 除非你得到系统管理员的同意或者你有网络和安全方面的专业知识,否则请保持此对话框的默认设置。
|
||||||
STATIC19 VoIP / QoS 功能可以处理高优先级数据包,如 IP 电话数据包 (VoIP) 可以被更快的传输。
|
STATIC19 VoIP / QoS 功能可以处理高优先级数据包,如 IP 电话数据包 (VoIP) 可以被更快的传输。
|
||||||
|
STATIC20 Source IP Address:
|
||||||
|
STATIC21 Source Port Number:
|
||||||
R_DISABLE_QOS 禁用 VoIP / &QoS 功能
|
R_DISABLE_QOS 禁用 VoIP / &QoS 功能
|
||||||
IDOK 确定(&O)
|
IDOK 确定(&O)
|
||||||
IDCANCEL 取消
|
IDCANCEL 取消
|
||||||
@ -2480,7 +2482,7 @@ STATIC1 您可以更改 VPN Client 的设置
|
|||||||
STATIC2 远程管理(&E)
|
STATIC2 远程管理(&E)
|
||||||
STATIC3 您可以通过使用 VPN Client 管理器远程模式从另一台计算机上远程管理 VPN Client 服务程序。
|
STATIC3 您可以通过使用 VPN Client 管理器远程模式从另一台计算机上远程管理 VPN Client 服务程序。
|
||||||
R_ALLOW_REMOTE_CONFIG 允许 VPN Client 服务的远程管理(&R)
|
R_ALLOW_REMOTE_CONFIG 允许 VPN Client 服务的远程管理(&R)
|
||||||
S_WARNING 建议您在允许远程管理时设置密码。在菜单里选择“工具” >“设置密码”来设置密码。
|
S_WARNING 如果你允许远程管理,你必须设置一个密码。在菜单里选择“工具” >“设置密码”来设置密码。必须重新启动 VPN Client 服务,以应用远程管理可用性的配置变化。
|
||||||
STATIC4 在通讯闲置一段时间后自动断开互联网连接的环境下,可以通过向互联网上任意主机发送假数据包的方式来保持互联网连接。
|
STATIC4 在通讯闲置一段时间后自动断开互联网连接的环境下,可以通过向互联网上任意主机发送假数据包的方式来保持互联网连接。
|
||||||
R_USE_KEEP_CONNECT 使用保持 Internet 连接功能(&K)
|
R_USE_KEEP_CONNECT 使用保持 Internet 连接功能(&K)
|
||||||
S_HOSTNAME 主机名(&H):
|
S_HOSTNAME 主机名(&H):
|
||||||
@ -6476,7 +6478,7 @@ CMD_VpnAzureGetStatus_PRINT_CONNECTED 至 VPN Azure 云服务器的连接建立
|
|||||||
CMD_VpnAzureGetStatus_PRINT_HOSTNAME 在 VPN Azure 服务上的本 VPN 服务器的主机名
|
CMD_VpnAzureGetStatus_PRINT_HOSTNAME 在 VPN Azure 服务上的本 VPN 服务器的主机名
|
||||||
|
|
||||||
|
|
||||||
# VpnAzureSetStatus command
|
# VpnAzureSetEnable command
|
||||||
CMD_VpnAzureSetEnable 启用/禁用 VPN Azure 功能
|
CMD_VpnAzureSetEnable 启用/禁用 VPN Azure 功能
|
||||||
CMD_VpnAzureSetEnable_Help 启用或禁用 VPN Azure 功能。\n\nVPN Azure 可以更容易地从你家里的计算机到你办公室的计算机建立一个 VPN 会话。当一个 VPN 连接建立了,您可以访问您公司专用网络上的任何其他服务器。\n在办公室的计算机(VPN 服务器)上,你并不需要一个全球 IP 地址。它可以在防火墙或 NAT 后面工作。无需网络管理员的配置。您可以在您的家用电脑使用 Windows 内置的 SSTP VPN 客户端。\nVPN Azure 是一个云 VPN 服务由 SoftEther 公司经营。VPN Azure 是免费的,可提供给任何人。访问 http://www.vpnazure.net/ 查看详细信息和如何使用的说明。\n\nVPN Azure 主机名与动态 DNS 设置的主机名相同,但改变的域名后缀为“vpnazure.net”。要改变主机名使用 DynamicDnsSetHostname 命令。\n\n要执行此命令,你必须具有 VPN 服务器管理员权限。\n此命令不能在 VPN 网桥上运行。\n以集群成员运行的 VPN 服务器的虚拟 HUB 不能执行此命令。
|
CMD_VpnAzureSetEnable_Help 启用或禁用 VPN Azure 功能。\n\nVPN Azure 可以更容易地从你家里的计算机到你办公室的计算机建立一个 VPN 会话。当一个 VPN 连接建立了,您可以访问您公司专用网络上的任何其他服务器。\n在办公室的计算机(VPN 服务器)上,你并不需要一个全球 IP 地址。它可以在防火墙或 NAT 后面工作。无需网络管理员的配置。您可以在您的家用电脑使用 Windows 内置的 SSTP VPN 客户端。\nVPN Azure 是一个云 VPN 服务由 SoftEther 公司经营。VPN Azure 是免费的,可提供给任何人。访问 http://www.vpnazure.net/ 查看详细信息和如何使用的说明。\n\nVPN Azure 主机名与动态 DNS 设置的主机名相同,但改变的域名后缀为“vpnazure.net”。要改变主机名使用 DynamicDnsSetHostname 命令。\n\n要执行此命令,你必须具有 VPN 服务器管理员权限。\n此命令不能在 VPN 网桥上运行。\n以集群成员运行的 VPN 服务器的虚拟 HUB 不能执行此命令。
|
||||||
CMD_VpnAzureSetEnable_Args VpnAzureSetEnable [yes|no]
|
CMD_VpnAzureSetEnable_Args VpnAzureSetEnable [yes|no]
|
||||||
@ -7026,13 +7028,13 @@ CMD_AccountImport_OK 连接设置 "%s" 已导入。
|
|||||||
|
|
||||||
# RemoteEnable 命令
|
# RemoteEnable 命令
|
||||||
CMD_RemoteEnable 允许 VPN 客户服务的远程管理
|
CMD_RemoteEnable 允许 VPN 客户服务的远程管理
|
||||||
CMD_RemoteEnable_Help 对 VPN Client 服务,从本地主机以外的远程计算机上,允许通过命令行管理设施或 VPN Client 管理器员进行连接和管理。
|
CMD_RemoteEnable_Help 对 VPN Client 服务,从本地主机以外的远程计算机上,允许通过命令行管理设施或 VPN Client 管理器员进行连接和管理。必须重新启动 VPN Client 服务,以应用远程管理可用性的配置变化。如果你允许远程管理,你必须设置一个密码。
|
||||||
CMD_RemoteEnable_Args RemoteEnable
|
CMD_RemoteEnable_Args RemoteEnable
|
||||||
|
|
||||||
|
|
||||||
# RemoteDisable 命令
|
# RemoteDisable 命令
|
||||||
CMD_RemoteDisable 禁止 VPN 客户服务的远程管理
|
CMD_RemoteDisable 禁止 VPN 客户服务的远程管理
|
||||||
CMD_RemoteDisable_Help 对 VPN Client 服务,从本地主机以外的远程计算机上,禁止通过命令行管理设施或 VPN Client 管理器员进行连接和管理。
|
CMD_RemoteDisable_Help 对 VPN Client 服务,从本地主机以外的远程计算机上,禁止通过命令行管理设施或 VPN Client 管理器员进行连接和管理。必须重新启动 VPN 客户端服务,以应用远程管理可用性的配置变化。
|
||||||
CMD_RemoteDisable_Args RemoteDisable
|
CMD_RemoteDisable_Args RemoteDisable
|
||||||
|
|
||||||
|
|
||||||
|
@ -2421,6 +2421,8 @@ STATIC17 Other Confi&gurations:
|
|||||||
R_NO_ROUTING No Adjustments of &Routing Table
|
R_NO_ROUTING No Adjustments of &Routing Table
|
||||||
STATIC18 Keep the settings default in this dialog unless you are told to do so by a system administrator, or you have expertise for networking and security.
|
STATIC18 Keep the settings default in this dialog unless you are told to do so by a system administrator, or you have expertise for networking and security.
|
||||||
STATIC19 The VoIP / QoS functions handle high priority packets such as IP telephone packets (VoIP) to be transmitted faster.
|
STATIC19 The VoIP / QoS functions handle high priority packets such as IP telephone packets (VoIP) to be transmitted faster.
|
||||||
|
STATIC20 Source IP Address:
|
||||||
|
STATIC21 Source Port Number:
|
||||||
R_DISABLE_QOS Disable VoIP / &QoS Functions
|
R_DISABLE_QOS Disable VoIP / &QoS Functions
|
||||||
IDOK &OK
|
IDOK &OK
|
||||||
IDCANCEL Cancel
|
IDCANCEL Cancel
|
||||||
@ -2464,7 +2466,7 @@ STATIC1 You can modify the settings for VPN Client.
|
|||||||
STATIC2 R&emote Management:
|
STATIC2 R&emote Management:
|
||||||
STATIC3 You can remotely manage the VPN Client Service Program from another computer by using VPN Client Manager Remote Mode.
|
STATIC3 You can remotely manage the VPN Client Service Program from another computer by using VPN Client Manager Remote Mode.
|
||||||
R_ALLOW_REMOTE_CONFIG Allow &Remote Management of VPN Client Service
|
R_ALLOW_REMOTE_CONFIG Allow &Remote Management of VPN Client Service
|
||||||
S_WARNING It is recommended to set a password if you allow remote management. From the menu bar, choose Tools -> Set Password to set the password.
|
S_WARNING You must set a password if you allow remote management. From the menu bar, choose Tools -> Set Password to set the password. The VPN Client service must be restarted to apply the change of remote management availability.
|
||||||
STATIC4 For environments where Internet connections will automatically be disconnected when idle, you can keep alive the Internet connection by sending dummy packets to any host on the Internet.
|
STATIC4 For environments where Internet connections will automatically be disconnected when idle, you can keep alive the Internet connection by sending dummy packets to any host on the Internet.
|
||||||
R_USE_KEEP_CONNECT Use &Keep Alive Internet Connection Function
|
R_USE_KEEP_CONNECT Use &Keep Alive Internet Connection Function
|
||||||
S_HOSTNAME &Host Name:
|
S_HOSTNAME &Host Name:
|
||||||
@ -6463,7 +6465,7 @@ CMD_VpnAzureGetStatus_PRINT_CONNECTED Connection to VPN Azure Cloud Server is Es
|
|||||||
CMD_VpnAzureGetStatus_PRINT_HOSTNAME Hostname of this VPN Server on VPN Azure Service
|
CMD_VpnAzureGetStatus_PRINT_HOSTNAME Hostname of this VPN Server on VPN Azure Service
|
||||||
|
|
||||||
|
|
||||||
# VpnAzureSetStatus command
|
# VpnAzureSetEnable command
|
||||||
CMD_VpnAzureSetEnable Enable / Disable VPN Azure Function
|
CMD_VpnAzureSetEnable Enable / Disable VPN Azure Function
|
||||||
CMD_VpnAzureSetEnable_Help Enable or disable the VPN Azure function.\n\nVPN Azure makes it easier to establish a VPN Session from your home PC to your office PC. While a VPN connection is established, you can access to any other servers on the private network of your company.\nYou don't need a global IP address on the office PC (VPN Server). It can work behind firewalls or NATs. No network administrator's configuration required. You can use the built-in SSTP-VPN Client of Windows in your home PC.\nVPN Azure is a cloud VPN service operated by SoftEther VPN Project. VPN Azure is free of charge and available to anyone. Visit http://www.vpnazure.net/ to see details and how-to-use instructions.\n\nThe VPN Azure hostname is same to the hostname of the Dynamic DNS setting, but altering the domain suffix to "vpnazure.net". To change the hostname use the DynamicDnsSetHostname command.\n\nTo execute this command, you must have VPN Server administrator privileges. \nThis command cannot be run on VPN Bridge.\nYou cannot execute this command for Virtual Hubs of VPN Servers operating as a cluster.
|
CMD_VpnAzureSetEnable_Help Enable or disable the VPN Azure function.\n\nVPN Azure makes it easier to establish a VPN Session from your home PC to your office PC. While a VPN connection is established, you can access to any other servers on the private network of your company.\nYou don't need a global IP address on the office PC (VPN Server). It can work behind firewalls or NATs. No network administrator's configuration required. You can use the built-in SSTP-VPN Client of Windows in your home PC.\nVPN Azure is a cloud VPN service operated by SoftEther VPN Project. VPN Azure is free of charge and available to anyone. Visit http://www.vpnazure.net/ to see details and how-to-use instructions.\n\nThe VPN Azure hostname is same to the hostname of the Dynamic DNS setting, but altering the domain suffix to "vpnazure.net". To change the hostname use the DynamicDnsSetHostname command.\n\nTo execute this command, you must have VPN Server administrator privileges. \nThis command cannot be run on VPN Bridge.\nYou cannot execute this command for Virtual Hubs of VPN Servers operating as a cluster.
|
||||||
CMD_VpnAzureSetEnable_Args VpnAzureSetEnable [yes|no]
|
CMD_VpnAzureSetEnable_Args VpnAzureSetEnable [yes|no]
|
||||||
@ -7014,13 +7016,13 @@ CMD_AccountImport_OK The VPN Connection Setting "%s" has been imported.
|
|||||||
|
|
||||||
# RemoteEnable command
|
# RemoteEnable command
|
||||||
CMD_RemoteEnable Allow Remote Management of VPN Client Service
|
CMD_RemoteEnable Allow Remote Management of VPN Client Service
|
||||||
CMD_RemoteEnable_Help Use this to allow management of a VPN Client service from a remote computer that is not localhost, via a remote connection by Command Line Management Utility or VPN Client Manager.
|
CMD_RemoteEnable_Help Use this to allow management of a VPN Client service from a remote computer that is not localhost, via a remote connection by Command Line Management Utility or VPN Client Manager. The VPN Client service must be restarted to apply the change of remote management availability. You must set a password if you allow remote management.
|
||||||
CMD_RemoteEnable_Args RemoteEnable
|
CMD_RemoteEnable_Args RemoteEnable
|
||||||
|
|
||||||
|
|
||||||
# RemoteDisable command
|
# RemoteDisable command
|
||||||
CMD_RemoteDisable Deny Remote Management of VPN Client Service
|
CMD_RemoteDisable Deny Remote Management of VPN Client Service
|
||||||
CMD_RemoteDisable_Help Use this to deny management of a VPN Client service from a remote computer that is not localhost, via a remote connection by Command Line Management Utility or VPN Client Manager.
|
CMD_RemoteDisable_Help Use this to deny management of a VPN Client service from a remote computer that is not localhost, via a remote connection by Command Line Management Utility or VPN Client Manager. The VPN Client service must be restarted to apply the change of remote management availability.
|
||||||
CMD_RemoteDisable_Args RemoteDisable
|
CMD_RemoteDisable_Args RemoteDisable
|
||||||
|
|
||||||
|
|
||||||
|
@ -2424,6 +2424,8 @@ STATIC17 その他の設定(&G):
|
|||||||
R_NO_ROUTING ルーティングテーブルの調整処理を行わない(&R)
|
R_NO_ROUTING ルーティングテーブルの調整処理を行わない(&R)
|
||||||
STATIC18 この設定画面の設定項目は、システム管理者から指示があった場合や、ネットワークやセキュリティに関して詳しい知識をお持ちの場合以外は変更しないでください。
|
STATIC18 この設定画面の設定項目は、システム管理者から指示があった場合や、ネットワークやセキュリティに関して詳しい知識をお持ちの場合以外は変更しないでください。
|
||||||
STATIC19 VoIP / QoS 対応機能を使用すると、IP 電話パケットなどの優先度の高いパケットを VPN 内で高速に伝送できます。
|
STATIC19 VoIP / QoS 対応機能を使用すると、IP 電話パケットなどの優先度の高いパケットを VPN 内で高速に伝送できます。
|
||||||
|
STATIC20 送信元IPアドレス:
|
||||||
|
STATIC21 送信元ポート番号:
|
||||||
R_DISABLE_QOS VoIP / QoS 対応機能を無効にする(&Q)
|
R_DISABLE_QOS VoIP / QoS 対応機能を無効にする(&Q)
|
||||||
IDOK &OK
|
IDOK &OK
|
||||||
IDCANCEL キャンセル
|
IDCANCEL キャンセル
|
||||||
@ -2467,7 +2469,7 @@ STATIC1 VPN Client の動作に関する設定を変更できます。
|
|||||||
STATIC2 リモート管理の設定(&E)
|
STATIC2 リモート管理の設定(&E)
|
||||||
STATIC3 VPN Client サービスプログラムを別のコンピュータ上から VPN クライアント接続マネージャによってリモート管理することが可能です。
|
STATIC3 VPN Client サービスプログラムを別のコンピュータ上から VPN クライアント接続マネージャによってリモート管理することが可能です。
|
||||||
R_ALLOW_REMOTE_CONFIG VPN Client サービスのリモート管理を許可する(&R)
|
R_ALLOW_REMOTE_CONFIG VPN Client サービスのリモート管理を許可する(&R)
|
||||||
S_WARNING リモート管理を許可する場合、パスワードを設定しておくことを強くお勧めします。パスワードは [ツール] メニューの [パスワードの設定] をクリックして設定することができます。
|
S_WARNING リモート管理を許可する場合、パスワードを設定する必要があります。パスワードは [ツール] メニューの [パスワードの設定] をクリックして設定することができます。リモート管理の可否の変更の設定適用には、VPN Client サービスを再起動する必要があります。
|
||||||
STATIC4 一定期間無通信状態が続くと接続が自動的に切断されるようなネットワーク接続環境の場合、インターネット上の任意のサーバーに対して一定間隔ごとにパケットを送信することにより、インターネット接続を維持することができます。
|
STATIC4 一定期間無通信状態が続くと接続が自動的に切断されるようなネットワーク接続環境の場合、インターネット上の任意のサーバーに対して一定間隔ごとにパケットを送信することにより、インターネット接続を維持することができます。
|
||||||
R_USE_KEEP_CONNECT インターネット接続の維持機能を使用する(&K)
|
R_USE_KEEP_CONNECT インターネット接続の維持機能を使用する(&K)
|
||||||
S_HOSTNAME ホスト名(&H):
|
S_HOSTNAME ホスト名(&H):
|
||||||
@ -6470,7 +6472,7 @@ CMD_VpnAzureGetStatus_PRINT_CONNECTED VPN Azure クラウドサーバーへ接
|
|||||||
CMD_VpnAzureGetStatus_PRINT_HOSTNAME VPN Azure サービス上でのホスト名
|
CMD_VpnAzureGetStatus_PRINT_HOSTNAME VPN Azure サービス上でのホスト名
|
||||||
|
|
||||||
|
|
||||||
# VpnAzureSetStatus コマンド
|
# VpnAzureSetEnable コマンド
|
||||||
CMD_VpnAzureSetEnable VPN Azure 機能の有効化 / 無効化
|
CMD_VpnAzureSetEnable VPN Azure 機能の有効化 / 無効化
|
||||||
CMD_VpnAzureSetEnable_Help VPN Azure 機能を有効または無効にします。\n\nVPN Azure により、会社のパソコンに自宅や外出先のパソコンから非常に簡単に VPN 接続できるようになります。VPN 接続中は会社のパソコンを経由して、社内 LAN の他のサーバーにもアクセスできます。\n会社のパソコン (VPN Server) にはグローバル IP アドレスは不要です。ファイアウォールや NAT の内側であっても動作し、ネットワーク管理者による設定は一切必要ありません。VPN クライアントとなる自宅のパソコンでは、Windows に標準付属の SSTP VPN クライアントを使用できます。\nVPN Azure は、SoftEther VPN Server をお使いの方はどなたでも無料で利用できるクラウド VPN サービスです。ソフトイーサ株式会社によって運営されています。使い方は http://www.vpnazure.net/ に掲載されています。\n\nVPN Azure ホスト名はダイナミック DNS サービスのホスト名のドメイン部分を "vpnazure.net" に変更したものが使用されます。ホスト名を変更するには DynamicDnsSetHostname コマンドを使用してください。\n\nこのコマンドを実行するには、VPN Server の管理者権限が必要です。\nこのコマンドは、VPN Bridge では実行できません。\nこのコマンドは、クラスタとして動作している VPN Server の仮想 HUB では実行できません。
|
CMD_VpnAzureSetEnable_Help VPN Azure 機能を有効または無効にします。\n\nVPN Azure により、会社のパソコンに自宅や外出先のパソコンから非常に簡単に VPN 接続できるようになります。VPN 接続中は会社のパソコンを経由して、社内 LAN の他のサーバーにもアクセスできます。\n会社のパソコン (VPN Server) にはグローバル IP アドレスは不要です。ファイアウォールや NAT の内側であっても動作し、ネットワーク管理者による設定は一切必要ありません。VPN クライアントとなる自宅のパソコンでは、Windows に標準付属の SSTP VPN クライアントを使用できます。\nVPN Azure は、SoftEther VPN Server をお使いの方はどなたでも無料で利用できるクラウド VPN サービスです。ソフトイーサ株式会社によって運営されています。使い方は http://www.vpnazure.net/ に掲載されています。\n\nVPN Azure ホスト名はダイナミック DNS サービスのホスト名のドメイン部分を "vpnazure.net" に変更したものが使用されます。ホスト名を変更するには DynamicDnsSetHostname コマンドを使用してください。\n\nこのコマンドを実行するには、VPN Server の管理者権限が必要です。\nこのコマンドは、VPN Bridge では実行できません。\nこのコマンドは、クラスタとして動作している VPN Server の仮想 HUB では実行できません。
|
||||||
CMD_VpnAzureSetEnable_Args VpnAzureSetEnable [yes|no]
|
CMD_VpnAzureSetEnable_Args VpnAzureSetEnable [yes|no]
|
||||||
@ -7020,13 +7022,13 @@ CMD_AccountImport_OK 接続設定 "%s" としてインポートしました。
|
|||||||
|
|
||||||
# RemoteEnable コマンド
|
# RemoteEnable コマンド
|
||||||
CMD_RemoteEnable VPN Client サービスのリモート管理の許可
|
CMD_RemoteEnable VPN Client サービスのリモート管理の許可
|
||||||
CMD_RemoteEnable_Help VPN Client サービスに、localhost 以外のリモートコンピュータから、コマンドライン管理ユーティリティまたは VPN クライアント接続マネージャでリモート接続して管理することを許可します。
|
CMD_RemoteEnable_Help VPN Client サービスに、localhost 以外のリモートコンピュータから、コマンドライン管理ユーティリティまたは VPN クライアント接続マネージャでリモート接続して管理することを許可します。注意: リモート管理の可否の変更の設定適用には、VPN Client サービスを再起動する必要があります。リモート管理を許可する場合、パスワードを設定する必要があります。
|
||||||
CMD_RemoteEnable_Args RemoteEnable
|
CMD_RemoteEnable_Args RemoteEnable
|
||||||
|
|
||||||
|
|
||||||
# RemoteDisable コマンド
|
# RemoteDisable コマンド
|
||||||
CMD_RemoteDisable VPN Client サービスのリモート管理の禁止
|
CMD_RemoteDisable VPN Client サービスのリモート管理の禁止
|
||||||
CMD_RemoteDisable_Help VPN Client サービスに、localhost 以外のリモートコンピュータからコマンドライン管理ユーティリティまたは VPN クライアント接続マネージャでリモート接続して管理することを禁止します。
|
CMD_RemoteDisable_Help VPN Client サービスに、localhost 以外のリモートコンピュータからコマンドライン管理ユーティリティまたは VPN クライアント接続マネージャでリモート接続して管理することを禁止します。注意: リモート管理の可否の変更の設定適用には、VPN Client サービスを再起動する必要があります。
|
||||||
CMD_RemoteDisable_Args RemoteDisable
|
CMD_RemoteDisable_Args RemoteDisable
|
||||||
|
|
||||||
|
|
||||||
|
@ -2402,6 +2402,8 @@ STATIC17 기타 설정 (&G):
|
|||||||
R_NO_ROUTING 라우팅 테이블의 조정 작업을 수행하지 (&R)
|
R_NO_ROUTING 라우팅 테이블의 조정 작업을 수행하지 (&R)
|
||||||
STATIC18 이 설정 화면의 설정은 시스템 관리자의 지시가있을 경우, 네트워크 및 보안에 대해 상세한 지식을 가지고있는 경우를 제외하고는 변경하지 마십시오.
|
STATIC18 이 설정 화면의 설정은 시스템 관리자의 지시가있을 경우, 네트워크 및 보안에 대해 상세한 지식을 가지고있는 경우를 제외하고는 변경하지 마십시오.
|
||||||
STATIC19 VoIP/QoS 지원 기능을 사용하면 IP 전화 패킷 등의 우선 순위가 높은 패킷을 VPN에서 고속으로 전송할 수 있습니다.
|
STATIC19 VoIP/QoS 지원 기능을 사용하면 IP 전화 패킷 등의 우선 순위가 높은 패킷을 VPN에서 고속으로 전송할 수 있습니다.
|
||||||
|
STATIC20 Source IP Address:
|
||||||
|
STATIC21 Source Port Number:
|
||||||
R_DISABLE_QOS VoIP/QoS 지원 기능을 비활성화 (&Q)
|
R_DISABLE_QOS VoIP/QoS 지원 기능을 비활성화 (&Q)
|
||||||
IDOK & OK
|
IDOK & OK
|
||||||
IDCANCEL 취소
|
IDCANCEL 취소
|
||||||
@ -6445,7 +6447,7 @@ CMD_VpnAzureGetStatus_PRINT_CONNECTED VPN Azure 클라우드 서버에 연결
|
|||||||
CMD_VpnAzureGetStatus_PRINT_HOSTNAME VPN Azure 서비스에서 호스트 이름
|
CMD_VpnAzureGetStatus_PRINT_HOSTNAME VPN Azure 서비스에서 호스트 이름
|
||||||
|
|
||||||
|
|
||||||
# VpnAzureSetStatus 명령
|
# VpnAzureSetEnable 명령
|
||||||
CMD_VpnAzureSetEnable VPN Azure 기능의 활성화/비활성화
|
CMD_VpnAzureSetEnable VPN Azure 기능의 활성화/비활성화
|
||||||
CMD_VpnAzureSetEnable_Help VPN Azure 기능을 활성화하거나 비활성화합니다. \n \nVPN Azure하여 회사의 PC에 가정이나 이동 PC에서 매우 쉽게 VPN 연결 할 수 있습니다. VPN 연결 중에 회사의 컴퓨터를 통해 사내 LAN의 다른 서버에 액세스 할 수 있습니다. \n 회사 컴퓨터 (VPN Server)는 글로벌 IP 주소는 필요하지 않습니다. 방화벽이나 NAT 뒤에라도 작동하고 네트워크 관리자의 설정은 필요하지 않습니다. VPN 클라이언트가 될 자택의 PC에서는 Windows에 표준 부속의 SSTP VPN 클라이언트를 사용할 수 있습니다. \nVPN Azure는 SoftEther VPN Server를 사용하시는 분들은 누구나 무료로 이용할 수 클라우드 VPN 서비스입니다. 소프트 이사 회사에 의해 운영되고 있습니다. 사용법은 http://www.vpnazure.net/에 게재되어 있습니다. \n \nVPN Azure 호스트 이름은 동적 DNS 서비스 호스트 이름의 도메인 부분을 "vpnazure.net"로 변경 한 것이 사용됩니다. 호스트 이름을 변경하려면 DynamicDnsSetHostname 명령을 사용하십시오. \n \n이 명령을 실행하려면 VPN Server 관리자 권한이 있어야합니다. \n이 명령은 VPN Bridge에서는 실행되지 않습니다. \n이 명령은 클러스터로 작동하는 VPN Server의 가상 HUB에서는 실행되지 않습니다.
|
CMD_VpnAzureSetEnable_Help VPN Azure 기능을 활성화하거나 비활성화합니다. \n \nVPN Azure하여 회사의 PC에 가정이나 이동 PC에서 매우 쉽게 VPN 연결 할 수 있습니다. VPN 연결 중에 회사의 컴퓨터를 통해 사내 LAN의 다른 서버에 액세스 할 수 있습니다. \n 회사 컴퓨터 (VPN Server)는 글로벌 IP 주소는 필요하지 않습니다. 방화벽이나 NAT 뒤에라도 작동하고 네트워크 관리자의 설정은 필요하지 않습니다. VPN 클라이언트가 될 자택의 PC에서는 Windows에 표준 부속의 SSTP VPN 클라이언트를 사용할 수 있습니다. \nVPN Azure는 SoftEther VPN Server를 사용하시는 분들은 누구나 무료로 이용할 수 클라우드 VPN 서비스입니다. 소프트 이사 회사에 의해 운영되고 있습니다. 사용법은 http://www.vpnazure.net/에 게재되어 있습니다. \n \nVPN Azure 호스트 이름은 동적 DNS 서비스 호스트 이름의 도메인 부분을 "vpnazure.net"로 변경 한 것이 사용됩니다. 호스트 이름을 변경하려면 DynamicDnsSetHostname 명령을 사용하십시오. \n \n이 명령을 실행하려면 VPN Server 관리자 권한이 있어야합니다. \n이 명령은 VPN Bridge에서는 실행되지 않습니다. \n이 명령은 클러스터로 작동하는 VPN Server의 가상 HUB에서는 실행되지 않습니다.
|
||||||
CMD_VpnAzureSetEnable_Args VpnAzureSetEnable [yes|no]
|
CMD_VpnAzureSetEnable_Args VpnAzureSetEnable [yes|no]
|
||||||
|
@ -479,7 +479,7 @@ NATT_MSG ** Connected with NAT traversal - might be unstable **\r\n\r\nThis VPN
|
|||||||
# Virtual HUB Admin Options
|
# Virtual HUB Admin Options
|
||||||
HUB_AO_CLICK Select an item to view the description here.
|
HUB_AO_CLICK Select an item to view the description here.
|
||||||
HUB_AO_UNKNOWN The description of the item was not found. Refer to the documents, or speculate the meaning and purpose of the item from the name of the item.
|
HUB_AO_UNKNOWN The description of the item was not found. Refer to the documents, or speculate the meaning and purpose of the item from the name of the item.
|
||||||
HUB_AO_allow_eap_tls_match_user_by_cert If you enable (set to 1) this option, the Virtual Hub will attempt to match the EAP Identity not only with usernames, but also with user certificate CNs during the PPP EAP authentication flow.
|
HUB_AO_allow_hub_admin_change_option This is a special item. If you are enable (set to 1) this option, then not only the VPN Server's global administrator but also the Virtual Hub's administrator will be granted to modify the Virtual Hub Admin Options by himself.
|
||||||
HUB_AO_deny_hub_admin_change_ext_option If you are enable (set to 1) this option, the Virtual Hub's administrator will be forbidden to modify any values on the Virtual Hub Extended Options, then only the VPN Server's global administrator can modify them.
|
HUB_AO_deny_hub_admin_change_ext_option If you are enable (set to 1) this option, the Virtual Hub's administrator will be forbidden to modify any values on the Virtual Hub Extended Options, then only the VPN Server's global administrator can modify them.
|
||||||
HUB_AO_no_delay_jitter_packet_loss If you set this option to non-zero value, then all parameters of delay, jitter and packet-loss on the access-list entry will be ignored even if these parameters are set when the administrator adds a new access list entry. Therefore, delay, jitter and packet-loss generating function will be virtually disabled. Because of the delay generating function sometimes make a high volume of load on the CPU and RAM, a Virtual Hub which is shared by several users should have this option enabled.
|
HUB_AO_no_delay_jitter_packet_loss If you set this option to non-zero value, then all parameters of delay, jitter and packet-loss on the access-list entry will be ignored even if these parameters are set when the administrator adds a new access list entry. Therefore, delay, jitter and packet-loss generating function will be virtually disabled. Because of the delay generating function sometimes make a high volume of load on the CPU and RAM, a Virtual Hub which is shared by several users should have this option enabled.
|
||||||
HUB_AO_max_users If you set this option to non-zero value, the maximum number of user objects registered on the Virtual Hub will be limited to this value, then greater number of user objects than this value cannot be added.
|
HUB_AO_max_users If you set this option to non-zero value, the maximum number of user objects registered on the Virtual Hub will be limited to this value, then greater number of user objects than this value cannot be added.
|
||||||
@ -2390,6 +2390,8 @@ STATIC17 Outras confi&gurações:
|
|||||||
R_NO_ROUTING Sem ajustes na tabela de &roteamento
|
R_NO_ROUTING Sem ajustes na tabela de &roteamento
|
||||||
STATIC18 Mantenha as configurações padrão nesta caixa de diálogo, a menos que seja solicitado por um administrador do sistema ou se você possui experiência em redes e segurança.
|
STATIC18 Mantenha as configurações padrão nesta caixa de diálogo, a menos que seja solicitado por um administrador do sistema ou se você possui experiência em redes e segurança.
|
||||||
STATIC19 As funções VoIP/QoS lidam com pacotes de alta prioridade, para serem transmitidos mais rapidamente.
|
STATIC19 As funções VoIP/QoS lidam com pacotes de alta prioridade, para serem transmitidos mais rapidamente.
|
||||||
|
STATIC20 Source IP Address:
|
||||||
|
STATIC21 Source Port Number:
|
||||||
R_DISABLE_QOS Desativar função VoIP / &QoS
|
R_DISABLE_QOS Desativar função VoIP / &QoS
|
||||||
IDOK &OK
|
IDOK &OK
|
||||||
IDCANCEL Cancelar
|
IDCANCEL Cancelar
|
||||||
@ -4441,7 +4443,7 @@ CMD_Debug_Msg2 The debug command has executed.\nResults: \"%S\"
|
|||||||
# Crash command
|
# Crash command
|
||||||
CMD_Crash Raise a error on the VPN Server / Bridge to terminate the process forcefully.
|
CMD_Crash Raise a error on the VPN Server / Bridge to terminate the process forcefully.
|
||||||
CMD_Crash_Help This command will raise a fatal error (memory access violation) on the VPN Server / Bridge running process in order to crash the process. As the result, VPN Server / Bridge will be terminated and restarted if it is running as a service mode. If the VPN Server is running as a user mode, the process will not automatically restarted.\nThis command is for a situation when the VPN Server / Bridge is under a non-recoverable error or the process is in an infinite loop. This command will disconnect all VPN Sessions on the VPN Server / Bridge. All unsaved settings in the memory of VPN Server / Bridge will be lost.\nBefore run this command, run the Flush command to try to save volatile data to the configuration file.\nTo execute this command, you must have VPN Server / VPN Bridge administrator privileges.
|
CMD_Crash_Help This command will raise a fatal error (memory access violation) on the VPN Server / Bridge running process in order to crash the process. As the result, VPN Server / Bridge will be terminated and restarted if it is running as a service mode. If the VPN Server is running as a user mode, the process will not automatically restarted.\nThis command is for a situation when the VPN Server / Bridge is under a non-recoverable error or the process is in an infinite loop. This command will disconnect all VPN Sessions on the VPN Server / Bridge. All unsaved settings in the memory of VPN Server / Bridge will be lost.\nBefore run this command, run the Flush command to try to save volatile data to the configuration file.\nTo execute this command, you must have VPN Server / VPN Bridge administrator privileges.
|
||||||
CMD_Crash_Args Crash [sim]
|
CMD_Crash_Args Crash [yes]
|
||||||
CMD_Crash_[yes] Input "yes" for confirmation.
|
CMD_Crash_[yes] Input "yes" for confirmation.
|
||||||
CMD_Crash_Msg Sending the Crush command to the VPN Server. The VPN Server will be let to crash immediately, so you can never get the result value of this command. After this moment, vpncmd will be disconnected from the VPN Server.
|
CMD_Crash_Msg Sending the Crush command to the VPN Server. The VPN Server will be let to crash immediately, so you can never get the result value of this command. After this moment, vpncmd will be disconnected from the VPN Server.
|
||||||
CMD_Crash_Confirm Do you really want to crash the VPN Server?\nInput "yes" if it is ok:
|
CMD_Crash_Confirm Do you really want to crash the VPN Server?\nInput "yes" if it is ok:
|
||||||
|
@ -2421,6 +2421,8 @@ STATIC17 Другие конфигурации:
|
|||||||
R_NO_ROUTING Не вносить изменения в таблицу маршрутизации
|
R_NO_ROUTING Не вносить изменения в таблицу маршрутизации
|
||||||
STATIC18 Если у вас нет опыта работы с сетью и безопасностью, то оставьте настройки в этом окне по умолчанию.
|
STATIC18 Если у вас нет опыта работы с сетью и безопасностью, то оставьте настройки в этом окне по умолчанию.
|
||||||
STATIC19 Функции VoIP/QoS обрабатывают пакеты (например VoIP) с высоким приоритетом для более быстрой передачи.
|
STATIC19 Функции VoIP/QoS обрабатывают пакеты (например VoIP) с высоким приоритетом для более быстрой передачи.
|
||||||
|
STATIC20 Source IP Address:
|
||||||
|
STATIC21 Source Port Number:
|
||||||
R_DISABLE_QOS Отключить функции VoIP / QoS
|
R_DISABLE_QOS Отключить функции VoIP / QoS
|
||||||
IDOK &OK
|
IDOK &OK
|
||||||
IDCANCEL Отмена
|
IDCANCEL Отмена
|
||||||
@ -6463,7 +6465,7 @@ CMD_VpnAzureGetStatus_PRINT_CONNECTED Connection to VPN Azure Cloud Server is Es
|
|||||||
CMD_VpnAzureGetStatus_PRINT_HOSTNAME Hostname of this VPN Server on VPN Azure Service
|
CMD_VpnAzureGetStatus_PRINT_HOSTNAME Hostname of this VPN Server on VPN Azure Service
|
||||||
|
|
||||||
|
|
||||||
# VpnAzureSetStatus command
|
# VpnAzureSetEnable command
|
||||||
CMD_VpnAzureSetEnable Enable / Disable VPN Azure Function
|
CMD_VpnAzureSetEnable Enable / Disable VPN Azure Function
|
||||||
CMD_VpnAzureSetEnable_Help Enable or disable the VPN Azure function.\n\nVPN Azure makes it easier to establish a VPN Session from your home PC to your office PC. While a VPN connection is established, you can access to any other servers on the private network of your company.\nYou don't need a global IP address on the office PC (VPN Server). It can work behind firewalls or NATs. No network administrator's configuration required. You can use the built-in SSTP-VPN Client of Windows in your home PC.\nVPN Azure is a cloud VPN service operated by SoftEther VPN Project. VPN Azure is free of charge and available to anyone. Visit http://www.vpnazure.net/ to see details and how-to-use instructions.\n\nThe VPN Azure hostname is same to the hostname of the Dynamic DNS setting, but altering the domain suffix to "vpnazure.net". To change the hostname use the DynamicDnsSetHostname command.\n\nTo execute this command, you must have VPN Server administrator privileges. \nThis command cannot be run on VPN Bridge.\nYou cannot execute this command for Virtual Hubs of VPN Servers operating as a cluster.
|
CMD_VpnAzureSetEnable_Help Enable or disable the VPN Azure function.\n\nVPN Azure makes it easier to establish a VPN Session from your home PC to your office PC. While a VPN connection is established, you can access to any other servers on the private network of your company.\nYou don't need a global IP address on the office PC (VPN Server). It can work behind firewalls or NATs. No network administrator's configuration required. You can use the built-in SSTP-VPN Client of Windows in your home PC.\nVPN Azure is a cloud VPN service operated by SoftEther VPN Project. VPN Azure is free of charge and available to anyone. Visit http://www.vpnazure.net/ to see details and how-to-use instructions.\n\nThe VPN Azure hostname is same to the hostname of the Dynamic DNS setting, but altering the domain suffix to "vpnazure.net". To change the hostname use the DynamicDnsSetHostname command.\n\nTo execute this command, you must have VPN Server administrator privileges. \nThis command cannot be run on VPN Bridge.\nYou cannot execute this command for Virtual Hubs of VPN Servers operating as a cluster.
|
||||||
CMD_VpnAzureSetEnable_Args VpnAzureSetEnable [yes|no]
|
CMD_VpnAzureSetEnable_Args VpnAzureSetEnable [yes|no]
|
||||||
|
@ -574,6 +574,7 @@ HUB_AO_NoPhysicalIPOnPacketLog If you set this option to non-zero value, then
|
|||||||
HUB_AO_UseHubNameAsDhcpUserClassOption If you set this option to non-zero value, then the Virtual Hub Name will be added to a DHCP request to an external DHCP server as the "User-Class" option. This allows to use separate pools of IP addresses for each Virtual Hub. (For only L2TP/IPsec and OpenVPN sessions.)
|
HUB_AO_UseHubNameAsDhcpUserClassOption If you set this option to non-zero value, then the Virtual Hub Name will be added to a DHCP request to an external DHCP server as the "User-Class" option. This allows to use separate pools of IP addresses for each Virtual Hub. (For only L2TP/IPsec and OpenVPN sessions.)
|
||||||
HUB_AO_UseHubNameAsRadiusNasId If you set this option to non-zero value, then the NAS-Identifier RADIUS attribute will be set to a name of the Virtual Hub. This allows to determine on RADIUS server whether access to the Virtual Hub should be granted or denied.
|
HUB_AO_UseHubNameAsRadiusNasId If you set this option to non-zero value, then the NAS-Identifier RADIUS attribute will be set to a name of the Virtual Hub. This allows to determine on RADIUS server whether access to the Virtual Hub should be granted or denied.
|
||||||
HUB_AO_AllowEapMatchUserByCert If you enable (set to 1) this option, the Virtual Hub will attempt to match the EAP Identity not only with usernames, but also with user certificates during the PPP EAP authentication flow.
|
HUB_AO_AllowEapMatchUserByCert If you enable (set to 1) this option, the Virtual Hub will attempt to match the EAP Identity not only with usernames, but also with user certificates during the PPP EAP authentication flow.
|
||||||
|
HUB_AO_AllowSameUserInPrivacyFilterMode Allow packets if both the source and destination session users are the same, even in PrivacyFilter mode.
|
||||||
|
|
||||||
|
|
||||||
#關於失敗連接對話方塊
|
#關於失敗連接對話方塊
|
||||||
@ -2438,6 +2439,8 @@ STATIC17 其它配置(&G):
|
|||||||
R_NO_ROUTING 不要調整路由表(&R)
|
R_NO_ROUTING 不要調整路由表(&R)
|
||||||
STATIC18 除非你得到系統管理員的同意或者你有網路和安全方面的專業知識,否則請保持此對話方塊的默認設置。
|
STATIC18 除非你得到系統管理員的同意或者你有網路和安全方面的專業知識,否則請保持此對話方塊的默認設置。
|
||||||
STATIC19 VoIP / QoS 功能可以處理高優先級封包,如 IP 電話封包 (VoIP) 可以被更快的傳輸。
|
STATIC19 VoIP / QoS 功能可以處理高優先級封包,如 IP 電話封包 (VoIP) 可以被更快的傳輸。
|
||||||
|
STATIC20 Source IP Address:
|
||||||
|
STATIC21 Source Port Number:
|
||||||
R_DISABLE_QOS 禁用 VoIP / &QoS 功能
|
R_DISABLE_QOS 禁用 VoIP / &QoS 功能
|
||||||
IDOK 確定(&O)
|
IDOK 確定(&O)
|
||||||
IDCANCEL 取消
|
IDCANCEL 取消
|
||||||
@ -6477,7 +6480,7 @@ CMD_VpnAzureGetStatus_PRINT_CONNECTED 至 VPN Azure 雲伺服器的連接建立
|
|||||||
CMD_VpnAzureGetStatus_PRINT_HOSTNAME 在 VPN Azure 服務上的本 VPN 伺服器的主機名稱
|
CMD_VpnAzureGetStatus_PRINT_HOSTNAME 在 VPN Azure 服務上的本 VPN 伺服器的主機名稱
|
||||||
|
|
||||||
|
|
||||||
# VpnAzureSetStatus command
|
# VpnAzureSetEnable command
|
||||||
CMD_VpnAzureSetEnable 啟用/禁用 VPN Azure 功能
|
CMD_VpnAzureSetEnable 啟用/禁用 VPN Azure 功能
|
||||||
CMD_VpnAzureSetEnable_Help 啟用或禁用 VPN Azure 功能。\n\nVPN Azure 可以更容易地從你家裡的電腦到你辦公室的電腦建立一個 VPN 會話。當一個 VPN 連接建立了,您可以訪問您公司私人網路絡上的任何其他伺服器。\n在辦公室的電腦(VPN 伺服器)上,你並不需要一個全球 IP 位址。它可以在防火牆或 NAT 後面工作。無需網路系統管理員的配置。您可以在您的家用電腦使用 Windows 內置的 SSTP VPN 用戶端。\nVPN Azure 是一個雲 VPN 服務由 SoftEther 公司經營。VPN Azure 是免費的,可提供給任何人。訪問 http://www.vpnazure.net/ 查看詳細資訊和如何使用的說明。\n\nVPN Azure 主機名稱與動態 DNS 設置的主機名稱相同,但改變的功能變數名稱尾碼為“vpnazure.net”。要改變主機名稱使用 DynamicDnsSetHostname 命令。\n\n要執行此命令,你必須具有 VPN 伺服器管理員許可權。\n此命令不能在 VPN 橋接器上運行。\n以集群成員運行的 VPN 伺服器的虛擬 HUB 不能執行此命令。
|
CMD_VpnAzureSetEnable_Help 啟用或禁用 VPN Azure 功能。\n\nVPN Azure 可以更容易地從你家裡的電腦到你辦公室的電腦建立一個 VPN 會話。當一個 VPN 連接建立了,您可以訪問您公司私人網路絡上的任何其他伺服器。\n在辦公室的電腦(VPN 伺服器)上,你並不需要一個全球 IP 位址。它可以在防火牆或 NAT 後面工作。無需網路系統管理員的配置。您可以在您的家用電腦使用 Windows 內置的 SSTP VPN 用戶端。\nVPN Azure 是一個雲 VPN 服務由 SoftEther 公司經營。VPN Azure 是免費的,可提供給任何人。訪問 http://www.vpnazure.net/ 查看詳細資訊和如何使用的說明。\n\nVPN Azure 主機名稱與動態 DNS 設置的主機名稱相同,但改變的功能變數名稱尾碼為“vpnazure.net”。要改變主機名稱使用 DynamicDnsSetHostname 命令。\n\n要執行此命令,你必須具有 VPN 伺服器管理員許可權。\n此命令不能在 VPN 橋接器上運行。\n以集群成員運行的 VPN 伺服器的虛擬 HUB 不能執行此命令。
|
||||||
CMD_VpnAzureSetEnable_Args VpnAzureSetEnable [yes|no]
|
CMD_VpnAzureSetEnable_Args VpnAzureSetEnable [yes|no]
|
||||||
|
@ -216,8 +216,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
<li><a href="#getspeciallistener">GetSpecialListener - Get Current Setting of the VPN over ICMP / VPN over DNS Function</a></li>
|
<li><a href="#getspeciallistener">GetSpecialListener - Get Current Setting of the VPN over ICMP / VPN over DNS Function</a></li>
|
||||||
<li><a href="#getazurestatus">GetAzureStatus - Show the current status of VPN Azure function</a></li>
|
<li><a href="#getazurestatus">GetAzureStatus - Show the current status of VPN Azure function</a></li>
|
||||||
<li><a href="#setazurestatus">SetAzureStatus - Enable / Disable VPN Azure Function</a></li>
|
<li><a href="#setazurestatus">SetAzureStatus - Enable / Disable VPN Azure Function</a></li>
|
||||||
<li><a href="#getddnsinternetsettng">GetDDnsInternetSettng - Get the Proxy Settings for Connecting to the DDNS server</a></li>
|
<li><a href="#getddnsinternetsetting">GetDDnsInternetSetting - Get the Proxy Settings for Connecting to the DDNS server</a></li>
|
||||||
<li><a href="#setddnsinternetsettng">SetDDnsInternetSettng - Set the Proxy Settings for Connecting to the DDNS server</a></li>
|
<li><a href="#setddnsinternetsetting">SetDDnsInternetSetting - Set the Proxy Settings for Connecting to the DDNS server</a></li>
|
||||||
<li><a href="#setvgsconfig">SetVgsConfig - Set the VPN Gate Server Configuration</a></li>
|
<li><a href="#setvgsconfig">SetVgsConfig - Set the VPN Gate Server Configuration</a></li>
|
||||||
<li><a href="#getvgsconfig">GetVgsConfig - Get the VPN Gate Server Configuration</a></li>
|
<li><a href="#getvgsconfig">GetVgsConfig - Get the VPN Gate Server Configuration</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -305,7 +305,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"ServerBuildInt_u32": 0,
|
"ServerBuildInt_u32": 0,
|
||||||
"ServerHostName_str": "serverhostname",
|
"ServerHostName_str": "serverhostname",
|
||||||
"ServerType_u32": 0,
|
"ServerType_u32": 0,
|
||||||
"ServerBuildDate_dt": "2020-08-01T12:24:36.123",
|
"ServerBuildDate_dt": "2024-08-01T12:24:36.123",
|
||||||
"ServerFamilyName_str": "serverfamilyname",
|
"ServerFamilyName_str": "serverfamilyname",
|
||||||
"OsType_u32": 0,
|
"OsType_u32": 0,
|
||||||
"OsServicePack_u32": 0,
|
"OsServicePack_u32": 0,
|
||||||
@ -460,9 +460,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Send.BroadcastCount_u64": 0,
|
"Send.BroadcastCount_u64": 0,
|
||||||
"Send.UnicastBytes_u64": 0,
|
"Send.UnicastBytes_u64": 0,
|
||||||
"Send.UnicastCount_u64": 0,
|
"Send.UnicastCount_u64": 0,
|
||||||
"CurrentTime_dt": "2020-08-01T12:24:36.123",
|
"CurrentTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CurrentTick_u64": 0,
|
"CurrentTick_u64": 0,
|
||||||
"StartTime_dt": "2020-08-01T12:24:36.123",
|
"StartTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"TotalMemory_u64": 0,
|
"TotalMemory_u64": 0,
|
||||||
"UsedMemory_u64": 0,
|
"UsedMemory_u64": 0,
|
||||||
"FreeMemory_u64": 0,
|
"FreeMemory_u64": 0,
|
||||||
@ -1136,7 +1136,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"result": {
|
"result": {
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"Controller_bool": false,
|
"Controller_bool": false,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Point_u32": 0,
|
"Point_u32": 0,
|
||||||
@ -1283,7 +1283,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"Controller_bool": false,
|
"Controller_bool": false,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Point_u32": 0,
|
"Point_u32": 0,
|
||||||
@ -1296,7 +1296,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"Controller_bool": false,
|
"Controller_bool": false,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Point_u32": 0,
|
"Point_u32": 0,
|
||||||
@ -1309,7 +1309,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"Controller_bool": false,
|
"Controller_bool": false,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Point_u32": 0,
|
"Point_u32": 0,
|
||||||
@ -1422,9 +1422,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Port_u32": 0,
|
"Port_u32": 0,
|
||||||
"Online_bool": false,
|
"Online_bool": false,
|
||||||
"LastError_u32": 0,
|
"LastError_u32": 0,
|
||||||
"StartedTime_dt": "2020-08-01T12:24:36.123",
|
"StartedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"FirstConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"FirstConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CurrentConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"CurrentConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumTry_u32": 0,
|
"NumTry_u32": 0,
|
||||||
"NumConnected_u32": 0,
|
"NumConnected_u32": 0,
|
||||||
"NumFailed_u32": 0
|
"NumFailed_u32": 0
|
||||||
@ -1918,9 +1918,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"NumSessions_u32": 0,
|
"NumSessions_u32": 0,
|
||||||
"NumMacTables_u32": 0,
|
"NumMacTables_u32": 0,
|
||||||
"NumIpTables_u32": 0,
|
"NumIpTables_u32": 0,
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
@ -1941,9 +1941,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"NumSessions_u32": 0,
|
"NumSessions_u32": 0,
|
||||||
"NumMacTables_u32": 0,
|
"NumMacTables_u32": 0,
|
||||||
"NumIpTables_u32": 0,
|
"NumIpTables_u32": 0,
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
@ -1964,9 +1964,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"NumSessions_u32": 0,
|
"NumSessions_u32": 0,
|
||||||
"NumMacTables_u32": 0,
|
"NumMacTables_u32": 0,
|
||||||
"NumIpTables_u32": 0,
|
"NumIpTables_u32": 0,
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
@ -2309,7 +2309,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Port_u32": 0,
|
"Port_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Type_u32": 0
|
"Type_u32": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -2317,7 +2317,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Port_u32": 0,
|
"Port_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Type_u32": 0
|
"Type_u32": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -2325,7 +2325,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Port_u32": 0,
|
"Port_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Type_u32": 0
|
"Type_u32": 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -2450,7 +2450,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"Ip_ip": "192.168.0.1",
|
"Ip_ip": "192.168.0.1",
|
||||||
"Port_u32": 0,
|
"Port_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ServerStr_str": "serverstr",
|
"ServerStr_str": "serverstr",
|
||||||
"ServerVer_u32": 0,
|
"ServerVer_u32": 0,
|
||||||
"ServerBuild_u32": 0,
|
"ServerBuild_u32": 0,
|
||||||
@ -2620,9 +2620,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Send.UnicastBytes_u64": 0,
|
"Send.UnicastBytes_u64": 0,
|
||||||
"Send.UnicastCount_u64": 0,
|
"Send.UnicastCount_u64": 0,
|
||||||
"SecureNATEnabled_bool": false,
|
"SecureNATEnabled_bool": false,
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumLogin_u32": 0
|
"NumLogin_u32": 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2992,19 +2992,19 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SubjectName_utf": "subjectname",
|
"SubjectName_utf": "subjectname",
|
||||||
"IssuerName_utf": "issuername",
|
"IssuerName_utf": "issuername",
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123"
|
"Expires_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SubjectName_utf": "subjectname",
|
"SubjectName_utf": "subjectname",
|
||||||
"IssuerName_utf": "issuername",
|
"IssuerName_utf": "issuername",
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123"
|
"Expires_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SubjectName_utf": "subjectname",
|
"SubjectName_utf": "subjectname",
|
||||||
"IssuerName_utf": "issuername",
|
"IssuerName_utf": "issuername",
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123"
|
"Expires_dt": "2024-08-01T12:24:36.123"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -4348,7 +4348,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Online_bool": false,
|
"Online_bool": false,
|
||||||
"Connected_bool": false,
|
"Connected_bool": false,
|
||||||
"LastError_u32": 0,
|
"LastError_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"TargetHubName_str": "targethubname"
|
"TargetHubName_str": "targethubname"
|
||||||
},
|
},
|
||||||
@ -4357,7 +4357,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Online_bool": false,
|
"Online_bool": false,
|
||||||
"Connected_bool": false,
|
"Connected_bool": false,
|
||||||
"LastError_u32": 0,
|
"LastError_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"TargetHubName_str": "targethubname"
|
"TargetHubName_str": "targethubname"
|
||||||
},
|
},
|
||||||
@ -4366,7 +4366,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Online_bool": false,
|
"Online_bool": false,
|
||||||
"Connected_bool": false,
|
"Connected_bool": false,
|
||||||
"LastError_u32": 0,
|
"LastError_u32": 0,
|
||||||
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
|
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"Hostname_str": "hostname",
|
"Hostname_str": "hostname",
|
||||||
"TargetHubName_str": "targethubname"
|
"TargetHubName_str": "targethubname"
|
||||||
}
|
}
|
||||||
@ -4668,9 +4668,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"ServerProductBuild_u32": 0,
|
"ServerProductBuild_u32": 0,
|
||||||
"ServerX_bin": "SGVsbG8gV29ybGQ=",
|
"ServerX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"ClientX_bin": "SGVsbG8gV29ybGQ=",
|
"ClientX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"StartTime_dt": "2020-08-01T12:24:36.123",
|
"StartTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"FirstConnectionEstablisiedTime_dt": "2020-08-01T12:24:36.123",
|
"FirstConnectionEstablisiedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CurrentConnectionEstablishTime_dt": "2020-08-01T12:24:36.123",
|
"CurrentConnectionEstablishTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumConnectionsEatablished_u32": 0,
|
"NumConnectionsEatablished_u32": 0,
|
||||||
"HalfConnection_bool": false,
|
"HalfConnection_bool": false,
|
||||||
"QoS_bool": false,
|
"QoS_bool": false,
|
||||||
@ -5996,7 +5996,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Name_str": "name",
|
"Name_str": "name",
|
||||||
"Realname_utf": "realname",
|
"Realname_utf": "realname",
|
||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"Auth_Password_str": "auth_password",
|
"Auth_Password_str": "auth_password",
|
||||||
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
@ -6057,9 +6057,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"GroupName_str": "groupname",
|
"GroupName_str": "groupname",
|
||||||
"Realname_utf": "realname",
|
"Realname_utf": "realname",
|
||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"Auth_Password_str": "auth_password",
|
"Auth_Password_str": "auth_password",
|
||||||
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
@ -6467,7 +6467,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"GroupName_str": "groupname",
|
"GroupName_str": "groupname",
|
||||||
"Realname_utf": "realname",
|
"Realname_utf": "realname",
|
||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"Auth_Password_str": "auth_password",
|
"Auth_Password_str": "auth_password",
|
||||||
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
@ -6528,9 +6528,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"GroupName_str": "groupname",
|
"GroupName_str": "groupname",
|
||||||
"Realname_utf": "realname",
|
"Realname_utf": "realname",
|
||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"Auth_Password_str": "auth_password",
|
"Auth_Password_str": "auth_password",
|
||||||
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
@ -6948,9 +6948,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"GroupName_str": "groupname",
|
"GroupName_str": "groupname",
|
||||||
"Realname_utf": "realname",
|
"Realname_utf": "realname",
|
||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"Auth_Password_str": "auth_password",
|
"Auth_Password_str": "auth_password",
|
||||||
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
"UserX_bin": "SGVsbG8gV29ybGQ=",
|
||||||
@ -7419,11 +7419,11 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"DenyAccess_bool": false,
|
"DenyAccess_bool": false,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"IsExpiresFilled_bool": false,
|
"IsExpiresFilled_bool": false,
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123",
|
"Expires_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
"Ex.Recv.BroadcastCount_u64": 0,
|
"Ex.Recv.BroadcastCount_u64": 0,
|
||||||
"Ex.Recv.UnicastBytes_u64": 0,
|
"Ex.Recv.UnicastBytes_u64": 0,
|
||||||
@ -7440,11 +7440,11 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"DenyAccess_bool": false,
|
"DenyAccess_bool": false,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"IsExpiresFilled_bool": false,
|
"IsExpiresFilled_bool": false,
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123",
|
"Expires_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
"Ex.Recv.BroadcastCount_u64": 0,
|
"Ex.Recv.BroadcastCount_u64": 0,
|
||||||
"Ex.Recv.UnicastBytes_u64": 0,
|
"Ex.Recv.UnicastBytes_u64": 0,
|
||||||
@ -7461,11 +7461,11 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Note_utf": "note",
|
"Note_utf": "note",
|
||||||
"AuthType_u32": 0,
|
"AuthType_u32": 0,
|
||||||
"NumLogin_u32": 0,
|
"NumLogin_u32": 0,
|
||||||
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
|
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"DenyAccess_bool": false,
|
"DenyAccess_bool": false,
|
||||||
"IsTrafficFilled_bool": false,
|
"IsTrafficFilled_bool": false,
|
||||||
"IsExpiresFilled_bool": false,
|
"IsExpiresFilled_bool": false,
|
||||||
"Expires_dt": "2020-08-01T12:24:36.123",
|
"Expires_dt": "2024-08-01T12:24:36.123",
|
||||||
"Ex.Recv.BroadcastBytes_u64": 0,
|
"Ex.Recv.BroadcastBytes_u64": 0,
|
||||||
"Ex.Recv.BroadcastCount_u64": 0,
|
"Ex.Recv.BroadcastCount_u64": 0,
|
||||||
"Ex.Recv.UnicastBytes_u64": 0,
|
"Ex.Recv.UnicastBytes_u64": 0,
|
||||||
@ -8907,8 +8907,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Client_MonitorMode_bool": false,
|
"Client_MonitorMode_bool": false,
|
||||||
"VLanId_u32": 0,
|
"VLanId_u32": 0,
|
||||||
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123"
|
"LastCommTime_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Name_str": "name",
|
"Name_str": "name",
|
||||||
@ -8929,8 +8929,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Client_MonitorMode_bool": false,
|
"Client_MonitorMode_bool": false,
|
||||||
"VLanId_u32": 0,
|
"VLanId_u32": 0,
|
||||||
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123"
|
"LastCommTime_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Name_str": "name",
|
"Name_str": "name",
|
||||||
@ -8951,8 +8951,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Client_MonitorMode_bool": false,
|
"Client_MonitorMode_bool": false,
|
||||||
"VLanId_u32": 0,
|
"VLanId_u32": 0,
|
||||||
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123"
|
"LastCommTime_dt": "2024-08-01T12:24:36.123"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -9117,9 +9117,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"ServerProductName_str": "serverproductname",
|
"ServerProductName_str": "serverproductname",
|
||||||
"ServerProductVer_u32": 0,
|
"ServerProductVer_u32": 0,
|
||||||
"ServerProductBuild_u32": 0,
|
"ServerProductBuild_u32": 0,
|
||||||
"StartTime_dt": "2020-08-01T12:24:36.123",
|
"StartTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"FirstConnectionEstablisiedTime_dt": "2020-08-01T12:24:36.123",
|
"FirstConnectionEstablisiedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"CurrentConnectionEstablishTime_dt": "2020-08-01T12:24:36.123",
|
"CurrentConnectionEstablishTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"NumConnectionsEatablished_u32": 0,
|
"NumConnectionsEatablished_u32": 0,
|
||||||
"HalfConnection_bool": false,
|
"HalfConnection_bool": false,
|
||||||
"QoS_bool": false,
|
"QoS_bool": false,
|
||||||
@ -9496,8 +9496,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname",
|
"RemoteHostname_str": "remotehostname",
|
||||||
"VlanId_u32": 0
|
"VlanId_u32": 0
|
||||||
@ -9506,8 +9506,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname",
|
"RemoteHostname_str": "remotehostname",
|
||||||
"VlanId_u32": 0
|
"VlanId_u32": 0
|
||||||
@ -9516,8 +9516,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"Key_u32": 0,
|
"Key_u32": 0,
|
||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname",
|
"RemoteHostname_str": "remotehostname",
|
||||||
"VlanId_u32": 0
|
"VlanId_u32": 0
|
||||||
@ -9663,8 +9663,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"DhcpAllocated_bool": false,
|
"DhcpAllocated_bool": false,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname"
|
"RemoteHostname_str": "remotehostname"
|
||||||
},
|
},
|
||||||
@ -9673,8 +9673,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"DhcpAllocated_bool": false,
|
"DhcpAllocated_bool": false,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname"
|
"RemoteHostname_str": "remotehostname"
|
||||||
},
|
},
|
||||||
@ -9683,8 +9683,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"SessionName_str": "sessionname",
|
"SessionName_str": "sessionname",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"DhcpAllocated_bool": false,
|
"DhcpAllocated_bool": false,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"RemoteItem_bool": false,
|
"RemoteItem_bool": false,
|
||||||
"RemoteHostname_str": "remotehostname"
|
"RemoteHostname_str": "remotehostname"
|
||||||
}
|
}
|
||||||
@ -10376,8 +10376,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"DestIp_ip": "192.168.0.1",
|
"DestIp_ip": "192.168.0.1",
|
||||||
"DestHost_str": "desthost",
|
"DestHost_str": "desthost",
|
||||||
"DestPort_u32": 0,
|
"DestPort_u32": 0,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"SendSize_u64": 0,
|
"SendSize_u64": 0,
|
||||||
"RecvSize_u64": 0,
|
"RecvSize_u64": 0,
|
||||||
"TcpStatus_u32": 0
|
"TcpStatus_u32": 0
|
||||||
@ -10391,8 +10391,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"DestIp_ip": "192.168.0.1",
|
"DestIp_ip": "192.168.0.1",
|
||||||
"DestHost_str": "desthost",
|
"DestHost_str": "desthost",
|
||||||
"DestPort_u32": 0,
|
"DestPort_u32": 0,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"SendSize_u64": 0,
|
"SendSize_u64": 0,
|
||||||
"RecvSize_u64": 0,
|
"RecvSize_u64": 0,
|
||||||
"TcpStatus_u32": 0
|
"TcpStatus_u32": 0
|
||||||
@ -10406,8 +10406,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"DestIp_ip": "192.168.0.1",
|
"DestIp_ip": "192.168.0.1",
|
||||||
"DestHost_str": "desthost",
|
"DestHost_str": "desthost",
|
||||||
"DestPort_u32": 0,
|
"DestPort_u32": 0,
|
||||||
"CreatedTime_dt": "2020-08-01T12:24:36.123",
|
"CreatedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"LastCommTime_dt": "2020-08-01T12:24:36.123",
|
"LastCommTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"SendSize_u64": 0,
|
"SendSize_u64": 0,
|
||||||
"RecvSize_u64": 0,
|
"RecvSize_u64": 0,
|
||||||
"TcpStatus_u32": 0
|
"TcpStatus_u32": 0
|
||||||
@ -10527,8 +10527,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"DhcpTable": [
|
"DhcpTable": [
|
||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"LeasedTime_dt": "2020-08-01T12:24:36.123",
|
"LeasedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"Mask_u32": 0,
|
"Mask_u32": 0,
|
||||||
@ -10536,8 +10536,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"LeasedTime_dt": "2020-08-01T12:24:36.123",
|
"LeasedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"Mask_u32": 0,
|
"Mask_u32": 0,
|
||||||
@ -10545,8 +10545,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id_u32": 0,
|
"Id_u32": 0,
|
||||||
"LeasedTime_dt": "2020-08-01T12:24:36.123",
|
"LeasedTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"ExpireTime_dt": "2020-08-01T12:24:36.123",
|
"ExpireTime_dt": "2024-08-01T12:24:36.123",
|
||||||
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
|
||||||
"IpAddress_ip": "192.168.0.1",
|
"IpAddress_ip": "192.168.0.1",
|
||||||
"Mask_u32": 0,
|
"Mask_u32": 0,
|
||||||
@ -13090,19 +13090,19 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
"ServerName_str": "servername",
|
"ServerName_str": "servername",
|
||||||
"FilePath_str": "filepath",
|
"FilePath_str": "filepath",
|
||||||
"FileSize_u32": 0,
|
"FileSize_u32": 0,
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123"
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ServerName_str": "servername",
|
"ServerName_str": "servername",
|
||||||
"FilePath_str": "filepath",
|
"FilePath_str": "filepath",
|
||||||
"FileSize_u32": 0,
|
"FileSize_u32": 0,
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123"
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ServerName_str": "servername",
|
"ServerName_str": "servername",
|
||||||
"FilePath_str": "filepath",
|
"FilePath_str": "filepath",
|
||||||
"FileSize_u32": 0,
|
"FileSize_u32": 0,
|
||||||
"UpdatedTime_dt": "2020-08-01T12:24:36.123"
|
"UpdatedTime_dt": "2024-08-01T12:24:36.123"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -14508,15 +14508,15 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<hr />
|
<hr />
|
||||||
<p><a id="getddnsinternetsettng"></a></p>
|
<p><a id="getddnsinternetsetting"></a></p>
|
||||||
<h2 id="getddnsinternetsettng-rpc-api-get-the-proxy-settings-for-connecting-to-the-ddns-server">"GetDDnsInternetSettng" RPC API - Get the Proxy Settings for Connecting to the DDNS server</h2>
|
<h2 id="getddnsinternetsetting-rpc-api-get-the-proxy-settings-for-connecting-to-the-ddns-server">"GetDDnsInternetSetting" RPC API - Get the Proxy Settings for Connecting to the DDNS server</h2>
|
||||||
<h3 id="description-131">Description</h3>
|
<h3 id="description-131">Description</h3>
|
||||||
<p>Get the Proxy Settings for Connecting to the DDNS server.</p>
|
<p>Get the Proxy Settings for Connecting to the DDNS server.</p>
|
||||||
<h3 id="input-json-rpc-format-131">Input JSON-RPC Format</h3>
|
<h3 id="input-json-rpc-format-131">Input JSON-RPC Format</h3>
|
||||||
<pre><code class="language-json">{
|
<pre><code class="language-json">{
|
||||||
"jsonrpc": "2.0",
|
"jsonrpc": "2.0",
|
||||||
"id": "rpc_call_id",
|
"id": "rpc_call_id",
|
||||||
"method": "GetDDnsInternetSettng",
|
"method": "GetDDnsInternetSetting",
|
||||||
"params": {}
|
"params": {}
|
||||||
}
|
}
|
||||||
</code></pre>
|
</code></pre>
|
||||||
@ -14571,15 +14571,15 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<hr />
|
<hr />
|
||||||
<p><a id="setddnsinternetsettng"></a></p>
|
<p><a id="setddnsinternetsetting"></a></p>
|
||||||
<h2 id="setddnsinternetsettng-rpc-api-set-the-proxy-settings-for-connecting-to-the-ddns-server">"SetDDnsInternetSettng" RPC API - Set the Proxy Settings for Connecting to the DDNS server</h2>
|
<h2 id="setddnsinternetsetting-rpc-api-set-the-proxy-settings-for-connecting-to-the-ddns-server">"SetDDnsInternetSetting" RPC API - Set the Proxy Settings for Connecting to the DDNS server</h2>
|
||||||
<h3 id="description-132">Description</h3>
|
<h3 id="description-132">Description</h3>
|
||||||
<p>Set the Proxy Settings for Connecting to the DDNS server.</p>
|
<p>Set the Proxy Settings for Connecting to the DDNS server.</p>
|
||||||
<h3 id="input-json-rpc-format-132">Input JSON-RPC Format</h3>
|
<h3 id="input-json-rpc-format-132">Input JSON-RPC Format</h3>
|
||||||
<pre><code class="language-json">{
|
<pre><code class="language-json">{
|
||||||
"jsonrpc": "2.0",
|
"jsonrpc": "2.0",
|
||||||
"id": "rpc_call_id",
|
"id": "rpc_call_id",
|
||||||
"method": "SetDDnsInternetSettng",
|
"method": "SetDDnsInternetSetting",
|
||||||
"params": {
|
"params": {
|
||||||
"ProxyType_u32": 0,
|
"ProxyType_u32": 0,
|
||||||
"ProxyHostName_str": "proxyhostname",
|
"ProxyHostName_str": "proxyhostname",
|
||||||
@ -14640,8 +14640,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<hr />
|
<hr />
|
||||||
<p>Automatically generated at 2019-07-10 14:36:11 by vpnserver-jsonrpc-codegen.<br />
|
<p>Automatically generated at 2023-05-10 14:43:37 by vpnserver-jsonrpc-codegen.<br />
|
||||||
Copyright (c) 2014-2019 <a href="https://www.softether.org/">SoftEther VPN Project</a> under the Apache License 2.0.</p>
|
Copyright (c) 2014-2023 <a href="https://www.softether.org/">SoftEther VPN Project</a> under the Apache License 2.0.</p>
|
||||||
|
|
||||||
</article>
|
</article>
|
||||||
</body>
|
</body>
|
||||||
|
File diff suppressed because one or more lines are too long
@ -2,6 +2,7 @@
|
|||||||
#include "Dialog.h"
|
#include "Dialog.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
void ShowUsage()
|
void ShowUsage()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user