Merge branch 'SoftEtherVPN:master' into master

This commit is contained in:
djony 2024-05-22 16:26:44 +03:00 committed by GitHub
commit 60496ac7fb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
100 changed files with 2355 additions and 868 deletions

View File

@ -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

View File

@ -1,4 +0,0 @@
jobs:
- template: .ci/azure-pipelines/linux.yml
- template: .ci/azure-pipelines/windows.yml
- template: .ci/azure-pipelines/macos.yml

View File

@ -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'

View File

@ -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

View File

@ -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'

View File

@ -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 .

View File

@ -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'

View File

@ -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"

View File

@ -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"

View File

@ -2,8 +2,10 @@ FreeBSD_task:
matrix:
env:
SSL: openssl
OPENSSL_ROOT_DIR: /usr/local
env:
SSL: openssl31
SSL: openssl32
OPENSSL_ROOT_DIR: /usr/local
env:
# base openssl
SSL:

View File

@ -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...]

View 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
View 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
View 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

View File

@ -7,7 +7,7 @@ jobs:
build_and_test:
strategy:
matrix:
os: [macos-13, macos-12, macos-11]
os: [macos-14, macos-13, macos-12]
name: ${{ matrix.os }}
runs-on: ${{ matrix.os }}
steps:

16
.github/workflows/stb_check.yml vendored Normal file
View 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
View 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
View 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
View File

@ -209,4 +209,4 @@ developer_tools/stbchecker/**/ASALocalRun/
developer_tools/stbchecker/**/*.binlog
developer_tools/stbchecker/**/*.nvuser
developer_tools/stbchecker/**/.mfractor/
/vcpkg_installed

View File

@ -38,16 +38,6 @@ matrix:
before_install:
- sudo apt-get -y install libsodium-dev
- 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:
directories:

3
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"cmake.configureOnOpen": false
}

View File

@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10)
set(BUILD_NUMBER CACHE STRING "The number of the current build.")
if ("${BUILD_NUMBER}" STREQUAL "")
set(BUILD_NUMBER "5180")
set(BUILD_NUMBER "5185")
endif()
if (BUILD_NUMBER LESS 5180)
@ -53,7 +53,7 @@ if(UNIX)
#
# 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)
include(CheckIncludeFile)

View File

@ -1,5 +1,5 @@
{
"environments": [ { "BuildNumber": "5180" } ],
"environments": [ { "BuildNumber": "5185" } ],
"configurations": [
{
"name": "x64-native",

View File

@ -2,10 +2,8 @@
||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)|
|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)|
- [SoftEther VPN](#softether-vpn)
@ -101,9 +99,6 @@ https://github.com/davidebeatrici
Ilya Shipitsin (Since Jul 21, 2018)
https://github.com/chipitsine
Yihong Wu (Since Jul 16, 2021)
https://github.com/domosekai
# SOFTETHER VPN ADVANTAGES

View File

@ -2,7 +2,7 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<TargetFramework>net7.0</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@ -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="#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="#getddnsinternetsettng">GetDDnsInternetSettng - 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="#getddnsinternetsetting">GetDDnsInternetSetting - Get 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="#getvgsconfig">GetVgsConfig - Get the VPN Gate Server Configuration</a></li>
</ul>
@ -305,7 +305,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;ServerBuildInt_u32&quot;: 0,
&quot;ServerHostName_str&quot;: &quot;serverhostname&quot;,
&quot;ServerType_u32&quot;: 0,
&quot;ServerBuildDate_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ServerBuildDate_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;ServerFamilyName_str&quot;: &quot;serverfamilyname&quot;,
&quot;OsType_u32&quot;: 0,
&quot;OsServicePack_u32&quot;: 0,
@ -460,9 +460,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Send.BroadcastCount_u64&quot;: 0,
&quot;Send.UnicastBytes_u64&quot;: 0,
&quot;Send.UnicastCount_u64&quot;: 0,
&quot;CurrentTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CurrentTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;CurrentTick_u64&quot;: 0,
&quot;StartTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;StartTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;TotalMemory_u64&quot;: 0,
&quot;UsedMemory_u64&quot;: 0,
&quot;FreeMemory_u64&quot;: 0,
@ -1136,7 +1136,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;result&quot;: {
&quot;Id_u32&quot;: 0,
&quot;Controller_bool&quot;: false,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Ip_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;Point_u32&quot;: 0,
@ -1283,7 +1283,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
{
&quot;Id_u32&quot;: 0,
&quot;Controller_bool&quot;: false,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Ip_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;Point_u32&quot;: 0,
@ -1296,7 +1296,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
{
&quot;Id_u32&quot;: 0,
&quot;Controller_bool&quot;: false,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Ip_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;Point_u32&quot;: 0,
@ -1309,7 +1309,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
{
&quot;Id_u32&quot;: 0,
&quot;Controller_bool&quot;: false,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Ip_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;Point_u32&quot;: 0,
@ -1422,9 +1422,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Port_u32&quot;: 0,
&quot;Online_bool&quot;: false,
&quot;LastError_u32&quot;: 0,
&quot;StartedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;FirstConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CurrentConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;StartedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;FirstConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;CurrentConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;NumTry_u32&quot;: 0,
&quot;NumConnected_u32&quot;: 0,
&quot;NumFailed_u32&quot;: 0
@ -1918,9 +1918,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;NumSessions_u32&quot;: 0,
&quot;NumMacTables_u32&quot;: 0,
&quot;NumIpTables_u32&quot;: 0,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;NumLogin_u32&quot;: 0,
&quot;IsTrafficFilled_bool&quot;: false,
&quot;Ex.Recv.BroadcastBytes_u64&quot;: 0,
@ -1941,9 +1941,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;NumSessions_u32&quot;: 0,
&quot;NumMacTables_u32&quot;: 0,
&quot;NumIpTables_u32&quot;: 0,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;NumLogin_u32&quot;: 0,
&quot;IsTrafficFilled_bool&quot;: false,
&quot;Ex.Recv.BroadcastBytes_u64&quot;: 0,
@ -1964,9 +1964,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;NumSessions_u32&quot;: 0,
&quot;NumMacTables_u32&quot;: 0,
&quot;NumIpTables_u32&quot;: 0,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;NumLogin_u32&quot;: 0,
&quot;IsTrafficFilled_bool&quot;: false,
&quot;Ex.Recv.BroadcastBytes_u64&quot;: 0,
@ -2309,7 +2309,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;Ip_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Port_u32&quot;: 0,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Type_u32&quot;: 0
},
{
@ -2317,7 +2317,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;Ip_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Port_u32&quot;: 0,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Type_u32&quot;: 0
},
{
@ -2325,7 +2325,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;Ip_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Port_u32&quot;: 0,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Type_u32&quot;: 0
}
]
@ -2450,7 +2450,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;Ip_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Port_u32&quot;: 0,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;ServerStr_str&quot;: &quot;serverstr&quot;,
&quot;ServerVer_u32&quot;: 0,
&quot;ServerBuild_u32&quot;: 0,
@ -2620,9 +2620,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Send.UnicastBytes_u64&quot;: 0,
&quot;Send.UnicastCount_u64&quot;: 0,
&quot;SecureNATEnabled_bool&quot;: false,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;NumLogin_u32&quot;: 0
}
}
@ -2992,19 +2992,19 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Key_u32&quot;: 0,
&quot;SubjectName_utf&quot;: &quot;subjectname&quot;,
&quot;IssuerName_utf&quot;: &quot;issuername&quot;,
&quot;Expires_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;Expires_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
},
{
&quot;Key_u32&quot;: 0,
&quot;SubjectName_utf&quot;: &quot;subjectname&quot;,
&quot;IssuerName_utf&quot;: &quot;issuername&quot;,
&quot;Expires_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;Expires_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
},
{
&quot;Key_u32&quot;: 0,
&quot;SubjectName_utf&quot;: &quot;subjectname&quot;,
&quot;IssuerName_utf&quot;: &quot;issuername&quot;,
&quot;Expires_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;Expires_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
}
]
}
@ -4348,7 +4348,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Online_bool&quot;: false,
&quot;Connected_bool&quot;: false,
&quot;LastError_u32&quot;: 0,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;TargetHubName_str&quot;: &quot;targethubname&quot;
},
@ -4357,7 +4357,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Online_bool&quot;: false,
&quot;Connected_bool&quot;: false,
&quot;LastError_u32&quot;: 0,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;TargetHubName_str&quot;: &quot;targethubname&quot;
},
@ -4366,7 +4366,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Online_bool&quot;: false,
&quot;Connected_bool&quot;: false,
&quot;LastError_u32&quot;: 0,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;TargetHubName_str&quot;: &quot;targethubname&quot;
}
@ -4668,9 +4668,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;ServerProductBuild_u32&quot;: 0,
&quot;ServerX_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;ClientX_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;StartTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;FirstConnectionEstablisiedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CurrentConnectionEstablishTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;StartTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;FirstConnectionEstablisiedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;CurrentConnectionEstablishTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;NumConnectionsEatablished_u32&quot;: 0,
&quot;HalfConnection_bool&quot;: false,
&quot;QoS_bool&quot;: false,
@ -5996,7 +5996,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Name_str&quot;: &quot;name&quot;,
&quot;Realname_utf&quot;: &quot;realname&quot;,
&quot;Note_utf&quot;: &quot;note&quot;,
&quot;ExpireTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;AuthType_u32&quot;: 0,
&quot;Auth_Password_str&quot;: &quot;auth_password&quot;,
&quot;UserX_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
@ -6057,9 +6057,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;GroupName_str&quot;: &quot;groupname&quot;,
&quot;Realname_utf&quot;: &quot;realname&quot;,
&quot;Note_utf&quot;: &quot;note&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;AuthType_u32&quot;: 0,
&quot;Auth_Password_str&quot;: &quot;auth_password&quot;,
&quot;UserX_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
@ -6247,7 +6247,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
<tr>
<td><code>Send.UnicastCount_u64</code></td>
<td><code>number</code> (uint64)</td>
<td>Unicast count (Send)</td>
<td>Unicast bytes (Send)</td>
</tr>
<tr>
<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
&quot;GroupName_str&quot;: &quot;groupname&quot;,
&quot;Realname_utf&quot;: &quot;realname&quot;,
&quot;Note_utf&quot;: &quot;note&quot;,
&quot;ExpireTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;AuthType_u32&quot;: 0,
&quot;Auth_Password_str&quot;: &quot;auth_password&quot;,
&quot;UserX_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
@ -6528,9 +6528,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;GroupName_str&quot;: &quot;groupname&quot;,
&quot;Realname_utf&quot;: &quot;realname&quot;,
&quot;Note_utf&quot;: &quot;note&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;AuthType_u32&quot;: 0,
&quot;Auth_Password_str&quot;: &quot;auth_password&quot;,
&quot;UserX_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
@ -6948,9 +6948,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;GroupName_str&quot;: &quot;groupname&quot;,
&quot;Realname_utf&quot;: &quot;realname&quot;,
&quot;Note_utf&quot;: &quot;note&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;AuthType_u32&quot;: 0,
&quot;Auth_Password_str&quot;: &quot;auth_password&quot;,
&quot;UserX_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
@ -7419,11 +7419,11 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Note_utf&quot;: &quot;note&quot;,
&quot;AuthType_u32&quot;: 0,
&quot;NumLogin_u32&quot;: 0,
&quot;LastLoginTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;DenyAccess_bool&quot;: false,
&quot;IsTrafficFilled_bool&quot;: false,
&quot;IsExpiresFilled_bool&quot;: false,
&quot;Expires_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;Expires_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Ex.Recv.BroadcastBytes_u64&quot;: 0,
&quot;Ex.Recv.BroadcastCount_u64&quot;: 0,
&quot;Ex.Recv.UnicastBytes_u64&quot;: 0,
@ -7440,11 +7440,11 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Note_utf&quot;: &quot;note&quot;,
&quot;AuthType_u32&quot;: 0,
&quot;NumLogin_u32&quot;: 0,
&quot;LastLoginTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;DenyAccess_bool&quot;: false,
&quot;IsTrafficFilled_bool&quot;: false,
&quot;IsExpiresFilled_bool&quot;: false,
&quot;Expires_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;Expires_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Ex.Recv.BroadcastBytes_u64&quot;: 0,
&quot;Ex.Recv.BroadcastCount_u64&quot;: 0,
&quot;Ex.Recv.UnicastBytes_u64&quot;: 0,
@ -7461,11 +7461,11 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Note_utf&quot;: &quot;note&quot;,
&quot;AuthType_u32&quot;: 0,
&quot;NumLogin_u32&quot;: 0,
&quot;LastLoginTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;DenyAccess_bool&quot;: false,
&quot;IsTrafficFilled_bool&quot;: false,
&quot;IsExpiresFilled_bool&quot;: false,
&quot;Expires_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;Expires_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Ex.Recv.BroadcastBytes_u64&quot;: 0,
&quot;Ex.Recv.BroadcastCount_u64&quot;: 0,
&quot;Ex.Recv.UnicastBytes_u64&quot;: 0,
@ -8907,8 +8907,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Client_MonitorMode_bool&quot;: false,
&quot;VLanId_u32&quot;: 0,
&quot;UniqueId_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
},
{
&quot;Name_str&quot;: &quot;name&quot;,
@ -8929,8 +8929,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Client_MonitorMode_bool&quot;: false,
&quot;VLanId_u32&quot;: 0,
&quot;UniqueId_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
},
{
&quot;Name_str&quot;: &quot;name&quot;,
@ -8951,8 +8951,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Client_MonitorMode_bool&quot;: false,
&quot;VLanId_u32&quot;: 0,
&quot;UniqueId_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
}
]
}
@ -9117,9 +9117,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;ServerProductName_str&quot;: &quot;serverproductname&quot;,
&quot;ServerProductVer_u32&quot;: 0,
&quot;ServerProductBuild_u32&quot;: 0,
&quot;StartTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;FirstConnectionEstablisiedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CurrentConnectionEstablishTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;StartTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;FirstConnectionEstablisiedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;CurrentConnectionEstablishTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;NumConnectionsEatablished_u32&quot;: 0,
&quot;HalfConnection_bool&quot;: false,
&quot;QoS_bool&quot;: false,
@ -9496,8 +9496,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Key_u32&quot;: 0,
&quot;SessionName_str&quot;: &quot;sessionname&quot;,
&quot;MacAddress_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;RemoteItem_bool&quot;: false,
&quot;RemoteHostname_str&quot;: &quot;remotehostname&quot;,
&quot;VlanId_u32&quot;: 0
@ -9506,8 +9506,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Key_u32&quot;: 0,
&quot;SessionName_str&quot;: &quot;sessionname&quot;,
&quot;MacAddress_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;RemoteItem_bool&quot;: false,
&quot;RemoteHostname_str&quot;: &quot;remotehostname&quot;,
&quot;VlanId_u32&quot;: 0
@ -9516,8 +9516,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Key_u32&quot;: 0,
&quot;SessionName_str&quot;: &quot;sessionname&quot;,
&quot;MacAddress_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;RemoteItem_bool&quot;: false,
&quot;RemoteHostname_str&quot;: &quot;remotehostname&quot;,
&quot;VlanId_u32&quot;: 0
@ -9663,8 +9663,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;SessionName_str&quot;: &quot;sessionname&quot;,
&quot;IpAddress_ip&quot;: &quot;192.168.0.1&quot;,
&quot;DhcpAllocated_bool&quot;: false,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;RemoteItem_bool&quot;: false,
&quot;RemoteHostname_str&quot;: &quot;remotehostname&quot;
},
@ -9673,8 +9673,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;SessionName_str&quot;: &quot;sessionname&quot;,
&quot;IpAddress_ip&quot;: &quot;192.168.0.1&quot;,
&quot;DhcpAllocated_bool&quot;: false,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;RemoteItem_bool&quot;: false,
&quot;RemoteHostname_str&quot;: &quot;remotehostname&quot;
},
@ -9683,8 +9683,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;SessionName_str&quot;: &quot;sessionname&quot;,
&quot;IpAddress_ip&quot;: &quot;192.168.0.1&quot;,
&quot;DhcpAllocated_bool&quot;: false,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;RemoteItem_bool&quot;: false,
&quot;RemoteHostname_str&quot;: &quot;remotehostname&quot;
}
@ -10376,8 +10376,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;DestIp_ip&quot;: &quot;192.168.0.1&quot;,
&quot;DestHost_str&quot;: &quot;desthost&quot;,
&quot;DestPort_u32&quot;: 0,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;SendSize_u64&quot;: 0,
&quot;RecvSize_u64&quot;: 0,
&quot;TcpStatus_u32&quot;: 0
@ -10391,8 +10391,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;DestIp_ip&quot;: &quot;192.168.0.1&quot;,
&quot;DestHost_str&quot;: &quot;desthost&quot;,
&quot;DestPort_u32&quot;: 0,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;SendSize_u64&quot;: 0,
&quot;RecvSize_u64&quot;: 0,
&quot;TcpStatus_u32&quot;: 0
@ -10406,8 +10406,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;DestIp_ip&quot;: &quot;192.168.0.1&quot;,
&quot;DestHost_str&quot;: &quot;desthost&quot;,
&quot;DestPort_u32&quot;: 0,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;SendSize_u64&quot;: 0,
&quot;RecvSize_u64&quot;: 0,
&quot;TcpStatus_u32&quot;: 0
@ -10527,8 +10527,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;DhcpTable&quot;: [
{
&quot;Id_u32&quot;: 0,
&quot;LeasedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LeasedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;MacAddress_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;IpAddress_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Mask_u32&quot;: 0,
@ -10536,8 +10536,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
},
{
&quot;Id_u32&quot;: 0,
&quot;LeasedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LeasedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;MacAddress_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;IpAddress_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Mask_u32&quot;: 0,
@ -10545,8 +10545,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
},
{
&quot;Id_u32&quot;: 0,
&quot;LeasedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LeasedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;MacAddress_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;IpAddress_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Mask_u32&quot;: 0,
@ -13090,19 +13090,19 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;ServerName_str&quot;: &quot;servername&quot;,
&quot;FilePath_str&quot;: &quot;filepath&quot;,
&quot;FileSize_u32&quot;: 0,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
},
{
&quot;ServerName_str&quot;: &quot;servername&quot;,
&quot;FilePath_str&quot;: &quot;filepath&quot;,
&quot;FileSize_u32&quot;: 0,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
},
{
&quot;ServerName_str&quot;: &quot;servername&quot;,
&quot;FilePath_str&quot;: &quot;filepath&quot;,
&quot;FileSize_u32&quot;: 0,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
}
]
}
@ -14508,15 +14508,15 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
</tbody>
</table>
<hr />
<p><a id="getddnsinternetsettng"></a></p>
<h2 id="getddnsinternetsettng-rpc-api-get-the-proxy-settings-for-connecting-to-the-ddns-server">&quot;GetDDnsInternetSettng&quot; RPC API - Get the Proxy Settings for Connecting to the DDNS server</h2>
<p><a id="getddnsinternetsetting"></a></p>
<h2 id="getddnsinternetsetting-rpc-api-get-the-proxy-settings-for-connecting-to-the-ddns-server">&quot;GetDDnsInternetSetting&quot; RPC API - Get the Proxy Settings for Connecting to the DDNS server</h2>
<h3 id="description-131">Description</h3>
<p>Get the Proxy Settings for Connecting to the DDNS server.</p>
<h3 id="input-json-rpc-format-131">Input JSON-RPC Format</h3>
<pre><code class="language-json">{
&quot;jsonrpc&quot;: &quot;2.0&quot;,
&quot;id&quot;: &quot;rpc_call_id&quot;,
&quot;method&quot;: &quot;GetDDnsInternetSettng&quot;,
&quot;method&quot;: &quot;GetDDnsInternetSetting&quot;,
&quot;params&quot;: {}
}
</code></pre>
@ -14571,15 +14571,15 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
</tbody>
</table>
<hr />
<p><a id="setddnsinternetsettng"></a></p>
<h2 id="setddnsinternetsettng-rpc-api-set-the-proxy-settings-for-connecting-to-the-ddns-server">&quot;SetDDnsInternetSettng&quot; RPC API - Set the Proxy Settings for Connecting to the DDNS server</h2>
<p><a id="setddnsinternetsetting"></a></p>
<h2 id="setddnsinternetsetting-rpc-api-set-the-proxy-settings-for-connecting-to-the-ddns-server">&quot;SetDDnsInternetSetting&quot; RPC API - Set the Proxy Settings for Connecting to the DDNS server</h2>
<h3 id="description-132">Description</h3>
<p>Set the Proxy Settings for Connecting to the DDNS server.</p>
<h3 id="input-json-rpc-format-132">Input JSON-RPC Format</h3>
<pre><code class="language-json">{
&quot;jsonrpc&quot;: &quot;2.0&quot;,
&quot;id&quot;: &quot;rpc_call_id&quot;,
&quot;method&quot;: &quot;SetDDnsInternetSettng&quot;,
&quot;method&quot;: &quot;SetDDnsInternetSetting&quot;,
&quot;params&quot;: {
&quot;ProxyType_u32&quot;: 0,
&quot;ProxyHostName_str&quot;: &quot;proxyhostname&quot;,
@ -14640,8 +14640,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
</tbody>
</table>
<hr />
<p>Automatically generated at 2019-07-10 14:36:11 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>
<p>Automatically generated at 2023-05-10 14:43:37 by vpnserver-jsonrpc-codegen.<br />
Copyright (c) 2014-2023 <a href="https://www.softether.org/">SoftEther VPN Project</a> under the Apache License 2.0.</p>
</article>
</body>

View File

@ -208,8 +208,8 @@ Value | Description
- [GetSpecialListener - Get Current Setting of the VPN over ICMP / VPN over DNS Function](#getspeciallistener)
- [GetAzureStatus - Show the current status of VPN Azure function](#getazurestatus)
- [SetAzureStatus - Enable / Disable VPN Azure Function](#setazurestatus)
- [GetDDnsInternetSettng - Get the Proxy Settings for Connecting to the DDNS server](#getddnsinternetsettng)
- [SetDDnsInternetSettng - Set the Proxy Settings for Connecting to the DDNS server](#setddnsinternetsettng)
- [GetDDnsInternetSetting - Get the Proxy Settings for Connecting to the DDNS server](#getddnsinternetsetting)
- [SetDDnsInternetSetting - Set the Proxy Settings for Connecting to the DDNS server](#setddnsinternetsetting)
- [SetVgsConfig - Set the VPN Gate Server Configuration](#setvgsconfig)
- [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,
"ServerHostName_str": "serverhostname",
"ServerType_u32": 0,
"ServerBuildDate_dt": "2020-08-01T12:24:36.123",
"ServerBuildDate_dt": "2024-08-01T12:24:36.123",
"ServerFamilyName_str": "serverfamilyname",
"OsType_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.UnicastBytes_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,
"StartTime_dt": "2020-08-01T12:24:36.123",
"StartTime_dt": "2024-08-01T12:24:36.123",
"TotalMemory_u64": 0,
"UsedMemory_u64": 0,
"FreeMemory_u64": 0,
@ -768,7 +768,7 @@ Get Cluster Member Information. When the VPN Server is operating as a cluster co
"result": {
"Id_u32": 0,
"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",
"Hostname_str": "hostname",
"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,
"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",
"Hostname_str": "hostname",
"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,
"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",
"Hostname_str": "hostname",
"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,
"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",
"Hostname_str": "hostname",
"Point_u32": 0,
@ -934,9 +934,9 @@ Get Connection Status to Cluster Controller. Use this API when the VPN Server is
"Port_u32": 0,
"Online_bool": false,
"LastError_u32": 0,
"StartedTime_dt": "2020-08-01T12:24:36.123",
"FirstConnectedTime_dt": "2020-08-01T12:24:36.123",
"CurrentConnectedTime_dt": "2020-08-01T12:24:36.123",
"StartedTime_dt": "2024-08-01T12:24:36.123",
"FirstConnectedTime_dt": "2024-08-01T12:24:36.123",
"CurrentConnectedTime_dt": "2024-08-01T12:24:36.123",
"NumTry_u32": 0,
"NumConnected_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,
"NumMacTables_u32": 0,
"NumIpTables_u32": 0,
"LastCommTime_dt": "2020-08-01T12:24:36.123",
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"LastCommTime_dt": "2024-08-01T12:24:36.123",
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"NumLogin_u32": 0,
"IsTrafficFilled_bool": false,
"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,
"NumMacTables_u32": 0,
"NumIpTables_u32": 0,
"LastCommTime_dt": "2020-08-01T12:24:36.123",
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"LastCommTime_dt": "2024-08-01T12:24:36.123",
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"NumLogin_u32": 0,
"IsTrafficFilled_bool": false,
"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,
"NumMacTables_u32": 0,
"NumIpTables_u32": 0,
"LastCommTime_dt": "2020-08-01T12:24:36.123",
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"LastCommTime_dt": "2024-08-01T12:24:36.123",
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"NumLogin_u32": 0,
"IsTrafficFilled_bool": false,
"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",
"Ip_ip": "192.168.0.1",
"Port_u32": 0,
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
"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",
"Ip_ip": "192.168.0.1",
"Port_u32": 0,
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
"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",
"Ip_ip": "192.168.0.1",
"Port_u32": 0,
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
"Type_u32": 0
}
]
@ -1626,7 +1626,7 @@ Get Information of TCP Connections Connecting to the VPN Server. Use this to get
"Hostname_str": "hostname",
"Ip_ip": "192.168.0.1",
"Port_u32": 0,
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
"ServerStr_str": "serverstr",
"ServerVer_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.UnicastCount_u64": 0,
"SecureNATEnabled_bool": false,
"LastCommTime_dt": "2020-08-01T12:24:36.123",
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"LastCommTime_dt": "2024-08-01T12:24:36.123",
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"NumLogin_u32": 0
}
}
@ -1948,19 +1948,19 @@ Get List of Trusted CA Certificates. Here you can manage the certificate authori
"Key_u32": 0,
"SubjectName_utf": "subjectname",
"IssuerName_utf": "issuername",
"Expires_dt": "2020-08-01T12:24:36.123"
"Expires_dt": "2024-08-01T12:24:36.123"
},
{
"Key_u32": 0,
"SubjectName_utf": "subjectname",
"IssuerName_utf": "issuername",
"Expires_dt": "2020-08-01T12:24:36.123"
"Expires_dt": "2024-08-01T12:24:36.123"
},
{
"Key_u32": 0,
"SubjectName_utf": "subjectname",
"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
`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
`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).
`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).
@ -2537,7 +2537,7 @@ Name | Type | Description
`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
`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).
`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).
@ -2600,7 +2600,7 @@ Get List of Cascade Connections. Use this to get a list of Cascade Connections t
"Online_bool": false,
"Connected_bool": false,
"LastError_u32": 0,
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
"Hostname_str": "hostname",
"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,
"Connected_bool": false,
"LastError_u32": 0,
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
"Hostname_str": "hostname",
"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,
"Connected_bool": false,
"LastError_u32": 0,
"ConnectedTime_dt": "2020-08-01T12:24:36.123",
"ConnectedTime_dt": "2024-08-01T12:24:36.123",
"Hostname_str": "hostname",
"TargetHubName_str": "targethubname"
}
@ -2834,9 +2834,9 @@ Get Current Cascade Connection Status. When a Cascade Connection registered on t
"ServerProductBuild_u32": 0,
"ServerX_bin": "SGVsbG8gV29ybGQ=",
"ClientX_bin": "SGVsbG8gV29ybGQ=",
"StartTime_dt": "2020-08-01T12:24:36.123",
"FirstConnectionEstablisiedTime_dt": "2020-08-01T12:24:36.123",
"CurrentConnectionEstablishTime_dt": "2020-08-01T12:24:36.123",
"StartTime_dt": "2024-08-01T12:24:36.123",
"FirstConnectionEstablisiedTime_dt": "2024-08-01T12:24:36.123",
"CurrentConnectionEstablishTime_dt": "2024-08-01T12:24:36.123",
"NumConnectionsEatablished_u32": 0,
"HalfConnection_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",
"Realname_utf": "realname",
"Note_utf": "note",
"ExpireTime_dt": "2020-08-01T12:24:36.123",
"ExpireTime_dt": "2024-08-01T12:24:36.123",
"AuthType_u32": 0,
"Auth_Password_str": "auth_password",
"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",
"Realname_utf": "realname",
"Note_utf": "note",
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
"ExpireTime_dt": "2020-08-01T12:24:36.123",
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
"ExpireTime_dt": "2024-08-01T12:24:36.123",
"AuthType_u32": 0,
"Auth_Password_str": "auth_password",
"UserX_bin": "SGVsbG8gV29ybGQ=",
@ -3779,7 +3779,7 @@ Change User Settings. Use this to change user settings that is registered on the
"GroupName_str": "groupname",
"Realname_utf": "realname",
"Note_utf": "note",
"ExpireTime_dt": "2020-08-01T12:24:36.123",
"ExpireTime_dt": "2024-08-01T12:24:36.123",
"AuthType_u32": 0,
"Auth_Password_str": "auth_password",
"UserX_bin": "SGVsbG8gV29ybGQ=",
@ -3842,9 +3842,9 @@ Change User Settings. Use this to change user settings that is registered on the
"GroupName_str": "groupname",
"Realname_utf": "realname",
"Note_utf": "note",
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
"ExpireTime_dt": "2020-08-01T12:24:36.123",
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
"ExpireTime_dt": "2024-08-01T12:24:36.123",
"AuthType_u32": 0,
"Auth_Password_str": "auth_password",
"UserX_bin": "SGVsbG8gV29ybGQ=",
@ -4004,9 +4004,9 @@ Get User Settings. Use this to get user settings information that is registered
"GroupName_str": "groupname",
"Realname_utf": "realname",
"Note_utf": "note",
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
"ExpireTime_dt": "2020-08-01T12:24:36.123",
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
"ExpireTime_dt": "2024-08-01T12:24:36.123",
"AuthType_u32": 0,
"Auth_Password_str": "auth_password",
"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",
"AuthType_u32": 0,
"NumLogin_u32": 0,
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
"DenyAccess_bool": false,
"IsTrafficFilled_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.BroadcastCount_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",
"AuthType_u32": 0,
"NumLogin_u32": 0,
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
"DenyAccess_bool": false,
"IsTrafficFilled_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.BroadcastCount_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",
"AuthType_u32": 0,
"NumLogin_u32": 0,
"LastLoginTime_dt": "2020-08-01T12:24:36.123",
"LastLoginTime_dt": "2024-08-01T12:24:36.123",
"DenyAccess_bool": false,
"IsTrafficFilled_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.BroadcastCount_u64": 0,
"Ex.Recv.UnicastBytes_u64": 0,
@ -4605,14 +4605,14 @@ Name | Type | Description
`Name_str` | `string` (ASCII) | The group name
`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
`Recv.BroadcastBytes_u64` | `number` (uint64) | Broadcast bytes (Recv)
`Recv.BroadcastCount_u64` | `number` (uint64) | Number of broadcast packets (Recv)
`Recv.UnicastBytes_u64` | `number` (uint64) | Unicast bytes (Recv)
`Recv.UnicastCount_u64` | `number` (uint64) | Unicast count (Recv)
`Send.BroadcastBytes_u64` | `number` (uint64) | Broadcast bytes (Send)
`Send.BroadcastCount_u64` | `number` (uint64) | Number of broadcast packets (Send)
`Recv.BroadcastBytes_u64` | `number` (uint64) | Number of broadcast packets (Recv)
`Recv.BroadcastCount_u64` | `number` (uint64) | Broadcast bytes (Recv)
`Recv.UnicastBytes_u64` | `number` (uint64) | Unicast count (Recv)
`Recv.UnicastCount_u64` | `number` (uint64) | Unicast bytes (Recv)
`Send.BroadcastBytes_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.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
`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.
@ -4939,8 +4939,8 @@ Get List of Connected VPN Sessions. Use this to get a list of the sessions conne
"Client_MonitorMode_bool": false,
"VLanId_u32": 0,
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"LastCommTime_dt": "2020-08-01T12:24:36.123"
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"LastCommTime_dt": "2024-08-01T12:24:36.123"
},
{
"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,
"VLanId_u32": 0,
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"LastCommTime_dt": "2020-08-01T12:24:36.123"
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"LastCommTime_dt": "2024-08-01T12:24:36.123"
},
{
"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,
"VLanId_u32": 0,
"UniqueId_bin": "SGVsbG8gV29ybGQ=",
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"LastCommTime_dt": "2020-08-01T12:24:36.123"
"CreatedTime_dt": "2024-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",
"ServerProductVer_u32": 0,
"ServerProductBuild_u32": 0,
"StartTime_dt": "2020-08-01T12:24:36.123",
"FirstConnectionEstablisiedTime_dt": "2020-08-01T12:24:36.123",
"CurrentConnectionEstablishTime_dt": "2020-08-01T12:24:36.123",
"StartTime_dt": "2024-08-01T12:24:36.123",
"FirstConnectionEstablisiedTime_dt": "2024-08-01T12:24:36.123",
"CurrentConnectionEstablishTime_dt": "2024-08-01T12:24:36.123",
"NumConnectionsEatablished_u32": 0,
"HalfConnection_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,
"SessionName_str": "sessionname",
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
"RemoteItem_bool": false,
"RemoteHostname_str": "remotehostname",
"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,
"SessionName_str": "sessionname",
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
"RemoteItem_bool": false,
"RemoteHostname_str": "remotehostname",
"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,
"SessionName_str": "sessionname",
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
"RemoteItem_bool": false,
"RemoteHostname_str": "remotehostname",
"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",
"IpAddress_ip": "192.168.0.1",
"DhcpAllocated_bool": false,
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
"RemoteItem_bool": false,
"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",
"IpAddress_ip": "192.168.0.1",
"DhcpAllocated_bool": false,
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
"RemoteItem_bool": false,
"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",
"IpAddress_ip": "192.168.0.1",
"DhcpAllocated_bool": false,
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"UpdatedTime_dt": "2020-08-01T12:24:36.123",
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"UpdatedTime_dt": "2024-08-01T12:24:36.123",
"RemoteItem_bool": false,
"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",
"DestHost_str": "desthost",
"DestPort_u32": 0,
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"LastCommTime_dt": "2020-08-01T12:24:36.123",
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"LastCommTime_dt": "2024-08-01T12:24:36.123",
"SendSize_u64": 0,
"RecvSize_u64": 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",
"DestHost_str": "desthost",
"DestPort_u32": 0,
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"LastCommTime_dt": "2020-08-01T12:24:36.123",
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"LastCommTime_dt": "2024-08-01T12:24:36.123",
"SendSize_u64": 0,
"RecvSize_u64": 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",
"DestHost_str": "desthost",
"DestPort_u32": 0,
"CreatedTime_dt": "2020-08-01T12:24:36.123",
"LastCommTime_dt": "2020-08-01T12:24:36.123",
"CreatedTime_dt": "2024-08-01T12:24:36.123",
"LastCommTime_dt": "2024-08-01T12:24:36.123",
"SendSize_u64": 0,
"RecvSize_u64": 0,
"TcpStatus_u32": 0
@ -5867,8 +5867,8 @@ Get Virtual DHCP Server Function Lease Table of SecureNAT Function. Use this to
"DhcpTable": [
{
"Id_u32": 0,
"LeasedTime_dt": "2020-08-01T12:24:36.123",
"ExpireTime_dt": "2020-08-01T12:24:36.123",
"LeasedTime_dt": "2024-08-01T12:24:36.123",
"ExpireTime_dt": "2024-08-01T12:24:36.123",
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
"IpAddress_ip": "192.168.0.1",
"Mask_u32": 0,
@ -5876,8 +5876,8 @@ Get Virtual DHCP Server Function Lease Table of SecureNAT Function. Use this to
},
{
"Id_u32": 0,
"LeasedTime_dt": "2020-08-01T12:24:36.123",
"ExpireTime_dt": "2020-08-01T12:24:36.123",
"LeasedTime_dt": "2024-08-01T12:24:36.123",
"ExpireTime_dt": "2024-08-01T12:24:36.123",
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
"IpAddress_ip": "192.168.0.1",
"Mask_u32": 0,
@ -5885,8 +5885,8 @@ Get Virtual DHCP Server Function Lease Table of SecureNAT Function. Use this to
},
{
"Id_u32": 0,
"LeasedTime_dt": "2020-08-01T12:24:36.123",
"ExpireTime_dt": "2020-08-01T12:24:36.123",
"LeasedTime_dt": "2024-08-01T12:24:36.123",
"ExpireTime_dt": "2024-08-01T12:24:36.123",
"MacAddress_bin": "SGVsbG8gV29ybGQ=",
"IpAddress_ip": "192.168.0.1",
"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",
"FilePath_str": "filepath",
"FileSize_u32": 0,
"UpdatedTime_dt": "2020-08-01T12:24:36.123"
"UpdatedTime_dt": "2024-08-01T12:24:36.123"
},
{
"ServerName_str": "servername",
"FilePath_str": "filepath",
"FileSize_u32": 0,
"UpdatedTime_dt": "2020-08-01T12:24:36.123"
"UpdatedTime_dt": "2024-08-01T12:24:36.123"
},
{
"ServerName_str": "servername",
"FilePath_str": "filepath",
"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
***
<a id="getddnsinternetsettng"></a>
## "GetDDnsInternetSettng" RPC API - Get the Proxy Settings for Connecting to the DDNS server
<a id="getddnsinternetsetting"></a>
## "GetDDnsInternetSetting" RPC API - Get the Proxy Settings for Connecting to the DDNS server
### Description
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",
"id": "rpc_call_id",
"method": "GetDDnsInternetSettng",
"method": "GetDDnsInternetSetting",
"params": {}
}
```
@ -8683,8 +8683,8 @@ Name | Type | Description
`ProxyPassword_str` | `string` (ASCII) | Proxy server password
***
<a id="setddnsinternetsettng"></a>
## "SetDDnsInternetSettng" RPC API - Set the Proxy Settings for Connecting to the DDNS server
<a id="setddnsinternetsetting"></a>
## "SetDDnsInternetSetting" RPC API - Set the Proxy Settings for Connecting to the DDNS server
### Description
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",
"id": "rpc_call_id",
"method": "SetDDnsInternetSettng",
"method": "SetDDnsInternetSetting",
"params": {
"ProxyType_u32": 0,
"ProxyHostName_str": "proxyhostname",
@ -8730,6 +8730,6 @@ Name | Type | Description
`ProxyPassword_str` | `string` (ASCII) | Proxy server password
***
Automatically generated at 2019-07-10 14:36:11 by vpnserver-jsonrpc-codegen.
Copyright (c) 2014-2019 [SoftEther VPN Project](https://www.softether.org/) under the Apache License 2.0.
Automatically generated at 2023-05-10 14:43:37 by vpnserver-jsonrpc-codegen.
Copyright (c) 2014-2023 [SoftEther VPN Project](https://www.softether.org/) under the Apache License 2.0.

View File

@ -2,10 +2,10 @@
//
// 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
// Copyright (c) 2014-2019 SoftEther VPN Project
// Copyright (c) 2014-2023 SoftEther VPN Project
using System;
using System.IO;

View File

@ -2,10 +2,10 @@
//
// 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
// Copyright (c) 2014-2019 SoftEther VPN Project
// Copyright (c) 2014-2023 SoftEther VPN Project
using System.Threading.Tasks;
using SoftEther.JsonRpc;
@ -1357,22 +1357,22 @@ namespace SoftEther.VPNServerRpc
/// <summary>
/// Get the Proxy Settings for Connecting to the DDNS server (Async mode).
/// </summary>
public async Task<VpnInternetSetting> GetDDnsInternetSettngAsync() => await CallAsync<VpnInternetSetting>("GetDDnsInternetSettng", new VpnInternetSetting());
public async Task<VpnInternetSetting> GetDDnsInternetSettingAsync() => await CallAsync<VpnInternetSetting>("GetDDnsInternetSetting", new VpnInternetSetting());
/// <summary>
/// Get the Proxy Settings for Connecting to the DDNS server (Async mode).
/// </summary>
public VpnInternetSetting GetDDnsInternetSettng() => GetDDnsInternetSettngAsync().Result;
public VpnInternetSetting GetDDnsInternetSetting() => GetDDnsInternetSettingAsync().Result;
/// <summary>
/// Set the Proxy Settings for Connecting to the DDNS server (Async mode).
/// </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>
/// Set the Proxy Settings for Connecting to the DDNS server (Sync mode).
/// </summary>
public VpnInternetSetting SetDDnsInternetSettng(VpnInternetSetting input_param) => SetDDnsInternetSettngAsync(input_param).Result;
public VpnInternetSetting SetDDnsInternetSetting(VpnInternetSetting input_param) => SetDDnsInternetSettingAsync(input_param).Result;
/// <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.

View File

@ -2,10 +2,10 @@
//
// 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
// Copyright (c) 2014-2019 SoftEther VPN Project
// Copyright (c) 2014-2023 SoftEther VPN Project
using System;
using Newtonsoft.Json;

View File

@ -2,10 +2,10 @@
//
// 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
// Copyright (c) 2014-2019 SoftEther VPN Project
// Copyright (c) 2014-2023 SoftEther VPN Project
class Program
{

View File

@ -5,10 +5,10 @@
// This sample code shows how to call all available RPC functions.
// 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
// Copyright (c) 2014-2019 SoftEther VPN Project
// Copyright (c) 2014-2023 SoftEther VPN Project
using System;
using SoftEther.VPNServerRpc;
@ -255,8 +255,8 @@ class VPNRPCTest
Test_GetOpenVpnSstpConfig();
Test_GetDDnsClientStatus();
Test_SetDDnsInternetSettng();
Test_GetDDnsInternetSettng();
Test_SetDDnsInternetSetting();
Test_GetDDnsInternetSetting();
Test_ChangeDDnsClientHostname();
Test_RegenerateServerCert();
@ -3641,27 +3641,27 @@ class VPNRPCTest
}
/// <summary>
/// API test for 'GetDDnsInternetSettng', Get DDNS proxy configuration
/// API test for 'GetDDnsInternetSetting', Get DDNS proxy configuration
/// </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);
Console.WriteLine("End: Test_GetDDnsInternetSettng");
Console.WriteLine("End: Test_GetDDnsInternetSetting");
Console.WriteLine("-----");
Console.WriteLine();
}
/// <summary>
/// API test for 'SetDDnsInternetSettng', Set DDNS proxy configuration
/// API test for 'SetDDnsInternetSetting', Set DDNS proxy configuration
/// </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()
{
@ -3671,11 +3671,11 @@ class VPNRPCTest
ProxyUsername_str = "neko",
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);
Console.WriteLine("End: Test_SetDDnsInternetSettng");
Console.WriteLine("End: Test_SetDDnsInternetSetting");
Console.WriteLine("-----");
Console.WriteLine();
}

View File

@ -560,10 +560,10 @@ function Test_All() {
return [4 /*yield*/, Test_GetDDnsClientStatus()];
case 157:
_x.sent();
return [4 /*yield*/, Test_SetDDnsInternetSettng()];
return [4 /*yield*/, Test_SetDDnsInternetSetting()];
case 158:
_x.sent();
return [4 /*yield*/, Test_GetDDnsInternetSettng()];
return [4 /*yield*/, Test_GetDDnsInternetSetting()];
case 159:
_x.sent();
return [4 /*yield*/, Test_ChangeDDnsClientHostname()];
@ -4047,19 +4047,19 @@ function Test_SetAzureStatus() {
});
});
}
/** API test for 'GetDDnsInternetSettng', Get DDNS proxy configuration */
function Test_GetDDnsInternetSettng() {
/** API test for 'GetDDnsInternetSetting', Get DDNS proxy configuration */
function Test_GetDDnsInternetSetting() {
return __awaiter(this, void 0, void 0, function () {
var out_internet_setting;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
console.log("Begin: Test_GetDDnsInternetSettng");
return [4 /*yield*/, api.GetDDnsInternetSettng()];
console.log("Begin: Test_GetDDnsInternetSetting");
return [4 /*yield*/, api.GetDDnsInternetSetting()];
case 1:
out_internet_setting = _a.sent();
console.log(out_internet_setting);
console.log("End: Test_GetDDnsInternetSettng");
console.log("End: Test_GetDDnsInternetSetting");
console.log("-----");
console.log();
return [2 /*return*/];
@ -4067,14 +4067,14 @@ function Test_GetDDnsInternetSettng() {
});
});
}
/** API test for 'SetDDnsInternetSettng', Set DDNS proxy configuration */
function Test_SetDDnsInternetSettng() {
/** API test for 'SetDDnsInternetSetting', Set DDNS proxy configuration */
function Test_SetDDnsInternetSetting() {
return __awaiter(this, void 0, void 0, function () {
var in_internet_setting, out_internet_setting;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
console.log("Begin: Test_SetDDnsInternetSettng");
console.log("Begin: Test_SetDDnsInternetSetting");
in_internet_setting = new VPN.VpnInternetSetting({
ProxyType_u32: VPN.VpnRpcProxyType.Direct,
ProxyHostName_str: "1.2.3.4",
@ -4082,11 +4082,11 @@ function Test_SetDDnsInternetSettng() {
ProxyUsername_str: "neko",
ProxyPassword_str: "dog"
});
return [4 /*yield*/, api.SetDDnsInternetSettng(in_internet_setting)];
return [4 /*yield*/, api.SetDDnsInternetSetting(in_internet_setting)];
case 1:
out_internet_setting = _a.sent();
console.log(out_internet_setting);
console.log("End: Test_SetDDnsInternetSettng");
console.log("End: Test_SetDDnsInternetSetting");
console.log("-----");
console.log();
return [2 /*return*/];

View File

@ -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. */
SetAzureStatus: (in_param: VpnRpcAzureStatus) => Promise<VpnRpcAzureStatus>;
/** 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. */
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. */
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. */

View File

@ -599,12 +599,12 @@ var VpnServerRpc = /** @class */ (function () {
return _this.CallAsync("SetAzureStatus", in_param);
};
/** Get the Proxy Settings for Connecting to the DDNS server. */
this.GetDDnsInternetSettng = function () {
return _this.CallAsync("GetDDnsInternetSettng", new VpnInternetSetting());
this.GetDDnsInternetSetting = function () {
return _this.CallAsync("GetDDnsInternetSetting", new VpnInternetSetting());
};
/** Set the Proxy Settings for Connecting to the DDNS server. */
this.SetDDnsInternetSettng = function (in_param) {
return _this.CallAsync("SetDDnsInternetSettng", in_param);
this.SetDDnsInternetSetting = function (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. */
this.SetVgsConfig = function (in_param) {

View File

@ -2,13 +2,13 @@
// Runs on both web browsers and Node.js
//
// 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.
// You can copy and paste test code to write your own web browser TypeScript / JavaScript codes.
//
// 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.
// import "core-js/es6/promise";
@ -216,8 +216,8 @@ async function Test_All(): Promise<void>
await Test_SetOpenVpnSstpConfig();
await Test_GetOpenVpnSstpConfig();
await Test_GetDDnsClientStatus();
await Test_SetDDnsInternetSettng();
await Test_GetDDnsInternetSettng();
await Test_SetDDnsInternetSetting();
await Test_GetDDnsInternetSetting();
await Test_ChangeDDnsClientHostname();
await Test_RegenerateServerCert();
await Test_MakeOpenVpnConfigFile();
@ -2624,21 +2624,21 @@ async function Test_SetAzureStatus(): Promise<void>
console.log();
}
/** API test for 'GetDDnsInternetSettng', Get DDNS proxy configuration */
async function Test_GetDDnsInternetSettng(): Promise<void>
/** API test for 'GetDDnsInternetSetting', Get DDNS proxy configuration */
async function Test_GetDDnsInternetSetting(): Promise<void>
{
console.log("Begin: Test_GetDDnsInternetSettng");
let out_internet_setting: VPN.VpnInternetSetting = await api.GetDDnsInternetSettng();
console.log("Begin: Test_GetDDnsInternetSetting");
let out_internet_setting: VPN.VpnInternetSetting = await api.GetDDnsInternetSetting();
console.log(out_internet_setting);
console.log("End: Test_GetDDnsInternetSettng");
console.log("End: Test_GetDDnsInternetSetting");
console.log("-----");
console.log();
}
/** API test for 'SetDDnsInternetSettng', Set DDNS proxy configuration */
async function Test_SetDDnsInternetSettng(): Promise<void>
/** API test for 'SetDDnsInternetSetting', Set DDNS proxy configuration */
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(
{
ProxyType_u32: VPN.VpnRpcProxyType.Direct,
@ -2647,9 +2647,9 @@ async function Test_SetDDnsInternetSettng(): Promise<void>
ProxyUsername_str: "neko",
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("End: Test_SetDDnsInternetSettng");
console.log("End: Test_SetDDnsInternetSetting");
console.log("-----");
console.log();
}

View File

@ -1,10 +1,10 @@
// SoftEther VPN Server JSON-RPC Stub code for TypeScript
//
// 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
// Copyright (c) 2014-2019 SoftEther VPN Project
// Copyright (c) 2014-2023 SoftEther VPN Project
// Trivial utility codes
@ -856,15 +856,15 @@ export class VpnServerRpc
}
/** 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. */
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. */

View File

@ -2,13 +2,13 @@
// Runs on both web browsers and Node.js
//
// 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.
// You can copy and paste test code to write your own web browser TypeScript / JavaScript codes.
//
// 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.
// import "core-js/es6/promise";
@ -216,8 +216,8 @@ async function Test_All(): Promise<void>
await Test_SetOpenVpnSstpConfig();
await Test_GetOpenVpnSstpConfig();
await Test_GetDDnsClientStatus();
await Test_SetDDnsInternetSettng();
await Test_GetDDnsInternetSettng();
await Test_SetDDnsInternetSetting();
await Test_GetDDnsInternetSetting();
await Test_ChangeDDnsClientHostname();
await Test_RegenerateServerCert();
await Test_MakeOpenVpnConfigFile();
@ -2624,21 +2624,21 @@ async function Test_SetAzureStatus(): Promise<void>
console.log();
}
/** API test for 'GetDDnsInternetSettng', Get DDNS proxy configuration */
async function Test_GetDDnsInternetSettng(): Promise<void>
/** API test for 'GetDDnsInternetSetting', Get DDNS proxy configuration */
async function Test_GetDDnsInternetSetting(): Promise<void>
{
console.log("Begin: Test_GetDDnsInternetSettng");
let out_internet_setting: VPN.VpnInternetSetting = await api.GetDDnsInternetSettng();
console.log("Begin: Test_GetDDnsInternetSetting");
let out_internet_setting: VPN.VpnInternetSetting = await api.GetDDnsInternetSetting();
console.log(out_internet_setting);
console.log("End: Test_GetDDnsInternetSettng");
console.log("End: Test_GetDDnsInternetSetting");
console.log("-----");
console.log();
}
/** API test for 'SetDDnsInternetSettng', Set DDNS proxy configuration */
async function Test_SetDDnsInternetSettng(): Promise<void>
/** API test for 'SetDDnsInternetSetting', Set DDNS proxy configuration */
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(
{
ProxyType_u32: VPN.VpnRpcProxyType.Direct,
@ -2647,9 +2647,9 @@ async function Test_SetDDnsInternetSettng(): Promise<void>
ProxyUsername_str: "neko",
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("End: Test_SetDDnsInternetSettng");
console.log("End: Test_SetDDnsInternetSetting");
console.log("-----");
console.log();
}

View File

@ -1,10 +1,10 @@
// SoftEther VPN Server JSON-RPC Stub code for TypeScript
//
// 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
// Copyright (c) 2014-2019 SoftEther VPN Project
// Copyright (c) 2014-2023 SoftEther VPN Project
// Trivial utility codes
@ -856,15 +856,15 @@ export class VpnServerRpc
}
/** 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. */
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. */

View File

@ -1357,22 +1357,22 @@ namespace SoftEther.VPNServerRpc
/// <summary>
/// Get the Proxy Settings for Connecting to the DDNS server (Async mode).
/// </summary>
public async Task<VpnInternetSetting> GetDDnsInternetSettngAsync() => await CallAsync<VpnInternetSetting>("GetDDnsInternetSettng", new VpnInternetSetting());
public async Task<VpnInternetSetting> GetDDnsInternetSettingAsync() => await CallAsync<VpnInternetSetting>("GetDDnsInternetSetting", new VpnInternetSetting());
/// <summary>
/// Get the Proxy Settings for Connecting to the DDNS server (Async mode).
/// </summary>
public VpnInternetSetting GetDDnsInternetSettng() => GetDDnsInternetSettngAsync().Result;
public VpnInternetSetting GetDDnsInternetSetting() => GetDDnsInternetSettingAsync().Result;
/// <summary>
/// Set the Proxy Settings for Connecting to the DDNS server (Async mode).
/// </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>
/// Set the Proxy Settings for Connecting to the DDNS server (Sync mode).
/// </summary>
public VpnInternetSetting SetDDnsInternetSettng(VpnInternetSetting input_param) => SetDDnsInternetSettngAsync(input_param).Result;
public VpnInternetSetting SetDDnsInternetSetting(VpnInternetSetting input_param) => SetDDnsInternetSettingAsync(input_param).Result;
/// <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.

View File

@ -255,8 +255,8 @@ class VPNRPCTest
Test_GetOpenVpnSstpConfig();
Test_GetDDnsClientStatus();
Test_SetDDnsInternetSettng();
Test_GetDDnsInternetSettng();
Test_SetDDnsInternetSetting();
Test_GetDDnsInternetSetting();
Test_ChangeDDnsClientHostname();
Test_RegenerateServerCert();
@ -3641,27 +3641,27 @@ class VPNRPCTest
}
/// <summary>
/// API test for 'GetDDnsInternetSettng', Get DDNS proxy configuration
/// API test for 'GetDDnsInternetSetting', Get DDNS proxy configuration
/// </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);
Console.WriteLine("End: Test_GetDDnsInternetSettng");
Console.WriteLine("End: Test_GetDDnsInternetSetting");
Console.WriteLine("-----");
Console.WriteLine();
}
/// <summary>
/// API test for 'SetDDnsInternetSettng', Set DDNS proxy configuration
/// API test for 'SetDDnsInternetSetting', Set DDNS proxy configuration
/// </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()
{
@ -3671,11 +3671,11 @@ class VPNRPCTest
ProxyUsername_str = "neko",
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);
Console.WriteLine("End: Test_SetDDnsInternetSettng");
Console.WriteLine("End: Test_SetDDnsInternetSetting");
Console.WriteLine("-----");
Console.WriteLine();
}

View File

@ -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.
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 !

View File

@ -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))
{
c->JsonRpcAuthed = true;
#ifndef GC_SOFTETHER_OSS
RemoveDosEntry(c->Listener, s);
#endif // GC_SOFTETHER_OSS
// Divide url_target into URL and query string
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;
#ifndef GC_SOFTETHER_OSS
RemoveDosEntry(c->Listener, s);
#endif // GC_SOFTETHER_OSS
// Divide url_target into URL and query string
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;
#ifndef GC_SOFTETHER_OSS
RemoveDosEntry(c->Listener, s);
#endif // GC_SOFTETHER_OSS
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;
#ifndef GC_SOFTETHER_OSS
RemoveDosEntry(c->Listener, s);
#endif // GC_SOFTETHER_OSS
// Divide url_target into URL and query string
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;
#ifndef GC_SOFTETHER_OSS
RemoveDosEntry(c->Listener, s);
#endif // GC_SOFTETHER_OSS
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("GetAzureStatus", RPC_AZURE_STATUS, StGetAzureStatus, InRpcAzureStatus, OutRpcAzureStatus)
DECLARE_RPC("SetAzureStatus", RPC_AZURE_STATUS, StSetAzureStatus, InRpcAzureStatus, OutRpcAzureStatus)
DECLARE_RPC("GetDDnsInternetSettng", INTERNET_SETTING, StGetDDnsInternetSetting, InRpcInternetSetting, OutRpcInternetSetting)
DECLARE_RPC("SetDDnsInternetSettng", INTERNET_SETTING, StSetDDnsInternetSetting, InRpcInternetSetting, OutRpcInternetSetting)
DECLARE_RPC("GetDDnsInternetSetting", INTERNET_SETTING, StGetDDnsInternetSetting, InRpcInternetSetting, OutRpcInternetSetting)
DECLARE_RPC("SetDDnsInternetSetting", INTERNET_SETTING, StSetDDnsInternetSetting, InRpcInternetSetting, OutRpcInternetSetting)
// 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("GetAzureStatus", RPC_AZURE_STATUS, ScGetAzureStatus, InRpcAzureStatus, OutRpcAzureStatus)
DECLARE_SC("SetAzureStatus", RPC_AZURE_STATUS, ScSetAzureStatus, InRpcAzureStatus, OutRpcAzureStatus)
DECLARE_SC("GetDDnsInternetSettng", INTERNET_SETTING, ScGetDDnsInternetSetting, InRpcInternetSetting, OutRpcInternetSetting)
DECLARE_SC("SetDDnsInternetSettng", INTERNET_SETTING, ScSetDDnsInternetSetting, InRpcInternetSetting, OutRpcInternetSetting)
DECLARE_SC("GetDDnsInternetSetting", INTERNET_SETTING, ScGetDDnsInternetSetting, InRpcInternetSetting, OutRpcInternetSetting)
DECLARE_SC("SetDDnsInternetSetting", INTERNET_SETTING, ScSetDDnsInternetSetting, InRpcInternetSetting, OutRpcInternetSetting)
// RPC call function declaration: till here
// Setting VPN Gate Server Configuration

View File

@ -805,7 +805,12 @@ bool EthIsChangeMtuSupported(ETH *e)
return false;
}
// FreeBSD seriously dislikes MTU changes; disable if compiled on that platform
#ifndef __FreeBSD__
return true;
#else
return false;
#endif
#else // defined(UNIX_LINUX) || defined(UNIX_BSD) || defined(UNIX_SOLARIS)
return false;
#endif // defined(UNIX_LINUX) || defined(UNIX_BSD) || defined(UNIX_SOLARIS)

View File

@ -1161,7 +1161,8 @@ void Win32EthMakeCombinedName(char *dst, UINT dst_size, char *nicname, char *gui
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
{
@ -1185,18 +1186,19 @@ UINT Win32EthGetNameAndIdFromCombinedName(char *name, UINT name_size, char *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, ")"))
{
char num[MAX_SIZE];
Zero(num, sizeof(num));
StrCpy(num, sizeof(num), id_str + 5);
StrCpy(num, sizeof(num), id_str + 4);
num[StrLen(num) - 1] = 0;
@ -1204,7 +1206,7 @@ UINT Win32EthGetNameAndIdFromCombinedName(char *name, UINT name_size, char *str)
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);
}
// 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;
@ -1405,7 +1409,7 @@ LIST *GetEthAdapterListInternal()
UINT size;
char *buf;
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;
LIST *su_adapter_list = NULL;
@ -1660,7 +1664,8 @@ ANSI_STR:
}
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;

View File

@ -6150,6 +6150,8 @@ void CmImportAccountMainEx(HWND hWnd, wchar_t *filename, bool overwrite)
t->ClientOption->RequireMonitorMode = old_option->RequireMonitorMode;
t->ClientOption->RequireBridgeRoutingMode = old_option->RequireBridgeRoutingMode;
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
CiFreeClientAuth(t->ClientAuth);
@ -6456,9 +6458,55 @@ void CmDetailDlgUpdate(HWND hWnd, CM_ACCOUNT *a)
Disable(hWnd, R_BRIDGE);
Disable(hWnd, R_MONITOR);
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
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_DISABLE_QOS, a->ClientOption->DisableQoS);
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
if (a->LinkMode == false)
@ -6542,6 +6595,20 @@ UINT CmDetailDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *pa
Focus(hWnd, E_INTERVAL);
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->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->DisableQoS = IsChecked(hWnd, R_DISABLE_QOS);
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)
{

View File

@ -322,6 +322,34 @@ void DecrementNoSsl(CEDAR *c, IP *ip, UINT num_dec)
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
bool AddNoSsl(CEDAR *c, IP *ip)
{
@ -704,6 +732,47 @@ void DelConnection(CEDAR *cedar, CONNECTION *c)
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
void AddConnection(CEDAR *cedar, CONNECTION *c)
{

View File

@ -1022,6 +1022,7 @@ void DelHubEx(CEDAR *c, HUB *h, bool no_lock);
void StopAllHub(CEDAR *c);
void StopAllConnection(CEDAR *c);
void AddConnection(CEDAR *cedar, CONNECTION *c);
UINT GetUnestablishedConnections(CEDAR *cedar);
void DelConnection(CEDAR *cedar, CONNECTION *c);
void SetCedarCipherList(CEDAR *cedar, char *name);
void InitCedar();
@ -1046,6 +1047,7 @@ bool AddNoSsl(CEDAR *c, IP *ip);
void DecrementNoSsl(CEDAR *c, IP *ip, UINT num_dec);
void DeleteOldNoSsl(CEDAR *c);
NON_SSL *SearchNoSslList(CEDAR *c, IP *ip);
bool IsInNoSsl(CEDAR *c, IP *ip);
void FreeTinyLog(TINY_LOG *t);
void WriteTinyLog(TINY_LOG *t, char *str);
TINY_LOG *NewTinyLog();

View File

@ -4345,6 +4345,9 @@ void InRpcClientOption(CLIENT_OPTION *c, PACK *p)
PackGetStr(p, "CustomHttpHeader", c->CustomHttpHeader, sizeof(c->CustomHttpHeader));
PackGetStr(p, "HubName", c->HubName, sizeof(c->HubName));
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->UseCompress = PackGetInt(p, "UseCompress") ? 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, "NoUdpAcceleration", c->NoUdpAcceleration);
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
@ -5150,6 +5155,22 @@ void CiRpcAccepted(CLIENT *c, SOCK *s)
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);
{
if (c->Config.AllowRemoteConfig == false)
@ -5253,14 +5274,21 @@ void CiRpcServerThread(THREAD *thread, void *param)
// Open the port
listener = NULL;
for (i = CLIENT_CONFIG_PORT;i < (CLIENT_CONFIG_PORT + 5);i++)
if (c->Config.DisableRpcDynamicPortListener == false)
{
listener = Listen(i);
if (listener != NULL)
for (i = CLIENT_CONFIG_PORT;i < (CLIENT_CONFIG_PORT + 5);i++)
{
break;
listener = ListenEx(i, !c->Config.AllowRemoteConfig);
if (listener != NULL)
{
break;
}
}
}
else
{
listener = ListenEx(CLIENT_CONFIG_PORT, !c->Config.AllowRemoteConfig);
}
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
// Eraser
c->Eraser = NewEraser(c->Logger, 0);
#ifdef OS_WIN32
c->Config.DisableRpcDynamicPortListener = false;
#else // OS_WIN32
c->Config.DisableRpcDynamicPortListener = true;
#endif // OS_WIN32
}
else
{
@ -9169,6 +9203,19 @@ void CiLoadClientConfig(CLIENT_CONFIG *c, FOLDER *f)
c->AllowRemoteConfig = CfgGetBool(f, "AllowRemoteConfig");
c->KeepConnectInterval = MAKESURE(CfgGetInt(f, "KeepConnectInterval"), KEEP_INTERVAL_MIN, KEEP_INTERVAL_MAX);
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
@ -9299,7 +9346,9 @@ CLIENT_OPTION *CiLoadClientOption(FOLDER *f)
o->DisableQoS = CfgGetBool(f, "DisableQoS");
o->FromAdminPack = CfgGetBool(f, "FromAdminPack");
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");
if (b != NULL)
{
@ -9741,6 +9790,7 @@ void CiWriteClientConfig(FOLDER *cc, CLIENT_CONFIG *config)
CfgAddBool(cc, "AllowRemoteConfig", config->AllowRemoteConfig);
CfgAddInt(cc, "KeepConnectInterval", config->KeepConnectInterval);
CfgAddBool(cc, "NoChangeWcmNetworkSettingOnWindows8", config->NoChangeWcmNetworkSettingOnWindows8);
CfgAddBool(cc, "DisableRpcDynamicPortListener", config->DisableRpcDynamicPortListener);
}
// Write the client authentication data
@ -9853,6 +9903,8 @@ void CiWriteClientOption(FOLDER *f, CLIENT_OPTION *o)
CfgAddBool(f, "RequireBridgeRoutingMode", o->RequireBridgeRoutingMode);
CfgAddBool(f, "DisableQoS", o->DisableQoS);
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)
{

View File

@ -87,6 +87,7 @@ struct CLIENT_CONFIG
UINT KeepConnectProtocol; // Protocol
UINT KeepConnectInterval; // Interval
bool NoChangeWcmNetworkSettingOnWindows8; // Don't change the WCM network settings on Windows 8
bool DisableRpcDynamicPortListener;
};
// Version acquisition

View File

@ -24496,6 +24496,34 @@ void CmdPrintAbout(CONSOLE *c)
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);
}

View File

@ -58,6 +58,7 @@ struct RC4_KEY_PAIR
UCHAR ServerToClientKey[16];
UCHAR ClientToServerKey[16];
};
#define TYPE_BINDLOCALIP 1 // Enable HMI user to edit Source IP address & Source port number for outgoing connection
// Client Options
// 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
char CustomHttpHeader[HTTP_CUSTOM_HEADER_MAX_SIZE]; // Custom HTTP proxy header
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

View File

@ -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(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");
cert_hash = StrToBin(DDNS_CERT_HASH);

View File

@ -18,7 +18,11 @@
"439BAFA75A6EE5671FC9F9A02D34FF29881761A0" \
"EFAC5FA0CDD14E0F864EED58A73C35D7E33B62F3" \
"74DF99D4B1B5F0488A388B50D347D26013DC67A5" \
"6EBB39AFCA8C900635CFC11218CF293A612457E4"
"6EBB39AFCA8C900635CFC11218CF293A612457E4" \
"05A9386C5E2B233F7BAB2479620EAAA2793709ED" \
"A811C64BB715351E36B6C1E022648D8BE0ACD128" \
"BD264DB3B0B1B3ABA0AF3074AA574ED1EF3B42D7" \
"9AB61D691536645DD55A8730FC6D2CDF33C8C73F"
#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_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
#define DDNS_CONNECT_TIMEOUT DYN32(DDNS_CONNECT_TIMEOUT, (15 * 1000))

View File

@ -1517,7 +1517,9 @@ void IPCProcessL3EventsEx(IPC *ipc, UINT64 now)
// We save the router advertisement data for later use
IPCIPv6AddRouterPrefixes(ipc, &p->ICMPv6HeaderPacketInfo.OptionList, src_mac, &ip_src);
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;
header_size = sizeof(ICMPV6_ROUTER_ADVERTISEMENT_HEADER);
break;
@ -1537,7 +1539,8 @@ void IPCProcessL3EventsEx(IPC *ipc, UINT64 now)
// Remove link-layer address options for Windows clients (required on Windows 11)
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;
UCHAR *dst = src;
UINT removed = 0;
@ -2353,7 +2356,14 @@ void IPCIPv6AddRouterPrefixes(IPC *ipc, ICMPV6_OPTION_LIST *recvPrefix, UCHAR *m
IntToSubnetMask6(&newRA->RoutedMask, recvPrefix->Prefix[i]->SubnetLength);
CopyIP(&newRA->RouterAddress, ip);
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);
}
}
@ -2656,7 +2666,7 @@ void IPCIPv6SendUnicast(IPC *ipc, void *data, UINT size, IP *next_ip)
}
destMac = ra.RouterMacAddress;
if (!IsMacUnicast(destMac) && !IsMacInvalid(ra.RouterMacAddress))
if (!IsMacUnicast(destMac) && !IsMacInvalid(ra.RouterLinkLayerAddress))
{
destMac = ra.RouterLinkLayerAddress;
}

View File

@ -17,6 +17,7 @@
#include "Mayaqua/Memory.h"
#include "Mayaqua/Object.h"
#include "Mayaqua/Str.h"
#include "Mayaqua/Tick64.h"
static bool disable_dos = false;
static UINT max_connections_per_ip = DEFAULT_MAX_CONNECTIONS_PER_IP;
@ -181,6 +182,11 @@ void TCPAcceptedThread(THREAD *t, void *param)
ConnectionAccept(c);
flag1 = c->flag1;
if (c->JsonRpcAuthed)
{
RemoveDosEntry(r, s);
}
// Release
SLog(r->Cedar, "LS_CONNECTION_END_1", c->Name);
ReleaseListener(c->Listener);
@ -221,6 +227,46 @@ void TCPAccepted(LISTENER *r, SOCK *s)
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);
@ -239,6 +285,169 @@ void TCPAccepted(LISTENER *r, SOCK *s)
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
void ListenerUDPMainLoop(LISTENER *r)
@ -653,6 +862,13 @@ void CleanupListener(LISTENER *r)
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)
{
@ -802,6 +1018,7 @@ LISTENER *NewListenerEx5(CEDAR *cedar, UINT proto, UINT port, THREAD_PROC *proc,
r->Port = port;
r->Event = NewEvent();
r->DosList = NewList(CompareDos);
r->LocalOnly = local_only;
r->ShadowIPv6 = shadow_ipv6;

View File

@ -10,12 +10,24 @@
#include "CedarType.h"
#include "Mayaqua/MayaType.h"
#include "Mayaqua/Kernel.h"
#include "Mayaqua/Network.h"
// Function to call when receiving a new connection
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
struct LISTENER
@ -31,6 +43,8 @@ struct LISTENER
volatile bool Halt; // Halting flag
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
void *ThreadParam; // Thread parameters
@ -105,6 +119,11 @@ void FreeDynamicListener(DYNAMIC_LISTENER *d);
bool ListenerRUDPRpcRecvProc(RUDP_STACK *r, UDPPACKET *p);
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

View File

@ -6196,6 +6196,8 @@ SOCK *ClientConnectGetSocket(CONNECTION *c, bool additional_connect)
{
volatile bool *cancel_flag = NULL;
char hostname[MAX_HOST_NAME_LEN];
char localaddr[MAX_HOST_NAME_LEN];
bool save_resolved_ip = false;
CLIENT_OPTION *o;
SESSION *sess;
@ -6255,10 +6257,48 @@ SOCK *ClientConnectGetSocket(CONNECTION *c, bool additional_connect)
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 == 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
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),
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.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
in.Hwnd = c->hWndForUI;
#endif
@ -6338,13 +6405,16 @@ SOCK *ClientConnectGetSocket(CONNECTION *c, bool additional_connect)
switch (o->ProxyType)
{
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;
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;
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;
default:
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);
}
// 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;
}
@ -6409,15 +6498,41 @@ UINT ProxyCodeToCedar(UINT code)
// 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)
{
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
if (hWnd == NULL)
{
#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
}
else
@ -6428,11 +6543,14 @@ SOCK *TcpConnectEx4(char *hostname, UINT port, UINT timeout, bool *cancel_flag,
}
// 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;
UINT dummy_int = 0;
@ -6447,7 +6565,8 @@ SOCK *TcpIpConnectEx2(char *hostname, UINT port, bool *cancel_flag, void *hWnd,
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)
{
return NULL;
@ -6654,7 +6773,6 @@ PACK *PackLoginWithOpenVPNCertificate(char *hubname, char *username, X *x)
p = NewPack();
PackAddStr(p, "method", "login");
PackAddStr(p, "hubname", hubname);
if (IsEmptyStr(username))
{
@ -6663,12 +6781,26 @@ PACK *PackLoginWithOpenVPNCertificate(char *hubname, char *username, X *x)
FreePack(p);
return NULL;
}
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
{
PackAddStr(p, "username", username);
PackAddStr(p, "hubname", hubname);
}
PackAddInt(p, "authtype", AUTHTYPE_OPENVPN_CERT);

View File

@ -115,6 +115,11 @@ bool ClientConnect(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 *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 ClientDownloadHello(CONNECTION *c, SOCK *s);
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 *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);
void InitProtocol();

View File

@ -41,7 +41,10 @@ typedef struct SETTING
char HubName[MAX_HUBNAME_LEN + 1]; // HUB name
UCHAR HashedPassword[SHA1_SIZE]; // Password
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;
// Structure declaration

View File

@ -113,9 +113,12 @@ bool SwCompileSfx(LIST *o, wchar_t *dst_filename)
}
// 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");
_UpdateResourceA = (UINT (__stdcall *)(HANDLE,LPCSTR,LPCSTR,WORD,LPVOID,DWORD))GetProcAddress(hKernel32, "UpdateResourceA");
_EndUpdateResourceW = (UINT (__stdcall *)(HANDLE,UINT))GetProcAddress(hKernel32, "EndUpdateResourceW");
#pragma clang diagnostic pop
if (_BeginUpdateResourceW != NULL && _UpdateResourceA != NULL && _EndUpdateResourceW != NULL)
{
@ -647,7 +650,10 @@ UINT SWExec()
bool is_datafile_exists = false;
// 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));
#pragma clang diagnostic pop
if (is_datafile_exists)
{

View File

@ -93,9 +93,12 @@ void SuDeleteGarbageInfsInner()
return;
}
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
_SetupUninstallOEMInfA =
(UINT (__stdcall *)(PCSTR,DWORD,PVOID))
GetProcAddress(hSetupApiDll, "SetupUninstallOEMInfA");
#pragma clang diagnostic pop
if (_SetupUninstallOEMInfA != NULL)
{
@ -750,11 +753,45 @@ LIST *SuGetAdapterList(SU *u)
for (i = 0;i < u->AdapterInfoList.NumAdapters;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));
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
return NULL;

View File

@ -609,6 +609,24 @@ void SessionMain(SESSION *s)
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)
{
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->ProtocolDetails, sizeof(s->ProtocolDetails));

View File

@ -130,6 +130,7 @@ struct SESSION
UCHAR Padding[2];
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 LastCommTime; // Last communication date and time

View File

@ -9340,20 +9340,75 @@ UINT ServeDhcpDiscoverEx(VH *v, UCHAR *mac, UINT request_ip, bool is_static_ip)
return 0;
}
UINT ret = 0;
DHCP_LEASE *d = SearchDhcpLeaseByIp(v, request_ip);
if (d != NULL)
{
// The requested IP address is used already
return 0;
// If an entry for the same IP address already exists,
// 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;
}
}
// 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))
else
{
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
@ -9710,36 +9765,40 @@ void VirtualDhcpServer(VH *v, PKT *p)
}
else
{
// There is no IP address that can be provided
DHCP_OPTION_LIST ret;
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)
// Reply of DHCP_REQUEST must be either DHCP_ACK or DHCP_NAK.
if (opt->Opcode == DHCP_REQUEST)
{
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);
// There is no IP address that can be provided
DHCP_OPTION_LIST ret;
LIST *o;
Zero(&ret, sizeof(ret));
// Release the memory
FreeBuf(b);
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);
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);
}
}
}

View File

@ -903,7 +903,10 @@ void ShowWizard(HWND hWndParent, WIZARD *w, UINT start_id)
h.phpage = (HPROPSHEETPAGE *)pages_array;
h.pszbmHeader = MAKEINTRESOURCEW(w->Bitmap);
h.pszCaption = w->Caption;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
h.pfnCallback = WizardDlgProc;
#pragma clang diagnostic pop
start_page = GetWizardPage(w, start_id);
if (start_page != NULL)
@ -3487,7 +3490,10 @@ HWND SearchWindow(wchar_t *caption)
p.caption = caption;
p.hWndFound = NULL;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
EnumWindows(SearchWindowEnumProc, (LPARAM)&p);
#pragma clang diagnostic pop
return p.hWndFound;
}

View File

@ -313,8 +313,16 @@ BUF *WpcDataEntryToBuf(WPC_ENTRY *e)
}
data_size = e->Size + 4096;
data = Malloc(data_size);
size = DecodeSafe64(data, e->Data, e->Size);
data = ZeroMalloc(data_size);
if (e->Size >= 1)
{
size = DecodeSafe64(data, e->Data, e->Size);
}
else
{
size = 0;
}
b = NewBuf();
WriteBuf(b, data, size);

View File

@ -712,7 +712,8 @@ UINT RsaPublicSize(K *k)
// Hash a pointer to a 32-bit
UINT HashPtrToUINT(void *p)
{
UCHAR hash_data[MD5_SIZE];
UCHAR hash_data[SHA256_SIZE];
UCHAR hash_src[CANARY_RAND_SIZE + sizeof(void *)];
UINT ret;
// Validate arguments
if (p == NULL)
@ -720,7 +721,11 @@ UINT HashPtrToUINT(void *p)
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));

View File

@ -2124,6 +2124,24 @@ IO *FileOpenEx(char *name, bool write_mode, bool read_lock)
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)
{
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));
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);
o->HamMode = true;
o->HamBuf = ReadHamcoreW(name);
o->HamBuf = ReadHamcoreW(o->NameW);
if (o->HamBuf == NULL)
{
Free(o);

View File

@ -2100,7 +2100,31 @@ void AbortExitEx(char *msg)
f = fopen("abort_error_log.txt", "w");
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(crlf, 1, strlen(crlf), f);
fwrite(crlf, 1, strlen(crlf), f);
fclose(f);
}

View File

@ -123,11 +123,7 @@ typedef int (COMPARE)(void *p1, void *p2);
#define GET_ABS(a) ((a) >= 0 ? (a) : -(a))
// Convert the pointer to UINT
#ifdef CPU_64
#define POINTER_TO_KEY(p) HashPtrToUINT(p)
#else
#define POINTER_TO_KEY(p) (UINT)(p)
#endif
#define POINTER_TO_KEY(p) (HashPtrToUINT(p))
// Compare the pointer and UINT
#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;
// Memory.h
typedef struct MEMTAG MEMTAG;
typedef struct MEMTAG1 MEMTAG1;
typedef struct MEMTAG2 MEMTAG2;
typedef struct BUF BUF;
typedef struct FIFO FIFO;
typedef struct LIST LIST;

View File

@ -65,6 +65,8 @@ void InitProcessCallOnce()
{
init_proc_once_flag = true;
InitCanaryRand();
#ifdef OS_WIN32
MsInitProcessCallOnce();
#endif // OS_WIN32

View File

@ -16,10 +16,16 @@
#include "Object.h"
#include "OS.h"
#include "Str.h"
#include "Tick64.h"
#include "Tracking.h"
#include <stdlib.h>
#include <string.h>
#include <time.h>
#ifdef OS_UNIX
#include <sys/time.h>
#endif
#include <zlib.h>
@ -34,6 +40,105 @@
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
PRAND *NewPRand(void *key, UINT key_size)
{
@ -3114,6 +3219,10 @@ void AdjustBufSize(BUF *b, UINT new_size)
while (b->SizeReserved < new_size)
{
if (b->SizeReserved > 0x7FFFFFFF)
{
AbortExitEx("AdjustBufSize(): too large buffer size");
}
b->SizeReserved = b->SizeReserved * 2;
}
b->Buf = ReAlloc(b->Buf, b->SizeReserved);
@ -3515,33 +3624,52 @@ void *Malloc(UINT size)
}
void *MallocEx(UINT size, bool zero_clear_when_free)
{
MEMTAG *tag;
MEMTAG1 *tag1;
MEMTAG2 *tag2;
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);
tag = InternalMalloc(real_size);
tag1 = InternalMalloc(real_size);
Zero(tag, sizeof(MEMTAG));
tag->Magic = MEMTAG_MAGIC;
tag->Size = size;
tag->ZeroFree = zero_clear_when_free;
tag1->Magic = canary_memtag_magic1 ^ ((UINT64)tag1 * GOLDEN_RATION_PRIME_U64);
tag1->Size = size;
tag1->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
UINT GetMemSize(void *addr)
{
MEMTAG *tag;
MEMTAG1 *tag;
if (canary_inited == false)
{
InitCanaryRand();
}
// Validate arguments
if (IS_NULL_POINTER(addr))
{
return 0;
}
tag = POINTER_TO_MEMTAG(addr);
CheckMemTag(tag);
tag = POINTER_TO_MEMTAG1(addr);
CheckMemTag1(tag);
return tag->Size;
}
@ -3549,20 +3677,35 @@ UINT GetMemSize(void *addr)
// ReAlloc
void *ReAlloc(void *addr, UINT size)
{
MEMTAG *tag;
MEMTAG1 *tag1;
MEMTAG2 *tag2;
bool zerofree;
if (canary_inited == false)
{
InitCanaryRand();
}
if (size > MAX_MALLOC_MEM_SIZE)
{
AbortExitEx("ReAlloc() error: too large size");
}
// Validate arguments
if (IS_NULL_POINTER(addr))
{
return NULL;
}
tag = POINTER_TO_MEMTAG(addr);
CheckMemTag(tag);
tag1 = POINTER_TO_MEMTAG1(addr);
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
return addr;
@ -3574,10 +3717,10 @@ void *ReAlloc(void *addr, UINT size)
// Size changed (zero clearing required)
void *new_p = MallocEx(size, true);
if (tag->Size <= size)
if (tag1->Size <= size)
{
// Size expansion
Copy(new_p, addr, tag->Size);
Copy(new_p, addr, tag1->Size);
}
else
{
@ -3593,13 +3736,22 @@ void *ReAlloc(void *addr, UINT size)
else
{
// Size changed
MEMTAG *tag2 = InternalReAlloc(tag, CALC_MALLOCSIZE(size));
MEMTAG1 *tag1_new;
MEMTAG2 *tag2_new;
Zero(tag2, sizeof(MEMTAG));
tag2->Magic = MEMTAG_MAGIC;
tag2->Size = size;
tag1->Magic = 0;
tag2->Magic = 0;
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
void Free(void *addr)
{
MEMTAG *tag;
MEMTAG1 *tag1;
MEMTAG2 *tag2;
// Validate arguments
if (IS_NULL_POINTER(addr))
{
return;
}
tag = POINTER_TO_MEMTAG(addr);
CheckMemTag(tag);
if (canary_inited == false)
{
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(addr, tag->Size);
Zero(addr, tag1->Size);
}
// Memory release
tag->Magic = 0;
InternalFree(tag);
tag1->Magic = 0;
tag2->Magic = 0;
InternalFree(tag1);
}
// Free and set pointer's value to NULL
@ -3635,24 +3797,36 @@ void FreeSafe(void **addr)
*addr = NULL;
}
// Check the memtag
void CheckMemTag(MEMTAG *tag)
// Check the memtag1
void CheckMemTag1(MEMTAG1 *tag)
{
if (IsTrackingEnabled() == false)
{
return;
}
// Validate arguments
if (tag == NULL)
{
AbortExitEx("CheckMemTag: tag == NULL");
AbortExitEx("CheckMemTag1: tag1 == NULL");
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;
}
}

View File

@ -14,29 +14,38 @@
#define MallocFast Malloc
#define ZeroMallocFast ZeroMalloc
#define MAX_MALLOC_MEM_SIZE (0xffffffff - 64)
// Memory size that can be passed to the kernel at a time
#define MAX_SEND_BUF_MEM_SIZE (10 * 1024 * 1024)
// The magic number for memory tag
#define MEMTAG_MAGIC 0x49414449
#define CALC_MALLOCSIZE(size) ((MAX(size, 1)) + sizeof(MEMTAG))
#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 CALC_MALLOCSIZE(size) (((MAX(size, 1) + 7) / 8) * 8 + sizeof(MEMTAG1) + sizeof(MEMTAG2))
#define MEMTAG1_TO_POINTER(p) ((void *)(((UCHAR *)(p)) + sizeof(MEMTAG1)))
#define POINTER_TO_MEMTAG1(p) ((MEMTAG1 *)(((UCHAR *)(p)) - sizeof(MEMTAG1)))
#define IS_NULL_POINTER(p) (((p) == NULL) || ((POINTER_TO_UINT64(p) == (UINT64)sizeof(MEMTAG1))))
#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
#define MEMPOOL_MAX_SIZE 3000
// Memory tag
struct MEMTAG
// Memory tag 1
struct MEMTAG1
{
UINT Magic;
UINT64 Magic;
UINT Size;
bool ZeroFree;
UINT Padding;
};
// Memory tag 2
struct MEMTAG2
{
UINT64 Magic;
};
// Buffer
@ -174,7 +183,8 @@ void *ZeroMallocEx(UINT size, bool zero_clear_when_free);
void *ReAlloc(void *addr, UINT size);
void Free(void *addr);
void FreeSafe(void **addr);
void CheckMemTag(MEMTAG *tag);
void CheckMemTag1(MEMTAG1 *tag);
void CheckMemTag2(MEMTAG2 *tag);
UINT GetMemSize(void *addr);
void *InternalMalloc(UINT size);
@ -364,5 +374,14 @@ LIST *NewStrList();
void ReleaseStrList(LIST *o);
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

View File

@ -2568,6 +2568,7 @@ MS_ADAPTER_LIST *MsCreateAdapterListInnerExVista(bool no_info)
UniStrCpy(a->TitleW, sizeof(a->TitleW), title);
UniToStr(a->Title, sizeof(a->Title), title);
a->Index = r->InterfaceIndex;
a->MediaConnectState = r->MediaConnectState;
a->Type = r->Type;
a->Status = ConvertMidStatusVistaToXp(r->OperStatus);
a->Mtu = r->Mtu;

View File

@ -281,6 +281,7 @@ typedef struct MS_ADAPTER
char Title[MAX_PATH]; // Display name
wchar_t TitleW[MAX_PATH]; // Display Name (Unicode)
UINT Index; // Index
UINT MediaConnectState; // Media Connect State
UINT Type; // Type
UINT Status; // Status
UINT Mtu; // MTU

View File

@ -540,6 +540,13 @@ LIST *Win32GetNicList()
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));
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");
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)
{
@ -5801,6 +5810,10 @@ SSL_PIPE *NewSslPipeEx3(bool server_mode, X *x, K *k, LIST *chain, DH_CTX *dh, b
#endif
ssl = SSL_new(ssl_ctx);
if (ssl == NULL)
{
return NULL;
}
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
if (enable_ca)
{
setsockopt(s, SOL_SOCKET, SO_CONDITIONAL_ACCEPT, (char *)&true_flag, sizeof(true_flag));
backlog = 1;
}
#endif
@ -13642,6 +13654,70 @@ int connect_timeout(SOCKET s, struct sockaddr *addr, int size, int timeout, bool
}
}
#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)
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));
}
// 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
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;
struct sockaddr_in sockaddr4;
@ -13791,6 +13930,38 @@ SOCKET ConnectTimeoutIPv4(IP *ip, UINT port, UINT timeout, bool *cancel_flag)
// Socket creation
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)
{
// Connection
@ -14053,7 +14224,21 @@ void ConnectThreadForRUDP(THREAD *thread, void *param)
}
// 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;
IP current_ip;
@ -14106,7 +14291,8 @@ void ConnectThreadForIPv4(THREAD *thread, void *param)
if (use_natt == false)
{
// 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)
{
@ -14408,7 +14594,21 @@ void ConnectThreadForIPv4(THREAD *thread, void *param)
}
// 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;
IP current_ip;
@ -14463,6 +14663,38 @@ void ConnectThreadForIPv6(THREAD *thread, void *param)
// Socket creation
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)
{
// 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);
}
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 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)
{
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.Timeout = timeout;
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.RetryDelay = 250;
p6.Delay = 0;
t6 = NewThread(ConnectThreadForIPv6, &p6);
// t6 = NewThread(ConnectThreadForIPv6, &p6);
t6 = NewThread(BindConnectThreadForIPv6, &p6); // For binding a socket
}
// IPv4 connection thread
if (LIST_NUM(iplist_v4) > 0)
{
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.Timeout = timeout;
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.RetryDelay = 250;
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)

View File

@ -812,6 +812,9 @@ struct RUDP_STACK
struct CONNECT_SERIAL_PARAM
{
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 Timeout;
char Hostname[MAX_SIZE];
@ -950,6 +953,10 @@ void ConnectThreadForRUDP(THREAD *thread, void *param);
void ConnectThreadForOverDnsOrIcmp(THREAD *thread, void *param);
void ConnectThreadForIPv4(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 *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);
@ -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 *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);
// 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);
UINT SetSocketBufferSizeWithBestEffort(SOCKET s, bool send, UINT size);
void InitUdpSocketBufferSize(SOCKET s);

View File

@ -16,11 +16,25 @@ SOCK *Internal_ProxyTcpConnect(PROXY_PARAM_IN *param, volatile bool *cancel_flag
}
#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
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;
char target_hostname[MAX_HOST_NAME_LEN + 1];
@ -208,6 +222,19 @@ FAILURE:
// 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)
{
// 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;
UCHAR tmp, recv_buf[2], *recv_buf_final;
@ -521,6 +548,19 @@ FAILURE:
// Connect to a SOCKS4 proxy
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;
UCHAR tmp, recv_buf[8];

View File

@ -30,6 +30,8 @@ struct PROXY_PARAM_IN
UINT Timeout;
char HttpCustomHeader[HTTP_CUSTOM_HEADER_MAX_SIZE];
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
void *Hwnd;
#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 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

View File

@ -4168,6 +4168,7 @@ BUF *DhcpModify(DHCP_MODIFY_OPTION *m, void *data, UINT size)
LIST *opt_list2 = NULL;
UINT src_size = size;
UINT i;
UINT dhcp_min_size;
// Validate arguments
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
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
UCHAR *pad_buf;
UINT pad_size = DHCP_MIN_SIZE - ret->Size;
UINT pad_size = dhcp_min_size - ret->Size;
pad_buf = ZeroMalloc(pad_size);

View File

@ -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
UINT64 Tick64ToTime64(UINT64 tick)
{

View File

@ -49,6 +49,7 @@ UINT64 Diff64(UINT64 a, UINT64 b);
UINT64 Tick64ToTime64(UINT64 tick);
UINT64 TickToTime(UINT64 tick);
UINT64 TickHighres64();
UINT64 TickHighresNano64(bool raw);
#endif // TICK64_H

View File

@ -2008,6 +2008,68 @@ void UnixGetSystemTime(SYSTEMTIME *system_time)
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)
UINT64 UnixGetTick64()
{

View File

@ -117,6 +117,7 @@ void UnixSetThreadPriorityRealtime();
void UnixSetResourceLimit(UINT id, UINT64 value);
bool UnixIs64BitRlimSupported();
UINT64 UnixGetTick64();
UINT64 UnixGetHighresTickNano64(bool raw);
void UnixSigChldHandler(int sig);
void UnixCloseIO();
void UnixGetCurrentDir(char *dir, UINT size);

View File

@ -2846,7 +2846,10 @@ bool Win32InitThread(THREAD *t)
// Thread creation
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);
#pragma clang diagnostic pop
if (hThread == NULL)
{
// Thread creation failure

View File

@ -73,7 +73,7 @@ CK_PKCS11_FUNCTION_INFO(C_GetSlotList)
(
CK_BBOOL tokenPresent, /* only slots with tokens? */
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
@ -351,7 +351,7 @@ CK_PKCS11_FUNCTION_INFO(C_FindObjects)
CK_SESSION_HANDLE hSession, /* session's handle */
CK_OBJECT_HANDLE_PTR phObject, /* gets obj. handles */
CK_ULONG ulMaxObjectCount, /* max handles to get */
CK_ULONG_PTR pulObjectCount /* actual # returned */
CK_UINT_PTR pulObjectCount /* actual # returned */
);
#endif
@ -558,7 +558,7 @@ CK_PKCS11_FUNCTION_INFO(C_Sign)
CK_BYTE_PTR pData, /* the data to sign */
CK_ULONG ulDataLen, /* count of bytes to sign */
CK_BYTE_PTR pSignature, /* gets the signature */
CK_ULONG_PTR pulSignatureLen /* gets signature length */
CK_UINT_PTR pulSignatureLen /* gets signature length */
);
#endif

View File

@ -51,6 +51,8 @@ typedef CK_BYTE CK_BBOOL;
/* an unsigned value, at least 32 bits long */
typedef unsigned long int CK_ULONG;
typedef unsigned int CK_UINT;
/* a signed value, the same size as a CK_ULONG */
/* CK_LONG is new for v2.0 */
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_UTF8CHAR CK_PTR CK_UTF8CHAR_PTR;
typedef CK_ULONG CK_PTR CK_ULONG_PTR;
typedef CK_UINT CK_PTR CK_UINT_PTR;
typedef void CK_PTR CK_VOID_PTR;
/* 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
typedef CK_ULONG CK_SLOT_ID;
typedef CK_UINT CK_SLOT_ID;
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
* 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;
@ -310,7 +313,7 @@ typedef CK_SESSION_INFO CK_PTR CK_SESSION_INFO_PTR;
/* CK_OBJECT_HANDLE is a token-specific identifier for an
* object */
typedef CK_ULONG CK_OBJECT_HANDLE;
typedef CK_UINT CK_OBJECT_HANDLE;
typedef CK_OBJECT_HANDLE CK_PTR CK_OBJECT_HANDLE_PTR;

View File

@ -13,7 +13,7 @@
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// 日文 resources
// 、鬢・resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
#ifdef _WIN32
@ -1654,14 +1654,18 @@ BEGIN
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_MONITOR",R_MONITOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,254,205,166,9
GROUPBOX "@STATIC17",IDC_STATIC,222,225,205,30
CONTROL "@R_NO_ROUTING",R_NO_ROUTING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,233,238,181,9
ICON ICO_WARNING,S_WARNING_ICON,223,261,18,18
LTEXT "@STATIC18",IDC_STATIC,247,261,180,26
GROUPBOX "@STATIC17", IDC_STATIC, 222, 225, 205, 43
CONTROL "@R_NO_ROUTING",R_NO_ROUTING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,233,234,181,9
LTEXT "@STATIC20", IDC_STATIC, 233, 243, 58, 17
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
PUSHBUTTON "@IDCANCEL",IDCANCEL,363,291,64,15
ICON ICO_SWITCH,IDC_STATIC,230,169,18,18
END
END
D_CM_NEW_VLAN DIALOGEX 0, 0, 251, 98
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
@ -4865,12 +4869,12 @@ END
//
BIN_WINPCAP BIN "Dummy.bin"
#endif // 日文 resources
#endif // 、鬢・resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// 中文 (台灣) resources
// 、、、・(・xニW) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHT)
#ifdef _WIN32
@ -4886,12 +4890,12 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
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)
#ifdef _WIN32
@ -4952,7 +4956,7 @@ BMP_ZURUKKO BITMAP "Zurukko.bmp"
BMP_VPNGATEEN BITMAP "VPNGateEN.bmp"
BMP_VPNGATEJA BITMAP "VPNGateJA.bmp"
BMP_UNIVTSUKUBA BITMAP "UnivTsukuba.bmp"
#endif // 英文 (美國) resources
#endif // ュ^、・(ャ・・ resources
/////////////////////////////////////////////////////////////////////////////

View File

@ -339,6 +339,8 @@
#define C_NUM_TCP 1075
#define B_TRUST 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_SERVER_CERT 1078
#define B_VIEW_SERVER_CERT 1079

View File

@ -2437,6 +2437,8 @@ STATIC17 其它配置(&G):
R_NO_ROUTING 不要调整路由表(&R)
STATIC18 除非你得到系统管理员的同意或者你有网络和安全方面的专业知识,否则请保持此对话框的默认设置。
STATIC19 VoIP / QoS 功能可以处理高优先级数据包,如 IP 电话数据包 (VoIP) 可以被更快的传输。
STATIC20 Source IP Address:
STATIC21 Source Port Number:
R_DISABLE_QOS 禁用 VoIP / &QoS 功能
IDOK 确定(&O)
IDCANCEL 取消
@ -2480,7 +2482,7 @@ STATIC1 您可以更改 VPN Client 的设置
STATIC2 远程管理(&E)
STATIC3 您可以通过使用 VPN Client 管理器远程模式从另一台计算机上远程管理 VPN Client 服务程序。
R_ALLOW_REMOTE_CONFIG 允许 VPN Client 服务的远程管理(&R)
S_WARNING 建议您在允许远程管理时设置密码。在菜单里选择“工具” >“设置密码”来设置密码。
S_WARNING 如果你允许远程管理,你必须设置一个密码。在菜单里选择“工具” >“设置密码”来设置密码。必须重新启动 VPN Client 服务,以应用远程管理可用性的配置变化。
STATIC4 在通讯闲置一段时间后自动断开互联网连接的环境下,可以通过向互联网上任意主机发送假数据包的方式来保持互联网连接。
R_USE_KEEP_CONNECT 使用保持 Internet 连接功能(&K)
S_HOSTNAME 主机名(&H):
@ -6476,7 +6478,7 @@ CMD_VpnAzureGetStatus_PRINT_CONNECTED 至 VPN Azure 云服务器的连接建立
CMD_VpnAzureGetStatus_PRINT_HOSTNAME 在 VPN Azure 服务上的本 VPN 服务器的主机名
# VpnAzureSetStatus command
# VpnAzureSetEnable command
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_Args VpnAzureSetEnable [yes|no]
@ -7026,13 +7028,13 @@ CMD_AccountImport_OK 连接设置 "%s" 已导入。
# RemoteEnable 命令
CMD_RemoteEnable 允许 VPN 客户服务的远程管理
CMD_RemoteEnable_Help 对 VPN Client 服务,从本地主机以外的远程计算机上,允许通过命令行管理设施或 VPN Client 管理器员进行连接和管理。
CMD_RemoteEnable_Help 对 VPN Client 服务,从本地主机以外的远程计算机上,允许通过命令行管理设施或 VPN Client 管理器员进行连接和管理。必须重新启动 VPN Client 服务,以应用远程管理可用性的配置变化。如果你允许远程管理,你必须设置一个密码。
CMD_RemoteEnable_Args RemoteEnable
# RemoteDisable 命令
CMD_RemoteDisable 禁止 VPN 客户服务的远程管理
CMD_RemoteDisable_Help 对 VPN Client 服务,从本地主机以外的远程计算机上,禁止通过命令行管理设施或 VPN Client 管理器员进行连接和管理。
CMD_RemoteDisable_Help 对 VPN Client 服务,从本地主机以外的远程计算机上,禁止通过命令行管理设施或 VPN Client 管理器员进行连接和管理。必须重新启动 VPN 客户端服务,以应用远程管理可用性的配置变化。
CMD_RemoteDisable_Args RemoteDisable

View File

@ -2421,6 +2421,8 @@ STATIC17 Other Confi&gurations:
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.
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
IDOK &OK
IDCANCEL Cancel
@ -2464,7 +2466,7 @@ STATIC1 You can modify the settings for VPN Client.
STATIC2 R&emote Management:
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
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.
R_USE_KEEP_CONNECT Use &Keep Alive Internet Connection Function
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
# VpnAzureSetStatus command
# VpnAzureSetEnable command
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_Args VpnAzureSetEnable [yes|no]
@ -7014,13 +7016,13 @@ CMD_AccountImport_OK The VPN Connection Setting "%s" has been imported.
# RemoteEnable command
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
# RemoteDisable command
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

View File

@ -2424,6 +2424,8 @@ STATIC17 その他の設定(&G):
R_NO_ROUTING ルーティングテーブルの調整処理を行わない(&R)
STATIC18 この設定画面の設定項目は、システム管理者から指示があった場合や、ネットワークやセキュリティに関して詳しい知識をお持ちの場合以外は変更しないでください。
STATIC19 VoIP / QoS 対応機能を使用すると、IP 電話パケットなどの優先度の高いパケットを VPN 内で高速に伝送できます。
STATIC20 送信元IPアドレス:
STATIC21 送信元ポート番号:
R_DISABLE_QOS VoIP / QoS 対応機能を無効にする(&Q)
IDOK &OK
IDCANCEL キャンセル
@ -2467,7 +2469,7 @@ STATIC1 VPN Client の動作に関する設定を変更できます。
STATIC2 リモート管理の設定(&E)
STATIC3 VPN Client サービスプログラムを別のコンピュータ上から VPN クライアント接続マネージャによってリモート管理することが可能です。
R_ALLOW_REMOTE_CONFIG VPN Client サービスのリモート管理を許可する(&R)
S_WARNING リモート管理を許可する場合、パスワードを設定しておくことを強くお勧めします。パスワードは [ツール] メニューの [パスワードの設定] をクリックして設定することができます。
S_WARNING リモート管理を許可する場合、パスワードを設定する必要があります。パスワードは [ツール] メニューの [パスワードの設定] をクリックして設定することができます。リモート管理の可否の変更の設定適用には、VPN Client サービスを再起動する必要があります。
STATIC4 一定期間無通信状態が続くと接続が自動的に切断されるようなネットワーク接続環境の場合、インターネット上の任意のサーバーに対して一定間隔ごとにパケットを送信することにより、インターネット接続を維持することができます。
R_USE_KEEP_CONNECT インターネット接続の維持機能を使用する(&K)
S_HOSTNAME ホスト名(&H):
@ -6470,7 +6472,7 @@ CMD_VpnAzureGetStatus_PRINT_CONNECTED VPN Azure クラウドサーバーへ接
CMD_VpnAzureGetStatus_PRINT_HOSTNAME VPN Azure サービス上でのホスト名
# VpnAzureSetStatus コマンド
# VpnAzureSetEnable コマンド
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_Args VpnAzureSetEnable [yes|no]
@ -7020,13 +7022,13 @@ CMD_AccountImport_OK 接続設定 "%s" としてインポートしました。
# RemoteEnable コマンド
CMD_RemoteEnable VPN Client サービスのリモート管理の許可
CMD_RemoteEnable_Help VPN Client サービスに、localhost 以外のリモートコンピュータから、コマンドライン管理ユーティリティまたは VPN クライアント接続マネージャでリモート接続して管理することを許可します。
CMD_RemoteEnable_Help VPN Client サービスに、localhost 以外のリモートコンピュータから、コマンドライン管理ユーティリティまたは VPN クライアント接続マネージャでリモート接続して管理することを許可します。注意: リモート管理の可否の変更の設定適用には、VPN Client サービスを再起動する必要があります。リモート管理を許可する場合、パスワードを設定する必要があります。
CMD_RemoteEnable_Args RemoteEnable
# RemoteDisable コマンド
CMD_RemoteDisable VPN Client サービスのリモート管理の禁止
CMD_RemoteDisable_Help VPN Client サービスに、localhost 以外のリモートコンピュータからコマンドライン管理ユーティリティまたは VPN クライアント接続マネージャでリモート接続して管理することを禁止します。
CMD_RemoteDisable_Help VPN Client サービスに、localhost 以外のリモートコンピュータからコマンドライン管理ユーティリティまたは VPN クライアント接続マネージャでリモート接続して管理することを禁止します。注意: リモート管理の可否の変更の設定適用には、VPN Client サービスを再起動する必要があります。
CMD_RemoteDisable_Args RemoteDisable

View File

@ -2402,6 +2402,8 @@ STATIC17 기타 설정 (&G):
R_NO_ROUTING 라우팅 테이블의 조정 작업을 수행하지 (&R)
STATIC18 이 설정 화면의 설정은 시스템 관리자의 지시가있을 경우, 네트워크 및 보안에 대해 상세한 지식을 가지고있는 경우를 제외하고는 변경하지 마십시오.
STATIC19 VoIP/QoS 지원 기능을 사용하면 IP 전화 패킷 등의 우선 순위가 높은 패킷을 VPN에서 고속으로 전송할 수 있습니다.
STATIC20 Source IP Address:
STATIC21 Source Port Number:
R_DISABLE_QOS VoIP/QoS 지원 기능을 비활성화 (&Q)
IDOK & OK
IDCANCEL 취소
@ -6445,7 +6447,7 @@ CMD_VpnAzureGetStatus_PRINT_CONNECTED VPN Azure 클라우드 서버에 연결
CMD_VpnAzureGetStatus_PRINT_HOSTNAME VPN Azure 서비스에서 호스트 이름
# VpnAzureSetStatus 명령
# VpnAzureSetEnable 명령
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_Args VpnAzureSetEnable [yes|no]

View File

@ -479,7 +479,7 @@ NATT_MSG ** Connected with NAT traversal - might be unstable **\r\n\r\nThis VPN
# Virtual HUB Admin Options
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_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_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.
@ -2390,6 +2390,8 @@ STATIC17 Outras confi&gurações:
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.
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
IDOK &OK
IDCANCEL Cancelar
@ -4441,7 +4443,7 @@ CMD_Debug_Msg2 The debug command has executed.\nResults: \"%S\"
# Crash command
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_Args Crash [sim]
CMD_Crash_Args Crash [yes]
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_Confirm Do you really want to crash the VPN Server?\nInput "yes" if it is ok:

View File

@ -2421,6 +2421,8 @@ STATIC17 Другие конфигурации:
R_NO_ROUTING Не вносить изменения в таблицу маршрутизации
STATIC18 Если у вас нет опыта работы с сетью и безопасностью, то оставьте настройки в этом окне по умолчанию.
STATIC19 Функции VoIP/QoS обрабатывают пакеты (например VoIP) с высоким приоритетом для более быстрой передачи.
STATIC20 Source IP Address:
STATIC21 Source Port Number:
R_DISABLE_QOS Отключить функции VoIP / QoS
IDOK &OK
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
# VpnAzureSetStatus command
# VpnAzureSetEnable command
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_Args VpnAzureSetEnable [yes|no]

View File

@ -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_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_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)
STATIC18 除非你得到系統管理員的同意或者你有網路和安全方面的專業知識,否則請保持此對話方塊的默認設置。
STATIC19 VoIP / QoS 功能可以處理高優先級封包,如 IP 電話封包 (VoIP) 可以被更快的傳輸。
STATIC20 Source IP Address:
STATIC21 Source Port Number:
R_DISABLE_QOS 禁用 VoIP / &QoS 功能
IDOK 確定(&O)
IDCANCEL 取消
@ -6477,7 +6480,7 @@ CMD_VpnAzureGetStatus_PRINT_CONNECTED 至 VPN Azure 雲伺服器的連接建立
CMD_VpnAzureGetStatus_PRINT_HOSTNAME 在 VPN Azure 服務上的本 VPN 伺服器的主機名稱
# VpnAzureSetStatus command
# VpnAzureSetEnable command
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_Args VpnAzureSetEnable [yes|no]

View File

@ -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="#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="#getddnsinternetsettng">GetDDnsInternetSettng - 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="#getddnsinternetsetting">GetDDnsInternetSetting - Get 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="#getvgsconfig">GetVgsConfig - Get the VPN Gate Server Configuration</a></li>
</ul>
@ -305,7 +305,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;ServerBuildInt_u32&quot;: 0,
&quot;ServerHostName_str&quot;: &quot;serverhostname&quot;,
&quot;ServerType_u32&quot;: 0,
&quot;ServerBuildDate_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ServerBuildDate_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;ServerFamilyName_str&quot;: &quot;serverfamilyname&quot;,
&quot;OsType_u32&quot;: 0,
&quot;OsServicePack_u32&quot;: 0,
@ -460,9 +460,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Send.BroadcastCount_u64&quot;: 0,
&quot;Send.UnicastBytes_u64&quot;: 0,
&quot;Send.UnicastCount_u64&quot;: 0,
&quot;CurrentTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CurrentTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;CurrentTick_u64&quot;: 0,
&quot;StartTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;StartTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;TotalMemory_u64&quot;: 0,
&quot;UsedMemory_u64&quot;: 0,
&quot;FreeMemory_u64&quot;: 0,
@ -1136,7 +1136,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;result&quot;: {
&quot;Id_u32&quot;: 0,
&quot;Controller_bool&quot;: false,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Ip_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;Point_u32&quot;: 0,
@ -1283,7 +1283,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
{
&quot;Id_u32&quot;: 0,
&quot;Controller_bool&quot;: false,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Ip_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;Point_u32&quot;: 0,
@ -1296,7 +1296,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
{
&quot;Id_u32&quot;: 0,
&quot;Controller_bool&quot;: false,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Ip_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;Point_u32&quot;: 0,
@ -1309,7 +1309,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
{
&quot;Id_u32&quot;: 0,
&quot;Controller_bool&quot;: false,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Ip_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;Point_u32&quot;: 0,
@ -1422,9 +1422,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Port_u32&quot;: 0,
&quot;Online_bool&quot;: false,
&quot;LastError_u32&quot;: 0,
&quot;StartedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;FirstConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CurrentConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;StartedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;FirstConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;CurrentConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;NumTry_u32&quot;: 0,
&quot;NumConnected_u32&quot;: 0,
&quot;NumFailed_u32&quot;: 0
@ -1918,9 +1918,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;NumSessions_u32&quot;: 0,
&quot;NumMacTables_u32&quot;: 0,
&quot;NumIpTables_u32&quot;: 0,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;NumLogin_u32&quot;: 0,
&quot;IsTrafficFilled_bool&quot;: false,
&quot;Ex.Recv.BroadcastBytes_u64&quot;: 0,
@ -1941,9 +1941,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;NumSessions_u32&quot;: 0,
&quot;NumMacTables_u32&quot;: 0,
&quot;NumIpTables_u32&quot;: 0,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;NumLogin_u32&quot;: 0,
&quot;IsTrafficFilled_bool&quot;: false,
&quot;Ex.Recv.BroadcastBytes_u64&quot;: 0,
@ -1964,9 +1964,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;NumSessions_u32&quot;: 0,
&quot;NumMacTables_u32&quot;: 0,
&quot;NumIpTables_u32&quot;: 0,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;NumLogin_u32&quot;: 0,
&quot;IsTrafficFilled_bool&quot;: false,
&quot;Ex.Recv.BroadcastBytes_u64&quot;: 0,
@ -2309,7 +2309,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;Ip_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Port_u32&quot;: 0,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Type_u32&quot;: 0
},
{
@ -2317,7 +2317,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;Ip_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Port_u32&quot;: 0,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Type_u32&quot;: 0
},
{
@ -2325,7 +2325,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;Ip_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Port_u32&quot;: 0,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Type_u32&quot;: 0
}
]
@ -2450,7 +2450,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;Ip_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Port_u32&quot;: 0,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;ServerStr_str&quot;: &quot;serverstr&quot;,
&quot;ServerVer_u32&quot;: 0,
&quot;ServerBuild_u32&quot;: 0,
@ -2620,9 +2620,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Send.UnicastBytes_u64&quot;: 0,
&quot;Send.UnicastCount_u64&quot;: 0,
&quot;SecureNATEnabled_bool&quot;: false,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;NumLogin_u32&quot;: 0
}
}
@ -2992,19 +2992,19 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Key_u32&quot;: 0,
&quot;SubjectName_utf&quot;: &quot;subjectname&quot;,
&quot;IssuerName_utf&quot;: &quot;issuername&quot;,
&quot;Expires_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;Expires_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
},
{
&quot;Key_u32&quot;: 0,
&quot;SubjectName_utf&quot;: &quot;subjectname&quot;,
&quot;IssuerName_utf&quot;: &quot;issuername&quot;,
&quot;Expires_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;Expires_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
},
{
&quot;Key_u32&quot;: 0,
&quot;SubjectName_utf&quot;: &quot;subjectname&quot;,
&quot;IssuerName_utf&quot;: &quot;issuername&quot;,
&quot;Expires_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;Expires_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
}
]
}
@ -4348,7 +4348,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Online_bool&quot;: false,
&quot;Connected_bool&quot;: false,
&quot;LastError_u32&quot;: 0,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;TargetHubName_str&quot;: &quot;targethubname&quot;
},
@ -4357,7 +4357,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Online_bool&quot;: false,
&quot;Connected_bool&quot;: false,
&quot;LastError_u32&quot;: 0,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;TargetHubName_str&quot;: &quot;targethubname&quot;
},
@ -4366,7 +4366,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Online_bool&quot;: false,
&quot;Connected_bool&quot;: false,
&quot;LastError_u32&quot;: 0,
&quot;ConnectedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ConnectedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Hostname_str&quot;: &quot;hostname&quot;,
&quot;TargetHubName_str&quot;: &quot;targethubname&quot;
}
@ -4668,9 +4668,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;ServerProductBuild_u32&quot;: 0,
&quot;ServerX_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;ClientX_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;StartTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;FirstConnectionEstablisiedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CurrentConnectionEstablishTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;StartTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;FirstConnectionEstablisiedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;CurrentConnectionEstablishTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;NumConnectionsEatablished_u32&quot;: 0,
&quot;HalfConnection_bool&quot;: false,
&quot;QoS_bool&quot;: false,
@ -5996,7 +5996,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Name_str&quot;: &quot;name&quot;,
&quot;Realname_utf&quot;: &quot;realname&quot;,
&quot;Note_utf&quot;: &quot;note&quot;,
&quot;ExpireTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;AuthType_u32&quot;: 0,
&quot;Auth_Password_str&quot;: &quot;auth_password&quot;,
&quot;UserX_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
@ -6057,9 +6057,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;GroupName_str&quot;: &quot;groupname&quot;,
&quot;Realname_utf&quot;: &quot;realname&quot;,
&quot;Note_utf&quot;: &quot;note&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;AuthType_u32&quot;: 0,
&quot;Auth_Password_str&quot;: &quot;auth_password&quot;,
&quot;UserX_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
@ -6467,7 +6467,7 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;GroupName_str&quot;: &quot;groupname&quot;,
&quot;Realname_utf&quot;: &quot;realname&quot;,
&quot;Note_utf&quot;: &quot;note&quot;,
&quot;ExpireTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;AuthType_u32&quot;: 0,
&quot;Auth_Password_str&quot;: &quot;auth_password&quot;,
&quot;UserX_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
@ -6528,9 +6528,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;GroupName_str&quot;: &quot;groupname&quot;,
&quot;Realname_utf&quot;: &quot;realname&quot;,
&quot;Note_utf&quot;: &quot;note&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;AuthType_u32&quot;: 0,
&quot;Auth_Password_str&quot;: &quot;auth_password&quot;,
&quot;UserX_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
@ -6948,9 +6948,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;GroupName_str&quot;: &quot;groupname&quot;,
&quot;Realname_utf&quot;: &quot;realname&quot;,
&quot;Note_utf&quot;: &quot;note&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;AuthType_u32&quot;: 0,
&quot;Auth_Password_str&quot;: &quot;auth_password&quot;,
&quot;UserX_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
@ -7419,11 +7419,11 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Note_utf&quot;: &quot;note&quot;,
&quot;AuthType_u32&quot;: 0,
&quot;NumLogin_u32&quot;: 0,
&quot;LastLoginTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;DenyAccess_bool&quot;: false,
&quot;IsTrafficFilled_bool&quot;: false,
&quot;IsExpiresFilled_bool&quot;: false,
&quot;Expires_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;Expires_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Ex.Recv.BroadcastBytes_u64&quot;: 0,
&quot;Ex.Recv.BroadcastCount_u64&quot;: 0,
&quot;Ex.Recv.UnicastBytes_u64&quot;: 0,
@ -7440,11 +7440,11 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Note_utf&quot;: &quot;note&quot;,
&quot;AuthType_u32&quot;: 0,
&quot;NumLogin_u32&quot;: 0,
&quot;LastLoginTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;DenyAccess_bool&quot;: false,
&quot;IsTrafficFilled_bool&quot;: false,
&quot;IsExpiresFilled_bool&quot;: false,
&quot;Expires_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;Expires_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Ex.Recv.BroadcastBytes_u64&quot;: 0,
&quot;Ex.Recv.BroadcastCount_u64&quot;: 0,
&quot;Ex.Recv.UnicastBytes_u64&quot;: 0,
@ -7461,11 +7461,11 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Note_utf&quot;: &quot;note&quot;,
&quot;AuthType_u32&quot;: 0,
&quot;NumLogin_u32&quot;: 0,
&quot;LastLoginTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastLoginTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;DenyAccess_bool&quot;: false,
&quot;IsTrafficFilled_bool&quot;: false,
&quot;IsExpiresFilled_bool&quot;: false,
&quot;Expires_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;Expires_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;Ex.Recv.BroadcastBytes_u64&quot;: 0,
&quot;Ex.Recv.BroadcastCount_u64&quot;: 0,
&quot;Ex.Recv.UnicastBytes_u64&quot;: 0,
@ -8907,8 +8907,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Client_MonitorMode_bool&quot;: false,
&quot;VLanId_u32&quot;: 0,
&quot;UniqueId_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
},
{
&quot;Name_str&quot;: &quot;name&quot;,
@ -8929,8 +8929,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Client_MonitorMode_bool&quot;: false,
&quot;VLanId_u32&quot;: 0,
&quot;UniqueId_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
},
{
&quot;Name_str&quot;: &quot;name&quot;,
@ -8951,8 +8951,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Client_MonitorMode_bool&quot;: false,
&quot;VLanId_u32&quot;: 0,
&quot;UniqueId_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
}
]
}
@ -9117,9 +9117,9 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;ServerProductName_str&quot;: &quot;serverproductname&quot;,
&quot;ServerProductVer_u32&quot;: 0,
&quot;ServerProductBuild_u32&quot;: 0,
&quot;StartTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;FirstConnectionEstablisiedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CurrentConnectionEstablishTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;StartTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;FirstConnectionEstablisiedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;CurrentConnectionEstablishTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;NumConnectionsEatablished_u32&quot;: 0,
&quot;HalfConnection_bool&quot;: false,
&quot;QoS_bool&quot;: false,
@ -9496,8 +9496,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Key_u32&quot;: 0,
&quot;SessionName_str&quot;: &quot;sessionname&quot;,
&quot;MacAddress_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;RemoteItem_bool&quot;: false,
&quot;RemoteHostname_str&quot;: &quot;remotehostname&quot;,
&quot;VlanId_u32&quot;: 0
@ -9506,8 +9506,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Key_u32&quot;: 0,
&quot;SessionName_str&quot;: &quot;sessionname&quot;,
&quot;MacAddress_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;RemoteItem_bool&quot;: false,
&quot;RemoteHostname_str&quot;: &quot;remotehostname&quot;,
&quot;VlanId_u32&quot;: 0
@ -9516,8 +9516,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;Key_u32&quot;: 0,
&quot;SessionName_str&quot;: &quot;sessionname&quot;,
&quot;MacAddress_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;RemoteItem_bool&quot;: false,
&quot;RemoteHostname_str&quot;: &quot;remotehostname&quot;,
&quot;VlanId_u32&quot;: 0
@ -9663,8 +9663,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;SessionName_str&quot;: &quot;sessionname&quot;,
&quot;IpAddress_ip&quot;: &quot;192.168.0.1&quot;,
&quot;DhcpAllocated_bool&quot;: false,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;RemoteItem_bool&quot;: false,
&quot;RemoteHostname_str&quot;: &quot;remotehostname&quot;
},
@ -9673,8 +9673,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;SessionName_str&quot;: &quot;sessionname&quot;,
&quot;IpAddress_ip&quot;: &quot;192.168.0.1&quot;,
&quot;DhcpAllocated_bool&quot;: false,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;RemoteItem_bool&quot;: false,
&quot;RemoteHostname_str&quot;: &quot;remotehostname&quot;
},
@ -9683,8 +9683,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;SessionName_str&quot;: &quot;sessionname&quot;,
&quot;IpAddress_ip&quot;: &quot;192.168.0.1&quot;,
&quot;DhcpAllocated_bool&quot;: false,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;RemoteItem_bool&quot;: false,
&quot;RemoteHostname_str&quot;: &quot;remotehostname&quot;
}
@ -10376,8 +10376,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;DestIp_ip&quot;: &quot;192.168.0.1&quot;,
&quot;DestHost_str&quot;: &quot;desthost&quot;,
&quot;DestPort_u32&quot;: 0,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;SendSize_u64&quot;: 0,
&quot;RecvSize_u64&quot;: 0,
&quot;TcpStatus_u32&quot;: 0
@ -10391,8 +10391,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;DestIp_ip&quot;: &quot;192.168.0.1&quot;,
&quot;DestHost_str&quot;: &quot;desthost&quot;,
&quot;DestPort_u32&quot;: 0,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;SendSize_u64&quot;: 0,
&quot;RecvSize_u64&quot;: 0,
&quot;TcpStatus_u32&quot;: 0
@ -10406,8 +10406,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;DestIp_ip&quot;: &quot;192.168.0.1&quot;,
&quot;DestHost_str&quot;: &quot;desthost&quot;,
&quot;DestPort_u32&quot;: 0,
&quot;CreatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;CreatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;LastCommTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;SendSize_u64&quot;: 0,
&quot;RecvSize_u64&quot;: 0,
&quot;TcpStatus_u32&quot;: 0
@ -10527,8 +10527,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;DhcpTable&quot;: [
{
&quot;Id_u32&quot;: 0,
&quot;LeasedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LeasedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;MacAddress_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;IpAddress_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Mask_u32&quot;: 0,
@ -10536,8 +10536,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
},
{
&quot;Id_u32&quot;: 0,
&quot;LeasedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LeasedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;MacAddress_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;IpAddress_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Mask_u32&quot;: 0,
@ -10545,8 +10545,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
},
{
&quot;Id_u32&quot;: 0,
&quot;LeasedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;,
&quot;LeasedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;ExpireTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;,
&quot;MacAddress_bin&quot;: &quot;SGVsbG8gV29ybGQ=&quot;,
&quot;IpAddress_ip&quot;: &quot;192.168.0.1&quot;,
&quot;Mask_u32&quot;: 0,
@ -13090,19 +13090,19 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
&quot;ServerName_str&quot;: &quot;servername&quot;,
&quot;FilePath_str&quot;: &quot;filepath&quot;,
&quot;FileSize_u32&quot;: 0,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
},
{
&quot;ServerName_str&quot;: &quot;servername&quot;,
&quot;FilePath_str&quot;: &quot;filepath&quot;,
&quot;FileSize_u32&quot;: 0,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
},
{
&quot;ServerName_str&quot;: &quot;servername&quot;,
&quot;FilePath_str&quot;: &quot;filepath&quot;,
&quot;FileSize_u32&quot;: 0,
&quot;UpdatedTime_dt&quot;: &quot;2020-08-01T12:24:36.123&quot;
&quot;UpdatedTime_dt&quot;: &quot;2024-08-01T12:24:36.123&quot;
}
]
}
@ -14508,15 +14508,15 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
</tbody>
</table>
<hr />
<p><a id="getddnsinternetsettng"></a></p>
<h2 id="getddnsinternetsettng-rpc-api-get-the-proxy-settings-for-connecting-to-the-ddns-server">&quot;GetDDnsInternetSettng&quot; RPC API - Get the Proxy Settings for Connecting to the DDNS server</h2>
<p><a id="getddnsinternetsetting"></a></p>
<h2 id="getddnsinternetsetting-rpc-api-get-the-proxy-settings-for-connecting-to-the-ddns-server">&quot;GetDDnsInternetSetting&quot; RPC API - Get the Proxy Settings for Connecting to the DDNS server</h2>
<h3 id="description-131">Description</h3>
<p>Get the Proxy Settings for Connecting to the DDNS server.</p>
<h3 id="input-json-rpc-format-131">Input JSON-RPC Format</h3>
<pre><code class="language-json">{
&quot;jsonrpc&quot;: &quot;2.0&quot;,
&quot;id&quot;: &quot;rpc_call_id&quot;,
&quot;method&quot;: &quot;GetDDnsInternetSettng&quot;,
&quot;method&quot;: &quot;GetDDnsInternetSetting&quot;,
&quot;params&quot;: {}
}
</code></pre>
@ -14571,15 +14571,15 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
</tbody>
</table>
<hr />
<p><a id="setddnsinternetsettng"></a></p>
<h2 id="setddnsinternetsettng-rpc-api-set-the-proxy-settings-for-connecting-to-the-ddns-server">&quot;SetDDnsInternetSettng&quot; RPC API - Set the Proxy Settings for Connecting to the DDNS server</h2>
<p><a id="setddnsinternetsetting"></a></p>
<h2 id="setddnsinternetsetting-rpc-api-set-the-proxy-settings-for-connecting-to-the-ddns-server">&quot;SetDDnsInternetSetting&quot; RPC API - Set the Proxy Settings for Connecting to the DDNS server</h2>
<h3 id="description-132">Description</h3>
<p>Set the Proxy Settings for Connecting to the DDNS server.</p>
<h3 id="input-json-rpc-format-132">Input JSON-RPC Format</h3>
<pre><code class="language-json">{
&quot;jsonrpc&quot;: &quot;2.0&quot;,
&quot;id&quot;: &quot;rpc_call_id&quot;,
&quot;method&quot;: &quot;SetDDnsInternetSettng&quot;,
&quot;method&quot;: &quot;SetDDnsInternetSetting&quot;,
&quot;params&quot;: {
&quot;ProxyType_u32&quot;: 0,
&quot;ProxyHostName_str&quot;: &quot;proxyhostname&quot;,
@ -14640,8 +14640,8 @@ All APIs are based on the <a href="https://www.jsonrpc.org/specification">JSON-R
</tbody>
</table>
<hr />
<p>Automatically generated at 2019-07-10 14:36:11 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>
<p>Automatically generated at 2023-05-10 14:43:37 by vpnserver-jsonrpc-codegen.<br />
Copyright (c) 2014-2023 <a href="https://www.softether.org/">SoftEther VPN Project</a> under the Apache License 2.0.</p>
</article>
</body>

File diff suppressed because one or more lines are too long

View File

@ -2,6 +2,7 @@
#include "Dialog.h"
#include <stdio.h>
#include <string.h>
void ShowUsage()
{