mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2024-08-26 06:23:00 +03:00
v4.03-9408-rtm
This commit is contained in:
parent
d433e567a5
commit
749497dde0
38
AUTHORS.TXT
Normal file
38
AUTHORS.TXT
Normal file
@ -0,0 +1,38 @@
|
||||
SoftEther VPN is developed by SoftEther VPN Project at University of Tsukuba.
|
||||
http://www.softether.org/
|
||||
|
||||
AUTHORS OF SOFTETHER VPN
|
||||
------------------------
|
||||
|
||||
PROGRAMMERS:
|
||||
|
||||
- Daiyuu Nobori
|
||||
Computer Science, Graduate School of University of Tsukuba
|
||||
SoftEther Corporation
|
||||
E-mail: daiyuu-nobori [at] softether.org
|
||||
|
||||
- Tetsuo Sugiyama, Ph. D.
|
||||
SoftEther Corporation
|
||||
|
||||
- Junpei Kuwana
|
||||
Risk Engineering, Graduate School of University of Tsukuba
|
||||
SoftEther Corporation
|
||||
|
||||
- Takao Ito
|
||||
Computer Science, Graduate School of University of Tsukuba
|
||||
SoftEther Corporation
|
||||
|
||||
- Christopher Smith
|
||||
College of Information Science, University of Tsukuba
|
||||
|
||||
|
||||
WEB-SITE DESIGNER:
|
||||
|
||||
- Genya Hatakeyama
|
||||
College of Information Science, University of Tsukuba
|
||||
|
||||
|
||||
Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
Join us: http://www.tsukuba.ac.jp/english/admission/
|
||||
|
125
BUILD_UNIX.TXT
Normal file
125
BUILD_UNIX.TXT
Normal file
@ -0,0 +1,125 @@
|
||||
How to build SoftEther VPN for UNIX
|
||||
===================================
|
||||
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
You need to install the following software to build SoftEther VPN for UNIX.
|
||||
|
||||
- Linux, FreeBSD, Solaris or Mac OS X.
|
||||
- GNU Compiler Collectipon (gcc) and binary utilities.
|
||||
- GNU Make (gmake).
|
||||
- GNU C Library (glibc).
|
||||
- POSIX Threads (pthread).
|
||||
- OpenSSL (crypto, ssl).
|
||||
- libiconv.
|
||||
- readline.
|
||||
- ncurses.
|
||||
|
||||
For example, the following commands help you to install the above programs
|
||||
on Fedora or CentOS Linux:
|
||||
|
||||
$ yum -y groupinstall "Development Tools"
|
||||
$ yum -y install readline-devel ncurses-devel openssl-devel
|
||||
|
||||
|
||||
How to Build
|
||||
------------
|
||||
|
||||
To build the programs from the source code, run the following commands:
|
||||
|
||||
$ ./configure
|
||||
$ make
|
||||
|
||||
If any error occurs, please check the above requirements.
|
||||
|
||||
|
||||
How to Install SoftEther VPN Server, Bridge or Client
|
||||
-----------------------------------------------------
|
||||
|
||||
To install the vpnserver, vpnbridge and vpnclient programs into the
|
||||
/usr/bin directory, run the following as the root user:
|
||||
|
||||
# make install
|
||||
|
||||
After the installation will complete successfully:
|
||||
|
||||
- Execute 'vpnserver start' to run the SoftEther VPN Server background service.
|
||||
- Execute 'vpnbridge start' to run the SoftEther VPN Bridge background service.
|
||||
- Execute 'vpnclient start' to run the SoftEther VPN Client background service.
|
||||
- Execute 'vpncmd' to run SoftEther VPN Command-Line Utility to configure
|
||||
VPN Server, VPN Bridge or VPN Client.
|
||||
|
||||
- You can also use VPN Server/Client Manager GUI Tool on other Windows PC to
|
||||
connect to VPN services remotely.
|
||||
You can download the GUI Tools from http://www.softether-download.com/.
|
||||
|
||||
|
||||
How to Run SoftEther VPN Server for Test
|
||||
----------------------------------------
|
||||
|
||||
To start the SoftEther VPN Server background service, run the following:
|
||||
|
||||
$ bin/vpnserver/vpnserver start
|
||||
|
||||
To stop the service, run the following:
|
||||
|
||||
$ bin/vpnserver/vpnserver stop
|
||||
|
||||
To configure the running SoftEther VPN Server service,
|
||||
you can use SoftEther VPN Command Line Management Utility as following:
|
||||
|
||||
$ bin/vpncmd/vpncmd
|
||||
|
||||
Or you can also use VPN Server Manager GUI Tool on other Windows PC to
|
||||
connect to the VPN Server remotely. You can download the GUI Tool
|
||||
from http://www.softether-download.com/.
|
||||
|
||||
|
||||
How to Run SoftEther VPN Bridge for Test
|
||||
----------------------------------------
|
||||
|
||||
To start the SoftEther VPN Bridge background service, run the following:
|
||||
|
||||
$ bin/vpnbridge/vpnbridge start
|
||||
|
||||
To stop the service, run the following:
|
||||
|
||||
$ bin/vpnbridge/vpnbridge stop
|
||||
|
||||
To configure the running SoftEther VPN Bridge service,
|
||||
you can use SoftEther VPN Command Line Management Utility as following:
|
||||
|
||||
$ bin/vpncmd/vpncmd
|
||||
|
||||
Or you can also use VPN Server Manager GUI Tool on other Windows PC to
|
||||
connect to the VPN Bridge remotely. You can download the GUI Tool
|
||||
from http://www.softether-download.com/.
|
||||
|
||||
|
||||
How to Run SoftEther VPN Client for Test
|
||||
----------------------------------------
|
||||
|
||||
To start the SoftEther VPN Client background service, run the following:
|
||||
|
||||
$ bin/vpnclient/vpnclient start
|
||||
|
||||
To stop the service, run the following:
|
||||
|
||||
$ bin/vpnclient/vpnclient stop
|
||||
|
||||
To configure the running SoftEther VPN Client service,
|
||||
you can use SoftEther VPN Command Line Management Utility as following:
|
||||
|
||||
$ bin/vpncmd/vpncmd
|
||||
|
||||
Or you can also use VPN Client Manager GUI Tool on other Windows PC to
|
||||
connect to the VPN Client remotely. You can download the GUI Tool
|
||||
from http://www.softether-download.com/.
|
||||
|
||||
|
||||
************************************
|
||||
Thank You Using SoftEther VPN !
|
||||
By SoftEther VPN Open-Source Project
|
||||
http://www.softether.org/
|
42
BUILD_WINDOWS.TXT
Normal file
42
BUILD_WINDOWS.TXT
Normal file
@ -0,0 +1,42 @@
|
||||
How to build SoftEther VPN for Windows
|
||||
======================================
|
||||
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
You need to install the following software to build SoftEther VPN for Windows.
|
||||
|
||||
- Microsoft Windows XP, Vista, 7, 8 or later.
|
||||
- Microsoft Visual Studio 2008.
|
||||
|
||||
* Note:
|
||||
Visual Studio 2008 is required to build SoftEther VPN on Windows.
|
||||
Visual Studio 2010, 2012 or 2013 is currently not supported.
|
||||
Visual Studio 2008 Express Edition is not supported.
|
||||
Standard Edition, Professional Edition, Team System or Team Suite is
|
||||
required.
|
||||
|
||||
|
||||
Full Build Instructions
|
||||
-----------------------
|
||||
|
||||
The following steps will build all SoftEther VPN program files, and also build
|
||||
the installer packages of SoftEther VPN. It is very easy.
|
||||
|
||||
1. Run the "BuildAll.cmd" batch file in the "src" directory.
|
||||
2. Wait until the building process will complete.
|
||||
3. The built files are stored on the "output" directory.
|
||||
|
||||
|
||||
Partly Build, Debug or Development Instructions on Visual Studio 2008
|
||||
---------------------------------------------------------------------
|
||||
|
||||
If you are a programmer, you can open the SoftEther VPN solution file
|
||||
with Visual Studio 2008 to customize. Open "src\SEVPN.sln" and enjoy it.
|
||||
|
||||
|
||||
************************************
|
||||
Thank You Using SoftEther VPN !
|
||||
By SoftEther VPN Open-Source Project
|
||||
http://www.softether.org/
|
2350
LICENSE.TXT
Normal file
2350
LICENSE.TXT
Normal file
File diff suppressed because it is too large
Load Diff
189
README
Normal file
189
README
Normal file
@ -0,0 +1,189 @@
|
||||
SoftEther VPN - An Open-Source Cross-platform Multi-protocol VPN Program
|
||||
http://www.softether.org/
|
||||
|
||||
We use GitHub as the primary official SoftEther VPN repository:
|
||||
https://github.com/SoftEtherVPN/SoftEtherVPN/
|
||||
|
||||
Source code packages (.zip and .tar.gz) and binary files are also available:
|
||||
http://www.softether-download.com/
|
||||
|
||||
Copyright (c) 2012-2014 SoftEther Project at University of Tsukuba, Japan.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License version 2
|
||||
as published by the Free Software Foundation.
|
||||
|
||||
SoftEther VPN ("SoftEther" means "Software Ethernet") is one of the
|
||||
world's most powerful and easy-to-use multi-protocol VPN software.
|
||||
|
||||
SoftEther VPN runs on Windows, Linux, Mac, FreeBSD and Solaris.
|
||||
|
||||
SoftEther VPN supports most of widely-used VPN protocols
|
||||
including SSL-VPN, OpenVPN, IPsec, L2TP, MS-SSTP, L2TPv3 and EtherIP
|
||||
by the single SoftEther VPN Server program.
|
||||
|
||||
More details on http://www.softether.org/.
|
||||
|
||||
|
||||
SOFTETHER VPN ADVANTAGES
|
||||
------------------------
|
||||
|
||||
- Supporting all popular VPN protocols by the single VPN server:
|
||||
SSL-VPN (HTTPS)
|
||||
OpenVPN
|
||||
IPsec
|
||||
L2TP
|
||||
MS-SSTP
|
||||
L2TPv3
|
||||
EtherIP
|
||||
- Free and open-source software.
|
||||
- Easy to establish both remote-access and site-to-site VPN.
|
||||
- SSL-VPN Tunneling on HTTPS to pass through NATs and firewalls.
|
||||
- Revolutionary VPN over ICMP and VPN over DNS features.
|
||||
- Resistance to highly-restricted firewall.
|
||||
- Ethernet-bridging (L2) and IP-routing (L3) over VPN.
|
||||
- Embedded dynamic-DNS and NAT-traversal so that no static nor
|
||||
fixed IP address is required.
|
||||
- AES 256-bit and RSA 4096-bit encryptions.
|
||||
- Sufficient security features such as logging and firewall inner
|
||||
VPN tunnel.
|
||||
- 1Gbps-class high-speed throughput performance with low memory and
|
||||
CPU usage.
|
||||
- Windows, Linux, Mac, Android, iPhone, iPad and Windows Phone are
|
||||
supported.
|
||||
- The OpenVPN clone function supports legacy OpenVPN clients.
|
||||
- IPv4 / IPv6 dual-stack.
|
||||
- The VPN server runs on Windows, Linux, FreeBSD, Solaris and Mac OS X.
|
||||
- Configure All settings on GUI.
|
||||
- Multi-languages (English, Japanese and Simplified-Chinese).
|
||||
- More details at http://www.softether.org/.
|
||||
|
||||
|
||||
GETTING STARTED
|
||||
---------------
|
||||
|
||||
Visit the SoftEther VPN Project official web site at first:
|
||||
http://www.softether.org/
|
||||
|
||||
If you are not a developer, it is recommended to download the binary
|
||||
installers from:
|
||||
http://www.softether-download.com/
|
||||
|
||||
To build from the source,
|
||||
see "BUILD_UNIX.TXT" or "BUILD_WINDOWS.TXT" files.
|
||||
|
||||
|
||||
HOW TO DOWNLOAD THE LATEST SOURCE CODE PACKAGE
|
||||
----------------------------------------------
|
||||
|
||||
Go to http://www.softether-download.com/ and you can find the latest
|
||||
source-code package file in both .ZIP and .TAR.GZ format.
|
||||
|
||||
This is the easiest way to obtain the source code of SoftEther VPN.
|
||||
|
||||
|
||||
HOW TO GET THE LATEST SOURCE CODE TREE FOR DEVELOPERS
|
||||
-----------------------------------------------------
|
||||
|
||||
If you are an open-source developer, visit our GitHub repository:
|
||||
https://github.com/SoftEtherVPN/SoftEtherVPN/
|
||||
|
||||
You can download the up-to-date source-code tree of SoftEther VPN
|
||||
from GitHub. You may make your own fork project from our project.
|
||||
|
||||
The download and build instruction is following:
|
||||
|
||||
$ git clone https://github.com/SoftEtherVPN/SoftEtherVPN.git
|
||||
$ cd SoftEtherVPN
|
||||
$ make
|
||||
$ make install
|
||||
|
||||
|
||||
TO CIRCUMVENT YOUR GOVERNMENT'S FIREWALL RESTRICTION
|
||||
----------------------------------------------------
|
||||
|
||||
Because SoftEther VPN is overly strong tool to build a VPN tunnel,
|
||||
some censorship governments want to block your access to the source code
|
||||
of SoftEther VPN, by abusing their censorship firewalls.
|
||||
|
||||
To circumvent your censor's unjust restriction,
|
||||
SoftEther VPN Project distributes the up-to-date source-code
|
||||
on all the following open-source repositories:
|
||||
|
||||
- GitHub
|
||||
https://github.com/SoftEtherVPN/SoftEtherVPN/
|
||||
|
||||
- SourceForge
|
||||
https://sourceforge.net/projects/softethervpn/
|
||||
|
||||
- Google Code
|
||||
https://code.google.com/p/softether/
|
||||
|
||||
|
||||
To fetch the source code from GitHub:
|
||||
$ git clone https://github.com/SoftEtherVPN/SoftEtherVPN.git
|
||||
|
||||
To fetch the source code from SourceForge:
|
||||
$ git clone http://git.code.sf.net/p/softethervpn/code
|
||||
- or -
|
||||
$ git clone git://git.code.sf.net/p/softethervpn/code
|
||||
|
||||
To fetch the source code from Google Code:
|
||||
$ git clone https://code.google.com/p/softether/
|
||||
|
||||
We hope that you can reach one of the above URLs at least!
|
||||
|
||||
|
||||
DEAR SECURITY EXPERTS
|
||||
---------------------
|
||||
|
||||
If you find a bug or a security vulnerability please kindly inform us
|
||||
about the problem immediately so that we can fix the security problem
|
||||
to protect a lot of users around the world as soon as possible.
|
||||
|
||||
Our e-mail address for security reports is:
|
||||
softether-vpn-security [at] softether.org
|
||||
|
||||
Please note that the above e-mail address is not a technical support
|
||||
inquiry address. If you need technical assistance, please visit
|
||||
http://www.softether.org/ and ask your question on the users forum.
|
||||
|
||||
|
||||
DISCLAIMER
|
||||
----------
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
|
||||
USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
COUNTRIES MIGHT BE RESTRICTED.
|
||||
|
||||
|
||||
ADVERTISEMENT
|
||||
-------------
|
||||
|
||||
SoftEther VPN is developed by SoftEther VPN Project at University of Tsukuba.
|
||||
Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
Join us: http://www.tsukuba.ac.jp/english/admission/
|
||||
|
189
README.TXT
Normal file
189
README.TXT
Normal file
@ -0,0 +1,189 @@
|
||||
SoftEther VPN - An Open-Source Cross-platform Multi-protocol VPN Program
|
||||
http://www.softether.org/
|
||||
|
||||
We use GitHub as the primary official SoftEther VPN repository:
|
||||
https://github.com/SoftEtherVPN/SoftEtherVPN/
|
||||
|
||||
Source code packages (.zip and .tar.gz) and binary files are also available:
|
||||
http://www.softether-download.com/
|
||||
|
||||
Copyright (c) 2012-2014 SoftEther Project at University of Tsukuba, Japan.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License version 2
|
||||
as published by the Free Software Foundation.
|
||||
|
||||
SoftEther VPN ("SoftEther" means "Software Ethernet") is one of the
|
||||
world's most powerful and easy-to-use multi-protocol VPN software.
|
||||
|
||||
SoftEther VPN runs on Windows, Linux, Mac, FreeBSD and Solaris.
|
||||
|
||||
SoftEther VPN supports most of widely-used VPN protocols
|
||||
including SSL-VPN, OpenVPN, IPsec, L2TP, MS-SSTP, L2TPv3 and EtherIP
|
||||
by the single SoftEther VPN Server program.
|
||||
|
||||
More details on http://www.softether.org/.
|
||||
|
||||
|
||||
SOFTETHER VPN ADVANTAGES
|
||||
------------------------
|
||||
|
||||
- Supporting all popular VPN protocols by the single VPN server:
|
||||
SSL-VPN (HTTPS)
|
||||
OpenVPN
|
||||
IPsec
|
||||
L2TP
|
||||
MS-SSTP
|
||||
L2TPv3
|
||||
EtherIP
|
||||
- Free and open-source software.
|
||||
- Easy to establish both remote-access and site-to-site VPN.
|
||||
- SSL-VPN Tunneling on HTTPS to pass through NATs and firewalls.
|
||||
- Revolutionary VPN over ICMP and VPN over DNS features.
|
||||
- Resistance to highly-restricted firewall.
|
||||
- Ethernet-bridging (L2) and IP-routing (L3) over VPN.
|
||||
- Embedded dynamic-DNS and NAT-traversal so that no static nor
|
||||
fixed IP address is required.
|
||||
- AES 256-bit and RSA 4096-bit encryptions.
|
||||
- Sufficient security features such as logging and firewall inner
|
||||
VPN tunnel.
|
||||
- 1Gbps-class high-speed throughput performance with low memory and
|
||||
CPU usage.
|
||||
- Windows, Linux, Mac, Android, iPhone, iPad and Windows Phone are
|
||||
supported.
|
||||
- The OpenVPN clone function supports legacy OpenVPN clients.
|
||||
- IPv4 / IPv6 dual-stack.
|
||||
- The VPN server runs on Windows, Linux, FreeBSD, Solaris and Mac OS X.
|
||||
- Configure All settings on GUI.
|
||||
- Multi-languages (English, Japanese and Simplified-Chinese).
|
||||
- More details at http://www.softether.org/.
|
||||
|
||||
|
||||
GETTING STARTED
|
||||
---------------
|
||||
|
||||
Visit the SoftEther VPN Project official web site at first:
|
||||
http://www.softether.org/
|
||||
|
||||
If you are not a developer, it is recommended to download the binary
|
||||
installers from:
|
||||
http://www.softether-download.com/
|
||||
|
||||
To build from the source,
|
||||
see "BUILD_UNIX.TXT" or "BUILD_WINDOWS.TXT" files.
|
||||
|
||||
|
||||
HOW TO DOWNLOAD THE LATEST SOURCE CODE PACKAGE
|
||||
----------------------------------------------
|
||||
|
||||
Go to http://www.softether-download.com/ and you can find the latest
|
||||
source-code package file in both .ZIP and .TAR.GZ format.
|
||||
|
||||
This is the easiest way to obtain the source code of SoftEther VPN.
|
||||
|
||||
|
||||
HOW TO GET THE LATEST SOURCE CODE TREE FOR DEVELOPERS
|
||||
-----------------------------------------------------
|
||||
|
||||
If you are an open-source developer, visit our GitHub repository:
|
||||
https://github.com/SoftEtherVPN/SoftEtherVPN/
|
||||
|
||||
You can download the up-to-date source-code tree of SoftEther VPN
|
||||
from GitHub. You may make your own fork project from our project.
|
||||
|
||||
The download and build instruction is following:
|
||||
|
||||
$ git clone https://github.com/SoftEtherVPN/SoftEtherVPN.git
|
||||
$ cd SoftEtherVPN
|
||||
$ make
|
||||
$ make install
|
||||
|
||||
|
||||
TO CIRCUMVENT YOUR GOVERNMENT'S FIREWALL RESTRICTION
|
||||
----------------------------------------------------
|
||||
|
||||
Because SoftEther VPN is overly strong tool to build a VPN tunnel,
|
||||
some censorship governments want to block your access to the source code
|
||||
of SoftEther VPN, by abusing their censorship firewalls.
|
||||
|
||||
To circumvent your censor's unjust restriction,
|
||||
SoftEther VPN Project distributes the up-to-date source-code
|
||||
on all the following open-source repositories:
|
||||
|
||||
- GitHub
|
||||
https://github.com/SoftEtherVPN/SoftEtherVPN/
|
||||
|
||||
- SourceForge
|
||||
https://sourceforge.net/projects/softethervpn/
|
||||
|
||||
- Google Code
|
||||
https://code.google.com/p/softether/
|
||||
|
||||
|
||||
To fetch the source code from GitHub:
|
||||
$ git clone https://github.com/SoftEtherVPN/SoftEtherVPN.git
|
||||
|
||||
To fetch the source code from SourceForge:
|
||||
$ git clone http://git.code.sf.net/p/softethervpn/code
|
||||
- or -
|
||||
$ git clone git://git.code.sf.net/p/softethervpn/code
|
||||
|
||||
To fetch the source code from Google Code:
|
||||
$ git clone https://code.google.com/p/softether/
|
||||
|
||||
We hope that you can reach one of the above URLs at least!
|
||||
|
||||
|
||||
DEAR SECURITY EXPERTS
|
||||
---------------------
|
||||
|
||||
If you find a bug or a security vulnerability please kindly inform us
|
||||
about the problem immediately so that we can fix the security problem
|
||||
to protect a lot of users around the world as soon as possible.
|
||||
|
||||
Our e-mail address for security reports is:
|
||||
softether-vpn-security [at] softether.org
|
||||
|
||||
Please note that the above e-mail address is not a technical support
|
||||
inquiry address. If you need technical assistance, please visit
|
||||
http://www.softether.org/ and ask your question on the users forum.
|
||||
|
||||
|
||||
DISCLAIMER
|
||||
----------
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
|
||||
USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
COUNTRIES MIGHT BE RESTRICTED.
|
||||
|
||||
|
||||
ADVERTISEMENT
|
||||
-------------
|
||||
|
||||
SoftEther VPN is developed by SoftEther VPN Project at University of Tsukuba.
|
||||
Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
Join us: http://www.tsukuba.ac.jp/english/admission/
|
||||
|
76
configure
vendored
Executable file
76
configure
vendored
Executable file
@ -0,0 +1,76 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo '---------------------------------------------------------------------'
|
||||
echo 'SoftEther VPN for Unix'
|
||||
echo
|
||||
echo 'Copyright (c) SoftEther VPN Project at University of Tsukuba, Japan.'
|
||||
echo 'Copyright (c) Daiyuu Nobori. All Rights Reserved.'
|
||||
echo
|
||||
echo 'This program is free software; you can redistribute it and/or'
|
||||
echo 'modify it under the terms of the GNU General Public License'
|
||||
echo 'version 2 as published by the Free Software Foundation.'
|
||||
echo '---------------------------------------------------------------------'
|
||||
echo
|
||||
|
||||
echo 'Welcome to the corner-cutting configure script !'
|
||||
echo
|
||||
echo 'Select your operating system below:'
|
||||
echo ' 1: Linux'
|
||||
echo ' 2: FreeBSD'
|
||||
echo ' 3: Solaris'
|
||||
echo ' 4: Mac OS X'
|
||||
echo
|
||||
echo -n 'Which is your operating system (1 - 4) ? : '
|
||||
read TMP
|
||||
echo
|
||||
OS=""
|
||||
if test "$TMP" = "1"
|
||||
then
|
||||
OS="linux"
|
||||
fi
|
||||
if test "$TMP" = "2"
|
||||
then
|
||||
OS="freebsd"
|
||||
fi
|
||||
if test "$TMP" = "3"
|
||||
then
|
||||
OS="solaris"
|
||||
fi
|
||||
if test "$TMP" = "4"
|
||||
then
|
||||
OS="macos"
|
||||
fi
|
||||
|
||||
if test "$OS" = ""
|
||||
then
|
||||
echo "Wrong number."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 'Select your CPU bits below:'
|
||||
echo ' 1: 32-bit'
|
||||
echo ' 2: 64-bit'
|
||||
echo
|
||||
echo -n 'Which is the type of your CPU (1 - 2) ? : '
|
||||
read TMP
|
||||
echo
|
||||
CPU=""
|
||||
if test "$TMP" = "1"
|
||||
then
|
||||
CPU="32bit"
|
||||
fi
|
||||
if test "$TMP" = "2"
|
||||
then
|
||||
CPU="64bit"
|
||||
fi
|
||||
|
||||
if test "$CPU" = ""
|
||||
then
|
||||
echo "Wrong number."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cp src/makefiles/${OS}_${CPU}.mak Makefile
|
||||
|
||||
echo "The Makefile is generated. Run 'make' to build SoftEther VPN."
|
||||
|
125
src/BUILD_UNIX.TXT
Normal file
125
src/BUILD_UNIX.TXT
Normal file
@ -0,0 +1,125 @@
|
||||
How to build SoftEther VPN for UNIX
|
||||
===================================
|
||||
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
You need to install the following software to build SoftEther VPN for UNIX.
|
||||
|
||||
- Linux, FreeBSD, Solaris or Mac OS X.
|
||||
- GNU Compiler Collectipon (gcc) and binary utilities.
|
||||
- GNU Make (gmake).
|
||||
- GNU C Library (glibc).
|
||||
- POSIX Threads (pthread).
|
||||
- OpenSSL (crypto, ssl).
|
||||
- libiconv.
|
||||
- readline.
|
||||
- ncurses.
|
||||
|
||||
For example, the following commands help you to install the above programs
|
||||
on Fedora or CentOS Linux:
|
||||
|
||||
$ yum -y groupinstall "Development Tools"
|
||||
$ yum -y install readline-devel ncurses-devel openssl-devel
|
||||
|
||||
|
||||
How to Build
|
||||
------------
|
||||
|
||||
To build the programs from the source code, run the following commands:
|
||||
|
||||
$ ./configure
|
||||
$ make
|
||||
|
||||
If any error occurs, please check the above requirements.
|
||||
|
||||
|
||||
How to Install SoftEther VPN Server, Bridge or Client
|
||||
-----------------------------------------------------
|
||||
|
||||
To install the vpnserver, vpnbridge and vpnclient programs into the
|
||||
/usr/bin directory, run the following as the root user:
|
||||
|
||||
# make install
|
||||
|
||||
After the installation will complete successfully:
|
||||
|
||||
- Execute 'vpnserver start' to run the SoftEther VPN Server background service.
|
||||
- Execute 'vpnbridge start' to run the SoftEther VPN Bridge background service.
|
||||
- Execute 'vpnclient start' to run the SoftEther VPN Client background service.
|
||||
- Execute 'vpncmd' to run SoftEther VPN Command-Line Utility to configure
|
||||
VPN Server, VPN Bridge or VPN Client.
|
||||
|
||||
- You can also use VPN Server/Client Manager GUI Tool on other Windows PC to
|
||||
connect to VPN services remotely.
|
||||
You can download the GUI Tools from http://www.softether-download.com/.
|
||||
|
||||
|
||||
How to Run SoftEther VPN Server for Test
|
||||
----------------------------------------
|
||||
|
||||
To start the SoftEther VPN Server background service, run the following:
|
||||
|
||||
$ bin/vpnserver/vpnserver start
|
||||
|
||||
To stop the service, run the following:
|
||||
|
||||
$ bin/vpnserver/vpnserver stop
|
||||
|
||||
To configure the running SoftEther VPN Server service,
|
||||
you can use SoftEther VPN Command Line Management Utility as following:
|
||||
|
||||
$ bin/vpncmd/vpncmd
|
||||
|
||||
Or you can also use VPN Server Manager GUI Tool on other Windows PC to
|
||||
connect to the VPN Server remotely. You can download the GUI Tool
|
||||
from http://www.softether-download.com/.
|
||||
|
||||
|
||||
How to Run SoftEther VPN Bridge for Test
|
||||
----------------------------------------
|
||||
|
||||
To start the SoftEther VPN Bridge background service, run the following:
|
||||
|
||||
$ bin/vpnbridge/vpnbridge start
|
||||
|
||||
To stop the service, run the following:
|
||||
|
||||
$ bin/vpnbridge/vpnbridge stop
|
||||
|
||||
To configure the running SoftEther VPN Bridge service,
|
||||
you can use SoftEther VPN Command Line Management Utility as following:
|
||||
|
||||
$ bin/vpncmd/vpncmd
|
||||
|
||||
Or you can also use VPN Server Manager GUI Tool on other Windows PC to
|
||||
connect to the VPN Bridge remotely. You can download the GUI Tool
|
||||
from http://www.softether-download.com/.
|
||||
|
||||
|
||||
How to Run SoftEther VPN Client for Test
|
||||
----------------------------------------
|
||||
|
||||
To start the SoftEther VPN Client background service, run the following:
|
||||
|
||||
$ bin/vpnclient/vpnclient start
|
||||
|
||||
To stop the service, run the following:
|
||||
|
||||
$ bin/vpnclient/vpnclient stop
|
||||
|
||||
To configure the running SoftEther VPN Client service,
|
||||
you can use SoftEther VPN Command Line Management Utility as following:
|
||||
|
||||
$ bin/vpncmd/vpncmd
|
||||
|
||||
Or you can also use VPN Client Manager GUI Tool on other Windows PC to
|
||||
connect to the VPN Client remotely. You can download the GUI Tool
|
||||
from http://www.softether-download.com/.
|
||||
|
||||
|
||||
************************************
|
||||
Thank You Using SoftEther VPN !
|
||||
By SoftEther VPN Open-Source Project
|
||||
http://www.softether.org/
|
42
src/BUILD_WINDOWS.TXT
Normal file
42
src/BUILD_WINDOWS.TXT
Normal file
@ -0,0 +1,42 @@
|
||||
How to build SoftEther VPN for Windows
|
||||
======================================
|
||||
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
You need to install the following software to build SoftEther VPN for Windows.
|
||||
|
||||
- Microsoft Windows XP, Vista, 7, 8 or later.
|
||||
- Microsoft Visual Studio 2008.
|
||||
|
||||
* Note:
|
||||
Visual Studio 2008 is required to build SoftEther VPN on Windows.
|
||||
Visual Studio 2010, 2012 or 2013 is currently not supported.
|
||||
Visual Studio 2008 Express Edition is not supported.
|
||||
Standard Edition, Professional Edition, Team System or Team Suite is
|
||||
required.
|
||||
|
||||
|
||||
Full Build Instructions
|
||||
-----------------------
|
||||
|
||||
The following steps will build all SoftEther VPN program files, and also build
|
||||
the installer packages of SoftEther VPN. It is very easy.
|
||||
|
||||
1. Run the "BuildAll.cmd" batch file in the "src" directory.
|
||||
2. Wait until the building process will complete.
|
||||
3. The built files are stored on the "output" directory.
|
||||
|
||||
|
||||
Partly Build, Debug or Development Instructions on Visual Studio 2008
|
||||
---------------------------------------------------------------------
|
||||
|
||||
If you are a programmer, you can open the SoftEther VPN solution file
|
||||
with Visual Studio 2008 to customize. Open "src\SEVPN.sln" and enjoy it.
|
||||
|
||||
|
||||
************************************
|
||||
Thank You Using SoftEther VPN !
|
||||
By SoftEther VPN Open-Source Project
|
||||
http://www.softether.org/
|
19
src/BuildAll.cmd
Normal file
19
src/BuildAll.cmd
Normal file
@ -0,0 +1,19 @@
|
||||
SETLOCAL
|
||||
SET BATCH_FILE_NAME=%0
|
||||
SET BATCH_DIR_NAME=%0\..
|
||||
SET NOW_TMP=%time:~0,2%
|
||||
SET NOW=%date:~0,4%%date:~5,2%%date:~8,2%_%NOW_TMP: =0%%time:~3,2%%time:~6,2%
|
||||
|
||||
call "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
|
||||
call "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
|
||||
echo on
|
||||
|
||||
del %BATCH_DIR_NAME%\bin\BuildUtil.exe
|
||||
|
||||
C:\windows\Microsoft.NET\Framework\v3.5\MSBuild.exe /toolsversion:3.5 /verbosity:detailed /target:Clean /property:Configuration=Debug "%BATCH_DIR_NAME%\BuildUtil\BuildUtil.csproj"
|
||||
|
||||
C:\windows\Microsoft.NET\Framework\v3.5\MSBuild.exe /toolsversion:3.5 /verbosity:detailed /target:Rebuild /property:Configuration=Debug "%BATCH_DIR_NAME%\BuildUtil\BuildUtil.csproj"
|
||||
|
||||
cmd /k "%BATCH_DIR_NAME%\bin\BuildUtil.exe /CMD:All"
|
||||
|
||||
|
BIN
src/BuildFiles/Library/Win32_Debug/libeay32.lib
Normal file
BIN
src/BuildFiles/Library/Win32_Debug/libeay32.lib
Normal file
Binary file not shown.
BIN
src/BuildFiles/Library/Win32_Debug/libintelaes.lib
Normal file
BIN
src/BuildFiles/Library/Win32_Debug/libintelaes.lib
Normal file
Binary file not shown.
BIN
src/BuildFiles/Library/Win32_Debug/ssleay32.lib
Normal file
BIN
src/BuildFiles/Library/Win32_Debug/ssleay32.lib
Normal file
Binary file not shown.
BIN
src/BuildFiles/Library/Win32_Debug/zlib.lib
Normal file
BIN
src/BuildFiles/Library/Win32_Debug/zlib.lib
Normal file
Binary file not shown.
BIN
src/BuildFiles/Library/Win32_Release/libeay32.lib
Normal file
BIN
src/BuildFiles/Library/Win32_Release/libeay32.lib
Normal file
Binary file not shown.
BIN
src/BuildFiles/Library/Win32_Release/libintelaes.lib
Normal file
BIN
src/BuildFiles/Library/Win32_Release/libintelaes.lib
Normal file
Binary file not shown.
BIN
src/BuildFiles/Library/Win32_Release/ssleay32.lib
Normal file
BIN
src/BuildFiles/Library/Win32_Release/ssleay32.lib
Normal file
Binary file not shown.
BIN
src/BuildFiles/Library/Win32_Release/zlib.lib
Normal file
BIN
src/BuildFiles/Library/Win32_Release/zlib.lib
Normal file
Binary file not shown.
BIN
src/BuildFiles/Library/x64_Debug/libeay32.lib
Normal file
BIN
src/BuildFiles/Library/x64_Debug/libeay32.lib
Normal file
Binary file not shown.
BIN
src/BuildFiles/Library/x64_Debug/libintelaes.lib
Normal file
BIN
src/BuildFiles/Library/x64_Debug/libintelaes.lib
Normal file
Binary file not shown.
BIN
src/BuildFiles/Library/x64_Debug/ssleay32.lib
Normal file
BIN
src/BuildFiles/Library/x64_Debug/ssleay32.lib
Normal file
Binary file not shown.
BIN
src/BuildFiles/Library/x64_Debug/zlib.lib
Normal file
BIN
src/BuildFiles/Library/x64_Debug/zlib.lib
Normal file
Binary file not shown.
BIN
src/BuildFiles/Library/x64_Release/libeay32.lib
Normal file
BIN
src/BuildFiles/Library/x64_Release/libeay32.lib
Normal file
Binary file not shown.
BIN
src/BuildFiles/Library/x64_Release/libintelaes.lib
Normal file
BIN
src/BuildFiles/Library/x64_Release/libintelaes.lib
Normal file
Binary file not shown.
BIN
src/BuildFiles/Library/x64_Release/ssleay32.lib
Normal file
BIN
src/BuildFiles/Library/x64_Release/ssleay32.lib
Normal file
Binary file not shown.
BIN
src/BuildFiles/Library/x64_Release/zlib.lib
Normal file
BIN
src/BuildFiles/Library/x64_Release/zlib.lib
Normal file
Binary file not shown.
28
src/BuildFiles/Manifests/x64_admin.manifest
Normal file
28
src/BuildFiles/Manifests/x64_admin.manifest
Normal file
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<security>
|
||||
<requestedPrivileges>
|
||||
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"></requestedExecutionLevel>
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
</trustInfo>
|
||||
<dependency>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="amd64" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"></supportedOS>
|
||||
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>
|
||||
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"></supportedOS>
|
||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>
|
||||
</application>
|
||||
</compatibility>
|
||||
<asmv3:application>
|
||||
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
|
||||
<dpiAware>true</dpiAware>
|
||||
</asmv3:windowsSettings>
|
||||
</asmv3:application>
|
||||
</assembly>
|
28
src/BuildFiles/Manifests/x64_user.manifest
Normal file
28
src/BuildFiles/Manifests/x64_user.manifest
Normal file
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<security>
|
||||
<requestedPrivileges>
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
</trustInfo>
|
||||
<dependency>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="amd64" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"></supportedOS>
|
||||
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>
|
||||
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"></supportedOS>
|
||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>
|
||||
</application>
|
||||
</compatibility>
|
||||
<asmv3:application>
|
||||
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
|
||||
<dpiAware>true</dpiAware>
|
||||
</asmv3:windowsSettings>
|
||||
</asmv3:application>
|
||||
</assembly>
|
28
src/BuildFiles/Manifests/x86_admin.manifest
Normal file
28
src/BuildFiles/Manifests/x86_admin.manifest
Normal file
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<security>
|
||||
<requestedPrivileges>
|
||||
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"></requestedExecutionLevel>
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
</trustInfo>
|
||||
<dependency>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"></supportedOS>
|
||||
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>
|
||||
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"></supportedOS>
|
||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>
|
||||
</application>
|
||||
</compatibility>
|
||||
<asmv3:application>
|
||||
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
|
||||
<dpiAware>true</dpiAware>
|
||||
</asmv3:windowsSettings>
|
||||
</asmv3:application>
|
||||
</assembly>
|
28
src/BuildFiles/Manifests/x86_user.manifest
Normal file
28
src/BuildFiles/Manifests/x86_user.manifest
Normal file
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<security>
|
||||
<requestedPrivileges>
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
</trustInfo>
|
||||
<dependency>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"></supportedOS>
|
||||
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>
|
||||
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"></supportedOS>
|
||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>
|
||||
</application>
|
||||
</compatibility>
|
||||
<asmv3:application>
|
||||
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
|
||||
<dpiAware>true</dpiAware>
|
||||
</asmv3:windowsSettings>
|
||||
</asmv3:application>
|
||||
</assembly>
|
18
src/BuildFiles/OcxCabInf/vpnweb.inf
Normal file
18
src/BuildFiles/OcxCabInf/vpnweb.inf
Normal file
@ -0,0 +1,18 @@
|
||||
; VPN Client Web Installer Inf File
|
||||
;
|
||||
; Copyright (c) SoftEther Project at University of Tsukuba, Japan.
|
||||
; All Rights Reserved.
|
||||
|
||||
[version]
|
||||
signature="$CHICAGO$"
|
||||
AdvancedINF=2.0
|
||||
|
||||
[Add.Code]
|
||||
vpnweb.ocx=vpnweb.ocx
|
||||
|
||||
[vpnweb.ocx]
|
||||
file-win32-x86=thiscab
|
||||
clsid={64F1A16B-C3EE-484C-B551-35338A9BB6D2}
|
||||
FileVersion=$CAB_VERSION$
|
||||
RegisterServer=yes
|
||||
|
BIN
src/BuildFiles/Utility/cabarc.exe
Normal file
BIN
src/BuildFiles/Utility/cabarc.exe
Normal file
Binary file not shown.
74
src/BuildFiles/Utility/cabarc_redist.txt
Normal file
74
src/BuildFiles/Utility/cabarc_redist.txt
Normal file
@ -0,0 +1,74 @@
|
||||
|
||||
MICROSOFT CABINET SOFTWARE DEVELOPMENT KIT
|
||||
|
||||
END-USER LICENSE AGREEMENT FOR MICROSOFT SOFTWARE
|
||||
|
||||
IMPORTANT-READ CAREFULLY: This Microsoft End-User License Agreement ("EULA") is a legal agreement between you (either an individual or a single entity) and Microsoft Corporation for the Microsoft software product identified above, which includes computer software and associated media and printed materials, and may include "online" or electronic documentation ("SOFTWARE PRODUCT" or "SOFTWARE"). By installing, copying, or otherwise using the SOFTWARE PRODUCT, you agree to be bound by the terms of this EULA. If you do not agree to the terms of this EULA; promptly return the unused SOFTWARE PRODUCT to the place from which you obtained it for a full refund; or if you received the SOFTWARE PRODUCT as part of a subscription or other service from Microsoft, you may cancel the subscription and receive a pro rata portion of the subscription price.
|
||||
|
||||
SOFTWARE PRODUCT LICENSE
|
||||
|
||||
The SOFTWARE PRODUCT is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. The SOFTWARE PRODUCT is licensed, not sold.
|
||||
|
||||
1. GRANT OF LICENSE. This EULA grants you the following limited, non-exclusive rights:
|
||||
|
||||
Software Product. You may install and use the SOFTWARE PRODUCT on a single computer solely for the purpose of developing applications which create, extract or manipulate files that are compatible with Microsoft CAB file format ("Application"). You may not use the SOFTWARE PRODUCT to create files which are not compatible with the Microsoft CAB file format.
|
||||
|
||||
Microsoft Developer Network Subscriber. If you acquired the SOFTWARE PRODUCT through a subscription to the Microsoft Developer Network, and you are either an individual developer or an individual designated within a single entity, you are granted the following additional rights with respect to the SOFTWARE PRODUCT: (a) you may make and use copies of the SOFTWARE PRODUCT on up to ten (10) separate computers, provided that you are the only individual using the SOFTWARE PRODUCT on each such computer, and (b) if you are a single entity, you may designate one individual within your organization to have the right to use the SOFTWARE PRODUCT in the manner described herein.
|
||||
|
||||
Sample Code. You may modify the sample source code located in the SOFTWARE PRODUCT's "SAMPLES" directory ("Sample Code") to design, develop, and test your Application. You may also reproduce and distribute the Sample Code in object code form along with any modifications you make to the Sample Code, provided that the modifications do not create files which are not compatible with Microsoft CAB file format and that you comply with the Distribution Requirements described below. For purposes of this section, "modifications" shall mean changes to the functionality of the Sample Code.
|
||||
|
||||
Redistributable Code. Portions of the SOFTWARE PRODUCT in the "BIN" and "LIB" directories are designated as "Redistributable Code." You may reproduce and distribute the Redistributable Code provided you comply with the Distribution Requirements described below.
|
||||
|
||||
Distribution Requirements. You may copy and redistribute the Sample Code and/or Redistributable Code (collectively "REDISTRIBUTABLE COMPONENTS") as described above, provided that (a) you distribute the REDISTRIBUTABLE COMPONENTS only in conjunction with, and as a part of, your Application; (b) your Application adds significant and primary functionality to the REDISTRIBUTABLE COMPONENTS; (c) the Application does not allow the use of the REDISTRIBUTABLE COMPONENTS for files which are not compatible with the Microsoft CAB files; (d) the executable code in the BIN directory may be redistributed unmodified in conjunction with your Application provided that your Application adds significant and primary functionality to the REDISTRIBUTABLE COMPONENTS; (e) the library code in the LIB directory may only be redistributed when linked into your Application; (f) you do not use Microsoft's name, logo, or trademarks to market your Application; (g) you include a valid copyright notice on your Application; and (h) you agree to indemnify, hold harmless, and defend Microsoft from and against any claims or lawsuits, including attorneys' fees, that arise or result from the use or distribution of your Application. Contact Microsoft for the applicable royalties due and other licensing terms for all other uses and/or distribution of the REDISTRIBUTABLE COMPONENTS.
|
||||
|
||||
Microsoft reserves all rights not expressly granted to you.
|
||||
|
||||
2. COPYRIGHT. All rights, title, and copyrights in and to the SOFTWARE PRODUCT (including, but not limited to, any images, photographs, animations, video, audio, music, text, and "applets" incorporated into the SOFTWARE PRODUCT) and any copies of the SOFTWARE PRODUCT are owned by Microsoft or its suppliers. The SOFTWARE PRODUCT is protected by copyright laws and international treaty provisions. Therefore, you must treat the SOFTWARE PRODUCT like any other copyrighted material, except that you may either (a) make one copy of the SOFTWARE PRODUCT solely for backup or archival purposes, or (b) install the SOFTWARE PRODUCT on a single computer, provided you keep the original solely for backup or archival purposes. You may not copy the printed materials accompanying the SOFTWARE PRODUCT.
|
||||
|
||||
3. PRERELEASE CODE. The SOFTWARE PRODUCT may contain PRERELEASE CODE that is not at the level of performance and compatibility of the final, generally available, product offering. These portions of the SOFTWARE PRODUCT may not operate correctly and may be substantially modified prior to first commercial shipment. Microsoft is not obligated to make this or any later version of the SOFTWARE PRODUCT commercially available. Microsoft grants you the right to distribute test versions of your Application created using the PRERELEASE CODE provided you comply with the Distribution Requirements described in Section 1 and the following additional provisions: (a) you must mark the test version of your Application "BETA" and (b) you are solely responsible for updating your customers with versions of your Application that operate satisfactorily with the final commercial release of the PRERELEASE CODE.
|
||||
|
||||
4. DESCRIPTION OF OTHER RIGHTS AND LIMITATIONS.
|
||||
|
||||
Limitations on Reverse-Engineering, Decompilation, and Disassembly. You may not reverse- engineer, decompile, or disassemble the SOFTWARE PRODUCT, except and only to the extent that such activity is expressly permitted by applicable law notwithstanding this limitation.
|
||||
|
||||
Rental. You may not rent or lease the SOFTWARE PRODUCT.
|
||||
|
||||
Software Transfer. You may permanently transfer all of your rights under this EULA, provided you retain no copies, you transfer all of the SOFTWARE PRODUCT (including all component parts, the media and printed materials, any upgrades, this EULA, and, if applicable, the Certificate of Authenticity), and the recipient agrees to the terms of this EULA. If the SOFTWARE PRODUCT is an upgrade, any transfer must include all prior versions of the SOFTWARE PRODUCT.
|
||||
|
||||
Termination. Without prejudice to any other rights, Microsoft may terminate this EULA if you fail to comply with the terms and conditions of this EULA. In such event, you must destroy all copies of the SOFTWARE PRODUCT and all of its component parts.
|
||||
|
||||
5. EXPORT RESTRICTIONS. You agree that neither you nor your customers intend to or will, directly or indirectly, export or transmit (a) the SOFTWARE PRODUCT or related documentation and technical data, or (b) your Application as described in Section 1 of this EULA (or any part thereof), or process, or service that is the direct product of the SOFTWARE PRODUCT to any country to which such export or transmission is restricted by any applicable U.S. regulation or statute, without the prior written consent, if required, of the Bureau of Export Administration of the U.S. Department of Commerce, or such other governmental entity as may have jurisdiction over such export or transmission.
|
||||
|
||||
6. U.S. GOVERNMENT RESTRICTED RIGHTS. The SOFTWARE PRODUCT and documentation are provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the Government is subject to restrictions as set forth in subparagraph (c)(1)(ii) of The Rights in Technical Data and Computer Software clause at DFARS 252.227-7013 or subparagraphs (c)(1) and (2) of the Commercial Computer Software - Restricted Rights at 48 CFR 52.227-19, as applicable. Manufacturer is Microsoft Corporation/One Microsoft Way/Redmond, WA 98052-6399.
|
||||
|
||||
MISCELLANEOUS
|
||||
|
||||
If you acquired this product in the United States, this EULA is governed by the laws of the State of Washington.
|
||||
|
||||
If you acquired this product in Canada, this EULA is governed by the laws of the Province of Ontario, Canada. Each of the parties hereto irrevocably attorns to the jurisdiction of the courts of the Province of Ontario and further agrees to commence any litigation that may arise hereunder in the courts located in the Judicial District of York, Province of Ontario.
|
||||
|
||||
If this product was acquired outside the United States, local law may apply.
|
||||
|
||||
Should you have any questions concerning this EULA, or if you desire to contact Microsoft for any reason, please contact the Microsoft subsidiary serving your country, or write: Microsoft Customer Sales and Service/One Microsoft Way/Redmond, WA 98052-6399.
|
||||
|
||||
NO WARRANTIES. To the maximum extent permitted by applicable law, Microsoft expressly disclaims any warranty for the SOFTWARE PRODUCT. The SOFTWARE PRODUCT and any related documentation are provided "as is" without warranty of any kind, either express or implied, including, without limitation, the implied warranties of merchantability or fitness for a particular purpose. The entire risk arising out of use or performance of the SOFTWARE PRODUCT remains with you.
|
||||
|
||||
LIMITATION OF LIABILITY. Microsoft's entire liability and your exclusive remedy under this EULA shall not exceed five dollars (US$5.00).
|
||||
|
||||
NO LIABILITY FOR CONSEQUENTIAL DAMAGES. To the maximum extent permitted by applicable law, in no event shall Microsoft or its suppliers be liable for any damages whatsoever (including, without limitation, damages for loss of business profit, business interruption, loss of business information, or any other pecuniary loss) arising out of the use of, or inability to use, this Microsoft product, even if Microsoft has been advised of the possibility of such damages. Because some states/jurisdictions do not allow the exclusion or limitation of liability for consequential or incidental damages, the above limitation may not apply to you.
|
||||
|
||||
|
||||
Si vous avez acquis votre produit Microsoft au CANADA, la garantie limitée suivante vous concerne:
|
||||
|
||||
GARANTIE LIMITÉE
|
||||
|
||||
EXCLUSION DE GARANTIES. Microsoft renonce entièrement à toute garantie pour le LOGICIEL. Le LOGICIEL et toute autre documentation s'y rapportant sont fournis « comme tels » sans aucune garantie quelle qu'elle soit, expresse ou implicite, y compris, mais ne se limitant pas aux garanties implicites de la qualité marchande ou un usage particulier. Le risque total découlant de l'utilisation ou de la performance du LOGICIEL est entre vos mains.
|
||||
|
||||
RESPONSABILITÉ LIMITÉE. La seule obligation de Microsoft et votre recours exclusif concernant ce contrat n'excèderont pas cinq dollars (US$5.00).
|
||||
|
||||
ABSENCE DE RESPONSABILITÉ POUR LES DOMMAGES INDIRECTS. Microsoft ou ses
|
||||
fournisseurs ne pourront être tenus responsables en aucune circonstance de tout dommage quel qu'il soit (y compris mais non de façon limitative les dommages directs ou indirects causés par la perte de bénéfices commerciaux, l'interruption des affaires, la perte d'information commerciale ou toute autre perte pécuniaire) résultant de l'utilisation ou de l'impossibilité d'utilisation de ce produit, et ce, même si la société Microsoft a été avisée de l'éventualité de tels dommages. Certains états/juridictions ne permettent pas l'exclusion ou la limitation de responsabilité relative aux dommages indirects ou consécutifs, et la limitation ci-dessus peut ne pas s'appliquer à votre égard.
|
||||
La présente Convention est régie par les lois de la province d'Ontario, Canada. Chacune des parties à la Convention reconnaît irrévocablement la compétence des tribunaux de la province d'Ontario et consent à instituer tout litige qui pourrait découler de la Convention auprès des tribunaux situés dans le district judiciaire de York, province d'Ontario.
|
||||
Au cas où vous auriez des questions concernant cette licence ou que vous désiriez vous mettre en rapport avec Microsoft pour quelque raison que ce soit, veuillez contacter la succursale Microsoft desservant votre pays, dont l'adresse est fournie dans ce produit, ou écrire à: Microsoft Customer Sales and Service, One Microsoft Way, Redmond, Washington 98052-6399.
|
||||
|
||||
3/27/97 10:39 AM 970860004
|
30
src/BuildFiles/VerScript/ver.rc
Normal file
30
src/BuildFiles/VerScript/ver.rc
Normal file
@ -0,0 +1,30 @@
|
||||
#pragma code_page(932)
|
||||
|
||||
1 VERSIONINFO
|
||||
FILEVERSION $VER_MAJOR$,$VER_MINOR$,0,$VER_BUILD$
|
||||
PRODUCTVERSION $VER_MAJOR$,$VER_MINOR$,0,$VER_BUILD$
|
||||
FILEFLAGSMASK 0x17L
|
||||
FILEOS 0x4L
|
||||
FILETYPE 0x1L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "041104b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "SoftEther VPN Project at University of Tsukuba, Japan. (Open-source Customized Build)"
|
||||
VALUE "FileDescription", "$PRODUCTNAME$ (Open-source Customized Build)"
|
||||
VALUE "FileVersion", "$VER_MAJOR$, $VER_MINOR$, 0, $VER_BUILD$"
|
||||
VALUE "InternalName", "$INTERNALNAME$ (Open-source Customized Build)"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2012-$YEAR$ SoftEther VPN Project. All Rights Reserved. (Open-source Customized Build)"
|
||||
VALUE "LegalTrademarks", "SoftEther(R) is a registered trademark of SoftEther Corporation in Japan, United Status and People's Republic of China. SoftEther Corporation is a company founded at University of Tsukuba, Japan."
|
||||
VALUE "OriginalFilename", "$FILENAME$"
|
||||
VALUE "ProductName", "$PRODUCTNAME$ (Open-source Customized Build)"
|
||||
VALUE "ProductVersion", "$VER_MAJOR$, $VER_MINOR$, 0, $VER_BUILD$"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x411, 1200
|
||||
END
|
||||
END
|
30
src/BuildFiles/VerScript/ver_vg.rc
Normal file
30
src/BuildFiles/VerScript/ver_vg.rc
Normal file
@ -0,0 +1,30 @@
|
||||
#pragma code_page(932)
|
||||
|
||||
1 VERSIONINFO
|
||||
FILEVERSION $VER_MAJOR$,$VER_MINOR$,0,$VER_BUILD$
|
||||
PRODUCTVERSION $VER_MAJOR$,$VER_MINOR$,0,$VER_BUILD$
|
||||
FILEFLAGSMASK 0x17L
|
||||
FILEOS 0x4L
|
||||
FILETYPE 0x1L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "041104b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "University of Tsukuba"
|
||||
VALUE "FileDescription", "VPN Gate Plug-in DLL for SoftEther VPN"
|
||||
VALUE "FileVersion", "$VER_MAJOR$, $VER_MINOR$, 0, $VER_BUILD$"
|
||||
VALUE "InternalName", "$INTERNALNAME$"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2012-$YEAR$ VPN Gate Project at University of Tsukuba. All Rights Reserved."
|
||||
VALUE "LegalTrademarks", ""
|
||||
VALUE "OriginalFilename", "$FILENAME$"
|
||||
VALUE "ProductName", "VPN Gate Software"
|
||||
VALUE "ProductVersion", "$VER_MAJOR$, $VER_MINOR$, 0, $VER_BUILD$"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x411, 1200
|
||||
END
|
||||
END
|
181
src/BuildUtil/BuildUtil.csproj
Normal file
181
src/BuildUtil/BuildUtil.csproj
Normal file
@ -0,0 +1,181 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{384815C3-333C-4CEC-9DCD-B6AB2602EBB9}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>BuildUtil</RootNamespace>
|
||||
<AssemblyName>BuildUtilTmp</AssemblyName>
|
||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ApplicationIcon>BuildUtilIcon.ico</ApplicationIcon>
|
||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||
<StartupObject>BuildUtil.BuildUtilMain</StartupObject>
|
||||
<NoWin32Manifest>true</NoWin32Manifest>
|
||||
<PublishUrl>publish\</PublishUrl>
|
||||
<Install>true</Install>
|
||||
<InstallFrom>Disk</InstallFrom>
|
||||
<UpdateEnabled>false</UpdateEnabled>
|
||||
<UpdateMode>Foreground</UpdateMode>
|
||||
<UpdateInterval>7</UpdateInterval>
|
||||
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||
<UpdatePeriodically>false</UpdatePeriodically>
|
||||
<UpdateRequired>false</UpdateRequired>
|
||||
<MapFileExtensions>true</MapFileExtensions>
|
||||
<ApplicationRevision>0</ApplicationRevision>
|
||||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\bin\</OutputPath>
|
||||
<DefineConstants>TRACE;DEBUG;BU_SOFTETHER;BU_OSS</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DocumentationFile>
|
||||
</DocumentationFile>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="CoreUtil, Version=1.1.4781.28908, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>.\CoreUtil.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Configuration" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.EnterpriseServices" />
|
||||
<Reference Include="System.Runtime.Serialization.Formatters.Soap" />
|
||||
<Reference Include="System.Transactions" />
|
||||
<Reference Include="System.Web" />
|
||||
<Reference Include="System.Web.Services" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="BuildUtilCommands.cs" />
|
||||
<Compile Include="BuildUtilMain.cs" />
|
||||
<Compile Include="CodeSign.cs" />
|
||||
|
||||
<Compile Include="PEUtil.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Properties\Settings.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Test.cs" />
|
||||
<Compile Include="UnixBuildSoftwares.cs" />
|
||||
<Compile Include="VpnBuilder.cs" />
|
||||
<Compile Include="VpnBuilderConfig.cs" />
|
||||
<Compile Include="VpnBuilderConfigTypes.cs" />
|
||||
<Compile Include="Web References\HvSignService\Reference.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Reference.map</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Web References\SignService\Reference.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Reference.map</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Win32BuildSoftware.cs" />
|
||||
<Compile Include="Win32BuildUtil.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<WebReferences Include="Web References\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<WebReferenceUrl Include="http://dv/Sign/Sign.asmx">
|
||||
<UrlBehavior>Dynamic</UrlBehavior>
|
||||
<RelPath>Web References\SignService\</RelPath>
|
||||
<UpdateFromURL>http://dv/Sign/Sign.asmx</UpdateFromURL>
|
||||
<ServiceLocationURL>
|
||||
</ServiceLocationURL>
|
||||
<CachedDynamicPropName>
|
||||
</CachedDynamicPropName>
|
||||
<CachedAppSettingsObjectName>Settings</CachedAppSettingsObjectName>
|
||||
<CachedSettingsPropName>BuildUtil_SignService_Sign</CachedSettingsPropName>
|
||||
</WebReferenceUrl>
|
||||
<WebReferenceUrl Include="http://hvsigncode/Sign.asmx">
|
||||
<UrlBehavior>Dynamic</UrlBehavior>
|
||||
<RelPath>Web References\HvSignService\</RelPath>
|
||||
<UpdateFromURL>http://hvsigncode/Sign.asmx</UpdateFromURL>
|
||||
<ServiceLocationURL>
|
||||
</ServiceLocationURL>
|
||||
<CachedDynamicPropName>
|
||||
</CachedDynamicPropName>
|
||||
<CachedAppSettingsObjectName>Settings</CachedAppSettingsObjectName>
|
||||
<CachedSettingsPropName>BuildUtilTmp_HvSignService_Sign</CachedSettingsPropName>
|
||||
</WebReferenceUrl>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
<None Include="Web References\HvSignService\Sign.wsdl" />
|
||||
<None Include="Web References\SignService\Reference.map">
|
||||
<Generator>MSDiscoCodeGenerator</Generator>
|
||||
<LastGenOutput>Reference.cs</LastGenOutput>
|
||||
</None>
|
||||
<None Include="Web References\SignService\Sign.disco" />
|
||||
<None Include="Web References\SignService\Sign.wsdl" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="BuildUtilIcon.ico" />
|
||||
<None Include="Web References\HvSignService\Reference.map">
|
||||
<Generator>MSDiscoCodeGenerator</Generator>
|
||||
<LastGenOutput>Reference.cs</LastGenOutput>
|
||||
</None>
|
||||
<None Include="Web References\HvSignService\Sign.disco" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework Client Profile</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 2.0 %28x86%29</ProductName>
|
||||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.0 %28x86%29</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>$(ProjectDir)CopyBuildUtil.cmd</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
</Project>
|
1245
src/BuildUtil/BuildUtilCommands.cs
Normal file
1245
src/BuildUtil/BuildUtilCommands.cs
Normal file
File diff suppressed because it is too large
Load Diff
BIN
src/BuildUtil/BuildUtilIcon.ico
Normal file
BIN
src/BuildUtil/BuildUtilIcon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
193
src/BuildUtil/BuildUtilMain.cs
Normal file
193
src/BuildUtil/BuildUtilMain.cs
Normal file
@ -0,0 +1,193 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Build Utility
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Text;
|
||||
using System.Configuration;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Security.Cryptography;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
using System.IO;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
using System.Net.Security;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using CoreUtil;
|
||||
|
||||
namespace BuildUtil
|
||||
{
|
||||
public class BuildUtilMain
|
||||
{
|
||||
public static bool pause = false;
|
||||
|
||||
// Main function
|
||||
public static int Main(string[] args)
|
||||
{
|
||||
string errMsg = "";
|
||||
|
||||
int ret = 0;
|
||||
|
||||
ret = ConsoleService.EntryPoint("BuildUtil " + Env.CommandLine, "BuildUtil", typeof(BuildUtilMain), out errMsg);
|
||||
|
||||
if (ret != 0)
|
||||
{
|
||||
Con.WriteLine("{0}: fatal error C0001: {1}", Path.GetFileNameWithoutExtension(Env.ExeFileName), errMsg);
|
||||
|
||||
if (pause)
|
||||
{
|
||||
Console.Write("Press any key to exit...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
Environment.Exit(1);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Command execution
|
||||
[ConsoleCommandMethod(
|
||||
"VPN Build Utility",
|
||||
"[/IN:infile] [/OUT:outfile] [/CSV] [/PAUSEIFERROR:yes|no] [/CMD command_line...]",
|
||||
"VPN Build Utility",
|
||||
"IN:This will specify the text file 'infile' that contains the list of commands that are automatically executed after the connection is completed. If the /IN parameter is specified, the vpncmd program will terminate automatically after the execution of all commands in the file are finished. If the file contains multiple-byte characters, the encoding must be Unicode (UTF-8). This cannot be specified together with /CMD (if /CMD is specified, /IN will be ignored).",
|
||||
"OUT:You can specify the text file 'outfile' to write all strings such as onscreen prompts, message, error and execution results. Note that if the specified file already exists, the contents of the existing file will be overwritten. Output strings will be recorded using Unicode (UTF-8) encoding.",
|
||||
"CMD:If the optional command 'command_line...' is included after /CMD, that command will be executed after the connection is complete and the vpncmd program will terminate after that. This cannot be specified together with /IN (if specified together with /IN, /IN will be ignored). Specify the /CMD parameter after all other vpncmd parameters.",
|
||||
"CSV:Enable CSV Mode.",
|
||||
"PAUSEIFERROR:Specify yes if you'd like to pause before exiting the process if there are any errors."
|
||||
)]
|
||||
public static int BuildUtil(ConsoleService c, string cmdName, string str)
|
||||
{
|
||||
Con.WriteLine("");
|
||||
Con.WriteLine("Copyright (c) SoftEther Corporation. All Rights Reserved.");
|
||||
Con.WriteLine("");
|
||||
|
||||
ConsoleParam[] args =
|
||||
{
|
||||
new ConsoleParam("IN", null, null, null, null),
|
||||
new ConsoleParam("OUT", null, null, null, null),
|
||||
new ConsoleParam("CMD", null, null, null, null),
|
||||
new ConsoleParam("CSV", null, null, null, null),
|
||||
new ConsoleParam("PAUSEIFERROR", null, null, null, null),
|
||||
new ConsoleParam("DT", null, null, null, null),
|
||||
};
|
||||
|
||||
ConsoleParamValueList vl = c.ParseCommandList(cmdName, str, args);
|
||||
|
||||
pause = vl["PAUSEIFERROR"].BoolValue;
|
||||
|
||||
string cmdline = vl["CMD"].StrValue;
|
||||
|
||||
if (vl["DT"].IsEmpty == false)
|
||||
{
|
||||
BuildSoftwareList.ListCreatedDateTime = Str.StrToDateTime(vl["DT"].StrValue);
|
||||
}
|
||||
|
||||
ConsoleService cs = c;
|
||||
|
||||
while (cs.DispatchCommand(cmdline, "BuildUtil>", typeof(BuildUtilCommands), null))
|
||||
{
|
||||
if (Str.IsEmptyStr(cmdline) == false)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return cs.RetCode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
263
src/BuildUtil/CodeSign.cs
Normal file
263
src/BuildUtil/CodeSign.cs
Normal file
@ -0,0 +1,263 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Build Utility
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Text;
|
||||
using System.Configuration;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Security.Cryptography;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
using System.IO;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
using System.Net.Security;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using CoreUtil;
|
||||
using BuildUtil.HvSignService;
|
||||
|
||||
namespace BuildUtil
|
||||
{
|
||||
public static class CodeSign
|
||||
{
|
||||
public const int NumRetries = 1;
|
||||
public const int RetryIntervals = 200;
|
||||
|
||||
public const int NumRetriesForCopy = 50;
|
||||
public const int RetryIntervalsForCopy = 10;
|
||||
|
||||
const string in_dir = @"\\hvsigncode\SIGN\IN";
|
||||
const string out_dir = @"\\hvsigncode\SIGN\OUT";
|
||||
|
||||
#if !BU_SOFTETHER
|
||||
public static int UsingCertId = 1;
|
||||
#else
|
||||
public static int UsingCertId = 2;
|
||||
#endif
|
||||
|
||||
static object lockObj = new object();
|
||||
|
||||
// Digital-sign the data on the memory
|
||||
public static byte[] SignMemory(byte[] srcData, string comment, bool kernelModeDriver, int cert_id)
|
||||
{
|
||||
#if !BU_OSS
|
||||
int i;
|
||||
string out_filename = null;
|
||||
byte[] ret = null;
|
||||
|
||||
string in_tmp_filename = Path.Combine(in_dir,
|
||||
Str.DateTimeToStrShortWithMilliSecs(DateTime.Now) + "_" +
|
||||
Env.MachineName + "_" +
|
||||
Secure.Rand63i().ToString() + ".dat");
|
||||
|
||||
IO.SaveFile(in_tmp_filename, srcData);
|
||||
|
||||
for (i = 0; i < NumRetries; i++)
|
||||
{
|
||||
Sign sign = new Sign();
|
||||
sign.Proxy = new WebProxy();
|
||||
|
||||
try
|
||||
{
|
||||
out_filename = sign.ExecSign(Path.GetFileName(in_tmp_filename),
|
||||
kernelModeDriver,
|
||||
comment,
|
||||
cert_id);
|
||||
break;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (i != (NumRetries - 1))
|
||||
{
|
||||
Kernel.SleepThread(RetryIntervals);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < NumRetriesForCopy; i++)
|
||||
{
|
||||
try
|
||||
{
|
||||
ret = IO.ReadFile(Path.Combine(out_dir, out_filename));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (i != (NumRetriesForCopy - 1))
|
||||
{
|
||||
Kernel.SleepThread(RetryIntervalsForCopy);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
string tmpFileName = IO.CreateTempFileNameByExt(".exe");
|
||||
try
|
||||
{
|
||||
File.Delete(tmpFileName);
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
File.WriteAllBytes(tmpFileName, ret);
|
||||
|
||||
lock (lockObj)
|
||||
{
|
||||
if (ExeSignChecker.CheckFileDigitalSignature(tmpFileName) == false)
|
||||
{
|
||||
throw new ApplicationException("CheckFileDigitalSignature failed.");
|
||||
}
|
||||
|
||||
if (kernelModeDriver)
|
||||
{
|
||||
if (ExeSignChecker.IsKernelModeSignedFile(tmpFileName) == false)
|
||||
{
|
||||
throw new ApplicationException("IsKernelModeSignedFile failed.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
}
|
||||
catch
|
||||
{
|
||||
File.Delete(tmpFileName);
|
||||
}
|
||||
|
||||
return ret;
|
||||
#else // BU_OSS
|
||||
return srcData;
|
||||
#endif // BU_OSS
|
||||
}
|
||||
|
||||
// Digital-sign the data on the file
|
||||
public static void SignFile(string destFileName, string srcFileName, string comment, bool kernelModeDriver)
|
||||
{
|
||||
int cert_id = UsingCertId;
|
||||
|
||||
SignFile(destFileName, srcFileName, comment, kernelModeDriver, cert_id);
|
||||
}
|
||||
public static void SignFile(string destFileName, string srcFileName, string comment, bool kernelModeDriver, int cert_id)
|
||||
{
|
||||
#if !BU_OSS
|
||||
Con.WriteLine("Signing for '{0}'...", Path.GetFileName(destFileName));
|
||||
byte[] srcData = File.ReadAllBytes(srcFileName);
|
||||
|
||||
byte[] destData = SignMemory(srcData, comment, kernelModeDriver, cert_id);
|
||||
|
||||
try
|
||||
{
|
||||
File.Delete(destFileName);
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
|
||||
File.WriteAllBytes(destFileName, destData);
|
||||
|
||||
Con.WriteLine("Done.");
|
||||
#else // BU_OSS
|
||||
Con.WriteLine("Skipping the code signing for '{0}' in the build process. You can insert your own authenticode sign process here.", srcFileName);
|
||||
#endif // BU_OSS
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
2
src/BuildUtil/CopyBuildUtil.cmd
Normal file
2
src/BuildUtil/CopyBuildUtil.cmd
Normal file
@ -0,0 +1,2 @@
|
||||
copy %0\..\..\bin\BuildUtilTmp.exe %0\..\..\bin\BuildUtil.exe
|
||||
exit /b 0
|
BIN
src/BuildUtil/CoreUtil.dll
Normal file
BIN
src/BuildUtil/CoreUtil.dll
Normal file
Binary file not shown.
231
src/BuildUtil/PEUtil.cs
Normal file
231
src/BuildUtil/PEUtil.cs
Normal file
@ -0,0 +1,231 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Build Utility
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Text;
|
||||
using System.Configuration;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Security.Cryptography;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
using System.IO;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
using System.Net.Security;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using CoreUtil;
|
||||
|
||||
namespace BuildUtil
|
||||
{
|
||||
public static class PEUtil
|
||||
{
|
||||
public const int NumRetries = 5;
|
||||
public const int RetryIntervals = 200;
|
||||
public const string MutexName = "peutil_setmanifest_mutex";
|
||||
|
||||
// Set the version of the PE header to 4 (to work in Windows 98, etc.)
|
||||
public static void SetPEVersionTo4(byte[] srcData)
|
||||
{
|
||||
int offset = 0x140 + (int)((uint)srcData[0x3c] + ((uint)srcData[0x3d] * 256)) - 0xf8;
|
||||
|
||||
if (!((srcData[offset] == 0x04 || srcData[offset] == 0x05) && srcData[offset + 1] == 0x00))
|
||||
{
|
||||
throw new ApplicationException("The specified file is not PE file.");
|
||||
}
|
||||
|
||||
srcData[offset] = 0x04;
|
||||
}
|
||||
public static void SetPEVersionTo4(string fileName)
|
||||
{
|
||||
FileInfo fi = new FileInfo(fileName);
|
||||
|
||||
byte[] data = File.ReadAllBytes(fileName);
|
||||
SetPEVersionTo4(data);
|
||||
|
||||
int i;
|
||||
for (i = 0;; i++)
|
||||
{
|
||||
try
|
||||
{
|
||||
File.WriteAllBytes(fileName, data);
|
||||
break;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (i >= (NumRetries - 1))
|
||||
{
|
||||
throw ex;
|
||||
}
|
||||
|
||||
Kernel.SleepThread(RetryIntervals);
|
||||
}
|
||||
}
|
||||
|
||||
File.SetCreationTime(fileName, fi.CreationTime);
|
||||
File.SetLastAccessTime(fileName, fi.LastAccessTime);
|
||||
File.SetLastWriteTime(fileName, fi.LastWriteTime);
|
||||
}
|
||||
|
||||
public static void SetManifest(string exe, string manifestName)
|
||||
{
|
||||
Mutex x = new Mutex(false, MutexName);
|
||||
|
||||
x.WaitOne();
|
||||
|
||||
try
|
||||
{
|
||||
// Manifest file name
|
||||
string filename = Path.Combine(Paths.ManifestsDir, manifestName);
|
||||
if (File.Exists(filename) == false)
|
||||
{
|
||||
throw new FileNotFoundException(filename);
|
||||
}
|
||||
|
||||
FileInfo fi = new FileInfo(exe);
|
||||
|
||||
// Copy exe file to a temporary directory
|
||||
string exeTmp = IO.CreateTempFileNameByExt(".exe");
|
||||
IO.FileCopy(exe, exeTmp);
|
||||
|
||||
// Create a batch file
|
||||
string batFileName = Path.Combine(Paths.TmpDirName, "exec_mt.cmd");
|
||||
StreamWriter bat = new StreamWriter(batFileName, false, Str.ShiftJisEncoding);
|
||||
bat.WriteLine("call \"{0}\"", Paths.VisualStudioVCBatchFileName);
|
||||
bat.WriteLine("echo on");
|
||||
bat.WriteLine("mt.exe -manifest \"{0}\" -outputresource:\"{1}\";1", filename, exeTmp);
|
||||
bat.WriteLine("EXIT /B %ERRORLEVEL%");
|
||||
bat.Close();
|
||||
|
||||
Exception ex = null;
|
||||
|
||||
int i;
|
||||
// Repeated 20 times in order to avoid locking the file by the anti-virus software
|
||||
for (i = 0; i < 20; i++)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Execute
|
||||
Win32BuildUtil.ExecCommand(Paths.CmdFileName, string.Format("/C \"{0}\"", batFileName), true);
|
||||
ex = null;
|
||||
|
||||
break;
|
||||
}
|
||||
catch (Exception ex2)
|
||||
{
|
||||
ex = ex2;
|
||||
}
|
||||
|
||||
ThreadObj.Sleep(Secure.Rand31i() % 50);
|
||||
}
|
||||
|
||||
if (ex != null)
|
||||
{
|
||||
throw new ApplicationException("mt.exe Manifest Processing for '" + exe + "' Failed.");
|
||||
}
|
||||
|
||||
// Revert to the original file
|
||||
IO.FileCopy(exeTmp, exe);
|
||||
|
||||
// Restore the date and time
|
||||
File.SetCreationTime(exe, fi.CreationTime);
|
||||
File.SetLastAccessTime(exe, fi.LastAccessTime);
|
||||
File.SetLastWriteTime(exe, fi.LastWriteTime);
|
||||
}
|
||||
finally
|
||||
{
|
||||
x.ReleaseMutex();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
18
src/BuildUtil/Properties/AssemblyInfo.cs
Normal file
18
src/BuildUtil/Properties/AssemblyInfo.cs
Normal file
@ -0,0 +1,18 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
[assembly: AssemblyTitle("PacketiX VPN / SoftEther VPN Build Utility")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("SoftEther Corporation")]
|
||||
[assembly: AssemblyProduct("PacketiX VPN / SoftEther VPN Build Utility")]
|
||||
[assembly: AssemblyCopyright("Copyright (c) SoftEther Corporation. All Rights Reserved.")]
|
||||
[assembly: AssemblyTrademark("PacketiX(R) and SoftEther(R) is a registered trademark of SoftEther Corporation.")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
[assembly: Guid("5bf63a11-27da-4ca4-ba9d-a60a0f8e1fd7")]
|
||||
|
||||
[assembly: AssemblyVersion("1.0.*")]
|
115
src/BuildUtil/Properties/Settings.Designer.cs
generated
Normal file
115
src/BuildUtil/Properties/Settings.Designer.cs
generated
Normal file
@ -0,0 +1,115 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// このコードはツールによって生成されました。
|
||||
// ランタイム バージョン:2.0.50727.5466
|
||||
//
|
||||
// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、
|
||||
// コードが再生成されるときに損失したりします。
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
namespace BuildUtil.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
|
||||
public static Settings Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.WebServiceUrl)]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("http://dv/Sign/Sign.asmx")]
|
||||
public string BuildUtil_SignService_Sign {
|
||||
get {
|
||||
return ((string)(this["BuildUtil_SignService_Sign"]));
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.WebServiceUrl)]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("http://hvsigncode/Sign.asmx")]
|
||||
public string BuildUtilTmp_HvSignService_Sign {
|
||||
get {
|
||||
return ((string)(this["BuildUtilTmp_HvSignService_Sign"]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
12
src/BuildUtil/Properties/Settings.settings
Normal file
12
src/BuildUtil/Properties/Settings.settings
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="BuildUtil.Properties" GeneratedClassName="Settings">
|
||||
<Profiles />
|
||||
<Settings>
|
||||
<Setting Name="BuildUtil_SignService_Sign" Type="(Web Service URL)" Scope="Application">
|
||||
<Value Profile="(Default)">http://dv/Sign/Sign.asmx</Value>
|
||||
</Setting>
|
||||
<Setting Name="BuildUtilTmp_HvSignService_Sign" Type="(Web Service URL)" Scope="Application">
|
||||
<Value Profile="(Default)">http://hvsigncode/Sign.asmx</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
125
src/BuildUtil/Test.cs
Normal file
125
src/BuildUtil/Test.cs
Normal file
@ -0,0 +1,125 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Build Utility
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Text;
|
||||
using System.Configuration;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Security.Cryptography;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
using System.IO;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
using System.Net.Security;
|
||||
using System.Reflection;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using CoreUtil;
|
||||
|
||||
namespace BuildUtil
|
||||
{
|
||||
public static class TestClass
|
||||
{
|
||||
public static void Test()
|
||||
{
|
||||
Language[] langs = BuildHelper.GetLanguageList();
|
||||
|
||||
foreach (Language e in langs)
|
||||
{
|
||||
Con.WriteLine("{0} {1} {2} {3} {5} {4}",
|
||||
e.Number, e.Id, e.Title, e.TitleUnicode, e.UnixLocaleIds, e.WindowsLocaleIds);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
1015
src/BuildUtil/UnixBuildSoftwares.cs
Normal file
1015
src/BuildUtil/UnixBuildSoftwares.cs
Normal file
File diff suppressed because it is too large
Load Diff
650
src/BuildUtil/VpnBuilder.cs
Normal file
650
src/BuildUtil/VpnBuilder.cs
Normal file
@ -0,0 +1,650 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Build Utility
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Text;
|
||||
using System.Configuration;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Security.Cryptography;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
using System.IO;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
using System.Net.Security;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using CoreUtil;
|
||||
|
||||
namespace BuildUtil
|
||||
{
|
||||
// Languages
|
||||
public class Language
|
||||
{
|
||||
public int Number;
|
||||
public string Id;
|
||||
public string Title;
|
||||
public string TitleUnicode;
|
||||
public string WindowsLocaleIds;
|
||||
public string UnixLocaleIds;
|
||||
}
|
||||
|
||||
// Build helper class
|
||||
public static class BuildHelper
|
||||
{
|
||||
// loads the language list text file
|
||||
public static Language[] GetLanguageList()
|
||||
{
|
||||
return GetLanguageList(Path.Combine(Paths.BinDirName, @"hamcore\languages.txt"));
|
||||
}
|
||||
public static Language[] GetLanguageList(string filename)
|
||||
{
|
||||
List<Language> ret = new List<Language>();
|
||||
string[] lines = File.ReadAllLines(filename, Str.Utf8Encoding);
|
||||
|
||||
foreach (string line in lines)
|
||||
{
|
||||
string s = line.Trim();
|
||||
|
||||
if (Str.IsEmptyStr(s) == false)
|
||||
{
|
||||
if (s.StartsWith("#", StringComparison.InvariantCultureIgnoreCase) == false)
|
||||
{
|
||||
string[] sps = { " ", "\t", };
|
||||
string[] tokens = s.Split(sps, StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
if (tokens.Length == 6)
|
||||
{
|
||||
Language e = new Language();
|
||||
|
||||
e.Number = Str.StrToInt(tokens[0]);
|
||||
e.Id = tokens[1];
|
||||
e.Title = Str.ReplaceStr(tokens[2], "_", " ");
|
||||
e.TitleUnicode = tokens[3];
|
||||
e.WindowsLocaleIds = tokens[4];
|
||||
e.UnixLocaleIds = tokens[5];
|
||||
|
||||
ret.Add(e);
|
||||
|
||||
Con.WriteLine(tokens.Length);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret.ToArray();
|
||||
}
|
||||
|
||||
// Build
|
||||
public static void BuildMain(BuildSoftware soft, bool debugModeIfUnix)
|
||||
{
|
||||
int version, build;
|
||||
string name;
|
||||
DateTime date;
|
||||
|
||||
string title = Console.Title;
|
||||
Console.Title = string.Format("Building {0}", soft.IDString);
|
||||
|
||||
try
|
||||
{
|
||||
Win32BuildUtil.ReadBuildInfoFromTextFile(out build, out version, out name, out date);
|
||||
|
||||
soft.SetBuildNumberVersionName(build, version, name, date);
|
||||
|
||||
Con.WriteLine("Building '{0}' - {1}...", soft.IDString, soft.TitleString);
|
||||
|
||||
BuildSoftwareUnix softUnix = soft as BuildSoftwareUnix;
|
||||
|
||||
if (softUnix == null)
|
||||
{
|
||||
soft.Build();
|
||||
}
|
||||
else
|
||||
{
|
||||
softUnix.Build(debugModeIfUnix);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
Console.Title = title;
|
||||
}
|
||||
}
|
||||
|
||||
// Convert the number to a version number
|
||||
public static string VersionIntToString(int version)
|
||||
{
|
||||
return string.Format("{0}.{1:D2}", version / 100, version % 100);
|
||||
}
|
||||
|
||||
// Get a product list that is included in the software
|
||||
public static string GetSoftwareProductList(Software soft)
|
||||
{
|
||||
string ret = "";
|
||||
|
||||
switch (soft)
|
||||
{
|
||||
case Software.vpnbridge:
|
||||
ret = "PacketiX VPN Bridge";
|
||||
break;
|
||||
|
||||
case Software.vpnclient:
|
||||
ret = "PacketiX VPN Client, PacketiX VPN Command-Line Admin Utility (vpncmd)";
|
||||
break;
|
||||
|
||||
case Software.vpnserver:
|
||||
ret = "PacketiX VPN Server, PacketiX VPN Command-Line Admin Utility (vpncmd)";
|
||||
break;
|
||||
|
||||
case Software.vpnserver_vpnbridge:
|
||||
ret = "PacketiX VPN Server, PacketiX VPN Bridge, PacketiX VPN Server Manager for Windows, PacketiX VPN Command-Line Admin Utility (vpncmd)";
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new ApplicationException("invalid soft.");
|
||||
}
|
||||
|
||||
#if BU_SOFTETHER
|
||||
ret = Str.ReplaceStr(ret, "PacketiX", "SoftEther", false);
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Get the title of the software
|
||||
public static string GetSoftwareTitle(Software soft)
|
||||
{
|
||||
string ret = "";
|
||||
|
||||
switch (soft)
|
||||
{
|
||||
case Software.vpnbridge:
|
||||
ret = "PacketiX VPN Bridge";
|
||||
break;
|
||||
|
||||
case Software.vpnclient:
|
||||
ret = "PacketiX VPN Client";
|
||||
break;
|
||||
|
||||
case Software.vpnserver:
|
||||
ret = "PacketiX VPN Server";
|
||||
break;
|
||||
|
||||
case Software.vpnserver_vpnbridge:
|
||||
ret = "PacketiX VPN Server and VPN Bridge";
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new ApplicationException("invalid soft.");
|
||||
}
|
||||
|
||||
#if BU_SOFTETHER
|
||||
ret = Str.ReplaceStr(ret, "PacketiX", "SoftEther", false);
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
// Basic path information
|
||||
public static class Paths
|
||||
{
|
||||
public static readonly string ExeFileName = Env.ExeFileName;
|
||||
public static readonly string ExeDirName = Env.ExeFileDir;
|
||||
public static readonly string BinDirName = ExeDirName;
|
||||
public static readonly string BaseDirName = IO.NormalizePath(Path.Combine(BinDirName, @"..\"));
|
||||
public static readonly string UtilityDirName = IO.NormalizePath(Path.Combine(BinDirName, @"..\BuildFiles\Utility"));
|
||||
|
||||
#if !BU_SOFTETHER
|
||||
// PacketiX VPN (build by SoftEther)
|
||||
public static readonly string VPN4SolutionFileName = Path.Combine(BaseDirName, "VPN4.sln");
|
||||
public static readonly string DebugSnapshotBaseDir = @"S:\SE4\DebugFilesSnapshot";
|
||||
public static readonly string ReleaseDestDir = @"s:\SE4\Releases";
|
||||
public const string Prefix = "";
|
||||
#else
|
||||
#if !BU_OSS
|
||||
// SoftEther VPN (build by SoftEther)
|
||||
public static readonly string VPN4SolutionFileName = Path.Combine(BaseDirName, "SEVPN.sln");
|
||||
public static readonly string DebugSnapshotBaseDir = @"S:\SE4\DebugFilesSnapshot_SEVPN";
|
||||
public static readonly string ReleaseDestDir = @"s:\SE4\Releases_SEVPN";
|
||||
public const string Prefix = "softether-";
|
||||
#else
|
||||
// SoftEther VPN (build by Open Source Developers)
|
||||
public static readonly string VPN4SolutionFileName = Path.Combine(BaseDirName, "SEVPN.sln");
|
||||
public static readonly string DebugSnapshotBaseDir = IO.NormalizePath(Path.Combine(BaseDirName, @"..\output\debug"));
|
||||
public static readonly string ReleaseDestDir = IO.NormalizePath(Path.Combine(BaseDirName, @"..\output\pkg"));
|
||||
public const string Prefix = "softether_open-";
|
||||
#endif
|
||||
#endif
|
||||
|
||||
public static readonly string ReleaseDestDir_SEVPN = @"s:\SE4\Releases_SEVPN";
|
||||
|
||||
public static readonly string BuildHamcoreFilesDirName = Path.Combine(BinDirName, "BuiltHamcoreFiles");
|
||||
public static readonly string VisualStudioVCDir;
|
||||
public static readonly string VisualStudioVCBatchFileName;
|
||||
public static readonly string DotNetFramework35Dir;
|
||||
public static readonly string MSBuildFileName;
|
||||
public static readonly string TmpDirName;
|
||||
public static readonly DateTime StartDateTime = DateTime.Now;
|
||||
public static readonly string StartDateTimeStr;
|
||||
public static readonly string CmdFileName;
|
||||
public static readonly string ManifestsDir = Path.Combine(BaseDirName, @"BuildFiles\Manifests");
|
||||
public static readonly string XCopyExeFileName = Path.Combine(Env.SystemDir, "xcopy.exe");
|
||||
public static readonly string ReleaseDir = Path.Combine(BaseDirName, @"tmp\Release");
|
||||
public static readonly string ReleaseSrckitDir = Path.Combine(BaseDirName, @"tmp\ReleaseSrcKit");
|
||||
public static readonly string StringsDir = Path.Combine(BaseDirName, @"BuildFiles\Strings");
|
||||
public static readonly string CrossCompilerBaseDir = @"S:\CommomDev\xc";
|
||||
public static readonly string UnixInstallScript = Path.Combine(BaseDirName, @"BuildFiles\UnixFiles\InstallScript.txt");
|
||||
public static readonly string OssCommentsFile = Path.Combine(StringsDir, "OssComments.txt");
|
||||
public static readonly string AutorunSrcDir = IO.NormalizePath(Path.Combine(BaseDirName, @"..\Autorun"));
|
||||
public static readonly string MicrosoftSDKDir;
|
||||
public static readonly string MakeCatFilename;
|
||||
public static readonly string RcFilename;
|
||||
public static readonly string SoftEtherBuildDir = Env.SystemDir.Substring(0, 2) + @"\tmp\softether_build_dir";
|
||||
public static readonly string OpenSourceDestDir = Env.SystemDir.Substring(0, 2) + @"\tmp\softether_oss_dest_dir";
|
||||
|
||||
// Initialize
|
||||
static Paths()
|
||||
{
|
||||
// Starting date and time string
|
||||
Paths.StartDateTimeStr = Str.DateTimeToStrShort(Paths.StartDateTime);
|
||||
|
||||
// Check whether the execution path is the bin directory in the VPN directory
|
||||
if (Paths.BinDirName.EndsWith(@"\bin", StringComparison.InvariantCultureIgnoreCase) == false)
|
||||
{
|
||||
throw new ApplicationException(string.Format("'{0}' is not a VPN bin directory.", Paths.BinDirName));
|
||||
}
|
||||
if (File.Exists(Paths.VPN4SolutionFileName) == false)
|
||||
{
|
||||
throw new ApplicationException(string.Format("'{0}' is not a VPN base directory.", Paths.BaseDirName));
|
||||
}
|
||||
|
||||
// Get the VC++ directory
|
||||
// Visual Studio 2008
|
||||
Paths.VisualStudioVCDir = IO.RemoteLastEnMark(Reg.ReadStr(RegRoot.LocalMachine, @"SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VC", "ProductDir"));
|
||||
if (Str.IsEmptyStr(Paths.VisualStudioVCDir))
|
||||
{
|
||||
throw new ApplicationException("Visual C++ directory not found.\n");
|
||||
}
|
||||
if (Directory.Exists(Paths.VisualStudioVCDir) == false)
|
||||
{
|
||||
throw new ApplicationException(string.Format("Directory '{0}' not found.", Paths.VisualStudioVCDir));
|
||||
}
|
||||
|
||||
// Get the VC++ batch file name
|
||||
Paths.VisualStudioVCBatchFileName = Path.Combine(Paths.VisualStudioVCDir, "vcvarsall.bat");
|
||||
if (File.Exists(Paths.VisualStudioVCBatchFileName) == false)
|
||||
{
|
||||
throw new ApplicationException(string.Format("File '{0}' not found.", Paths.VisualStudioVCBatchFileName));
|
||||
}
|
||||
|
||||
bool x86_dir = false;
|
||||
|
||||
// Get Microsoft SDK 6.0a directory
|
||||
Paths.MicrosoftSDKDir = IO.RemoteLastEnMark(Reg.ReadStr(RegRoot.LocalMachine, @"SOFTWARE\Microsoft\Microsoft SDKs\Windows\v6.0A", "InstallationFolder"));
|
||||
|
||||
// Get makecat.exe file name
|
||||
Paths.MakeCatFilename = Path.Combine(Paths.MicrosoftSDKDir, @"bin\" + (x86_dir ? @"x86\" : "") + "makecat.exe");
|
||||
|
||||
// Get the rc.exe file name
|
||||
Paths.RcFilename = Path.Combine(Paths.MicrosoftSDKDir, @"bin\" + (x86_dir ? @"x86\" : "") + "rc.exe");
|
||||
|
||||
// Get the cmd.exe file name
|
||||
Paths.CmdFileName = Path.Combine(Env.SystemDir, "cmd.exe");
|
||||
if (File.Exists(Paths.CmdFileName) == false)
|
||||
{
|
||||
throw new ApplicationException(string.Format("File '{0}' not found.", Paths.CmdFileName));
|
||||
}
|
||||
|
||||
// Get .NET Framework 3.5 directory
|
||||
Paths.DotNetFramework35Dir = Path.Combine(Env.WindowsDir, @"Microsoft.NET\Framework\v3.5");
|
||||
|
||||
// Get msbuild.exe directory
|
||||
Paths.MSBuildFileName = Path.Combine(Paths.DotNetFramework35Dir, "MSBuild.exe");
|
||||
if (File.Exists(Paths.MSBuildFileName) == false)
|
||||
{
|
||||
throw new ApplicationException(string.Format("File '{0}' not found.", Paths.MSBuildFileName));
|
||||
}
|
||||
|
||||
// Get the TMP directory
|
||||
Paths.TmpDirName = Path.Combine(Paths.BaseDirName, "tmp");
|
||||
if (Directory.Exists(Paths.TmpDirName) == false)
|
||||
{
|
||||
Directory.CreateDirectory(Paths.TmpDirName);
|
||||
}
|
||||
}
|
||||
|
||||
public static void DeleteAllReleaseTarGz()
|
||||
{
|
||||
if (Directory.Exists(Paths.ReleaseDir))
|
||||
{
|
||||
string[] files = Directory.GetFiles(Paths.ReleaseDir, "*.gz", SearchOption.AllDirectories);
|
||||
|
||||
foreach (string file in files)
|
||||
{
|
||||
File.Delete(file);
|
||||
}
|
||||
}
|
||||
|
||||
if (Directory.Exists(Paths.ReleaseSrckitDir))
|
||||
{
|
||||
string[] files = Directory.GetFiles(Paths.ReleaseSrckitDir, "*.gz", SearchOption.AllDirectories);
|
||||
|
||||
foreach (string file in files)
|
||||
{
|
||||
File.Delete(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void DeleteAllReleaseAdminKits()
|
||||
{
|
||||
if (Directory.Exists(Paths.ReleaseDir))
|
||||
{
|
||||
string[] files = Directory.GetFiles(Paths.ReleaseDir, "*.zip", SearchOption.AllDirectories);
|
||||
|
||||
foreach (string file in files)
|
||||
{
|
||||
if (Str.InStr(file, "vpnadminpak"))
|
||||
{
|
||||
File.Delete(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void DeleteAllReleaseManuals()
|
||||
{
|
||||
if (Directory.Exists(Paths.ReleaseDir))
|
||||
{
|
||||
string[] files = Directory.GetFiles(Paths.ReleaseDir, "*", SearchOption.AllDirectories);
|
||||
|
||||
foreach (string file in files)
|
||||
{
|
||||
if (Str.InStr(file, "vpnmanual"))
|
||||
{
|
||||
File.Delete(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void DeleteAllReleaseExe()
|
||||
{
|
||||
if (Directory.Exists(Paths.ReleaseDir))
|
||||
{
|
||||
string[] files = Directory.GetFiles(Paths.ReleaseDir, "*.exe", SearchOption.AllDirectories);
|
||||
|
||||
foreach (string file in files)
|
||||
{
|
||||
if (Str.InStr(file, "vpnmanual") == false)
|
||||
{
|
||||
File.Delete(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// HamCore build utility
|
||||
public static class HamCoreBuildUtil
|
||||
{
|
||||
// Identify whether a file is necessary only in the Win32
|
||||
public static bool IsFileForOnlyWin32(string filename)
|
||||
{
|
||||
string[] filesOnlyWin32 =
|
||||
{
|
||||
".exe",
|
||||
".dll",
|
||||
".sys",
|
||||
".inf",
|
||||
".wav",
|
||||
};
|
||||
|
||||
foreach (string ext in filesOnlyWin32)
|
||||
{
|
||||
if (filename.EndsWith(ext, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Delete svn file
|
||||
public static void DeleteSVNFilesFromHamCoreBuilder(HamCoreBuilder b)
|
||||
{
|
||||
List<string> removeFiles = new List<string>();
|
||||
foreach (HamCoreBuilderFileEntry f in b.FileList)
|
||||
{
|
||||
string name = f.Name;
|
||||
if (name.StartsWith(".svn", StringComparison.InvariantCultureIgnoreCase) ||
|
||||
name.IndexOf(@"\.svn", StringComparison.InvariantCultureIgnoreCase) != -1)
|
||||
{
|
||||
removeFiles.Add(name);
|
||||
}
|
||||
}
|
||||
foreach (string file in removeFiles)
|
||||
{
|
||||
b.DeleteFile(file);
|
||||
}
|
||||
}
|
||||
|
||||
// Build Hamcore file
|
||||
public static void BuildHamcore()
|
||||
{
|
||||
string srcDirNameBasic = Path.Combine(Paths.BinDirName, "hamcore");
|
||||
// Create the destination directory
|
||||
string win32DestDir = Path.Combine(Paths.BuildHamcoreFilesDirName, "hamcore_win32");
|
||||
string win32DestFileName = Path.Combine(win32DestDir, "hamcore.se2");
|
||||
string unixDestDir = Path.Combine(Paths.BuildHamcoreFilesDirName, "hamcore_unix");
|
||||
string unixDestFileName = Path.Combine(unixDestDir, "hamcore.se2");
|
||||
IO.MakeDir(win32DestDir);
|
||||
IO.MakeDir(unixDestDir);
|
||||
|
||||
|
||||
BuildHamcoreEx(srcDirNameBasic, win32DestFileName, unixDestFileName);
|
||||
|
||||
// Copy to bin\hamcore.se2
|
||||
try
|
||||
{
|
||||
string binHamcoreFileName = Path.Combine(Paths.BinDirName, "hamcore.se2");
|
||||
|
||||
try
|
||||
{
|
||||
File.Delete(binHamcoreFileName);
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
|
||||
File.Copy(win32DestFileName, binHamcoreFileName, true);
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public static void BuildHamcoreEx(string srcDirNameBasic, string win32DestFileName, string unixDestFileName)
|
||||
{
|
||||
HamCoreBuilder b = new HamCoreBuilder();
|
||||
b.AddDir(srcDirNameBasic);
|
||||
Con.WriteLine("* Building hamcore ...");
|
||||
|
||||
DeleteSVNFilesFromHamCoreBuilder(b);
|
||||
|
||||
try
|
||||
{
|
||||
File.Delete(win32DestFileName);
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
b.Build(win32DestFileName);
|
||||
|
||||
// unix
|
||||
List<string> removeFiles = new List<string>();
|
||||
foreach (HamCoreBuilderFileEntry f in b.FileList)
|
||||
{
|
||||
if (IsFileForOnlyWin32(f.Name))
|
||||
{
|
||||
removeFiles.Add(f.Name);
|
||||
}
|
||||
}
|
||||
foreach (string removeFile in removeFiles)
|
||||
{
|
||||
b.DeleteFile(removeFile);
|
||||
}
|
||||
|
||||
DeleteSVNFilesFromHamCoreBuilder(b);
|
||||
|
||||
try
|
||||
{
|
||||
File.Delete(unixDestFileName);
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
b.Build(unixDestFileName);
|
||||
}
|
||||
}
|
||||
|
||||
// Number of bits
|
||||
public enum CPUBits
|
||||
{
|
||||
Both,
|
||||
Bits32,
|
||||
Bits64,
|
||||
}
|
||||
|
||||
// Conversion a string to the number of bits
|
||||
public static class CPUBitsUtil
|
||||
{
|
||||
public static CPUBits StringToCPUBits(string str)
|
||||
{
|
||||
if (str.Equals("32bit", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return CPUBits.Bits32;
|
||||
}
|
||||
else if (str.Equals("64bit", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return CPUBits.Bits64;
|
||||
}
|
||||
else if (str.Equals("intel", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return CPUBits.Both;
|
||||
}
|
||||
|
||||
throw new ApplicationException(string.Format("Invalid bits string '{0}'.", str));
|
||||
}
|
||||
|
||||
public static string CPUBitsToString(CPUBits bits)
|
||||
{
|
||||
switch (bits)
|
||||
{
|
||||
case CPUBits.Bits32:
|
||||
return "32bit";
|
||||
|
||||
case CPUBits.Bits64:
|
||||
return "64bit";
|
||||
|
||||
case CPUBits.Both:
|
||||
return "intel";
|
||||
}
|
||||
|
||||
throw new ApplicationException("bits invalid.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
513
src/BuildUtil/VpnBuilderConfig.cs
Normal file
513
src/BuildUtil/VpnBuilderConfig.cs
Normal file
@ -0,0 +1,513 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Build Utility
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Text;
|
||||
using System.Configuration;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Security.Cryptography;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
using System.IO;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
using System.Net.Security;
|
||||
using System.Reflection;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using CoreUtil;
|
||||
|
||||
namespace BuildUtil
|
||||
{
|
||||
// Build settings
|
||||
public static class BuildConfig
|
||||
{
|
||||
public static readonly int NumMultipleCompileTasks = 4;
|
||||
}
|
||||
|
||||
// Software List
|
||||
public static class BuildSoftwareList
|
||||
{
|
||||
// List creation date and time
|
||||
public static DateTime ListCreatedDateTime = DateTime.Now;
|
||||
|
||||
// ========== Windows ==========
|
||||
// Server and Bridge
|
||||
public static readonly BuildSoftware vpnserver_win32_x86x64_ja =
|
||||
new BuildSoftwareWin32(Software.vpnserver_vpnbridge, 0, 0, "", CpuList.intel, OSList.Windows);
|
||||
|
||||
// Client
|
||||
public static readonly BuildSoftware vpnclient_win32_x86x64_ja =
|
||||
new BuildSoftwareWin32(Software.vpnclient, 0, 0, "", CpuList.intel, OSList.Windows);
|
||||
|
||||
// ========== Linux ==========
|
||||
// Server
|
||||
public static readonly BuildSoftware vpnserver_linux_x86_ja =
|
||||
new BuildSoftwareUnix(Software.vpnserver, 0, 0, "", CpuList.x86, OSList.Linux,
|
||||
"linux-x86-32bit", true, "linux-x86-32bit-3.4.6", false,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnserver_linux_x64_ja =
|
||||
new BuildSoftwareUnix(Software.vpnserver, 0, 0, "", CpuList.x64, OSList.Linux,
|
||||
"linux-x86-64bit", true, "linux-x86-64bit-3.4.6", false,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnserver_linux_arm_ja =
|
||||
new BuildSoftwareUnix(Software.vpnserver, 0, 0, "", CpuList.arm, OSList.Linux,
|
||||
"linux-arm-32bit", false, "linux-arm-32bit-3.4.6", false,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnserver_linux_armeabi_ja =
|
||||
new BuildSoftwareUnix(Software.vpnserver, 0, 0, "", CpuList.armeabi, OSList.Linux,
|
||||
"linux-armeabi-32bit", false, "linux-armeabi-32bit-4.3.2", true,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnserver_linux_mipsel_ja =
|
||||
new BuildSoftwareUnix(Software.vpnserver, 0, 0, "", CpuList.mipsel, OSList.Linux,
|
||||
"linux-mipsel-32bit", false, "linux-mipsel-32bit-3.4.6", false,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnserver_linux_ppc_ja =
|
||||
new BuildSoftwareUnix(Software.vpnserver, 0, 0, "", CpuList.ppc32, OSList.Linux,
|
||||
"linux-ppc-32bit", false, "linux-ppc-32bit-3.4.6", false,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnserver_linux_sh4_ja =
|
||||
new BuildSoftwareUnix(Software.vpnserver, 0, 0, "", CpuList.sh4, OSList.Linux,
|
||||
"linux-sh4-32bit", false, "linux-sh4-32bit-3.4.6", false,
|
||||
null);
|
||||
|
||||
// Client
|
||||
public static readonly BuildSoftware vpnclient_linux_x86_ja =
|
||||
new BuildSoftwareUnix(Software.vpnclient, 0, 0, "", CpuList.x86, OSList.Linux,
|
||||
"linux-x86-32bit", true, "linux-x86-32bit-3.4.6", false,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnclient_linux_x64_ja =
|
||||
new BuildSoftwareUnix(Software.vpnclient, 0, 0, "", CpuList.x64, OSList.Linux,
|
||||
"linux-x86-64bit", true, "linux-x86-64bit-3.4.6", false,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnclient_linux_arm_ja =
|
||||
new BuildSoftwareUnix(Software.vpnclient, 0, 0, "", CpuList.arm, OSList.Linux,
|
||||
"linux-arm-32bit", false, "linux-arm-32bit-3.4.6", false,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnclient_linux_armeabi_ja =
|
||||
new BuildSoftwareUnix(Software.vpnclient, 0, 0, "", CpuList.armeabi, OSList.Linux,
|
||||
"linux-armeabi-32bit", false, "linux-armeabi-32bit-4.3.2", true,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnclient_linux_mipsel_ja =
|
||||
new BuildSoftwareUnix(Software.vpnclient, 0, 0, "", CpuList.mipsel, OSList.Linux,
|
||||
"linux-mipsel-32bit", false, "linux-mipsel-32bit-3.4.6", false,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnclient_linux_ppc_ja =
|
||||
new BuildSoftwareUnix(Software.vpnclient, 0, 0, "", CpuList.ppc32, OSList.Linux,
|
||||
"linux-ppc-32bit", false, "linux-ppc-32bit-3.4.6", false,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnclient_linux_sh4_ja =
|
||||
new BuildSoftwareUnix(Software.vpnclient, 0, 0, "", CpuList.sh4, OSList.Linux,
|
||||
"linux-sh4-32bit", false, "linux-sh4-32bit-3.4.6", false,
|
||||
null);
|
||||
|
||||
// Bridge
|
||||
public static readonly BuildSoftware vpnbridge_linux_x86_ja =
|
||||
new BuildSoftwareUnix(Software.vpnbridge, 0, 0, "", CpuList.x86, OSList.Linux,
|
||||
"linux-x86-32bit", true, "linux-x86-32bit-3.4.6", false,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnbridge_linux_x64_ja =
|
||||
new BuildSoftwareUnix(Software.vpnbridge, 0, 0, "", CpuList.x64, OSList.Linux,
|
||||
"linux-x86-64bit", true, "linux-x86-64bit-3.4.6", false,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnbridge_linux_arm_ja =
|
||||
new BuildSoftwareUnix(Software.vpnbridge, 0, 0, "", CpuList.arm, OSList.Linux,
|
||||
"linux-arm-32bit", false, "linux-arm-32bit-3.4.6", false,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnbridge_linux_armeabi_ja =
|
||||
new BuildSoftwareUnix(Software.vpnbridge, 0, 0, "", CpuList.armeabi, OSList.Linux,
|
||||
"linux-armeabi-32bit", false, "linux-armeabi-32bit-4.3.2", true,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnbridge_linux_mipsel_ja =
|
||||
new BuildSoftwareUnix(Software.vpnbridge, 0, 0, "", CpuList.mipsel, OSList.Linux,
|
||||
"linux-mipsel-32bit", false, "linux-mipsel-32bit-3.4.6", false,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnbridge_linux_ppc_ja =
|
||||
new BuildSoftwareUnix(Software.vpnbridge, 0, 0, "", CpuList.ppc32, OSList.Linux,
|
||||
"linux-ppc-32bit", false, "linux-ppc-32bit-3.4.6", false,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnbridge_linux_sh4_ja =
|
||||
new BuildSoftwareUnix(Software.vpnbridge, 0, 0, "", CpuList.sh4, OSList.Linux,
|
||||
"linux-sh4-32bit", false, "linux-sh4-32bit-3.4.6", false,
|
||||
null);
|
||||
|
||||
|
||||
// ========== FreeBSD ==========
|
||||
// Server
|
||||
public static readonly BuildSoftware vpnserver_bsd_x86_ja =
|
||||
new BuildSoftwareUnix(Software.vpnserver, 0, 0, "", CpuList.x86, OSList.FreeBSD,
|
||||
"freebsd-x86-32bit", true, "freebsd-x86-32bit-3.4.6", false,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnserver_bsd_x64_ja =
|
||||
new BuildSoftwareUnix(Software.vpnserver, 0, 0, "", CpuList.x64, OSList.FreeBSD,
|
||||
"freebsd-x86-64bit", true, "freebsd-x86-64bit-3.4.6", false,
|
||||
null);
|
||||
|
||||
// Bridge
|
||||
public static readonly BuildSoftware vpnbridge_bsd_x86_ja =
|
||||
new BuildSoftwareUnix(Software.vpnbridge, 0, 0, "", CpuList.x86, OSList.FreeBSD,
|
||||
"freebsd-x86-32bit", true, "freebsd-x86-32bit-3.4.6", false,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnbridge_bsd_x64_ja =
|
||||
new BuildSoftwareUnix(Software.vpnbridge, 0, 0, "", CpuList.x64, OSList.FreeBSD,
|
||||
"freebsd-x86-64bit", true, "freebsd-x86-64bit-3.4.6", false,
|
||||
null);
|
||||
|
||||
|
||||
// ========== Mac OS X ==========
|
||||
// Server
|
||||
public static readonly BuildSoftware vpnserver_macos_ppc32_ja =
|
||||
new BuildSoftwareUnix(Software.vpnserver, 0, 0, "", CpuList.ppc32, OSList.MacOS,
|
||||
"macos-ppc-32bit", true, "macos-ppc-32bit-4.0.4", true,
|
||||
"-isysroot /cygdrive/s/CommomDev/xc/common/apple_xcode/xcode_2.4/Developer/SDKs/MacOSX10.4u.sdk");
|
||||
public static readonly BuildSoftware vpnserver_macos_ppc64_ja =
|
||||
new BuildSoftwareUnix(Software.vpnserver, 0, 0, "", CpuList.ppc64, OSList.MacOS,
|
||||
"macos-ppc-64bit", true, "macos-ppc-64bit-4.0.4", true,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnserver_macos_x86_ja =
|
||||
new BuildSoftwareUnix(Software.vpnserver, 0, 0, "", CpuList.x86, OSList.MacOS,
|
||||
"macos-x86-32bit", true, "macos-x86-32bit-4.0.4", true,
|
||||
"-isysroot /cygdrive/s/CommomDev/xc/common/apple_xcode/xcode_2.4/Developer/SDKs/MacOSX10.4u.sdk");
|
||||
public static readonly BuildSoftware vpnserver_macos_x64_ja =
|
||||
new BuildSoftwareUnix(Software.vpnserver, 0, 0, "", CpuList.x64, OSList.MacOS,
|
||||
"macos-x86-64bit", true, "macos-x86-64bit-4.0.4", true,
|
||||
null);
|
||||
|
||||
// Bridge
|
||||
public static readonly BuildSoftware vpnbridge_macos_ppc32_ja =
|
||||
new BuildSoftwareUnix(Software.vpnbridge, 0, 0, "", CpuList.ppc32, OSList.MacOS,
|
||||
"macos-ppc-32bit", true, "macos-ppc-32bit-4.0.4", true,
|
||||
"-isysroot /cygdrive/s/CommomDev/xc/common/apple_xcode/xcode_2.4/Developer/SDKs/MacOSX10.4u.sdk");
|
||||
public static readonly BuildSoftware vpnbridge_macos_ppc64_ja =
|
||||
new BuildSoftwareUnix(Software.vpnbridge, 0, 0, "", CpuList.ppc64, OSList.MacOS,
|
||||
"macos-ppc-64bit", true, "macos-ppc-64bit-4.0.4", true,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnbridge_macos_x86_ja =
|
||||
new BuildSoftwareUnix(Software.vpnbridge, 0, 0, "", CpuList.x86, OSList.MacOS,
|
||||
"macos-x86-32bit", true, "macos-x86-32bit-4.0.4", true,
|
||||
"-isysroot /cygdrive/s/CommomDev/xc/common/apple_xcode/xcode_2.4/Developer/SDKs/MacOSX10.4u.sdk");
|
||||
public static readonly BuildSoftware vpnbridge_macos_x64_ja =
|
||||
new BuildSoftwareUnix(Software.vpnbridge, 0, 0, "", CpuList.x64, OSList.MacOS,
|
||||
"macos-x86-64bit", true, "macos-x86-64bit-4.0.4", true,
|
||||
null);
|
||||
|
||||
// ========== Solaris ==========
|
||||
// Server
|
||||
public static readonly BuildSoftware vpnserver_solaris_sparc32_ja =
|
||||
new BuildSoftwareUnix(Software.vpnserver, 0, 0, "", CpuList.sparc32, OSList.Solaris,
|
||||
"solaris-sparc-32bit", true, "solaris-sparc-32bit-3.4.6", true,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnserver_solaris_sparc64_ja =
|
||||
new BuildSoftwareUnix(Software.vpnserver, 0, 0, "", CpuList.sparc64, OSList.Solaris,
|
||||
"solaris-sparc-64bit", true, "solaris-sparc-64bit-3.4.6", true,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnserver_solaris_x86_ja =
|
||||
new BuildSoftwareUnix(Software.vpnserver, 0, 0, "", CpuList.x86, OSList.Solaris,
|
||||
"solaris-x86-32bit", true, "solaris-x86-32bit-3.4.6", true,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnserver_solaris_x64_ja =
|
||||
new BuildSoftwareUnix(Software.vpnserver, 0, 0, "", CpuList.x64, OSList.Solaris,
|
||||
"solaris-x86-64bit", true, "solaris-x86-64bit-3.4.6", true,
|
||||
null);
|
||||
|
||||
// Bridge
|
||||
public static readonly BuildSoftware vpnbridge_solaris_sparc32_ja =
|
||||
new BuildSoftwareUnix(Software.vpnbridge, 0, 0, "", CpuList.sparc32, OSList.Solaris,
|
||||
"solaris-sparc-32bit", true, "solaris-sparc-32bit-3.4.6", true,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnbridge_solaris_sparc64_ja =
|
||||
new BuildSoftwareUnix(Software.vpnbridge, 0, 0, "", CpuList.sparc64, OSList.Solaris,
|
||||
"solaris-sparc-64bit", true, "solaris-sparc-64bit-3.4.6", true,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnbridge_solaris_x86_ja =
|
||||
new BuildSoftwareUnix(Software.vpnbridge, 0, 0, "", CpuList.x86, OSList.Solaris,
|
||||
"solaris-x86-32bit", true, "solaris-x86-32bit-3.4.6", true,
|
||||
null);
|
||||
public static readonly BuildSoftware vpnbridge_solaris_x64_ja =
|
||||
new BuildSoftwareUnix(Software.vpnbridge, 0, 0, "", CpuList.x64, OSList.Solaris,
|
||||
"solaris-x86-64bit", true, "solaris-x86-64bit-3.4.6", true,
|
||||
null);
|
||||
|
||||
static BuildSoftwareList()
|
||||
{
|
||||
foreach (BuildSoftware soft in List)
|
||||
{
|
||||
BuildSoftwareUnix s = soft as BuildSoftwareUnix;
|
||||
if (s != null)
|
||||
{
|
||||
// Make different settings for each OS
|
||||
if (soft.Os == OSList.Linux)
|
||||
{
|
||||
s.GccMacros.Add("UNIX_LINUX");
|
||||
}
|
||||
else if (soft.Os == OSList.FreeBSD)
|
||||
{
|
||||
s.GccMacros.Add("UNIX_BSD");
|
||||
s.GccMacros.Add("BRIDGE_BPF");
|
||||
s.GccMacros.Add("NO_VLAN");
|
||||
}
|
||||
else if (soft.Os == OSList.MacOS)
|
||||
{
|
||||
s.GccMacros.Add("UNIX_MACOS");
|
||||
s.GccMacros.Add("BRIDGE_PCAP");
|
||||
s.GccMacros.Add("NO_VLAN");
|
||||
}
|
||||
else if (soft.Os == OSList.Solaris)
|
||||
{
|
||||
s.GccMacros.Add("UNIX_SOLARIS");
|
||||
s.GccMacros.Add("NO_VLAN");
|
||||
}
|
||||
if (s.Cpu.Bits == CPUBits.Bits64)
|
||||
{
|
||||
s.GccMacros.Add("CPU_64");
|
||||
}
|
||||
s.GccMacros.Add("CPU_" + s.Cpu.Name.ToUpperInvariant());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static BuildSoftware[] List
|
||||
{
|
||||
get
|
||||
{
|
||||
List<BuildSoftware> o = new List<BuildSoftware>();
|
||||
foreach (FieldInfo fi in typeof(BuildSoftwareList).GetFields(BindingFlags.Static | BindingFlags.Public))
|
||||
if (fi.FieldType == typeof(BuildSoftware))
|
||||
o.Add((BuildSoftware)fi.GetValue(null));
|
||||
return o.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
public static BuildSoftware Find(Software soft, OS os, Cpu cpu)
|
||||
{
|
||||
foreach (BuildSoftware s in List)
|
||||
{
|
||||
if (s.Software == soft && s.Os == os && s.Cpu == cpu)
|
||||
{
|
||||
return s;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// OS List
|
||||
public static class OSList
|
||||
{
|
||||
// Windows
|
||||
public static readonly OS Windows = new OS("windows", "Windows",
|
||||
"Windows 98 / 98 SE / ME / NT 4.0 SP6a / 2000 SP4 / XP SP2, SP3 / Server 2003 SP2 / Vista SP1, SP2 / Server 2008 SP1, SP2 / Hyper-V Server 2008 / 7 SP1 / Server 2008 R2 SP1 / Hyper-V Server 2008 R2 / 8 / Server 2012 / Hyper-V Server 2012 / 8.1 / Server 2012 R2 / Hyper-V Server 2012 R2",
|
||||
new Cpu[]
|
||||
{
|
||||
CpuList.intel,
|
||||
});
|
||||
|
||||
// Linux
|
||||
public static readonly OS Linux = new OS("linux", "Linux",
|
||||
"Linux Kernel 2.4 / 2.6 / 3.x",
|
||||
new Cpu[]
|
||||
{
|
||||
CpuList.x86,
|
||||
CpuList.x64,
|
||||
CpuList.mipsel,
|
||||
CpuList.ppc32,
|
||||
CpuList.ppc64,
|
||||
CpuList.sh4,
|
||||
CpuList.arm,
|
||||
CpuList.armeabi,
|
||||
});
|
||||
|
||||
// FreeBSD
|
||||
public static readonly OS FreeBSD = new OS("freebsd", "FreeBSD",
|
||||
"FreeBSD 5 / 6 / 7 / 8 / 9",
|
||||
new Cpu[]
|
||||
{
|
||||
CpuList.x86,
|
||||
CpuList.x64,
|
||||
});
|
||||
|
||||
// Solaris
|
||||
public static readonly OS Solaris = new OS("solaris", "Solaris",
|
||||
"Solaris 8 / 9 / 10 / 11",
|
||||
new Cpu[]
|
||||
{
|
||||
CpuList.x86,
|
||||
CpuList.x64,
|
||||
CpuList.sparc32,
|
||||
CpuList.sparc64,
|
||||
});
|
||||
|
||||
// Mac OS X
|
||||
public static readonly OS MacOS = new OS("macos", "Mac OS X",
|
||||
"Mac OS X 10.4 Tiger / 10.5 Leopard / 10.6 Snow Leopard / 10.7 Lion / 10.8 Mountain Lion",
|
||||
new Cpu[]
|
||||
{
|
||||
CpuList.x86,
|
||||
CpuList.x64,
|
||||
CpuList.ppc32,
|
||||
CpuList.ppc64,
|
||||
});
|
||||
|
||||
static OSList()
|
||||
{
|
||||
OSList.Windows.IsWindows = true;
|
||||
}
|
||||
|
||||
public static OS[] List
|
||||
{
|
||||
get
|
||||
{
|
||||
List<OS> o = new List<OS>();
|
||||
foreach (FieldInfo fi in typeof(OSList).GetFields(BindingFlags.Static | BindingFlags.Public))
|
||||
if (fi.FieldType == typeof(OS))
|
||||
o.Add((OS)fi.GetValue(null));
|
||||
return o.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
public static OS FindByName(string name)
|
||||
{
|
||||
foreach (OS os in List)
|
||||
{
|
||||
if (os.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return os;
|
||||
}
|
||||
}
|
||||
|
||||
throw new ApplicationException(name);
|
||||
}
|
||||
}
|
||||
|
||||
// CPU List
|
||||
public static class CpuList
|
||||
{
|
||||
public static readonly Cpu x86 = new Cpu("x86", "Intel x86", CPUBits.Bits32);
|
||||
public static readonly Cpu x64 = new Cpu("x64", "Intel x64 / AMD64", CPUBits.Bits64);
|
||||
public static readonly Cpu intel = new Cpu("x86_x64", "Intel", CPUBits.Both);
|
||||
public static readonly Cpu arm = new Cpu("arm", "ARM legacy ABI", CPUBits.Bits32);
|
||||
public static readonly Cpu armeabi = new Cpu("arm_eabi", "ARM EABI", CPUBits.Bits32);
|
||||
public static readonly Cpu mipsel = new Cpu("mips_el", "MIPS Little-Endian", CPUBits.Bits32);
|
||||
public static readonly Cpu ppc32 = new Cpu("powerpc", "PowerPC", CPUBits.Bits32);
|
||||
public static readonly Cpu ppc64 = new Cpu("powerpc64", "PowerPC G5", CPUBits.Bits64);
|
||||
public static readonly Cpu sh4 = new Cpu("sh4", "SH-4", CPUBits.Bits32);
|
||||
public static readonly Cpu sparc32 = new Cpu("sparc", "SPARC", CPUBits.Bits32);
|
||||
public static readonly Cpu sparc64 = new Cpu("sparc64", "SPARC", CPUBits.Bits64);
|
||||
|
||||
public static Cpu[] List
|
||||
{
|
||||
get
|
||||
{
|
||||
List<Cpu> o = new List<Cpu>();
|
||||
foreach (FieldInfo fi in typeof(CpuList).GetFields(BindingFlags.Static | BindingFlags.Public))
|
||||
if (fi.FieldType == typeof(Cpu))
|
||||
o.Add((Cpu)fi.GetValue(null));
|
||||
return o.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
public static Cpu FindByName(string name)
|
||||
{
|
||||
foreach (Cpu c in List)
|
||||
{
|
||||
if (c.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return c;
|
||||
}
|
||||
}
|
||||
|
||||
throw new ApplicationException(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
303
src/BuildUtil/VpnBuilderConfigTypes.cs
Normal file
303
src/BuildUtil/VpnBuilderConfigTypes.cs
Normal file
@ -0,0 +1,303 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Build Utility
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Text;
|
||||
using System.Configuration;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Security.Cryptography;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
using System.IO;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
using System.Net.Security;
|
||||
using System.Reflection;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using CoreUtil;
|
||||
|
||||
namespace BuildUtil
|
||||
{
|
||||
// CPU data
|
||||
public class Cpu
|
||||
{
|
||||
public string Name; // CPU name
|
||||
public string Title; // CPU display name
|
||||
public CPUBits Bits; // Bit length
|
||||
|
||||
public Cpu(string name, string title, CPUBits bits)
|
||||
{
|
||||
this.Name = name;
|
||||
this.Title = title;
|
||||
this.Bits = bits;
|
||||
}
|
||||
}
|
||||
|
||||
// OS data
|
||||
public class OS : ICloneable
|
||||
{
|
||||
public string Name; // OS name
|
||||
public string Title; // OS Display Name
|
||||
public string OSSimpleList; // OS simple list
|
||||
public Cpu[] CpuList; // CPU support list
|
||||
public bool IsWindows = false; // Whether Windows
|
||||
public bool IsOnlyFiles = false; // Whether only EXE file package
|
||||
|
||||
public OS(string name, string title, string simpleList, Cpu[] cpuList)
|
||||
{
|
||||
this.Name = name;
|
||||
this.Title = title;
|
||||
this.OSSimpleList = simpleList;
|
||||
this.CpuList = cpuList;
|
||||
}
|
||||
|
||||
public object Clone()
|
||||
{
|
||||
return this.MemberwiseClone();
|
||||
}
|
||||
}
|
||||
|
||||
// Type of software
|
||||
public enum Software
|
||||
{
|
||||
vpnserver,
|
||||
vpnbridge,
|
||||
vpnclient,
|
||||
vpnserver_vpnbridge,
|
||||
}
|
||||
|
||||
// Class to build the software
|
||||
public class BuildSoftware
|
||||
{
|
||||
public Software Software; // Software
|
||||
public int Version; // Version number
|
||||
public int BuildNumber; // Build Number
|
||||
public string BuildName; // Build name
|
||||
public Cpu Cpu; // CPU
|
||||
public OS Os; // OS
|
||||
public DateTime BuildDate; // Build date
|
||||
|
||||
public BuildSoftware(Software software, int buildNumber, int version, string buildName, Cpu cpu, OS os)
|
||||
{
|
||||
this.Software = software;
|
||||
this.BuildNumber = buildNumber;
|
||||
this.Version = version;
|
||||
this.BuildName = buildName;
|
||||
this.Cpu = cpu;
|
||||
this.Os = os;
|
||||
}
|
||||
|
||||
public void SetBuildNumberVersionName(int buildNumber, int version, string buildName, DateTime date)
|
||||
{
|
||||
this.BuildNumber = buildNumber;
|
||||
this.Version = version;
|
||||
this.BuildName = buildName;
|
||||
this.BuildDate = date;
|
||||
}
|
||||
|
||||
public BuildSoftware(string filename)
|
||||
{
|
||||
filename = Path.GetFileName(filename);
|
||||
|
||||
if (filename.StartsWith(Paths.Prefix, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
filename = filename.Substring(Paths.Prefix.Length);
|
||||
}
|
||||
|
||||
if (filename.EndsWith(".tar.gz", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
filename = Str.ReplaceStr(filename, ".tar.gz", "");
|
||||
}
|
||||
else
|
||||
{
|
||||
filename = Path.GetFileNameWithoutExtension(filename);
|
||||
}
|
||||
char[] sps = {'-'};
|
||||
|
||||
string[] tokens = filename.Split(sps, StringSplitOptions.RemoveEmptyEntries);
|
||||
if (tokens.Length != 8)
|
||||
{
|
||||
throw new ApplicationException(filename);
|
||||
}
|
||||
|
||||
if (tokens[1].StartsWith("v", StringComparison.InvariantCultureIgnoreCase) == false)
|
||||
{
|
||||
throw new ApplicationException(filename);
|
||||
}
|
||||
|
||||
this.Software = (Software)Enum.Parse(typeof(Software), tokens[0], true);
|
||||
this.Version = (int)(double.Parse(tokens[1].Substring(1)) * 100);
|
||||
this.BuildNumber = int.Parse(tokens[2]);
|
||||
this.BuildName = tokens[3];
|
||||
|
||||
string[] ds = tokens[4].Split('.');
|
||||
this.BuildDate = new DateTime(int.Parse(ds[0]), int.Parse(ds[1]), int.Parse(ds[2]));
|
||||
this.Os = OSList.FindByName(tokens[5]);
|
||||
this.Cpu = CpuList.FindByName(tokens[6]);
|
||||
}
|
||||
|
||||
// Generate a string of file name equivalent
|
||||
public virtual string FileNameBaseString
|
||||
{
|
||||
get
|
||||
{
|
||||
return string.Format("{0}-v{6}-{1}-{2}-{8:D4}.{9:D2}.{10:D2}-{4}-{3}-{7}",
|
||||
Paths.Prefix + this.Software.ToString(),
|
||||
this.BuildNumber,
|
||||
this.BuildName,
|
||||
this.Cpu.Name,
|
||||
this.Os.Name,
|
||||
0,
|
||||
BuildHelper.VersionIntToString(this.Version),
|
||||
CPUBitsUtil.CPUBitsToString(this.Cpu.Bits),
|
||||
BuildDate.Year, BuildDate.Month, BuildDate.Day).ToLower();
|
||||
}
|
||||
}
|
||||
|
||||
// Generate an identifier
|
||||
public virtual string IDString
|
||||
{
|
||||
get
|
||||
{
|
||||
return string.Format("{0}-{2}-{3}-{4}",
|
||||
Paths.Prefix + this.Software.ToString(),
|
||||
0,
|
||||
this.Os.Name,
|
||||
this.Cpu.Name,
|
||||
CPUBitsUtil.CPUBitsToString(this.Cpu.Bits));
|
||||
}
|
||||
}
|
||||
|
||||
// Generate a title string
|
||||
public virtual string TitleString
|
||||
{
|
||||
get
|
||||
{
|
||||
return string.Format("{0} (Ver {2}, Build {1}, {3}) for {5}", BuildHelper.GetSoftwareTitle(this.Software),
|
||||
this.BuildNumber, BuildHelper.VersionIntToString(this.Version), this.Cpu.Title, 0, this.Os.Title);
|
||||
}
|
||||
}
|
||||
|
||||
// Generate extension
|
||||
public virtual string OutputFileExt
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.Os.IsWindows)
|
||||
{
|
||||
return ".exe";
|
||||
}
|
||||
else
|
||||
{
|
||||
return ".tar.gz";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Generate the output file name
|
||||
public virtual string OutputFileName
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.FileNameBaseString + this.OutputFileExt;
|
||||
}
|
||||
}
|
||||
|
||||
// Run the build
|
||||
public virtual void Build()
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
282
src/BuildUtil/Web References/HvSignService/Reference.cs
Normal file
282
src/BuildUtil/Web References/HvSignService/Reference.cs
Normal file
@ -0,0 +1,282 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// このコードはツールによって生成されました。
|
||||
// ランタイム バージョン:2.0.50727.5466
|
||||
//
|
||||
// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、
|
||||
// コードが再生成されるときに損失したりします。
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
//
|
||||
// このソース コードは Microsoft.VSDesigner、バージョン 2.0.50727.5466 によって自動生成されました。
|
||||
//
|
||||
#pragma warning disable 1591
|
||||
|
||||
namespace BuildUtil.HvSignService {
|
||||
using System.Diagnostics;
|
||||
using System.Web.Services;
|
||||
using System.ComponentModel;
|
||||
using System.Web.Services.Protocols;
|
||||
using System;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.5420")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
[System.Web.Services.WebServiceBindingAttribute(Name="SignSoap", Namespace="http://hvsigncode/")]
|
||||
public partial class Sign : System.Web.Services.Protocols.SoapHttpClientProtocol {
|
||||
|
||||
private System.Threading.SendOrPostCallback HelloWorldOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback ExecSignOperationCompleted;
|
||||
|
||||
private bool useDefaultCredentialsSetExplicitly;
|
||||
|
||||
/// <remarks/>
|
||||
public Sign() {
|
||||
this.Url = global::BuildUtil.Properties.Settings.Default.BuildUtilTmp_HvSignService_Sign;
|
||||
if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
|
||||
this.UseDefaultCredentials = true;
|
||||
this.useDefaultCredentialsSetExplicitly = false;
|
||||
}
|
||||
else {
|
||||
this.useDefaultCredentialsSetExplicitly = true;
|
||||
}
|
||||
}
|
||||
|
||||
public new string Url {
|
||||
get {
|
||||
return base.Url;
|
||||
}
|
||||
set {
|
||||
if ((((this.IsLocalFileSystemWebService(base.Url) == true)
|
||||
&& (this.useDefaultCredentialsSetExplicitly == false))
|
||||
&& (this.IsLocalFileSystemWebService(value) == false))) {
|
||||
base.UseDefaultCredentials = false;
|
||||
}
|
||||
base.Url = value;
|
||||
}
|
||||
}
|
||||
|
||||
public new bool UseDefaultCredentials {
|
||||
get {
|
||||
return base.UseDefaultCredentials;
|
||||
}
|
||||
set {
|
||||
base.UseDefaultCredentials = value;
|
||||
this.useDefaultCredentialsSetExplicitly = true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public event HelloWorldCompletedEventHandler HelloWorldCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event ExecSignCompletedEventHandler ExecSignCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://hvsigncode/HelloWorld", RequestNamespace="http://hvsigncode/", ResponseNamespace="http://hvsigncode/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public string HelloWorld() {
|
||||
object[] results = this.Invoke("HelloWorld", new object[0]);
|
||||
return ((string)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void HelloWorldAsync() {
|
||||
this.HelloWorldAsync(null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void HelloWorldAsync(object userState) {
|
||||
if ((this.HelloWorldOperationCompleted == null)) {
|
||||
this.HelloWorldOperationCompleted = new System.Threading.SendOrPostCallback(this.OnHelloWorldOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("HelloWorld", new object[0], this.HelloWorldOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnHelloWorldOperationCompleted(object arg) {
|
||||
if ((this.HelloWorldCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.HelloWorldCompleted(this, new HelloWorldCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://hvsigncode/ExecSign", RequestNamespace="http://hvsigncode/", ResponseNamespace="http://hvsigncode/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public string ExecSign(string src_filename, bool driver_mode, string description, int cert_id) {
|
||||
object[] results = this.Invoke("ExecSign", new object[] {
|
||||
src_filename,
|
||||
driver_mode,
|
||||
description,
|
||||
cert_id});
|
||||
return ((string)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void ExecSignAsync(string src_filename, bool driver_mode, string description, int cert_id) {
|
||||
this.ExecSignAsync(src_filename, driver_mode, description, cert_id, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void ExecSignAsync(string src_filename, bool driver_mode, string description, int cert_id, object userState) {
|
||||
if ((this.ExecSignOperationCompleted == null)) {
|
||||
this.ExecSignOperationCompleted = new System.Threading.SendOrPostCallback(this.OnExecSignOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("ExecSign", new object[] {
|
||||
src_filename,
|
||||
driver_mode,
|
||||
description,
|
||||
cert_id}, this.ExecSignOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnExecSignOperationCompleted(object arg) {
|
||||
if ((this.ExecSignCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.ExecSignCompleted(this, new ExecSignCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public new void CancelAsync(object userState) {
|
||||
base.CancelAsync(userState);
|
||||
}
|
||||
|
||||
private bool IsLocalFileSystemWebService(string url) {
|
||||
if (((url == null)
|
||||
|| (url == string.Empty))) {
|
||||
return false;
|
||||
}
|
||||
System.Uri wsUri = new System.Uri(url);
|
||||
if (((wsUri.Port >= 1024)
|
||||
&& (string.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) == 0))) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.5420")]
|
||||
public delegate void HelloWorldCompletedEventHandler(object sender, HelloWorldCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.5420")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
public partial class HelloWorldCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||
|
||||
private object[] results;
|
||||
|
||||
internal HelloWorldCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||
base(exception, cancelled, userState) {
|
||||
this.results = results;
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public string Result {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((string)(this.results[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.5420")]
|
||||
public delegate void ExecSignCompletedEventHandler(object sender, ExecSignCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.5420")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
public partial class ExecSignCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||
|
||||
private object[] results;
|
||||
|
||||
internal ExecSignCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||
base(exception, cancelled, userState) {
|
||||
this.results = results;
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public string Result {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((string)(this.results[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#pragma warning restore 1591
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
6
src/BuildUtil/Web References/HvSignService/Sign.disco
Normal file
6
src/BuildUtil/Web References/HvSignService/Sign.disco
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<discovery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/disco/">
|
||||
<contractRef ref="http://hvsigncode/Sign.asmx?wsdl" docRef="http://hvsigncode/Sign.asmx" xmlns="http://schemas.xmlsoap.org/disco/scl/" />
|
||||
<soap address="http://hvsigncode/Sign.asmx" xmlns:q1="http://hvsigncode/" binding="q1:SignSoap" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
|
||||
<soap address="http://hvsigncode/Sign.asmx" xmlns:q2="http://hvsigncode/" binding="q2:SignSoap12" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
|
||||
</discovery>
|
106
src/BuildUtil/Web References/HvSignService/Sign.wsdl
Normal file
106
src/BuildUtil/Web References/HvSignService/Sign.wsdl
Normal file
@ -0,0 +1,106 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://hvsigncode/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://hvsigncode/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
|
||||
<wsdl:types>
|
||||
<s:schema elementFormDefault="qualified" targetNamespace="http://hvsigncode/">
|
||||
<s:element name="HelloWorld">
|
||||
<s:complexType />
|
||||
</s:element>
|
||||
<s:element name="HelloWorldResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="ExecSign">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="src_filename" type="s:string" />
|
||||
<s:element minOccurs="1" maxOccurs="1" name="driver_mode" type="s:boolean" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="description" type="s:string" />
|
||||
<s:element minOccurs="1" maxOccurs="1" name="cert_id" type="s:int" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="ExecSignResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="ExecSignResult" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
</s:schema>
|
||||
</wsdl:types>
|
||||
<wsdl:message name="HelloWorldSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:HelloWorld" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="HelloWorldSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:HelloWorldResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="ExecSignSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:ExecSign" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="ExecSignSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:ExecSignResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:portType name="SignSoap">
|
||||
<wsdl:operation name="HelloWorld">
|
||||
<wsdl:input message="tns:HelloWorldSoapIn" />
|
||||
<wsdl:output message="tns:HelloWorldSoapOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="ExecSign">
|
||||
<wsdl:input message="tns:ExecSignSoapIn" />
|
||||
<wsdl:output message="tns:ExecSignSoapOut" />
|
||||
</wsdl:operation>
|
||||
</wsdl:portType>
|
||||
<wsdl:binding name="SignSoap" type="tns:SignSoap">
|
||||
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
|
||||
<wsdl:operation name="HelloWorld">
|
||||
<soap:operation soapAction="http://hvsigncode/HelloWorld" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="ExecSign">
|
||||
<soap:operation soapAction="http://hvsigncode/ExecSign" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
<wsdl:binding name="SignSoap12" type="tns:SignSoap">
|
||||
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
|
||||
<wsdl:operation name="HelloWorld">
|
||||
<soap12:operation soapAction="http://hvsigncode/HelloWorld" style="document" />
|
||||
<wsdl:input>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="ExecSign">
|
||||
<soap12:operation soapAction="http://hvsigncode/ExecSign" style="document" />
|
||||
<wsdl:input>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
<wsdl:service name="Sign">
|
||||
<wsdl:port name="SignSoap" binding="tns:SignSoap">
|
||||
<soap:address location="http://hvsigncode/Sign.asmx" />
|
||||
</wsdl:port>
|
||||
<wsdl:port name="SignSoap12" binding="tns:SignSoap12">
|
||||
<soap12:address location="http://hvsigncode/Sign.asmx" />
|
||||
</wsdl:port>
|
||||
</wsdl:service>
|
||||
</wsdl:definitions>
|
281
src/BuildUtil/Web References/SignService/Reference.cs
Normal file
281
src/BuildUtil/Web References/SignService/Reference.cs
Normal file
@ -0,0 +1,281 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// このコードはツールによって生成されました。
|
||||
// ランタイム バージョン:2.0.50727.4927
|
||||
//
|
||||
// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、
|
||||
// コードが再生成されるときに損失したりします。
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
//
|
||||
// このソース コードは Microsoft.VSDesigner、バージョン 2.0.50727.4927 によって自動生成されました。
|
||||
//
|
||||
#pragma warning disable 1591
|
||||
|
||||
namespace BuildUtil.SignService {
|
||||
using System.Diagnostics;
|
||||
using System.Web.Services;
|
||||
using System.ComponentModel;
|
||||
using System.Web.Services.Protocols;
|
||||
using System;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
[System.Web.Services.WebServiceBindingAttribute(Name="SignSoap", Namespace="http://dv/Sign/")]
|
||||
public partial class Sign : System.Web.Services.Protocols.SoapHttpClientProtocol {
|
||||
|
||||
private System.Threading.SendOrPostCallback HelloWorldOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback DoSignOperationCompleted;
|
||||
|
||||
private bool useDefaultCredentialsSetExplicitly;
|
||||
|
||||
/// <remarks/>
|
||||
public Sign() {
|
||||
this.Url = global::BuildUtil.Properties.Settings.Default.BuildUtil_SignService_Sign;
|
||||
if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
|
||||
this.UseDefaultCredentials = true;
|
||||
this.useDefaultCredentialsSetExplicitly = false;
|
||||
}
|
||||
else {
|
||||
this.useDefaultCredentialsSetExplicitly = true;
|
||||
}
|
||||
}
|
||||
|
||||
public new string Url {
|
||||
get {
|
||||
return base.Url;
|
||||
}
|
||||
set {
|
||||
if ((((this.IsLocalFileSystemWebService(base.Url) == true)
|
||||
&& (this.useDefaultCredentialsSetExplicitly == false))
|
||||
&& (this.IsLocalFileSystemWebService(value) == false))) {
|
||||
base.UseDefaultCredentials = false;
|
||||
}
|
||||
base.Url = value;
|
||||
}
|
||||
}
|
||||
|
||||
public new bool UseDefaultCredentials {
|
||||
get {
|
||||
return base.UseDefaultCredentials;
|
||||
}
|
||||
set {
|
||||
base.UseDefaultCredentials = value;
|
||||
this.useDefaultCredentialsSetExplicitly = true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public event HelloWorldCompletedEventHandler HelloWorldCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event DoSignCompletedEventHandler DoSignCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://dv/Sign/HelloWorld", RequestNamespace="http://dv/Sign/", ResponseNamespace="http://dv/Sign/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public string HelloWorld() {
|
||||
object[] results = this.Invoke("HelloWorld", new object[0]);
|
||||
return ((string)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void HelloWorldAsync() {
|
||||
this.HelloWorldAsync(null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void HelloWorldAsync(object userState) {
|
||||
if ((this.HelloWorldOperationCompleted == null)) {
|
||||
this.HelloWorldOperationCompleted = new System.Threading.SendOrPostCallback(this.OnHelloWorldOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("HelloWorld", new object[0], this.HelloWorldOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnHelloWorldOperationCompleted(object arg) {
|
||||
if ((this.HelloWorldCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.HelloWorldCompleted(this, new HelloWorldCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://dv/Sign/DoSign", RequestNamespace="http://dv/Sign/", ResponseNamespace="http://dv/Sign/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
[return: System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")]
|
||||
public byte[] DoSign([System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")] byte[] srcData, bool driverMode, string description) {
|
||||
object[] results = this.Invoke("DoSign", new object[] {
|
||||
srcData,
|
||||
driverMode,
|
||||
description});
|
||||
return ((byte[])(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void DoSignAsync(byte[] srcData, bool driverMode, string description) {
|
||||
this.DoSignAsync(srcData, driverMode, description, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void DoSignAsync(byte[] srcData, bool driverMode, string description, object userState) {
|
||||
if ((this.DoSignOperationCompleted == null)) {
|
||||
this.DoSignOperationCompleted = new System.Threading.SendOrPostCallback(this.OnDoSignOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("DoSign", new object[] {
|
||||
srcData,
|
||||
driverMode,
|
||||
description}, this.DoSignOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnDoSignOperationCompleted(object arg) {
|
||||
if ((this.DoSignCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.DoSignCompleted(this, new DoSignCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public new void CancelAsync(object userState) {
|
||||
base.CancelAsync(userState);
|
||||
}
|
||||
|
||||
private bool IsLocalFileSystemWebService(string url) {
|
||||
if (((url == null)
|
||||
|| (url == string.Empty))) {
|
||||
return false;
|
||||
}
|
||||
System.Uri wsUri = new System.Uri(url);
|
||||
if (((wsUri.Port >= 1024)
|
||||
&& (string.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) == 0))) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")]
|
||||
public delegate void HelloWorldCompletedEventHandler(object sender, HelloWorldCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
public partial class HelloWorldCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||
|
||||
private object[] results;
|
||||
|
||||
internal HelloWorldCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||
base(exception, cancelled, userState) {
|
||||
this.results = results;
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public string Result {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((string)(this.results[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")]
|
||||
public delegate void DoSignCompletedEventHandler(object sender, DoSignCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.4927")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
public partial class DoSignCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||
|
||||
private object[] results;
|
||||
|
||||
internal DoSignCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||
base(exception, cancelled, userState) {
|
||||
this.results = results;
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public byte[] Result {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((byte[])(this.results[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#pragma warning restore 1591
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
6
src/BuildUtil/Web References/SignService/Sign.disco
Normal file
6
src/BuildUtil/Web References/SignService/Sign.disco
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<discovery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/disco/">
|
||||
<contractRef ref="http://dv/Sign/Sign.asmx?wsdl" docRef="http://dv/Sign/Sign.asmx" xmlns="http://schemas.xmlsoap.org/disco/scl/" />
|
||||
<soap address="http://dv/Sign/Sign.asmx" xmlns:q1="http://dv/Sign/" binding="q1:SignSoap" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
|
||||
<soap address="http://dv/Sign/Sign.asmx" xmlns:q2="http://dv/Sign/" binding="q2:SignSoap12" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
|
||||
</discovery>
|
105
src/BuildUtil/Web References/SignService/Sign.wsdl
Normal file
105
src/BuildUtil/Web References/SignService/Sign.wsdl
Normal file
@ -0,0 +1,105 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://dv/Sign/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://dv/Sign/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
|
||||
<wsdl:types>
|
||||
<s:schema elementFormDefault="qualified" targetNamespace="http://dv/Sign/">
|
||||
<s:element name="HelloWorld">
|
||||
<s:complexType />
|
||||
</s:element>
|
||||
<s:element name="HelloWorldResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="DoSign">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="srcData" type="s:base64Binary" />
|
||||
<s:element minOccurs="1" maxOccurs="1" name="driverMode" type="s:boolean" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="description" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="DoSignResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="DoSignResult" type="s:base64Binary" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
</s:schema>
|
||||
</wsdl:types>
|
||||
<wsdl:message name="HelloWorldSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:HelloWorld" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="HelloWorldSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:HelloWorldResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="DoSignSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:DoSign" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="DoSignSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:DoSignResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:portType name="SignSoap">
|
||||
<wsdl:operation name="HelloWorld">
|
||||
<wsdl:input message="tns:HelloWorldSoapIn" />
|
||||
<wsdl:output message="tns:HelloWorldSoapOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="DoSign">
|
||||
<wsdl:input message="tns:DoSignSoapIn" />
|
||||
<wsdl:output message="tns:DoSignSoapOut" />
|
||||
</wsdl:operation>
|
||||
</wsdl:portType>
|
||||
<wsdl:binding name="SignSoap" type="tns:SignSoap">
|
||||
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
|
||||
<wsdl:operation name="HelloWorld">
|
||||
<soap:operation soapAction="http://dv/Sign/HelloWorld" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="DoSign">
|
||||
<soap:operation soapAction="http://dv/Sign/DoSign" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
<wsdl:binding name="SignSoap12" type="tns:SignSoap">
|
||||
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
|
||||
<wsdl:operation name="HelloWorld">
|
||||
<soap12:operation soapAction="http://dv/Sign/HelloWorld" style="document" />
|
||||
<wsdl:input>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="DoSign">
|
||||
<soap12:operation soapAction="http://dv/Sign/DoSign" style="document" />
|
||||
<wsdl:input>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
<wsdl:service name="Sign">
|
||||
<wsdl:port name="SignSoap" binding="tns:SignSoap">
|
||||
<soap:address location="http://dv/Sign/Sign.asmx" />
|
||||
</wsdl:port>
|
||||
<wsdl:port name="SignSoap12" binding="tns:SignSoap12">
|
||||
<soap12:address location="http://dv/Sign/Sign.asmx" />
|
||||
</wsdl:port>
|
||||
</wsdl:service>
|
||||
</wsdl:definitions>
|
160
src/BuildUtil/Win32BuildSoftware.cs
Normal file
160
src/BuildUtil/Win32BuildSoftware.cs
Normal file
@ -0,0 +1,160 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Build Utility
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Text;
|
||||
using System.Configuration;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Security.Cryptography;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
using System.IO;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
using System.Net.Security;
|
||||
using System.Reflection;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using CoreUtil;
|
||||
|
||||
namespace BuildUtil
|
||||
{
|
||||
// Build Win32 software
|
||||
public class BuildSoftwareWin32 : BuildSoftware
|
||||
{
|
||||
public BuildSoftwareWin32(Software software, int buildNumber, int version, string buildName, Cpu cpu, OS os)
|
||||
: base(software, buildNumber, version, buildName, cpu, os)
|
||||
{
|
||||
}
|
||||
|
||||
// Run the build
|
||||
public override void Build()
|
||||
{
|
||||
Semaphore sem = new Semaphore(BuildConfig.NumMultipleCompileTasks, BuildConfig.NumMultipleCompileTasks, "vpn_build_cross");
|
||||
Con.WriteLine("Waiting for Semaphore...");
|
||||
sem.WaitOne();
|
||||
Con.WriteLine("Done.");
|
||||
try
|
||||
{
|
||||
// Run the build
|
||||
buildInstaller();
|
||||
}
|
||||
finally
|
||||
{
|
||||
sem.Release();
|
||||
}
|
||||
}
|
||||
|
||||
// Build the installer
|
||||
void buildInstaller()
|
||||
{
|
||||
string outFileName = Path.Combine(Paths.ReleaseDir, this.OutputFileName);
|
||||
|
||||
string vpnsetup_exe = Path.Combine(Paths.BinDirName, "vpnsetup.exe");
|
||||
|
||||
try
|
||||
{
|
||||
File.Delete(outFileName);
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
|
||||
Win32BuildUtil.ExecCommand(vpnsetup_exe, string.Format("/SFXMODE:{1} /SFXOUT:\"{0}\"",
|
||||
outFileName, Software.ToString()));
|
||||
|
||||
CodeSign.SignFile(outFileName, outFileName, "VPN Software", false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
1063
src/BuildUtil/Win32BuildUtil.cs
Normal file
1063
src/BuildUtil/Win32BuildUtil.cs
Normal file
File diff suppressed because it is too large
Load Diff
18
src/BuildUtil/app.config
Normal file
18
src/BuildUtil/app.config
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
|
||||
<section name="BuildUtil.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
||||
</sectionGroup>
|
||||
</configSections>
|
||||
<applicationSettings>
|
||||
<BuildUtil.Properties.Settings>
|
||||
<setting name="BuildUtil_SignService_Sign" serializeAs="String">
|
||||
<value>http://dv/Sign/Sign.asmx</value>
|
||||
</setting>
|
||||
<setting name="BuildUtilTmp_HvSignService_Sign" serializeAs="String">
|
||||
<value>http://hvsigncode/Sign.asmx</value>
|
||||
</setting>
|
||||
</BuildUtil.Properties.Settings>
|
||||
</applicationSettings>
|
||||
</configuration>
|
1419
src/Cedar/Account.c
Normal file
1419
src/Cedar/Account.c
Normal file
File diff suppressed because it is too large
Load Diff
293
src/Cedar/Account.h
Normal file
293
src/Cedar/Account.h
Normal file
@ -0,0 +1,293 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// Account.h
|
||||
// Header of Account.c
|
||||
|
||||
#ifndef ACCOUNT_H
|
||||
#define ACCOUNT_H
|
||||
|
||||
// Policy item
|
||||
struct POLICY_ITEM
|
||||
{
|
||||
UINT Index;
|
||||
bool TypeInt;
|
||||
bool AllowZero;
|
||||
UINT MinValue;
|
||||
UINT MaxValue;
|
||||
UINT DefaultValue;
|
||||
char *FormatStr;
|
||||
};
|
||||
|
||||
// Policy
|
||||
struct POLICY
|
||||
{
|
||||
// For Ver 2.0
|
||||
bool Access; // Grant access
|
||||
bool DHCPFilter; // Filter DHCP packets (IPv4)
|
||||
bool DHCPNoServer; // Prohibit the behavior of the DHCP server (IPv4)
|
||||
bool DHCPForce; // Force DHCP-assigned IP address (IPv4)
|
||||
bool NoBridge; // Prohibit the bridge behavior
|
||||
bool NoRouting; // Prohibit the router behavior (IPv4)
|
||||
bool CheckMac; // Prohibit the duplicate MAC address
|
||||
bool CheckIP; // Prohibit a duplicate IP address (IPv4)
|
||||
bool ArpDhcpOnly; // Prohibit the broadcast other than ARP, DHCP, ICMPv6
|
||||
bool PrivacyFilter; // Privacy filter mode
|
||||
bool NoServer; // Prohibit to operate as a TCP/IP server (IPv4)
|
||||
bool NoBroadcastLimiter; // Not to limit the number of broadcast
|
||||
bool MonitorPort; // Allow monitoring mode
|
||||
UINT MaxConnection; // Maximum number of TCP connections
|
||||
UINT TimeOut; // Communication time-out period
|
||||
UINT MaxMac; // Maximum number of MAC address
|
||||
UINT MaxIP; // Maximum number of IP address (IPv4)
|
||||
UINT MaxUpload; // Upload bandwidth
|
||||
UINT MaxDownload; // Download bandwidth
|
||||
bool FixPassword; // User can not change password
|
||||
UINT MultiLogins; // Multiple logins limit
|
||||
bool NoQoS; // Prohibit the use of VoIP / QoS features
|
||||
|
||||
// For Ver 3.0
|
||||
bool RSandRAFilter; // Filter the Router Solicitation / Advertising packet (IPv6)
|
||||
bool RAFilter; // Filter the router advertisement packet (IPv6)
|
||||
bool DHCPv6Filter; // Filter DHCP packets (IPv6)
|
||||
bool DHCPv6NoServer; // Prohibit the behavior of the DHCP server (IPv6)
|
||||
bool NoRoutingV6; // Prohibit the router behavior (IPv6)
|
||||
bool CheckIPv6; // Prohibit the duplicate IP address (IPv6)
|
||||
bool NoServerV6; // Prohibit to operate as a TCP/IP server (IPv6)
|
||||
UINT MaxIPv6; // Maximum number of IP address (IPv6)
|
||||
bool NoSavePassword; // Prohibit to save the password in the VPN Client
|
||||
UINT AutoDisconnect; // Disconnect the VPN Client automatically at a certain period of time
|
||||
bool FilterIPv4; // Filter all IPv4 packets
|
||||
bool FilterIPv6; // Filter all IPv6 packets
|
||||
bool FilterNonIP; // Filter all non-IP packets
|
||||
bool NoIPv6DefaultRouterInRA; // Delete the default router specification from the IPv6 router advertisement
|
||||
bool NoIPv6DefaultRouterInRAWhenIPv6; // Delete the default router specification from the IPv6 router advertisement (Enable IPv6 connection)
|
||||
UINT VLanId; // Specify the VLAN ID
|
||||
|
||||
bool Ver3; // Whether version 3.0
|
||||
};
|
||||
|
||||
// Group
|
||||
struct USERGROUP
|
||||
{
|
||||
LOCK *lock; // Lock
|
||||
REF *ref; // Reference counter
|
||||
char *Name; // Group name
|
||||
wchar_t *RealName; // Display name
|
||||
wchar_t *Note; // Note
|
||||
POLICY *Policy; // Policy
|
||||
TRAFFIC *Traffic; // Traffic data
|
||||
};
|
||||
|
||||
// User
|
||||
struct USER
|
||||
{
|
||||
LOCK *lock; // Lock
|
||||
REF *ref; // Reference counter
|
||||
char *Name; // User name
|
||||
wchar_t *RealName; // Real name
|
||||
wchar_t *Note; // Note
|
||||
char *GroupName; // Group name
|
||||
USERGROUP *Group; // Group
|
||||
UINT AuthType; // Authentication type
|
||||
void *AuthData; // Authentication data
|
||||
UINT64 CreatedTime; // Creation date and time
|
||||
UINT64 UpdatedTime; // Updating date
|
||||
UINT64 ExpireTime; // Expiration date
|
||||
UINT64 LastLoginTime; // Last login time
|
||||
UINT NumLogin; // Total number of logins
|
||||
POLICY *Policy; // Policy
|
||||
TRAFFIC *Traffic; // Traffic data
|
||||
};
|
||||
|
||||
// Password authentication data
|
||||
struct AUTHPASSWORD
|
||||
{
|
||||
UCHAR HashedKey[SHA1_SIZE]; // Hashed passwords
|
||||
UCHAR NtLmSecureHash[MD5_SIZE]; // Encrypted password for the NTLM
|
||||
};
|
||||
|
||||
// User certificate authentication data
|
||||
struct AUTHUSERCERT
|
||||
{
|
||||
X *UserX; // X509 certificate for the user
|
||||
};
|
||||
|
||||
// Root certification authority authentication data
|
||||
struct AUTHROOTCERT
|
||||
{
|
||||
X_SERIAL *Serial; // Serial number
|
||||
wchar_t *CommonName; // CommonName
|
||||
};
|
||||
|
||||
// Radius authentication data
|
||||
struct AUTHRADIUS
|
||||
{
|
||||
wchar_t *RadiusUsername; // User name in the Radius
|
||||
};
|
||||
|
||||
// Windows NT authentication data
|
||||
struct AUTHNT
|
||||
{
|
||||
wchar_t *NtUsername; // User name on NT
|
||||
};
|
||||
|
||||
|
||||
|
||||
// Macro
|
||||
#define POLICY_CURRENT_VERSION 3
|
||||
#define NUM_POLICY_ITEM ((sizeof(POLICY) / sizeof(UINT)) - 1)
|
||||
#define NUM_POLICY_ITEM_FOR_VER2 22
|
||||
#define NUM_POLICY_ITEM_FOR_VER3 38
|
||||
|
||||
#define IS_POLICY_FOR_VER2(index) (((index) >= 0) && ((index) < NUM_POLICY_ITEM_FOR_VER2))
|
||||
#define IS_POLICY_FOR_VER3(index) (((index) >= 0) && ((index) < NUM_POLICY_ITEM_FOR_VER3))
|
||||
|
||||
#define IS_POLICY_FOR_CURRENT_VER(index, ver) ((ver) >= 3 ? IS_POLICY_FOR_VER3(index) : IS_POLICY_FOR_VER2(index))
|
||||
|
||||
#define POLICY_BOOL(p, i) (((bool *)(p))[(i)])
|
||||
#define POLICY_INT(p, i) (((UINT *)(p))[(i)])
|
||||
|
||||
extern POLICY_ITEM policy_item[];
|
||||
|
||||
|
||||
|
||||
|
||||
// Function prototype
|
||||
int CompareUserName(void *p1, void *p2);
|
||||
int CompareGroupName(void *p1, void *p2);
|
||||
void AcLock(HUB *h);
|
||||
void AcUnlock(HUB *h);
|
||||
USERGROUP *NewGroup(char *name, wchar_t *realname, wchar_t *note);
|
||||
void ReleaseGroup(USERGROUP *g);
|
||||
void CleanupGroup(USERGROUP *g);
|
||||
USER *NewUser(char *name, wchar_t *realname, wchar_t *note, UINT authtype, void *authdata);
|
||||
void ReleaseUser(USER *u);
|
||||
void CleanupUser(USER *u);
|
||||
void FreeAuthData(UINT authtype, void *authdata);
|
||||
bool AcAddUser(HUB *h, USER *u);
|
||||
bool AcAddGroup(HUB *h, USERGROUP *g);
|
||||
USER *AcGetUser(HUB *h, char *name);
|
||||
USERGROUP *AcGetGroup(HUB *h, char *name);
|
||||
bool AcIsUser(HUB *h, char *name);
|
||||
bool AcIsGroup(HUB *h, char *name);
|
||||
bool AcDeleteUser(HUB *h, char *name);
|
||||
bool AcDeleteGroup(HUB *h, char *name);
|
||||
void JoinUserToGroup(USER *u, USERGROUP *g);
|
||||
void SetUserTraffic(USER *u, TRAFFIC *t);
|
||||
void SetGroupTraffic(USERGROUP *g, TRAFFIC *t);
|
||||
void AddUserTraffic(USER *u, TRAFFIC *diff);
|
||||
void AddGroupTraffic(USERGROUP *g, TRAFFIC *diff);
|
||||
void SetUserAuthData(USER *u, UINT authtype, void *authdata);
|
||||
void *NewPasswordAuthData(char *username, char *password);
|
||||
void *NewPasswordAuthDataRaw(UCHAR *hashed_password, UCHAR *ntlm_secure_hash);
|
||||
void *NewUserCertAuthData(X *x);
|
||||
void *NewRootCertAuthData(X_SERIAL *serial, wchar_t *common_name);
|
||||
void *NewRadiusAuthData(wchar_t *username);
|
||||
void *NewNTAuthData(wchar_t *username);
|
||||
void HashPassword(void *dst, char *username, char *password);
|
||||
POLICY *GetDefaultPolicy();
|
||||
POLICY *ClonePolicy(POLICY *policy);
|
||||
void SetUserPolicy(USER *u, POLICY *policy);
|
||||
void OverwritePolicy(POLICY **target, POLICY *p);
|
||||
POLICY *GetUserPolicy(USER *u);
|
||||
void SetGroupPolicy(USERGROUP *g, POLICY *policy);
|
||||
POLICY *GetGroupPolicy(USERGROUP *g);
|
||||
wchar_t *GetPolicyTitle(UINT id);
|
||||
wchar_t *GetPolicyDescription(UINT id);
|
||||
bool IsUserName(char *name);
|
||||
void *CopyAuthData(void *authdata, UINT authtype);
|
||||
UINT PolicyNum();
|
||||
bool PolicyIsSupportedForCascade(UINT i);
|
||||
UINT PolicyStrToId(char *name);
|
||||
char *PolicyIdToStr(UINT i);
|
||||
POLICY_ITEM *GetPolicyItem(UINT id);
|
||||
void GetPolicyValueRangeStr(wchar_t *str, UINT size, UINT id);
|
||||
void FormatPolicyValue(wchar_t *str, UINT size, UINT id, UINT value);
|
||||
char *NormalizePolicyName(char *name);
|
||||
|
||||
|
||||
#endif // ACCOUNT_H
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
13742
src/Cedar/Admin.c
Normal file
13742
src/Cedar/Admin.c
Normal file
File diff suppressed because it is too large
Load Diff
1505
src/Cedar/Admin.h
Normal file
1505
src/Cedar/Admin.h
Normal file
File diff suppressed because it is too large
Load Diff
658
src/Cedar/AzureClient.c
Normal file
658
src/Cedar/AzureClient.c
Normal file
@ -0,0 +1,658 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// AzureClient.c
|
||||
// VPN Azure Client
|
||||
|
||||
#include "CedarPch.h"
|
||||
|
||||
// Wait for connection request
|
||||
void AcWaitForRequest(AZURE_CLIENT *ac, SOCK *s, AZURE_PARAM *param)
|
||||
{
|
||||
// Validate arguments
|
||||
if (ac == NULL || s == NULL || param == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
while (ac->Halt == false)
|
||||
{
|
||||
UCHAR uc;
|
||||
|
||||
// Receive 1 byte
|
||||
if (RecvAll(s, &uc, 1, false) == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (uc != 0)
|
||||
{
|
||||
// Receive a Pack
|
||||
PACK *p = RecvPackWithHash(s);
|
||||
|
||||
if (p == NULL)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Verify contents of Pack
|
||||
char opcode[MAX_SIZE];
|
||||
char cipher_name[MAX_SIZE];
|
||||
char hostname[MAX_SIZE];
|
||||
|
||||
PackGetStr(p, "opcode", opcode, sizeof(opcode));
|
||||
PackGetStr(p, "cipher_name", cipher_name, sizeof(cipher_name));
|
||||
PackGetStr(p, "hostname", hostname, sizeof(hostname));
|
||||
|
||||
if (StrCmpi(opcode, "relay") == 0)
|
||||
{
|
||||
IP client_ip, server_ip;
|
||||
UINT client_port;
|
||||
UINT server_port;
|
||||
UCHAR session_id[SHA1_SIZE];
|
||||
|
||||
if (PackGetIp(p, "client_ip", &client_ip) &&
|
||||
PackGetIp(p, "server_ip", &server_ip) &&
|
||||
PackGetData2(p, "session_id", session_id, sizeof(session_id)))
|
||||
{
|
||||
client_port = PackGetInt(p, "client_port");
|
||||
server_port = PackGetInt(p, "server_port");
|
||||
|
||||
if (client_port != 0 && server_port != 0)
|
||||
{
|
||||
SOCK *ns;
|
||||
Debug("Connect Request from %r:%u\n", &client_ip, client_port);
|
||||
|
||||
// Create new socket and connect VPN Azure Server
|
||||
if (ac->DDnsStatusCopy.InternetSetting.ProxyType == PROXY_DIRECT)
|
||||
{
|
||||
ns = ConnectEx2(ac->DDnsStatusCopy.CurrentAzureIp, AZURE_SERVER_PORT,
|
||||
0, (bool *)&ac->Halt);
|
||||
}
|
||||
else
|
||||
{
|
||||
ns = WpcSockConnect2(ac->DDnsStatusCopy.CurrentAzureIp, AZURE_SERVER_PORT,
|
||||
&ac->DDnsStatusCopy.InternetSetting, NULL, AZURE_VIA_PROXY_TIMEOUT);
|
||||
}
|
||||
|
||||
if (ns == NULL)
|
||||
{
|
||||
Debug("Connect Error.\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug("Connected to the relay server.\n");
|
||||
|
||||
SetTimeout(ns, param->DataTimeout);
|
||||
|
||||
if (StartSSLEx(ns, NULL, NULL, true, 0, NULL))
|
||||
{
|
||||
// Check certification
|
||||
char server_cert_hash_str[MAX_SIZE];
|
||||
UCHAR server_cert_hash[SHA1_SIZE];
|
||||
|
||||
Zero(server_cert_hash, sizeof(server_cert_hash));
|
||||
GetXDigest(ns->RemoteX, server_cert_hash, true);
|
||||
|
||||
BinToStr(server_cert_hash_str, sizeof(server_cert_hash_str),
|
||||
server_cert_hash, SHA1_SIZE);
|
||||
|
||||
if (IsEmptyStr(ac->DDnsStatusCopy.AzureCertHash) || StrCmpi(server_cert_hash_str, ac->DDnsStatusCopy.AzureCertHash) == 0)
|
||||
{
|
||||
if (SendAll(ns, AZURE_PROTOCOL_DATA_SIANGTURE, 24, true))
|
||||
{
|
||||
PACK *p2 = NewPack();
|
||||
|
||||
PackAddStr(p2, "hostname", hostname);
|
||||
PackAddData(p2, "session_id", session_id, sizeof(session_id));
|
||||
|
||||
if (SendPackWithHash(ns, p2))
|
||||
{
|
||||
UCHAR uc;
|
||||
|
||||
if (RecvAll(ns, &uc, 1, true) != false)
|
||||
{
|
||||
if (uc != 0)
|
||||
{
|
||||
SOCK *accept_sock = GetReverseListeningSock(ac->Cedar);
|
||||
|
||||
if (accept_sock != NULL)
|
||||
{
|
||||
AddRef(ns->ref);
|
||||
|
||||
SetTimeout(ns, INFINITE);
|
||||
|
||||
Copy(&ns->Reverse_MyServerGlobalIp, &server_ip, sizeof(IP));
|
||||
ns->Reverse_MyServerPort = server_port;
|
||||
|
||||
InjectNewReverseSocketToAccept(accept_sock, ns,
|
||||
&client_ip, client_port);
|
||||
|
||||
ReleaseSock(accept_sock);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FreePack(p2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ReleaseSock(ns);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FreePack(p);
|
||||
}
|
||||
}
|
||||
|
||||
// Send 1 byte
|
||||
uc = 0;
|
||||
if (SendAll(s, &uc, 1, false) == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// VPN Azure client main thread
|
||||
void AcMainThread(THREAD *thread, void *param)
|
||||
{
|
||||
AZURE_CLIENT *ac = (AZURE_CLIENT *)param;
|
||||
UINT last_ip_revision = INFINITE;
|
||||
UINT64 last_reconnect_tick = 0;
|
||||
UINT64 next_reconnect_interval = AZURE_CONNECT_INITIAL_RETRY_INTERVAL;
|
||||
UINT num_reconnect_retry = 0;
|
||||
UINT64 next_ddns_retry_tick = 0;
|
||||
bool last_connect_ok = false;
|
||||
// Validate arguments
|
||||
if (ac == NULL || thread == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
while (ac->Halt == false)
|
||||
{
|
||||
UINT64 now = Tick64();
|
||||
bool connect_was_ok = false;
|
||||
// Wait for enabling VPN Azure function
|
||||
if (ac->IsEnabled)
|
||||
{
|
||||
// VPN Azure is enabled
|
||||
DDNS_CLIENT_STATUS st;
|
||||
bool connect_now = false;
|
||||
bool azure_ip_changed = false;
|
||||
|
||||
Lock(ac->Lock);
|
||||
{
|
||||
Copy(&st, &ac->DDnsStatus, sizeof(DDNS_CLIENT_STATUS));
|
||||
|
||||
if (StrCmpi(st.CurrentAzureIp, ac->DDnsStatusCopy.CurrentAzureIp) != 0)
|
||||
{
|
||||
if (IsEmptyStr(st.CurrentAzureIp) == false)
|
||||
{
|
||||
// Destination IP address is changed
|
||||
connect_now = true;
|
||||
num_reconnect_retry = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (StrCmpi(st.CurrentHostName, ac->DDnsStatusCopy.CurrentHostName) != 0)
|
||||
{
|
||||
// DDNS host name is changed
|
||||
connect_now = true;
|
||||
num_reconnect_retry = 0;
|
||||
}
|
||||
|
||||
Copy(&ac->DDnsStatusCopy, &st, sizeof(DDNS_CLIENT_STATUS));
|
||||
}
|
||||
Unlock(ac->Lock);
|
||||
|
||||
if (last_ip_revision != ac->IpStatusRevision)
|
||||
{
|
||||
last_ip_revision = ac->IpStatusRevision;
|
||||
|
||||
connect_now = true;
|
||||
|
||||
num_reconnect_retry = 0;
|
||||
}
|
||||
|
||||
if (last_reconnect_tick == 0 || (now >= (last_reconnect_tick + next_reconnect_interval)))
|
||||
{
|
||||
UINT r;
|
||||
|
||||
last_reconnect_tick = now;
|
||||
num_reconnect_retry++;
|
||||
next_reconnect_interval = (UINT64)num_reconnect_retry * AZURE_CONNECT_INITIAL_RETRY_INTERVAL;
|
||||
next_reconnect_interval = MIN(next_reconnect_interval, AZURE_CONNECT_MAX_RETRY_INTERVAL);
|
||||
|
||||
r = (UINT)next_reconnect_interval;
|
||||
|
||||
r = GenRandInterval(r / 2, r);
|
||||
|
||||
next_reconnect_interval = r;
|
||||
|
||||
connect_now = true;
|
||||
}
|
||||
|
||||
if (IsEmptyStr(st.CurrentAzureIp) == false && IsEmptyStr(st.CurrentHostName) == false)
|
||||
{
|
||||
if (connect_now)
|
||||
{
|
||||
SOCK *s;
|
||||
char *host = NULL;
|
||||
UINT port = AZURE_SERVER_PORT;
|
||||
|
||||
Debug("VPN Azure: Connecting to %s...\n", st.CurrentAzureIp);
|
||||
|
||||
if (ParseHostPort(st.CurrentAzureIp, &host, &port, AZURE_SERVER_PORT))
|
||||
{
|
||||
if (st.InternetSetting.ProxyType == PROXY_DIRECT)
|
||||
{
|
||||
s = ConnectEx2(host, port, 0, (bool *)&ac->Halt);
|
||||
}
|
||||
else
|
||||
{
|
||||
s = WpcSockConnect2(host, port, &st.InternetSetting, NULL, AZURE_VIA_PROXY_TIMEOUT);
|
||||
}
|
||||
|
||||
if (s != NULL)
|
||||
{
|
||||
PACK *p;
|
||||
UINT64 established_tick = 0;
|
||||
|
||||
Debug("VPN Azure: Connected.\n");
|
||||
|
||||
SetTimeout(s, AZURE_PROTOCOL_CONTROL_TIMEOUT_DEFAULT);
|
||||
|
||||
Lock(ac->Lock);
|
||||
{
|
||||
ac->CurrentSock = s;
|
||||
ac->IsConnected = true;
|
||||
StrCpy(ac->ConnectingAzureIp, sizeof(ac->ConnectingAzureIp), st.CurrentAzureIp);
|
||||
}
|
||||
Unlock(ac->Lock);
|
||||
|
||||
SendAll(s, AZURE_PROTOCOL_CONTROL_SIGNATURE, StrLen(AZURE_PROTOCOL_CONTROL_SIGNATURE), false);
|
||||
|
||||
// Receive parameter
|
||||
p = RecvPackWithHash(s);
|
||||
if (p != NULL)
|
||||
{
|
||||
UCHAR c;
|
||||
AZURE_PARAM param;
|
||||
bool hostname_changed = false;
|
||||
|
||||
Zero(¶m, sizeof(param));
|
||||
|
||||
param.ControlKeepAlive = PackGetInt(p, "ControlKeepAlive");
|
||||
param.ControlTimeout = PackGetInt(p, "ControlTimeout");
|
||||
param.DataTimeout = PackGetInt(p, "DataTimeout");
|
||||
param.SslTimeout = PackGetInt(p, "SslTimeout");
|
||||
|
||||
FreePack(p);
|
||||
|
||||
param.ControlKeepAlive = MAKESURE(param.ControlKeepAlive, 1000, AZURE_SERVER_MAX_KEEPALIVE);
|
||||
param.ControlTimeout = MAKESURE(param.ControlTimeout, 1000, AZURE_SERVER_MAX_TIMEOUT);
|
||||
param.DataTimeout = MAKESURE(param.DataTimeout, 1000, AZURE_SERVER_MAX_TIMEOUT);
|
||||
param.SslTimeout = MAKESURE(param.SslTimeout, 1000, AZURE_SERVER_MAX_TIMEOUT);
|
||||
|
||||
Lock(ac->Lock);
|
||||
{
|
||||
Copy(&ac->AzureParam, ¶m, sizeof(AZURE_PARAM));
|
||||
}
|
||||
Unlock(ac->Lock);
|
||||
|
||||
SetTimeout(s, param.ControlTimeout);
|
||||
|
||||
// Send parameter
|
||||
p = NewPack();
|
||||
PackAddStr(p, "CurrentHostName", st.CurrentHostName);
|
||||
PackAddStr(p, "CurrentAzureIp", st.CurrentAzureIp);
|
||||
PackAddInt64(p, "CurrentAzureTimestamp", st.CurrentAzureTimestamp);
|
||||
PackAddStr(p, "CurrentAzureSignature", st.CurrentAzureSignature);
|
||||
|
||||
Lock(ac->Lock);
|
||||
{
|
||||
if (StrCmpi(st.CurrentHostName, ac->DDnsStatus.CurrentHostName) != 0)
|
||||
{
|
||||
hostname_changed = true;
|
||||
}
|
||||
}
|
||||
Unlock(ac->Lock);
|
||||
|
||||
if (hostname_changed == false)
|
||||
{
|
||||
if (SendPackWithHash(s, p))
|
||||
{
|
||||
// Receive result
|
||||
if (RecvAll(s, &c, 1, false))
|
||||
{
|
||||
if (c && ac->Halt == false)
|
||||
{
|
||||
connect_was_ok = true;
|
||||
|
||||
established_tick = Tick64();
|
||||
|
||||
AcWaitForRequest(ac, s, ¶m);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FreePack(p);
|
||||
}
|
||||
else
|
||||
{
|
||||
WHERE;
|
||||
}
|
||||
|
||||
Debug("VPN Azure: Disconnected.\n");
|
||||
|
||||
Lock(ac->Lock);
|
||||
{
|
||||
ac->IsConnected = false;
|
||||
ac->CurrentSock = NULL;
|
||||
ClearStr(ac->ConnectingAzureIp, sizeof(ac->ConnectingAzureIp));
|
||||
}
|
||||
Unlock(ac->Lock);
|
||||
|
||||
if (established_tick != 0)
|
||||
{
|
||||
if ((established_tick + (UINT64)AZURE_CONNECT_MAX_RETRY_INTERVAL) <= Tick64())
|
||||
{
|
||||
// If the connected time exceeds the AZURE_CONNECT_MAX_RETRY_INTERVAL, reset the retry counter.
|
||||
last_reconnect_tick = 0;
|
||||
num_reconnect_retry = 0;
|
||||
next_reconnect_interval = AZURE_CONNECT_INITIAL_RETRY_INTERVAL;
|
||||
}
|
||||
}
|
||||
|
||||
Disconnect(s);
|
||||
ReleaseSock(s);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug("VPN Azure: Error: Connect Failed.\n");
|
||||
}
|
||||
|
||||
Free(host);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
last_reconnect_tick = 0;
|
||||
num_reconnect_retry = 0;
|
||||
next_reconnect_interval = AZURE_CONNECT_INITIAL_RETRY_INTERVAL;
|
||||
}
|
||||
|
||||
if (ac->Halt)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (connect_was_ok)
|
||||
{
|
||||
// If connection goes out after connected, increment connection success count to urge DDNS client query
|
||||
next_ddns_retry_tick = Tick64() + MIN((UINT64)DDNS_VPN_AZURE_CONNECT_ERROR_DDNS_RETRY_TIME_DIFF * (UINT64)(num_reconnect_retry + 1), (UINT64)DDNS_VPN_AZURE_CONNECT_ERROR_DDNS_RETRY_TIME_DIFF_MAX);
|
||||
}
|
||||
|
||||
if ((next_ddns_retry_tick != 0) && (Tick64() >= next_ddns_retry_tick))
|
||||
{
|
||||
next_ddns_retry_tick = 0;
|
||||
|
||||
ac->DDnsTriggerInt++;
|
||||
}
|
||||
|
||||
Wait(ac->Event, rand() % 1000);
|
||||
}
|
||||
}
|
||||
|
||||
// Get enabled or disabled VPN Azure client
|
||||
bool AcGetEnable(AZURE_CLIENT *ac)
|
||||
{
|
||||
// Validate arguments
|
||||
if (ac == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return ac->IsEnabled;
|
||||
}
|
||||
|
||||
// Enable or disable VPN Azure client
|
||||
void AcSetEnable(AZURE_CLIENT *ac, bool enabled)
|
||||
{
|
||||
bool old_status;
|
||||
// Validate arguments
|
||||
if (ac == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
old_status = ac->IsEnabled;
|
||||
|
||||
ac->IsEnabled = enabled;
|
||||
|
||||
if (ac->IsEnabled && (ac->IsEnabled != old_status))
|
||||
{
|
||||
ac->DDnsTriggerInt++;
|
||||
}
|
||||
|
||||
AcApplyCurrentConfig(ac, NULL);
|
||||
}
|
||||
|
||||
// Set current configuration to VPN Azure client
|
||||
void AcApplyCurrentConfig(AZURE_CLIENT *ac, DDNS_CLIENT_STATUS *ddns_status)
|
||||
{
|
||||
bool disconnect_now = false;
|
||||
SOCK *disconnect_sock = NULL;
|
||||
// Validate arguments
|
||||
if (ac == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Get current DDNS configuration
|
||||
Lock(ac->Lock);
|
||||
{
|
||||
if (ddns_status != NULL)
|
||||
{
|
||||
if (StrCmpi(ac->DDnsStatus.CurrentHostName, ddns_status->CurrentHostName) != 0)
|
||||
{
|
||||
// If host name is changed, disconnect current data connection
|
||||
disconnect_now = true;
|
||||
}
|
||||
|
||||
if (Cmp(&ac->DDnsStatus.InternetSetting, &ddns_status->InternetSetting, sizeof(INTERNET_SETTING)) != 0)
|
||||
{
|
||||
// If proxy setting is changed, disconnect current data connection
|
||||
disconnect_now = true;
|
||||
}
|
||||
|
||||
Copy(&ac->DDnsStatus, ddns_status, sizeof(DDNS_CLIENT_STATUS));
|
||||
}
|
||||
|
||||
if (ac->IsEnabled == false)
|
||||
{
|
||||
// If VPN Azure client is disabled, disconnect current data connection
|
||||
disconnect_now = true;
|
||||
}
|
||||
|
||||
if (disconnect_now)
|
||||
{
|
||||
if (ac->CurrentSock != NULL)
|
||||
{
|
||||
disconnect_sock = ac->CurrentSock;
|
||||
AddRef(disconnect_sock->ref);
|
||||
}
|
||||
}
|
||||
}
|
||||
Unlock(ac->Lock);
|
||||
|
||||
if (disconnect_sock != NULL)
|
||||
{
|
||||
Disconnect(disconnect_sock);
|
||||
ReleaseSock(disconnect_sock);
|
||||
}
|
||||
|
||||
Set(ac->Event);
|
||||
}
|
||||
|
||||
// Free VPN Azure client
|
||||
void FreeAzureClient(AZURE_CLIENT *ac)
|
||||
{
|
||||
SOCK *disconnect_sock = NULL;
|
||||
// Validate arguments
|
||||
if (ac == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ac->Halt = true;
|
||||
|
||||
Lock(ac->Lock);
|
||||
{
|
||||
if (ac->CurrentSock != NULL)
|
||||
{
|
||||
disconnect_sock = ac->CurrentSock;
|
||||
|
||||
AddRef(disconnect_sock->ref);
|
||||
}
|
||||
}
|
||||
Unlock(ac->Lock);
|
||||
|
||||
if (disconnect_sock != NULL)
|
||||
{
|
||||
Disconnect(disconnect_sock);
|
||||
ReleaseSock(disconnect_sock);
|
||||
}
|
||||
|
||||
Set(ac->Event);
|
||||
|
||||
// Stop main thread
|
||||
WaitThread(ac->MainThread, INFINITE);
|
||||
ReleaseThread(ac->MainThread);
|
||||
|
||||
ReleaseEvent(ac->Event);
|
||||
|
||||
DeleteLock(ac->Lock);
|
||||
|
||||
Free(ac);
|
||||
}
|
||||
|
||||
// Create new VPN Azure client
|
||||
AZURE_CLIENT *NewAzureClient(CEDAR *cedar, SERVER *server)
|
||||
{
|
||||
AZURE_CLIENT *ac;
|
||||
// Validate arguments
|
||||
if (cedar == NULL || server == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ac = ZeroMalloc(sizeof(AZURE_CLIENT));
|
||||
|
||||
ac->Cedar = cedar;
|
||||
|
||||
ac->Server = server;
|
||||
|
||||
ac->Lock = NewLock();
|
||||
|
||||
ac->IsEnabled = false;
|
||||
|
||||
ac->Event = NewEvent();
|
||||
|
||||
// Start main thread
|
||||
ac->MainThread = NewThread(AcMainThread, ac);
|
||||
|
||||
return ac;
|
||||
}
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
149
src/Cedar/AzureClient.h
Normal file
149
src/Cedar/AzureClient.h
Normal file
@ -0,0 +1,149 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// AzureClient.h
|
||||
// Header of AzureClient.c
|
||||
|
||||
#ifndef AZURE_CLIENT_H
|
||||
#define AZURE_CLIENT_H
|
||||
|
||||
// Constants
|
||||
#define AZURE_SERVER_PORT 443
|
||||
#define AZURE_PROTOCOL_CONTROL_SIGNATURE "ACTL"
|
||||
#define AZURE_PROTOCOL_DATA_SIANGTURE "AZURE_CONNECT_SIGNATURE!"
|
||||
#define AZURE_PROTOCOL_CONTROL_TIMEOUT_DEFAULT (5 * 1000) // Default timeout
|
||||
#define AZURE_CONNECT_INITIAL_RETRY_INTERVAL (1 * 1000) // Initial re-connection interval (15 * 1000)
|
||||
#define AZURE_CONNECT_MAX_RETRY_INTERVAL (60 * 60 * 1000) // Maximum re-connection interval
|
||||
|
||||
#define AZURE_DOMAIN_SUFFIX ".vpnazure.net"
|
||||
|
||||
#define AZURE_SERVER_MAX_KEEPALIVE (5 * 60 * 1000)
|
||||
#define AZURE_SERVER_MAX_TIMEOUT (10 * 60 * 1000)
|
||||
|
||||
#define AZURE_VIA_PROXY_TIMEOUT 5000
|
||||
|
||||
|
||||
// Communications parameter
|
||||
struct AZURE_PARAM
|
||||
{
|
||||
UINT ControlKeepAlive;
|
||||
UINT ControlTimeout;
|
||||
UINT DataTimeout;
|
||||
UINT SslTimeout;
|
||||
};
|
||||
|
||||
// VPN Azure Client
|
||||
struct AZURE_CLIENT
|
||||
{
|
||||
CEDAR *Cedar;
|
||||
SERVER *Server;
|
||||
LOCK *Lock;
|
||||
DDNS_CLIENT_STATUS DDnsStatus;
|
||||
volatile bool IsEnabled;
|
||||
EVENT *Event;
|
||||
volatile bool Halt;
|
||||
THREAD *MainThread;
|
||||
volatile UINT IpStatusRevision;
|
||||
DDNS_CLIENT_STATUS DDnsStatusCopy;
|
||||
SOCK *CurrentSock;
|
||||
char ConnectingAzureIp[MAX_SIZE];
|
||||
AZURE_PARAM AzureParam;
|
||||
volatile UINT DDnsTriggerInt;
|
||||
volatile bool IsConnected;
|
||||
};
|
||||
|
||||
|
||||
// Function prototype
|
||||
AZURE_CLIENT *NewAzureClient(CEDAR *cedar, SERVER *server);
|
||||
void FreeAzureClient(AZURE_CLIENT *ac);
|
||||
void AcApplyCurrentConfig(AZURE_CLIENT *ac, DDNS_CLIENT_STATUS *ddns_status);
|
||||
void AcMainThread(THREAD *thread, void *param);
|
||||
void AcSetEnable(AZURE_CLIENT *ac, bool enabled);
|
||||
bool AcGetEnable(AZURE_CLIENT *ac);
|
||||
void AcWaitForRequest(AZURE_CLIENT *ac, SOCK *s, AZURE_PARAM *param);
|
||||
|
||||
|
||||
#endif // AZURE_CLIENT_H
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
90
src/Cedar/AzureServer.c
Normal file
90
src/Cedar/AzureServer.c
Normal file
@ -0,0 +1,90 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// AzureServer.c
|
||||
// VPN Azure Server
|
||||
|
||||
#include "CedarPch.h"
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
94
src/Cedar/AzureServer.h
Normal file
94
src/Cedar/AzureServer.h
Normal file
@ -0,0 +1,94 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// AzureServer.h
|
||||
// Header of AzureServer.c
|
||||
|
||||
#ifndef AZURE_SERVER_H
|
||||
#define AZURE_SERVER_H
|
||||
|
||||
|
||||
#endif // AZURE_SERVER_H
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
532
src/Cedar/Bridge.c
Normal file
532
src/Cedar/Bridge.c
Normal file
@ -0,0 +1,532 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// Bridge.c
|
||||
// Ethernet Bridge Program (Local Bridge)
|
||||
|
||||
#include <GlobalConst.h>
|
||||
|
||||
#define BRIDGE_C
|
||||
|
||||
#ifdef WIN32
|
||||
#define OS_WIN32
|
||||
#endif
|
||||
|
||||
#ifdef OS_WIN32
|
||||
|
||||
// Win32
|
||||
#include "BridgeWin32.c"
|
||||
|
||||
#else
|
||||
|
||||
// Unix
|
||||
#include "BridgeUnix.c"
|
||||
|
||||
#endif // OS_WIN32
|
||||
|
||||
// Hash the list of current Ethernet devices
|
||||
UINT GetEthDeviceHash()
|
||||
{
|
||||
#ifdef OS_UNIX
|
||||
// UNIX
|
||||
UINT num;
|
||||
UINT i;
|
||||
char tmp[4096];
|
||||
UCHAR hash[SHA1_SIZE];
|
||||
TOKEN_LIST *t = GetEthList();
|
||||
|
||||
num = t->NumTokens;
|
||||
tmp[0] = 0;
|
||||
for (i = 0;i < t->NumTokens;i++)
|
||||
{
|
||||
StrCat(tmp, sizeof(tmp), t->Token[i]);
|
||||
}
|
||||
FreeToken(t);
|
||||
|
||||
Hash(hash, tmp, StrLen(tmp), true);
|
||||
|
||||
Copy(&num, hash, sizeof(UINT));
|
||||
|
||||
return num;
|
||||
#else // OS_UNIX
|
||||
// Win32
|
||||
UINT ret = 0;
|
||||
MS_ADAPTER_LIST *a = MsCreateAdapterListEx(true);
|
||||
UINT num;
|
||||
UINT i;
|
||||
char tmp[4096];
|
||||
UCHAR hash[SHA1_SIZE];
|
||||
|
||||
tmp[0] = 0;
|
||||
if (a != NULL)
|
||||
{
|
||||
for (i = 0;i < a->Num;i++)
|
||||
{
|
||||
StrCat(tmp, sizeof(tmp), a->Adapters[i]->Title);
|
||||
}
|
||||
}
|
||||
MsFreeAdapterList(a);
|
||||
|
||||
Hash(hash, tmp, StrLen(tmp), true);
|
||||
|
||||
Copy(&num, hash, sizeof(UINT));
|
||||
|
||||
return num;
|
||||
#endif // OS_UNIX
|
||||
}
|
||||
|
||||
// Get whether WinPcap is needed
|
||||
bool IsNeedWinPcap()
|
||||
{
|
||||
if (IsBridgeSupported() == false)
|
||||
{
|
||||
// Not in Windows
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Windows
|
||||
if (IsEthSupported())
|
||||
{
|
||||
// Already success to access the Ethernet device
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Failed to access the Ethernet device
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get whether the local-bridging is supported by current OS
|
||||
bool IsBridgeSupported()
|
||||
{
|
||||
UINT type = GetOsInfo()->OsType;
|
||||
|
||||
if (OS_IS_WINDOWS(type))
|
||||
{
|
||||
if (IsEthSupported())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
bool ret = false;
|
||||
|
||||
#ifdef OS_WIN32
|
||||
ret = MsIsAdmin();
|
||||
#endif // OS_WIN32
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return IsEthSupported();
|
||||
}
|
||||
}
|
||||
|
||||
// Delete a local-bridge
|
||||
bool DeleteLocalBridge(CEDAR *c, char *hubname, char *devicename)
|
||||
{
|
||||
bool ret = false;
|
||||
// Validate arguments
|
||||
if (c == NULL || hubname == NULL || devicename == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
LockList(c->HubList);
|
||||
{
|
||||
LockList(c->LocalBridgeList);
|
||||
{
|
||||
UINT i;
|
||||
|
||||
for (i = 0;i < LIST_NUM(c->LocalBridgeList);i++)
|
||||
{
|
||||
LOCALBRIDGE *br = LIST_DATA(c->LocalBridgeList, i);
|
||||
|
||||
if (StrCmpi(br->HubName, hubname) == 0)
|
||||
{
|
||||
if (StrCmpi(br->DeviceName, devicename) == 0)
|
||||
{
|
||||
if (br->Bridge != NULL)
|
||||
{
|
||||
BrFreeBridge(br->Bridge);
|
||||
br->Bridge = NULL;
|
||||
}
|
||||
|
||||
Delete(c->LocalBridgeList, br);
|
||||
Free(br);
|
||||
|
||||
ret = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
UnlockList(c->LocalBridgeList);
|
||||
}
|
||||
UnlockList(c->HubList);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Add a local-bridge
|
||||
void AddLocalBridge(CEDAR *c, char *hubname, char *devicename, bool local, bool monitor, bool tapmode, char *tapaddr, bool limit_broadcast)
|
||||
{
|
||||
UINT i;
|
||||
HUB *h = NULL;
|
||||
LOCALBRIDGE *br = NULL;
|
||||
// Validate arguments
|
||||
if (c == NULL || hubname == NULL || devicename == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (OS_IS_UNIX(GetOsInfo()->OsType) == false)
|
||||
{
|
||||
tapmode = false;
|
||||
}
|
||||
|
||||
LockList(c->HubList);
|
||||
{
|
||||
LockList(c->LocalBridgeList);
|
||||
{
|
||||
bool exists = false;
|
||||
|
||||
// Ensure that the same configuration local-bridge doesn't exist already
|
||||
for (i = 0;i < LIST_NUM(c->LocalBridgeList);i++)
|
||||
{
|
||||
LOCALBRIDGE *br = LIST_DATA(c->LocalBridgeList, i);
|
||||
if (StrCmpi(br->DeviceName, devicename) == 0)
|
||||
{
|
||||
if (StrCmpi(br->HubName, hubname) == 0)
|
||||
{
|
||||
if (br->TapMode == tapmode)
|
||||
{
|
||||
exists = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (exists == false)
|
||||
{
|
||||
// Add configuration
|
||||
br = ZeroMalloc(sizeof(LOCALBRIDGE));
|
||||
StrCpy(br->HubName, sizeof(br->HubName), hubname);
|
||||
StrCpy(br->DeviceName, sizeof(br->DeviceName), devicename);
|
||||
br->Bridge = NULL;
|
||||
br->Local = local;
|
||||
br->TapMode = tapmode;
|
||||
br->LimitBroadcast = limit_broadcast;
|
||||
br->Monitor = monitor;
|
||||
if (br->TapMode)
|
||||
{
|
||||
if (tapaddr != NULL && IsZero(tapaddr, 6) == false)
|
||||
{
|
||||
Copy(br->TapMacAddress, tapaddr, 6);
|
||||
}
|
||||
else
|
||||
{
|
||||
GenMacAddress(br->TapMacAddress);
|
||||
}
|
||||
}
|
||||
|
||||
Add(c->LocalBridgeList, br);
|
||||
|
||||
// Find the hub
|
||||
for (i = 0;i < LIST_NUM(c->HubList);i++)
|
||||
{
|
||||
HUB *hub = LIST_DATA(c->HubList, i);
|
||||
if (StrCmpi(hub->Name, br->HubName) == 0)
|
||||
{
|
||||
h = hub;
|
||||
AddRef(h->ref);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
UnlockList(c->LocalBridgeList);
|
||||
}
|
||||
UnlockList(c->HubList);
|
||||
|
||||
// Start the local-bridge immediately
|
||||
if (h != NULL && br != NULL && h->Type != HUB_TYPE_FARM_DYNAMIC)
|
||||
{
|
||||
Lock(h->lock_online);
|
||||
{
|
||||
if (h->Offline == false)
|
||||
{
|
||||
LockList(c->LocalBridgeList);
|
||||
{
|
||||
if (IsInList(c->LocalBridgeList, br))
|
||||
{
|
||||
if (br->Bridge == NULL)
|
||||
{
|
||||
br->Bridge = BrNewBridge(h, br->DeviceName, NULL, br->Local, br->Monitor, br->TapMode, br->TapMacAddress, br->LimitBroadcast, br);
|
||||
}
|
||||
}
|
||||
}
|
||||
UnlockList(c->LocalBridgeList);
|
||||
}
|
||||
}
|
||||
Unlock(h->lock_online);
|
||||
}
|
||||
|
||||
ReleaseHub(h);
|
||||
}
|
||||
|
||||
// Initialize the local-bridge list
|
||||
void InitLocalBridgeList(CEDAR *c)
|
||||
{
|
||||
// Validate arguments
|
||||
if (c == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
c->LocalBridgeList = NewList(NULL);
|
||||
}
|
||||
|
||||
// Free the local-bridge list
|
||||
void FreeLocalBridgeList(CEDAR *c)
|
||||
{
|
||||
UINT i;
|
||||
// Validate arguments
|
||||
if (c == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0;i < LIST_NUM(c->LocalBridgeList);i++)
|
||||
{
|
||||
LOCALBRIDGE *br = LIST_DATA(c->LocalBridgeList, i);
|
||||
Free(br);
|
||||
}
|
||||
|
||||
ReleaseList(c->LocalBridgeList);
|
||||
c->LocalBridgeList = NULL;
|
||||
}
|
||||
|
||||
// Bridging thread
|
||||
void BrBridgeThread(THREAD *thread, void *param)
|
||||
{
|
||||
BRIDGE *b;
|
||||
CONNECTION *c;
|
||||
SESSION *s;
|
||||
HUB *h;
|
||||
char name[MAX_SIZE];
|
||||
// Validate arguments
|
||||
if (thread == NULL || param == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
b = (BRIDGE *)param;
|
||||
|
||||
// Create a connection object
|
||||
c = NewServerConnection(b->Cedar, NULL, thread);
|
||||
c->Protocol = CONNECTION_HUB_BRIDGE;
|
||||
|
||||
// Create a session object
|
||||
s = NewServerSession(b->Cedar, c, b->Hub, BRIDGE_USER_NAME, b->Policy);
|
||||
HLog(b->Hub, "LH_START_BRIDGE", b->Name, s->Name);
|
||||
StrCpy(name, sizeof(name), b->Name);
|
||||
h = b->Hub;
|
||||
AddRef(h->ref);
|
||||
s->BridgeMode = true;
|
||||
s->Bridge = b;
|
||||
c->Session = s;
|
||||
ReleaseConnection(c);
|
||||
|
||||
// Dummy user name for local-bridge
|
||||
s->Username = CopyStr(BRIDGE_USER_NAME_PRINT);
|
||||
|
||||
b->Session = s;
|
||||
AddRef(s->ref);
|
||||
|
||||
// Notify completion
|
||||
NoticeThreadInit(thread);
|
||||
|
||||
// Main procedure of the session
|
||||
Debug("Bridge %s Start.\n", b->Name);
|
||||
SessionMain(s);
|
||||
Debug("Bridge %s Stop.\n", b->Name);
|
||||
|
||||
HLog(h, "LH_STOP_BRIDGE", name);
|
||||
|
||||
ReleaseHub(h);
|
||||
|
||||
ReleaseSession(s);
|
||||
}
|
||||
|
||||
// Free the local-bridge object
|
||||
void BrFreeBridge(BRIDGE *b)
|
||||
{
|
||||
// Validate arguments
|
||||
if (b == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (b->ParentLocalBridge != NULL)
|
||||
{
|
||||
b->ParentLocalBridge = NULL;
|
||||
}
|
||||
|
||||
// Stop session thread
|
||||
StopSession(b->Session);
|
||||
ReleaseSession(b->Session);
|
||||
|
||||
Free(b);
|
||||
}
|
||||
|
||||
// Create new local-bridge
|
||||
BRIDGE *BrNewBridge(HUB *h, char *name, POLICY *p, bool local, bool monitor, bool tapmode, char *tapaddr, bool limit_broadcast, LOCALBRIDGE *parent_local_bridge)
|
||||
{
|
||||
BRIDGE *b;
|
||||
POLICY *policy;
|
||||
THREAD *t;
|
||||
// Validate arguments
|
||||
if (h == NULL || name == NULL || parent_local_bridge == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (p == NULL)
|
||||
{
|
||||
policy = ClonePolicy(GetDefaultPolicy());
|
||||
}
|
||||
else
|
||||
{
|
||||
policy = ClonePolicy(p);
|
||||
}
|
||||
|
||||
b = ZeroMalloc(sizeof(BRIDGE));
|
||||
b->Cedar = h->Cedar;
|
||||
b->Hub = h;
|
||||
StrCpy(b->Name, sizeof(b->Name), name);
|
||||
b->Policy = policy;
|
||||
b->Local = local;
|
||||
b->Monitor = monitor;
|
||||
b->TapMode = tapmode;
|
||||
b->LimitBroadcast = limit_broadcast;
|
||||
b->ParentLocalBridge = parent_local_bridge;
|
||||
|
||||
if (b->TapMode)
|
||||
{
|
||||
if (tapaddr != NULL && IsZero(tapaddr, 6) == false)
|
||||
{
|
||||
Copy(b->TapMacAddress, tapaddr, 6);
|
||||
}
|
||||
else
|
||||
{
|
||||
GenMacAddress(b->TapMacAddress);
|
||||
}
|
||||
}
|
||||
|
||||
if (monitor)
|
||||
{
|
||||
// Enabling monitoring mode
|
||||
policy->MonitorPort = true;
|
||||
}
|
||||
|
||||
if (b->LimitBroadcast == false)
|
||||
{
|
||||
// Disable broadcast limiter
|
||||
policy->NoBroadcastLimiter = true;
|
||||
}
|
||||
|
||||
// Start thread
|
||||
t = NewThread(BrBridgeThread, b);
|
||||
WaitThreadInit(t);
|
||||
ReleaseThread(t);
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
152
src/Cedar/Bridge.h
Normal file
152
src/Cedar/Bridge.h
Normal file
@ -0,0 +1,152 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// Bridge.h
|
||||
// Header of Bridge.c
|
||||
|
||||
#ifndef BRIDGE_H
|
||||
#define BRIDGE_H
|
||||
|
||||
#ifdef OS_WIN32
|
||||
|
||||
// For Win32
|
||||
#include <Cedar/BridgeWin32.h>
|
||||
|
||||
#else
|
||||
|
||||
// For Unix
|
||||
#include <Cedar/BridgeUnix.h>
|
||||
|
||||
#endif // OS_WIN32
|
||||
|
||||
// Bridge
|
||||
struct BRIDGE
|
||||
{
|
||||
bool Active; // Status
|
||||
CEDAR *Cedar; // Cedar
|
||||
HUB *Hub; // HUB
|
||||
SESSION *Session; // Session
|
||||
POLICY *Policy; // Policy
|
||||
ETH *Eth; // Ethernet
|
||||
char Name[MAX_SIZE]; // Device name
|
||||
UINT64 LastBridgeTry; // Time to try to bridge at last
|
||||
bool Local; // Local mode
|
||||
bool Monitor; // Monitor mode
|
||||
bool TapMode; // Tap mode
|
||||
bool LimitBroadcast; // Broadcasts limiting mode
|
||||
UCHAR TapMacAddress[6]; // MAC address of the tap
|
||||
UINT LastNumDevice; // Number of device (Number of last checked)
|
||||
UINT64 LastNumDeviceCheck; // Time at which to check the number of devices at last
|
||||
UINT64 LastChangeMtuError; // Time that recorded the error to change the MTU at last
|
||||
LOCALBRIDGE *ParentLocalBridge; // Parent Local Bridge
|
||||
};
|
||||
|
||||
// Local bridge
|
||||
struct LOCALBRIDGE
|
||||
{
|
||||
char HubName[MAX_HUBNAME_LEN + 1]; // Virtual HUB name
|
||||
char DeviceName[MAX_SIZE]; // Device name
|
||||
bool Local; // Local mode
|
||||
bool Monitor; // Monitor mode
|
||||
bool TapMode; // Tap mode
|
||||
bool LimitBroadcast; // Broadcast packets limiting mode
|
||||
UCHAR TapMacAddress[6]; // MAC address of the tap
|
||||
BRIDGE *Bridge; // Bridge
|
||||
};
|
||||
|
||||
BRIDGE *BrNewBridge(HUB *h, char *name, POLICY *p, bool local, bool monitor, bool tapmode, char *tapaddr, bool limit_broadcast, LOCALBRIDGE *parent_local_bridge);
|
||||
void BrBridgeThread(THREAD *thread, void *param);
|
||||
void BrFreeBridge(BRIDGE *b);
|
||||
void InitLocalBridgeList(CEDAR *c);
|
||||
void FreeLocalBridgeList(CEDAR *c);
|
||||
void AddLocalBridge(CEDAR *c, char *hubname, char *devicename, bool local, bool monitor, bool tapmode, char *tapaddr, bool limit_broadcast);
|
||||
bool DeleteLocalBridge(CEDAR *c, char *hubname, char *devicename);
|
||||
bool IsBridgeSupported();
|
||||
bool IsNeedWinPcap();
|
||||
UINT GetEthDeviceHash();
|
||||
|
||||
#endif // BRIDGE_H
|
||||
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
1813
src/Cedar/BridgeUnix.c
Normal file
1813
src/Cedar/BridgeUnix.c
Normal file
File diff suppressed because it is too large
Load Diff
191
src/Cedar/BridgeUnix.h
Normal file
191
src/Cedar/BridgeUnix.h
Normal file
@ -0,0 +1,191 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// BridgeUnix.h
|
||||
// Header of BridgeUnix.c
|
||||
|
||||
#ifndef BRIDGEUNIX_H
|
||||
#define BRIDGEUNIX_H
|
||||
|
||||
// Macro
|
||||
#ifndef SOL_PACKET
|
||||
#define SOL_PACKET 263
|
||||
#endif
|
||||
#ifndef ifr_newname
|
||||
#define ifr_newname ifr_ifru.ifru_slave
|
||||
#endif
|
||||
|
||||
// Constants
|
||||
#define UNIX_ETH_TMP_BUFFER_SIZE (2000)
|
||||
#define SOLARIS_MAXDLBUF (32768)
|
||||
#define BRIDGE_MAX_QUEUE_SIZE (4096*1500)
|
||||
|
||||
// ETH structure
|
||||
struct ETH
|
||||
{
|
||||
char *Name; // Adapter name
|
||||
char *Title; // Adapter title
|
||||
CANCEL *Cancel; // Cancel object
|
||||
int IfIndex; // Index
|
||||
int Socket; // Socket
|
||||
UINT InitialMtu; // Initial MTU value
|
||||
UINT CurrentMtu; // Current MTU value
|
||||
int SocketBsdIf; // BSD interface operation socket
|
||||
UCHAR MacAddress[6]; // MAC address
|
||||
|
||||
#ifdef BRIDGE_PCAP
|
||||
void *Pcap; // Pcap descriptor
|
||||
QUEUE *Queue; // Queue of the relay thread
|
||||
UINT QueueSize; // Number of bytes in Queue
|
||||
THREAD *CaptureThread; // Pcap relay thread
|
||||
#endif // BRIDGE_PCAP
|
||||
|
||||
#ifdef BRIDGE_BPF
|
||||
UINT BufSize; // Buffer size to read the BPF (error for other)
|
||||
#ifdef BRIDGE_BPF_THREAD
|
||||
QUEUE *Queue; // Queue of the relay thread
|
||||
UINT QueueSize; // Number of bytes in Queue
|
||||
THREAD *CaptureThread; // BPF relay thread
|
||||
#else // BRIDGE_BPF_THREAD
|
||||
UCHAR *Buffer; // Buffer to read the BPF
|
||||
UCHAR *Next;
|
||||
int Rest;
|
||||
#endif // BRIDGE_BPF_THREAD
|
||||
#endif // BRIDGE_BPF
|
||||
|
||||
VLAN *Tap; // tap
|
||||
};
|
||||
|
||||
#if defined( BRIDGE_BPF ) || defined( BRIDGE_PCAP )
|
||||
struct CAPTUREBLOCK{
|
||||
UINT Size;
|
||||
UCHAR *Buf;
|
||||
};
|
||||
#endif // BRIDGE_BPF
|
||||
|
||||
|
||||
// Function prototype
|
||||
void InitEth();
|
||||
void FreeEth();
|
||||
bool IsEthSupported();
|
||||
bool IsEthSupportedLinux();
|
||||
bool IsEthSupportedSolaris();
|
||||
bool IsEthSupportedPcap();
|
||||
TOKEN_LIST *GetEthList();
|
||||
TOKEN_LIST *GetEthListLinux();
|
||||
TOKEN_LIST *GetEthListSolaris();
|
||||
TOKEN_LIST *GetEthListPcap();
|
||||
ETH *OpenEth(char *name, bool local, bool tapmode, char *tapaddr);
|
||||
ETH *OpenEthLinux(char *name, bool local, bool tapmode, char *tapaddr);
|
||||
ETH *OpenEthSolaris(char *name, bool local, bool tapmode, char *tapaddr);
|
||||
ETH *OpenEthPcap(char *name, bool local, bool tapmode, char *tapaddr);
|
||||
bool ParseUnixEthDeviceName(char *dst_devname, UINT dst_devname_size, UINT *dst_devid, char *src_name);
|
||||
void CloseEth(ETH *e);
|
||||
CANCEL *EthGetCancel(ETH *e);
|
||||
UINT EthGetPacket(ETH *e, void **data);
|
||||
UINT EthGetPacketLinux(ETH *e, void **data);
|
||||
UINT EthGetPacketSolaris(ETH *e, void **data);
|
||||
UINT EthGetPacketPcap(ETH *e, void **data);
|
||||
UINT EthGetPacketBpf(ETH *e, void **data);
|
||||
void EthPutPacket(ETH *e, void *data, UINT size);
|
||||
void EthPutPackets(ETH *e, UINT num, void **datas, UINT *sizes);
|
||||
UINT EthGetMtu(ETH *e);
|
||||
bool EthSetMtu(ETH *e, UINT mtu);
|
||||
bool EthIsChangeMtuSupported(ETH *e);
|
||||
bool EthGetInterfaceDescriptionUnix(char *name, char *str, UINT size);
|
||||
bool EthIsInterfaceDescriptionSupportedUnix();
|
||||
|
||||
#ifdef UNIX_SOLARIS
|
||||
// Function prototype for Solaris
|
||||
bool DlipAttatchRequest(int fd, UINT devid);
|
||||
bool DlipReceiveAck(int fd);
|
||||
bool DlipPromiscuous(int fd, UINT level);
|
||||
bool DlipBindRequest(int fd);
|
||||
#endif // OS_SOLARIS
|
||||
|
||||
int UnixEthOpenRawSocket();
|
||||
|
||||
#endif // BRIDGEUNIX_H
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
2217
src/Cedar/BridgeWin32.c
Normal file
2217
src/Cedar/BridgeWin32.c
Normal file
File diff suppressed because it is too large
Load Diff
238
src/Cedar/BridgeWin32.h
Normal file
238
src/Cedar/BridgeWin32.h
Normal file
@ -0,0 +1,238 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// BridgeWin32.h
|
||||
// Header of BridgeWin32.c
|
||||
|
||||
#ifndef BRIDGEWIN32_H
|
||||
#define BRIDGEWIN32_H
|
||||
|
||||
#define BRIDGE_WIN32_PACKET_DLL "Packet.dll"
|
||||
#define BRIDGE_WIN32_PCD_DLL "|see.dll"
|
||||
#define BRIDGE_WIN32_PCD_SYS "|see.sys"
|
||||
#define BRIDGE_WIN32_PCD_DLL_X64 "|see_x64.dll"
|
||||
#define BRIDGE_WIN32_PCD_SYS_X64 "|see_x64.sys"
|
||||
#define BRIDGE_WIN32_PCD_DLL_IA64 "|see_ia64.dll"
|
||||
#define BRIDGE_WIN32_PCD_SYS_IA64 "|see_ia64.sys"
|
||||
#define BRIDGE_WIN32_PCD_REGKEY "SYSTEM\\CurrentControlSet\\services\\SEE"
|
||||
#define BRIDGE_WIN32_PCD_BUILDVALUE "CurrentInstalledBuild"
|
||||
|
||||
#define BRIDGE_WIN32_ETH_BUFFER (1048576)
|
||||
|
||||
|
||||
typedef void *HANDLE;
|
||||
|
||||
#ifdef BRIDGE_C
|
||||
|
||||
// Header for Internal function (for BridgeWin32.c)
|
||||
typedef struct WP
|
||||
{
|
||||
bool Inited;
|
||||
HINSTANCE hPacketDll;
|
||||
PCHAR (*PacketGetVersion)();
|
||||
PCHAR (*PacketGetDriverVersion)();
|
||||
BOOLEAN (*PacketSetMinToCopy)(LPADAPTER AdapterObject,int nbytes);
|
||||
BOOLEAN (*PacketSetNumWrites)(LPADAPTER AdapterObject,int nwrites);
|
||||
BOOLEAN (*PacketSetMode)(LPADAPTER AdapterObject,int mode);
|
||||
BOOLEAN (*PacketSetReadTimeout)(LPADAPTER AdapterObject,int timeout);
|
||||
BOOLEAN (*PacketSetBpf)(LPADAPTER AdapterObject,struct bpf_program *fp);
|
||||
INT (*PacketSetSnapLen)(LPADAPTER AdapterObject,int snaplen);
|
||||
BOOLEAN (*PacketGetStats)(LPADAPTER AdapterObject,struct bpf_stat *s);
|
||||
BOOLEAN (*PacketGetStatsEx)(LPADAPTER AdapterObject,struct bpf_stat *s);
|
||||
BOOLEAN (*PacketSetBuff)(LPADAPTER AdapterObject,int dim);
|
||||
BOOLEAN (*PacketGetNetType)(LPADAPTER AdapterObject,NetType *type);
|
||||
LPADAPTER (*PacketOpenAdapter)(PCHAR AdapterName);
|
||||
BOOLEAN (*PacketSendPacket)(LPADAPTER AdapterObject,LPPACKET pPacket,BOOLEAN Sync);
|
||||
INT (*PacketSendPackets)(LPADAPTER AdapterObject,PVOID PacketBuff,ULONG Size, BOOLEAN Sync);
|
||||
LPPACKET (*PacketAllocatePacket)(void);
|
||||
VOID (*PacketInitPacket)(LPPACKET lpPacket,PVOID Buffer,UINT Length);
|
||||
VOID (*PacketFreePacket)(LPPACKET lpPacket);
|
||||
BOOLEAN (*PacketReceivePacket)(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync);
|
||||
BOOLEAN (*PacketSetHwFilter)(LPADAPTER AdapterObject,ULONG Filter);
|
||||
BOOLEAN (*PacketGetAdapterNames)(PTSTR pStr,PULONG BufferSize);
|
||||
BOOLEAN (*PacketGetNetInfoEx)(PCHAR AdapterName, npf_if_addr* buffer, PLONG NEntries);
|
||||
BOOLEAN (*PacketRequest)(LPADAPTER AdapterObject,BOOLEAN Set,PPACKET_OID_DATA OidData);
|
||||
HANDLE (*PacketGetReadEvent)(LPADAPTER AdapterObject);
|
||||
BOOLEAN (*PacketSetDumpName)(LPADAPTER AdapterObject, void *name, int len);
|
||||
BOOLEAN (*PacketSetDumpLimits)(LPADAPTER AdapterObject, UINT maxfilesize, UINT maxnpacks);
|
||||
BOOLEAN (*PacketIsDumpEnded)(LPADAPTER AdapterObject, BOOLEAN sync);
|
||||
BOOL (*PacketStopDriver)();
|
||||
VOID (*PacketCloseAdapter)(LPADAPTER lpAdapter);
|
||||
BOOLEAN (*PacketSetLoopbackBehavior)(LPADAPTER AdapterObject, UINT LoopbackBehavior);
|
||||
} WP;
|
||||
|
||||
// Adapter list
|
||||
typedef struct WP_ADAPTER
|
||||
{
|
||||
char Name[MAX_SIZE];
|
||||
char Title[MAX_SIZE];
|
||||
char Guid[MAX_SIZE];
|
||||
UINT Id;
|
||||
} WP_ADAPTER;
|
||||
|
||||
// Internal function prototype
|
||||
void InitEthAdaptersList();
|
||||
void FreeEthAdaptersList();
|
||||
int CompareWpAdapter(void *p1, void *p2);
|
||||
LIST *GetEthAdapterList();
|
||||
LIST *GetEthAdapterListInternal();
|
||||
bool InitWpWithLoadLibrary(WP *wp, HINSTANCE h);
|
||||
bool IsPcdSupported();
|
||||
HINSTANCE InstallPcdDriver();
|
||||
HINSTANCE InstallPcdDriverInternal();
|
||||
UINT LoadPcdDriverBuild();
|
||||
void SavePcdDriverBuild(UINT build);
|
||||
|
||||
#endif // BRIDGE_C
|
||||
|
||||
typedef struct _ADAPTER ADAPTER;
|
||||
typedef struct _PACKET PACKET;
|
||||
|
||||
// ETH structure
|
||||
struct ETH
|
||||
{
|
||||
char *Name; // Adapter name
|
||||
char *Title; // Adapter title
|
||||
ADAPTER *Adapter; // Adapter
|
||||
CANCEL *Cancel; // Cancel object
|
||||
UCHAR *Buffer; // Buffer
|
||||
UINT BufferSize; // Buffer size
|
||||
PACKET *Packet; // Packet
|
||||
PACKET *PutPacket; // Write packet
|
||||
QUEUE *PacketQueue; // Packet queue
|
||||
UINT64 LastSetSingleCpu; // Date and time set to a single CPU to last
|
||||
bool LoopbackBlock; // Whether to block the loop back packet
|
||||
bool Empty; // It is empty
|
||||
UCHAR MacAddress[6]; // MAC address
|
||||
bool HasFatalError; // A fatal error occurred on the transmission side
|
||||
|
||||
SU *Su; // SeLow handle
|
||||
SU_ADAPTER *SuAdapter; // SeLow adapter handle
|
||||
};
|
||||
|
||||
// Function prototype
|
||||
void InitEth();
|
||||
void FreeEth();
|
||||
bool IsEthSupported();
|
||||
bool IsEthSupportedInner();
|
||||
TOKEN_LIST *GetEthList();
|
||||
TOKEN_LIST *GetEthListEx(UINT *total_num_including_hidden);
|
||||
ETH *OpenEth(char *name, bool local, bool tapmode, char *tapaddr);
|
||||
ETH *OpenEthInternal(char *name, bool local, bool tapmode, char *tapaddr);
|
||||
void CloseEth(ETH *e);
|
||||
CANCEL *EthGetCancel(ETH *e);
|
||||
UINT EthGetPacket(ETH *e, void **data);
|
||||
void EthPutPacket(ETH *e, void *data, UINT size);
|
||||
void EthPutPackets(ETH *e, UINT num, void **datas, UINT *sizes);
|
||||
void GetEthNetworkConnectionName(wchar_t *dst, UINT size, char *device_name);
|
||||
bool IsWin32BridgeWithSee();
|
||||
UINT EthGetMtu(ETH *e);
|
||||
bool EthSetMtu(ETH *e, UINT mtu);
|
||||
bool EthIsChangeMtuSupported(ETH *e);
|
||||
|
||||
bool Win32EthIsSuSupported();
|
||||
|
||||
void Win32EthSetShowAllIf(bool b);
|
||||
bool Win32EthGetShowAllIf();
|
||||
|
||||
bool EnumEthVLanWin32(RPC_ENUM_ETH_VLAN *t);
|
||||
bool GetClassRegKeyWin32(char *key, UINT key_size, char *short_key, UINT short_key_size, char *guid);
|
||||
int CmpRpcEnumEthVLan(void *p1, void *p2);
|
||||
void GetVLanSupportStatus(RPC_ENUM_ETH_VLAN_ITEM *e);
|
||||
void GetVLanEnableStatus(RPC_ENUM_ETH_VLAN_ITEM *e);
|
||||
bool SetVLanEnableStatus(char *title, bool enable);
|
||||
RPC_ENUM_ETH_VLAN_ITEM *FindEthVLanItem(RPC_ENUM_ETH_VLAN *t, char *name);
|
||||
char *SearchDeviceInstanceIdFromShortKey(char *short_key);
|
||||
void Win32EthMakeCombinedName(char *dst, UINT dst_size, char *nicname, char *guid);
|
||||
UINT Win32EthGenIdFromGuid(char *guid);
|
||||
UINT Win32EthGetNameAndIdFromCombinedName(char *name, UINT name_size, char *str);
|
||||
|
||||
struct WP_ADAPTER *Win32EthSearch(char *name);
|
||||
bool Win32IsUsingSeLow();
|
||||
void Win32SetEnableSeLow(bool b);
|
||||
bool Win32GetEnableSeLow();
|
||||
|
||||
#endif // BRIDGEWIN32_H
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
12394
src/Cedar/CM.c
Normal file
12394
src/Cedar/CM.c
Normal file
File diff suppressed because it is too large
Load Diff
132
src/Cedar/CM.h
Normal file
132
src/Cedar/CM.h
Normal file
@ -0,0 +1,132 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// CM.h
|
||||
// Header of CM.c
|
||||
|
||||
#ifndef CM_H
|
||||
#define CM_H
|
||||
|
||||
// Constants
|
||||
#define CM_REG_KEY "Software\\" GC_REG_COMPANY_NAME "\\" CEDAR_PRODUCT_STR " VPN\\Client Manager"
|
||||
#define SECURE_MANAGER_KEY "Software\\" GC_REG_COMPANY_NAME "\\" CEDAR_PRODUCT_STR " VPN\\SmartCard Manager"
|
||||
#define CM_TRAFFIC_REG_KEY "Software\\" GC_REG_COMPANY_NAME "\\" CEDAR_PRODUCT_STR " VPN\\Traffic Test Tool"
|
||||
#define CM_VGC_REG_KEY "Software\\University of Tsukuba\\VPN Gate Client Plugin"
|
||||
|
||||
|
||||
#define CM_TRY_EXEC_UI_HELPER_INTERVAL 5000
|
||||
|
||||
#define CM_DEFAULT_WIDTH 800
|
||||
#define CM_DEFAULT_HEIGHT 600
|
||||
|
||||
#define WM_CM_NOTIFY (WM_APP + 999)
|
||||
|
||||
#define CM_IMPORT_FILENAME_MSG 1267
|
||||
#define CM_IMPORT_FILENAME_MSG_OVERWRITE 1268
|
||||
|
||||
#define CM_NUM_RECENT 8
|
||||
|
||||
#define PUBLIC_SERVER_HTML "http://www.softether.com/jp/special/se2hub.aspx"
|
||||
#define PUBLIC_SERVER_HTML_EN "http://www.softether.com/jp/special/se2hub_en.aspx"
|
||||
#define PUBLIC_SERVER_TAG L"help:no; status:no; DialogWidth:600px; dialogHeight=700px"
|
||||
#define PUBLIC_SERVER_NAME "public.softether.com"
|
||||
|
||||
#define VOICE_SSK 0 // ssk
|
||||
#define VOICE_AHO 1 // aho
|
||||
|
||||
// The code for external export
|
||||
|
||||
// Structure
|
||||
|
||||
// Function prototype
|
||||
void CMExec();
|
||||
void CmTraffic(HWND hWnd);
|
||||
void *CmStartUacHelper();
|
||||
void CmStopUacHelper(void *p);
|
||||
void *CmExecUiHelperMain();
|
||||
UINT CmGetSecureBitmapId(char *dest_hostname);
|
||||
|
||||
#endif // CM_H
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
612
src/Cedar/CMInner.h
Normal file
612
src/Cedar/CMInner.h
Normal file
@ -0,0 +1,612 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// CMInner.h
|
||||
// Internal header for the CM.c
|
||||
|
||||
#define STARTUP_MUTEX_NAME GC_SW_SOFTETHER_PREFIX "vpncmgr_startup_mutex"
|
||||
|
||||
#define NAME_OF_VPN_CLIENT_MANAGER "vpncmgr"
|
||||
|
||||
void CmVoice(char *name);
|
||||
|
||||
typedef struct CM_UAC_HELPER
|
||||
{
|
||||
THREAD *Thread;
|
||||
volatile bool Halt;
|
||||
EVENT *HaltEvent;
|
||||
} CM_UAC_HELPER;
|
||||
|
||||
typedef struct CM_VOICE
|
||||
{
|
||||
UINT voice_id;
|
||||
char *perfix;
|
||||
} CM_VOICE;
|
||||
|
||||
static CM_VOICE cm_voice[] =
|
||||
{
|
||||
{VOICE_SSK, "ssk" },
|
||||
{VOICE_AHO, "aho" },
|
||||
};
|
||||
|
||||
typedef struct CM_ENUM_HUB
|
||||
{
|
||||
HWND hWnd;
|
||||
THREAD *Thread;
|
||||
SESSION *Session;
|
||||
CLIENT_OPTION *ClientOption;
|
||||
TOKEN_LIST *Hub;
|
||||
} CM_ENUM_HUB;
|
||||
|
||||
#define CM_SETTING_INIT_NONE 0
|
||||
#define CM_SETTING_INIT_EASY 1 // Transition to the simple mode
|
||||
#define CM_SETTING_INIT_NORMAL 2 // Transition to the normal mode
|
||||
#define CM_SETTING_INIT_SELECT 3 // Show a selection screen
|
||||
#define CM_SETTING_INIT_CONNECT 4 // Import process by the simple installer
|
||||
|
||||
typedef struct CM
|
||||
{
|
||||
HWND hMainWnd;
|
||||
HWND hStatusBar;
|
||||
REMOTE_CLIENT *Client;
|
||||
char *server_name;
|
||||
wchar_t *import_file_name;
|
||||
bool HideStatusBar;
|
||||
bool HideTrayIcon;
|
||||
bool ShowGrid;
|
||||
bool VistaStyle;
|
||||
bool ShowPort;
|
||||
wchar_t StatudBar1[MAX_SIZE];
|
||||
wchar_t StatudBar2[MAX_SIZE];
|
||||
wchar_t StatudBar3[MAX_SIZE];
|
||||
HICON Icon2, Icon3;
|
||||
bool IconView;
|
||||
THREAD *NotifyClientThread;
|
||||
NOTIFY_CLIENT *NotifyClient;
|
||||
volatile bool Halt;
|
||||
bool OnCloseDispatched;
|
||||
LIST *StatusWindowList;
|
||||
CEDAR *Cedar;
|
||||
LIST *EnumHubList;
|
||||
UINT WindowCount;
|
||||
bool DisableVoice;
|
||||
UINT VoiceId;
|
||||
UINT OldConnectedNum;
|
||||
bool UpdateConnectedNumFlag;
|
||||
UCHAR ShortcutKey[SHA1_SIZE];
|
||||
bool TrayInited;
|
||||
bool TraySucceed;
|
||||
bool TrayAnimation;
|
||||
bool TraySpeedAnimation;
|
||||
UINT TrayAnimationCounter;
|
||||
bool StartupMode;
|
||||
THREAD *TryExecUiHelperThread;
|
||||
volatile bool TryExecUiHelperHalt;
|
||||
HANDLE TryExecUiHelperProcessHandle;
|
||||
EVENT *TryExecUiHelperHaltEvent;
|
||||
bool WindowsShutdowning;
|
||||
bool CmSettingSupported;
|
||||
bool CmEasyModeSupported;
|
||||
bool CmSettingInitialFlag;
|
||||
CM_SETTING CmSetting;
|
||||
HWND hEasyWnd;
|
||||
bool StartupFinished;
|
||||
bool ConnectStartedFlag;
|
||||
bool PositiveDisconnectFlag;
|
||||
wchar_t EasyLastSelectedAccountName[MAX_ACCOUNT_NAME_LEN + 1];
|
||||
WINDOWPLACEMENT FakeWindowPlacement;
|
||||
bool CheckedAndShowedAdminPackMessage;
|
||||
INSTANCE *StartupMutex;
|
||||
bool BadProcessChecked;
|
||||
bool MenuPopuping;
|
||||
WINUI_UPDATE *Update;
|
||||
} CM;
|
||||
|
||||
typedef struct CM_STATUS
|
||||
{
|
||||
wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // Account name
|
||||
HWND hWndPolicy; // Policy dialog
|
||||
} CM_STATUS;
|
||||
|
||||
typedef struct CM_POLICY
|
||||
{
|
||||
HWND hWnd;
|
||||
wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // Account name
|
||||
POLICY *Policy; // Policy dialog
|
||||
CM_STATUS *CmStatus; // CM_STATUS
|
||||
bool Extension; // Extension
|
||||
} CM_POLICY;
|
||||
|
||||
typedef struct CM_ACCOUNT
|
||||
{
|
||||
bool EditMode; // Edit mode (false: New mode)
|
||||
bool LinkMode; // Link mode
|
||||
bool NatMode; // NAT mode
|
||||
CLIENT_OPTION *ClientOption; // Client option
|
||||
CLIENT_AUTH *ClientAuth; // Authentication data
|
||||
bool Startup; // Startup account
|
||||
bool CheckServerCert; // Check the server certificate
|
||||
X *ServerCert; // Server certificate
|
||||
char old_server_name[MAX_HOST_NAME_LEN + 1]; // Old server name
|
||||
bool Inited; // Initialization flag
|
||||
POLICY Policy; // Policy (only link mode)
|
||||
struct SM_HUB *Hub; // HUB
|
||||
RPC *Rpc; // RPC
|
||||
bool OnlineFlag; // Online flag
|
||||
bool Flag1; // Flag 1
|
||||
bool HideClientCertAuth; // Hide the client authentication
|
||||
bool HideSecureAuth; // Hide the smart card authentication
|
||||
bool HideTrustCert; // Hide the trusted certificate authority button
|
||||
UCHAR ShortcutKey[SHA1_SIZE]; // Shortcut key
|
||||
bool LockMode; // Setting lock mode
|
||||
bool Link_ConnectNow; // Start the connection immediately
|
||||
UINT PolicyVer; // Policy version
|
||||
} CM_ACCOUNT;
|
||||
|
||||
typedef struct CM_CHANGE_PASSWORD
|
||||
{
|
||||
CLIENT_OPTION *ClientOption; // Client Option
|
||||
char Username[MAX_USERNAME_LEN + 1]; // User name
|
||||
char HubName[MAX_HUBNAME_LEN + 1]; // HUB name
|
||||
} CM_CHANGE_PASSWORD;
|
||||
|
||||
typedef struct CM_TRAFFIC
|
||||
{
|
||||
bool ServerMode; // Server mode
|
||||
bool Double; // 2x mode
|
||||
bool Raw; // Raw data mode
|
||||
UINT Port; // Port number
|
||||
char Host[MAX_HOST_NAME_LEN + 1]; // Host name
|
||||
UINT NumTcp; // Number of TCP connections
|
||||
UINT Type; // Type
|
||||
UINT Span; // Period
|
||||
} CM_TRAFFIC;
|
||||
|
||||
typedef struct CM_TRAFFIC_DLG
|
||||
{
|
||||
HWND hWnd; // Window handle
|
||||
CM_TRAFFIC *Setting; // Setting
|
||||
TTS *Tts; // Measurement server
|
||||
TTC *Ttc; // Measurement client
|
||||
THREAD *HaltThread; // Thread for stopping
|
||||
THREAD *ClientEndWaitThread; // Thread to wait for the client to finish
|
||||
bool Started; // Started flag
|
||||
bool Stopping; // Stopping
|
||||
UINT RetCode; // Return value
|
||||
TT_RESULT Result; // Result
|
||||
EVENT *ResultShowEvent; // Display result event
|
||||
bool CloseDialogAfter; // Flag of whether or not to close the dialog
|
||||
} CM_TRAFFIC_DLG;
|
||||
|
||||
// Internet connection settings
|
||||
typedef struct CM_INTERNET_SETTING
|
||||
{
|
||||
UINT ProxyType; // Type of proxy server
|
||||
char ProxyHostName[MAX_HOST_NAME_LEN + 1]; // Proxy server host name
|
||||
UINT ProxyPort; // Proxy server port number
|
||||
char ProxyUsername[MAX_USERNAME_LEN + 1]; // Proxy server user name
|
||||
char ProxyPassword[MAX_USERNAME_LEN + 1]; // Proxy server password
|
||||
} CM_INTERNET_SETTING;
|
||||
|
||||
static CM *cm = NULL;
|
||||
|
||||
void CmFreeTrayExternal(void *hWnd);
|
||||
|
||||
// Normal RPC call macro
|
||||
__forceinline static bool CALL(HWND hWnd, UINT code)
|
||||
{
|
||||
UINT ret = code;
|
||||
if (ret != ERR_NO_ERROR)
|
||||
{
|
||||
if (ret == ERR_DISCONNECTED)
|
||||
{
|
||||
if (cm != NULL)
|
||||
{
|
||||
Close(cm->hMainWnd);
|
||||
}
|
||||
else
|
||||
{
|
||||
MsgBox(hWnd, MB_ICONSTOP, _UU("SM_DISCONNECTED"));
|
||||
}
|
||||
|
||||
if (cm != NULL)
|
||||
{
|
||||
CmFreeTrayExternal((void *)cm->hMainWnd);
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
UINT flag = MB_ICONEXCLAMATION;
|
||||
if (ret == ERR_VLAN_IS_USED)
|
||||
{
|
||||
CmVoice("using_vlan");
|
||||
}
|
||||
if (hWnd != NULL && cm != NULL && cm->hEasyWnd != NULL)
|
||||
{
|
||||
hWnd = cm->hEasyWnd;
|
||||
}
|
||||
if (hWnd != NULL && cm != NULL && hWnd == cm->hEasyWnd)
|
||||
{
|
||||
flag |= MB_SETFOREGROUND | MB_TOPMOST;
|
||||
}
|
||||
MsgBox(hWnd, flag, _E(ret));
|
||||
}
|
||||
}
|
||||
|
||||
if (ret == ERR_NO_ERROR)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Extended RPC call macro (get an error value)
|
||||
__forceinline static UINT CALLEX(HWND hWnd, UINT code)
|
||||
{
|
||||
UINT ret = code;
|
||||
if (ret != ERR_NO_ERROR)
|
||||
{
|
||||
if (ret == ERR_DISCONNECTED)
|
||||
{
|
||||
if (cm != NULL)
|
||||
{
|
||||
Close(cm->hMainWnd);
|
||||
}
|
||||
else
|
||||
{
|
||||
MsgBox(hWnd, MB_ICONSTOP, _UU("SM_DISCONNECTED"));
|
||||
}
|
||||
if (cm != NULL)
|
||||
{
|
||||
CmFreeTrayExternal((void *)cm->hMainWnd);
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
typedef struct CM_LOADX
|
||||
{
|
||||
X *x;
|
||||
} CM_LOADX;
|
||||
|
||||
typedef struct CM_SETTING_DLG
|
||||
{
|
||||
bool CheckPassword;
|
||||
UCHAR HashedPassword[SHA1_SIZE];
|
||||
} CM_SETTING_DLG;
|
||||
|
||||
typedef struct CM_EASY_DLG
|
||||
{
|
||||
bool EndDialogCalled;
|
||||
} CM_EASY_DLG;
|
||||
|
||||
|
||||
|
||||
// Task tray related
|
||||
#define WM_CM_TRAY_MESSAGE (WM_APP + 44)
|
||||
#define WM_CM_SETTING_CHANGED_MESSAGE (WM_APP + 45)
|
||||
#define WM_CM_EASY_REFRESH (WM_APP + 46)
|
||||
#define WM_CM_SHOW (WM_APP + 47)
|
||||
#define CMD_EASY_DBLCLICK 40697
|
||||
#define CMD_VGC_CONNECT 40698
|
||||
#define CM_TRAY_ANIMATION_INTERVAL 3000
|
||||
#define CM_TRAY_MAX_ITEMS 4096
|
||||
#define CM_TRAY_MENU_ID_START 12000
|
||||
#define CM_TRAY_MENU_CONNECT_ID_START (CM_TRAY_MENU_ID_START + CM_TRAY_MAX_ITEMS)
|
||||
#define CM_TRAY_MENU_STATUS_ID_START (CM_TRAY_MENU_CONNECT_ID_START + CM_TRAY_MAX_ITEMS)
|
||||
#define CM_TRAY_MENU_DISCONNECT_ID_START (CM_TRAY_MENU_STATUS_ID_START + CM_TRAY_MAX_ITEMS)
|
||||
#define CM_TRAY_MENU_RECENT_ID_START (CM_TRAY_MENU_DISCONNECT_ID_START + CM_TRAY_MAX_ITEMS)
|
||||
#define CM_TRAY_IS_CONNECT_ID(id) (((id) >= CM_TRAY_MENU_CONNECT_ID_START) && (id) < CM_TRAY_MENU_STATUS_ID_START)
|
||||
#define CM_TRAY_IS_STATUS_ID(id) (((id) >= CM_TRAY_MENU_STATUS_ID_START) && (id) < CM_TRAY_MENU_DISCONNECT_ID_START)
|
||||
#define CM_TRAY_IS_DISCONNECT_ID(id) (((id) >= CM_TRAY_MENU_DISCONNECT_ID_START) && (id) < (CM_TRAY_MENU_DISCONNECT_ID_START + CM_TRAY_MAX_ITEMS))
|
||||
#define CM_TRAY_IS_RECENT_ID(id) (((id) >= CM_TRAY_MENU_RECENT_ID_START) && (id) < (CM_TRAY_MENU_RECENT_ID_START + CM_TRAY_MAX_ITEMS))
|
||||
|
||||
|
||||
// Function prototype
|
||||
void InitCM(bool set_app_id);
|
||||
void FreeCM();
|
||||
void MainCM();
|
||||
bool LoginCM();
|
||||
void LogoutCM();
|
||||
UINT CmLoginDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void MainCMWindow();
|
||||
void CmSendImportMessage(HWND hWnd, wchar_t *filename, UINT msg);
|
||||
UINT CmMainWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmMainWindowOnSize(HWND hWnd);
|
||||
void CmMainWindowOnInit(HWND hWnd);
|
||||
void CmMainWindowOnQuit(HWND hWnd);
|
||||
void CmSaveMainWindowPos(HWND hWnd);
|
||||
void CmMainWindowOnCommand(HWND hWnd, WPARAM wParam, LPARAM lParam);
|
||||
void CmMainWindowOnCommandEx(HWND hWnd, WPARAM wParam, LPARAM lParam, bool easy);
|
||||
bool CmIsEnabled(HWND hWnd, UINT id);
|
||||
bool CmIsChecked(UINT id);
|
||||
bool CmIsBold(UINT id);
|
||||
void CmMainWindowOnPopupMenu(HWND hWnd, HMENU hMenu, UINT pos);
|
||||
void CmSaveMainWindowPos(HWND hWnd);
|
||||
void CmRedrawStatusBar(HWND hWnd);
|
||||
void CmRefresh(HWND hWnd);
|
||||
void CmRefreshEx(HWND hWnd, bool style_changed);
|
||||
void CmSetForegroundProcessToCnService();
|
||||
void CmInitAccountList(HWND hWnd);
|
||||
void CmInitAccountListEx(HWND hWnd, bool easy);
|
||||
void CmInitVLanList(HWND hWnd);
|
||||
void CmRefreshAccountList(HWND hWnd);
|
||||
void CmRefreshAccountListEx(HWND hWnd, bool easy);
|
||||
void CmRefreshAccountListEx2(HWND hWnd, bool easy, bool style_changed);
|
||||
void CmRefreshVLanList(HWND hWnd);
|
||||
void CmRefreshVLanListEx(HWND hWnd, bool style_changed);
|
||||
void CmSaveAccountListPos(HWND hWnd);
|
||||
void CmSaveVLanListPos(HWND hWnd);
|
||||
wchar_t *CmGetProtocolName(UINT n);
|
||||
void CmVLanNameToPrintName(char *str, UINT size, char *name);
|
||||
bool CmPrintNameToVLanName(char *name, UINT size, char *str);
|
||||
void CmMainWindowOnNotify(HWND hWnd, NMHDR *n);
|
||||
void CmOnKey(HWND hWnd, bool ctrl, bool alt, UINT key);
|
||||
void CmAccountListRightClick(HWND hWnd);
|
||||
void CmVLanListRightClick(HWND hWnd);
|
||||
void CmConnect(HWND hWnd, wchar_t *account_name);
|
||||
void CmDisconnect(HWND hWnd, wchar_t *account_name);
|
||||
void CmInitNotifyClientThread();
|
||||
void CmFreeNotifyClientThread();
|
||||
void CmNotifyClientThread(THREAD *thread, void *param);
|
||||
void CmDeleteAccount(HWND hWnd, wchar_t *account_name);
|
||||
void CmStatus(HWND hWnd, wchar_t *account_name);
|
||||
void CmStatusDlg(HWND hWnd, wchar_t *account_name);
|
||||
UINT CmStatusDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmStatusDlgPrint(HWND hWnd, CM_STATUS *cmst);
|
||||
void CmPrintStatusToListView(LVB *b, RPC_CLIENT_GET_CONNECTION_STATUS *s);
|
||||
void CmPrintStatusToListViewEx(LVB *b, RPC_CLIENT_GET_CONNECTION_STATUS *s, bool server_mode);
|
||||
void CmStatusDlgPrintCert(HWND hWnd, CM_STATUS *st, bool server);
|
||||
void CmPolicyDlg(HWND hWnd, CM_STATUS *st);
|
||||
UINT CmPolicyDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmPolicyDlgPrint(HWND hWnd, CM_POLICY *p);
|
||||
void CmPolicyDlgPrintEx(HWND hWnd, CM_POLICY *p, bool cascade_mode);
|
||||
void CmPolicyDlgPrintEx2(HWND hWnd, CM_POLICY *p, bool cascade_mode, bool ver);
|
||||
void CmNewAccount(HWND hWnd);
|
||||
void CmEditAccount(HWND hWnd, wchar_t *account_name);
|
||||
void CmGenerateNewAccountName(HWND hWnd, wchar_t *name, UINT size);
|
||||
void CmGenerateCopyName(HWND hWnd, wchar_t *name, UINT size, wchar_t *old_name);
|
||||
void CmGenerateImportName(HWND hWnd, wchar_t *name, UINT size, wchar_t *old_name);
|
||||
CM_ACCOUNT *CmCreateNewAccountObject(HWND hWnd);
|
||||
CM_ACCOUNT *CmGetExistAccountObject(HWND hWnd, wchar_t *account_name);
|
||||
void CmEnumHubStart(HWND hWnd, CLIENT_OPTION *o);
|
||||
void CmInitEnumHub();
|
||||
void CmFreeEnumHub();
|
||||
void CmFreeAccountObject(HWND hWnd, CM_ACCOUNT *a);
|
||||
bool CmEditAccountDlg(HWND hWnd, CM_ACCOUNT *a);
|
||||
UINT CmEditAccountDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmEditAccountDlgUpdate(HWND hWnd, CM_ACCOUNT *a);
|
||||
void CmEditAccountDlgInit(HWND hWnd, CM_ACCOUNT *a);
|
||||
void CmEditAccountDlgOnOk(HWND hWnd, CM_ACCOUNT *a);
|
||||
void CmEditAccountDlgStartEnumHub(HWND hWnd, CM_ACCOUNT *a);
|
||||
bool CmLoadXAndK(HWND hWnd, X **x, K **k);
|
||||
bool CmLoadK(HWND hWnd, K **k);
|
||||
bool CmLoadKEx(HWND hWnd, K **k, char *filename, UINT size);
|
||||
bool CmLoadKExW(HWND hWnd, K **k, wchar_t *filename, UINT size);
|
||||
bool CmLoadXFromFileOrSecureCard(HWND hWnd, X **x);
|
||||
void CmLoadXFromFileOrSecureCardDlgInit(HWND hWnd, CM_LOADX *p);
|
||||
void CmLoadXFromFileOrSecureCardDlgUpdate(HWND hWnd, CM_LOADX *p);
|
||||
UINT CmLoadXFromFileOrSecureCardDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
bool CmLoadX(HWND hWnd, X **x);
|
||||
bool CmLoadXEx(HWND hWnd, X **x, char *filename, UINT size);
|
||||
bool CmLoadXExW(HWND hWnd, X **x, wchar_t *filename, UINT size);
|
||||
X *CmGetIssuer(X *x);
|
||||
bool CmProxyDlg(HWND hWnd, CLIENT_OPTION *a);
|
||||
void CmProxyDlgUpdate(HWND hWnd, CLIENT_OPTION *a);
|
||||
UINT CmProxyDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
bool CmDetailDlg(HWND hWnd, CM_ACCOUNT *a);
|
||||
UINT CmDetailDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
char *CmNewVLanDlg(HWND hWnd);
|
||||
UINT CmNewVLanDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmCopyAccount(HWND hWnd, wchar_t *account_name);
|
||||
void CmExportAccount(HWND hWnd, wchar_t *account_name);
|
||||
void CmSortcut(HWND hWnd, wchar_t *account_name);
|
||||
void CmImportAccount(HWND hWnd);
|
||||
void CmImportAccountMain(HWND hWnd, wchar_t *filename);
|
||||
void CmImportAccountMainEx(HWND hWnd, wchar_t *filename, bool overwrite);
|
||||
void CmTrustDlg(HWND hWnd);
|
||||
UINT CmTrustDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmTrustDlgUpdate(HWND hWnd);
|
||||
void CmTrustDlgRefresh(HWND hWnd);
|
||||
void CmTrustImport(HWND hWnd);
|
||||
void CmTrustExport(HWND hWnd);
|
||||
void CmTrustView(HWND hWnd);
|
||||
void CmPassword(HWND hWnd);
|
||||
UINT CmPasswordProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmPasswordRefresh(HWND hWnd);
|
||||
void CmRefreshStatusBar(HWND hWnd);
|
||||
UINT CmGetNumConnected(HWND hWnd);
|
||||
void CmDisconnectAll(HWND hWnd);
|
||||
wchar_t *CmGenerateMainWindowTitle();
|
||||
void CmConfigDlg(HWND hWnd);
|
||||
UINT CmConfigDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmConfigDlgInit(HWND hWnd);
|
||||
void CmConfigDlgRefresh(HWND hWnd);
|
||||
void CmConfigDlgOnOk(HWND hWnd);
|
||||
bool CmWarningDesktop(HWND hWnd, wchar_t *account_name);
|
||||
UINT CmDesktopDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmDesktopDlgInit(HWND hWnd, wchar_t *account_name);
|
||||
bool CmStopInstallVLan(HWND hWnd);
|
||||
void CmChangePassword(HWND hWnd, CLIENT_OPTION *o, char *hubname, char *username);
|
||||
UINT CmChangePasswordProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmChangePasswordUpdate(HWND hWnd, CM_CHANGE_PASSWORD *p);
|
||||
void SmShowPublicVpnServerHtml(HWND hWnd);
|
||||
void CmConnectShortcut(UCHAR *key);
|
||||
UINT CmSelectSecure(HWND hWnd, UINT current_id);
|
||||
void CmClientSecureManager(HWND hWnd);
|
||||
UINT CmClientSelectSecure(HWND hWnd);
|
||||
UINT CmSelectSecureDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmSelectSecureDlgInit(HWND hWnd, UINT default_id);
|
||||
void CmSelectSecureDlgUpdate(HWND hWnd);
|
||||
void CmSecureManager(HWND hWnd, UINT id);
|
||||
void CmSecureManagerEx(HWND hWnd, UINT id, bool no_new_cert);
|
||||
UINT CmSecureManagerDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmSecureManagerDlgInit(HWND hWnd, UINT id);
|
||||
void CmSecureManagerDlgUpdate(HWND hWnd, UINT id);
|
||||
void CmSecureManagerDlgRefresh(HWND hWnd, UINT id);
|
||||
void CmSecureManagerDlgPrintList(HWND hWnd, LIST *o);
|
||||
void CmSecureManagerDlgPrintListEx(HWND hWnd, UINT id, LIST *o, UINT type);
|
||||
wchar_t *CmSecureObjTypeToStr(UINT type);
|
||||
UINT CmSecureType(HWND hWnd);
|
||||
UINT CmSecureTypeDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmSecureManagerDlgImport(HWND hWnd, UINT id);
|
||||
void CmSecureManagerDlgDelete(HWND hWnd, UINT id);
|
||||
void CmSecureManagerDlgExport(HWND hWnd, UINT id);
|
||||
void CmSecureManagerDlgNewCert(HWND hWnd, UINT id);
|
||||
void CmSecurePin(HWND hWnd, UINT id);
|
||||
UINT CmSecurePinDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmSecurePinDlgUpdate(HWND hWnd);
|
||||
void CmInitTray(HWND hWnd);
|
||||
void CmPollingTray(HWND hWnd);
|
||||
void CmFreeTray(HWND hWnd);
|
||||
void CmChangeTrayString(HWND hWnd, wchar_t *str);
|
||||
UINT CmGetTrayIconId(bool animation, UINT animation_counter);
|
||||
void CmShowOrHideWindow(HWND hWnd);
|
||||
void CmShowTrayMenu(HWND hWnd);
|
||||
HMENU CmCreateTraySubMenu(HWND hWnd, bool flag, UINT start_id);
|
||||
HMENU CmCreateRecentSubMenu(HWND hWnd, UINT start_id);
|
||||
bool CmCheckPkcsEula(HWND hWnd, UINT id);
|
||||
UINT CmPkcsEulaDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmDeleteOldStartupTrayFile();
|
||||
UINT CmTrafficDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmTrafficDlgInit(HWND hWnd);
|
||||
bool CmTrafficDlgUpdate(HWND hWnd);
|
||||
void CmTrafficDlgOnOk(HWND hWnd);
|
||||
bool CmTrafficLoadFromReg(CM_TRAFFIC *t);
|
||||
void CmTrafficGetDefaultSetting(CM_TRAFFIC *t);
|
||||
void CmTrafficSaveToReg(CM_TRAFFIC *t);
|
||||
void CmTrafficDlgToStruct(HWND hWnd, CM_TRAFFIC *t);
|
||||
void CmExecTraffic(HWND hWnd, CM_TRAFFIC *t);
|
||||
UINT CmTrafficRunDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmTrafficRunDlgInit(HWND hWnd, CM_TRAFFIC_DLG *d);
|
||||
void CmTrafficRunDlgStart(HWND hWnd, CM_TRAFFIC_DLG *d);
|
||||
void CmTrafficRunDlgPrintProc(void *param, wchar_t *str);
|
||||
void CmTrafficRunDlgAddStr(HWND hWnd, wchar_t *str);
|
||||
void CmTrafficRunDlgHalt(HWND hWnd, CM_TRAFFIC_DLG *d);
|
||||
void CmTrafficRunDlgHaltThread(THREAD *t, void *param);
|
||||
void CmTrafficRunDlgClientWaitThread(THREAD *t, void *param);
|
||||
void CmTrafficResult(HWND hWnd, TT_RESULT *r);
|
||||
UINT CmTrafficResultDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmTrafficResultDlgInit(HWND hWnd, TT_RESULT *res);
|
||||
void CmTryToExecUiHelper();
|
||||
void CmInitTryToExecUiHelper();
|
||||
void CmFreeTryToExecUiHelper();
|
||||
void CmTryToExecUiHelperThread(THREAD *thread, void *param);
|
||||
bool CmSetting(HWND hWnd);
|
||||
UINT CmSettingDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmSettingDlgInit(HWND hWnd, CM_SETTING_DLG *d);
|
||||
void CmSettingDlgUpdate(HWND hWnd, CM_SETTING_DLG *d);
|
||||
void CmSettingDlgOnOk(HWND hWnd, CM_SETTING_DLG *d);
|
||||
void CmApplyCmSetting();
|
||||
void CmMainWindowOnTrayClicked(HWND hWnd, WPARAM wParam, LPARAM lParam);
|
||||
void CmShowEasy();
|
||||
void CmCloseEasy();
|
||||
void CmMainWindowOnShowEasy(HWND hWnd);
|
||||
UINT CmEasyDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void CmEasyDlgInit(HWND hWnd, CM_EASY_DLG *d);
|
||||
void CmEasyDlgUpdate(HWND hWnd, CM_EASY_DLG *d);
|
||||
void CmEasyDlgRefresh(HWND hWnd, CM_EASY_DLG *d);
|
||||
void CmRefreshEasy();
|
||||
void CmEasyDlgOnNotify(HWND hWnd, CM_EASY_DLG *d, NMHDR *n);
|
||||
void CmEasyDlgOnKey(HWND hWnd, CM_EASY_DLG *d, bool ctrl, bool alt, UINT key);
|
||||
void CmEasyDlgOnCommand(HWND hWnd, CM_EASY_DLG *d, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
bool CmStartStartupMutex();
|
||||
void CmEndStartupMutex();
|
||||
void CmSetUacWindowActive();
|
||||
void CmUacHelperThread(THREAD *thread, void *param);
|
||||
void CmProxyDlgUseForIE(HWND hWnd, CLIENT_OPTION *o);
|
||||
void CmGetSystemInternetSetting(CM_INTERNET_SETTING *setting);
|
||||
void CmProxyDlgSet(HWND hWnd, CLIENT_OPTION *o, CM_INTERNET_SETTING *setting);
|
||||
bool CmGetProxyServerNameAndPortFromIeProxyRegStr(char *name, UINT name_size, UINT *port, char *str, char *server_type);
|
||||
void *CmUpdateJumpList(UINT start_id);
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
1708
src/Cedar/Cedar.c
Normal file
1708
src/Cedar/Cedar.c
Normal file
File diff suppressed because it is too large
Load Diff
1194
src/Cedar/Cedar.h
Normal file
1194
src/Cedar/Cedar.h
Normal file
File diff suppressed because it is too large
Load Diff
1529
src/Cedar/Cedar.vcproj
Normal file
1529
src/Cedar/Cedar.vcproj
Normal file
File diff suppressed because it is too large
Load Diff
89
src/Cedar/CedarPch.c
Normal file
89
src/Cedar/CedarPch.c
Normal file
@ -0,0 +1,89 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// CedarPch.c
|
||||
// Cedar Pre-compile Header Generating Code
|
||||
|
||||
#include "CedarPch.h"
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
100
src/Cedar/CedarPch.h
Normal file
100
src/Cedar/CedarPch.h
Normal file
@ -0,0 +1,100 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// CedarPch.h
|
||||
// Header file for grecompile header generation for Cedar
|
||||
|
||||
#include <GlobalConst.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
#include <stdarg.h>
|
||||
#include <time.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <Mayaqua/Mayaqua.h>
|
||||
#include <Cedar/Cedar.h>
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
720
src/Cedar/CedarType.h
Normal file
720
src/Cedar/CedarType.h
Normal file
@ -0,0 +1,720 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// CedarType.h
|
||||
// List of types that Cedar using
|
||||
|
||||
#ifndef CEDARTYPE_H
|
||||
#define CEDARTYPE_H
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Remote Procedure Call
|
||||
// ==============================================================
|
||||
|
||||
typedef struct RPC RPC;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Account
|
||||
// ==============================================================
|
||||
|
||||
typedef struct POLICY_ITEM POLICY_ITEM;
|
||||
typedef struct POLICY POLICY;
|
||||
typedef struct USERGROUP USERGROUP;
|
||||
typedef struct USER USER;
|
||||
typedef struct AUTHPASSWORD AUTHPASSWORD;
|
||||
typedef struct AUTHUSERCERT AUTHUSERCERT;
|
||||
typedef struct AUTHROOTCERT AUTHROOTCERT;
|
||||
typedef struct AUTHRADIUS AUTHRADIUS;
|
||||
typedef struct AUTHNT AUTHNT;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Listener
|
||||
// ==============================================================
|
||||
|
||||
typedef struct DOS DOS;
|
||||
typedef struct LISTENER LISTENER;
|
||||
typedef struct TCP_ACCEPTED_PARAM TCP_ACCEPTED_PARAM;
|
||||
typedef struct UDP_ENTRY UDP_ENTRY;
|
||||
typedef struct DYNAMIC_LISTENER DYNAMIC_LISTENER;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Logging
|
||||
// ==============================================================
|
||||
|
||||
typedef struct PACKET_LOG PACKET_LOG;
|
||||
typedef struct HUB_LOG HUB_LOG;
|
||||
typedef struct RECORD RECORD;
|
||||
typedef struct LOG LOG;
|
||||
typedef struct ERASER ERASER;
|
||||
typedef struct SLOG SLOG;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Connection
|
||||
// ==============================================================
|
||||
|
||||
typedef struct KEEP KEEP;
|
||||
typedef struct SECURE_SIGN SECURE_SIGN;
|
||||
typedef struct RC4_KEY_PAIR RC4_KEY_PAIR;
|
||||
typedef struct CLIENT_OPTION CLIENT_OPTION;
|
||||
typedef struct CLIENT_AUTH CLIENT_AUTH;
|
||||
typedef struct TCPSOCK TCPSOCK;
|
||||
typedef struct TCP TCP;
|
||||
typedef struct UDP UDP;
|
||||
typedef struct BLOCK BLOCK;
|
||||
typedef struct CONNECTION CONNECTION;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Session
|
||||
// ==============================================================
|
||||
|
||||
typedef struct NODE_INFO NODE_INFO;
|
||||
typedef struct PACKET_ADAPTER PACKET_ADAPTER;
|
||||
typedef struct SESSION SESSION;
|
||||
typedef struct UI_PASSWORD_DLG UI_PASSWORD_DLG;
|
||||
typedef struct UI_MSG_DLG UI_MSG_DLG;
|
||||
typedef struct UI_NICINFO UI_NICINFO;
|
||||
typedef struct UI_CONNECTERROR_DLG UI_CONNECTERROR_DLG;
|
||||
typedef struct UI_CHECKCERT UI_CHECKCERT;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Hub
|
||||
// ==============================================================
|
||||
|
||||
typedef struct SE_LINK SE_LINK;
|
||||
typedef struct TEST_HISTORY TEST_HISTORY;
|
||||
typedef struct SE_TEST SE_TEST;
|
||||
typedef struct HUBDB HUBDB;
|
||||
typedef struct TRAFFIC_LIMITER TRAFFIC_LIMITER;
|
||||
typedef struct STORM STORM;
|
||||
typedef struct HUB_PA HUB_PA;
|
||||
typedef struct HUB_OPTION HUB_OPTION;
|
||||
typedef struct MAC_TABLE_ENTRY MAC_TABLE_ENTRY;
|
||||
typedef struct IP_TABLE_ENTRY IP_TABLE_ENTRY;
|
||||
typedef struct LOOP_LIST LOOP_LIST;
|
||||
typedef struct ACCESS ACCESS;
|
||||
typedef struct TICKET TICKET;
|
||||
typedef struct TRAFFIC_DIFF TRAFFIC_DIFF;
|
||||
typedef struct HUB HUB;
|
||||
typedef struct ADMIN_OPTION ADMIN_OPTION;
|
||||
typedef struct CRL CRL;
|
||||
typedef struct AC AC;
|
||||
typedef struct USERLIST USERLIST;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Protocol
|
||||
// ==============================================================
|
||||
|
||||
typedef struct CHECK_CERT_THREAD_PROC CHECK_CERT_THREAD_PROC;
|
||||
typedef struct SECURE_SIGN_THREAD_PROC SECURE_SIGN_THREAD_PROC;
|
||||
typedef struct RAND_CACHE RAND_CACHE;
|
||||
typedef struct BLACK BLACK;
|
||||
typedef struct SEND_SIGNATURE_PARAM SEND_SIGNATURE_PARAM;
|
||||
typedef struct UPDATE_CLIENT UPDATE_CLIENT;
|
||||
typedef struct UPDATE_CLIENT_SETTING UPDATE_CLIENT_SETTING;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Link
|
||||
// ==============================================================
|
||||
|
||||
typedef struct LINK LINK;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Virtual
|
||||
// ==============================================================
|
||||
|
||||
typedef struct ARP_ENTRY ARP_ENTRY;
|
||||
typedef struct ARP_WAIT ARP_WAIT;
|
||||
typedef struct IP_WAIT IP_WAIT;
|
||||
typedef struct IP_PART IP_PART;
|
||||
typedef struct IP_COMBINE IP_COMBINE;
|
||||
typedef struct NAT_ENTRY NAT_ENTRY;
|
||||
typedef struct TCP_OPTION TCP_OPTION;
|
||||
typedef struct VH VH;
|
||||
typedef struct VH_OPTION VH_OPTION;
|
||||
typedef struct DHCP_LEASE DHCP_LEASE;
|
||||
typedef struct NATIVE_NAT NATIVE_NAT;
|
||||
typedef struct NATIVE_NAT_ENTRY NATIVE_NAT_ENTRY;
|
||||
typedef struct DNS_PARSED_PACKET DNS_PARSED_PACKET;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// WPC
|
||||
// ==============================================================
|
||||
|
||||
typedef struct INTERNET_SETTING INTERNET_SETTING;
|
||||
typedef struct URL_DATA URL_DATA;
|
||||
typedef struct WPC_ENTRY WPC_ENTRY;
|
||||
typedef struct WPC_PACKET WPC_PACKET;
|
||||
typedef struct WPC_CONNECT WPC_CONNECT;
|
||||
|
||||
// ==============================================================
|
||||
// VLAN
|
||||
// ==============================================================
|
||||
|
||||
typedef struct ROUTE_TRACKING ROUTE_TRACKING;
|
||||
typedef struct VLAN VLAN;
|
||||
typedef struct INSTANCE_LIST INSTANCE_LIST;
|
||||
typedef struct VLAN_PARAM VLAN_PARAM;
|
||||
|
||||
#ifdef OS_UNIX
|
||||
typedef struct UNIX_VLAN_LIST UNIX_VLAN_LIST;
|
||||
#endif // OS_UNIX
|
||||
|
||||
// ==============================================================
|
||||
// Null LAN
|
||||
// ==============================================================
|
||||
|
||||
typedef struct NULL_LAN NULL_LAN;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Bridge
|
||||
// ==============================================================
|
||||
|
||||
typedef struct ETH ETH;
|
||||
typedef struct BRIDGE BRIDGE;
|
||||
typedef struct LOCALBRIDGE LOCALBRIDGE;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Layer-3 Switch
|
||||
// ==============================================================
|
||||
|
||||
typedef struct L3IF L3IF;
|
||||
typedef struct L3SW L3SW;
|
||||
typedef struct L3TABLE L3TABLE;
|
||||
typedef struct L3ARPENTRY L3ARPENTRY;
|
||||
typedef struct L3ARPWAIT L3ARPWAIT;
|
||||
typedef struct L3PACKET L3PACKET;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Client
|
||||
// ==============================================================
|
||||
|
||||
typedef struct ACCOUNT ACCOUNT;
|
||||
typedef struct CLIENT_CONFIG CLIENT_CONFIG;
|
||||
typedef struct RPC_CLIENT_VERSION RPC_CLIENT_VERSION;
|
||||
typedef struct RPC_CLIENT_PASSWORD RPC_CLIENT_PASSWORD;
|
||||
typedef struct RPC_CLIENT_PASSWORD_SETTING RPC_CLIENT_PASSWORD_SETTING;
|
||||
typedef struct RPC_CLIENT_ENUM_CA_ITEM RPC_CLIENT_ENUM_CA_ITEM;
|
||||
typedef struct RPC_CLIENT_ENUM_CA RPC_CLIENT_ENUM_CA;
|
||||
typedef struct RPC_CERT RPC_CERT;
|
||||
typedef struct RPC_CLIENT_DELETE_CA RPC_CLIENT_DELETE_CA;
|
||||
typedef struct RPC_GET_CA RPC_GET_CA;
|
||||
typedef struct RPC_GET_ISSUER RPC_GET_ISSUER;
|
||||
typedef struct RPC_CLIENT_ENUM_SECURE_ITEM RPC_CLIENT_ENUM_SECURE_ITEM;
|
||||
typedef struct RPC_CLIENT_ENUM_SECURE RPC_CLIENT_ENUM_SECURE;
|
||||
typedef struct RPC_USE_SECURE RPC_USE_SECURE;
|
||||
typedef struct RPC_ENUM_OBJECT_IN_SECURE RPC_ENUM_OBJECT_IN_SECURE;
|
||||
typedef struct RPC_CLIENT_CREATE_VLAN RPC_CLIENT_CREATE_VLAN;
|
||||
typedef struct RPC_CLIENT_GET_VLAN RPC_CLIENT_GET_VLAN;
|
||||
typedef struct RPC_CLIENT_SET_VLAN RPC_CLIENT_SET_VLAN;
|
||||
typedef struct RPC_CLIENT_ENUM_VLAN_ITEM RPC_CLIENT_ENUM_VLAN_ITEM;
|
||||
typedef struct RPC_CLIENT_ENUM_VLAN RPC_CLIENT_ENUM_VLAN;
|
||||
typedef struct RPC_CLIENT_CREATE_ACCOUNT RPC_CLIENT_CREATE_ACCOUNT;
|
||||
typedef struct RPC_CLIENT_ENUM_ACCOUNT_ITEM RPC_CLIENT_ENUM_ACCOUNT_ITEM;
|
||||
typedef struct RPC_CLIENT_ENUM_ACCOUNT RPC_CLIENT_ENUM_ACCOUNT;
|
||||
typedef struct RPC_CLIENT_DELETE_ACCOUNT RPC_CLIENT_DELETE_ACCOUNT;
|
||||
typedef struct RPC_RENAME_ACCOUNT RPC_RENAME_ACCOUNT;
|
||||
typedef struct RPC_CLIENT_GET_ACCOUNT RPC_CLIENT_GET_ACCOUNT;
|
||||
typedef struct RPC_CLIENT_CONNECT RPC_CLIENT_CONNECT;
|
||||
typedef struct RPC_CLIENT_GET_CONNECTION_STATUS RPC_CLIENT_GET_CONNECTION_STATUS;
|
||||
typedef struct CLIENT_RPC_CONNECTION CLIENT_RPC_CONNECTION;
|
||||
typedef struct CLIENT CLIENT;
|
||||
typedef struct RPC_CLIENT_NOTIFY RPC_CLIENT_NOTIFY;
|
||||
typedef struct REMOTE_CLIENT REMOTE_CLIENT;
|
||||
typedef struct NOTIFY_CLIENT NOTIFY_CLIENT;
|
||||
typedef struct UNIX_VLAN UNIX_VLAN;
|
||||
typedef struct CM_SETTING CM_SETTING;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Server
|
||||
// ==============================================================
|
||||
|
||||
typedef struct HUB_LIST HUB_LIST;
|
||||
typedef struct FARM_TASK FARM_TASK;
|
||||
typedef struct FARM_MEMBER FARM_MEMBER;
|
||||
typedef struct FARM_CONTROLLER FARM_CONTROLLER;
|
||||
typedef struct SERVER_LISTENER SERVER_LISTENER;
|
||||
typedef struct SERVER SERVER;
|
||||
typedef struct RPC_ENUM_SESSION RPC_ENUM_SESSION;
|
||||
typedef struct RPC_SESSION_STATUS RPC_SESSION_STATUS;
|
||||
typedef struct CAPS CAPS;
|
||||
typedef struct CAPSLIST CAPSLIST;
|
||||
typedef struct LOG_FILE LOG_FILE;
|
||||
typedef struct SYSLOG_SETTING SYSLOG_SETTING;
|
||||
typedef struct HUB_SNAPSHOT HUB_SNAPSHOT;
|
||||
typedef struct SERVER_SNAPSHOT SERVER_SNAPSHOT;
|
||||
typedef struct SERVER_HUB_CREATE_HISTORY SERVER_HUB_CREATE_HISTORY;
|
||||
typedef struct OPENVPN_SSTP_CONFIG OPENVPN_SSTP_CONFIG;
|
||||
|
||||
// ==============================================================
|
||||
// Server Admin Tool
|
||||
// ==============================================================
|
||||
|
||||
typedef struct ADMIN ADMIN;
|
||||
typedef struct RPC_TEST RPC_TEST;
|
||||
typedef struct RPC_SERVER_INFO RPC_SERVER_INFO;
|
||||
typedef struct RPC_SERVER_STATUS RPC_SERVER_STATUS;
|
||||
typedef struct RPC_LISTENER RPC_LISTENER;
|
||||
typedef struct RPC_LISTENER_LIST RPC_LISTENER_LIST;
|
||||
typedef struct RPC_STR RPC_STR;
|
||||
typedef struct RPC_SET_PASSWORD RPC_SET_PASSWORD;
|
||||
typedef struct RPC_FARM RPC_FARM;
|
||||
typedef struct RPC_FARM_HUB RPC_FARM_HUB;
|
||||
typedef struct RPC_FARM_INFO RPC_FARM_INFO;
|
||||
typedef struct RPC_ENUM_FARM_ITEM RPC_ENUM_FARM_ITEM;
|
||||
typedef struct RPC_ENUM_FARM RPC_ENUM_FARM;
|
||||
typedef struct RPC_FARM_CONNECTION_STATUS RPC_FARM_CONNECTION_STATUS;
|
||||
typedef struct RPC_KEY_PAIR RPC_KEY_PAIR;
|
||||
typedef struct RPC_HUB_OPTION RPC_HUB_OPTION;
|
||||
typedef struct RPC_RADIUS RPC_RADIUS;
|
||||
typedef struct RPC_HUB RPC_HUB;
|
||||
typedef struct RPC_CREATE_HUB RPC_CREATE_HUB;
|
||||
typedef struct RPC_ENUM_HUB_ITEM RPC_ENUM_HUB_ITEM;
|
||||
typedef struct RPC_ENUM_HUB RPC_ENUM_HUB;
|
||||
typedef struct RPC_DELETE_HUB RPC_DELETE_HUB;
|
||||
typedef struct RPC_ENUM_CONNECTION_ITEM RPC_ENUM_CONNECTION_ITEM;
|
||||
typedef struct RPC_ENUM_CONNECTION RPC_ENUM_CONNECTION;
|
||||
typedef struct RPC_DISCONNECT_CONNECTION RPC_DISCONNECT_CONNECTION;
|
||||
typedef struct RPC_CONNECTION_INFO RPC_CONNECTION_INFO;
|
||||
typedef struct RPC_SET_HUB_ONLINE RPC_SET_HUB_ONLINE;
|
||||
typedef struct RPC_HUB_STATUS RPC_HUB_STATUS;
|
||||
typedef struct RPC_HUB_LOG RPC_HUB_LOG;
|
||||
typedef struct RPC_HUB_ADD_CA RPC_HUB_ADD_CA;
|
||||
typedef struct RPC_HUB_ENUM_CA_ITEM RPC_HUB_ENUM_CA_ITEM;
|
||||
typedef struct RPC_HUB_ENUM_CA RPC_HUB_ENUM_CA;
|
||||
typedef struct RPC_HUB_GET_CA RPC_HUB_GET_CA;
|
||||
typedef struct RPC_HUB_DELETE_CA RPC_HUB_DELETE_CA;
|
||||
typedef struct RPC_CREATE_LINK RPC_CREATE_LINK;
|
||||
typedef struct RPC_ENUM_LINK_ITEM RPC_ENUM_LINK_ITEM;
|
||||
typedef struct RPC_ENUM_LINK RPC_ENUM_LINK;
|
||||
typedef struct RPC_LINK_STATUS RPC_LINK_STATUS;
|
||||
typedef struct RPC_LINK RPC_LINK;
|
||||
typedef struct RPC_ENUM_ACCESS_LIST RPC_ENUM_ACCESS_LIST;
|
||||
typedef struct RPC_ADD_ACCESS RPC_ADD_ACCESS;
|
||||
typedef struct RPC_DELETE_ACCESS RPC_DELETE_ACCESS;
|
||||
typedef struct RPC_SET_USER RPC_SET_USER;
|
||||
typedef struct RPC_ENUM_USER_ITEM RPC_ENUM_USER_ITEM;
|
||||
typedef struct RPC_ENUM_USER RPC_ENUM_USER;
|
||||
typedef struct RPC_SET_GROUP RPC_SET_GROUP;
|
||||
typedef struct RPC_ENUM_GROUP_ITEM RPC_ENUM_GROUP_ITEM;
|
||||
typedef struct RPC_ENUM_GROUP RPC_ENUM_GROUP;
|
||||
typedef struct RPC_DELETE_USER RPC_DELETE_USER;
|
||||
typedef struct RPC_ENUM_SESSION_ITEM RPC_ENUM_SESSION_ITEM;
|
||||
typedef struct RPC_DELETE_SESSION RPC_DELETE_SESSION;
|
||||
typedef struct RPC_ENUM_MAC_TABLE_ITEM RPC_ENUM_MAC_TABLE_ITEM;
|
||||
typedef struct RPC_ENUM_MAC_TABLE RPC_ENUM_MAC_TABLE;
|
||||
typedef struct RPC_ENUM_IP_TABLE_ITEM RPC_ENUM_IP_TABLE_ITEM;
|
||||
typedef struct RPC_ENUM_IP_TABLE RPC_ENUM_IP_TABLE;
|
||||
typedef struct RPC_DELETE_TABLE RPC_DELETE_TABLE;
|
||||
typedef struct RPC_KEEP RPC_KEEP;
|
||||
typedef struct RPC_ENUM_ETH_ITEM RPC_ENUM_ETH_ITEM;
|
||||
typedef struct RPC_ENUM_ETH RPC_ENUM_ETH;
|
||||
typedef struct RPC_LOCALBRIDGE RPC_LOCALBRIDGE;
|
||||
typedef struct RPC_ENUM_LOCALBRIDGE RPC_ENUM_LOCALBRIDGE;
|
||||
typedef struct RPC_BRIDGE_SUPPORT RPC_BRIDGE_SUPPORT;
|
||||
typedef struct RPC_CONFIG RPC_CONFIG;
|
||||
typedef struct RPC_ADMIN_OPTION RPC_ADMIN_OPTION;
|
||||
typedef struct RPC_L3SW RPC_L3SW;
|
||||
typedef struct RPC_L3IF RPC_L3IF;
|
||||
typedef struct RPC_L3TABLE RPC_L3TABLE;
|
||||
typedef struct RPC_ENUM_L3SW_ITEM RPC_ENUM_L3SW_ITEM;
|
||||
typedef struct RPC_ENUM_L3SW RPC_ENUM_L3SW;
|
||||
typedef struct RPC_ENUM_L3IF RPC_ENUM_L3IF;
|
||||
typedef struct RPC_ENUM_L3TABLE RPC_ENUM_L3TABLE;
|
||||
typedef struct RPC_CRL RPC_CRL;
|
||||
typedef struct RPC_ENUM_CRL_ITEM RPC_ENUM_CRL_ITEM;
|
||||
typedef struct RPC_ENUM_CRL RPC_ENUM_CRL;
|
||||
typedef struct RPC_INT RPC_INT;
|
||||
typedef struct RPC_AC_LIST RPC_AC_LIST;
|
||||
typedef struct RPC_ENUM_LOG_FILE_ITEM RPC_ENUM_LOG_FILE_ITEM;
|
||||
typedef struct RPC_ENUM_LOG_FILE RPC_ENUM_LOG_FILE;
|
||||
typedef struct RPC_READ_LOG_FILE RPC_READ_LOG_FILE;
|
||||
typedef struct DOWNLOAD_PROGRESS DOWNLOAD_PROGRESS;
|
||||
typedef struct RPC_RENAME_LINK RPC_RENAME_LINK;
|
||||
typedef struct RPC_ENUM_LICENSE_KEY RPC_ENUM_LICENSE_KEY;
|
||||
typedef struct RPC_ENUM_LICENSE_KEY_ITEM RPC_ENUM_LICENSE_KEY_ITEM;
|
||||
typedef struct RPC_LICENSE_STATUS RPC_LICENSE_STATUS;
|
||||
typedef struct RPC_ENUM_ETH_VLAN_ITEM RPC_ENUM_ETH_VLAN_ITEM;
|
||||
typedef struct RPC_ENUM_ETH_VLAN RPC_ENUM_ETH_VLAN;
|
||||
typedef struct RPC_MSG RPC_MSG;
|
||||
typedef struct RPC_WINVER RPC_WINVER;
|
||||
typedef struct RPC_ENUM_ETHERIP_ID RPC_ENUM_ETHERIP_ID;
|
||||
typedef struct RPC_SPECIAL_LISTENER RPC_SPECIAL_LISTENER;
|
||||
typedef struct RPC_AZURE_STATUS RPC_AZURE_STATUS;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// NAT
|
||||
// ==============================================================
|
||||
|
||||
typedef struct NAT NAT;
|
||||
typedef struct NAT_ADMIN NAT_ADMIN;
|
||||
typedef struct RPC_DUMMY RPC_DUMMY;
|
||||
typedef struct RPC_NAT_STATUS RPC_NAT_STATUS;
|
||||
typedef struct RPC_NAT_INFO RPC_NAT_INFO;
|
||||
typedef struct RPC_ENUM_NAT_ITEM RPC_ENUM_NAT_ITEM;
|
||||
typedef struct RPC_ENUM_NAT RPC_ENUM_NAT;
|
||||
typedef struct RPC_ENUM_DHCP_ITEM RPC_ENUM_DHCP_ITEM;
|
||||
typedef struct RPC_ENUM_DHCP RPC_ENUM_DHCP;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// SecureNAT
|
||||
// ==============================================================
|
||||
|
||||
typedef struct SNAT SNAT;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// WinUI
|
||||
// ==============================================================
|
||||
|
||||
typedef struct LED LED;
|
||||
typedef struct WIZARD WIZARD;
|
||||
typedef struct WIZARD_PAGE WIZARD_PAGE;
|
||||
typedef struct WINUI_UPDATE WINUI_UPDATE;
|
||||
typedef struct WINUI_UPDATE_DLG_PARAM WINUI_UPDATE_DLG_PARAM;
|
||||
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Console
|
||||
// ==============================================================
|
||||
|
||||
typedef struct PARAM PARAM;
|
||||
typedef struct PARAM_VALUE PARAM_VALUE;
|
||||
typedef struct CONSOLE CONSOLE;
|
||||
typedef struct LOCAL_CONSOLE_PARAM LOCAL_CONSOLE_PARAM;
|
||||
typedef struct CMD CMD;
|
||||
typedef struct CMD_EVAL_MIN_MAX CMD_EVAL_MIN_MAX;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Command
|
||||
// ==============================================================
|
||||
|
||||
typedef struct PS PS;
|
||||
typedef struct PC PC;
|
||||
typedef struct CT CT;
|
||||
typedef struct CTC CTC;
|
||||
typedef struct CTR CTR;
|
||||
typedef struct TTC TTC;
|
||||
typedef struct TTS TTS;
|
||||
typedef struct TT_RESULT TT_RESULT;
|
||||
typedef struct TTS_SOCK TTS_SOCK;
|
||||
typedef struct TTC_SOCK TTC_SOCK;
|
||||
typedef struct PT PT;
|
||||
|
||||
// ==============================================================
|
||||
// EtherLogger
|
||||
// ==============================================================
|
||||
|
||||
typedef struct EL EL;
|
||||
typedef struct EL_DEVICE EL_DEVICE;
|
||||
typedef struct EL_LICENSE_STATUS EL_LICENSE_STATUS;
|
||||
typedef struct RPC_ADD_DEVICE RPC_ADD_DEVICE;
|
||||
typedef struct RPC_DELETE_DEVICE RPC_DELETE_DEVICE;
|
||||
typedef struct RPC_ENUM_DEVICE_ITEM RPC_ENUM_DEVICE_ITEM;
|
||||
typedef struct RPC_ENUM_DEVICE RPC_ENUM_DEVICE;
|
||||
typedef struct RPC_EL_LICENSE_STATUS RPC_EL_LICENSE_STATUS;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Database
|
||||
// ==============================================================
|
||||
|
||||
typedef struct LICENSE_PRODUCT LICENSE_PRODUCT;
|
||||
typedef struct LICENSE_SYSTEM LICENSE_SYSTEM;
|
||||
typedef struct LICENSE_DATA LICENSE_DATA;
|
||||
typedef struct LICENSE LICENSE;
|
||||
typedef struct LICENSE_STATUS LICENSE_STATUS;
|
||||
typedef struct SECURE_PACK_FOLDER SECURE_PACK_FOLDER;
|
||||
typedef struct WIDE_MACHINE_ID WIDE_MACHINE_ID;
|
||||
typedef struct TRIAL_INFO TRIAL_INFO;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// IPsec
|
||||
// ==============================================================
|
||||
|
||||
typedef struct IPSEC_SERVER IPSEC_SERVER;
|
||||
typedef struct IPSEC_SERVICES IPSEC_SERVICES;
|
||||
typedef struct ETHERIP_ID ETHERIP_ID;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// L2TP
|
||||
// ==============================================================
|
||||
|
||||
typedef struct L2TP_SERVER L2TP_SERVER;
|
||||
typedef struct L2TP_TUNNEL L2TP_TUNNEL;
|
||||
typedef struct L2TP_SESSION L2TP_SESSION;
|
||||
typedef struct L2TP_PACKET L2TP_PACKET;
|
||||
typedef struct L2TP_AVP L2TP_AVP;
|
||||
typedef struct L2TP_QUEUE L2TP_QUEUE;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// PPP
|
||||
// ==============================================================
|
||||
|
||||
typedef struct PPP_SESSION PPP_SESSION;
|
||||
typedef struct PPP_OPTION PPP_OPTION;
|
||||
typedef struct PPP_LCP PPP_LCP;
|
||||
typedef struct PPP_PACKET PPP_PACKET;
|
||||
typedef struct PPP_IPOPTION PPP_IPOPTION;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// EtherIP
|
||||
// ==============================================================
|
||||
|
||||
typedef struct ETHERIP_SERVER ETHERIP_SERVER;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// IKE
|
||||
// ==============================================================
|
||||
|
||||
typedef struct IKE_SERVER IKE_SERVER;
|
||||
typedef struct IKE_SA IKE_SA;
|
||||
typedef struct IKE_SA_TRANSFORM_SETTING IKE_SA_TRANSFORM_SETTING;
|
||||
typedef struct IKE_CLIENT IKE_CLIENT;
|
||||
typedef struct IPSECSA IPSECSA;
|
||||
typedef struct IKE_CAPS IKE_CAPS;
|
||||
|
||||
// ==============================================================
|
||||
// IPSec Packet
|
||||
// ==============================================================
|
||||
|
||||
typedef struct IKE_COMMON_HEADER IKE_COMMON_HEADER;
|
||||
typedef struct IKE_SA_HEADER IKE_SA_HEADER;
|
||||
typedef struct IKE_PROPOSAL_HEADER IKE_PROPOSAL_HEADER;
|
||||
typedef struct IKE_TRANSFORM_HEADER IKE_TRANSFORM_HEADER;
|
||||
typedef struct IKE_TRANSFORM_VALUE IKE_TRANSFORM_VALUE;
|
||||
typedef struct IKE_ID_HEADER IKE_ID_HEADER;
|
||||
typedef struct IKE_CERT_HEADER IKE_CERT_HEADER;
|
||||
typedef struct IKE_CERT_REQUEST_HEADER IKE_CERT_REQUEST_HEADER;
|
||||
typedef struct IKE_NOTICE_HEADER IKE_NOTICE_HEADER;
|
||||
typedef struct IKE_DELETE_HEADER IKE_DELETE_HEADER;
|
||||
typedef struct IKE_NAT_OA_HEADER IKE_NAT_OA_HEADER;
|
||||
typedef struct IPSEC_SA_TRANSFORM_SETTING IPSEC_SA_TRANSFORM_SETTING;
|
||||
|
||||
typedef struct IKE_PACKET_SA_PAYLOAD IKE_PACKET_SA_PAYLOAD;
|
||||
typedef struct IKE_PACKET_PROPOSAL_PAYLOAD IKE_PACKET_PROPOSAL_PAYLOAD;
|
||||
typedef struct IKE_PACKET_TRANSFORM_PAYLOAD IKE_PACKET_TRANSFORM_PAYLOAD;
|
||||
typedef struct IKE_PACKET_TRANSFORM_VALUE IKE_PACKET_TRANSFORM_VALUE;
|
||||
typedef struct IKE_PACKET_DATA_PAYLOAD IKE_PACKET_DATA_PAYLOAD;
|
||||
typedef struct IKE_PACKET_ID_PAYLOAD IKE_PACKET_ID_PAYLOAD;
|
||||
typedef struct IKE_PACKET_CERT_PAYLOAD IKE_PACKET_CERT_PAYLOAD;
|
||||
typedef struct IKE_PACKET_CERT_REQUEST_PAYLOAD IKE_PACKET_CERT_REQUEST_PAYLOAD;
|
||||
typedef struct IKE_PACKET_NOTICE_PAYLOAD IKE_PACKET_NOTICE_PAYLOAD;
|
||||
typedef struct IKE_PACKET_DELETE_PAYLOAD IKE_PACKET_DELETE_PAYLOAD;
|
||||
typedef struct IKE_PACKET_NAT_OA_PAYLOAD IKE_PACKET_NAT_OA_PAYLOAD;
|
||||
|
||||
typedef struct IKE_PACKET_PAYLOAD IKE_PACKET_PAYLOAD;
|
||||
typedef struct IKE_PACKET IKE_PACKET;
|
||||
|
||||
typedef struct IKE_P1_KEYSET IKE_P1_KEYSET;
|
||||
|
||||
typedef struct IKE_CRYPTO IKE_CRYPTO;
|
||||
typedef struct IKE_HASH IKE_HASH;
|
||||
typedef struct IKE_DH IKE_DH;
|
||||
typedef struct IKE_ENGINE IKE_ENGINE;
|
||||
typedef struct IKE_CRYPTO_KEY IKE_CRYPTO_KEY;
|
||||
typedef struct IKE_CRYPTO_PARAM IKE_CRYPTO_PARAM;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// IPSec for Windows 7 / Vista / 2008 / 2008 R2
|
||||
// ==============================================================
|
||||
|
||||
typedef struct IPSEC_WIN7 IPSEC_WIN7;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// In-Process VPN Client
|
||||
// ==============================================================
|
||||
|
||||
typedef struct IPC IPC;
|
||||
typedef struct IPC_ARP IPC_ARP;
|
||||
typedef struct IPC_ASYNC IPC_ASYNC;
|
||||
typedef struct IPC_PARAM IPC_PARAM;
|
||||
typedef struct IPC_DHCP_RELESAE_QUEUE IPC_DHCP_RELESAE_QUEUE;
|
||||
typedef struct IPC_MSCHAP_V2_AUTHINFO IPC_MSCHAP_V2_AUTHINFO;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// UDP Acceleration
|
||||
// ==============================================================
|
||||
|
||||
typedef struct UDP_ACCEL UDP_ACCEL;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// SSTP (Microsoft Secure Socket Tunneling Protocol) Stack
|
||||
// ==============================================================
|
||||
|
||||
typedef struct SSTP_SERVER SSTP_SERVER;
|
||||
typedef struct SSTP_PACKET SSTP_PACKET;
|
||||
typedef struct SSTP_ATTRIBUTE SSTP_ATTRIBUTE;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// OpenVPN Protocol Stack
|
||||
// ==============================================================
|
||||
|
||||
typedef struct OPENVPN_SERVER OPENVPN_SERVER;
|
||||
typedef struct OPENVPN_SERVER_UDP OPENVPN_SERVER_UDP;
|
||||
typedef struct OPENVPN_SESSION OPENVPN_SESSION;
|
||||
typedef struct OPENVPN_CHANNEL OPENVPN_CHANNEL;
|
||||
typedef struct OPENVPN_PACKET OPENVPN_PACKET;
|
||||
typedef struct OPENVPN_CONTROL_PACKET OPENVPN_CONTROL_PACKET;
|
||||
typedef struct OPENVPN_KEY_METHOD_2 OPENVPN_KEY_METHOD_2;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Dynamic DNS Client
|
||||
// ==============================================================
|
||||
|
||||
typedef struct DDNS_CLIENT DDNS_CLIENT;
|
||||
typedef struct DDNS_REGISTER_PARAM DDNS_REGISTER_PARAM;
|
||||
typedef struct DDNS_CLIENT_STATUS DDNS_CLIENT_STATUS;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// VPN Azure Client
|
||||
// ==============================================================
|
||||
typedef struct AZURE_CLIENT AZURE_CLIENT;
|
||||
typedef struct AZURE_PARAM AZURE_PARAM;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// VPN Gate Service
|
||||
// ==============================================================
|
||||
|
||||
typedef struct VGS VGS;
|
||||
typedef struct VGS_CONFIG VGS_CONFIG;
|
||||
typedef struct VGC VGC;
|
||||
typedef struct VGHOST VGHOST;
|
||||
typedef struct VGHOSTLIST VGHOSTLIST;
|
||||
typedef struct VGHOSTDAT VGHOSTDAT;
|
||||
typedef struct VGCPOLLTASK VGCPOLLTASK;
|
||||
typedef struct VGS_LOG VGS_LOG;
|
||||
typedef struct VGC_UDPHOST VGC_UDPHOST;
|
||||
typedef struct MIRROR_SERVER MIRROR_SERVER;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// Native Stack
|
||||
// ==============================================================
|
||||
|
||||
typedef struct NATIVE_STACK NATIVE_STACK;
|
||||
|
||||
|
||||
// ==============================================================
|
||||
// SeLow User-mode
|
||||
// ==============================================================
|
||||
|
||||
typedef struct SU SU;
|
||||
typedef struct SU_ADAPTER SU_ADAPTER;
|
||||
typedef struct SU_ADAPTER_LIST SU_ADAPTER_LIST;
|
||||
|
||||
|
||||
|
||||
#endif // CEDARTYPE_H
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
11005
src/Cedar/Client.c
Normal file
11005
src/Cedar/Client.c
Normal file
File diff suppressed because it is too large
Load Diff
849
src/Cedar/Client.h
Normal file
849
src/Cedar/Client.h
Normal file
@ -0,0 +1,849 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// Client.h
|
||||
// Header of Client.c
|
||||
|
||||
#ifndef CLIENT_H
|
||||
#define CLIENT_H
|
||||
|
||||
#define CLIENT_CONFIG_PORT GC_CLIENT_CONFIG_PORT // Client port number
|
||||
#define CLIENT_NOTIFY_PORT GC_CLIENT_NOTIFY_PORT // Client notification port number
|
||||
#define CLIENT_WAIT_CN_READY_TIMEOUT (10 * 1000) // Standby time to start the client notification service
|
||||
|
||||
|
||||
// Check whether the client can run on the specified OS_TYPE
|
||||
#define IS_CLIENT_SUPPORTED_OS(t) \
|
||||
((OS_IS_WINDOWS_NT(t) && GET_KETA(t, 100) >= 2) || (OS_IS_WINDOWS_9X(t)))
|
||||
|
||||
|
||||
// Constants
|
||||
#define CLIENT_CONFIG_FILE_NAME "@vpn_client.config"
|
||||
#define CLIENT_DEFAULT_KEEPALIVE_HOST "keepalive.softether.org"
|
||||
#define CLIENT_DEFAULT_KEEPALIVE_PORT 80
|
||||
#define CLIENT_DEFAULT_KEEPALIVE_INTERVAL KEEP_INTERVAL_DEFAULT
|
||||
|
||||
#define CLIENT_RPC_MODE_NOTIFY 0
|
||||
#define CLIENT_RPC_MODE_MANAGEMENT 1
|
||||
#define CLIENT_RPC_MODE_SHORTCUT 2
|
||||
#define CLIENT_RPC_MODE_SHORTCUT_DISCONNECT 3
|
||||
|
||||
#define CLIENT_MACOS_TAP_NAME "tap0"
|
||||
|
||||
#define CLIENT_SAVER_INTERVAL (30 * 1000)
|
||||
|
||||
#define CLIENT_NOTIFY_SERVICE_INSTANCENAME GC_SW_SOFTETHER_PREFIX "vpnclient_uihelper"
|
||||
|
||||
#define CLIENT_WIN32_EXE_FILENAME "vpnclient.exe"
|
||||
#define CLIENT_WIN32_EXE_FILENAME_X64 "vpnclient_x64.exe"
|
||||
#define CLIENT_WIN32_EXE_FILENAME_IA64 "vpnclient_ia64.exe"
|
||||
|
||||
#define CLIENT_CUSTOM_INI_FILENAME "@custom.ini"
|
||||
|
||||
#define CLIENT_GLOBAL_PULSE_NAME "clientglobalpulse"
|
||||
|
||||
|
||||
// List of virtual LAN cards in UNIX
|
||||
struct UNIX_VLAN
|
||||
{
|
||||
bool Enabled; // Enable flag
|
||||
char Name[MAX_SIZE]; // Name
|
||||
UCHAR MacAddress[6]; // MAC address
|
||||
UCHAR Padding[2];
|
||||
};
|
||||
|
||||
// Account
|
||||
struct ACCOUNT
|
||||
{
|
||||
// Static data
|
||||
CLIENT_OPTION *ClientOption; // Client Option
|
||||
CLIENT_AUTH *ClientAuth; // Client authentication data
|
||||
bool CheckServerCert; // Check the server certificate
|
||||
X *ServerCert; // Server certificate
|
||||
bool StartupAccount; // Start-up account
|
||||
UCHAR ShortcutKey[SHA1_SIZE]; // Key
|
||||
UINT64 CreateDateTime; // Creation date and time
|
||||
UINT64 UpdateDateTime; // Updating date
|
||||
UINT64 LastConnectDateTime; // Last connection date and time
|
||||
|
||||
// Dynamic data
|
||||
LOCK *lock; // Lock
|
||||
SESSION *ClientSession; // Client session
|
||||
CLIENT_STATUS_PRINTER *StatusPrinter; // Status indicator
|
||||
|
||||
SOCK *StatusWindow; // Status window
|
||||
};
|
||||
|
||||
// Client Settings
|
||||
struct CLIENT_CONFIG
|
||||
{
|
||||
bool AllowRemoteConfig; // Allow the remote configuration
|
||||
bool UseKeepConnect; // Keep connected to the Internet
|
||||
char KeepConnectHost[MAX_HOST_NAME_LEN + 1]; // Host name
|
||||
UINT KeepConnectPort; // Port number
|
||||
UINT KeepConnectProtocol; // Protocol
|
||||
UINT KeepConnectInterval; // Interval
|
||||
bool NoChangeWcmNetworkSettingOnWindows8; // Don't change the WCM network settings on Windows 8
|
||||
};
|
||||
|
||||
// Version acquisition
|
||||
struct RPC_CLIENT_VERSION
|
||||
{
|
||||
char ClientProductName[128]; // Client product name
|
||||
char ClientVersionString[128]; // Client version string
|
||||
char ClientBuildInfoString[128]; // Build client information string
|
||||
UINT ClientVerInt; // Client version integer value
|
||||
UINT ClientBuildInt; // Client build number integer value
|
||||
UINT ProcessId; // Process ID
|
||||
UINT OsType; // OS type
|
||||
bool IsVLanNameRegulated; // Whether a virtual LAN card name must be "VLAN" + number
|
||||
bool IsVgcSupported; // Whether the VPN Gate Client is supported
|
||||
bool ShowVgcLink; // Display a VPN Gate Client link
|
||||
char ClientId[128]; // Client OD
|
||||
};
|
||||
|
||||
// Password Setting
|
||||
struct RPC_CLIENT_PASSWORD
|
||||
{
|
||||
char Password[MAX_PASSWORD_LEN + 1]; // Password
|
||||
bool PasswordRemoteOnly; // The password is required only remote access
|
||||
};
|
||||
|
||||
// Get the password setting
|
||||
struct RPC_CLIENT_PASSWORD_SETTING
|
||||
{
|
||||
bool IsPasswordPresented; // Password exists
|
||||
bool PasswordRemoteOnly; // The password is required only remote access
|
||||
};
|
||||
|
||||
// Certificate enumeration item
|
||||
struct RPC_CLIENT_ENUM_CA_ITEM
|
||||
{
|
||||
UINT Key; // Certificate key
|
||||
wchar_t SubjectName[MAX_SIZE]; // Issued to
|
||||
wchar_t IssuerName[MAX_SIZE]; // Issuer
|
||||
UINT64 Expires; // Expiration date
|
||||
};
|
||||
|
||||
// Certificate enumeration
|
||||
struct RPC_CLIENT_ENUM_CA
|
||||
{
|
||||
UINT NumItem; // Number of items
|
||||
RPC_CLIENT_ENUM_CA_ITEM **Items; // Item
|
||||
};
|
||||
|
||||
// Certificate item
|
||||
struct RPC_CERT
|
||||
{
|
||||
X *x; // Certificate
|
||||
};
|
||||
|
||||
// Delete the certificate
|
||||
struct RPC_CLIENT_DELETE_CA
|
||||
{
|
||||
UINT Key; // Certificate key
|
||||
};
|
||||
|
||||
// Get the certificate
|
||||
struct RPC_GET_CA
|
||||
{
|
||||
UINT Key; // Certificate key
|
||||
X *x; // Certificate
|
||||
};
|
||||
|
||||
// Get the issuer
|
||||
struct RPC_GET_ISSUER
|
||||
{
|
||||
X *x; // Certificate
|
||||
X *issuer_x; // Issuer
|
||||
};
|
||||
|
||||
// Secure device enumeration item
|
||||
struct RPC_CLIENT_ENUM_SECURE_ITEM
|
||||
{
|
||||
UINT DeviceId; // Device ID
|
||||
UINT Type; // Type
|
||||
char DeviceName[MAX_SIZE]; // Device name
|
||||
char Manufacturer[MAX_SIZE]; // Manufacturer
|
||||
};
|
||||
|
||||
// Enumeration of secure devices
|
||||
struct RPC_CLIENT_ENUM_SECURE
|
||||
{
|
||||
UINT NumItem; // Number of items
|
||||
RPC_CLIENT_ENUM_SECURE_ITEM **Items; // Item
|
||||
};
|
||||
|
||||
// Specify a secure device
|
||||
struct RPC_USE_SECURE
|
||||
{
|
||||
UINT DeviceId; // Device ID
|
||||
};
|
||||
|
||||
// Enumerate objects in the secure device
|
||||
struct RPC_ENUM_OBJECT_IN_SECURE
|
||||
{
|
||||
UINT hWnd; // Window handle
|
||||
UINT NumItem; // Number of items
|
||||
char **ItemName; // Item name
|
||||
bool *ItemType; // Type (true = secret key, false = public key)
|
||||
};
|
||||
|
||||
// Create a virtual LAN
|
||||
struct RPC_CLIENT_CREATE_VLAN
|
||||
{
|
||||
char DeviceName[MAX_SIZE]; // Device name
|
||||
};
|
||||
|
||||
// Get a Virtual LAN information
|
||||
struct RPC_CLIENT_GET_VLAN
|
||||
{
|
||||
char DeviceName[MAX_SIZE]; // Device name
|
||||
bool Enabled; // Flag of whether it works or not
|
||||
char MacAddress[MAX_SIZE]; // MAC address
|
||||
char Version[MAX_SIZE]; // Version
|
||||
char FileName[MAX_SIZE]; // Driver file name
|
||||
char Guid[MAX_SIZE]; // GUID
|
||||
};
|
||||
|
||||
// Set the virtual LAN information
|
||||
struct RPC_CLIENT_SET_VLAN
|
||||
{
|
||||
char DeviceName[MAX_SIZE]; // Device name
|
||||
char MacAddress[MAX_SIZE]; // MAC address
|
||||
};
|
||||
|
||||
// Virtual LAN enumeration item
|
||||
struct RPC_CLIENT_ENUM_VLAN_ITEM
|
||||
{
|
||||
char DeviceName[MAX_SIZE]; // Device name
|
||||
bool Enabled; // Operation flag
|
||||
char MacAddress[MAX_SIZE]; // MAC address
|
||||
char Version[MAX_SIZE]; // Version
|
||||
};
|
||||
|
||||
// Enumerate the virtual LANs
|
||||
struct RPC_CLIENT_ENUM_VLAN
|
||||
{
|
||||
UINT NumItem; // Item count
|
||||
RPC_CLIENT_ENUM_VLAN_ITEM **Items; // Item
|
||||
};
|
||||
|
||||
// Create an account
|
||||
struct RPC_CLIENT_CREATE_ACCOUNT
|
||||
{
|
||||
CLIENT_OPTION *ClientOption; // Client Option
|
||||
CLIENT_AUTH *ClientAuth; // Client authentication data
|
||||
bool StartupAccount; // Startup account
|
||||
bool CheckServerCert; // Checking of the server certificate
|
||||
X *ServerCert; // Server certificate
|
||||
UCHAR ShortcutKey[SHA1_SIZE]; // Shortcut Key
|
||||
};
|
||||
|
||||
// Enumeration item of account
|
||||
struct RPC_CLIENT_ENUM_ACCOUNT_ITEM
|
||||
{
|
||||
wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // Account name
|
||||
char UserName[MAX_USERNAME_LEN + 1]; // User name
|
||||
char ServerName[MAX_HOST_NAME_LEN + 1]; // Server name
|
||||
char DeviceName[MAX_DEVICE_NAME_LEN + 1]; // Device name
|
||||
UINT ProxyType; // Type of proxy connection
|
||||
char ProxyName[MAX_HOST_NAME_LEN + 1]; // Host name
|
||||
bool Active; // Operation flag
|
||||
bool Connected; // Connection completion flag
|
||||
bool StartupAccount; // Startup account
|
||||
UINT Port; // Port number (Ver 3.0 or later)
|
||||
char HubName[MAX_HUBNAME_LEN + 1]; // Virtual HUB name (Ver 3.0 or later)
|
||||
UINT64 CreateDateTime; // Creation date and time (Ver 3.0 or later)
|
||||
UINT64 UpdateDateTime; // Modified date (Ver 3.0 or later)
|
||||
UINT64 LastConnectDateTime; // Last connection date and time (Ver 3.0 or later)
|
||||
UINT tmp1; // Temporary data
|
||||
};
|
||||
|
||||
// Enumeration of accounts
|
||||
struct RPC_CLIENT_ENUM_ACCOUNT
|
||||
{
|
||||
UINT NumItem; // Item count
|
||||
RPC_CLIENT_ENUM_ACCOUNT_ITEM **Items; // Items
|
||||
};
|
||||
|
||||
// Delete the Account
|
||||
struct RPC_CLIENT_DELETE_ACCOUNT
|
||||
{
|
||||
wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // Account name
|
||||
};
|
||||
|
||||
// Change the account name
|
||||
struct RPC_RENAME_ACCOUNT
|
||||
{
|
||||
wchar_t OldName[MAX_ACCOUNT_NAME_LEN + 1]; // Old name
|
||||
wchar_t NewName[MAX_ACCOUNT_NAME_LEN + 1]; // New Name
|
||||
};
|
||||
|
||||
// Get the account
|
||||
struct RPC_CLIENT_GET_ACCOUNT
|
||||
{
|
||||
wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // Account name
|
||||
CLIENT_OPTION *ClientOption; // Client Option
|
||||
CLIENT_AUTH *ClientAuth; // Client authentication data
|
||||
bool StartupAccount; // Startup account
|
||||
bool CheckServerCert; // Check the server certificate
|
||||
X *ServerCert; // Server certificate
|
||||
UCHAR ShortcutKey[SHA1_SIZE]; // Shortcut Key
|
||||
UINT64 CreateDateTime; // Creation date and time (Ver 3.0 or later)
|
||||
UINT64 UpdateDateTime; // Modified date (Ver 3.0 or later)
|
||||
UINT64 LastConnectDateTime; // Last connection date and time (Ver 3.0 or later)
|
||||
};
|
||||
|
||||
// Connection
|
||||
struct RPC_CLIENT_CONNECT
|
||||
{
|
||||
wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // Account name
|
||||
};
|
||||
|
||||
// Get the Connection status
|
||||
struct RPC_CLIENT_GET_CONNECTION_STATUS
|
||||
{
|
||||
wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // Account name
|
||||
bool Active; // Operation flag
|
||||
bool Connected; // Connected flag
|
||||
UINT SessionStatus; // Session status
|
||||
char ServerName[MAX_HOST_NAME_LEN + 1]; // Server name
|
||||
UINT ServerPort; // Port number of the server
|
||||
char ServerProductName[MAX_SIZE]; // Server product name
|
||||
UINT ServerProductVer; // Server product version
|
||||
UINT ServerProductBuild; // Server product build number
|
||||
X *ServerX; // Server certificate
|
||||
X *ClientX; // Client certificate
|
||||
UINT64 StartTime; // Connection start time
|
||||
UINT64 FirstConnectionEstablisiedTime; // Connection completion time of the first connection
|
||||
UINT64 CurrentConnectionEstablishTime; // Connection completion time of this connection
|
||||
UINT NumConnectionsEatablished; // Number of connections have been established so far
|
||||
bool HalfConnection; // Half-connection
|
||||
bool QoS; // VoIP / QoS
|
||||
UINT MaxTcpConnections; // Maximum number of the TCP connections
|
||||
UINT NumTcpConnections; // Number of current TCP connections
|
||||
UINT NumTcpConnectionsUpload; // Number of inbound connections
|
||||
UINT NumTcpConnectionsDownload; // Number of outbound connections
|
||||
bool UseEncrypt; // Use of encryption
|
||||
char CipherName[32]; // Cipher algorithm name
|
||||
char ProtocolName[64]; // Protocol name
|
||||
bool UseCompress; // Use of compression
|
||||
bool IsRUDPSession; // R-UDP session
|
||||
char UnderlayProtocol[64]; // Physical communication protocol
|
||||
bool IsUdpAccelerationEnabled; // The UDP acceleration is enabled
|
||||
bool IsUsingUdpAcceleration; // Using the UDP acceleration function
|
||||
char SessionName[MAX_SESSION_NAME_LEN + 1]; // Session name
|
||||
char ConnectionName[MAX_CONNECTION_NAME_LEN + 1]; // Connection name
|
||||
UCHAR SessionKey[SHA1_SIZE]; // Session key
|
||||
POLICY Policy; // Policy
|
||||
UINT64 TotalSendSize; // Total transmitted data size
|
||||
UINT64 TotalRecvSize; // Total received data size
|
||||
UINT64 TotalSendSizeReal; // Total transmitted data size (no compression)
|
||||
UINT64 TotalRecvSizeReal; // Total received data size (no compression)
|
||||
TRAFFIC Traffic; // Traffic data
|
||||
bool IsBridgeMode; // Bridge Mode
|
||||
bool IsMonitorMode; // Monitor mode
|
||||
UINT VLanId; // VLAN ID
|
||||
};
|
||||
|
||||
|
||||
// RPC connection
|
||||
struct CLIENT_RPC_CONNECTION
|
||||
{
|
||||
struct CLIENT *Client; // Client
|
||||
bool RpcMode; // True: RPC mode, false: notification mode
|
||||
THREAD *Thread; // Processing thread
|
||||
SOCK *Sock; // Socket
|
||||
};
|
||||
|
||||
// Client object
|
||||
struct CLIENT
|
||||
{
|
||||
LOCK *lock; // Lock
|
||||
LOCK *lockForConnect; // Lock to be used in the CtConnect
|
||||
REF *ref; // Reference counter
|
||||
CEDAR *Cedar; // Cedar
|
||||
volatile bool Halt; // Halting flag
|
||||
UINT Err; // Error code
|
||||
CFG_RW *CfgRw; // Configuration file R/W
|
||||
LIST *AccountList; // Account list
|
||||
UCHAR EncryptedPassword[SHA1_SIZE]; // Password
|
||||
bool PasswordRemoteOnly; // Password is required only remote access
|
||||
UINT UseSecureDeviceId; // Secure device ID to be used
|
||||
CLIENT_CONFIG Config; // Client Settings
|
||||
LIST *RpcConnectionList; // RPC connection list
|
||||
SOCK *RpcListener; // RPC listener
|
||||
THREAD *RpcThread; // RPC thread
|
||||
LOCK *HelperLock; // Auxiliary lock
|
||||
THREAD *SaverThread; // Saver thread
|
||||
EVENT *SaverHalter; // The event to stop the Saver thread
|
||||
LIST *NotifyCancelList; // Notification event list
|
||||
KEEP *Keep; // Keep Connection
|
||||
LIST *UnixVLanList; // List of virtual LAN cards in UNIX
|
||||
LOG *Logger; // Logger
|
||||
bool DontSavePassword; // Flag for not to save the password
|
||||
ERASER *Eraser; // Eraser
|
||||
SOCKLIST *SockList; // Socket list
|
||||
CM_SETTING *CmSetting; // CM configuration
|
||||
void *GlobalPulse; // Global pulse
|
||||
THREAD *PulseRecvThread; // Pulse reception thread
|
||||
volatile bool HaltPulseThread; // Stop flag for the pulse reception thread
|
||||
bool NoSaveLog; // Do not save the log
|
||||
bool NoSaveConfig; // Do not save the settings
|
||||
INTERNET_SETTING CommonProxySetting; // Common proxy settings
|
||||
|
||||
};
|
||||
|
||||
// Notification to the remote client
|
||||
struct RPC_CLIENT_NOTIFY
|
||||
{
|
||||
UINT NotifyCode; // Code
|
||||
};
|
||||
|
||||
// Type of notification
|
||||
#define CLIENT_NOTIFY_ACCOUNT_CHANGED 1 // Account change notification
|
||||
#define CLIENT_NOTIFY_VLAN_CHANGED 2 // Virtual LAN card change notification
|
||||
|
||||
// Remote client
|
||||
struct REMOTE_CLIENT
|
||||
{
|
||||
RPC *Rpc;
|
||||
UINT OsType;
|
||||
bool Unix;
|
||||
bool Win9x;
|
||||
UINT ProcessId;
|
||||
UINT ClientBuildInt;
|
||||
bool IsVgcSupported;
|
||||
bool ShowVgcLink;
|
||||
char ClientId[128];
|
||||
};
|
||||
|
||||
// Notification client
|
||||
struct NOTIFY_CLIENT
|
||||
{
|
||||
SOCK *Sock;
|
||||
};
|
||||
|
||||
// CM configuration
|
||||
struct CM_SETTING
|
||||
{
|
||||
bool EasyMode; // Simple mode
|
||||
bool LockMode; // Setting lock mode
|
||||
UCHAR HashedPassword[SHA1_SIZE]; // Password
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
// Function prototype
|
||||
REMOTE_CLIENT *CcConnectRpc(char *server_name, char *password, bool *bad_pass, bool *no_remote, UINT wait_retry);
|
||||
REMOTE_CLIENT *CcConnectRpcEx(char *server_name, char *password, bool *bad_pass, bool *no_remote, UCHAR *key, UINT *key_error_code, bool shortcut_disconnect, UINT wait_retry);
|
||||
UINT CcShortcut(UCHAR *key);
|
||||
UINT CcShortcutDisconnect(UCHAR *key);
|
||||
void CcDisconnectRpc(REMOTE_CLIENT *rc);
|
||||
NOTIFY_CLIENT *CcConnectNotify(REMOTE_CLIENT *rc);
|
||||
void CcDisconnectNotify(NOTIFY_CLIENT *n);
|
||||
void CcStopNotify(NOTIFY_CLIENT *n);
|
||||
bool CcWaitNotify(NOTIFY_CLIENT *n);
|
||||
UINT CcGetClientVersion(REMOTE_CLIENT *r, RPC_CLIENT_VERSION *a);
|
||||
UINT CcSetCmSetting(REMOTE_CLIENT *r, CM_SETTING *a);
|
||||
UINT CcGetCmSetting(REMOTE_CLIENT *r, CM_SETTING *a);
|
||||
UINT CcSetPassword(REMOTE_CLIENT *r, RPC_CLIENT_PASSWORD *pass);
|
||||
UINT CcGetPasswordSetting(REMOTE_CLIENT *r, RPC_CLIENT_PASSWORD_SETTING *a);
|
||||
UINT CcEnumCa(REMOTE_CLIENT *r, RPC_CLIENT_ENUM_CA *e);
|
||||
UINT CcAddCa(REMOTE_CLIENT *r, RPC_CERT *cert);
|
||||
UINT CcDeleteCa(REMOTE_CLIENT *r, RPC_CLIENT_DELETE_CA *p);
|
||||
UINT CcGetCa(REMOTE_CLIENT *r, RPC_GET_CA *get);
|
||||
UINT CcEnumSecure(REMOTE_CLIENT *r, RPC_CLIENT_ENUM_SECURE *e);
|
||||
UINT CcUseSecure(REMOTE_CLIENT *r, RPC_USE_SECURE *sec);
|
||||
UINT CcGetUseSecure(REMOTE_CLIENT *r, RPC_USE_SECURE *sec);
|
||||
UINT CcEnumObjectInSecure(REMOTE_CLIENT *r, RPC_ENUM_OBJECT_IN_SECURE *e);
|
||||
UINT CcCreateVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *create);
|
||||
UINT CcUpgradeVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *create);
|
||||
UINT CcGetVLan(REMOTE_CLIENT *r, RPC_CLIENT_GET_VLAN *get);
|
||||
UINT CcSetVLan(REMOTE_CLIENT *r, RPC_CLIENT_SET_VLAN *set);
|
||||
UINT CcEnumVLan(REMOTE_CLIENT *r, RPC_CLIENT_ENUM_VLAN *e);
|
||||
UINT CcDeleteVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *d);
|
||||
UINT CcEnableVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *vlan);
|
||||
UINT CcDisableVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *vlan);
|
||||
UINT CcCreateAccount(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_ACCOUNT *a);
|
||||
UINT CcEnumAccount(REMOTE_CLIENT *r, RPC_CLIENT_ENUM_ACCOUNT *e);
|
||||
UINT CcDeleteAccount(REMOTE_CLIENT *r, RPC_CLIENT_DELETE_ACCOUNT *a);
|
||||
UINT CcSetAccount(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_ACCOUNT *a);
|
||||
UINT CcGetAccount(REMOTE_CLIENT *r, RPC_CLIENT_GET_ACCOUNT *a);
|
||||
UINT CcRenameAccount(REMOTE_CLIENT *r, RPC_RENAME_ACCOUNT *rename);
|
||||
UINT CcSetClientConfig(REMOTE_CLIENT *r, CLIENT_CONFIG *o);
|
||||
UINT CcGetClientConfig(REMOTE_CLIENT *r, CLIENT_CONFIG *o);
|
||||
UINT CcConnect(REMOTE_CLIENT *r, RPC_CLIENT_CONNECT *connect);
|
||||
UINT CcDisconnect(REMOTE_CLIENT *r, RPC_CLIENT_CONNECT *connect);
|
||||
UINT CcGetAccountStatus(REMOTE_CLIENT *r, RPC_CLIENT_GET_CONNECTION_STATUS *st);
|
||||
UINT CcSetStartupAccount(REMOTE_CLIENT *r, RPC_CLIENT_DELETE_ACCOUNT *a);
|
||||
UINT CcRemoveStartupAccount(REMOTE_CLIENT *r, RPC_CLIENT_DELETE_ACCOUNT *a);
|
||||
UINT CcGetIssuer(REMOTE_CLIENT *r, RPC_GET_ISSUER *a);
|
||||
UINT CcGetCommonProxySetting(REMOTE_CLIENT *r, INTERNET_SETTING *a);
|
||||
UINT CcSetCommonProxySetting(REMOTE_CLIENT *r, INTERNET_SETTING *a);
|
||||
|
||||
|
||||
void CcSetServiceToForegroundProcess(REMOTE_CLIENT *r);
|
||||
char *CiGetFirstVLan(CLIENT *c);
|
||||
void CiNormalizeAccountVLan(CLIENT *c);
|
||||
|
||||
bool CompareInternetSetting(INTERNET_SETTING *s1, INTERNET_SETTING *s2);
|
||||
|
||||
|
||||
void CnStart();
|
||||
void CnListenerProc(THREAD *thread, void *param);
|
||||
|
||||
void CnReleaseSocket(SOCK *s, PACK *p);
|
||||
|
||||
void CnStatusPrinter(SOCK *s, PACK *p);
|
||||
void Win32CnStatusPrinter(SOCK *s, PACK *p);
|
||||
|
||||
void CnConnectErrorDlg(SOCK *s, PACK *p);
|
||||
void Win32CnConnectErrorDlg(SOCK *s, PACK *p);
|
||||
void Win32CnConnectErrorDlgThreadProc(THREAD *thread, void *param);
|
||||
|
||||
void CnPasswordDlg(SOCK *s, PACK *p);
|
||||
void Win32CnPasswordDlg(SOCK *s, PACK *p);
|
||||
void Win32CnPasswordDlgThreadProc(THREAD *thread, void *param);
|
||||
|
||||
void CnMsgDlg(SOCK *s, PACK *p);
|
||||
void Win32CnMsgDlg(SOCK *s, PACK *p);
|
||||
void Win32CnMsgDlgThreadProc(THREAD *thread, void *param);
|
||||
|
||||
void CnNicInfo(SOCK *s, PACK *p);
|
||||
void Win32CnNicInfo(SOCK *s, PACK *p);
|
||||
void Win32CnNicInfoThreadProc(THREAD *thread, void *param);
|
||||
|
||||
void CnCheckCert(SOCK *s, PACK *p);
|
||||
void Win32CnCheckCert(SOCK *s, PACK *p);
|
||||
void Win32CnCheckCertThreadProc(THREAD *thread, void *param);
|
||||
|
||||
void CnExecDriverInstaller(SOCK *s, PACK *p);
|
||||
void Win32CnExecDriverInstaller(SOCK *s, PACK *p);
|
||||
|
||||
bool CnCheckAlreadyExists(bool lock);
|
||||
bool CnIsCnServiceReady();
|
||||
void CnWaitForCnServiceReady();
|
||||
|
||||
void CnSecureSign(SOCK *s, PACK *p);
|
||||
|
||||
SOCK *CncConnect();
|
||||
SOCK *CncConnectEx(UINT timeout);
|
||||
void CncReleaseSocket();
|
||||
void CncExit();
|
||||
UINT CncGetSessionId();
|
||||
bool CncExecDriverInstaller(char *arg);
|
||||
SOCK *CncStatusPrinterWindowStart(SESSION *s);
|
||||
void CncStatusPrinterWindowPrint(SOCK *s, wchar_t *str);
|
||||
void CncStatusPrinterWindowStop(SOCK *s);
|
||||
void CncStatusPrinterWindowThreadProc(THREAD *thread, void *param);
|
||||
bool CncConnectErrorDlg(SESSION *session, UI_CONNECTERROR_DLG *dlg);
|
||||
void CncConnectErrorDlgHaltThread(THREAD *thread, void *param);
|
||||
bool CncPasswordDlg(SESSION *session, UI_PASSWORD_DLG *dlg);
|
||||
void CncPasswordDlgHaltThread(THREAD *thread, void *param);
|
||||
void CncCheckCert(SESSION *session, UI_CHECKCERT *dlg);
|
||||
void CncCheckCertHaltThread(THREAD *thread, void *param);
|
||||
bool CncSecureSignDlg(SECURE_SIGN *sign);
|
||||
SOCK *CncMsgDlg(UI_MSG_DLG *dlg);
|
||||
void CndMsgDlgFree(SOCK *s);
|
||||
SOCK *CncNicInfo(UI_NICINFO *info);
|
||||
void CncNicInfoFree(SOCK *s);
|
||||
|
||||
void CtStartClient();
|
||||
void CtStopClient();
|
||||
CLIENT *CtGetClient();
|
||||
void CtReleaseClient(CLIENT *c);
|
||||
bool CtGetClientVersion(CLIENT *c, RPC_CLIENT_VERSION *ver);
|
||||
bool CtGetCmSetting(CLIENT *c, CM_SETTING *s);
|
||||
bool CtSetCmSetting(CLIENT *c, CM_SETTING *s);
|
||||
bool CtSetPassword(CLIENT *c, RPC_CLIENT_PASSWORD *pass);
|
||||
bool CtGetPasswordSetting(CLIENT *c, RPC_CLIENT_PASSWORD_SETTING *a);
|
||||
bool CtEnumCa(CLIENT *c, RPC_CLIENT_ENUM_CA *e);
|
||||
bool CtAddCa(CLIENT *c, RPC_CERT *cert);
|
||||
bool CtDeleteCa(CLIENT *c, RPC_CLIENT_DELETE_CA *p);
|
||||
bool CtGetCa(CLIENT *c, RPC_GET_CA *get);
|
||||
bool CtEnumSecure(CLIENT *c, RPC_CLIENT_ENUM_SECURE *e);
|
||||
bool CtUseSecure(CLIENT *c, RPC_USE_SECURE *sec);
|
||||
bool CtGetUseSecure(CLIENT *c, RPC_USE_SECURE *sec);
|
||||
bool CtEnumObjectInSecure(CLIENT *c, RPC_ENUM_OBJECT_IN_SECURE *e);
|
||||
bool CtCreateVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *create);
|
||||
bool CtUpgradeVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *create);
|
||||
bool CtGetVLan(CLIENT *c, RPC_CLIENT_GET_VLAN *get);
|
||||
bool CtSetVLan(CLIENT *c, RPC_CLIENT_SET_VLAN *set);
|
||||
bool CtEnumVLan(CLIENT *c, RPC_CLIENT_ENUM_VLAN *e);
|
||||
bool CtDeleteVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *d);
|
||||
bool CtEnableVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *vlan);
|
||||
bool CtDisableVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *vlan);
|
||||
bool CtCreateAccount(CLIENT *c, RPC_CLIENT_CREATE_ACCOUNT *a, bool inner);
|
||||
bool CtEnumAccount(CLIENT *c, RPC_CLIENT_ENUM_ACCOUNT *e);
|
||||
bool CtDeleteAccount(CLIENT *c, RPC_CLIENT_DELETE_ACCOUNT *a, bool inner);
|
||||
bool CtSetAccount(CLIENT *c, RPC_CLIENT_CREATE_ACCOUNT *a, bool inner);
|
||||
bool CtGetAccount(CLIENT *c, RPC_CLIENT_GET_ACCOUNT *a);
|
||||
bool CtRenameAccount(CLIENT *c, RPC_RENAME_ACCOUNT *rename, bool inner);
|
||||
bool CtSetClientConfig(CLIENT *c, CLIENT_CONFIG *o);
|
||||
bool CtGetClientConfig(CLIENT *c, CLIENT_CONFIG *o);
|
||||
bool CtConnect(CLIENT *c, RPC_CLIENT_CONNECT *connect);
|
||||
bool CtDisconnect(CLIENT *c, RPC_CLIENT_CONNECT *connect, bool inner);
|
||||
bool CtGetAccountStatus(CLIENT *c, RPC_CLIENT_GET_CONNECTION_STATUS *st);
|
||||
bool CtSetStartupAccount(CLIENT *c, RPC_CLIENT_DELETE_ACCOUNT *a, bool inner);
|
||||
bool CtRemoveStartupAccount(CLIENT *c, RPC_CLIENT_DELETE_ACCOUNT *a);
|
||||
bool CtGetIssuer(CLIENT *c, RPC_GET_ISSUER *a);
|
||||
bool CtGetCommonProxySetting(CLIENT *c, INTERNET_SETTING *a);
|
||||
bool CtSetCommonProxySetting(CLIENT *c, INTERNET_SETTING *a);
|
||||
|
||||
|
||||
// Internal function prototype
|
||||
void CiSendGlobalPulse(CLIENT *c);
|
||||
void CiPulseRecvThread(THREAD *thread, void *param);
|
||||
char *CiGetVpnClientExeFileName();
|
||||
void CiServerThread(THREAD *t, void *param);
|
||||
void CiInitSaver(CLIENT *c);
|
||||
void CiFreeSaver(CLIENT *c);
|
||||
void CiGetSessionStatus(RPC_CLIENT_GET_CONNECTION_STATUS *st, SESSION *s);
|
||||
PACK *CiRpcDispatch(RPC *rpc, char *name, PACK *p);
|
||||
void CiRpcAccepted(CLIENT *c, SOCK *s);
|
||||
void CiNotifyMain(CLIENT *c, SOCK *s);
|
||||
void CiRpcAcceptThread(THREAD *thread, void *param);
|
||||
void CiRpcServerThread(THREAD *thread, void *param);
|
||||
void CiStartRpcServer(CLIENT *c);
|
||||
void CiStopRpcServer(CLIENT *c);
|
||||
CLIENT_OPTION *CiLoadClientOption(FOLDER *f);
|
||||
CLIENT_AUTH *CiLoadClientAuth(FOLDER *f);
|
||||
ACCOUNT *CiLoadClientAccount(FOLDER *f);
|
||||
void CiLoadClientConfig(CLIENT_CONFIG *c, FOLDER *f);
|
||||
void CiLoadAccountDatabase(CLIENT *c, FOLDER *f);
|
||||
void CiLoadCAList(CLIENT *c, FOLDER *f);
|
||||
void CiLoadCACert(CLIENT *c, FOLDER *f);
|
||||
void CiLoadVLanList(CLIENT *c, FOLDER *f);
|
||||
void CiLoadVLan(CLIENT *c, FOLDER *f);
|
||||
bool CiReadSettingFromCfg(CLIENT *c, FOLDER *root);
|
||||
void CiWriteAccountDatabase(CLIENT *c, FOLDER *f);
|
||||
void CiWriteAccountData(FOLDER *f, ACCOUNT *a);
|
||||
void CiWriteClientOption(FOLDER *f, CLIENT_OPTION *o);
|
||||
void CiWriteClientAuth(FOLDER *f, CLIENT_AUTH *a);
|
||||
void CiWriteClientConfig(FOLDER *cc, CLIENT_CONFIG *config);
|
||||
void CiWriteSettingToCfg(CLIENT *c, FOLDER *root);
|
||||
void CiWriteCAList(CLIENT *c, FOLDER *f);
|
||||
void CiWriteCACert(CLIENT *c, FOLDER *f, X *x);
|
||||
void CiWriteVLanList(CLIENT *c, FOLDER *f);
|
||||
void CiWriteVLan(CLIENT *c, FOLDER *f, UNIX_VLAN *v);
|
||||
void CiFreeClientGetConnectionStatus(RPC_CLIENT_GET_CONNECTION_STATUS *st);
|
||||
bool CiCheckCertProc(SESSION *s, CONNECTION *c, X *server_x, bool *expired);
|
||||
bool CiSecureSignProc(SESSION *s, CONNECTION *c, SECURE_SIGN *sign);
|
||||
bool Win32CiSecureSign(SECURE_SIGN *sign);
|
||||
void CiFreeClientAuth(CLIENT_AUTH *auth);
|
||||
void CiFreeClientCreateAccount(RPC_CLIENT_CREATE_ACCOUNT *a);
|
||||
void CiFreeClientGetAccount(RPC_CLIENT_GET_ACCOUNT *a);
|
||||
void CiFreeClientEnumVLan(RPC_CLIENT_ENUM_VLAN *e);
|
||||
void CiFreeClientEnumSecure(RPC_CLIENT_ENUM_SECURE *e);
|
||||
void CiFreeClientEnumCa(RPC_CLIENT_ENUM_CA *e);
|
||||
void CiFreeEnumObjectInSecure(RPC_ENUM_OBJECT_IN_SECURE *a);
|
||||
void CiFreeGetCa(RPC_GET_CA *a);
|
||||
void CiFreeGetIssuer(RPC_GET_ISSUER *a);
|
||||
void CiFreeClientEnumAccount(RPC_CLIENT_ENUM_ACCOUNT *a);
|
||||
void CiSetError(CLIENT *c, UINT err);
|
||||
void CiCheckOs();
|
||||
CLIENT *CiNewClient();
|
||||
void CiCleanupClient(CLIENT *c);
|
||||
bool CiLoadConfigurationFile(CLIENT *c);
|
||||
void CiSaveConfigurationFile(CLIENT *c);
|
||||
void CiInitConfiguration(CLIENT *c);
|
||||
void CiSetVLanToDefault(CLIENT *c);
|
||||
bool CiIsVLan(CLIENT *c, char *name);
|
||||
void CiFreeConfiguration(CLIENT *c);
|
||||
int CiCompareAccount(void *p1, void *p2);
|
||||
void CiFreeAccount(ACCOUNT *a);
|
||||
void CiNotify(CLIENT *c);
|
||||
void CiNotifyInternal(CLIENT *c);
|
||||
void CiClientStatusPrinter(SESSION *s, wchar_t *status);
|
||||
void CiInitKeep(CLIENT *c);
|
||||
void CiFreeKeep(CLIENT *c);
|
||||
int CiCompareUnixVLan(void *p1, void *p2);
|
||||
BUF *CiAccountToCfg(RPC_CLIENT_CREATE_ACCOUNT *t);
|
||||
RPC_CLIENT_CREATE_ACCOUNT *CiCfgToAccount(BUF *b);
|
||||
void CiChangeAllVLanMacAddressIfCleared(CLIENT *c);
|
||||
void CiChangeAllVLanMacAddress(CLIENT *c);
|
||||
void CiChangeAllVLanMacAddressIfMachineChanged(CLIENT *c);
|
||||
bool CiReadLastMachineHash(void *data);
|
||||
bool CiWriteLastMachineHash(void *data);
|
||||
void CiGetCurrentMachineHash(void *data);
|
||||
void CiGetCurrentMachineHashOld(void *data);
|
||||
void CiGetCurrentMachineHashNew(void *data);
|
||||
LIST *CiLoadIni();
|
||||
void CiFreeIni(LIST *o);
|
||||
void CiLoadIniSettings(CLIENT *c);
|
||||
bool CiLoadConfigFilePathFromIni(char *path, UINT size);
|
||||
int CiCompareClientAccountEnumItemByLastConnectDateTime(void *p1, void *p2);
|
||||
bool CiIsValidVLanRegulatedName(char *name);
|
||||
void CiGenerateVLanRegulatedName(char *name, UINT size, UINT i);
|
||||
bool CiGetNextRecommendedVLanName(REMOTE_CLIENT *r, char *name, UINT size);
|
||||
void CiDisableWcmNetworkMinimize(CLIENT *c);
|
||||
bool CiTryToParseAccount(BUF *b);
|
||||
bool CiTryToParseAccountFile(wchar_t *name);
|
||||
bool CiEraseSensitiveInAccount(BUF *b);
|
||||
bool CiHasAccountSensitiveInformation(BUF *b);
|
||||
bool CiHasAccountSensitiveInformationFile(wchar_t *name);
|
||||
void CiApplyInnerVPNServerConfig(CLIENT *c);
|
||||
SERVER *CiNewInnerVPNServer(CLIENT *c);
|
||||
void CiFreeInnerVPNServer(CLIENT *c, SERVER *s);
|
||||
void CiIncrementNumActiveSessions();
|
||||
void CiDecrementNumActiveSessions();
|
||||
UINT CiGetNumActiveSessions();
|
||||
|
||||
BUF *EncryptPassword(char *password);
|
||||
BUF *EncryptPassword2(char *password);
|
||||
char *DecryptPassword(BUF *b);
|
||||
char *DecryptPassword2(BUF *b);
|
||||
|
||||
void InRpcGetIssuer(RPC_GET_ISSUER *c, PACK *p);
|
||||
void OutRpcGetIssuer(PACK *p, RPC_GET_ISSUER *c);
|
||||
void InRpcClientVersion(RPC_CLIENT_VERSION *ver, PACK *p);
|
||||
void OutRpcClientVersion(PACK *p, RPC_CLIENT_VERSION *ver);
|
||||
void InRpcClientPassword(RPC_CLIENT_PASSWORD *pw, PACK *p);
|
||||
void OutRpcClientPassword(PACK *p, RPC_CLIENT_PASSWORD *pw);
|
||||
void InRpcClientEnumCa(RPC_CLIENT_ENUM_CA *e, PACK *p);
|
||||
void OutRpcClientEnumCa(PACK *p, RPC_CLIENT_ENUM_CA *e);
|
||||
void InRpcCert(RPC_CERT *c, PACK *p);
|
||||
void OutRpcCert(PACK *p, RPC_CERT *c);
|
||||
void InRpcClientDeleteCa(RPC_CLIENT_DELETE_CA *c, PACK *p);
|
||||
void OutRpcClientDeleteCa(PACK *p, RPC_CLIENT_DELETE_CA *c);
|
||||
void InRpcGetCa(RPC_GET_CA *c, PACK *p);
|
||||
void OutRpcGetCa(PACK *p, RPC_GET_CA *c);
|
||||
void InRpcClientEnumSecure(RPC_CLIENT_ENUM_SECURE *e, PACK *p);
|
||||
void OutRpcClientEnumSecure(PACK *p, RPC_CLIENT_ENUM_SECURE *e);
|
||||
void InRpcUseSecure(RPC_USE_SECURE *u, PACK *p);
|
||||
void OutRpcUseSecure(PACK *p, RPC_USE_SECURE *u);
|
||||
void InRpcEnumObjectInSecure(RPC_ENUM_OBJECT_IN_SECURE *e, PACK *p);
|
||||
void OutRpcEnumObjectInSecure(PACK *p, RPC_ENUM_OBJECT_IN_SECURE *e);
|
||||
void InRpcCreateVLan(RPC_CLIENT_CREATE_VLAN *v, PACK *p);
|
||||
void OutRpcCreateVLan(PACK *p, RPC_CLIENT_CREATE_VLAN *v);
|
||||
void InRpcClientGetVLan(RPC_CLIENT_GET_VLAN *v, PACK *p);
|
||||
void OutRpcClientGetVLan(PACK *p, RPC_CLIENT_GET_VLAN *v);
|
||||
void InRpcClientSetVLan(RPC_CLIENT_SET_VLAN *v, PACK *p);
|
||||
void OutRpcClientSetVLan(PACK *p, RPC_CLIENT_SET_VLAN *v);
|
||||
void InRpcClientEnumVLan(RPC_CLIENT_ENUM_VLAN *v, PACK *p);
|
||||
void OutRpcClientEnumVLan(PACK *p, RPC_CLIENT_ENUM_VLAN *v);
|
||||
void InRpcClientOption(CLIENT_OPTION *c, PACK *p);
|
||||
void OutRpcClientOption(PACK *p, CLIENT_OPTION *c);
|
||||
void InRpcClientAuth(CLIENT_AUTH *c, PACK *p);
|
||||
void OutRpcClientAuth(PACK *p, CLIENT_AUTH *c);
|
||||
void InRpcClientCreateAccount(RPC_CLIENT_CREATE_ACCOUNT *c, PACK *p);
|
||||
void OutRpcClientCreateAccount(PACK *p, RPC_CLIENT_CREATE_ACCOUNT *c);
|
||||
void InRpcClientEnumAccount(RPC_CLIENT_ENUM_ACCOUNT *e, PACK *p);
|
||||
void OutRpcClientEnumAccount(PACK *p, RPC_CLIENT_ENUM_ACCOUNT *e);
|
||||
void InRpcClientDeleteAccount(RPC_CLIENT_DELETE_ACCOUNT *a, PACK *p);
|
||||
void OutRpcClientDeleteAccount(PACK *p, RPC_CLIENT_DELETE_ACCOUNT *a);
|
||||
void InRpcRenameAccount(RPC_RENAME_ACCOUNT *a, PACK *p);
|
||||
void OutRpcRenameAccount(PACK *p, RPC_RENAME_ACCOUNT *a);
|
||||
void InRpcClientGetAccount(RPC_CLIENT_GET_ACCOUNT *c, PACK *p);
|
||||
void OutRpcClientGetAccount(PACK *p, RPC_CLIENT_GET_ACCOUNT *c);
|
||||
void InRpcClientConnect(RPC_CLIENT_CONNECT *c, PACK *p);
|
||||
void OutRpcClientConnect(PACK *p, RPC_CLIENT_CONNECT *c);
|
||||
void InRpcPolicy(POLICY *o, PACK *p);
|
||||
void OutRpcPolicy(PACK *p, POLICY *o);
|
||||
void InRpcClientGetConnectionStatus(RPC_CLIENT_GET_CONNECTION_STATUS *s, PACK *p);
|
||||
void OutRpcClientGetConnectionStatus(PACK *p, RPC_CLIENT_GET_CONNECTION_STATUS *c);
|
||||
void InRpcClientNotify(RPC_CLIENT_NOTIFY *n, PACK *p);
|
||||
void OutRpcClientNotify(PACK *p, RPC_CLIENT_NOTIFY *n);
|
||||
void InRpcClientConfig(CLIENT_CONFIG *c, PACK *p);
|
||||
void OutRpcClientConfig(PACK *p, CLIENT_CONFIG *c);
|
||||
void InRpcClientPasswordSetting(RPC_CLIENT_PASSWORD_SETTING *a, PACK *p);
|
||||
void OutRpcClientPasswordSetting(PACK *p, RPC_CLIENT_PASSWORD_SETTING *a);
|
||||
void InRpcTraffic(TRAFFIC *t, PACK *p);
|
||||
void OutRpcTraffic(PACK *p, TRAFFIC *t);
|
||||
void InRpcTrafficEx(TRAFFIC *t, PACK *p, UINT i);
|
||||
void OutRpcTrafficEx(TRAFFIC *t, PACK *p, UINT i, UINT num);
|
||||
void OutRpcCmSetting(PACK *p, CM_SETTING *c);
|
||||
void InRpcCmSetting(CM_SETTING *c, PACK *p);
|
||||
|
||||
|
||||
#ifdef OS_WIN32
|
||||
void CiInitDriverVerStruct(MS_DRIVER_VER *ver);
|
||||
#endif // OS_EIN32
|
||||
|
||||
#endif // CLIENT_H
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
23538
src/Cedar/Command.c
Normal file
23538
src/Cedar/Command.c
Normal file
File diff suppressed because it is too large
Load Diff
648
src/Cedar/Command.h
Normal file
648
src/Cedar/Command.h
Normal file
@ -0,0 +1,648 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// Command.h
|
||||
// Header of Command.c
|
||||
|
||||
#ifndef COMMAND_H
|
||||
#define COMMAND_H
|
||||
|
||||
// Constants
|
||||
#define TRAFFIC_DEFAULT_PORT 9821
|
||||
#define TRAFFIC_NUMTCP_MAX 32
|
||||
#define TRAFFIC_NUMTCP_DEFAULT 32
|
||||
#define TRAFFIC_SPAN_DEFAULT 15
|
||||
#define TRAFFIC_TYPE_DOWNLOAD 1
|
||||
#define TRAFFIC_TYPE_UPLOAD 2
|
||||
#define TRAFFIC_TYPE_FULL 0
|
||||
#define TRAFFIC_BUF_SIZE 65535
|
||||
#define TRAFFIC_VER_STR_SIZE 16
|
||||
#define TRAFFIC_VER_STR "TrafficServer\r\n"
|
||||
|
||||
// Constants for Win32
|
||||
#define VPNCMD_BOOTSTRAP_REG_KEYNAME "Software\\" GC_REG_COMPANY_NAME "\\VPN Command Line Utility"
|
||||
#define VPNCMD_BOOTSTRAP_REG_VALUENAME_VER "InstalledVersion"
|
||||
#define VPNCMD_BOOTSTRAP_REG_VALUENAME_PATH "InstalledPath"
|
||||
#define VPNCMD_BOOTSTRAP_FILENAME "|vpncmdsys.exe"
|
||||
#define VPNCMD_BOOTSTRAP_FILENAME_X64 "|vpncmdsys_x64.exe"
|
||||
#define VPNCMD_BOOTSTRAP_FILENAME_IA64 "|vpncmdsys_ia64.exe"
|
||||
|
||||
|
||||
// Traffic test results
|
||||
struct TT_RESULT
|
||||
{
|
||||
bool Raw; // Whether raw data
|
||||
bool Double; // Whether it is doubled
|
||||
UINT64 NumBytesUpload; // Uploaded size
|
||||
UINT64 NumBytesDownload; // Downloaded size
|
||||
UINT64 NumBytesTotal; // Total size
|
||||
UINT64 Span; // Period (in milliseconds)
|
||||
UINT64 BpsUpload; // Upload throughput
|
||||
UINT64 BpsDownload; // Download throughput
|
||||
UINT64 BpsTotal; // Total throughput
|
||||
};
|
||||
|
||||
// Text display function
|
||||
typedef void (TT_PRINT_PROC)(void *param, wchar_t *str);
|
||||
|
||||
// Client side socket
|
||||
struct TTC_SOCK
|
||||
{
|
||||
SOCK *Sock; // Socket
|
||||
UINT State; // State
|
||||
UINT64 NumBytes; // Transmitted bytes
|
||||
bool Download; // Download socket
|
||||
bool ServerUploadReportReceived; // Complete to receive the report of upload amount from the server
|
||||
UINT64 NextSendRequestReportTick; // Time to request a next report
|
||||
UINT Id;
|
||||
bool HideErrMsg;
|
||||
};
|
||||
|
||||
// Traffic test Client
|
||||
struct TTC
|
||||
{
|
||||
TT_PRINT_PROC *Print; // Text display function
|
||||
void *Param; // Any parameters
|
||||
bool Double; // Double mode
|
||||
bool Raw; // Raw data mode
|
||||
UINT Port; // Port number
|
||||
char Host[MAX_HOST_NAME_LEN + 1]; // Host name
|
||||
UINT NumTcp; // Number of TCP connections
|
||||
UINT Type; // Type
|
||||
UINT64 Span; // Period
|
||||
UINT64 RealSpan; // The actual span
|
||||
THREAD *Thread; // Thread
|
||||
volatile bool Halt; // Halting flag
|
||||
bool *Cancel; // Halting flag 2
|
||||
SOCK_EVENT *SockEvent; // Socket event
|
||||
LIST *ItcSockList; // Client socket list
|
||||
TT_RESULT Result; // Result
|
||||
UINT ErrorCode; // Error code
|
||||
bool AbnormalTerminated; // Abnormal termination
|
||||
EVENT *StartEvent; // Start event
|
||||
EVENT *InitedEvent; // Initialize completion notification event
|
||||
};
|
||||
|
||||
// Server side socket
|
||||
struct TTS_SOCK
|
||||
{
|
||||
SOCK *Sock; // Socket
|
||||
UINT State; // State
|
||||
UINT64 NumBytes; // Transmitted bytes
|
||||
bool SockJoined; // Whether it has been added to the event
|
||||
UINT Id; // ID
|
||||
UINT64 LastWaitTick; // Retry waiting time to notify the size information to the client
|
||||
UINT64 SessionId; // Session ID
|
||||
bool NoMoreSendData; // Flag not to send more data
|
||||
UINT64 FirstRecvTick; // Time which the data has been received last
|
||||
UINT64 Span; // Period
|
||||
};
|
||||
|
||||
// Traffic test server
|
||||
struct TTS
|
||||
{
|
||||
TT_PRINT_PROC *Print; // Text display function
|
||||
void *Param; // Any parameters
|
||||
volatile bool Halt; // Halting flag
|
||||
UINT Port; // Port number
|
||||
THREAD *Thread; // Thread
|
||||
THREAD *WorkThread; // Worker thread
|
||||
THREAD *IPv6AcceptThread; // IPv6 Accept thread
|
||||
SOCK *ListenSocket; // Socket to wait
|
||||
SOCK *ListenSocketV6; // Socket to wait (IPv6)
|
||||
UINT ErrorCode; // Error code
|
||||
SOCK_EVENT *SockEvent; // Socket event
|
||||
LIST *TtsSockList; // Server socket list
|
||||
bool NewSocketArrived; // New socket has arrived
|
||||
UINT IdSeed; // ID value
|
||||
};
|
||||
|
||||
// VPN Tools context
|
||||
struct PT
|
||||
{
|
||||
CONSOLE *Console; // Console
|
||||
UINT LastError; // Last error
|
||||
wchar_t *CmdLine; // Command line to execute
|
||||
};
|
||||
|
||||
// Server management context
|
||||
struct PS
|
||||
{
|
||||
bool ConsoleForServer; // Console for the server (always true)
|
||||
CONSOLE *Console; // Console
|
||||
RPC *Rpc; // RPC
|
||||
char *ServerName; // Server name
|
||||
UINT ServerPort; // Port number
|
||||
char *HubName; // Virtual HUB name in the currently managed
|
||||
UINT LastError; // Last error
|
||||
char *AdminHub; // Virtual HUB to be managed by default
|
||||
wchar_t *CmdLine; // Command line to execute
|
||||
CAPSLIST *CapsList; // Caps list
|
||||
};
|
||||
|
||||
// Client management context
|
||||
struct PC
|
||||
{
|
||||
bool ConsoleForServer; // Console for the server (always false)
|
||||
CONSOLE *Console; // Console
|
||||
REMOTE_CLIENT *RemoteClient; // Remote client
|
||||
char *ServerName; // Server name
|
||||
UINT LastError; // Last error
|
||||
wchar_t *CmdLine; // Command line
|
||||
};
|
||||
|
||||
// A column of the table
|
||||
struct CTC
|
||||
{
|
||||
wchar_t *String; // String
|
||||
bool Right; // Right justification
|
||||
};
|
||||
|
||||
// A row of the table
|
||||
struct CTR
|
||||
{
|
||||
wchar_t **Strings; // String list
|
||||
};
|
||||
|
||||
// Table for console
|
||||
struct CT
|
||||
{
|
||||
LIST *Columns; // Column list
|
||||
LIST *Rows; // Row list
|
||||
};
|
||||
|
||||
UINT CommandMain(wchar_t *command_line);
|
||||
UINT VpnCmdProc(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
bool ParseHostPort(char *src, char **host, UINT *port, UINT default_port);
|
||||
bool ParseHostPortAtmark(char *src, char **host, UINT *port, UINT default_port);
|
||||
CT *CtNew();
|
||||
void CtFree(CT *ct, CONSOLE *c);
|
||||
void CtFreeEx(CT *ct, CONSOLE *c, bool standard_view);
|
||||
void CtInsertColumn(CT *ct, wchar_t *str, bool right);
|
||||
CT *CtNewStandard();
|
||||
CT *CtNewStandardEx();
|
||||
void CtInsert(CT *ct, ...);
|
||||
void CtPrint(CT *ct, CONSOLE *c);
|
||||
void CtPrintStandard(CT *ct, CONSOLE *c);
|
||||
void CtPrintRow(CONSOLE *c, UINT num, UINT *widths, wchar_t **strings, bool *rights, char separate_char);
|
||||
void VpnCmdInitBootPath();
|
||||
void OutRpcTtResult(PACK *p, TT_RESULT *t);
|
||||
void InRpcTtResult(PACK *p, TT_RESULT *t);
|
||||
|
||||
void CmdPrintError(CONSOLE *c, UINT err);
|
||||
void CmdPrintAbout(CONSOLE *c);
|
||||
void CmdPrintRow(CONSOLE *c, wchar_t *title, wchar_t *tag, ...);
|
||||
wchar_t *CmdPromptPort(CONSOLE *c, void *param);
|
||||
wchar_t *CmdPromptChoosePassword(CONSOLE *c, void *param);
|
||||
bool CmdEvalPort(CONSOLE *c, wchar_t *str, void *param);
|
||||
void CmdInsertTrafficInfo(CT *ct, TRAFFIC *t);
|
||||
wchar_t *GetHubTypeStr(UINT type);
|
||||
wchar_t *GetServerTypeStr(UINT type);
|
||||
char *CmdPasswordPrompt(CONSOLE *c);
|
||||
bool CmdEvalIp(CONSOLE *c, wchar_t *str, void *param);
|
||||
wchar_t *PsClusterSettingMemberPromptIp(CONSOLE *c, void *param);
|
||||
bool CmdEvalHostAndPort(CONSOLE *c, wchar_t *str, void *param);
|
||||
LIST *StrToPortList(char *str);
|
||||
bool CmdEvalPortList(CONSOLE *c, wchar_t *str, void *param);
|
||||
wchar_t *PsClusterSettingMemberPromptPorts(CONSOLE *c, void *param);
|
||||
K *CmdLoadKey(CONSOLE *c, wchar_t *filename);
|
||||
bool CmdLoadCertAndKey(CONSOLE *c, X **xx, K **kk, wchar_t *cert_filename, wchar_t *key_filename);
|
||||
bool CmdEvalTcpOrUdp(CONSOLE *c, wchar_t *str, void *param);
|
||||
wchar_t *GetConnectionTypeStr(UINT type);
|
||||
bool CmdEvalHostAndSubnetMask4(CONSOLE *c, wchar_t *str, void *param);
|
||||
bool CmdEvalNetworkAndSubnetMask4(CONSOLE *c, wchar_t *str, void *param);
|
||||
bool CmdEvalNetworkAndSubnetMask6(CONSOLE *c, wchar_t *str, void *param);
|
||||
bool CmdEvalNetworkAndSubnetMask46(CONSOLE *c, wchar_t *str, void *param);
|
||||
bool CmdEvalIpAndMask4(CONSOLE *c, wchar_t *str, void *param);
|
||||
bool CmdEvalIpAndMask6(CONSOLE *c, wchar_t *str, void *param);
|
||||
bool CmdEvalIpAndMask46(CONSOLE *c, wchar_t *str, void *param);
|
||||
wchar_t *GetLogSwitchStr(UINT i);
|
||||
wchar_t *GetPacketLogNameStr(UINT i);
|
||||
UINT StrToLogSwitchType(char *str);
|
||||
UINT StrToPacketLogType(char *str);
|
||||
UINT StrToPacketLogSaveInfoType(char *str);
|
||||
wchar_t *GetProxyTypeStr(UINT i);
|
||||
wchar_t *GetClientAuthTypeStr(UINT i);
|
||||
void PrintPolicyList(CONSOLE *c, char *name);
|
||||
void PrintPolicy(CONSOLE *c, POLICY *pol, bool cascade_mode);
|
||||
bool EditPolicy(CONSOLE *c, POLICY *pol, char *name, char *value, bool cascade_mode);
|
||||
void CmdPrintStatusToListView(CT *ct, RPC_CLIENT_GET_CONNECTION_STATUS *s);
|
||||
void CmdPrintStatusToListViewEx(CT *ct, RPC_CLIENT_GET_CONNECTION_STATUS *s, bool server_mode);
|
||||
bool CmdEvalPassOrDiscard(CONSOLE *c, wchar_t *str, void *param);
|
||||
bool StrToPassOrDiscard(char *str);
|
||||
bool CmdEvalProtocol(CONSOLE *c, wchar_t *str, void *param);
|
||||
UINT StrToProtocol(char *str);
|
||||
bool CmdEvalPortRange(CONSOLE *c, wchar_t *str, void *param);
|
||||
bool ParsePortRange(char *str, UINT *start, UINT *end);
|
||||
wchar_t *GetAuthTypeStr(UINT id);
|
||||
UINT64 StrToDateTime64(char *str);
|
||||
bool CmdEvalDateTime(CONSOLE *c, wchar_t *str, void *param);
|
||||
void CmdPrintNodeInfo(CT *ct, NODE_INFO *info);
|
||||
wchar_t *GetProtocolName(UINT n);
|
||||
void CmdGenerateImportName(REMOTE_CLIENT *r, wchar_t *name, UINT size, wchar_t *old_name);
|
||||
bool CmdIsAccountName(REMOTE_CLIENT *r, wchar_t *name);
|
||||
wchar_t *GetSyslogSettingName(UINT n);
|
||||
|
||||
|
||||
void TtPrint(void *param, TT_PRINT_PROC *print_proc, wchar_t *str);
|
||||
void TtGenerateRandomData(UCHAR **buf, UINT *size);
|
||||
void TtsWorkerThread(THREAD *thread, void *param);
|
||||
void TtsListenThread(THREAD *thread, void *param);
|
||||
void TtsAcceptProc(TTS *tts, SOCK *listen_socket);
|
||||
void TtsIPv6AcceptThread(THREAD *thread, void *param);
|
||||
wchar_t *GetTtcTypeStr(UINT type);
|
||||
void TtcPrintSummary(TTC *ttc);
|
||||
void StopTtc(TTC *ttc);
|
||||
void TtcGenerateResult(TTC *ttc);
|
||||
void TtcThread(THREAD *thread, void *param);
|
||||
TTC *NewTtcEx(char *host, UINT port, UINT numtcp, UINT type, UINT64 span, bool dbl, bool raw, TT_PRINT_PROC *print_proc, void *param, EVENT *start_event, bool *cancel);
|
||||
TTC *NewTtc(char *host, UINT port, UINT numtcp, UINT type, UINT64 span, bool dbl, bool raw, TT_PRINT_PROC *print_proc, void *param);
|
||||
UINT FreeTtc(TTC *ttc, TT_RESULT *result);
|
||||
TTS *NewTts(UINT port, void *param, TT_PRINT_PROC *print_proc);
|
||||
UINT FreeTts(TTS *tts);
|
||||
void PtTrafficPrintProc(void *param, wchar_t *str);
|
||||
void TtcPrintResult(CONSOLE *c, TT_RESULT *res);
|
||||
|
||||
|
||||
bool SystemCheck();
|
||||
bool CheckKernel();
|
||||
bool CheckMemory();
|
||||
bool CheckStrings();
|
||||
bool CheckFileSystem();
|
||||
bool CheckThread();
|
||||
bool CheckNetwork();
|
||||
void InputToNull(void *p);
|
||||
UINT RetZero();
|
||||
|
||||
void Win32CmdDebug(bool is_uac);
|
||||
|
||||
|
||||
UINT PtConnect(CONSOLE *c, wchar_t *cmdline);
|
||||
PT *NewPt(CONSOLE *c, wchar_t *cmdline);
|
||||
void FreePt(PT *pt);
|
||||
void PtMain(PT *pt);
|
||||
UINT PtMakeCert(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PtTrafficClient(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PtTrafficServer(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PtCheck(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
|
||||
|
||||
UINT PcConnect(CONSOLE *c, char *target, wchar_t *cmdline, char *password);
|
||||
PC *NewPc(CONSOLE *c, REMOTE_CLIENT *remote_client, char *servername, wchar_t *cmdline);
|
||||
void FreePc(PC *pc);
|
||||
void PcMain(PC *pc);
|
||||
UINT PcAbout(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcVersionGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcPasswordSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcPasswordGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcCertList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcCertAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcCertDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcCertGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcSecureList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcSecureSelect(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcSecureGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcNicCreate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcNicDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcNicUpgrade(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcNicGetSetting(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcNicSetSetting(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcNicEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcNicDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcNicList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountCreate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountUsernameSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountAnonymousSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountPasswordSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountCertSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountCertGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountEncryptDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountEncryptEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountCompressEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountCompressDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountProxyNone(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountProxyHttp(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountProxySocks(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountServerCertEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountServerCertDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountServerCertSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountServerCertDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountServerCertGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountDetailSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountRename(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountConnect(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountDisconnect(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountStatusGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountNicSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountStatusShow(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountStatusHide(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountSecureCertSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountRetrySet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountStartupSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountStartupRemove(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountExport(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcAccountImport(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcRemoteEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcRemoteDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcKeepEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcKeepDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcKeepSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PcKeepGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
|
||||
|
||||
PS *NewPs(CONSOLE *c, RPC *rpc, char *servername, UINT serverport, char *hubname, char *adminhub, wchar_t *cmdline);
|
||||
void FreePs(PS *ps);
|
||||
UINT PsConnect(CONSOLE *c, char *host, UINT port, char *hub, char *adminhub, wchar_t *cmdline, char *password);
|
||||
void PsMain(PS *ps);
|
||||
UINT PsAbout(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsServerInfoGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsServerStatusGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsListenerCreate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsListenerDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsListenerList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsListenerEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsListenerDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsServerPasswordSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsClusterSettingGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsClusterSettingStandalone(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsClusterSettingController(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsClusterSettingMember(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsClusterMemberList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsClusterMemberInfoGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsClusterMemberCertGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsClusterConnectionStatusGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCrash(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsFlush(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsDebug(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsServerCertGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsServerKeyGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsServerCertSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsServerCipherGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsServerCipherSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsKeepEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsKeepDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsKeepSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsKeepGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsSyslogGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsSyslogDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsSyslogEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsConnectionList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsConnectionGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsConnectionDisconnect(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsBridgeDeviceList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsBridgeList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsBridgeCreate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsBridgeDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCaps(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsReboot(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsConfigGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsConfigSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsRouterList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsRouterAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsRouterDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsRouterStart(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsRouterStop(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsRouterIfList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsRouterIfAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsRouterIfDel(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsRouterTableList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsRouterTableAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsRouterTableDel(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsLogFileList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsLogFileGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsHubCreate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsHubCreateDynamic(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsHubCreateStatic(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsHubDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsHubSetStatic(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsHubSetDynamic(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsHubList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsHub(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsOnline(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsOffline(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsSetMaxSession(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsSetHubPassword(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsSetEnumAllow(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsSetEnumDeny(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsOptionsGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsRadiusServerSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsRadiusServerDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsRadiusServerGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsStatusGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsLogGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsLogEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsLogDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsLogSwitchSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsLogPacketSaveType(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCAList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCAAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCADelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCAGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeCreate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeUsernameSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeAnonymousSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadePasswordSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeCertSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeCertGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeEncryptEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeEncryptDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeCompressEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeCompressDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeProxyNone(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeProxyHttp(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeProxySocks(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeServerCertEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeServerCertDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeServerCertSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeServerCertDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeServerCertGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeDetailSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadePolicyRemove(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadePolicySet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsPolicyList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeStatusGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeRename(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeOnline(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCascadeOffline(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsAccessAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsAccessAddEx(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsAccessAdd6(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsAccessAddEx6(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsAccessList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsAccessDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsAccessEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsAccessDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsUserList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsUserCreate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsUserSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsUserDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsUserGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsUserAnonymousSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsUserPasswordSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsUserCertSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsUserCertGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsUserSignedSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsUserRadiusSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsUserNTLMSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsUserPolicyRemove(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsUserPolicySet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsUserExpiresSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsGroupList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsGroupCreate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsGroupSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsGroupDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsGroupGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsGroupJoin(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsGroupUnjoin(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsGroupPolicyRemove(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsGroupPolicySet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsSessionList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsSessionGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsSessionDisconnect(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsMacTable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsMacDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsIpTable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsIpDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsSecureNatEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsSecureNatDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsSecureNatStatusGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsSecureNatHostGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsSecureNatHostSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsNatGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsNatEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsNatDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsNatSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsNatTable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsDhcpGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsDhcpEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsDhcpDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsDhcpSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsDhcpTable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsAdminOptionList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsAdminOptionSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsExtOptionList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsExtOptionSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCrlList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCrlAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCrlDel(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsCrlGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsAcList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsAcAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsAcAdd6(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsAcGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsAcDel(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsLicenseAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsLicenseDel(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsLicenseList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsLicenseStatus(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsIPsecEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsIPsecGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsEtherIpClientAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsEtherIpClientDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsEtherIpClientList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsOpenVpnEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsOpenVpnGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsOpenVpnMakeConfig(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsSstpEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsSstpGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsServerCertRegenerate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsVpnOverIcmpDnsEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsVpnOverIcmpDnsGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsDynamicDnsGetStatus(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsDynamicDnsSetHostname(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsVpnAzureSetEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
UINT PsVpnAzureGetStatus(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
|
||||
|
||||
#endif // COMMAND_H
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
3457
src/Cedar/Connection.c
Normal file
3457
src/Cedar/Connection.c
Normal file
File diff suppressed because it is too large
Load Diff
341
src/Cedar/Connection.h
Normal file
341
src/Cedar/Connection.h
Normal file
@ -0,0 +1,341 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// Connection.h
|
||||
// Header of Connection.c
|
||||
|
||||
#ifndef CONNECTION_H
|
||||
#define CONNECTION_H
|
||||
|
||||
// Magic number indicating that the packet is compressed
|
||||
#define CONNECTION_BULK_COMPRESS_SIGNATURE 0xDEADBEEFCAFEFACEULL
|
||||
|
||||
#define KEEP_ALIVE_STRING "Internet Connection Keep Alive Packet"
|
||||
|
||||
// KEEP CONNECT structure
|
||||
struct KEEP
|
||||
{
|
||||
LOCK *lock; // Lock
|
||||
bool Server; // Server mode
|
||||
volatile bool Halt; // Stop flag
|
||||
bool Enable; // Enable flag
|
||||
char ServerName[MAX_HOST_NAME_LEN + 1]; // Server name
|
||||
UINT ServerPort; // Server port number
|
||||
bool UdpMode; // UDP mode
|
||||
UINT Interval; // Packet transmission interval
|
||||
THREAD *Thread; // Connection thread
|
||||
EVENT *HaltEvent; // Stop event
|
||||
CANCEL *Cancel; // Cancel
|
||||
};
|
||||
|
||||
// SECURE_SIGN Structure
|
||||
struct SECURE_SIGN
|
||||
{
|
||||
char SecurePublicCertName[MAX_SECURE_DEVICE_FILE_LEN + 1]; // Secure device certificate name
|
||||
char SecurePrivateKeyName[MAX_SECURE_DEVICE_FILE_LEN + 1]; // Secure device secret key name
|
||||
X *ClientCert; // Client certificate
|
||||
UCHAR Random[SHA1_SIZE]; // Random value for signature
|
||||
UCHAR Signature[128]; // Signed data
|
||||
UINT UseSecureDeviceId;
|
||||
UINT BitmapId; // Bitmap ID
|
||||
};
|
||||
|
||||
// Function type declaration
|
||||
typedef bool (CHECK_CERT_PROC)(SESSION *s, CONNECTION *c, X *server_x, bool *expired);
|
||||
typedef bool (SECURE_SIGN_PROC)(SESSION *s, CONNECTION *c, SECURE_SIGN *sign);
|
||||
|
||||
// RC4 key pair
|
||||
struct RC4_KEY_PAIR
|
||||
{
|
||||
UCHAR ServerToClientKey[16];
|
||||
UCHAR ClientToServerKey[16];
|
||||
};
|
||||
|
||||
// Client Options
|
||||
struct CLIENT_OPTION
|
||||
{
|
||||
wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // Connection setting name
|
||||
char Hostname[MAX_HOST_NAME_LEN + 1]; // Host name
|
||||
UINT Port; // Port number
|
||||
UINT PortUDP; // UDP port number (0: Use only TCP)
|
||||
UINT ProxyType; // Type of proxy
|
||||
char ProxyName[MAX_HOST_NAME_LEN + 1]; // Proxy server name
|
||||
UINT ProxyPort; // Port number of the proxy server
|
||||
char ProxyUsername[MAX_PROXY_USERNAME_LEN + 1]; // Maximum user name length
|
||||
char ProxyPassword[MAX_PROXY_PASSWORD_LEN + 1]; // Maximum password length
|
||||
UINT NumRetry; // Automatic retries
|
||||
UINT RetryInterval; // Retry interval
|
||||
char HubName[MAX_HUBNAME_LEN + 1]; // HUB name
|
||||
UINT MaxConnection; // Maximum number of concurrent TCP connections
|
||||
bool UseEncrypt; // Use encrypted communication
|
||||
bool UseCompress; // Use data compression
|
||||
bool HalfConnection; // Use half connection in TCP
|
||||
bool NoRoutingTracking; // Disable the routing tracking
|
||||
char DeviceName[MAX_DEVICE_NAME_LEN + 1]; // VLAN device name
|
||||
UINT AdditionalConnectionInterval; // Connection attempt interval when additional connection establish
|
||||
UINT ConnectionDisconnectSpan; // Disconnection interval
|
||||
bool HideStatusWindow; // Hide the status window
|
||||
bool HideNicInfoWindow; // Hide the NIC status window
|
||||
bool RequireMonitorMode; // Monitor port mode
|
||||
bool RequireBridgeRoutingMode; // Bridge or routing mode
|
||||
bool DisableQoS; // Disable the VoIP / QoS function
|
||||
bool FromAdminPack; // For Administration Pack
|
||||
bool NoTls1; // Do not use TLS 1.0
|
||||
bool NoUdpAcceleration; // Do not use UDP acceleration mode
|
||||
UCHAR HostUniqueKey[SHA1_SIZE]; // Host unique key
|
||||
};
|
||||
|
||||
// Client authentication data
|
||||
struct CLIENT_AUTH
|
||||
{
|
||||
UINT AuthType; // Authentication type
|
||||
char Username[MAX_USERNAME_LEN + 1]; // User name
|
||||
UCHAR HashedPassword[SHA1_SIZE]; // Hashed passwords
|
||||
char PlainPassword[MAX_PASSWORD_LEN + 1]; // Password
|
||||
X *ClientX; // Client certificate
|
||||
K *ClientK; // Client private key
|
||||
char SecurePublicCertName[MAX_SECURE_DEVICE_FILE_LEN + 1]; // Secure device certificate name
|
||||
char SecurePrivateKeyName[MAX_SECURE_DEVICE_FILE_LEN + 1]; // Secure device secret key name
|
||||
CHECK_CERT_PROC *CheckCertProc; // Server certificate confirmation procedure
|
||||
SECURE_SIGN_PROC *SecureSignProc; // Security signing procedure
|
||||
};
|
||||
|
||||
// TCP socket data structure
|
||||
struct TCPSOCK
|
||||
{
|
||||
SOCK *Sock; // Socket
|
||||
FIFO *RecvFifo; // Reception buffer
|
||||
FIFO *SendFifo; // Transmission buffer
|
||||
UINT Mode; // Read mode
|
||||
UINT WantSize; // Requested data size
|
||||
UINT NextBlockNum; // Total number of blocks that can be read next
|
||||
UINT NextBlockSize; // Block size that is planned to read next
|
||||
UINT CurrentPacketNum; // Current packet number
|
||||
UINT64 LastCommTime; // Last communicated time
|
||||
UINT64 LastRecvTime; // Time the last data received
|
||||
UINT LateCount; // The number of delay occurences
|
||||
UINT Direction; // Direction
|
||||
UINT64 NextKeepAliveTime; // Next time to send a KeepAlive packet
|
||||
RC4_KEY_PAIR Rc4KeyPair; // RC4 key pair
|
||||
CRYPT *SendKey; // Transmission key
|
||||
CRYPT *RecvKey; // Reception key
|
||||
UINT64 DisconnectTick; // Time to disconnect this connection
|
||||
UINT64 EstablishedTick; // Establishment time
|
||||
};
|
||||
|
||||
// TCP communication data structure
|
||||
struct TCP
|
||||
{
|
||||
LIST *TcpSockList; // TCP socket list
|
||||
};
|
||||
|
||||
// UDP communication data structure
|
||||
struct UDP
|
||||
{
|
||||
SOCK *s; // UDP socket (for transmission)
|
||||
IP ip; // Destination IP address
|
||||
UINT port; // Destination port number
|
||||
UINT64 NextKeepAliveTime; // Next time to send a KeepAlive packet
|
||||
UINT64 Seq; // Packet sequence number
|
||||
UINT64 RecvSeq;
|
||||
QUEUE *BufferQueue; // Queue of buffer to be sent
|
||||
};
|
||||
|
||||
// Data block
|
||||
struct BLOCK
|
||||
{
|
||||
BOOL Compressed; // Compression flag
|
||||
UINT Size; // Block size
|
||||
UINT SizeofData; // Data size
|
||||
UCHAR *Buf; // Buffer
|
||||
bool PriorityQoS; // Priority packet for VoIP / QoS function
|
||||
UINT Ttl; // TTL value (Used only in ICMP NAT of Virtual.c)
|
||||
UINT Param1; // Parameter 1
|
||||
};
|
||||
|
||||
// Connection structure
|
||||
struct CONNECTION
|
||||
{
|
||||
LOCK *lock; // Lock
|
||||
REF *ref; // Reference counter
|
||||
CEDAR *Cedar; // Cedar
|
||||
struct SESSION *Session; // Session
|
||||
UINT Protocol; // Protocol
|
||||
SOCK *FirstSock; // Socket for negotiation
|
||||
SOCK *TubeSock; // Socket for in-process communication
|
||||
TCP *Tcp; // TCP communication data structure
|
||||
UDP *Udp; // UDP communication data structure
|
||||
bool ServerMode; // Server mode
|
||||
UINT Status; // Status
|
||||
char *Name; // Connection name
|
||||
THREAD *Thread; // Thread
|
||||
volatile bool Halt; // Stop flag
|
||||
UCHAR Random[SHA1_SIZE]; // Random number for Authentication
|
||||
UINT ServerVer; // Server version
|
||||
UINT ServerBuild; // Server build number
|
||||
UINT ClientVer; // Client version
|
||||
UINT ClientBuild; // Client build number
|
||||
char ServerStr[MAX_SERVER_STR_LEN + 1]; // Server string
|
||||
char ClientStr[MAX_CLIENT_STR_LEN + 1]; // Client string
|
||||
UINT Err; // Error value
|
||||
bool ClientConnectError_NoSavePassword; // Don't save the password for the specified user name
|
||||
QUEUE *ReceivedBlocks; // Block queue that is received
|
||||
QUEUE *SendBlocks; // Block queue planned to be sent
|
||||
QUEUE *SendBlocks2; // Send queue (high priority)
|
||||
COUNTER *CurrentNumConnection; // Counter of the number of current connections
|
||||
LIST *ConnectingThreads; // List of connected threads
|
||||
LIST *ConnectingSocks; // List of the connected sockets
|
||||
bool flag1; // Flag 1
|
||||
UCHAR *RecvBuf; // Receive buffer
|
||||
char ServerName[MAX_HOST_NAME_LEN + 1]; // Server name
|
||||
UINT ServerPort; // Port number
|
||||
bool RestoreServerNameAndPort; // Flag to restore the server name and port number to original
|
||||
bool UseTicket; // Ticket using flag
|
||||
UCHAR Ticket[SHA1_SIZE]; // Ticket
|
||||
UINT CurrentSendQueueSize; // Total size of the transmission queue
|
||||
X *ServerX; // Server certificate
|
||||
X *ClientX; // Client certificate
|
||||
char *CipherName; // Encryption algorithm name
|
||||
UINT64 ConnectedTick; // Time it is connected
|
||||
IP ClientIp; // Client IP address
|
||||
char ClientHostname[MAX_HOST_NAME_LEN + 1]; // Client host name
|
||||
UINT Type; // Type
|
||||
bool DontUseTls1; // Do not use TLS 1.0
|
||||
void *hWndForUI; // Parent window
|
||||
bool IsInProc; // In-process
|
||||
char InProcPrefix[64]; // Prefix
|
||||
UINT AdditionalConnectionFailedCounter; // Additional connection failure counter
|
||||
UINT64 LastCounterResetTick; // Time the counter was reset finally
|
||||
bool WasSstp; // Processed the SSTP
|
||||
bool WasDatProxy; // DAT proxy processed
|
||||
UCHAR CToken_Hash[SHA1_SIZE]; // CTOKEN_HASH
|
||||
};
|
||||
|
||||
|
||||
|
||||
// Function prototypes
|
||||
|
||||
CONNECTION *NewClientConnection(SESSION *s);
|
||||
CONNECTION *NewClientConnectionEx(SESSION *s, char *client_str, UINT client_ver, UINT client_build);
|
||||
CONNECTION *NewServerConnection(CEDAR *cedar, SOCK *s, THREAD *t);
|
||||
void ReleaseConnection(CONNECTION *c);
|
||||
void CleanupConnection(CONNECTION *c);
|
||||
int CompareConnection(void *p1, void *p2);
|
||||
void StopConnection(CONNECTION *c, bool no_wait);
|
||||
void ConnectionAccept(CONNECTION *c);
|
||||
void StartTunnelingMode(CONNECTION *c);
|
||||
void EndTunnelingMode(CONNECTION *c);
|
||||
void DisconnectTcpSockets(CONNECTION *c);
|
||||
void ConnectionReceive(CONNECTION *c, CANCEL *c1, CANCEL *c2);
|
||||
void ConnectionSend(CONNECTION *c);
|
||||
TCPSOCK *NewTcpSock(SOCK *s);
|
||||
void FreeTcpSock(TCPSOCK *ts);
|
||||
BLOCK *NewBlock(void *data, UINT size, int compress);
|
||||
void FreeBlock(BLOCK *b);
|
||||
void StopAllAdditionalConnectThread(CONNECTION *c);
|
||||
UINT GenNextKeepAliveSpan(CONNECTION *c);
|
||||
void SendKeepAlive(CONNECTION *c, TCPSOCK *ts);
|
||||
void DisconnectUDPSockets(CONNECTION *c);
|
||||
void PutUDPPacketData(CONNECTION *c, void *data, UINT size);
|
||||
void SendDataWithUDP(SOCK *s, CONNECTION *c);
|
||||
void InsertReveicedBlockToQueue(CONNECTION *c, BLOCK *block);
|
||||
void InitTcpSockRc4Key(TCPSOCK *ts, bool server_mode);
|
||||
UINT TcpSockRecv(SESSION *s, TCPSOCK *ts, void *data, UINT size);
|
||||
UINT TcpSockSend(SESSION *s, TCPSOCK *ts, void *data, UINT size);
|
||||
void WriteSendFifo(SESSION *s, TCPSOCK *ts, void *data, UINT size);
|
||||
void WriteRecvFifo(SESSION *s, TCPSOCK *ts, void *data, UINT size);
|
||||
CLIENT_AUTH *CopyClientAuth(CLIENT_AUTH *a);
|
||||
BUF *NewKeepPacket(bool server_mode);
|
||||
void KeepThread(THREAD *thread, void *param);
|
||||
KEEP *StartKeep();
|
||||
void StopKeep(KEEP *k);
|
||||
void InRpcSecureSign(SECURE_SIGN *t, PACK *p);
|
||||
void OutRpcSecureSign(PACK *p, SECURE_SIGN *t);
|
||||
void FreeRpcSecureSign(SECURE_SIGN *t);
|
||||
void NormalizeEthMtu(BRIDGE *b, CONNECTION *c, UINT packet_size);
|
||||
UINT GetMachineRand();
|
||||
|
||||
|
||||
|
||||
#endif // CONNECTION_H
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
2510
src/Cedar/Console.c
Normal file
2510
src/Cedar/Console.c
Normal file
File diff suppressed because it is too large
Load Diff
222
src/Cedar/Console.h
Normal file
222
src/Cedar/Console.h
Normal file
@ -0,0 +1,222 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// Console.h
|
||||
// Header of Console.c
|
||||
|
||||
#ifndef CONSOLE_H
|
||||
#define CONSOLE_H
|
||||
|
||||
// Constant
|
||||
#define MAX_PROMPT_STRSIZE 65536
|
||||
#define WIN32_DEFAULT_CONSOLE_WIDTH 100
|
||||
|
||||
// Types of console
|
||||
#define CONSOLE_LOCAL 0 // Local console
|
||||
#define CONSOLE_CSV 1 // CSV output mode
|
||||
|
||||
// Parameters completion prompt function
|
||||
typedef wchar_t *(PROMPT_PROC)(CONSOLE *c, void *param);
|
||||
|
||||
// Parameter validation prompt function
|
||||
typedef bool (EVAL_PROC)(CONSOLE *c, wchar_t *str, void *param);
|
||||
|
||||
// Definition of the parameter item
|
||||
struct PARAM
|
||||
{
|
||||
char *Name; // Parameter name
|
||||
PROMPT_PROC *PromptProc; // Prompt function that automatically invoked if the parameter is not specified
|
||||
// (This is not called in the case of NULL)
|
||||
void *PromptProcParam; // Any pointers to pass to the prompt function
|
||||
EVAL_PROC *EvalProc; // Parameter string validation function
|
||||
void *EvalProcParam; // Any pointers to be passed to the validation function
|
||||
char *Tmp; // Temporary variable
|
||||
};
|
||||
|
||||
// Parameter value of the internal data
|
||||
struct PARAM_VALUE
|
||||
{
|
||||
char *Name; // Name
|
||||
char *StrValue; // String value
|
||||
wchar_t *UniStrValue; // Unicode string value
|
||||
UINT IntValue; // Integer value
|
||||
};
|
||||
|
||||
// Console service structure
|
||||
struct CONSOLE
|
||||
{
|
||||
UINT ConsoleType; // Type of console
|
||||
UINT RetCode; // The last exit code
|
||||
void *Param; // Data of any
|
||||
void (*Free)(CONSOLE *c); // Release function
|
||||
wchar_t *(*ReadLine)(CONSOLE *c, wchar_t *prompt, bool nofile); // Function to read one line
|
||||
char *(*ReadPassword)(CONSOLE *c, wchar_t *prompt); // Function to read the password
|
||||
bool (*Write)(CONSOLE *c, wchar_t *str); // Function to write a string
|
||||
UINT (*GetWidth)(CONSOLE *c); // Get the width of the screen
|
||||
};
|
||||
|
||||
// Local console parameters
|
||||
struct LOCAL_CONSOLE_PARAM
|
||||
{
|
||||
IO *InFile; // Input file
|
||||
BUF *InBuf; // Input buffer
|
||||
IO *OutFile; // Output file
|
||||
UINT Win32_OldConsoleWidth; // Previous console size
|
||||
};
|
||||
|
||||
// Command procedure
|
||||
typedef UINT (COMMAND_PROC)(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
|
||||
|
||||
// Definition of command
|
||||
struct CMD
|
||||
{
|
||||
char *Name; // Command name
|
||||
COMMAND_PROC *Proc; // Procedure function
|
||||
};
|
||||
|
||||
// Evaluate the minimum / maximum value of the parameter
|
||||
struct CMD_EVAL_MIN_MAX
|
||||
{
|
||||
char *StrName;
|
||||
UINT MinValue, MaxValue;
|
||||
};
|
||||
|
||||
|
||||
// Function prototype
|
||||
wchar_t *Prompt(wchar_t *prompt_str);
|
||||
char *PromptA(wchar_t *prompt_str);
|
||||
bool PasswordPrompt(char *password, UINT size);
|
||||
void *SetConsoleRaw();
|
||||
void RestoreConsole(void *p);
|
||||
wchar_t *ParseCommandEx(wchar_t *str, wchar_t *name, TOKEN_LIST **param_list);
|
||||
wchar_t *ParseCommand(wchar_t *str, wchar_t *name);
|
||||
TOKEN_LIST *GetCommandNameList(wchar_t *str);
|
||||
char *ParseCommandA(wchar_t *str, char *name);
|
||||
LIST *NewParamValueList();
|
||||
int CmpParamValue(void *p1, void *p2);
|
||||
void FreeParamValueList(LIST *o);
|
||||
PARAM_VALUE *FindParamValue(LIST *o, char *name);
|
||||
char *GetParamStr(LIST *o, char *name);
|
||||
wchar_t *GetParamUniStr(LIST *o, char *name);
|
||||
UINT GetParamInt(LIST *o, char *name);
|
||||
bool GetParamYes(LIST *o, char *name);
|
||||
LIST *ParseCommandList(CONSOLE *c, char *cmd_name, wchar_t *command, PARAM param[], UINT num_param);
|
||||
bool IsNameInRealName(char *input_name, char *real_name);
|
||||
void GetOmissionName(char *dst, UINT size, char *src);
|
||||
bool IsOmissionName(char *input_name, char *real_name);
|
||||
TOKEN_LIST *GetRealnameCandidate(char *input_name, TOKEN_LIST *real_name_list);
|
||||
bool SeparateCommandAndParam(wchar_t *src, char **cmd, wchar_t **param);
|
||||
UINT GetConsoleWidth(CONSOLE *c);
|
||||
bool DispatchNextCmd(CONSOLE *c, char *prompt, CMD cmd[], UINT num_cmd, void *param);
|
||||
bool DispatchNextCmdEx(CONSOLE *c, wchar_t *exec_command, char *prompt, CMD cmd[], UINT num_cmd, void *param);
|
||||
void PrintCandidateHelp(CONSOLE *c, char *cmd_name, TOKEN_LIST *candidate_list, UINT left_space);
|
||||
UNI_TOKEN_LIST *SeparateStringByWidth(wchar_t *str, UINT width);
|
||||
UINT GetNextWordWidth(wchar_t *str);
|
||||
bool IsWordChar(wchar_t c);
|
||||
void GetCommandHelpStr(char *command_name, wchar_t **description, wchar_t **args, wchar_t **help);
|
||||
void GetCommandParamHelpStr(char *command_name, char *param_name, wchar_t **description);
|
||||
bool CmdEvalMinMax(CONSOLE *c, wchar_t *str, void *param);
|
||||
wchar_t *CmdPrompt(CONSOLE *c, void *param);
|
||||
bool CmdEvalNotEmpty(CONSOLE *c, wchar_t *str, void *param);
|
||||
bool CmdEvalInt1(CONSOLE *c, wchar_t *str, void *param);
|
||||
bool CmdEvalIsFile(CONSOLE *c, wchar_t *str, void *param);
|
||||
bool CmdEvalSafe(CONSOLE *c, wchar_t *str, void *param);
|
||||
void PrintCmdHelp(CONSOLE *c, char *cmd_name, TOKEN_LIST *param_list);
|
||||
int CompareCandidateStr(void *p1, void *p2);
|
||||
bool IsHelpStr(char *str);
|
||||
|
||||
CONSOLE *NewLocalConsole(wchar_t *infile, wchar_t *outfile);
|
||||
void ConsoleLocalFree(CONSOLE *c);
|
||||
wchar_t *ConsoleLocalReadLine(CONSOLE *c, wchar_t *prompt, bool nofile);
|
||||
char *ConsoleLocalReadPassword(CONSOLE *c, wchar_t *prompt);
|
||||
bool ConsoleLocalWrite(CONSOLE *c, wchar_t *str);
|
||||
void ConsoleWriteOutFile(CONSOLE *c, wchar_t *str, bool add_last_crlf);
|
||||
wchar_t *ConsoleReadNextFromInFile(CONSOLE *c);
|
||||
UINT ConsoleLocalGetWidth(CONSOLE *c);
|
||||
|
||||
|
||||
#endif // CONSOLE_H
|
||||
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
984
src/Cedar/DDNS.c
Normal file
984
src/Cedar/DDNS.c
Normal file
@ -0,0 +1,984 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// DDNS.c
|
||||
// Dynamic DNS Client
|
||||
|
||||
#include "CedarPch.h"
|
||||
|
||||
// Get the current status of the DDNS client
|
||||
void DCGetStatus(DDNS_CLIENT *c, DDNS_CLIENT_STATUS *st)
|
||||
{
|
||||
// Validate arguments
|
||||
if (c == NULL || st == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Zero(st, sizeof(DDNS_CLIENT_STATUS));
|
||||
|
||||
Lock(c->Lock);
|
||||
{
|
||||
st->Err_IPv4 = c->Err_IPv4;
|
||||
st->Err_IPv6 = c->Err_IPv6;
|
||||
|
||||
StrCpy(st->CurrentHostName, sizeof(st->CurrentHostName), c->CurrentHostName);
|
||||
StrCpy(st->CurrentFqdn, sizeof(st->CurrentFqdn), c->CurrentFqdn);
|
||||
StrCpy(st->DnsSuffix, sizeof(st->DnsSuffix), c->DnsSuffix);
|
||||
StrCpy(st->CurrentIPv4, sizeof(st->CurrentIPv4), c->CurrentIPv4);
|
||||
StrCpy(st->CurrentIPv6, sizeof(st->CurrentIPv6), c->CurrentIPv6);
|
||||
|
||||
StrCpy(st->CurrentAzureIp, sizeof(st->CurrentAzureIp), c->CurrentAzureIp);
|
||||
st->CurrentAzureTimestamp = c->CurrentAzureTimestamp;
|
||||
StrCpy(st->CurrentAzureSignature, sizeof(st->CurrentAzureSignature), c->CurrentAzureSignature);
|
||||
StrCpy(st->AzureCertHash, sizeof(st->AzureCertHash), c->AzureCertHash);
|
||||
|
||||
Copy(&st->InternetSetting, &c->InternetSetting, sizeof(INTERNET_SETTING));
|
||||
}
|
||||
Unlock(c->Lock);
|
||||
}
|
||||
|
||||
// Set the Internet settings
|
||||
void DCSetInternetSetting(DDNS_CLIENT *c, INTERNET_SETTING *t)
|
||||
{
|
||||
// Validate arguments
|
||||
if (c == NULL || t == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Copy(&c->InternetSetting, t, sizeof(INTERNET_SETTING));
|
||||
}
|
||||
|
||||
// Get the Internet settings
|
||||
void DCGetInternetSetting(DDNS_CLIENT *c, INTERNET_SETTING *t)
|
||||
{
|
||||
// Validate arguments
|
||||
if (c == NULL || t == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Copy(t, &c->InternetSetting, sizeof(INTERNET_SETTING));
|
||||
}
|
||||
|
||||
// Changing the host name
|
||||
UINT DCChangeHostName(DDNS_CLIENT *c, char *hostname)
|
||||
{
|
||||
UINT ret;
|
||||
DDNS_REGISTER_PARAM p;
|
||||
// Validate arguments
|
||||
if (c == NULL || hostname == NULL)
|
||||
{
|
||||
return ERR_INTERNAL_ERROR;
|
||||
}
|
||||
|
||||
if (StrLen(hostname) > 32)
|
||||
{
|
||||
// The host name is too long
|
||||
return ERR_DDNS_HOSTNAME_TOO_LONG;
|
||||
}
|
||||
|
||||
Zero(&p, sizeof(p));
|
||||
|
||||
StrCpy(p.NewHostname, sizeof(p.NewHostname), hostname);
|
||||
|
||||
// Use one of IPv4 or IPv6 if it seems to be communication
|
||||
if (c->Err_IPv4 == ERR_NO_ERROR)
|
||||
{
|
||||
// IPv4
|
||||
ret = DCRegister(c, false, &p, NULL);
|
||||
}
|
||||
else if (c->Err_IPv6 == ERR_NO_ERROR)
|
||||
{
|
||||
// IPv6
|
||||
ret = DCRegister(c, true, &p, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Try both
|
||||
ret = DCRegister(c, true, &p, NULL);
|
||||
if (ret != ERR_NO_ERROR)
|
||||
{
|
||||
ret = DCRegister(c, false, &p, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
if (ret == ERR_NO_ERROR)
|
||||
{
|
||||
DDNS_CLIENT_STATUS st;
|
||||
|
||||
DCGetStatus(c, &st);
|
||||
|
||||
SiApplyAzureConfig(c->Cedar->Server, &st);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// DDNS client thread
|
||||
void DCThread(THREAD *thread, void *param)
|
||||
{
|
||||
DDNS_CLIENT *c;
|
||||
INTERRUPT_MANAGER *interrput;
|
||||
UINT last_ip_hash = 0;
|
||||
void *route_change_poller = NULL;
|
||||
bool last_time_ip_changed = false;
|
||||
UINT last_azure_ddns_trigger_int = 0;
|
||||
UINT last_vgs_ddns_trigger_int = 0;
|
||||
UINT n;
|
||||
INTERNET_SETTING last_t;
|
||||
// Validate arguments
|
||||
if (thread == NULL || param == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
c = (DDNS_CLIENT *)param;
|
||||
|
||||
interrput = NewInterruptManager();
|
||||
|
||||
route_change_poller = NewRouteChange();
|
||||
IsRouteChanged(route_change_poller);
|
||||
|
||||
Zero(&last_t, sizeof(last_t));
|
||||
|
||||
n = 0;
|
||||
|
||||
while (c->Halt == false)
|
||||
{
|
||||
UINT ip_hash = GetHostIPAddressHash32();
|
||||
UINT interval;
|
||||
UINT64 now = Tick64();
|
||||
bool ip_changed = false;
|
||||
bool azure_client_triggered = false;
|
||||
bool internet_setting_changed = false;
|
||||
bool vgs_server_triggered = false;
|
||||
|
||||
|
||||
if (c->Cedar->Server != NULL && c->Cedar->Server->AzureClient != NULL)
|
||||
{
|
||||
if (c->Cedar->Server->AzureClient->DDnsTriggerInt != last_azure_ddns_trigger_int)
|
||||
{
|
||||
azure_client_triggered = true;
|
||||
last_azure_ddns_trigger_int = c->Cedar->Server->AzureClient->DDnsTriggerInt;
|
||||
last_time_ip_changed = false;
|
||||
Debug("DDNS Thread Triggered by AzureClient.\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (Cmp(&last_t, &c->InternetSetting, sizeof(INTERNET_SETTING)) != 0)
|
||||
{
|
||||
Copy(&last_t, &c->InternetSetting, sizeof(INTERNET_SETTING));
|
||||
internet_setting_changed = true;
|
||||
last_time_ip_changed = false;
|
||||
}
|
||||
|
||||
if (ip_hash != last_ip_hash)
|
||||
{
|
||||
last_time_ip_changed = false;
|
||||
Debug("DDNS Thread Triggered by IP Hash Changed.\n");
|
||||
}
|
||||
|
||||
if ((ip_hash != last_ip_hash) || (IsRouteChanged(route_change_poller)) || azure_client_triggered || internet_setting_changed || vgs_server_triggered)
|
||||
{
|
||||
if (last_time_ip_changed == false)
|
||||
{
|
||||
// Call all getting functions from the beginning if the routing
|
||||
// table or the IP address of this host has changed
|
||||
c->NextRegisterTick_IPv4 = 0;
|
||||
c->NextRegisterTick_IPv6 = 0;
|
||||
c->NextGetMyIpTick_IPv4 = 0;
|
||||
c->NextGetMyIpTick_IPv6 = 0;
|
||||
|
||||
last_ip_hash = ip_hash;
|
||||
|
||||
last_time_ip_changed = true;
|
||||
|
||||
ip_changed = true;
|
||||
|
||||
Debug("DDNS Internet Condition Changed.\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
last_time_ip_changed = false;
|
||||
}
|
||||
|
||||
if ((n++) >= 1)
|
||||
{
|
||||
// Self IPv4 address acquisition
|
||||
if (c->NextGetMyIpTick_IPv4 == 0 || now >= c->NextGetMyIpTick_IPv4)
|
||||
{
|
||||
UINT next_interval;
|
||||
char ip[MAX_SIZE];
|
||||
|
||||
Zero(ip, sizeof(ip));
|
||||
c->Err_IPv4_GetMyIp = DCGetMyIp(c, false, ip, sizeof(ip), NULL);
|
||||
|
||||
if (c->Err_IPv4_GetMyIp == ERR_NO_ERROR)
|
||||
{
|
||||
if (StrCmpi(c->LastMyIPv4, ip) != 0)
|
||||
{
|
||||
ip_changed = true;
|
||||
StrCpy(c->LastMyIPv4, sizeof(c->LastMyIPv4), ip);
|
||||
}
|
||||
|
||||
next_interval = GenRandInterval(DDNS_GETMYIP_INTERVAL_OK_MIN, DDNS_GETMYIP_INTERVAL_OK_MAX);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (IsEmptyStr(c->LastMyIPv4) == false)
|
||||
{
|
||||
ip_changed = true;
|
||||
}
|
||||
|
||||
Zero(c->LastMyIPv4, sizeof(c->LastMyIPv4));
|
||||
next_interval = GenRandInterval(DDNS_GETMYIP_INTERVAL_NG_MIN, DDNS_GETMYIP_INTERVAL_NG_MAX);
|
||||
}
|
||||
|
||||
c->NextGetMyIpTick_IPv4 = Tick64() + (UINT64)next_interval;
|
||||
|
||||
AddInterrupt(interrput, c->NextGetMyIpTick_IPv4);
|
||||
}
|
||||
|
||||
// Self IPv6 address acquisition
|
||||
if (c->NextGetMyIpTick_IPv6 == 0 || now >= c->NextGetMyIpTick_IPv6)
|
||||
{
|
||||
UINT next_interval;
|
||||
char ip[MAX_SIZE];
|
||||
|
||||
Zero(ip, sizeof(ip));
|
||||
c->Err_IPv6_GetMyIp = DCGetMyIp(c, true, ip, sizeof(ip), NULL);
|
||||
|
||||
if (c->Err_IPv6_GetMyIp == ERR_NO_ERROR)
|
||||
{
|
||||
if (StrCmpi(c->LastMyIPv6, ip) != 0)
|
||||
{
|
||||
ip_changed = true;
|
||||
StrCpy(c->LastMyIPv6, sizeof(c->LastMyIPv6), ip);
|
||||
}
|
||||
|
||||
next_interval = GenRandInterval(DDNS_GETMYIP_INTERVAL_OK_MIN, DDNS_GETMYIP_INTERVAL_OK_MAX);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (IsEmptyStr(c->LastMyIPv6) == false)
|
||||
{
|
||||
ip_changed = true;
|
||||
}
|
||||
|
||||
Zero(c->LastMyIPv6, sizeof(c->LastMyIPv6));
|
||||
next_interval = GenRandInterval(DDNS_GETMYIP_INTERVAL_NG_MIN, DDNS_GETMYIP_INTERVAL_NG_MAX);
|
||||
}
|
||||
|
||||
c->NextGetMyIpTick_IPv6 = Tick64() + (UINT64)next_interval;
|
||||
|
||||
AddInterrupt(interrput, c->NextGetMyIpTick_IPv6);
|
||||
}
|
||||
}
|
||||
|
||||
if (ip_changed)
|
||||
{
|
||||
c->NextRegisterTick_IPv4 = 0;
|
||||
c->NextRegisterTick_IPv6 = 0;
|
||||
}
|
||||
|
||||
// IPv4 host registration
|
||||
if (c->NextRegisterTick_IPv4 == 0 || now >= c->NextRegisterTick_IPv4)
|
||||
{
|
||||
UINT next_interval;
|
||||
|
||||
c->Err_IPv4 = DCRegister(c, false, NULL, NULL);
|
||||
|
||||
if (c->Err_IPv4 == ERR_NO_ERROR)
|
||||
{
|
||||
next_interval = GenRandInterval(DDNS_REGISTER_INTERVAL_OK_MIN, DDNS_REGISTER_INTERVAL_OK_MAX);
|
||||
}
|
||||
else
|
||||
{
|
||||
next_interval = GenRandInterval(DDNS_REGISTER_INTERVAL_NG_MIN, DDNS_REGISTER_INTERVAL_NG_MAX);
|
||||
}
|
||||
//next_interval = 0;
|
||||
|
||||
c->NextRegisterTick_IPv4 = Tick64() + (UINT64)next_interval;
|
||||
|
||||
if (true)
|
||||
{
|
||||
DDNS_CLIENT_STATUS st;
|
||||
|
||||
DCGetStatus(c, &st);
|
||||
|
||||
SiApplyAzureConfig(c->Cedar->Server, &st);
|
||||
}
|
||||
|
||||
AddInterrupt(interrput, c->NextRegisterTick_IPv4);
|
||||
}
|
||||
|
||||
if (c->Halt)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// IPv6 host registration
|
||||
if (c->NextRegisterTick_IPv6 == 0 || now >= c->NextRegisterTick_IPv6)
|
||||
{
|
||||
UINT next_interval;
|
||||
|
||||
c->Err_IPv6 = DCRegister(c, true, NULL, NULL);
|
||||
|
||||
if (c->Err_IPv6 == ERR_NO_ERROR)
|
||||
{
|
||||
next_interval = GenRandInterval(DDNS_REGISTER_INTERVAL_OK_MIN, DDNS_REGISTER_INTERVAL_OK_MAX);
|
||||
}
|
||||
else
|
||||
{
|
||||
next_interval = GenRandInterval(DDNS_REGISTER_INTERVAL_NG_MIN, DDNS_REGISTER_INTERVAL_NG_MAX);
|
||||
}
|
||||
|
||||
c->NextRegisterTick_IPv6 = Tick64() + (UINT64)next_interval;
|
||||
|
||||
if (true)
|
||||
{
|
||||
DDNS_CLIENT_STATUS st;
|
||||
|
||||
DCGetStatus(c, &st);
|
||||
|
||||
SiApplyAzureConfig(c->Cedar->Server, &st);
|
||||
}
|
||||
|
||||
AddInterrupt(interrput, c->NextRegisterTick_IPv6);
|
||||
}
|
||||
|
||||
interval = GetNextIntervalForInterrupt(interrput);
|
||||
interval = MIN(interval, 1234);
|
||||
|
||||
if (n == 1)
|
||||
{
|
||||
interval = MIN(interval, 0);
|
||||
}
|
||||
|
||||
if (c->Halt)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (c->KeyChanged)
|
||||
{
|
||||
c->KeyChanged = false;
|
||||
c->NextRegisterTick_IPv4 = c->NextRegisterTick_IPv6 = 0;
|
||||
|
||||
interval = 0;
|
||||
}
|
||||
|
||||
if (last_time_ip_changed)
|
||||
{
|
||||
if (c->Cedar->Server != NULL && c->Cedar->Server->AzureClient != NULL)
|
||||
{
|
||||
c->Cedar->Server->AzureClient->IpStatusRevision++;
|
||||
}
|
||||
}
|
||||
|
||||
Wait(c->Event, interval);
|
||||
}
|
||||
|
||||
FreeRouteChange(route_change_poller);
|
||||
FreeInterruptManager(interrput);
|
||||
}
|
||||
|
||||
// Command to update immediately
|
||||
void DCUpdateNow(DDNS_CLIENT *c)
|
||||
{
|
||||
// Validate arguments
|
||||
if (c == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
c->NextRegisterTick_IPv4 = c->NextRegisterTick_IPv6 = 0;
|
||||
|
||||
Set(c->Event);
|
||||
}
|
||||
|
||||
// Execution of registration
|
||||
UINT DCRegister(DDNS_CLIENT *c, bool ipv6, DDNS_REGISTER_PARAM *p, char *replace_v6)
|
||||
{
|
||||
char *url;
|
||||
char url2[MAX_SIZE];
|
||||
char url3[MAX_SIZE];
|
||||
PACK *req, *ret;
|
||||
char key_str[MAX_SIZE];
|
||||
UCHAR machine_key[SHA1_SIZE];
|
||||
char machine_key_str[MAX_SIZE];
|
||||
char machine_name[MAX_SIZE];
|
||||
BUF *cert_hash;
|
||||
UINT err = ERR_INTERNAL_ERROR;
|
||||
UCHAR key_hash[SHA1_SIZE];
|
||||
char key_hash_str[MAX_SIZE];
|
||||
bool use_azure = false;
|
||||
char current_azure_ip[MAX_SIZE];
|
||||
INTERNET_SETTING t;
|
||||
UINT build = 0;
|
||||
bool use_https = false;
|
||||
bool use_vgs = false;
|
||||
// Validate arguments
|
||||
if (c == NULL)
|
||||
{
|
||||
return ERR_INTERNAL_ERROR;
|
||||
}
|
||||
|
||||
Zero(current_azure_ip, sizeof(current_azure_ip));
|
||||
|
||||
GetCurrentMachineIpProcessHash(machine_key);
|
||||
BinToStr(machine_key_str, sizeof(machine_key_str), machine_key, sizeof(machine_key));
|
||||
|
||||
GetMachineHostName(machine_name, sizeof(machine_name));
|
||||
StrLower(machine_name);
|
||||
|
||||
if (ipv6 == false)
|
||||
{
|
||||
url = DDNS_URL_V4_GLOBAL;
|
||||
|
||||
if (IsUseAlternativeHostname())
|
||||
{
|
||||
url = DDNS_URL_V4_ALT;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
url = DDNS_URL_V6_GLOBAL;
|
||||
|
||||
if (IsUseAlternativeHostname())
|
||||
{
|
||||
url = DDNS_URL_V6_ALT;
|
||||
}
|
||||
|
||||
if (replace_v6)
|
||||
{
|
||||
url = replace_v6;
|
||||
}
|
||||
}
|
||||
|
||||
Zero(&t, sizeof(t));
|
||||
if (ipv6 == false)
|
||||
{
|
||||
// Proxy Setting
|
||||
Copy(&t, &c->InternetSetting, sizeof(INTERNET_SETTING));
|
||||
}
|
||||
|
||||
if (ipv6 == false)
|
||||
{
|
||||
// Get the current status of the VPN Azure Client
|
||||
if (c->Cedar->Server != NULL)
|
||||
{
|
||||
AZURE_CLIENT *ac = c->Cedar->Server->AzureClient;
|
||||
|
||||
if (ac != NULL)
|
||||
{
|
||||
use_azure = SiIsAzureEnabled(c->Cedar->Server);
|
||||
|
||||
if (use_azure)
|
||||
{
|
||||
Lock(ac->Lock);
|
||||
{
|
||||
StrCpy(current_azure_ip, sizeof(current_azure_ip), ac->ConnectingAzureIp);
|
||||
}
|
||||
Unlock(ac->Lock);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
req = NewPack();
|
||||
BinToStr(key_str, sizeof(key_str), c->Key, sizeof(c->Key));
|
||||
StrUpper(key_str);
|
||||
PackAddStr(req, "key", key_str);
|
||||
|
||||
// Build Number
|
||||
build = c->Cedar->Build;
|
||||
|
||||
|
||||
PackAddInt(req, "build", build);
|
||||
PackAddInt(req, "osinfo", GetOsInfo()->OsType);
|
||||
PackAddInt(req, "is_64bit", Is64());
|
||||
#ifdef OS_WIN32
|
||||
PackAddInt(req, "is_windows_64bit", MsIs64BitWindows());
|
||||
#endif // OS_WIN32
|
||||
PackAddBool(req, "is_softether", true);
|
||||
PackAddBool(req, "is_packetix", false);
|
||||
PackAddStr(req, "machine_key", machine_key_str);
|
||||
PackAddStr(req, "machine_name", machine_name);
|
||||
PackAddInt(req, "lasterror_ipv4", c->Err_IPv4_GetMyIp);
|
||||
PackAddInt(req, "lasterror_ipv6", c->Err_IPv6_GetMyIp);
|
||||
PackAddBool(req, "use_azure", use_azure);
|
||||
PackAddStr(req, "product_str", CEDAR_PRODUCT_STR);
|
||||
PackAddInt(req, "ddns_protocol_version", DDNS_VERSION);
|
||||
|
||||
|
||||
if (use_azure)
|
||||
{
|
||||
Debug("current_azure_ip = %s\n", current_azure_ip);
|
||||
PackAddStr(req, "current_azure_ip", current_azure_ip);
|
||||
}
|
||||
|
||||
HashSha1(key_hash, key_str, StrLen(key_str));
|
||||
BinToStr(key_hash_str, sizeof(key_hash_str), key_hash, sizeof(key_hash));
|
||||
StrLower(key_hash_str);
|
||||
|
||||
if (p != NULL)
|
||||
{
|
||||
if (IsEmptyStr(p->NewHostname) == false)
|
||||
{
|
||||
PackAddStr(req, "new_hostname", p->NewHostname);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
cert_hash = StrToBin(DDNS_CERT_HASH);
|
||||
|
||||
Format(url2, sizeof(url2), "%s?v=%I64u", url, Rand64());
|
||||
Format(url3, sizeof(url3), url2, key_hash_str[0], key_hash_str[1], key_hash_str[2], key_hash_str[3]);
|
||||
|
||||
if (use_https == false)
|
||||
{
|
||||
ReplaceStr(url3, sizeof(url3), url3, "https://", "http://");
|
||||
}
|
||||
|
||||
ReplaceStr(url3, sizeof(url3), url3, ".servers", ".open.servers");
|
||||
|
||||
Debug("WpcCall: %s\n", url3);
|
||||
ret = WpcCallEx(url3, &t, DDNS_CONNECT_TIMEOUT, DDNS_COMM_TIMEOUT, "register", req,
|
||||
NULL, NULL, ((cert_hash != NULL && cert_hash->Size == SHA1_SIZE) ? cert_hash->Buf : NULL), NULL, DDNS_RPC_MAX_RECV_SIZE);
|
||||
Debug("WpcCall Ret: %u\n", ret);
|
||||
|
||||
FreeBuf(cert_hash);
|
||||
|
||||
FreePack(req);
|
||||
|
||||
err = GetErrorFromPack(ret);
|
||||
|
||||
ExtractAndApplyDynList(ret);
|
||||
|
||||
// Status update
|
||||
Lock(c->Lock);
|
||||
{
|
||||
if (err == ERR_NO_ERROR)
|
||||
{
|
||||
char snat_t[MAX_SIZE];
|
||||
|
||||
// Current host name
|
||||
PackGetStr(ret, "current_hostname", c->CurrentHostName, sizeof(c->CurrentHostName));
|
||||
PackGetStr(ret, "current_fqdn", c->CurrentFqdn, sizeof(c->CurrentFqdn));
|
||||
PackGetStr(ret, "current_ipv4", c->CurrentIPv4, sizeof(c->CurrentIPv4));
|
||||
PackGetStr(ret, "current_ipv6", c->CurrentIPv6, sizeof(c->CurrentIPv6));
|
||||
PackGetStr(ret, "dns_suffix", c->DnsSuffix, sizeof(c->DnsSuffix));
|
||||
|
||||
// SecureNAT connectivity check parameters
|
||||
Zero(snat_t, sizeof(snat_t));
|
||||
PackGetStr(ret, "snat_t", snat_t, sizeof(snat_t));
|
||||
NnSetSecureNatTargetHostname(snat_t);
|
||||
|
||||
if (ipv6 == false)
|
||||
{
|
||||
char cert_hash[MAX_SIZE];
|
||||
|
||||
PackGetStr(ret, "current_azure_ip", c->CurrentAzureIp, sizeof(c->CurrentAzureIp));
|
||||
c->CurrentAzureTimestamp = PackGetInt64(ret, "current_azure_timestamp");
|
||||
PackGetStr(ret, "current_azure_signature", c->CurrentAzureSignature, sizeof(c->CurrentAzureSignature));
|
||||
|
||||
Zero(cert_hash, sizeof(cert_hash));
|
||||
PackGetStr(ret, "azure_cert_hash", cert_hash, sizeof(cert_hash));
|
||||
|
||||
if (IsEmptyStr(cert_hash) == false)
|
||||
{
|
||||
StrCpy(c->AzureCertHash, sizeof(c->AzureCertHash), cert_hash);
|
||||
}
|
||||
}
|
||||
|
||||
StrCpy(c->Cedar->CurrentDDnsFqdn, sizeof(c->Cedar->CurrentDDnsFqdn), c->CurrentFqdn);
|
||||
|
||||
Debug("current_hostname=%s, current_fqdn=%s, current_ipv4=%s, current_ipv6=%s, current_azure_ip=%s, CurrentAzureTimestamp=%I64u, CurrentAzureSignature=%s, CertHash=%s\n",
|
||||
c->CurrentHostName, c->CurrentFqdn,
|
||||
c->CurrentIPv4, c->CurrentIPv6,
|
||||
c->CurrentAzureIp, c->CurrentAzureTimestamp, c->CurrentAzureSignature, c->AzureCertHash);
|
||||
}
|
||||
}
|
||||
Unlock(c->Lock);
|
||||
|
||||
if (IsEmptyStr(c->CurrentFqdn) == false)
|
||||
{
|
||||
SetCurrentDDnsFqdn(c->CurrentFqdn);
|
||||
}
|
||||
|
||||
|
||||
FreePack(ret);
|
||||
|
||||
UniDebug(L"DCRegister Error: %s\n", _E(err));
|
||||
|
||||
if (err == ERR_DUPLICATE_DDNS_KEY)
|
||||
{
|
||||
// Key duplication
|
||||
DCGenNewKey(c->Key);
|
||||
c->KeyChanged = true;
|
||||
}
|
||||
|
||||
if (err == ERR_DISCONNECTED)
|
||||
{
|
||||
err = ERR_DDNS_DISCONNECTED;
|
||||
}
|
||||
|
||||
if (IsUseAlternativeHostname() == false)
|
||||
{
|
||||
if (err == ERR_CONNECT_FAILED)
|
||||
{
|
||||
if (ipv6 && replace_v6 == NULL)
|
||||
{
|
||||
UINT type = DetectFletsType();
|
||||
|
||||
if (type & FLETS_DETECT_TYPE_EAST_BFLETS_PRIVATE && err != ERR_NO_ERROR)
|
||||
{
|
||||
err = DCRegister(c, ipv6, p, DDNS_REPLACE_URL_FOR_EAST_BFLETS);
|
||||
}
|
||||
|
||||
if (type & FLETS_DETECT_TYPE_EAST_NGN_PRIVATE && err != ERR_NO_ERROR)
|
||||
{
|
||||
err = DCRegister(c, ipv6, p, DDNS_REPLACE_URL_FOR_EAST_NGN);
|
||||
}
|
||||
|
||||
if (type & FLETS_DETECT_TYPE_WEST_NGN_PRIVATE && err != ERR_NO_ERROR)
|
||||
{
|
||||
err = DCRegister(c, ipv6, p, DDNS_REPLACE_URL_FOR_WEST_NGN);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
// Get the self IP address
|
||||
UINT DCGetMyIp(DDNS_CLIENT *c, bool ipv6, char *dst, UINT dst_size, char *replace_v6)
|
||||
{
|
||||
UINT ret = ERR_INTERNAL_ERROR;
|
||||
|
||||
ret = DCGetMyIpMain(c, ipv6, dst, dst_size, false, replace_v6);
|
||||
|
||||
|
||||
if (ret == ERR_NO_ERROR)
|
||||
{
|
||||
IP ip;
|
||||
|
||||
if (StrToIP(&ip, dst))
|
||||
{
|
||||
if (ipv6 == false && IsIP4(&ip))
|
||||
{
|
||||
SetCurrentGlobalIP(&ip, false);
|
||||
}
|
||||
else if (ipv6 && IsIP6(&ip))
|
||||
{
|
||||
SetCurrentGlobalIP(&ip, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
UINT DCGetMyIpMain(DDNS_CLIENT *c, bool ipv6, char *dst, UINT dst_size, bool use_ssl, char *replace_v6)
|
||||
{
|
||||
char *url;
|
||||
char url2[MAX_SIZE];
|
||||
UINT ret = ERR_INTERNAL_ERROR;
|
||||
URL_DATA data;
|
||||
BUF *recv;
|
||||
BUF *cert_hash;
|
||||
// Validate arguments
|
||||
if (dst == NULL || c == NULL)
|
||||
{
|
||||
return ERR_INTERNAL_ERROR;
|
||||
}
|
||||
|
||||
if (ipv6 == false)
|
||||
{
|
||||
url = DDNS_URL2_V4_GLOBAL;
|
||||
|
||||
if (IsUseAlternativeHostname())
|
||||
{
|
||||
url = DDNS_URL2_V4_ALT;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
url = DDNS_URL2_V6_GLOBAL;
|
||||
|
||||
if (IsUseAlternativeHostname())
|
||||
{
|
||||
url = DDNS_URL2_V6_ALT;
|
||||
}
|
||||
|
||||
if (replace_v6)
|
||||
{
|
||||
url = replace_v6;
|
||||
}
|
||||
}
|
||||
|
||||
Format(url2, sizeof(url2), "%s?v=%I64u", url, Rand64());
|
||||
|
||||
if (use_ssl)
|
||||
{
|
||||
ReplaceStr(url2, sizeof(url2), url2, "http://", "https://");
|
||||
}
|
||||
|
||||
if (ParseUrl(&data, url2, false, NULL) == false)
|
||||
{
|
||||
return ERR_INTERNAL_ERROR;
|
||||
}
|
||||
|
||||
cert_hash = StrToBin(DDNS_CERT_HASH);
|
||||
|
||||
recv = HttpRequest(&data, (ipv6 ? NULL : &c->InternetSetting), DDNS_CONNECT_TIMEOUT, DDNS_COMM_TIMEOUT, &ret, false, NULL, NULL,
|
||||
NULL, ((cert_hash != NULL && cert_hash->Size == SHA1_SIZE) ? cert_hash->Buf : NULL));
|
||||
|
||||
FreeBuf(cert_hash);
|
||||
|
||||
if (recv != NULL)
|
||||
{
|
||||
char *str = ZeroMalloc(recv->Size + 1);
|
||||
Copy(str, recv->Buf, recv->Size);
|
||||
|
||||
if (StartWith(str, "IP=") == false)
|
||||
{
|
||||
ret = ERR_PROTOCOL_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
StrCpy(dst, dst_size, str + 3);
|
||||
ret = ERR_NO_ERROR;
|
||||
}
|
||||
|
||||
Free(str);
|
||||
FreeBuf(recv);
|
||||
}
|
||||
|
||||
if (IsUseAlternativeHostname() == false)
|
||||
{
|
||||
if (ret == ERR_CONNECT_FAILED)
|
||||
{
|
||||
if (ipv6 && replace_v6 == NULL && use_ssl == false)
|
||||
{
|
||||
UINT type = DetectFletsType();
|
||||
|
||||
if (type & FLETS_DETECT_TYPE_EAST_BFLETS_PRIVATE && ret != ERR_NO_ERROR)
|
||||
{
|
||||
ret = DCGetMyIpMain(c, ipv6, dst, dst_size, use_ssl, DDNS_REPLACE_URL2_FOR_EAST_BFLETS);
|
||||
}
|
||||
|
||||
if (type & FLETS_DETECT_TYPE_EAST_NGN_PRIVATE && ret != ERR_NO_ERROR)
|
||||
{
|
||||
ret = DCGetMyIpMain(c, ipv6, dst, dst_size, use_ssl, DDNS_REPLACE_URL2_FOR_EAST_NGN);
|
||||
}
|
||||
|
||||
if (type & FLETS_DETECT_TYPE_WEST_NGN_PRIVATE && ret != ERR_NO_ERROR)
|
||||
{
|
||||
ret = DCGetMyIpMain(c, ipv6, dst, dst_size, use_ssl, DDNS_REPLACE_URL2_FOR_WEST_NGN);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Creating a DDNS client
|
||||
DDNS_CLIENT *NewDDNSClient(CEDAR *cedar, UCHAR *key, INTERNET_SETTING *t)
|
||||
{
|
||||
DDNS_CLIENT *c;
|
||||
UCHAR key_hash[SHA1_SIZE];
|
||||
// Validate arguments
|
||||
if (cedar == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
c = ZeroMalloc(sizeof(DDNS_CLIENT));
|
||||
c->Cedar = cedar;
|
||||
AddRef(c->Cedar->ref);
|
||||
|
||||
c->Err_IPv4 = c->Err_IPv6 = ERR_TRYING_TO_CONNECT;
|
||||
|
||||
if (key == NULL)
|
||||
{
|
||||
// Create a new key
|
||||
DCGenNewKey(c->Key);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set the key
|
||||
Copy(c->Key, key, SHA1_SIZE);
|
||||
}
|
||||
|
||||
HashSha1(key_hash, c->Key, sizeof(c->Key));
|
||||
|
||||
|
||||
if (t != NULL)
|
||||
{
|
||||
Copy(&c->InternetSetting, t, sizeof(INTERNET_SETTING));
|
||||
}
|
||||
|
||||
c->Lock = NewLock();
|
||||
|
||||
// Thread creation
|
||||
c->Event = NewEvent();
|
||||
c->Thread = NewThread(DCThread, c);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
// Release of DDNS client
|
||||
void FreeDDNSClient(DDNS_CLIENT *c)
|
||||
{
|
||||
// Validate arguments
|
||||
if (c == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Stop the thread
|
||||
c->Halt = true;
|
||||
Set(c->Event);
|
||||
|
||||
WaitThread(c->Thread, INFINITE);
|
||||
ReleaseThread(c->Thread);
|
||||
|
||||
ReleaseEvent(c->Event);
|
||||
|
||||
ReleaseCedar(c->Cedar);
|
||||
DeleteLock(c->Lock);
|
||||
|
||||
Free(c);
|
||||
}
|
||||
|
||||
// Create a new key
|
||||
void DCGenNewKey(UCHAR *key)
|
||||
{
|
||||
BUF *b;
|
||||
UINT64 tick;
|
||||
UCHAR hash[SHA1_SIZE];
|
||||
UCHAR rand[SHA1_SIZE];
|
||||
UINT i;
|
||||
// Validate arguments
|
||||
if (key == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
b = NewBuf();
|
||||
|
||||
Rand(rand, sizeof(rand));
|
||||
WriteBuf(b, rand, sizeof(rand));
|
||||
|
||||
tick = TickHighres64();
|
||||
WriteBufInt64(b, tick);
|
||||
|
||||
tick = Tick64();
|
||||
WriteBufInt64(b, tick);
|
||||
|
||||
tick = SystemTime64();
|
||||
WriteBufInt64(b, tick);
|
||||
|
||||
GetCurrentMachineIpProcessHash(hash);
|
||||
WriteBuf(b, hash, sizeof(hash));
|
||||
|
||||
HashSha1(key, b->Buf, b->Size);
|
||||
Rand(rand, sizeof(rand));
|
||||
|
||||
for (i = 0;i < SHA1_SIZE;i++)
|
||||
{
|
||||
key[i] = key[i] ^ rand[i];
|
||||
}
|
||||
|
||||
FreeBuf(b);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
215
src/Cedar/DDNS.h
Normal file
215
src/Cedar/DDNS.h
Normal file
@ -0,0 +1,215 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// DDNS.h
|
||||
// Header of DDNS.c
|
||||
|
||||
#ifndef DDNS_H
|
||||
#define DDNS_H
|
||||
|
||||
// Certificate hash
|
||||
#define DDNS_CERT_HASH "EFAC5FA0CDD14E0F864EED58A73C35D7E33B62F3"
|
||||
|
||||
// Destination URL
|
||||
#define DDNS_URL_V4_GLOBAL "https://x%c.x%c.x%c.x%c.servers.ddns.softether-network.net/ddns/ddns.aspx"
|
||||
#define DDNS_URL_V6_GLOBAL "https://x%c.x%c.x%c.x%c.servers-v6.ddns.softether-network.net/ddns/ddns.aspx"
|
||||
#define DDNS_URL2_V4_GLOBAL "http://get-my-ip.ddns.softether-network.net/ddns/getmyip.ashx"
|
||||
#define DDNS_URL2_V6_GLOBAL "http://get-my-ip-v6.ddns.softether-network.net/ddns/getmyip.ashx"
|
||||
|
||||
#define DDNS_REPLACE_URL_FOR_EAST_BFLETS "https://senet-flets.v6.softether.co.jp/ddns/ddns.aspx"
|
||||
#define DDNS_REPLACE_URL_FOR_EAST_NGN "https://senet.aoi.flets-east.jp/ddns/ddns.aspx"
|
||||
#define DDNS_REPLACE_URL_FOR_WEST_NGN "https://senet.p-ns.flets-west.jp/ddns/ddns.aspx"
|
||||
|
||||
#define DDNS_REPLACE_URL2_FOR_EAST_BFLETS "http://senet-flets.v6.softether.co.jp/ddns/getmyip.ashx"
|
||||
#define DDNS_REPLACE_URL2_FOR_EAST_NGN "http://senet.aoi.flets-east.jp/ddns/getmyip.ashx"
|
||||
#define DDNS_REPLACE_URL2_FOR_WEST_NGN "http://senet.p-ns.flets-west.jp/ddns/getmyip.ashx"
|
||||
|
||||
// For China: Free version
|
||||
#define DDNS_URL_V4_ALT "https://x%c.x%c.x%c.x%c.servers.ddns.uxcom.jp/ddns/ddns.aspx"
|
||||
#define DDNS_URL_V6_ALT "https://x%c.x%c.x%c.x%c.servers-v6.ddns.uxcom.jp/ddns/ddns.aspx"
|
||||
#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))
|
||||
|
||||
// Connection Timeout
|
||||
#define DDNS_CONNECT_TIMEOUT DYN32(DDNS_CONNECT_TIMEOUT, (15 * 1000))
|
||||
|
||||
// Communication time-out
|
||||
#define DDNS_COMM_TIMEOUT DYN32(DDNS_COMM_TIMEOUT, (60 * 1000))
|
||||
|
||||
// Maximum length of the host name
|
||||
#define DDNS_MAX_HOSTNAME 31
|
||||
|
||||
// DDNS Version
|
||||
#define DDNS_VERSION 1
|
||||
|
||||
// Period until the next registration in case of success
|
||||
#define DDNS_REGISTER_INTERVAL_OK_MIN DYN32(DDNS_REGISTER_INTERVAL_OK_MIN, (1 * 60 * 60 * 1000))
|
||||
#define DDNS_REGISTER_INTERVAL_OK_MAX DYN32(DDNS_REGISTER_INTERVAL_OK_MAX, (2 * 60 * 60 * 1000))
|
||||
|
||||
// Period until the next registration in case of failure
|
||||
#define DDNS_REGISTER_INTERVAL_NG_MIN DYN32(DDNS_REGISTER_INTERVAL_NG_MIN, (1 * 60 * 1000))
|
||||
#define DDNS_REGISTER_INTERVAL_NG_MAX DYN32(DDNS_REGISTER_INTERVAL_NG_MAX, (5 * 60 * 1000))
|
||||
|
||||
// The self IP address acquisition interval (If last trial succeeded)
|
||||
#define DDNS_GETMYIP_INTERVAL_OK_MIN DYN32(DDNS_GETMYIP_INTERVAL_OK_MIN, (10 * 60 * 1000))
|
||||
#define DDNS_GETMYIP_INTERVAL_OK_MAX DYN32(DDNS_GETMYIP_INTERVAL_OK_MAX, (20 * 60 * 1000))
|
||||
|
||||
// The self IP address acquisition interval (If last trial failed)
|
||||
#define DDNS_GETMYIP_INTERVAL_NG_MIN DYN32(DDNS_GETMYIP_INTERVAL_NG_MIN, (1 * 60 * 1000))
|
||||
#define DDNS_GETMYIP_INTERVAL_NG_MAX DYN32(DDNS_GETMYIP_INTERVAL_NG_MAX, (5 * 60 * 1000))
|
||||
|
||||
// Time difference to communicate with the DDNS server after a predetermined time has elapsed since the VPN Azure is disconnected
|
||||
#define DDNS_VPN_AZURE_CONNECT_ERROR_DDNS_RETRY_TIME_DIFF DYN32(DDNS_VPN_AZURE_CONNECT_ERROR_DDNS_RETRY_TIME_DIFF, (120 * 1000))
|
||||
#define DDNS_VPN_AZURE_CONNECT_ERROR_DDNS_RETRY_TIME_DIFF_MAX DYN32(DDNS_VPN_AZURE_CONNECT_ERROR_DDNS_RETRY_TIME_DIFF_MAX, (10 * 60 * 1000))
|
||||
|
||||
// DDNS Client
|
||||
struct DDNS_CLIENT
|
||||
{
|
||||
CEDAR *Cedar; // Cedar
|
||||
THREAD *Thread; // Thread
|
||||
UCHAR Key[SHA1_SIZE]; // Key
|
||||
LOCK *Lock; // Lock
|
||||
volatile bool Halt; // Halt flag
|
||||
EVENT *Event; // Halt event
|
||||
char CurrentHostName[DDNS_MAX_HOSTNAME + 1]; // Current host name
|
||||
char CurrentFqdn[MAX_SIZE]; // Current FQDN
|
||||
char DnsSuffix[MAX_SIZE]; // DNS suffix
|
||||
char CurrentIPv4[MAX_SIZE]; // Current IPv4 address
|
||||
char CurrentIPv6[MAX_SIZE]; // Current IPv6 address
|
||||
UINT Err_IPv4, Err_IPv6; // Last error
|
||||
UINT Err_IPv4_GetMyIp, Err_IPv6_GetMyIp; // Last error (obtaining self IP address)
|
||||
bool KeyChanged; // Flag to indicate that the key has been changed
|
||||
char LastMyIPv4[MAX_SIZE]; // Self IPv4 address that were acquired on last
|
||||
char LastMyIPv6[MAX_SIZE]; // Self IPv6 address that were acquired on last
|
||||
char CurrentAzureIp[MAX_SIZE]; // IP address of Azure Server to be used
|
||||
UINT64 CurrentAzureTimestamp; // Time stamp to be presented to the Azure Server
|
||||
char CurrentAzureSignature[MAX_SIZE]; // Signature to be presented to the Azure Server
|
||||
char AzureCertHash[MAX_SIZE]; // Azure Server certificate hash
|
||||
INTERNET_SETTING InternetSetting; // Internet connection settings
|
||||
|
||||
UINT64 NextRegisterTick_IPv4, NextRegisterTick_IPv6; // Next register time
|
||||
UINT64 NextGetMyIpTick_IPv4, NextGetMyIpTick_IPv6; // Next self IP acquisition time
|
||||
};
|
||||
|
||||
// DDNS Register Param
|
||||
struct DDNS_REGISTER_PARAM
|
||||
{
|
||||
char NewHostname[DDNS_MAX_HOSTNAME + 1]; // Host name after the change
|
||||
};
|
||||
|
||||
// The current status of the DDNS
|
||||
struct DDNS_CLIENT_STATUS
|
||||
{
|
||||
UINT Err_IPv4, Err_IPv6; // Last error
|
||||
char CurrentHostName[DDNS_MAX_HOSTNAME + 1]; // Current host name
|
||||
char CurrentFqdn[MAX_SIZE]; // Current FQDN
|
||||
char DnsSuffix[MAX_SIZE]; // DNS suffix
|
||||
char CurrentIPv4[MAX_SIZE]; // Current IPv4 address
|
||||
char CurrentIPv6[MAX_SIZE]; // Current IPv6 address
|
||||
char CurrentAzureIp[MAX_SIZE]; // IP address of Azure Server to be used
|
||||
UINT64 CurrentAzureTimestamp; // Time stamp to be presented to the Azure Server
|
||||
char CurrentAzureSignature[MAX_SIZE]; // Signature to be presented to the Azure Server
|
||||
char AzureCertHash[MAX_SIZE]; // Azure Server certificate hash
|
||||
INTERNET_SETTING InternetSetting; // Internet settings
|
||||
};
|
||||
|
||||
// Function prototype
|
||||
DDNS_CLIENT *NewDDNSClient(CEDAR *cedar, UCHAR *key, INTERNET_SETTING *t);
|
||||
void FreeDDNSClient(DDNS_CLIENT *c);
|
||||
void DCGenNewKey(UCHAR *key);
|
||||
void DCThread(THREAD *thread, void *param);
|
||||
UINT DCRegister(DDNS_CLIENT *c, bool ipv6, DDNS_REGISTER_PARAM *p, char *replace_v6);
|
||||
UINT DCGetMyIpMain(DDNS_CLIENT *c, bool ipv6, char *dst, UINT dst_size, bool use_ssl, char *replace_v6);
|
||||
UINT DCGetMyIp(DDNS_CLIENT *c, bool ipv6, char *dst, UINT dst_size, char *replace_v6);
|
||||
void DCUpdateNow(DDNS_CLIENT *c);
|
||||
void DCGetStatus(DDNS_CLIENT *c, DDNS_CLIENT_STATUS *st);
|
||||
UINT DCChangeHostName(DDNS_CLIENT *c, char *hostname);
|
||||
void DCSetInternetSetting(DDNS_CLIENT *c, INTERNET_SETTING *t);
|
||||
void DCGetInternetSetting(DDNS_CLIENT *c, INTERNET_SETTING *t);
|
||||
|
||||
#endif // DDNS_H
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
239
src/Cedar/Database.c
Normal file
239
src/Cedar/Database.c
Normal file
@ -0,0 +1,239 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// Database.c
|
||||
// License database
|
||||
|
||||
#include "CedarPch.h"
|
||||
|
||||
// Get the License status string
|
||||
wchar_t *LiGetLicenseStatusStr(UINT i)
|
||||
{
|
||||
wchar_t *ret = _UU("LICENSE_STATUS_OTHERERROR");
|
||||
|
||||
switch (i)
|
||||
{
|
||||
case LICENSE_STATUS_OK:
|
||||
ret = _UU("LICENSE_STATUS_OK");
|
||||
break;
|
||||
|
||||
case LICENSE_STATUS_EXPIRED:
|
||||
ret = _UU("LICENSE_STATUS_EXPIRED");
|
||||
break;
|
||||
|
||||
case LICENSE_STATUS_ID_DIFF:
|
||||
ret = _UU("LICENSE_STATUS_ID_DIFF");
|
||||
break;
|
||||
|
||||
case LICENSE_STATUS_DUP:
|
||||
ret = _UU("LICENSE_STATUS_DUP");
|
||||
break;
|
||||
|
||||
case LICENSE_STATUS_INSUFFICIENT:
|
||||
ret = _UU("LICENSE_STATUS_INSUFFICIENT");
|
||||
break;
|
||||
|
||||
case LICENSE_STATUS_COMPETITION:
|
||||
ret = _UU("LICENSE_STATUS_COMPETITION");
|
||||
break;
|
||||
|
||||
case LICENSE_STATUS_NONSENSE:
|
||||
ret = _UU("LICENSE_STATUS_NONSENSE");
|
||||
break;
|
||||
|
||||
case LICENSE_STATUS_CPU:
|
||||
ret = _UU("LICENSE_STATUS_CPU");
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static char *li_keybit_chars = "ABCDEFGHJKLMNPQRSTUVWXYZ12345678";
|
||||
|
||||
// Convert the string to a key bit
|
||||
bool LiStrToKeyBit(UCHAR *keybit, char *keystr)
|
||||
{
|
||||
UINT x[36];
|
||||
UINT i, wp;
|
||||
char *str;
|
||||
// Validate arguments
|
||||
if (keybit == NULL || keystr == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
str = CopyStr(keystr);
|
||||
Trim(str);
|
||||
|
||||
wp = 0;
|
||||
if (StrLen(str) != 41)
|
||||
{
|
||||
Free(str);
|
||||
return false;
|
||||
}
|
||||
|
||||
for (i = 0;i < 36;i++)
|
||||
{
|
||||
char c = str[wp++];
|
||||
UINT j;
|
||||
|
||||
if (((i % 6) == 5) && (i != 35))
|
||||
{
|
||||
if (str[wp++] != '-')
|
||||
{
|
||||
Free(str);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
x[i] = INFINITE;
|
||||
for (j = 0;j < 32;j++)
|
||||
{
|
||||
if (ToUpper(c) == li_keybit_chars[j])
|
||||
{
|
||||
x[i] = j;
|
||||
}
|
||||
}
|
||||
|
||||
if (x[i] == INFINITE)
|
||||
{
|
||||
Free(str);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Zero(keybit, 23);
|
||||
|
||||
keybit[0] = x[0] << 1 | x[1] >> 4;
|
||||
keybit[1] = x[1] << 4 | x[2] >> 1;
|
||||
keybit[2] = x[2] << 7 | x[3] << 2 | x[4] >> 3;
|
||||
keybit[3] = x[4] << 5 | x[5];
|
||||
|
||||
keybit[4] = x[6] << 3 | x[7] >> 2;
|
||||
keybit[5] = x[7] << 6 | x[8] << 1 | x[9] >> 4;
|
||||
keybit[6] = x[9] << 4 | x[10] >> 1;
|
||||
keybit[7] = x[10] << 7 | x[11] << 2 | x[12] >> 3;
|
||||
keybit[8] = x[12] << 5 | x[13];
|
||||
|
||||
keybit[9] = x[14] << 3 | x[15] >> 2;
|
||||
keybit[10] = x[15] << 6 | x[16] << 1 | x[17] >> 4;
|
||||
keybit[11] = x[17] << 4 | x[18] >> 1;
|
||||
keybit[12] = x[18] << 7 | x[19] << 2 | x[20] >> 3;
|
||||
keybit[13] = x[20] << 5 | x[21];
|
||||
|
||||
keybit[14] = x[22] << 3 | x[23] >> 2;
|
||||
keybit[15] = x[23] << 6 | x[24] << 1 | x[25] >> 4;
|
||||
keybit[16] = x[25] << 4 | x[26] >> 1;
|
||||
keybit[17] = x[26] << 7 | x[27] << 2 | x[28] >> 3;
|
||||
keybit[18] = x[28] << 5 | x[29];
|
||||
|
||||
keybit[19] = x[30] << 3 | x[31] >> 2;
|
||||
keybit[20] = x[31] << 6 | x[32] << 1 | x[33] >> 4;
|
||||
keybit[21] = x[33] << 4 | x[34] >> 1;
|
||||
keybit[22] = x[34] << 7 | x[35] << 2;
|
||||
|
||||
Free(str);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Determine whether the string is a license key
|
||||
bool LiIsLicenseKey(char *str)
|
||||
{
|
||||
UCHAR keybit[23];
|
||||
// Validate arguments
|
||||
if (str == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (LiStrToKeyBit(keybit, str) == false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
98
src/Cedar/Database.h
Normal file
98
src/Cedar/Database.h
Normal file
@ -0,0 +1,98 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// Database.h
|
||||
// Header of Database.c
|
||||
|
||||
#ifndef DATABASE_H
|
||||
#define DATABASE_H
|
||||
|
||||
wchar_t *LiGetLicenseStatusStr(UINT i);
|
||||
bool LiIsLicenseKey(char *str);
|
||||
bool LiStrToKeyBit(UCHAR *keybit, char *keystr);
|
||||
|
||||
|
||||
#endif // DATABASE_H
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
1476
src/Cedar/EM.c
Normal file
1476
src/Cedar/EM.c
Normal file
File diff suppressed because it is too large
Load Diff
96
src/Cedar/EM.h
Normal file
96
src/Cedar/EM.h
Normal file
@ -0,0 +1,96 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// EM.h
|
||||
// Header of EM.c
|
||||
|
||||
#ifndef EM_H
|
||||
#define EM_H
|
||||
|
||||
// Public function
|
||||
void EMExec();
|
||||
|
||||
#endif // EM_H
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
122
src/Cedar/EMInner.h
Normal file
122
src/Cedar/EMInner.h
Normal file
@ -0,0 +1,122 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Cedar Communication Module
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// EMInner.h
|
||||
// Inner header of EM.c
|
||||
|
||||
// Constants
|
||||
#define EM_REG_KEY "Software\\" GC_REG_COMPANY_NAME "\\EtherLogger\\Manager"
|
||||
|
||||
// Innner structure
|
||||
typedef struct EM_ADD
|
||||
{
|
||||
RPC *Rpc;
|
||||
bool NewMode;
|
||||
char DeviceName[MAX_SIZE];
|
||||
} EM_ADD;
|
||||
|
||||
// Inner functions
|
||||
void EMMain(RPC *r);
|
||||
UINT EmMainDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void EmMainInit(HWND hWnd, RPC *r);
|
||||
void EmMainUpdate(HWND hWnd, RPC *r);
|
||||
void EmMainRefresh(HWND hWnd, RPC *r);
|
||||
void EmAdd(HWND hWnd, RPC *r, char *device_name);
|
||||
UINT EmAddDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void EmAddInit(HWND hWnd, EM_ADD *p);
|
||||
void EmDlgToHubLog(HWND hWnd, HUB_LOG *g);
|
||||
void EmHubLogToDlg(HWND hWnd, HUB_LOG *g);
|
||||
void EmAddOk(HWND hWnd, EM_ADD *p);
|
||||
void EmAddUpdate(HWND hWnd, EM_ADD *p);
|
||||
UINT EmPasswordDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
UINT EmLicenseDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void EmLicenseDlgInit(HWND hWnd, RPC *s);
|
||||
void EmLicenseDlgRefresh(HWND hWnd, RPC *s);
|
||||
void EmLicenseDlgUpdate(HWND hWnd, RPC *s);
|
||||
bool EmLicenseAdd(HWND hWnd, RPC *s);
|
||||
UINT EmLicenseAddDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
|
||||
void EmLicenseAddDlgInit(HWND hWnd, RPC *s);
|
||||
void EmLicenseAddDlgUpdate(HWND hWnd, RPC *s);
|
||||
void EmLicenseAddDlgShiftTextItem(HWND hWnd, UINT id1, UINT id2, UINT *next_focus);
|
||||
void EmLicenseAddDlgGetText(HWND hWnd, char *str, UINT size);
|
||||
void EmLicenseAddDlgOnOk(HWND hWnd, RPC *s);
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
1356
src/Cedar/EtherLog.c
Normal file
1356
src/Cedar/EtherLog.c
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user