1
0
mirror of https://github.com/SoftEtherVPN/SoftEtherVPN.git synced 2024-11-23 01:49:53 +03:00

Merge pull request #1 from SoftEtherVPN/master

update to latest version
This commit is contained in:
Holoreimu 2017-12-02 01:30:07 +08:00 committed by GitHub
commit 39c1081d38
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1449 changed files with 43231 additions and 7395 deletions

14
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,14 @@
Changes proposed in this pull request:
-
-
-
Your great patch is much appreciated. We are considering to apply your patch into the SoftEther VPN main tree.
SoftEther VPN Patch Acceptance Policy:
http://www.softether.org/5-download/src/9.patch
You have two options which are described on the above policy.
Could you please choose either option 1 or 2, and specify it clearly on the reply?
-

10
.gitignore vendored Normal file
View File

@ -0,0 +1,10 @@
.cproject
.project
.settings/
CMakeLists.txt
Makefile
bin/
cmake-build-debug/
src/bin/BuiltHamcoreFiles/
tmp/

View File

@ -6,7 +6,7 @@ AUTHORS OF SOFTETHER VPN
CORE DEVELOPERS: CORE DEVELOPERS:
- Daiyuu Nobori - Daiyuu Nobori, Ph.D.
Computer Science, Graduate School of University of Tsukuba Computer Science, Graduate School of University of Tsukuba
SoftEther Corporation SoftEther Corporation
E-mail: daiyuu-nobori [at] softether.org E-mail: daiyuu-nobori [at] softether.org
@ -18,16 +18,16 @@ CORE DEVELOPERS:
Risk Engineering, Graduate School of University of Tsukuba Risk Engineering, Graduate School of University of Tsukuba
SoftEther Corporation SoftEther Corporation
- Takao Ito - Takao Ito, Ph.D.
Computer Science, Graduate School of University of Tsukuba Computer Science, Graduate School of University of Tsukuba
SoftEther Corporation SoftEther Corporation
- Mei Sharie Ann Yamaguchi, Ph.D.
Life and Environmental Sciences, Graduate School of University of Tsukuba
- Christopher Smith - Christopher Smith
College of Information Science, University of Tsukuba College of Information Science, University of Tsukuba
- Mei Sharie Ann Yamaguchi
Life and Environmental Sciences, Graduate School of University of Tsukuba
WEB-SITE DESIGNER: WEB-SITE DESIGNER:
@ -67,6 +67,77 @@ CONTRIBUTORS on GitHub:
- ygrek - ygrek
https://github.com/ygrek https://github.com/ygrek
- ajee cai
https://github.com/ajeecai
- NOKUBI Takatsugu
https://github.com/knok
- Den Lesnov
https://github.com/Leden
- Ilya Shipitsin
https://github.com/chipitsine
- Matt Lewandowsky
https://github.com/lewellyn
- Raymond Tau
https://github.com/rtau
- Luiz Eduardo Gava
https://github.com/LegDog
- Charles Surett
https://github.com/scj643
- Jeff Tang
https://github.com/mrjefftang
- Victor Salgado
https://github.com/mcsalgado
- micsell
https://github.com/micsell
- yehorov
https://github.com/yehorov
- dglushenok
https://github.com/dglushenok
- NoNameA 774
https://github.com/nna774
- Alexandre De Oliveira
https://github.com/yodresh
- Bernhard Rosenkraenzer
https://github.com/berolinux
- Sacha Bernstein
https://github.com/sacha
- cm0x4D
https://github.com/cm0x4D
- DDGo
https://github.com/DDGo
- Noah O'Donoghue
https://github.com/NoahO
- Moataz Elmasry
https://github.com/moatazelmasry2
- Zulyandri Zardi
https://github.com/zulzardi
- rel22
https://github.com/rel22
- Guanzhong Chen
https://github.com/quantum5
JOIN THE SOFTETHER VPN DEVELOPMENT JOIN THE SOFTETHER VPN DEVELOPMENT
---------------------------------- ----------------------------------
@ -76,8 +147,3 @@ Want to become a contributor? Please send us a patch.
See also: SoftEther VPN Patch Acceptance Policy See also: SoftEther VPN Patch Acceptance Policy
http://www.softether.org/5-download/src/9.patch http://www.softether.org/5-download/src/9.patch
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/

View File

@ -9,6 +9,7 @@ You need to install the following software to build SoftEther VPN for Windows.
- Microsoft Windows XP, Vista, 7, 8 or later. - Microsoft Windows XP, Vista, 7, 8 or later.
- Microsoft Visual Studio 2008 with the latest SP (SP1 9.0.30729.4462 QFE). - Microsoft Visual Studio 2008 with the latest SP (SP1 9.0.30729.4462 QFE).
Make sure that you installed the x64 compiler and build tools.
* Note: * Note:
Visual Studio 2008 SP1 is required to build SoftEther VPN on Windows. Visual Studio 2008 SP1 is required to build SoftEther VPN on Windows.

355
ChangeLog
View File

@ -1,10 +1,353 @@
ChangeLog of SoftEther VPN SoftEther VPN 4.23 Build 9647 Beta (October 18, 2017)
-------------------------- Upgraded OpenSSL to 1.0.2l.
Source code is now compatible with OpenSSL 1.1.x. Supports DHE-RSA-CHACHA 20-POLY 1305 and ECDHE-RSA-CHACHA 20-POLY 1305, which are new encryption methods of TLS 1.2. (In order to use this new function, you need to recompile yourself using OpenSSL 1.1.x.)
TrafficServer / TrafficClient function (The traffic throughput measurement function) is now multithreaded and compatible with about 10 Gbps using NIC with the RSS feature.
Changed the default algorithm for SSL from RC4-MD5 to AES128-SHA.
Fixed a bug that occurr wrong checksum recalculation in special case of the TCP-MSS clamp processing.
Fixed the calculation interval of update interval of DHCP client packet issued by kernel mode virtual NAT function of SecureNAT function.
Driver upgrade and DLL name change with Crypto ID support of USB security token.
Fixed a problem that CPU sleep processing was not performed when the wait time of the Select () function was INFINITE on Mac OS X.
Added the StrictSyslogDatetimeFormat flag onto the ServerConfiguration section on the VPN Server configuration file, which sets Syslog date format to RFC3164.
Fixed wrong English in the UI.
Using client parameter in function CtConnect
Remove blank line at the start from init file (Debian)
Stop Radius Delay from counting to next_resend
Add DH groups 2048,3072,4096 to IPSec_IKE
Add HMAC SHA2-256, HMAC SHA2-384, HMAC SHA2-512 support
Openvpn extend ciphers
Fixed RSA key bits wrong calculation for certain x509 certificate
Added support for RuToken USB key PKCS#11
OpenSSL 1.1 Port
The ChangeLog of SoftEther VPN is on our web site: SoftEther VPN 4.22 Build 9634 Beta (November 27, 2016)
http://www.softether.org/5-download/history Added the support for TLS 1.2. Added TLS 1.2-based cipher sets: AES128-GCM-SHA256, AES128-SHA256, AES256-GCM-SHA384, AES256-SHA256, DHE-RSA-AES128-GCM-SHA256, DHE-RSA-AES128-SHA256, DHE-RSA-AES256-GCM-SHA384, DHE-RSA-AES256-SHA256, ECDHE-RSA-AES128-GCM-SHA256, ECDHE-RSA-AES128-SHA256, ECDHE-RSA-AES256-GCM-SHA384 and ECDHE-RSA-AES256-SHA384.
Added the function to allow to configure specific TLS versions to accept / deny. In the VPN Server configuration file you can set Tls_Disable1_0, Tls_Disable1_1 and Tls_Disable1_2 flags to true to disable these TLS versions individually.
Added the support for TLS 1.2 on the OpenVPN protocol.
Updated the version of OpenSSL to 1.0.2j.
Added the support for Windows Server 2016.
Fixed the 2038-year problem.
Added the support for recording HTTPS destination hostnames, using SNI attributes, on the packet logging function.
Added the function to append the name of Virtual Hub into the "Called-Station-ID (30)" attribute value in the RADIUS authentication request packet.
Improved the behavior of Virtual Layer-3 switches. The interval of ARP request is set to 1 second.
Fixed the problem of the slow startup of VPN Server in Windows 10.
Added the support for 4096 bits RSA authentication with smart cards.
Added the support for the CryptoID USB token.
Fixed the UI string resource in English.
Fix that ParseTcpOption doesn't work correctly
Add LSB header
Support Debian package build on aarch64 architecture
Support Debian package build on ARMv7l architecture
cppcheck issues
Default to TLS connections only
Allow specific SSL/TLS versions to be disabled
Adding Radius AVP Called-Station-Id
Fixed typo
Update CentOS makefiles and spec file
Systemd service configuration files for SoftEther
Fix set initialization, set.OnlyCapsuleModeIsInvalid could be garbage
Fixed OSX CPU utilization by replacing broken kevent () with select ()
Add the possibility to send the Virtual Hub Name to an external DHCP server
Added armv5tel for debian/rules and made pushed routes work correct with OpenVPN
fix LogFileGet won't save to SAVEPATH
Fix for Debian Package
Try to autodetect OS and CPU instead of requiring user input
Support For Radius Realm
(In Japanese: http://ja.softether.org/5-download/history) SoftEther VPN 4.21 Build 9613 Beta (April 24, 2016)
Added SoftEther VPN Server Manager for Mac OS X.
Now you can manage your SoftEther VPN Server, running remotely, from your Mac in local.
Enjoy it! SoftEther VPN 4.20 Build 9608 RTM (April 18, 2016)
All cumulative updates below are included.
Fixed a minor English typo.
SoftEther VPN 4.19 Build 9605 Beta (March 3, 2016)
The version of OpenSSL is updated to 1.0.2g to fix the vulnerability which was published in March 2016. SSLv2 is now disabled completely.
Fixed a multi-byte character problem in the certificate generating tool.
Enable the cache of the destination IP address of the additional TCP connection for a VPN session.
SoftEther VPN 4.19 Build 9599 Beta (October 19, 2015)
Fixed the problem that an unnecessary "Insert disk" dialog box appears when installing VPN Server or VPN Bridge on Windows 10.
Added the "/NOHUP" parameter in the "TrafficServer" command of vpncmd.
Added the "/REDIRECTURL" parameter in some access list commands of vpncmd.
Added the virtual address check routines in kernel-mode drivers to prevent blue screen or invalid memory access. Previous versions of kernel-mode drivers did not check the virtual addresses from the user-mode. (NOTE: All kernel-mode drivers are protected by ACL to avoid privilege escalation in all previous versions. Only users with Administrator privileges were able to cause blue screen or invalid memory access by passing invalid addresses from the user-mode. Therefore this was not a security flaw.) Appreciate Meysam Firozi's contribution to report the similar problem in the Win10Pcap driver.
SoftEther VPN 4.19 Build 9582 Beta (October 6, 2015)
Dramatically improvement of the performance of the Virtual NAT function of SecureNAT in Linux. In the previous versions of SoftEther VPN, the SecureNAT performance was very slow in the specific situation that the Linux Virtual Machine (VM) is running with virtual Ethernet interfaces which are prohibited to enable the promiscuous mode (this problem has been frequently appeared on cloud servers such like Amazon EC2/AWS or Windows Azure). In such a situation, SecureNAT must use the user-mode TCP/IP stack simulation and it was very slow and had high latency. This version of SoftEther VPN Server adds the new "RAW IP Mode" in the SecureNAT function. The RAW IP Mode is enabled by default, and is effective only if the VPN Server process is running in the root privileges. In the RAW IP Mode, the SecureNAT function realizes to transmit and receive TCP, UDP and ICMP packets which headers are modified. This behavior realizes drastically improved performance than legacy user-mode SecureNAT in the previous versions. In order to avoid the misunderstanding of receiving packets which are towards to the Virtual NAT function, some packet filter rules are automatically added to the iptables chain list. You can disable the RAW IP Mode by setting the "DisableIpRawModeSecureNAT" value to "1" on the Virtual Hub Extending Options.
Improved the performance of the Kernel-mode SecureNAT.
Improved the stability of the L2TP VPN sessions on the network with heavy packet-losses.
Added the compatibility with Cisco 800 series routers (e.g. Cisco 841M) on the L2TPv3 over IPsec protocol. These new Cisco routers have modified L2TPv3 header interpreter. Therefore SoftEther VPN Server needed to add new codes to support these new Cisco routers.
Added the support the compatibility to YAMAHA RTX series routers on the L2TPv3 over IPsec protocol.
Added the support for EAP and PEAP. SoftEther VPN Server can now speak RFC3579 (EAP) or Protected EAP (PEAP) to request user authentications to the RADIUS server with the MS-CHAPv2 mechanism. If this function is enabled, all requests from L2TP VPN clients which contain MS-CHAPv2 authentication data will be converted automatically to EAP or PEAP when it is transferred to the RADIUS server. You must enable this function manually for each of Virtual Hubs. To enable the function converting from MS-CHAPv2 to EAP, set the "RadiusConvertAllMsChapv2AuthRequestToEap" value to "true" in the vpn_server.config. To enable the functin converting from MS-CHAPv2 to PEAP, set both "RadiusConvertAllMsChapv2AuthRequestToEap" and "RadiusUsePeapInsteadOfEap" options to "true".
SoftEther VPN 4.19 Build 9578 Beta (September 15, 2015)
Solved the problem that kernel mode drivers do not pass the general tests of "Driver Verifier Manager" in Windows 10.
SoftEther VPN 4.18 Build 9570 RTM (July 26, 2015)
Compabible with Windows 10.
Solved the problem that the customized language setting on the "lang.config" file.
config sometimes corrupts in the rare condition.
SoftEther VPN 4.17 Build 9566 Beta (July 16, 2015)
Improved stability with Windows 10 Beta.
Updated the OpenSSL library to 1.0.2d.
SoftEther VPN 4.17 Build 9562 Beta (May 30, 2015)
Added supports for Windows 10 Technical Preview Build 10130.
Increased the maximum Ethernet frame size from 1560 bytes to 1600 bytes.
Fixed the compiler error while building the source code of SoftEther VPN on Windows.
Added memory tags on the memory allocation function calls in kernel-mode device drivers.
Fixed the freeze problem of the VPN Client that the computer enters to suspend or hibernation state while the VPN Client is connected to the VPN Server.
Windows-version executable and driver files are now signed by the SHA-256 digital code-sign certificate.
SoftEther VPN 4.15 Build 9546 Beta (April 5, 2015)
Fixed the problem that the Local Bridge function does not work correctly on Windows 10 Technical Preview Build 10049.
SoftEther VPN 4.15 Build 9539 Beta (April 4, 2015)
Add the code to instruct the VPN Client to disconnect the VPN session automatically when Windows is being suspending or hibernating.
SoftEther VPN 4.15 Build 9538 Beta (March 27, 2015)
Fixed the dialog-box size problem on Windows 10 Technical Preview Build 10041.
SoftEther VPN 4.15 Build 9537 Beta (March 26, 2015)
Upgraded built-in OpenSSL from 0.9.8za to 1.0.2a. Please note that this change has not been well-tested. This upgrading of OpenSSL might cause problems. In that case, please post the bug report.
SoftEther VPN 4.14 Build 9529 Beta (February 2, 2015)
We are very sorry. The previous version 4.13 (beta) has a problem to accept L2TP connections due to the session-state quota-limitation code by the minor change between Build 9514 and 9524. The problem is fixed on this build. Please update to this build if you are facing to the L2TP problem on version 4.13.
Added the function to record underlying source IP addresses of VPN clients on every packet log lines. This function can be disabled by set the "NoPhysicalIPOnPacketLog" flag in the Virtual Hub Extended Option to "1".
SoftEther VPN 4.13 Build 9524 Beta (January 31, 2015)
Modified the behavior of the Local Bridge function in the VPN Server on Linux. In the previous versions, if several Local Bridge creation operations will be made, then the operations to disable the offloading function on the target Ethernet devices will be conducted as many as same. After this version, the operation to disable the offloading function will be called only once for each device if several Local Bridge creation operations will be made on the same Ethernet device.
Added the "SecureNAT_RandomizeAssignIp" Virtual Hub Extended Option. If you set this option to non-zero value, then the Virtual DHCP Server of the SecureNAT function will choose an unused IP address randomly from the DHCP pool while the default behavior is to choose the first unused IP address.
Added the "DetectDormantSessionInterval" Virtual Hub Extended Option. If you set this option to non-zero value, then the Virtual Hub will treat the VPN sessions, which have transmitted no packets for the last specified intervals (in seconds), as Dormant Sessions. The Virtual Hub will not flood packets, which should be flood, to any Dormant Sessions.
Added the implementation of the SHA () function in the source code. This made the building process easier on the low-memory embedded hardware which has its OpenSSL implementation without the SHA () function.
Improved the behavior on Windows 10 Technical Preview to show the OS version information correctly.
SoftEther VPN 4.12 Build 9514 Beta (November 17, 2014)
Added the VLAN ID dynamic assignment function by RADIUS. It is very useful when the layer-2 Ethernet segment with aggregated IEEE802.1Q tagged VLANs is bridged to your Virtual Hub. Each VPN session will be assigned its own VLAN ID by the RADIUS attribute value when the user is authenticated by the external RADIUS server unless the user object has a VLAN ID security policy. The RADIUS attribute with the name "Tunnel-Pvt-Group-ID" (ID = 81) will be used as the VLAN ID. The data type must be STRING. This function is disabled by default. You have to set the "AssignVLanIdByRadiusAttribute" value to "1" in the Virtual Hub Extended Options in advance.
Added the OpenVPNDefaultClientOption option in the vpn_server.config. The specified option string will be used alternatively when the connecting OpenVPN Client does not provide the connection string. Some incomplete OpenVPN Clients with the --enable-small compiling option always forget to specify this connection string. This option can make VPN Server allow such OpenVPN Clients.
Improved the DHCP option parser to allow the external DHCP server pushes the classless routing table which exceeds 255 bytes.
Added the support for "hair-pin connection" on the NAT Traversal function.
Fixed the performance problem when the server computer has the wrong resolv.conf setting file on Linux.
Fixed the VPN Client configuration backup folder name which the setup wizard automatically creates.
Fixed the UDP checksum value of the beacon packets which are sent by the Virtual Layer 3 Switch function.
SoftEther VPN 4.11 Build 9506 Beta (October 22, 2014)
As a response to the SSLv3 POODLE problem we added the "AcceptOnlyTls" configuration flag on the vpn_server.config for SoftEther VPN Server. Please set this flag is you want to completely disable the SSLv3 function in SoftEther VPN Server.
Added the perfect forward security (PFS) support on SSL/TLS. SoftEther VPN Server can now accept connections with DHE-RSA-AES128-SHA or DHE-RSA-AES256-SHA ciphers.
SoftEther VPN 4.10 Build 9505 Beta (October 3, 2014)
Implemented the hash table algorithm for the MAC address database of Virtual Hubs. It improves the performance when there are a large number of MAC addresses registered on the database.
Improved the performance on slow-CPU hardware (e.g. embedded Linux boxes).
Added the DoNotDisableOffloading flag on Local Bridge settings. This flag will disable the automated disabling operation for hardware offloading on the specified Ethernet interface on Linux.
Supports the kernel-supported IEEE802.1Q tagged VLAN on Windows and Linux. It will enable tagged-VLAN support on the Local Bridge function with some specific network interface drivers.
Added the FloodingSendQueueBufferQuota option.
Sets the lower priority value on the oom_adj process parameter for Linux.
Randomized the reconnection interval in Cascade Connection.
Increased the memory usage limit on 64-bit systems.
Modified the behavior of the ConfigGet command and the /CSV option in vpncmd for Windows to work around for the Windows console API bug.
Added the DisableSessionReconnect option on VPN Server and VPN Bridge. It makes Cascade Connection client sessions to disconnect immediately from the destination VPN Server when the based TCP connection is disconnected.
Makes it enable to use the PrivacyFilterMode security policy on Cascade server VPN sessions.
Added the GlobalParams configuration option on VPN Server and VPN Bridge. It allows administrators to modify and optimize the performance parameters of VPN Server and VPN Bridge.
Reduced the processor time of looking up the ACL entries when storing and forwarding packets across a Virtual Hub.
Reduced the usage of the memory on embedded Linux environments.
Fixed a minor bug on the GUI setting screen of the SecureNAT routing table pushing option.
Added the ServerLogSwitchType and the LoggerMaxLogSize option on VPN Server and VPN Bridge. They can change the logging behavior of VPN Server and VPN Bridge.
Implemented the config template file. The template filename is "vpn_server_template.config" for VPN Server, and "vpn_server_template.config" for VPN Bridge. The VPN Server and VPN Bridge loads the template file as the initial configuration state when the configuration file does not exists.
SoftEther VPN 4.10 Build 9473 Beta (July 12, 2014)
Added the "SuppressClientUpdateNotification" option in the Virtual Hub Extended Option list. This option will push the flag to the VPN Client to suppress the update notification screen on the VPN Client manager. To push this flag, set "1" to the "SuppressClientUpdateNotification" option in your Virtual Hub.
Added the warning message when the background service process is run by a non-root user (only in UNIX).
Fixed the deadlock bug when UNIX versions of SoftEther VPN Server process is shutting down.
Added supports for third-party PKCS#11 DLLs: ePass 1000 ND / ePass 2000 / ePass 2003 / ePass 3000.
Fixed typo.
The expression of the disclaimer statement for exporting / importing has been modified.
Fixed the VPN Azure connection problem on Version 4.09 Build 9451 Beta.
Fixed the problem that VPN Server Manager and VPN Client Manager sometimes become slow when the update check server is unreachable from the computer.
Removed space characters in every URLs of all download files on the SoftEther VPN Download Center web site to avoid the downloading problem in some HTTP clients.
A github patch which was posted by a contributor has been applied: "update debian packaging, install init script".
SoftEther VPN 4.09 Build 9451 Beta (June 9, 2014)
Improves User-mode SecureNAT performance by modifying the processing of TCP_FIN packets. It should improve the performance of the FTP protocol.
SoftEther VPN 4.08 Build 9449 (June 8, 2014)
Add a new command to generate a RSA 2048 bit certificate.
The vpncmd command-line utility has MakeCert command to generate a 1024 bit self-signed RSA certificate. However, in recent years it is recommended to use 2048 bit RSA certificates. Therefore, on this version a new command MakeCert2048 has been added. Use this command to generate a 2048 bit self-signed RSA certificate.
Workaround for the NAT traversal problem.
Adjusted the priority between TCP/IP Direct Connection and UDP-based NAT-Traversal. On this version (Ver 4.08), NAT-Traversal will always be used if the client program detects that the specified TCP destination port on the destination server is occupied by non-SoftEther VPN Server. Anyone who faces to the connection problem on the VPN Server which is behind the NAT-box should install this update.
In the previous version (Ver 4.07), when the VPN Client attempts to connect to the VPN Server, the client firstly establish the connection via the TCP/IP direct protocol. If the TCP connection establishes successfully (in the layer-3) but the TCP port returns non-VPN protocol data (in the layer-7), the protocol error occurs immediately even if the NAT-Traversal connection attempt is still pending. This phenomenon often occurs when the VPN Server is behind the NAT-box, and the NAT-box has a listening TCP-443 port by itself. In that condition, the VPN Client attempts to connect to that TCP-443 port firstly, and the protocol error occurs immediately NAT-box returns non-VPN protocol (e.g. HTML-based administration page).
In order to work around that, this version (Ver 4.08) of VPN Client changed the behavior. On this version, if the VPN Client detects that the destination TCP Port is occupied by a non-VPN program, then the client will always use NAT-Traversal socket. This minor change will fix the connection problem to VPN servers behind the NATs.
Note: The built-in NAT-Traversal function on SoftEther VPN is for temporary use only. It is not recommended to keep using UDP-based NAT-Traversal connection to beyond the NAT-box when the VPN Server is behind the NAT-box, for long-term use. It is reported that some cheap NAT-boxes disconnect UDP session in regular period (a few minutes) after NAT-Traversal connection has been made. The strongly recommended method to run VPN Server behind the NAT is to make a TCP port mapping on the NAT-box to transfer incoming VPN connection packets (e.g. TCP port 443) to the private IP address of the VPN Server.
SoftEther VPN 4.07 Build 9448 (June 6, 2014)
We updated the internal OpenSSL to 0.9.8za.
This fixes the latest OpenSSL vulnerability which has unfold on June 05.
This vulnerability does not affect on SoftEther VPN. However, we updated the SoftEther VPN build with OpenSSL 0.9.8za. The new build also includes additional improvements.
More details about this OpenVPN vulnerability is described at http://www.openssl.org/news/secadv_20140605.txt.
Other updates on this build are as followings:
The problem with OpenVPN Connect for Android 1.1.14 has been fixed. In the previous versions, OpenVPN Connect for Android 1.1.14 reports "PolarSSL Error" when it connects to the SoftEther VPN Server, if the server SSL certificate is self-signed root certificate. This X.509 certificate parsing problem is OpenVPN Connect's bug, however we performed work around for this OpenVPN Connect's bug. Please mind that you need to regenerate your self-signed root certificate in order to comply with OpenVPN Connect at once after upgrading the VPN Server to this version. To regenerate the certificate, use the GUI tool on VPN Server Manager, or execute the "ServerCertRegenerate" command on vpncmd.
The automated root certificate and intermediate certificates downloading function has been implemented. It is very helpful when you use a commercial certificate which has been issued by a commercial CA (Certificate Authority), including VeriSign, GlobalSign or RapidSSL. In previous versions, you had to install the root certificate and intermediate certificates manually into the "chain_certs" directory. On this version, you do not need any longer to do such a manual installation of chained certs.
The OpenVPN configuration file generating function identifies the root certificate correctly, in order to embed it as the "<ca>" inline directive in the auto-generated OpenVPN configuration file. It is very helpful if you are using a commercial certificate which has been issued by a commercial CA (Certificate Authority), including VeriSign, GlobalSign or RapidSSL. (In previous versions, you had to perform the editing task for the OpenVPN configuration file manually.)
UI typos have been fixed, and some minor bugs have been fixed.
SoftEther VPN 4.06 Build 9435 (Beta) (March 26, 2014)
Previous versions of VPN Client have a port-confliction problem of the TCP port (TCP 9930) for RPC (Remote Procedure Call) on the VPN Client service for Windows, if the same port is occupied by another service. This version has solved the confliction problem.
SoftEther VPN 4.06 Build 9433 (Beta) (March 21, 2014)
Fixed a crashing bug on NAT-Traversal connections.
We sincerely apologize that the SoftEther VPN Server of the last build (Build 9432) has a serious crashing bug if a VPN client connects to the VPN Server in the NAT Traversal mode, in UNIX system. This serious bug was caused by the problem of the processing of Unicode string (which is used by a warning message for NAT Traversal connections). We fixed the serious bug by this Build 9433. If you are using SoftEther VPN Server Build 9430 or 9432 in UNIX, please update it to Build 9433 as soon as possible.
SoftEther VPN 4.06 Build 9432 (Beta) (March 20, 2014)
We apologize that the previous build (Build 9430) has a problem that the RSA certificate authentication doesn't work.
This build has been fixed the problem. Please use Build 9432 if you are intending to use the RSA certificate authentication function.
SoftEther VPN 4.06 Build 9430 (Beta) (March 20, 2014)
Thank you for waiting!
Added the following five advanced functions into SoftEther VPN Server (experimental) :
- RADIUS / NT Domain user authentication function
- RSA certificate user authentication function
- Deep-inspect packet logging function
- Source IP address control list function
- syslog transfer function
Added the split-tunneling function (experimental) :
- Split tunneling is the function for enterprises to allow users communicate only to the specified IPv4 subnets through a VPN tunnel.
- You can set up either SecureNAT Virtual DHCP Server or any external DHCP server to push static routing tables to all VPN clients.
- The Virtual DHCP Server function in SecureNAT now supports classless static routing table pushing option (RFC 3442).
- All types of VPN clients (SoftEther VPN Client, OpenVPN Client, L2TP/IPsec client and MS-SSTP client) can receive the static routing table pushed.
Added the function which allows the VPN server administrator to obtain the DDNS private key on the DDNS setup dialog-box.
Improved the behavior of the Privacy Filter Mode security policy. In the previous versions, a VPN session which is enabled the Privacy Filter Mode option cannot transmit any packets toward other Privacy Filter Mode enabled VPN sessions, except broadcast packets and ARP packets. On or after this version, both broadcast packets and ARP packets will also be blocked by the Privacy Filter Mode policy to eliminate the broadcast traffics. For the backward compatibility, this behavior can be changed by the "DropBroadcastsInPrivacyFilterMode" and "DropArpInPrivacyFilterMode" bool options on the Virtual Hub Extended Options.
Added the generating function of X.509 v3 certificates with the SHA-2 (SHA-256) hashing algorithm to improve the security.
According to the users reports, on very minor Linux environment, the "vpnserver stop" shutdown operation sometimes hangs up. The SoftEther VPN Project hasn't reproduce the issue yet. However, we added the fail-safe code to run "killall -KILL vpnserver" after the process shutdown operation times out (90 seconds).
Added the option to disable the NAT Traversal tunneling function on the connection settings screen in VPN Client and Cascade Connection.
Added Several Fixes for OS X.
Added Improved Simplified Chinese UI resources.
Added Workaround for when vpnserver hangs on stop on minor Linux environments.
On VPN Servers in People's Republic of China, the above five functions are currently disabled by default, under the orders from Beijing. Although Chinese users can enable these functions manually, Enterprise users in People's Republic of China are recommended to use these enterprise functions with PacketiX VPN Server 4.0 Chinese Edition.
SoftEther VPN 4.05 Build 9423 (Beta) (February 18, 2014)
Added Files for building CentOS/RHEL RPM.
Set the "VPN over DNS" and "VPN over ICMP" functions disabled by default on VPN Server / VPN Bridge.
SoftEther VPN 4.05 Build 9422 (Beta) (February 17, 2014)
Added the supporting of /hostname and /password command-line arguments on VPN Client.
Added the NSDI 6.x Lightweight Helper Kernel-mode Module for the local-bridge function. This kernel-mode driver runs only on Windows 8.1 / Windows Server 2012 R2 or later.
SoftEther VPN 4.05 Build 9416 (Beta) (February 6, 2014)
Added the support for OpenBSD on the source code.
Added the debian packaging on the source code.
Added the adminip.txt CIDR support.
Added the supporting VLAN for Mac OS X using TunTapOSX.
Added the .zip package with vpnsmgr.exe and vpncmd.exe for system administrators.
SoftEther VPN 4.04 Build 9412 (January 15, 2014)
Whole English UI texts are checked and corrected by a native speaker of English. Fixed typos.
SoftEther VPN 4.03 Build 9411 (January 7, 2014)
Modified the source-code tree. In the build 9408, some C# build-utility source codes were missing. In this build, full set of all source codes including the BuildUtil program are appended. No functional differences between this build and the last build.
SoftEther VPN 4.03 Build 9408 (Jaunary 4, 2014)
SoftEther VPN became open source software from this build. More details on this page. Note that the major version 3.xx was skipped for internal reason of our project. So this open-sourced new version starts with major version 4.xx.
SoftEther VPN 2.00 Build 9387 (September 16, 2013)
This build realizes the compatibility with Microsoft Windows 8.1 and Windows Server 2012 R2 (RTM). This build supports Windows 8.1 and Windows Server 2012 R2 officially. This build fixes the former problem when the user upgrades from Windows 8 to Windows 8.1 by upgrade installation.
The major version number of SoftEther VPN was incremented on this build.
SoftEther VPN 1.01 Build 9379 RTM (August 18, 2013)
This security update is to strengthen the security of SoftEther VPN 1.0 (Server and Bridge).
There is a remote administration function on SoftEther VPN 1.0. The function is to allow administrators to connect to the VPN server remotely to manage the server. In older versions, a third person can login to the VPN Server in the Virtual Hub Administration Mode if the administrator has forgot to set the administrator's password on a Virtual Hub. Older versions are also safe if any strong password is set on the Virtual Hub. However we suppose that there are some administrators who have forgot to set passwords for Virtual Hubs. In order to protect such potential vulnerable servers, this security update strengthens the VPN server program to deny all empty (not set) passwords on the Virtual Hub Administration Mode. Your VPN server has been safe also in older versions if you set any passwords for Virtual Hubs. However, we strongly recommend to apply this update program to all VPN server administrators who might have potential empty passwords on Virtual Hubs.
SoftEther VPN 1.00 Build 9376, 9377 RTM (August 3, 2013)
This is a minor fix.
Improvement Stability of NAT Traversal.
Add HTTP User-Agent Indication Behavior when using VPN Gate Client.
SoftEther VPN 1.00 Build 9371 RTM (July 25, 2013)
This is the RTM version of SoftEther VPN 1.0. It is not a BETA version.
We have fixed a lot of bugs in former builds. This RTM build is a stable build for everyone.
We will continue to improve features and performances on SoftEther VPN hereafter.
SoftEther VPN 1.00 Build 9367 RC4 (July 21, 2013)
This should be the final beta release before the RTM version of SoftEther VPN 1.0.
SoftEther VPN 1.00 Build 9091 RC3 (May 19, 2013)
We released RC3 with the following improvements. RC3 should be the final release candidate before the GA (Generally Available) build.
- Fixed a crush bug which might occurred during the shutdown of vpnserver process with using L2TPv3 or EtherIP over IPsec.
- The statistics of cumulative transferred-bytes and packets-counter are appended on the list of Visual Hubs and on the list of User Objects on each Virtual Hub, on VPN Server Manager and vpncmd.
- On the list of User Objects enumeration in both VPN Server Manager and vpncmd, the expire-date of each User Object are appended on the displayed list.
- Improvements of stability of Dynamic DNS Function and NAT-Traversal Function.
SoftEther VPN 1.00 Build 9079 RC2 Fix17 (May 5, 2013)
Fixed a typo. Fixed a wrong bitmap image on the installer.
SoftEther VPN 1.00 Build 9078 RC2 Fix16 (April 28, 2013)
A security fix. The previous versions have ignored the "deny_empty_password" option in the Virtual Hub Administration Options List. This build fixed this security bug.
Fixed some minor bugs.
Improvement of the respond-time on IPv6 DNS name resolver.
SoftEther VPN 1.00 Build 9074 RC2 Fix15 (April 24, 2013)
Minor improvement around the Dynamic DNS Client function.
SoftEther VPN 1.00 Build 9071 RC2 Fix14 (April 20, 2013)
Fixed a minor timeout bug.
SoftEther VPN 1.00 Build 9070 RC2 Fix13 (April 18, 2013)
Enabled advanced security check routines for butter overflow (Win32 binaries only.)
File sizes have been increased a little, but the performance wasn't affected.
SoftEther VPN 1.00 Build 9069 RC2 Fix12 (April 17, 2013)
Fixed a minor bug on SSL packet processing.
Fixed a miror bug on TCP listener. (very rare crash)
SoftEther VPN 1.00 Build 9053 RC2 Fix11 (April 8, 2013)
Fixed a minor bug on UDP packet processing.
Added a new feature: IKE and OpenVPN (in UDP packets) Packet Logging Function.
SoftEther VPN 1.00 Build 9045 RC2 Fix10 (April 2, 2013)
Fixed a minor bug, and improved the stability.
SoftEther VPN 1.00 Build 9043 RC2 Fix9 (April 1, 2013)
Fixed a critical bug was in the HTTP packet parser.
Improvement of the stability of UDP-based communication.
Fixed a problem: SecureNAT's connectivity polling packet interval was too short.
SoftEther VPN 1.00 Build 9035 RC2 Fix8 (March 26, 2013)
Fixed a crash bug: While you are changeing the X.509 server certificate, if a new SSL-VPN connection is being made, the new connection attempt will cause the crash because lack of critical section locking. However this bug was very rare. We found it in the heavy stress test.
SoftEther VPN 1.00 Build 9033 RC2 Fix7 (March 22, 2013)
Fixed a minor bug.
SoftEther VPN 1.00 Build 9030 RC2 Fix6 (March 21, 2013)
Fixed a bug: A logged error message around the L2TP/SSTP/OpenVPN user-authentication was incorrect.
SoftEther VPN 1.00 Build 9029 RC2 Fix5 (March 17, 2013)
Fixed a minor bug and typo.
SoftEther VPN 1.00 Build 9027 RC2 Fix4 (March 12, 2013)
Fixed a minor bug.
SoftEther VPN 1.00 Build 9026 RC2 Fix3 (March 10, 2013)
Fixed a bug: the timeout to the DDNS server was too small.
SoftEther VPN 1.00 Build 9024 RC2 Fix2 (March 09, 2013)
Fixed a bug: On Windows, VPN over DNS could not be enabled.
SoftEther VPN 1.00 Build 9023 RC2 Fix1 (March 08, 2013)
Fixed a minor bug.
SoftEther VPN 1.00 Build 9022 RC2 (March 08, 2013)
The initial release.

View File

@ -1,10 +0,0 @@
ChangeLog of SoftEther VPN
--------------------------
The ChangeLog of SoftEther VPN is on our web site:
http://www.softether.org/5-download/history
(In Japanese: http://ja.softether.org/5-download/history)
Enjoy it!

View File

@ -3,9 +3,9 @@ open-source. You can redistribute them and/or modify them under the terms of
the GNU General Public License version 2 as published by the Free Software the GNU General Public License version 2 as published by the Free Software
Foundation. Foundation.
Copyright (c) 2012-2015 Daiyuu Nobori. Copyright (c) Daiyuu Nobori.
Copyright (c) 2012-2015 SoftEther Project at University of Tsukuba, Japan. Copyright (c) SoftEther Project at University of Tsukuba, Japan.
Copyright (c) 2012-2015 SoftEther Corporation. Copyright (c) SoftEther Corporation.
All Rights Reserved. All Rights Reserved.
http://www.softether.org/ http://www.softether.org/

View File

@ -1,345 +0,0 @@
SoftEther VPN Server, Client and Bridge are free software, and released as
open-source. You can redistribute them and/or modify them under the terms of
the GNU General Public License version 2 as published by the Free Software
Foundation.
Copyright (c) 2012-2015 Daiyuu Nobori.
Copyright (c) 2012-2015 SoftEther Project at University of Tsukuba, Japan.
Copyright (c) 2012-2015 SoftEther Corporation.
All Rights Reserved.
http://www.softether.org/
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 above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
Neither the name of SoftEther nor the names of its contributors may be used to
endorse or promote products derived from this software without specific prior
written permission.
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 THIS SOFTWARE IN ANOTHER COUNTRY UNLESS YOU HAVE
A CONFIRMATION THAT THIS SOFTWARE DOES NOT VIOLATE ANY CRIMINAL LAWS OR CIVIL
RIGHTS IN THAT PARTICULAR COUNTRY. USING THIS SOFTWARE IN OTHER COUNTRIES IS
COMPLETELY AT YOUR OWN RISK. THE SOFTETHER VPN PROJECT HAS DEVELOPED AND
DISTRIBUTED THIS SOFTWARE TO COMPLY ONLY WITH THE JAPANESE LAWS AND EXISTING
CIVIL RIGHTS INCLUDING PATENTS WHICH ARE SUBJECTS APPLY IN JAPAN. OTHER
COUNTRIES' LAWS OR CIVIL RIGHTS ARE NONE OF OUR CONCERNS NOR RESPONSIBILITIES.
WE HAVE NEVER INVESTIGATED ANY CRIMINAL REGULATIONS, CIVIL LAWS OR
INTELLECTUAL PROPERTY RIGHTS INCLUDING PATENTS IN ANY OF OTHER 200+ COUNTRIES
AND TERRITORIES. BY NATURE, THERE ARE 200+ REGIONS IN THE WORLD, WITH
DIFFERENT LAWS. IT IS IMPOSSIBLE TO VERIFY EVERY COUNTRIES' LAWS, REGULATIONS
AND CIVIL RIGHTS TO MAKE THE SOFTWARE COMPLY WITH ALL COUNTRIES' LAWS BY THE
PROJECT. EVEN IF YOU WILL BE SUED BY A PRIVATE ENTITY OR BE DAMAGED BY A
PUBLIC SERVANT IN YOUR COUNTRY, THE DEVELOPERS OF THIS SOFTWARE WILL NEVER BE
LIABLE TO RECOVER OR COMPENSATE SUCH DAMAGES, CRIMINAL OR CIVIL
RESPONSIBILITIES. NOTE THAT THIS LINE IS NOT LICENSE RESTRICTION BUT JUST A
STATEMENT FOR WARNING AND DISCLAIMER.
THE FOLLOWING GPLV2 CONDITIONS APPLY ON ALL SOFTETHER VPN PROGRAMS WHICH ARE
DEVELOPED BY SOFTETHER VPN PROJECT.
READ AND UNDERSTAND THE 'WARNING.TXT' FILE BEFORE USING THIS SOFTWARE.
SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE WITH
LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE.
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your freedom to
share and change it. By contrast, the GNU General Public License is intended
to guarantee your freedom to share and change free software--to make sure the
software is free for all its users. This General Public License applies to
most of the Free Software Foundation's software and to any other program whose
authors commit to using it. (Some other Free Software Foundation software is
covered by the GNU Lesser General Public License instead.) You can apply it
to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our
General Public Licenses are designed to make sure that you have the freedom to
distribute copies of free software (and charge for this service if you wish),
that you receive source code or can get it if you want it, that you can change
the software or use pieces of it in new free programs; and that you know you
can do these things.
To protect your rights, we need to make restrictions that forbid anyone to
deny you these rights or to ask you to surrender the rights. These
restrictions translate to certain responsibilities for you if you distribute
copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether gratis or
for a fee, you must give the recipients all the rights that you have. You
must make sure that they, too, receive or can get the source code. And you
must show them these terms so they know their rights.
We protect your rights with two steps: (1) copyright the software, and (2)
offer you this license which gives you legal permission to copy, distribute
and/or modify the software.
Also, for each author's protection and ours, we want to make certain that
everyone understands that there is no warranty for this free software. If the
software is modified by someone else and passed on, we want its recipients to
know that what they have is not the original, so that any problems introduced
by others will not reflect on the original authors' reputations.
Finally, any free program is threatened constantly by software patents. We
wish to avoid the danger that redistributors of a free program will
individually obtain patent licenses, in effect making the program proprietary.
To prevent this, we have made it clear that any patent must be licensed for
everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and modification
follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains a notice
placed by the copyright holder saying it may be distributed under the terms of
this General Public License. The "Program", below, refers to any such program
or work, and a "work based on the Program" means either the Program or any
derivative work under copyright law: that is to say, a work containing the
Program or a portion of it, either verbatim or with modifications and/or
translated into another language. (Hereinafter, translation is included
without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not covered
by this License; they are outside its scope. The act of running the Program
is not restricted, and the output from the Program is covered only if its
contents constitute a work based on the Program (independent of having been
made by running the Program). Whether that is true depends on what the Program
does.
1. You may copy and distribute verbatim copies of the Program's source code
as you receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice and
disclaimer of warranty; keep intact all the notices that refer to this License
and to the absence of any warranty; and give any other recipients of the
Program a copy of this License along with the Program.
You may charge a fee for the physical act of transferring a copy, and you may
at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion of it,
thus forming a work based on the Program, and copy and distribute such
modifications or work under the terms of Section 1 above, provided that you
also meet all of these conditions:
a) You must cause the modified files to carry prominent notices stating
that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in whole
or in part contains or is derived from the Program or any part thereof, to be
licensed as a whole at no charge to all third parties under the terms of this
License.
c) If the modified program normally reads commands interactively when run,
you must cause it, when started running for such interactive use in the most
ordinary way, to print or display an announcement including an appropriate
copyright notice and a notice that there is no warranty (or else, saying that
you provide a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this License.
(Exception: if the Program itself is interactive but does not normally print
such an announcement, your work based on the Program is not required to print
an announcement.)
These requirements apply to the modified work as a whole. If identifiable
sections of that work are not derived from the Program, and can be reasonably
considered independent and separate works in themselves, then this License,
and its terms, do not apply to those sections when you distribute them as
separate works. But when you distribute the same sections as part of a whole
which is a work based on the Program, the distribution of the whole must be on
the terms of this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your
rights to work written entirely by you; rather, the intent is to exercise the
right to control the distribution of derivative or collective works based on
the Program.
In addition, mere aggregation of another work not based on the Program with
the Program (or with a work based on the Program) on a volume of a storage or
distribution medium does not bring the other work under the scope of this
License.
3. You may copy and distribute the Program (or a work based on it, under
Section 2) in object code or executable form under the terms of Sections 1 and
2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable source
code, which must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three years, to
give any third party, for a charge no more than your cost of physically
performing source distribution, a complete machine-readable copy of the
corresponding source code, to be distributed under the terms of Sections 1 and
2 above on a medium customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer to
distribute corresponding source code. (This alternative is allowed only for
noncommercial distribution and only if you received the program in object code
or executable form with such an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for making
modifications to it. For an executable work, complete source code means all
the source code for all modules it contains, plus any associated interface
definition files, plus the scripts used to control compilation and
installation of the executable. However, as a special exception, the source
code distributed need not include anything that is normally distributed (in
either source or binary form) with the major components (compiler, kernel, and
so on) of the operating system on which the executable runs, unless that
component itself accompanies the executable.
If distribution of executable or object code is made by offering access to
copy from a designated place, then offering equivalent access to copy the
source code from the same place counts as distribution of the source code,
even though third parties are not compelled to copy the source along with the
object code.
4. You may not copy, modify, sublicense, or distribute the Program except as
expressly provided under this License. Any attempt otherwise to copy, modify,
sublicense or distribute the Program is void, and will automatically terminate
your rights under this License. However, parties who have received copies, or
rights, from you under this License will not have their licenses terminated so
long as such parties remain in full compliance.
5. You are not required to accept this License, since you have not signed
it. However, nothing else grants you permission to modify or distribute the
Program or its derivative works. These actions are prohibited by law if you
do not accept this License. Therefore, by modifying or distributing the
Program (or any work based on the Program), you indicate your acceptance of
this License to do so, and all its terms and conditions for copying,
distributing or modifying the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the original
licensor to copy, distribute or modify the Program subject to these terms and
conditions. You may not impose any further restrictions on the recipients'
exercise of the rights granted herein. You are not responsible for enforcing
compliance by third parties to this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or otherwise)
that contradict the conditions of this License, they do not excuse you from
the conditions of this License. If you cannot distribute so as to satisfy
simultaneously your obligations under this License and any other pertinent
obligations, then as a consequence you may not distribute the Program at all.
For example, if a patent license would not permit royalty-free redistribution
of the Program by all those who receive copies directly or indirectly through
you, then the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply and
the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or
other property right claims or to contest validity of any such claims; this
section has the sole purpose of protecting the integrity of the free software
distribution system, which is implemented by public license practices. Many
people have made generous contributions to the wide range of software
distributed through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing to
distribute software through any other system and a licensee cannot impose that
choice.
This section is intended to make thoroughly clear what is believed to be a
consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in certain
countries either by patents or by copyrighted interfaces, the original
copyright holder who places the Program under this License may add an explicit
geographical distribution limitation excluding those countries, so that
distribution is permitted only in or among countries not thus excluded. In
such case, this License incorporates the limitation as if written in the body
of this License.
9. The Free Software Foundation may publish revised and/or new versions of
the General Public License from time to time. Such new versions will be
similar in spirit to the present version, but may differ in detail to address
new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any later
version", you have the option of following the terms and conditions either of
that version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of this License,
you may choose any version ever published by the Free Software Foundation.
10. If you wish to incorporate parts of the Program into other free programs
whose distribution conditions are different, write to the author to ask for
permission. For software which is copyrighted by the Free Software
Foundation, write to the Free Software Foundation; we sometimes make
exceptions for this. Our decision will be guided by the two goals of
preserving the free status of all derivatives of our free software and of
promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO
LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR
THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
READ AND UNDERSTAND THE 'WARNING.TXT' FILE BEFORE USING THIS SOFTWARE.
SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE WITH
LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE.

61
README
View File

@ -1,16 +1,28 @@
SoftEther VPN - An Open-Source Cross-platform Multi-protocol VPN Program SoftEther VPN (Developer Edition Master Repository)
- An Open-Source Cross-platform Multi-protocol VPN Program
http://www.softether.org/ 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: This repository has experimental codes. Pull requests are welcome.
Stable Edition is available on
https://github.com/SoftEtherVPN/SoftEtherVPN_Stable
which the non-developer user can stable use.
Source code packages (.zip and .tar.gz) and binary files of Stable Edition are also available:
http://www.softether-download.com/ http://www.softether-download.com/
We accept your patches by the acceptance policy: We accept your patches by the acceptance policy:
http://www.softether.org/5-download/src/9.patch http://www.softether.org/5-download/src/9.patch
Copyright (c) 2012-2015 SoftEther Project at University of Tsukuba, Japan. Copyright (c) SoftEther Project at University of Tsukuba, Japan.
The development of SoftEther VPN was supported by the MITOH Project,
a research and development project by Japanese Government,
subsidized by Ministry of Economy, Trade and Industry of Japan,
administrated by Information Promotion Agency.
https://www.ipa.go.jp/english/humandev/
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 it under the terms of the GNU General Public License version 2
@ -28,6 +40,23 @@ by the single SoftEther VPN Server program.
More details on http://www.softether.org/. More details on http://www.softether.org/.
BOARD MEMBERS OF THIS REPOSITORY
--------------------------------
Daiyuu Nobori (Since Jan 2, 2014)
https://github.com/dnobori
Moataz Elmasry (Since Nov 6, 2017)
https://github.com/moatazelmasry2
Zulyandri Zardi (Since Nov 6, 2017)
https://github.com/zulzardi
Alex Maslakov (Since Nov 6, 2017)
https://github.com/GildedHonour
SOFTETHER VPN ADVANTAGES SOFTETHER VPN ADVANTAGES
------------------------ ------------------------
@ -123,24 +152,9 @@ on all the following open-source repositories:
- GitHub - GitHub
https://github.com/SoftEtherVPN/SoftEtherVPN/ https://github.com/SoftEtherVPN/SoftEtherVPN/
- SourceForge
https://sourceforge.net/p/softethervpn/code/ci/master/tree/
- Google Code
https://code.google.com/p/softether/source/browse/
To fetch the source code from GitHub: To fetch the source code from GitHub:
$ git clone https://github.com/SoftEtherVPN/SoftEtherVPN.git $ 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! We hope that you can reach one of the above URLs at least!
@ -218,10 +232,3 @@ SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE
WITH LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE. WITH LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE.
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/

View File

@ -1,227 +0,0 @@
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/
We accept your patches by the acceptance policy:
http://www.softether.org/5-download/src/9.patch
Copyright (c) 2012-2015 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.
- User authentication with RADIUS and NT domain controllers.
- User authentication with X.509 client certificate.
- Packet logging.
- 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).
- No memory leaks. High quality stable codes, intended for long-term runs.
We always verify that there are no memory or resource leaks before
releasing the build.
- 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
$ ./configure
$ 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/p/softethervpn/code/ci/master/tree/
- Google Code
https://code.google.com/p/softether/source/browse/
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!
SOURCE CODE CONTRIBUTION
------------------------
Your contribution to SoftEther VPN Project is much appreciated.
Please send patches to us through GitHub.
Read the SoftEther VPN Patch Acceptance Policy in advance:
http://www.softether.org/5-download/src/9.patch
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 THIS SOFTWARE IN ANOTHER COUNTRY UNLESS
YOU HAVE A CONFIRMATION THAT THIS SOFTWARE DOES NOT VIOLATE ANY
CRIMINAL LAWS OR CIVIL RIGHTS IN THAT PARTICULAR COUNTRY. USING THIS
SOFTWARE IN OTHER COUNTRIES IS COMPLETELY AT YOUR OWN RISK. THE
SOFTETHER VPN PROJECT HAS DEVELOPED AND DISTRIBUTED THIS SOFTWARE TO
COMPLY ONLY WITH THE JAPANESE LAWS AND EXISTING CIVIL RIGHTS INCLUDING
PATENTS WHICH ARE SUBJECTS APPLY IN JAPAN. OTHER COUNTRIES' LAWS OR
CIVIL RIGHTS ARE NONE OF OUR CONCERNS NOR RESPONSIBILITIES. WE HAVE
NEVER INVESTIGATED ANY CRIMINAL REGULATIONS, CIVIL LAWS OR
INTELLECTUAL PROPERTY RIGHTS INCLUDING PATENTS IN ANY OF OTHER 200+
COUNTRIES AND TERRITORIES. BY NATURE, THERE ARE 200+ REGIONS IN THE
WORLD, WITH DIFFERENT LAWS. IT IS IMPOSSIBLE TO VERIFY EVERY
COUNTRIES' LAWS, REGULATIONS AND CIVIL RIGHTS TO MAKE THE SOFTWARE
COMPLY WITH ALL COUNTRIES' LAWS BY THE PROJECT. EVEN IF YOU WILL BE
SUED BY A PRIVATE ENTITY OR BE DAMAGED BY A PUBLIC SERVANT IN YOUR
COUNTRY, THE DEVELOPERS OF THIS SOFTWARE WILL NEVER BE LIABLE TO
RECOVER OR COMPENSATE SUCH DAMAGES, CRIMINAL OR CIVIL
RESPONSIBILITIES. NOTE THAT THIS LINE IS NOT LICENSE RESTRICTION BUT
JUST A STATEMENT FOR WARNING AND DISCLAIMER.
READ AND UNDERSTAND THE 'WARNING.TXT' FILE BEFORE USING THIS SOFTWARE.
SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE
WITH LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE.
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/

View File

@ -722,65 +722,3 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Issue Date: Aug 6, 2010 Issue Date: Aug 6, 2010
-------------------
NOTES WRITTEN BY SOFTETHER CORPORATION
Note for users of non-Windows version of PacketiX VPN: The enumerated bundle
of License Agreements above are copies of original License Agreements of each
library programs which PacketiX VPN uses. PacketiX VPN is not a delivered work
from these libraries. PacketiX VPN is a separated work from the libraries, but
it may call functions of the libraries (whether or not PacketiX VPN calls such
functions are depended on the user's intention to link them or not on user's
side computer). While some libraries indicate GPL or LGPL as a condition to
re-distribute, PacketiX VPN is not license under GPL nor LGPL. Therefore, we
took special care not to make PacketiX VPN become delivered works of any GPL
or LGPL libraries. In order to achieve that, both PacketiX VPN and GPL/LGPL
libraries are distributed with isolated forms (means that any program files of
PacketiX VPN are not bound nor linked to any GPL/LGPL libraries). If a user of
PacketiX VPN wants to link GPL/LGPL libraries by their own decisions,
operations and responsibilities, he may do that on his computer. However, if a
delivered work under copyright law is created as a result of such an
operation, such a delivered work must not re-distributed to other people,
because it may violate GPL/LGPL libraries' conditions.
Note for users of Windows version of PacketiX VPN: For technical reason, the
above texts are exactly same as a file which is also contained on the
non-Windows version of PacketiX VPN. Actually, the Windows version of PacketiX
VPN has no relations to any GPL/LGPL libraries enumerated above.
SoftEther Corporation provides source codes of some GPL/LGPL/other libraries
listed above on its web server. Anyone can download, use and re-distribute
them under individual licenses which are contained on each archive file,
available from the following URL:
http://uploader.softether.co.jp/src/
-------------------
Copyright Notes and Acknowledgments for PacketiX VPN (Commercial Version):
PacketiX VPN has some contributed codes from SoftEther VPN Project
(http://www.softether.org/).
These contributed codes have been granted by contributors to be imported into
the PacketiX VPN source-tree without GPLv2 conditions.
The list of contributors for SoftEther VPN Project:
- Melvyn
https://github.com/yaurthek
- nattoheaven
https://github.com/nattoheaven
- ELIN
https://github.com/el1n
- YF
https://github.com/yfdyh000
SoftEther Corporation, the distributor of PacketiX VPN, appreciates all
contributors for SoftEther VPN Project very much.
See also: http://www.softether.org/5-download/src/9.patch

View File

@ -2,7 +2,7 @@ THE IMPORTANT NOTICES ABOUT SOFTETHER VPN
FUNCTIONS OF VPN COMMUNICATIONS EMBEDDED ON THIS SOFTWARE ARE VERY POWERFUL FUNCTIONS OF VPN COMMUNICATIONS EMBEDDED ON THIS SOFTWARE ARE VERY POWERFUL
THAN EVER. THIS STRONG VPN ABILITY WILL BRING YOU HUGE BENEFITS. HOWEVER, IF THAN EVER. THIS STRONG VPN ABILITY WILL BRING YOU HUGE BENEFITS. HOWEVER, IF
YOU MISUSE THIS SOFTWARE, IT MIGHT DAMAGES YOURSELF. IN ORDER TO AVOID SUCH YOU MISUSE THIS SOFTWARE, IT MIGHT DAMAGE YOURSELF. IN ORDER TO AVOID SUCH
RISKS, THIS DOCUMENT ACCOUNTS IMPORTANT NOTICES FOR CUSTOMERS WHO ARE WILLING RISKS, THIS DOCUMENT ACCOUNTS IMPORTANT NOTICES FOR CUSTOMERS WHO ARE WILLING
TO USE THIS SOFTWARE. THE FOLLOWING INSTRUCTIONS ARE VERY IMPORTANT. READ AND TO USE THIS SOFTWARE. THE FOLLOWING INSTRUCTIONS ARE VERY IMPORTANT. READ AND
UNDERSTAND IT CAREFULLY. ADDITIONALLY, IF YOU ARE PLANNING TO USE THE DYNAMIC UNDERSTAND IT CAREFULLY. ADDITIONALLY, IF YOU ARE PLANNING TO USE THE DYNAMIC

View File

@ -1,7 +1,7 @@
# SoftEther VPN Source Code # SoftEther VPN Source Code
# #
# Copyright (c) 2012-2015 SoftEther VPN Project at University of Tsukuba, Japan. # Copyright (c) SoftEther VPN Project at University of Tsukuba, Japan.
# Copyright (c) 2012-2015 Daiyuu Nobori. # Copyright (c) Daiyuu Nobori.
# All Rights Reserved. # All Rights Reserved.
# #
# http://www.softether.org/ # http://www.softether.org/
@ -51,7 +51,7 @@ HEADERS_MAYAQUA=src/Mayaqua/Cfg.h src/Mayaqua/cryptoki.h src/Mayaqua/Encrypt.h s
HEADERS_CEDAR=src/Cedar/Account.h src/Cedar/Admin.h src/Cedar/AzureClient.h src/Cedar/AzureServer.h src/Cedar/Bridge.h src/Cedar/BridgeUnix.h src/Cedar/BridgeWin32.h src/Cedar/Cedar.h src/Cedar/CedarPch.h src/Cedar/CedarType.h src/Cedar/Client.h src/Cedar/CM.h src/Cedar/CMInner.h src/Cedar/Command.h src/Cedar/Connection.h src/Cedar/Console.h src/Cedar/Database.h src/Cedar/DDNS.h src/Cedar/EM.h src/Cedar/EMInner.h src/Cedar/EtherLog.h src/Cedar/Hub.h src/Cedar/Interop_OpenVPN.h src/Cedar/Interop_SSTP.h src/Cedar/IPsec.h src/Cedar/IPsec_EtherIP.h src/Cedar/IPsec_IKE.h src/Cedar/IPsec_IkePacket.h src/Cedar/IPsec_IPC.h src/Cedar/IPsec_L2TP.h src/Cedar/IPsec_PPP.h src/Cedar/IPsec_Win7.h src/Cedar/IPsec_Win7Inner.h src/Cedar/Layer3.h src/Cedar/Link.h src/Cedar/Listener.h src/Cedar/Logging.h src/Cedar/Nat.h src/Cedar/NativeStack.h src/Cedar/netcfgn.h src/Cedar/netcfgx.h src/Cedar/NM.h src/Cedar/NMInner.h src/Cedar/NullLan.h src/Cedar/Protocol.h src/Cedar/Radius.h src/Cedar/Remote.h src/Cedar/Sam.h src/Cedar/SecureInfo.h src/Cedar/SecureNAT.h src/Cedar/SeLowUser.h src/Cedar/Server.h src/Cedar/Session.h src/Cedar/SM.h src/Cedar/SMInner.h src/Cedar/SW.h src/Cedar/SWInner.h src/Cedar/UdpAccel.h src/Cedar/UT.h src/Cedar/VG.h src/Cedar/Virtual.h src/Cedar/VLan.h src/Cedar/VLanUnix.h src/Cedar/VLanWin32.h src/Cedar/WaterMark.h src/Cedar/WebUI.h src/Cedar/Win32Com.h src/Cedar/winpcap/bittypes.h src/Cedar/winpcap/bucket_lookup.h src/Cedar/winpcap/count_packets.h src/Cedar/winpcap/Devioctl.h src/Cedar/winpcap/Gnuc.h src/Cedar/winpcap/ip6_misc.h src/Cedar/winpcap/memory_t.h src/Cedar/winpcap/normal_lookup.h src/Cedar/winpcap/Ntddndis.h src/Cedar/winpcap/Ntddpack.h src/Cedar/winpcap/Packet32.h src/Cedar/winpcap/pcap.h src/Cedar/winpcap/pcap-bpf.h src/Cedar/winpcap/pcap-int.h src/Cedar/winpcap/pcap-stdinc.h src/Cedar/winpcap/pthread.h src/Cedar/winpcap/remote-ext.h src/Cedar/winpcap/sched.h src/Cedar/winpcap/semaphore.h src/Cedar/winpcap/tcp_session.h src/Cedar/winpcap/time_calls.h src/Cedar/winpcap/tme.h src/Cedar/winpcap/Win32-Extensions.h src/Cedar/WinUi.h src/Cedar/Wpc.h HEADERS_CEDAR=src/Cedar/Account.h src/Cedar/Admin.h src/Cedar/AzureClient.h src/Cedar/AzureServer.h src/Cedar/Bridge.h src/Cedar/BridgeUnix.h src/Cedar/BridgeWin32.h src/Cedar/Cedar.h src/Cedar/CedarPch.h src/Cedar/CedarType.h src/Cedar/Client.h src/Cedar/CM.h src/Cedar/CMInner.h src/Cedar/Command.h src/Cedar/Connection.h src/Cedar/Console.h src/Cedar/Database.h src/Cedar/DDNS.h src/Cedar/EM.h src/Cedar/EMInner.h src/Cedar/EtherLog.h src/Cedar/Hub.h src/Cedar/Interop_OpenVPN.h src/Cedar/Interop_SSTP.h src/Cedar/IPsec.h src/Cedar/IPsec_EtherIP.h src/Cedar/IPsec_IKE.h src/Cedar/IPsec_IkePacket.h src/Cedar/IPsec_IPC.h src/Cedar/IPsec_L2TP.h src/Cedar/IPsec_PPP.h src/Cedar/IPsec_Win7.h src/Cedar/IPsec_Win7Inner.h src/Cedar/Layer3.h src/Cedar/Link.h src/Cedar/Listener.h src/Cedar/Logging.h src/Cedar/Nat.h src/Cedar/NativeStack.h src/Cedar/netcfgn.h src/Cedar/netcfgx.h src/Cedar/NM.h src/Cedar/NMInner.h src/Cedar/NullLan.h src/Cedar/Protocol.h src/Cedar/Radius.h src/Cedar/Remote.h src/Cedar/Sam.h src/Cedar/SecureInfo.h src/Cedar/SecureNAT.h src/Cedar/SeLowUser.h src/Cedar/Server.h src/Cedar/Session.h src/Cedar/SM.h src/Cedar/SMInner.h src/Cedar/SW.h src/Cedar/SWInner.h src/Cedar/UdpAccel.h src/Cedar/UT.h src/Cedar/VG.h src/Cedar/Virtual.h src/Cedar/VLan.h src/Cedar/VLanUnix.h src/Cedar/VLanWin32.h src/Cedar/WaterMark.h src/Cedar/WebUI.h src/Cedar/Win32Com.h src/Cedar/winpcap/bittypes.h src/Cedar/winpcap/bucket_lookup.h src/Cedar/winpcap/count_packets.h src/Cedar/winpcap/Devioctl.h src/Cedar/winpcap/Gnuc.h src/Cedar/winpcap/ip6_misc.h src/Cedar/winpcap/memory_t.h src/Cedar/winpcap/normal_lookup.h src/Cedar/winpcap/Ntddndis.h src/Cedar/winpcap/Ntddpack.h src/Cedar/winpcap/Packet32.h src/Cedar/winpcap/pcap.h src/Cedar/winpcap/pcap-bpf.h src/Cedar/winpcap/pcap-int.h src/Cedar/winpcap/pcap-stdinc.h src/Cedar/winpcap/pthread.h src/Cedar/winpcap/remote-ext.h src/Cedar/winpcap/sched.h src/Cedar/winpcap/semaphore.h src/Cedar/winpcap/tcp_session.h src/Cedar/winpcap/time_calls.h src/Cedar/winpcap/tme.h src/Cedar/winpcap/Win32-Extensions.h src/Cedar/WinUi.h src/Cedar/Wpc.h
OBJECTS_MAYAQUA=tmp/objs/Mayaqua/Cfg.o tmp/objs/Mayaqua/Encrypt.o tmp/objs/Mayaqua/FileIO.o tmp/objs/Mayaqua/Internat.o tmp/objs/Mayaqua/Kernel.o tmp/objs/Mayaqua/Mayaqua.o tmp/objs/Mayaqua/Memory.o tmp/objs/Mayaqua/Microsoft.o tmp/objs/Mayaqua/Network.o tmp/objs/Mayaqua/Object.o tmp/objs/Mayaqua/OS.o tmp/objs/Mayaqua/Pack.o tmp/objs/Mayaqua/Secure.o tmp/objs/Mayaqua/Str.o tmp/objs/Mayaqua/Table.o tmp/objs/Mayaqua/TcpIp.o tmp/objs/Mayaqua/Tick64.o tmp/objs/Mayaqua/Tracking.o tmp/objs/Mayaqua/Unix.o tmp/objs/Mayaqua/Win32.o OBJECTS_MAYAQUA=tmp/objs/Mayaqua/Cfg.o tmp/objs/Mayaqua/Encrypt.o tmp/objs/Mayaqua/FileIO.o tmp/objs/Mayaqua/Internat.o tmp/objs/Mayaqua/Kernel.o tmp/objs/Mayaqua/Mayaqua.o tmp/objs/Mayaqua/Memory.o tmp/objs/Mayaqua/Microsoft.o tmp/objs/Mayaqua/Network.o tmp/objs/Mayaqua/Object.o tmp/objs/Mayaqua/OS.o tmp/objs/Mayaqua/Pack.o tmp/objs/Mayaqua/Secure.o tmp/objs/Mayaqua/Str.o tmp/objs/Mayaqua/Table.o tmp/objs/Mayaqua/TcpIp.o tmp/objs/Mayaqua/Tick64.o tmp/objs/Mayaqua/Tracking.o tmp/objs/Mayaqua/Unix.o tmp/objs/Mayaqua/Win32.o
OBJECTS_CEDAR=tmp/objs/Cedar/Account.o tmp/objs/Cedar/Admin.o tmp/objs/Cedar/AzureClient.o tmp/objs/Cedar/AzureServer.o tmp/objs/Cedar/Bridge.o tmp/objs/Cedar/BridgeUnix.o tmp/objs/Cedar/BridgeWin32.o tmp/objs/Cedar/Cedar.o tmp/objs/Cedar/CedarPch.o tmp/objs/Cedar/Client.o tmp/objs/Cedar/CM.o tmp/objs/Cedar/Command.o tmp/objs/Cedar/Connection.o tmp/objs/Cedar/Console.o tmp/objs/Cedar/Database.o tmp/objs/Cedar/DDNS.o tmp/objs/Cedar/EM.o tmp/objs/Cedar/EtherLog.o tmp/objs/Cedar/Hub.o tmp/objs/Cedar/Interop_OpenVPN.o tmp/objs/Cedar/Interop_SSTP.o tmp/objs/Cedar/IPsec.o tmp/objs/Cedar/IPsec_EtherIP.o tmp/objs/Cedar/IPsec_IKE.o tmp/objs/Cedar/IPsec_IkePacket.o tmp/objs/Cedar/IPsec_IPC.o tmp/objs/Cedar/IPsec_L2TP.o tmp/objs/Cedar/IPsec_PPP.o tmp/objs/Cedar/IPsec_Win7.o tmp/objs/Cedar/Layer3.o tmp/objs/Cedar/Link.o tmp/objs/Cedar/Listener.o tmp/objs/Cedar/Logging.o tmp/objs/Cedar/Nat.o tmp/objs/Cedar/NativeStack.o tmp/objs/Cedar/NM.o tmp/objs/Cedar/NullLan.o tmp/objs/Cedar/Protocol.o tmp/objs/Cedar/Radius.o tmp/objs/Cedar/Remote.o tmp/objs/Cedar/Sam.o tmp/objs/Cedar/SecureInfo.o tmp/objs/Cedar/SecureNAT.o tmp/objs/Cedar/SeLowUser.o tmp/objs/Cedar/Server.o tmp/objs/Cedar/Session.o tmp/objs/Cedar/SM.o tmp/objs/Cedar/SW.o tmp/objs/Cedar/UdpAccel.o tmp/objs/Cedar/UT.o tmp/objs/Cedar/VG.o tmp/objs/Cedar/Virtual.o tmp/objs/Cedar/VLan.o tmp/objs/Cedar/VLanUnix.o tmp/objs/Cedar/VLanWin32.o tmp/objs/Cedar/WaterMark.o tmp/objs/Cedar/WebUI.o tmp/objs/Cedar/WinUi.o tmp/objs/Cedar/Wpc.o OBJECTS_CEDAR=tmp/objs/Cedar/Account.o tmp/objs/Cedar/Admin.o tmp/objs/Cedar/AzureClient.o tmp/objs/Cedar/AzureServer.o tmp/objs/Cedar/Bridge.o tmp/objs/Cedar/BridgeUnix.o tmp/objs/Cedar/BridgeWin32.o tmp/objs/Cedar/Cedar.o tmp/objs/Cedar/CedarPch.o tmp/objs/Cedar/Client.o tmp/objs/Cedar/CM.o tmp/objs/Cedar/Command.o tmp/objs/Cedar/Connection.o tmp/objs/Cedar/Console.o tmp/objs/Cedar/Database.o tmp/objs/Cedar/DDNS.o tmp/objs/Cedar/EM.o tmp/objs/Cedar/EtherLog.o tmp/objs/Cedar/Hub.o tmp/objs/Cedar/Interop_OpenVPN.o tmp/objs/Cedar/Interop_SSTP.o tmp/objs/Cedar/IPsec.o tmp/objs/Cedar/IPsec_EtherIP.o tmp/objs/Cedar/IPsec_IKE.o tmp/objs/Cedar/IPsec_IkePacket.o tmp/objs/Cedar/IPsec_IPC.o tmp/objs/Cedar/IPsec_L2TP.o tmp/objs/Cedar/IPsec_PPP.o tmp/objs/Cedar/IPsec_Win7.o tmp/objs/Cedar/Layer3.o tmp/objs/Cedar/Link.o tmp/objs/Cedar/Listener.o tmp/objs/Cedar/Logging.o tmp/objs/Cedar/Nat.o tmp/objs/Cedar/NativeStack.o tmp/objs/Cedar/NM.o tmp/objs/Cedar/NullLan.o tmp/objs/Cedar/Protocol.o tmp/objs/Cedar/Radius.o tmp/objs/Cedar/Remote.o tmp/objs/Cedar/Sam.o tmp/objs/Cedar/SecureInfo.o tmp/objs/Cedar/SecureNAT.o tmp/objs/Cedar/SeLowUser.o tmp/objs/Cedar/Server.o tmp/objs/Cedar/Session.o tmp/objs/Cedar/SM.o tmp/objs/Cedar/SW.o tmp/objs/Cedar/UdpAccel.o tmp/objs/Cedar/UT.o tmp/objs/Cedar/VG.o tmp/objs/Cedar/Virtual.o tmp/objs/Cedar/VLan.o tmp/objs/Cedar/VLanUnix.o tmp/objs/Cedar/VLanWin32.o tmp/objs/Cedar/WaterMark.o tmp/objs/Cedar/WebUI.o tmp/objs/Cedar/WinUi.o tmp/objs/Cedar/Wpc.o
HAMCORE_FILES=src/bin/hamcore/backup_dir_readme.txt src/bin/hamcore/empty.config src/bin/hamcore/empty_sevpnclient.config src/bin/hamcore/eula.txt src/bin/hamcore/install_src.dat src/bin/hamcore/lang.config src/bin/hamcore/languages.txt src/bin/hamcore/legal.txt src/bin/hamcore/openvpn_readme.pdf src/bin/hamcore/openvpn_readme.txt src/bin/hamcore/openvpn_sample.ovpn src/bin/hamcore/SOURCES_OF_BINARY_FILES.TXT src/bin/hamcore/strtable_cn.stb src/bin/hamcore/strtable_en.stb src/bin/hamcore/strtable_ja.stb src/bin/hamcore/vpnweb_sample_cn.htm src/bin/hamcore/vpnweb_sample_en.htm src/bin/hamcore/vpnweb_sample_ja.htm src/bin/hamcore/warning_cn.txt src/bin/hamcore/warning_en.txt src/bin/hamcore/warning_ja.txt src/bin/hamcore/webui/cryptcom.cgi src/bin/hamcore/webui/edituser.cgi src/bin/hamcore/webui/error.cgi src/bin/hamcore/webui/hub.cgi src/bin/hamcore/webui/license.cgi src/bin/hamcore/webui/listener.cgi src/bin/hamcore/webui/localbridge.cgi src/bin/hamcore/webui/login.cgi src/bin/hamcore/webui/newhub.cgi src/bin/hamcore/webui/redirect.cgi src/bin/hamcore/webui/securenat.cgi src/bin/hamcore/webui/server.cgi src/bin/hamcore/webui/session.cgi src/bin/hamcore/webui/user.cgi src/bin/hamcore/webui/webui.css HAMCORE_FILES=src/bin/hamcore/authors.txt src/bin/hamcore/backup_dir_readme.txt src/bin/hamcore/empty.config src/bin/hamcore/empty_sevpnclient.config src/bin/hamcore/eula.txt src/bin/hamcore/install_src.dat src/bin/hamcore/lang.config src/bin/hamcore/languages.txt src/bin/hamcore/legal.txt src/bin/hamcore/openvpn_readme.pdf src/bin/hamcore/openvpn_readme.txt src/bin/hamcore/openvpn_sample.ovpn src/bin/hamcore/root_certs.dat src/bin/hamcore/SOURCES_OF_BINARY_FILES.TXT src/bin/hamcore/strtable_cn.stb src/bin/hamcore/strtable_en.stb src/bin/hamcore/strtable_ja.stb src/bin/hamcore/vpnweb_sample_cn.htm src/bin/hamcore/vpnweb_sample_en.htm src/bin/hamcore/vpnweb_sample_ja.htm src/bin/hamcore/warning_cn.txt src/bin/hamcore/warning_en.txt src/bin/hamcore/warning_ja.txt src/bin/hamcore/webui/cryptcom.cgi src/bin/hamcore/webui/edituser.cgi src/bin/hamcore/webui/error.cgi src/bin/hamcore/webui/hub.cgi src/bin/hamcore/webui/license.cgi src/bin/hamcore/webui/listener.cgi src/bin/hamcore/webui/localbridge.cgi src/bin/hamcore/webui/login.cgi src/bin/hamcore/webui/newhub.cgi src/bin/hamcore/webui/redirect.cgi src/bin/hamcore/webui/securenat.cgi src/bin/hamcore/webui/server.cgi src/bin/hamcore/webui/session.cgi src/bin/hamcore/webui/user.cgi src/bin/hamcore/webui/webui.css
# Build Action # Build Action
default: build default: build

View File

@ -1,7 +1,7 @@
# SoftEther VPN Source Code # SoftEther VPN Source Code
# #
# Copyright (c) 2012-2015 SoftEther VPN Project at University of Tsukuba, Japan. # Copyright (c) SoftEther VPN Project at University of Tsukuba, Japan.
# Copyright (c) 2012-2015 Daiyuu Nobori. # Copyright (c) Daiyuu Nobori.
# All Rights Reserved. # All Rights Reserved.
# #
# http://www.softether.org/ # http://www.softether.org/
@ -51,7 +51,7 @@ HEADERS_MAYAQUA=src/Mayaqua/Cfg.h src/Mayaqua/cryptoki.h src/Mayaqua/Encrypt.h s
HEADERS_CEDAR=src/Cedar/Account.h src/Cedar/Admin.h src/Cedar/AzureClient.h src/Cedar/AzureServer.h src/Cedar/Bridge.h src/Cedar/BridgeUnix.h src/Cedar/BridgeWin32.h src/Cedar/Cedar.h src/Cedar/CedarPch.h src/Cedar/CedarType.h src/Cedar/Client.h src/Cedar/CM.h src/Cedar/CMInner.h src/Cedar/Command.h src/Cedar/Connection.h src/Cedar/Console.h src/Cedar/Database.h src/Cedar/DDNS.h src/Cedar/EM.h src/Cedar/EMInner.h src/Cedar/EtherLog.h src/Cedar/Hub.h src/Cedar/Interop_OpenVPN.h src/Cedar/Interop_SSTP.h src/Cedar/IPsec.h src/Cedar/IPsec_EtherIP.h src/Cedar/IPsec_IKE.h src/Cedar/IPsec_IkePacket.h src/Cedar/IPsec_IPC.h src/Cedar/IPsec_L2TP.h src/Cedar/IPsec_PPP.h src/Cedar/IPsec_Win7.h src/Cedar/IPsec_Win7Inner.h src/Cedar/Layer3.h src/Cedar/Link.h src/Cedar/Listener.h src/Cedar/Logging.h src/Cedar/Nat.h src/Cedar/NativeStack.h src/Cedar/netcfgn.h src/Cedar/netcfgx.h src/Cedar/NM.h src/Cedar/NMInner.h src/Cedar/NullLan.h src/Cedar/Protocol.h src/Cedar/Radius.h src/Cedar/Remote.h src/Cedar/Sam.h src/Cedar/SecureInfo.h src/Cedar/SecureNAT.h src/Cedar/SeLowUser.h src/Cedar/Server.h src/Cedar/Session.h src/Cedar/SM.h src/Cedar/SMInner.h src/Cedar/SW.h src/Cedar/SWInner.h src/Cedar/UdpAccel.h src/Cedar/UT.h src/Cedar/VG.h src/Cedar/Virtual.h src/Cedar/VLan.h src/Cedar/VLanUnix.h src/Cedar/VLanWin32.h src/Cedar/WaterMark.h src/Cedar/WebUI.h src/Cedar/Win32Com.h src/Cedar/winpcap/bittypes.h src/Cedar/winpcap/bucket_lookup.h src/Cedar/winpcap/count_packets.h src/Cedar/winpcap/Devioctl.h src/Cedar/winpcap/Gnuc.h src/Cedar/winpcap/ip6_misc.h src/Cedar/winpcap/memory_t.h src/Cedar/winpcap/normal_lookup.h src/Cedar/winpcap/Ntddndis.h src/Cedar/winpcap/Ntddpack.h src/Cedar/winpcap/Packet32.h src/Cedar/winpcap/pcap.h src/Cedar/winpcap/pcap-bpf.h src/Cedar/winpcap/pcap-int.h src/Cedar/winpcap/pcap-stdinc.h src/Cedar/winpcap/pthread.h src/Cedar/winpcap/remote-ext.h src/Cedar/winpcap/sched.h src/Cedar/winpcap/semaphore.h src/Cedar/winpcap/tcp_session.h src/Cedar/winpcap/time_calls.h src/Cedar/winpcap/tme.h src/Cedar/winpcap/Win32-Extensions.h src/Cedar/WinUi.h src/Cedar/Wpc.h HEADERS_CEDAR=src/Cedar/Account.h src/Cedar/Admin.h src/Cedar/AzureClient.h src/Cedar/AzureServer.h src/Cedar/Bridge.h src/Cedar/BridgeUnix.h src/Cedar/BridgeWin32.h src/Cedar/Cedar.h src/Cedar/CedarPch.h src/Cedar/CedarType.h src/Cedar/Client.h src/Cedar/CM.h src/Cedar/CMInner.h src/Cedar/Command.h src/Cedar/Connection.h src/Cedar/Console.h src/Cedar/Database.h src/Cedar/DDNS.h src/Cedar/EM.h src/Cedar/EMInner.h src/Cedar/EtherLog.h src/Cedar/Hub.h src/Cedar/Interop_OpenVPN.h src/Cedar/Interop_SSTP.h src/Cedar/IPsec.h src/Cedar/IPsec_EtherIP.h src/Cedar/IPsec_IKE.h src/Cedar/IPsec_IkePacket.h src/Cedar/IPsec_IPC.h src/Cedar/IPsec_L2TP.h src/Cedar/IPsec_PPP.h src/Cedar/IPsec_Win7.h src/Cedar/IPsec_Win7Inner.h src/Cedar/Layer3.h src/Cedar/Link.h src/Cedar/Listener.h src/Cedar/Logging.h src/Cedar/Nat.h src/Cedar/NativeStack.h src/Cedar/netcfgn.h src/Cedar/netcfgx.h src/Cedar/NM.h src/Cedar/NMInner.h src/Cedar/NullLan.h src/Cedar/Protocol.h src/Cedar/Radius.h src/Cedar/Remote.h src/Cedar/Sam.h src/Cedar/SecureInfo.h src/Cedar/SecureNAT.h src/Cedar/SeLowUser.h src/Cedar/Server.h src/Cedar/Session.h src/Cedar/SM.h src/Cedar/SMInner.h src/Cedar/SW.h src/Cedar/SWInner.h src/Cedar/UdpAccel.h src/Cedar/UT.h src/Cedar/VG.h src/Cedar/Virtual.h src/Cedar/VLan.h src/Cedar/VLanUnix.h src/Cedar/VLanWin32.h src/Cedar/WaterMark.h src/Cedar/WebUI.h src/Cedar/Win32Com.h src/Cedar/winpcap/bittypes.h src/Cedar/winpcap/bucket_lookup.h src/Cedar/winpcap/count_packets.h src/Cedar/winpcap/Devioctl.h src/Cedar/winpcap/Gnuc.h src/Cedar/winpcap/ip6_misc.h src/Cedar/winpcap/memory_t.h src/Cedar/winpcap/normal_lookup.h src/Cedar/winpcap/Ntddndis.h src/Cedar/winpcap/Ntddpack.h src/Cedar/winpcap/Packet32.h src/Cedar/winpcap/pcap.h src/Cedar/winpcap/pcap-bpf.h src/Cedar/winpcap/pcap-int.h src/Cedar/winpcap/pcap-stdinc.h src/Cedar/winpcap/pthread.h src/Cedar/winpcap/remote-ext.h src/Cedar/winpcap/sched.h src/Cedar/winpcap/semaphore.h src/Cedar/winpcap/tcp_session.h src/Cedar/winpcap/time_calls.h src/Cedar/winpcap/tme.h src/Cedar/winpcap/Win32-Extensions.h src/Cedar/WinUi.h src/Cedar/Wpc.h
OBJECTS_MAYAQUA=tmp/objs/Mayaqua/Cfg.o tmp/objs/Mayaqua/Encrypt.o tmp/objs/Mayaqua/FileIO.o tmp/objs/Mayaqua/Internat.o tmp/objs/Mayaqua/Kernel.o tmp/objs/Mayaqua/Mayaqua.o tmp/objs/Mayaqua/Memory.o tmp/objs/Mayaqua/Microsoft.o tmp/objs/Mayaqua/Network.o tmp/objs/Mayaqua/Object.o tmp/objs/Mayaqua/OS.o tmp/objs/Mayaqua/Pack.o tmp/objs/Mayaqua/Secure.o tmp/objs/Mayaqua/Str.o tmp/objs/Mayaqua/Table.o tmp/objs/Mayaqua/TcpIp.o tmp/objs/Mayaqua/Tick64.o tmp/objs/Mayaqua/Tracking.o tmp/objs/Mayaqua/Unix.o tmp/objs/Mayaqua/Win32.o OBJECTS_MAYAQUA=tmp/objs/Mayaqua/Cfg.o tmp/objs/Mayaqua/Encrypt.o tmp/objs/Mayaqua/FileIO.o tmp/objs/Mayaqua/Internat.o tmp/objs/Mayaqua/Kernel.o tmp/objs/Mayaqua/Mayaqua.o tmp/objs/Mayaqua/Memory.o tmp/objs/Mayaqua/Microsoft.o tmp/objs/Mayaqua/Network.o tmp/objs/Mayaqua/Object.o tmp/objs/Mayaqua/OS.o tmp/objs/Mayaqua/Pack.o tmp/objs/Mayaqua/Secure.o tmp/objs/Mayaqua/Str.o tmp/objs/Mayaqua/Table.o tmp/objs/Mayaqua/TcpIp.o tmp/objs/Mayaqua/Tick64.o tmp/objs/Mayaqua/Tracking.o tmp/objs/Mayaqua/Unix.o tmp/objs/Mayaqua/Win32.o
OBJECTS_CEDAR=tmp/objs/Cedar/Account.o tmp/objs/Cedar/Admin.o tmp/objs/Cedar/AzureClient.o tmp/objs/Cedar/AzureServer.o tmp/objs/Cedar/Bridge.o tmp/objs/Cedar/BridgeUnix.o tmp/objs/Cedar/BridgeWin32.o tmp/objs/Cedar/Cedar.o tmp/objs/Cedar/CedarPch.o tmp/objs/Cedar/Client.o tmp/objs/Cedar/CM.o tmp/objs/Cedar/Command.o tmp/objs/Cedar/Connection.o tmp/objs/Cedar/Console.o tmp/objs/Cedar/Database.o tmp/objs/Cedar/DDNS.o tmp/objs/Cedar/EM.o tmp/objs/Cedar/EtherLog.o tmp/objs/Cedar/Hub.o tmp/objs/Cedar/Interop_OpenVPN.o tmp/objs/Cedar/Interop_SSTP.o tmp/objs/Cedar/IPsec.o tmp/objs/Cedar/IPsec_EtherIP.o tmp/objs/Cedar/IPsec_IKE.o tmp/objs/Cedar/IPsec_IkePacket.o tmp/objs/Cedar/IPsec_IPC.o tmp/objs/Cedar/IPsec_L2TP.o tmp/objs/Cedar/IPsec_PPP.o tmp/objs/Cedar/IPsec_Win7.o tmp/objs/Cedar/Layer3.o tmp/objs/Cedar/Link.o tmp/objs/Cedar/Listener.o tmp/objs/Cedar/Logging.o tmp/objs/Cedar/Nat.o tmp/objs/Cedar/NativeStack.o tmp/objs/Cedar/NM.o tmp/objs/Cedar/NullLan.o tmp/objs/Cedar/Protocol.o tmp/objs/Cedar/Radius.o tmp/objs/Cedar/Remote.o tmp/objs/Cedar/Sam.o tmp/objs/Cedar/SecureInfo.o tmp/objs/Cedar/SecureNAT.o tmp/objs/Cedar/SeLowUser.o tmp/objs/Cedar/Server.o tmp/objs/Cedar/Session.o tmp/objs/Cedar/SM.o tmp/objs/Cedar/SW.o tmp/objs/Cedar/UdpAccel.o tmp/objs/Cedar/UT.o tmp/objs/Cedar/VG.o tmp/objs/Cedar/Virtual.o tmp/objs/Cedar/VLan.o tmp/objs/Cedar/VLanUnix.o tmp/objs/Cedar/VLanWin32.o tmp/objs/Cedar/WaterMark.o tmp/objs/Cedar/WebUI.o tmp/objs/Cedar/WinUi.o tmp/objs/Cedar/Wpc.o OBJECTS_CEDAR=tmp/objs/Cedar/Account.o tmp/objs/Cedar/Admin.o tmp/objs/Cedar/AzureClient.o tmp/objs/Cedar/AzureServer.o tmp/objs/Cedar/Bridge.o tmp/objs/Cedar/BridgeUnix.o tmp/objs/Cedar/BridgeWin32.o tmp/objs/Cedar/Cedar.o tmp/objs/Cedar/CedarPch.o tmp/objs/Cedar/Client.o tmp/objs/Cedar/CM.o tmp/objs/Cedar/Command.o tmp/objs/Cedar/Connection.o tmp/objs/Cedar/Console.o tmp/objs/Cedar/Database.o tmp/objs/Cedar/DDNS.o tmp/objs/Cedar/EM.o tmp/objs/Cedar/EtherLog.o tmp/objs/Cedar/Hub.o tmp/objs/Cedar/Interop_OpenVPN.o tmp/objs/Cedar/Interop_SSTP.o tmp/objs/Cedar/IPsec.o tmp/objs/Cedar/IPsec_EtherIP.o tmp/objs/Cedar/IPsec_IKE.o tmp/objs/Cedar/IPsec_IkePacket.o tmp/objs/Cedar/IPsec_IPC.o tmp/objs/Cedar/IPsec_L2TP.o tmp/objs/Cedar/IPsec_PPP.o tmp/objs/Cedar/IPsec_Win7.o tmp/objs/Cedar/Layer3.o tmp/objs/Cedar/Link.o tmp/objs/Cedar/Listener.o tmp/objs/Cedar/Logging.o tmp/objs/Cedar/Nat.o tmp/objs/Cedar/NativeStack.o tmp/objs/Cedar/NM.o tmp/objs/Cedar/NullLan.o tmp/objs/Cedar/Protocol.o tmp/objs/Cedar/Radius.o tmp/objs/Cedar/Remote.o tmp/objs/Cedar/Sam.o tmp/objs/Cedar/SecureInfo.o tmp/objs/Cedar/SecureNAT.o tmp/objs/Cedar/SeLowUser.o tmp/objs/Cedar/Server.o tmp/objs/Cedar/Session.o tmp/objs/Cedar/SM.o tmp/objs/Cedar/SW.o tmp/objs/Cedar/UdpAccel.o tmp/objs/Cedar/UT.o tmp/objs/Cedar/VG.o tmp/objs/Cedar/Virtual.o tmp/objs/Cedar/VLan.o tmp/objs/Cedar/VLanUnix.o tmp/objs/Cedar/VLanWin32.o tmp/objs/Cedar/WaterMark.o tmp/objs/Cedar/WebUI.o tmp/objs/Cedar/WinUi.o tmp/objs/Cedar/Wpc.o
HAMCORE_FILES=src/bin/hamcore/backup_dir_readme.txt src/bin/hamcore/empty.config src/bin/hamcore/empty_sevpnclient.config src/bin/hamcore/eula.txt src/bin/hamcore/install_src.dat src/bin/hamcore/lang.config src/bin/hamcore/languages.txt src/bin/hamcore/legal.txt src/bin/hamcore/openvpn_readme.pdf src/bin/hamcore/openvpn_readme.txt src/bin/hamcore/openvpn_sample.ovpn src/bin/hamcore/SOURCES_OF_BINARY_FILES.TXT src/bin/hamcore/strtable_cn.stb src/bin/hamcore/strtable_en.stb src/bin/hamcore/strtable_ja.stb src/bin/hamcore/vpnweb_sample_cn.htm src/bin/hamcore/vpnweb_sample_en.htm src/bin/hamcore/vpnweb_sample_ja.htm src/bin/hamcore/warning_cn.txt src/bin/hamcore/warning_en.txt src/bin/hamcore/warning_ja.txt src/bin/hamcore/webui/cryptcom.cgi src/bin/hamcore/webui/edituser.cgi src/bin/hamcore/webui/error.cgi src/bin/hamcore/webui/hub.cgi src/bin/hamcore/webui/license.cgi src/bin/hamcore/webui/listener.cgi src/bin/hamcore/webui/localbridge.cgi src/bin/hamcore/webui/login.cgi src/bin/hamcore/webui/newhub.cgi src/bin/hamcore/webui/redirect.cgi src/bin/hamcore/webui/securenat.cgi src/bin/hamcore/webui/server.cgi src/bin/hamcore/webui/session.cgi src/bin/hamcore/webui/user.cgi src/bin/hamcore/webui/webui.css HAMCORE_FILES=src/bin/hamcore/authors.txt src/bin/hamcore/backup_dir_readme.txt src/bin/hamcore/empty.config src/bin/hamcore/empty_sevpnclient.config src/bin/hamcore/eula.txt src/bin/hamcore/install_src.dat src/bin/hamcore/lang.config src/bin/hamcore/languages.txt src/bin/hamcore/legal.txt src/bin/hamcore/openvpn_readme.pdf src/bin/hamcore/openvpn_readme.txt src/bin/hamcore/openvpn_sample.ovpn src/bin/hamcore/root_certs.dat src/bin/hamcore/SOURCES_OF_BINARY_FILES.TXT src/bin/hamcore/strtable_cn.stb src/bin/hamcore/strtable_en.stb src/bin/hamcore/strtable_ja.stb src/bin/hamcore/vpnweb_sample_cn.htm src/bin/hamcore/vpnweb_sample_en.htm src/bin/hamcore/vpnweb_sample_ja.htm src/bin/hamcore/warning_cn.txt src/bin/hamcore/warning_en.txt src/bin/hamcore/warning_ja.txt src/bin/hamcore/webui/cryptcom.cgi src/bin/hamcore/webui/edituser.cgi src/bin/hamcore/webui/error.cgi src/bin/hamcore/webui/hub.cgi src/bin/hamcore/webui/license.cgi src/bin/hamcore/webui/listener.cgi src/bin/hamcore/webui/localbridge.cgi src/bin/hamcore/webui/login.cgi src/bin/hamcore/webui/newhub.cgi src/bin/hamcore/webui/redirect.cgi src/bin/hamcore/webui/securenat.cgi src/bin/hamcore/webui/server.cgi src/bin/hamcore/webui/session.cgi src/bin/hamcore/webui/user.cgi src/bin/hamcore/webui/webui.css
# Build Action # Build Action
default: build default: build

View File

@ -1,16 +1,18 @@
%define majorversion 4.04 %define majorversion 4
%define minorversion 9412 %define minorversion 19
%define dateversion 2014.01.15 %define buildversion 9582
%define dateversion 2015.10.06
%define buildrelease beta
Name: softethervpn Name: softethervpn
Version: %{majorversion}.%{minorversion} Version: %{majorversion}.%{minorversion}.%{buildversion}
Release: 2%{?dist} Release: 1%{?dist}
Summary: An Open-Source Free Cross-platform Multi-protocol VPN Program Summary: An Open-Source Free Cross-platform Multi-protocol VPN Program
Group: Applications/Internet Group: Applications/Internet
License: GPLv2 License: GPLv2
URL: http://www.softether.org/ URL: http://www.softether.org/
Source0: http://www.softether-download.com/files/softether/v%{majorversion}-%{minorversion}-rtm-%{dateversion}-tree/Source%20Code/softether-src-v%{majorversion}-%{minorversion}-rtm.tar.gz Source0: http://www.softether-download.com/files/softether/v%{majorversion}.%{minorversion}-%{buildversion}-%{buildrelease}-%{dateversion}-tree/Source_Code/softether-src-v%{majorversion}.%{minorversion}-%{buildversion}-%{buildrelease}.tar.gz
BuildRequires: ncurses-devel BuildRequires: ncurses-devel
BuildRequires: openssl-devel BuildRequires: openssl-devel
@ -25,7 +27,7 @@ Requires(preun): initscripts
SoftEther VPN is one of the world's most powerful and easy-to-use multi-protocol VPN software. It runs on Windows, Linux, Mac, FreeBSD, and Solaris. SoftEther VPN is one of the world's most powerful and easy-to-use multi-protocol VPN software. It runs on Windows, Linux, Mac, FreeBSD, and Solaris.
%prep %prep
%setup -q -n v%{majorversion}-%{minorversion} %setup -q -n v%{majorversion}.%{minorversion}-%{buildversion}
%build %build
%ifarch i386 i686 %ifarch i386 i686
@ -85,6 +87,12 @@ if [ $1 -eq 0 ]; then
fi fi
%changelog %changelog
* Wed Sep 30 2015 Jeff Tang <mrjefftang@gmail.com> - 4.19.9582-1
- Update upstream to 4.19.9582-beta
* Wed Sep 30 2015 Jeff Tang <mrjefftang@gmail.com> - 4.19.9577-1
- Update upstream to 4.19.9577
* Wed Jan 29 2014 Dexter Ang <thepoch@gmail.com> - 4.04.9412-2 * Wed Jan 29 2014 Dexter Ang <thepoch@gmail.com> - 4.04.9412-2
- Made initscript more Fedora/RH-like. - Made initscript more Fedora/RH-like.
- initscript currently using killall. Need to fix this. - initscript currently using killall. Need to fix this.
@ -92,4 +100,3 @@ fi
* Tue Jan 21 2014 Dexter Ang <thepoch@gmail.com> * Tue Jan 21 2014 Dexter Ang <thepoch@gmail.com>
- Initial release - Initial release

119
configure vendored
View File

@ -16,68 +16,97 @@ echo
echo 'Welcome to the corner-cutting configure script !' echo 'Welcome to the corner-cutting configure script !'
echo echo
echo 'Select your operating system below:'
echo ' 1: Linux'
echo ' 2: FreeBSD'
echo ' 3: Solaris'
echo ' 4: Mac OS X'
echo ' 5: OpenBSD'
echo
echo -n 'Which is your operating system (1 - 5) ? : '
read TMP
echo
OS="" OS=""
if test "$TMP" = "1" case "`uname -s`" in
then Linux)
OS="linux" OS="linux"
fi ;;
if test "$TMP" = "2" FreeBSD)
then
OS="freebsd" OS="freebsd"
fi ;;
if test "$TMP" = "3" SunOS)
then
OS="solaris" OS="solaris"
fi ;;
if test "$TMP" = "4" Darwin)
then
OS="macos" OS="macos"
fi ;;
if test "$TMP" = "5" OpenBSD)
then
OS="openbsd" OS="openbsd"
fi ;;
*)
echo 'Select your operating system below:'
echo ' 1: Linux'
echo ' 2: FreeBSD'
echo ' 3: Solaris'
echo ' 4: Mac OS X'
echo ' 5: OpenBSD'
echo
echo -n 'Which is your operating system (1 - 5) ? : '
read TMP
echo
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 "$TMP" = "5"
then
OS="openbsd"
fi
if test "$OS" = "" if test "$OS" = ""
then then
echo "Wrong number." echo "Wrong number."
exit 1 exit 1
fi fi
;;
esac
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="" CPU=""
if test "$TMP" = "1" case "`uname -m`" in
then x86_64|amd64|aarch64|arm64|armv8*|mips64|ppc64|sparc64|alpha|ia64)
CPU=64bit
;;
i?86|x86pc|i86pc|armv4*|armv5*|armv6*|armv7*)
CPU=32bit
;;
*)
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
if test "$TMP" = "1"
then
CPU="32bit" CPU="32bit"
fi fi
if test "$TMP" = "2" if test "$TMP" = "2"
then then
CPU="64bit" CPU="64bit"
fi fi
if test "$CPU" = "" if test "$CPU" = ""
then then
echo "Wrong number." echo "Wrong number."
exit 1 exit 1
fi fi
;;
esac
cp src/makefiles/${OS}_${CPU}.mak Makefile cp src/makefiles/${OS}_${CPU}.mak Makefile
echo "The Makefile is generated. Run 'make' to build SoftEther VPN." echo "The Makefile is generated. Run 'make' to build SoftEther VPN."

9
debian/rules vendored
View File

@ -18,7 +18,10 @@ override_dh_auto_install:
make install make install
configure_config: configure_config:
if [ $(shell uname -m) = 'x86_64' ]; then echo "1\n2\n" | ./configure; fi if [ $(shell uname -m) = 'x86_64' ]; then echo -e "1\n2\n" | ./configure; fi
if [ $(shell uname -m) = 'i686' ]; then echo "1\n1\n" | ./configure; fi if [ $(shell uname -m) = 'i686' ]; then echo -e "1\n1\n" | ./configure; fi
if [ $(shell uname -m) = 'armv6l' ]; then echo "1\n1\n" | ./configure; fi if [ $(shell uname -m) = 'armv6l' ]; then echo -e "1\n1\n" | ./configure; fi
if [ $(shell uname -m) = 'armv5tel' ]; then echo -e "1\n1\n" | ./configure; fi
if [ $(shell uname -m) = 'aarch64' ]; then echo -e "1\n2\n" | ./configure; fi
if [ $(shell uname -m) = 'armv7l' ]; then echo -e "1\n1\n" | ./configure; fi

View File

@ -1,4 +1,18 @@
#! /bin/sh #! /bin/sh
### BEGIN INIT INFO
# Provides: softether-vpnserver
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog
# Should-Start: network-manager
# Should-Stop: network-manager
# X-Start-Before: $x-display-manager gdm kdm xdm wdm ldm sdm nodm
# X-Interactive: true
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: SoftEther VPN service
### END INIT INFO
# #
# Author: Dmitry Orlov <me@mosquito.su> # Author: Dmitry Orlov <me@mosquito.su>
# From Debian skeleton (Tom deLombarde) # From Debian skeleton (Tom deLombarde)

View File

@ -9,6 +9,7 @@ You need to install the following software to build SoftEther VPN for Windows.
- Microsoft Windows XP, Vista, 7, 8 or later. - Microsoft Windows XP, Vista, 7, 8 or later.
- Microsoft Visual Studio 2008 with the latest SP (SP1 9.0.30729.4462 QFE). - Microsoft Visual Studio 2008 with the latest SP (SP1 9.0.30729.4462 QFE).
Make sure that you installed the x64 compiler and build tools.
* Note: * Note:
Visual Studio 2008 SP1 is required to build SoftEther VPN on Windows. Visual Studio 2008 SP1 is required to build SoftEther VPN on Windows.

View File

@ -12,14 +12,14 @@ BEGIN
BEGIN BEGIN
BLOCK "041104b0" BLOCK "041104b0"
BEGIN BEGIN
VALUE "CompanyName", "SoftEther VPN Project at University of Tsukuba, Japan. (Open-source Customized Build)" VALUE "CompanyName", "SoftEther VPN Project at University of Tsukuba, Japan. (Developer Edition)"
VALUE "FileDescription", "$PRODUCTNAME$ (Open-source Customized Build)" VALUE "FileDescription", "$PRODUCTNAME$ (Developer Edition)"
VALUE "FileVersion", "$VER_MAJOR$, $VER_MINOR$, 0, $VER_BUILD$" VALUE "FileVersion", "$VER_MAJOR$, $VER_MINOR$, 0, $VER_BUILD$"
VALUE "InternalName", "$INTERNALNAME$ (Open-source Customized Build)" VALUE "InternalName", "$INTERNALNAME$ (Developer Edition)"
VALUE "LegalCopyright", "Copyright (C) 2012-$YEAR$ SoftEther VPN Project. All Rights Reserved. (Open-source Customized Build)" VALUE "LegalCopyright", "Copyright (C) 2012-$YEAR$ SoftEther VPN Project. All Rights Reserved. (Developer Edition)"
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 "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 "OriginalFilename", "$FILENAME$"
VALUE "ProductName", "$PRODUCTNAME$ (Open-source Customized Build)" VALUE "ProductName", "$PRODUCTNAME$ (Developer Edition)"
VALUE "ProductVersion", "$VER_MAJOR$, $VER_MINOR$, 0, $VER_BUILD$" VALUE "ProductVersion", "$VER_MAJOR$, $VER_MINOR$, 0, $VER_BUILD$"
END END
END END

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Build Utility // Build Utility
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -926,6 +926,19 @@ namespace BuildUtil
return 0; return 0;
} }
// Driver package build
// Win32 build
[ConsoleCommandMethod(
"Builds the driver package.",
"BuildDriverPackage",
"Builds the driver package.")]
static int BuildDriverPackage(ConsoleService c, string cmdName, string str)
{
Win32BuildUtil.MakeDriverPackage();
return 0;
}
// Win32 build // Win32 build
[ConsoleCommandMethod( [ConsoleCommandMethod(
"Builds all executable files for win32 and HamCore for all OS.", "Builds all executable files for win32 and HamCore for all OS.",
@ -1159,14 +1172,16 @@ namespace BuildUtil
{ {
new ConsoleParam("[targetFileName]", ConsoleService.Prompt, "Target Filename: ", ConsoleService.EvalNotEmpty, null), new ConsoleParam("[targetFileName]", ConsoleService.Prompt, "Target Filename: ", ConsoleService.EvalNotEmpty, null),
new ConsoleParam("OUT", ConsoleService.Prompt, "Dst Filename: ", ConsoleService.EvalNotEmpty, null), new ConsoleParam("OUT", ConsoleService.Prompt, "Dst Filename: ", ConsoleService.EvalNotEmpty, null),
new ConsoleParam("PRODUCT"),
new ConsoleParam("RC"), new ConsoleParam("RC"),
}; };
ConsoleParamValueList vl = c.ParseCommandList(cmdName, str, args); ConsoleParamValueList vl = c.ParseCommandList(cmdName, str, args);
string targetFilename = vl.DefaultParam.StrValue; string targetFilename = vl.DefaultParam.StrValue;
string outFilename = vl["OUT"].StrValue; string outFilename = vl["OUT"].StrValue;
string product_name = vl["PRODUCT"].StrValue;
Win32BuildUtil.GenerateVersionInfoResource(targetFilename, outFilename, vl["RC"].StrValue); Win32BuildUtil.GenerateVersionInfoResource(targetFilename, outFilename, vl["RC"].StrValue, product_name);
return 0; return 0;
} }
@ -1307,6 +1322,8 @@ namespace BuildUtil
new ConsoleParam("DEST"), new ConsoleParam("DEST"),
new ConsoleParam("COMMENT", ConsoleService.Prompt, "Comment: ", ConsoleService.EvalNotEmpty, null), new ConsoleParam("COMMENT", ConsoleService.Prompt, "Comment: ", ConsoleService.EvalNotEmpty, null),
new ConsoleParam("KERNEL"), new ConsoleParam("KERNEL"),
new ConsoleParam("CERTID"),
new ConsoleParam("SHAMODE"),
}; };
ConsoleParamValueList vl = c.ParseCommandList(cmdName, str, args); ConsoleParamValueList vl = c.ParseCommandList(cmdName, str, args);
@ -1319,14 +1336,13 @@ namespace BuildUtil
string comment = vl["COMMENT"].StrValue; string comment = vl["COMMENT"].StrValue;
bool kernel = vl["KERNEL"].BoolValue; bool kernel = vl["KERNEL"].BoolValue;
CodeSign.SignFile(destFileName, srcFileName, comment, kernel); int certid = vl["CERTID"].IntValue;
int shamode = vl["SHAMODE"].IntValue;
CodeSign.SignFile(destFileName, srcFileName, comment, kernel, certid, shamode);
return 0; return 0;
} }
} }
} }
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Build Utility // Build Utility
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -217,7 +217,3 @@ namespace BuildUtil
} }
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Build Utility // Build Utility
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -155,7 +155,7 @@ namespace BuildUtil
static object lockObj = new object(); static object lockObj = new object();
// Digital-sign the data on the memory // Digital-sign the data on the memory
public static byte[] SignMemory(byte[] srcData, string comment, bool kernelModeDriver, int cert_id) public static byte[] SignMemory(byte[] srcData, string comment, bool kernelModeDriver, int cert_id, int sha_mode)
{ {
#if !BU_OSS #if !BU_OSS
int i; int i;
@ -176,10 +176,11 @@ namespace BuildUtil
try try
{ {
out_filename = sign.ExecSign(Path.GetFileName(in_tmp_filename), out_filename = sign.ExecSignEx(Path.GetFileName(in_tmp_filename),
kernelModeDriver, kernelModeDriver,
comment, comment,
cert_id); cert_id,
sha_mode);
break; break;
} }
catch (Exception ex) catch (Exception ex)
@ -259,15 +260,26 @@ namespace BuildUtil
{ {
int cert_id = UsingCertId; int cert_id = UsingCertId;
SignFile(destFileName, srcFileName, comment, kernelModeDriver, cert_id); SignFile(destFileName, srcFileName, comment, kernelModeDriver, cert_id, 0);
} }
public static void SignFile(string destFileName, string srcFileName, string comment, bool kernelModeDriver, int cert_id) public static void SignFile(string destFileName, string srcFileName, string comment, bool kernelModeDriver, int cert_id, int sha_mode)
{ {
#if !BU_OSS #if !BU_OSS
if (cert_id == 0)
{
cert_id = UsingCertId;
}
Con.WriteLine("Signing for '{0}'...", Path.GetFileName(destFileName)); Con.WriteLine("Signing for '{0}'...", Path.GetFileName(destFileName));
byte[] srcData = File.ReadAllBytes(srcFileName); byte[] srcData = File.ReadAllBytes(srcFileName);
byte[] destData = SignMemory(srcData, comment, kernelModeDriver, cert_id); if (srcFileName.EndsWith(".msi", StringComparison.InvariantCultureIgnoreCase))
{
sha_mode = 1;
// todo: Set 2 in future !!!
}
byte[] destData = SignMemory(srcData, comment, kernelModeDriver, cert_id, sha_mode);
try try
{ {
@ -287,7 +299,3 @@ namespace BuildUtil
} }
} }
// 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/

View File

@ -212,7 +212,3 @@ namespace CoreUtil
} }
} }
} }
// 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/

View File

@ -697,7 +697,3 @@ namespace CoreUtil
} }
} }
// 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/

View File

@ -344,7 +344,3 @@ namespace CoreUtil
} }
} }
// 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/

View File

@ -206,7 +206,3 @@ namespace CoreUtil
} }
} }
} }
// 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/

View File

@ -2204,7 +2204,3 @@ namespace CoreUtil
} }
} }
} }
// 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/

View File

@ -521,7 +521,3 @@ namespace CoreUtil
} }
} }
// 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/

View File

@ -596,7 +596,3 @@ namespace CoreUtil
} }
} }
} }
// 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/

View File

@ -1726,7 +1726,3 @@ namespace CoreUtil
} }
} }
} }
// 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/

View File

@ -257,7 +257,3 @@ namespace CoreUtil
} }
} }
} }
// 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/

View File

@ -194,7 +194,3 @@ namespace CoreUtil
} }
} }
} }
// 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/

View File

@ -963,7 +963,3 @@ public class MultiLanguageFilterStream : Stream
} }
} }
// 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/

View File

@ -226,7 +226,3 @@ namespace CoreUtil
} }
} }
} }
// 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/

View File

@ -249,7 +249,3 @@ namespace CoreUtil
} }
} }
} }
// 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/

View File

@ -330,7 +330,3 @@ namespace CoreUtil
} }
} }
// 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/

View File

@ -561,7 +561,3 @@ namespace CoreUtil
} }
} }
} }
// 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/

View File

@ -1053,7 +1053,3 @@ namespace CoreUtil
} }
// 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/

View File

@ -376,7 +376,3 @@ namespace CoreUtil
} }
} }
} }
// 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/

View File

@ -4401,7 +4401,3 @@ namespace CoreUtil
} }
} }
} }
// 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/

View File

@ -454,7 +454,3 @@ namespace CoreUtil
} }
} }
} }
// 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/

View File

@ -566,7 +566,3 @@ namespace CoreUtil
} }
} }
} }
// 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/

View File

@ -198,7 +198,3 @@ namespace CoreUtil
} }
} }
} }
// 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/

View File

@ -1058,7 +1058,3 @@ namespace CoreUtil
public string XsdFileName; public string XsdFileName;
} }
} }
// 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/

View File

@ -327,7 +327,3 @@ namespace CoreUtil
} }
} }
} }
// 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/

View File

@ -506,7 +506,3 @@ namespace CoreUtil
} }
} }
} }
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Build Utility // Build Utility
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -255,7 +255,3 @@ namespace BuildUtil
} }
} }
} }
// 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/

View File

@ -1073,7 +1073,3 @@ namespace BuildUtil.Properties {
} }
} }
} }
// 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/

View File

@ -139,7 +139,3 @@ namespace BuildUtil.Properties {
} }
} }
} }
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Build Utility // Build Utility
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -139,17 +139,7 @@ namespace BuildUtil
{ {
public static void Test() public static void Test()
{ {
Language[] langs = BuildHelper.GetLanguageList(); Win32BuildUtil.MakeDriverPackage();
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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Build Utility // Build Utility
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -690,7 +690,30 @@ namespace BuildUtil
#else #else
sr.WriteLine("\t@echo \"And please execute './vpncmd' to run the SoftEther VPN Command-Line Utility to configure {0}.\"", BuildHelper.GetSoftwareTitle(this.Software)); sr.WriteLine("\t@echo \"And please execute './vpncmd' to run the SoftEther VPN Command-Line Utility to configure {0}.\"", BuildHelper.GetSoftwareTitle(this.Software));
#endif #endif
sr.WriteLine("\t@echo");
#if !BU_SOFTETHER
sr.WriteLine("\t@echo \"Of course, you can use the VPN Server Manager GUI Application for Windows on the other Windows PC in order to configure the {0} remotely.\"", BuildHelper.GetSoftwareTitle(this.Software)); sr.WriteLine("\t@echo \"Of course, you can use the VPN Server Manager GUI Application for Windows on the other Windows PC in order to configure the {0} remotely.\"", BuildHelper.GetSoftwareTitle(this.Software));
#else
sr.WriteLine("\t@echo \"Of course, you can use the VPN Server Manager GUI Application for Windows / Mac OS X on the other Windows / Mac OS X computers in order to configure the {0} remotely.\"", BuildHelper.GetSoftwareTitle(this.Software));
#endif
#if !BU_SOFTETHER
#else
sr.WriteLine("\t@echo");
sr.WriteLine("\t@echo");
sr.WriteLine("\t@echo \"*** For Windows users ***\"");
sr.WriteLine("\t@echo \"You can download the SoftEther VPN Server Manager for Windows\"");
sr.WriteLine("\t@echo \"from the http://www.softether-download.com/ web site.\"");
sr.WriteLine("\t@echo \"This manager application helps you to completely and easily manage the VPN server services running in remote hosts.\"");
sr.WriteLine("\t@echo");
sr.WriteLine("\t@echo");
sr.WriteLine("\t@echo \"*** For Mac OS X users ***\"");
sr.WriteLine("\t@echo \"In April 2016 we released the SoftEther VPN Server Manager for Mac OS X.\"");
sr.WriteLine("\t@echo \"You can download it from the http://www.softether-download.com/ web site.\"");
sr.WriteLine("\t@echo \"VPN Server Manager for Mac OS X works perfectly as same as the traditional Windows versions. It helps you to completely and easily manage the VPN server services running in remote hosts.\"");
sr.WriteLine("\t@echo");
#endif
sr.WriteLine("\t@echo \"--------------------------------------------------------------------\""); sr.WriteLine("\t@echo \"--------------------------------------------------------------------\"");
sr.WriteLine("\t@echo"); sr.WriteLine("\t@echo");
@ -1059,7 +1082,3 @@ namespace BuildUtil
} }
} }
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Build Utility // Build Utility
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -689,7 +689,3 @@ namespace BuildUtil
} }
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Build Utility // Build Utility
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -138,7 +138,7 @@ namespace BuildUtil
// Build settings // Build settings
public static class BuildConfig public static class BuildConfig
{ {
public static readonly int NumMultipleCompileTasks = 4; public static readonly int NumMultipleCompileTasks = 1;
} }
// Software List // Software List
@ -430,7 +430,7 @@ namespace BuildUtil
{ {
// Windows // Windows
public static readonly OS Windows = new OS("windows", "Windows", public static readonly OS Windows = new OS("windows", "Windows",
"Windows 98 / 98 SE / ME / NT 4.0 SP6a / 2000 SP4 / XP SP2, SP3 / Vista SP1, SP2 / 7 SP1 / 8 / 8.1 / Server 2003 SP2 / Server 2008 SP1, SP2 / Hyper-V Server 2008 / Server 2008 R2 SP1 / Hyper-V Server 2008 R2 / Server 2012 / Hyper-V Server 2012 / Server 2012 R2 / Hyper-V Server 2012 R2", "Windows 98 / 98 SE / ME / NT 4.0 SP6a / 2000 SP4 / XP SP2, SP3 / Vista SP1, SP2 / 7 SP1 / 8 / 8.1 / 10 / Server 2003 SP2 / Server 2008 SP1, SP2 / Hyper-V Server 2008 / Server 2008 R2 SP1 / Hyper-V Server 2008 R2 / Server 2012 / Hyper-V Server 2012 / Server 2012 R2 / Hyper-V Server 2012 R2 / Server 2016",
new Cpu[] new Cpu[]
{ {
CpuList.intel, CpuList.intel,
@ -438,7 +438,7 @@ namespace BuildUtil
// Linux // Linux
public static readonly OS Linux = new OS("linux", "Linux", public static readonly OS Linux = new OS("linux", "Linux",
"Linux Kernel 2.4 / 2.6 / 3.x", "Linux Kernel 2.4 / 2.6 / 3.x / 4.x",
new Cpu[] new Cpu[]
{ {
CpuList.x86, CpuList.x86,
@ -564,7 +564,3 @@ namespace BuildUtil
} }
} }
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Build Utility // Build Utility
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -327,7 +327,3 @@ namespace BuildUtil
} }
} }
} }
// 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/

View File

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// このコードはツールによって生成されました。 // このコードはツールによって生成されました。
// ランタイム バージョン:2.0.50727.5466 // ランタイム バージョン:2.0.50727.5485
// //
// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、 // このファイルへの変更は、以下の状況下で不正な動作の原因になったり、
// コードが再生成されるときに損失したりします。 // コードが再生成されるときに損失したりします。
@ -104,7 +104,7 @@
// //
// このソース コードは Microsoft.VSDesigner、バージョン 2.0.50727.5466 によって自動生成されました。 // このソース コードは Microsoft.VSDesigner、バージョン 2.0.50727.5485 によって自動生成されました。
// //
#pragma warning disable 1591 #pragma warning disable 1591
@ -118,7 +118,7 @@ namespace BuildUtil.HvSignService {
/// <remarks/> /// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.5420")] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.5483")]
[System.Diagnostics.DebuggerStepThroughAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")] [System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="SignSoap", Namespace="http://hvsigncode/")] [System.Web.Services.WebServiceBindingAttribute(Name="SignSoap", Namespace="http://hvsigncode/")]
@ -128,6 +128,8 @@ namespace BuildUtil.HvSignService {
private System.Threading.SendOrPostCallback ExecSignOperationCompleted; private System.Threading.SendOrPostCallback ExecSignOperationCompleted;
private System.Threading.SendOrPostCallback ExecSignExOperationCompleted;
private bool useDefaultCredentialsSetExplicitly; private bool useDefaultCredentialsSetExplicitly;
/// <remarks/> /// <remarks/>
@ -172,6 +174,9 @@ namespace BuildUtil.HvSignService {
/// <remarks/> /// <remarks/>
public event ExecSignCompletedEventHandler ExecSignCompleted; public event ExecSignCompletedEventHandler ExecSignCompleted;
/// <remarks/>
public event ExecSignExCompletedEventHandler ExecSignExCompleted;
/// <remarks/> /// <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)] [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() { public string HelloWorld() {
@ -234,6 +239,43 @@ namespace BuildUtil.HvSignService {
} }
} }
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://hvsigncode/ExecSignEx", RequestNamespace="http://hvsigncode/", ResponseNamespace="http://hvsigncode/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public string ExecSignEx(string src_filename, bool driver_mode, string description, int cert_id, int sha_mode) {
object[] results = this.Invoke("ExecSignEx", new object[] {
src_filename,
driver_mode,
description,
cert_id,
sha_mode});
return ((string)(results[0]));
}
/// <remarks/>
public void ExecSignExAsync(string src_filename, bool driver_mode, string description, int cert_id, int sha_mode) {
this.ExecSignExAsync(src_filename, driver_mode, description, cert_id, sha_mode, null);
}
/// <remarks/>
public void ExecSignExAsync(string src_filename, bool driver_mode, string description, int cert_id, int sha_mode, object userState) {
if ((this.ExecSignExOperationCompleted == null)) {
this.ExecSignExOperationCompleted = new System.Threading.SendOrPostCallback(this.OnExecSignExOperationCompleted);
}
this.InvokeAsync("ExecSignEx", new object[] {
src_filename,
driver_mode,
description,
cert_id,
sha_mode}, this.ExecSignExOperationCompleted, userState);
}
private void OnExecSignExOperationCompleted(object arg) {
if ((this.ExecSignExCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.ExecSignExCompleted(this, new ExecSignExCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/> /// <remarks/>
public new void CancelAsync(object userState) { public new void CancelAsync(object userState) {
base.CancelAsync(userState); base.CancelAsync(userState);
@ -254,11 +296,11 @@ namespace BuildUtil.HvSignService {
} }
/// <remarks/> /// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.5420")] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.5483")]
public delegate void HelloWorldCompletedEventHandler(object sender, HelloWorldCompletedEventArgs e); public delegate void HelloWorldCompletedEventHandler(object sender, HelloWorldCompletedEventArgs e);
/// <remarks/> /// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.5420")] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.5483")]
[System.Diagnostics.DebuggerStepThroughAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")] [System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class HelloWorldCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { public partial class HelloWorldCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
@ -280,11 +322,11 @@ namespace BuildUtil.HvSignService {
} }
/// <remarks/> /// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.5420")] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.5483")]
public delegate void ExecSignCompletedEventHandler(object sender, ExecSignCompletedEventArgs e); public delegate void ExecSignCompletedEventHandler(object sender, ExecSignCompletedEventArgs e);
/// <remarks/> /// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.5420")] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.5483")]
[System.Diagnostics.DebuggerStepThroughAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")] [System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class ExecSignCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { public partial class ExecSignCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
@ -304,9 +346,32 @@ namespace BuildUtil.HvSignService {
} }
} }
} }
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.5483")]
public delegate void ExecSignExCompletedEventHandler(object sender, ExecSignExCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.5483")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class ExecSignExCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
private object[] results;
internal ExecSignExCompletedEventArgs(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 #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/

View File

@ -29,6 +29,24 @@
</s:sequence> </s:sequence>
</s:complexType> </s:complexType>
</s:element> </s:element>
<s:element name="ExecSignEx">
<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:element minOccurs="1" maxOccurs="1" name="sha_mode" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="ExecSignExResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="ExecSignExResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
</s:schema> </s:schema>
</wsdl:types> </wsdl:types>
<wsdl:message name="HelloWorldSoapIn"> <wsdl:message name="HelloWorldSoapIn">
@ -43,6 +61,12 @@
<wsdl:message name="ExecSignSoapOut"> <wsdl:message name="ExecSignSoapOut">
<wsdl:part name="parameters" element="tns:ExecSignResponse" /> <wsdl:part name="parameters" element="tns:ExecSignResponse" />
</wsdl:message> </wsdl:message>
<wsdl:message name="ExecSignExSoapIn">
<wsdl:part name="parameters" element="tns:ExecSignEx" />
</wsdl:message>
<wsdl:message name="ExecSignExSoapOut">
<wsdl:part name="parameters" element="tns:ExecSignExResponse" />
</wsdl:message>
<wsdl:portType name="SignSoap"> <wsdl:portType name="SignSoap">
<wsdl:operation name="HelloWorld"> <wsdl:operation name="HelloWorld">
<wsdl:input message="tns:HelloWorldSoapIn" /> <wsdl:input message="tns:HelloWorldSoapIn" />
@ -52,6 +76,10 @@
<wsdl:input message="tns:ExecSignSoapIn" /> <wsdl:input message="tns:ExecSignSoapIn" />
<wsdl:output message="tns:ExecSignSoapOut" /> <wsdl:output message="tns:ExecSignSoapOut" />
</wsdl:operation> </wsdl:operation>
<wsdl:operation name="ExecSignEx">
<wsdl:input message="tns:ExecSignExSoapIn" />
<wsdl:output message="tns:ExecSignExSoapOut" />
</wsdl:operation>
</wsdl:portType> </wsdl:portType>
<wsdl:binding name="SignSoap" type="tns:SignSoap"> <wsdl:binding name="SignSoap" type="tns:SignSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
@ -73,6 +101,15 @@
<soap:body use="literal" /> <soap:body use="literal" />
</wsdl:output> </wsdl:output>
</wsdl:operation> </wsdl:operation>
<wsdl:operation name="ExecSignEx">
<soap:operation soapAction="http://hvsigncode/ExecSignEx" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding> </wsdl:binding>
<wsdl:binding name="SignSoap12" type="tns:SignSoap"> <wsdl:binding name="SignSoap12" type="tns:SignSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" /> <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
@ -94,6 +131,15 @@
<soap12:body use="literal" /> <soap12:body use="literal" />
</wsdl:output> </wsdl:output>
</wsdl:operation> </wsdl:operation>
<wsdl:operation name="ExecSignEx">
<soap12:operation soapAction="http://hvsigncode/ExecSignEx" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding> </wsdl:binding>
<wsdl:service name="Sign"> <wsdl:service name="Sign">
<wsdl:port name="SignSoap" binding="tns:SignSoap"> <wsdl:port name="SignSoap" binding="tns:SignSoap">

View File

@ -306,6 +306,3 @@ namespace BuildUtil.SignService {
} }
#pragma warning restore 1591 #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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Build Utility // Build Utility
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -184,7 +184,3 @@ namespace BuildUtil
} }
} }
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Build Utility // Build Utility
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -181,7 +181,7 @@ namespace BuildUtil
} }
// Generate a version information resource // Generate a version information resource
public static void GenerateVersionInfoResource(string targetExeName, string outName, string rc_name) public static void GenerateVersionInfoResource(string targetExeName, string outName, string rc_name, string product_name)
{ {
int build, version; int build, version;
string name; string name;
@ -199,11 +199,18 @@ namespace BuildUtil
string exeFileName = Path.GetFileName(targetExeName); string exeFileName = Path.GetFileName(targetExeName);
string internalName = Path.GetFileNameWithoutExtension(exeFileName); string internalName = Path.GetFileNameWithoutExtension(exeFileName);
if (Str.IsEmptyStr(product_name) == false)
{
body = Str.ReplaceStr(body, "$PRODUCTNAME$", product_name);
}
else
{
#if !BU_SOFTETHER #if !BU_SOFTETHER
body = Str.ReplaceStr(body, "$PRODUCTNAME$", "PacketiX VPN"); body = Str.ReplaceStr(body, "$PRODUCTNAME$", "PacketiX VPN");
#else #else
body = Str.ReplaceStr(body, "$PRODUCTNAME$", "SoftEther VPN"); body = Str.ReplaceStr(body, "$PRODUCTNAME$", "SoftEther VPN");
#endif #endif
}
body = Str.ReplaceStr(body, "$INTERNALNAME$", internalName); body = Str.ReplaceStr(body, "$INTERNALNAME$", internalName);
body = Str.ReplaceStr(body, "$YEAR$", date.Year.ToString()); body = Str.ReplaceStr(body, "$YEAR$", date.Year.ToString());
body = Str.ReplaceStr(body, "$FILENAME$", exeFileName); body = Str.ReplaceStr(body, "$FILENAME$", exeFileName);
@ -818,6 +825,10 @@ namespace BuildUtil
{ {
return false; return false;
} }
if (Str.InStr(fileName, "DriverPackages", false))
{
return false;
}
if (Str.InStr(fileName, "_nosign", false)) if (Str.InStr(fileName, "_nosign", false))
{ {
return false; return false;
@ -908,14 +919,27 @@ namespace BuildUtil
{ {
string cdfFileName = Path.Combine(dstDir, "inf.cdf"); string cdfFileName = Path.Combine(dstDir, "inf.cdf");
string cdfFileName2 = Path.Combine(dstDir, "inf2.cdf");
string catFileName = Path.Combine(dstDir, "inf.cat"); string catFileName = Path.Combine(dstDir, "inf.cat");
string catFileName2 = Path.Combine(dstDir, "inf2.cat");
StringWriter sw = new StringWriter(); StringWriter sw = new StringWriter();
StringWriter sw2 = new StringWriter();
string txt = File.ReadAllText(inf, Str.ShiftJisEncoding); string txt = File.ReadAllText(inf, Str.ShiftJisEncoding);
IO.DeleteFilesAndSubDirsInDir(dstDir); IO.DeleteFilesAndSubDirsInDir(dstDir);
IO.MakeDirIfNotExists(dstDir); IO.MakeDirIfNotExists(dstDir);
string utility_dirname = Path.Combine(Paths.BaseDirName, @"BuildFiles\Utility");
string makecat1 = Path.Combine(dstDir, "makecat.exe");
string makecat2 = Path.Combine(dstDir, "makecat.exe.manifest");
string makecat3 = Path.Combine(dstDir, "Microsoft.Windows.Build.Signing.wintrust.dll.manifest");
string makecat4 = Path.Combine(dstDir, "wintrust.dll");
File.Copy(Path.Combine(utility_dirname, "makecat.exe"), makecat1, true);
File.Copy(Path.Combine(utility_dirname, "makecat.exe.manifest"), makecat2, true);
File.Copy(Path.Combine(utility_dirname, "Microsoft.Windows.Build.Signing.wintrust.dll.manifest"), makecat3, true);
File.Copy(Path.Combine(utility_dirname, "wintrust.dll"), makecat4, true);
string dst_sys_name = Path.Combine(dstDir, Path.GetFileName(sys)); string dst_sys_name = Path.Combine(dstDir, Path.GetFileName(sys));
File.Copy(sys, dst_sys_name, true); File.Copy(sys, dst_sys_name, true);
@ -927,14 +951,28 @@ namespace BuildUtil
} }
sw.WriteLine("[CatalogHeader]"); sw.WriteLine("[CatalogHeader]");
sw2.WriteLine("[CatalogHeader]");
sw.WriteLine("name=inf.cat"); sw.WriteLine("name=inf.cat");
sw2.WriteLine("name=inf2.cat");
sw2.WriteLine("CatalogVersion=2");
sw2.WriteLine("HashAlgorithms=SHA256");
sw2.WriteLine("PageHashes=true");
sw.WriteLine(); sw.WriteLine();
sw2.WriteLine();
sw.WriteLine("[CatalogFiles]"); sw.WriteLine("[CatalogFiles]");
sw2.WriteLine("[CatalogFiles]");
sw.WriteLine("<hash>{0}={0}", Path.GetFileName(dst_sys_name)); sw.WriteLine("<hash>{0}={0}", Path.GetFileName(dst_sys_name));
sw2.WriteLine("<hash>{0}={0}", Path.GetFileName(dst_sys_name));
if (sys6 != null) if (sys6 != null)
{ {
sw.WriteLine("<hash>{0}={0}", Path.GetFileName(dst_sys6_name)); sw.WriteLine("<hash>{0}={0}", Path.GetFileName(dst_sys6_name));
sw2.WriteLine("<hash>{0}={0}", Path.GetFileName(dst_sys6_name));
} }
int i; int i;
@ -982,6 +1020,7 @@ namespace BuildUtil
File.WriteAllText(dst_inf_name, body, Str.ShiftJisEncoding); File.WriteAllText(dst_inf_name, body, Str.ShiftJisEncoding);
sw.WriteLine("<hash>{0}={0}", Path.GetFileName(dst_inf_name)); sw.WriteLine("<hash>{0}={0}", Path.GetFileName(dst_inf_name));
sw2.WriteLine("<hash>{0}={0}", Path.GetFileName(dst_inf_name));
if (selow) if (selow)
{ {
@ -989,28 +1028,350 @@ namespace BuildUtil
} }
} }
sw.WriteLine(); sw.WriteLine();
sw2.WriteLine();
File.WriteAllText(cdfFileName, sw.ToString()); File.WriteAllText(cdfFileName, sw.ToString());
File.WriteAllText(cdfFileName2, sw2.ToString());
// generate catalog file // generate catalog file
Directory.SetCurrentDirectory(dstDir); Directory.SetCurrentDirectory(dstDir);
ExecCommand(Paths.MakeCatFilename, string.Format("\"{0}\"", cdfFileName)); ExecCommand(Paths.MakeCatFilename, string.Format("\"{0}\"", cdfFileName));
ExecCommand(makecat1, string.Format("\"{0}\"", cdfFileName2));
// sign catalog file // sign catalog file
CodeSign.SignFile(catFileName, catFileName, "Catalog File", false); CodeSign.SignFile(catFileName, catFileName, "Catalog File", false);
CodeSign.SignFile(catFileName2, catFileName2, "Catalog File", false);
// delete cdf file // delete cdf file
File.Delete(cdfFileName); File.Delete(cdfFileName);
File.Delete(cdfFileName2);
// delete sys file // delete sys file
File.Delete(dst_sys_name); File.Delete(dst_sys_name);
File.Delete(makecat1);
File.Delete(makecat2);
File.Delete(makecat3);
File.Delete(makecat4);
if (sys6 != null) if (sys6 != null)
{ {
File.Delete(dst_sys6_name); File.Delete(dst_sys6_name);
} }
} }
static string process_inf_file(string src_inf_txt, int build, int ver, DateTime date, string sys_name, string name, string catfile, bool replace_mac_address)
{
string body = src_inf_txt;
if (Str.IsEmptyStr(sys_name) == false)
{
body = Str.ReplaceStr(body, "$TAG_SYS_NAME$", sys_name);
}
if (Str.IsEmptyStr(name) == false)
{
body = Str.ReplaceStr(body, "$TAG_INSTANCE_NAME$", name);
}
if (replace_mac_address)
{
body = Str.ReplaceStr(body, "$TAG_MAC_ADDRESS$", "000001000001");
}
body = Str.ReplaceStr(body, "$YEAR$", date.Year.ToString("D4"));
body = Str.ReplaceStr(body, "$MONTH$", date.Month.ToString("D2"));
body = Str.ReplaceStr(body, "$DAY$", date.Day.ToString("D2"));
body = Str.ReplaceStr(body, "$VER_MAJOR$", (ver / 100).ToString());
body = Str.ReplaceStr(body, "$VER_MINOR$", (ver % 100).ToString());
body = Str.ReplaceStr(body, "$VER_BUILD$", build.ToString());
if (Str.IsEmptyStr(catfile) == false)
{
body = Str.ReplaceStr(body, "$CATALOG_FILENAME$", catfile);
body = Str.ReplaceStr(body, ";CatalogFile.NT", "CatalogFile.NT");
}
body += "\r\n; Auto Generated " + Str.DateTimeToStrShortWithMilliSecs(DateTime.Now) + "\r\n\r\n";
return body;
}
static void make_cat_file(string dir, string[] filename_list, string catname, bool win8, bool no_sign)
{
string utility_dirname = Path.Combine(Paths.BaseDirName, @"BuildFiles\Utility");
string makecat1 = Path.Combine(dir, "makecat.exe");
string makecat2 = Path.Combine(dir, "makecat.exe.manifest");
string makecat3 = Path.Combine(dir, "Microsoft.Windows.Build.Signing.wintrust.dll.manifest");
string makecat4 = Path.Combine(dir, "wintrust.dll");
File.Copy(Path.Combine(utility_dirname, "makecat.exe"), makecat1, true);
File.Copy(Path.Combine(utility_dirname, "makecat.exe.manifest"), makecat2, true);
File.Copy(Path.Combine(utility_dirname, "Microsoft.Windows.Build.Signing.wintrust.dll.manifest"), makecat3, true);
File.Copy(Path.Combine(utility_dirname, "wintrust.dll"), makecat4, true);
StringWriter sw2 = new StringWriter();
sw2.WriteLine("[CatalogHeader]");
sw2.WriteLine("name=" + catname);
if (win8)
{
sw2.WriteLine("CatalogVersion=2");
sw2.WriteLine("HashAlgorithms=SHA256");
sw2.WriteLine("PageHashes=true");
}
sw2.WriteLine();
sw2.WriteLine("[CatalogFiles]");
foreach (string filename in filename_list)
{
sw2.WriteLine("<hash>{0}={0}", filename);
}
sw2.WriteLine();
string cdf_file_name = catname + ".cdf";
Directory.SetCurrentDirectory(dir);
File.WriteAllText(cdf_file_name, sw2.ToString());
ExecCommand(makecat1, string.Format("\"{0}\"", cdf_file_name));
if (no_sign == false)
{
CodeSign.SignFile(catname, catname, "Catalog File", false);
}
File.Delete(cdf_file_name);
File.Delete(makecat1);
File.Delete(makecat2);
File.Delete(makecat3);
File.Delete(makecat4);
}
public static void MakeDriverPackage()
{
int build, version;
string buildname;
DateTime date;
int i;
ReadBuildInfoFromTextFile(out build, out version, out buildname, out date);
date = date.AddDays(-1);
string dst_dir = Path.Combine(Paths.BaseDirName, @"tmp\MakeDriverPackage");
string src_dir = Path.Combine(Paths.BaseDirName, @"BuiltDriverPackages");
IO.DeleteFilesAndSubDirsInDir(dst_dir);
IO.MakeDirIfNotExists(dst_dir);
// Neo9x x86
IO.MakeDir(Path.Combine(dst_dir, @"Neo9x\x86"));
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, @"Neo9x\x86\Neo9x_x86.inf"),
process_inf_file(IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, @"Neo9x\x86\Neo9x_x86.inf")), build, version, date, null, null, null, false), Str.ShiftJisEncoding, false);
IO.FileCopy(Path.Combine(src_dir, @"Neo9x\x86\Neo9x_x86.sys"), Path.Combine(dst_dir, @"Neo9x\x86\Neo9x_x86.sys"));
// Neo x86
IO.MakeDir(Path.Combine(dst_dir, @"Neo\x86"));
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, @"Neo\x86\Neo_x86.inf"),
process_inf_file(IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, @"Neo\x86\Neo_x86.inf")), build, version, date, null, null, null, false), Str.ShiftJisEncoding, false);
IO.FileCopy(Path.Combine(src_dir, @"Neo\x86\Neo_x86.sys"), Path.Combine(dst_dir, @"Neo\x86\Neo_x86.sys"));
// Neo x64
IO.MakeDir(Path.Combine(dst_dir, @"Neo\x64"));
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, @"Neo\x64\Neo_x64.inf"),
process_inf_file(IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, @"Neo\x64\Neo_x64.inf")), build, version, date, null, null, null, false), Str.ShiftJisEncoding, false);
IO.FileCopy(Path.Combine(src_dir, @"Neo\x64\Neo_x64.sys"), Path.Combine(dst_dir, @"Neo\x64\Neo_x64.sys"));
// Neo6 x86
IO.MakeDir(Path.Combine(dst_dir, @"Neo6\x86"));
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, @"Neo6\x86\Neo6_x86.inf"),
process_inf_file(IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, @"Neo6\x86\Neo6_x86.inf")), build, version, date, null, null, null, false), Str.ShiftJisEncoding, false);
IO.FileCopy(Path.Combine(src_dir, @"Neo6\x86\Neo6_x86.sys"), Path.Combine(dst_dir, @"Neo6\x86\Neo6_x86.sys"));
// Neo6 x64
IO.MakeDir(Path.Combine(dst_dir, @"Neo6\x64"));
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, @"Neo6\x64\Neo6_x64.inf"),
process_inf_file(IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, @"Neo6\x64\Neo6_x64.inf")), build, version, date, null, null, null, false), Str.ShiftJisEncoding, false);
IO.FileCopy(Path.Combine(src_dir, @"Neo6\x64\Neo6_x64.sys"), Path.Combine(dst_dir, @"Neo6\x64\Neo6_x64.sys"));
// Neo6 for Windows 8 x86
IO.MakeDir(Path.Combine(dst_dir, @"Neo6_Win8\x86"));
List<string> cat_src_filename = new List<string>();
cat_src_filename.Add("Neo6_x86.sys");
for (i = 1; i < 128; i++)
{
string name = "VPN";
if (i >= 2)
{
name += i.ToString();
}
string sys_name = "Neo_" + name + ".sys";
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, @"Neo6_Win8\x86\Neo6_x86_" + name + ".inf"),
process_inf_file(IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, @"Neo6\x86\Neo6_x86.inf")), build, version, date, sys_name, name, string.Format("inf_{0}.cat", name), true), Str.ShiftJisEncoding, false);
cat_src_filename.Add("Neo6_x86_" + name + ".inf");
}
IO.FileCopy(Path.Combine(src_dir, @"Neo6\x86\Neo6_x86.sys"), Path.Combine(dst_dir, @"Neo6_Win8\x86\Neo6_x86.sys"));
make_cat_file(Path.Combine(dst_dir, @"Neo6_Win8\x86"), cat_src_filename.ToArray(), "inf.cat", false, false);
make_cat_file(Path.Combine(dst_dir, @"Neo6_Win8\x86"), cat_src_filename.ToArray(), "inf2.cat", true, false);
// Neo6 for Windows 8 x64
IO.MakeDir(Path.Combine(dst_dir, @"Neo6_Win8\x64"));
cat_src_filename = new List<string>();
cat_src_filename.Add("Neo6_x64.sys");
for (i = 1; i < 128; i++)
{
string name = "VPN";
if (i >= 2)
{
name += i.ToString();
}
string sys_name = "Neo_" + name + ".sys";
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, @"Neo6_Win8\x64\Neo6_x64_" + name + ".inf"),
process_inf_file(IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, @"Neo6\x64\Neo6_x64.inf")), build, version, date, sys_name, name, string.Format("inf_{0}.cat", name), true), Str.ShiftJisEncoding, false);
cat_src_filename.Add("Neo6_x64_" + name + ".inf");
}
IO.FileCopy(Path.Combine(src_dir, @"Neo6\x64\Neo6_x64.sys"), Path.Combine(dst_dir, @"Neo6_Win8\x64\Neo6_x64.sys"));
make_cat_file(Path.Combine(dst_dir, @"Neo6_Win8\x64"), cat_src_filename.ToArray(), "inf.cat", false, false);
make_cat_file(Path.Combine(dst_dir, @"Neo6_Win8\x64"), cat_src_filename.ToArray(), "inf2.cat", true, false);
// Neo6 for Windows 10 x86
IO.MakeDir(Path.Combine(dst_dir, @"Neo6_Win10\x86"));
for (i = 1; i < 128; i++)
{
string name = "VPN";
if (i >= 2)
{
name += i.ToString();
}
cat_src_filename = new List<string>();
cat_src_filename.Add("Neo6_x86_" + name + ".sys");
string sys_name = "Neo6_x86_" + name + ".sys";
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, @"Neo6_Win10\x86\Neo6_x86_" + name + ".inf"),
process_inf_file(IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, @"Neo6\x86\Neo6_x86.inf")), build, version, date, sys_name, name, string.Format("Neo6_x86_{0}.cat", name), true), Str.ShiftJisEncoding, false);
cat_src_filename.Add("Neo6_x86_" + name + ".inf");
IO.FileCopy(Path.Combine(src_dir, @"Neo6\x86\Neo6_x86_win10.sys"), Path.Combine(dst_dir, @"Neo6_Win10\x86\Neo6_x86_" + name + ".sys"));
make_cat_file(Path.Combine(dst_dir, @"Neo6_Win10\x86"), cat_src_filename.ToArray(), "Neo6_x86_" + name + ".cat", true, true);
}
// Neo6 for Windows 10 x64
IO.MakeDir(Path.Combine(dst_dir, @"Neo6_Win10\x64"));
for (i = 1; i < 128; i++)
{
string name = "VPN";
if (i >= 2)
{
name += i.ToString();
}
cat_src_filename = new List<string>();
cat_src_filename.Add("Neo6_x64_" + name + ".sys");
string sys_name = "Neo6_x64_" + name + ".sys";
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, @"Neo6_Win10\x64\Neo6_x64_" + name + ".inf"),
process_inf_file(IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, @"Neo6\x64\Neo6_x64.inf")), build, version, date, sys_name, name, string.Format("Neo6_x64_{0}.cat", name), true), Str.ShiftJisEncoding, false);
cat_src_filename.Add("Neo6_x64_" + name + ".inf");
IO.FileCopy(Path.Combine(src_dir, @"Neo6\x64\Neo6_x64_win10.sys"), Path.Combine(dst_dir, @"Neo6_Win10\x64\Neo6_x64_" + name + ".sys"));
make_cat_file(Path.Combine(dst_dir, @"Neo6_Win10\x64"), cat_src_filename.ToArray(), "Neo6_x64_" + name + ".cat", true, true);
}
IO.CopyDir(Path.Combine(src_dir, "See"), Path.Combine(dst_dir, "See"), null, false, false);
// SeLow x86 for Windows 8.1
IO.MakeDir(Path.Combine(dst_dir, @"SeLow_Win8\x86"));
cat_src_filename = new List<string>();
cat_src_filename.Add("SeLow_x86.sys");
cat_src_filename.Add("SeLow_x86.inf");
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, @"SeLow_Win8\x86\SeLow_x86.inf"),
process_inf_file(IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, @"SeLow\x86\SeLow_x86.inf")), build, version, date, null, null, "SeLow_Win8_x86.cat", false), Str.ShiftJisEncoding, false);
IO.FileCopy(Path.Combine(src_dir, @"SeLow\x86\SeLow_x86.sys"), Path.Combine(dst_dir, @"SeLow_Win8\x86\SeLow_x86.sys"));
make_cat_file(Path.Combine(dst_dir, @"SeLow_Win8\x86"), cat_src_filename.ToArray(), "inf.cat", false, false);
make_cat_file(Path.Combine(dst_dir, @"SeLow_Win8\x86"), cat_src_filename.ToArray(), "inf2.cat", true, false);
// SeLow x64 for Windows 8.1
IO.MakeDir(Path.Combine(dst_dir, @"SeLow_Win8\x64"));
cat_src_filename = new List<string>();
cat_src_filename.Add("SeLow_x64.sys");
cat_src_filename.Add("SeLow_x64.inf");
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, @"SeLow_Win8\x64\SeLow_x64.inf"),
process_inf_file(IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, @"SeLow\x64\SeLow_x64.inf")), build, version, date, null, null, "SeLow_Win8_x64.cat", false), Str.ShiftJisEncoding, false);
IO.FileCopy(Path.Combine(src_dir, @"SeLow\x64\SeLow_x64.sys"), Path.Combine(dst_dir, @"SeLow_Win8\x64\SeLow_x64.sys"));
make_cat_file(Path.Combine(dst_dir, @"SeLow_Win8\x64"), cat_src_filename.ToArray(), "inf.cat", false, false);
make_cat_file(Path.Combine(dst_dir, @"SeLow_Win8\x64"), cat_src_filename.ToArray(), "inf2.cat", true, false);
// SeLow x86 for Windows 10
IO.MakeDir(Path.Combine(dst_dir, @"SeLow_Win10\x86"));
cat_src_filename = new List<string>();
cat_src_filename.Add("SeLow_x86.sys");
cat_src_filename.Add("SeLow_x86.inf");
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, @"SeLow_Win10\x86\SeLow_x86.inf"),
process_inf_file(IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, @"SeLow\x86\SeLow_x86.inf")), build, version, date, null, null, "SeLow_Win10_x86.cat", false), Str.ShiftJisEncoding, false);
IO.FileCopy(Path.Combine(src_dir, @"SeLow\x86\SeLow_x86_win10.sys"), Path.Combine(dst_dir, @"SeLow_Win10\x86\SeLow_x86.sys"));
make_cat_file(Path.Combine(dst_dir, @"SeLow_Win10\x86"), cat_src_filename.ToArray(), "SeLow_Win10_x86.cat", true, false);
// SeLow x64 for Windows 10
IO.MakeDir(Path.Combine(dst_dir, @"SeLow_Win10\x64"));
cat_src_filename = new List<string>();
cat_src_filename.Add("SeLow_x64.sys");
cat_src_filename.Add("SeLow_x64.inf");
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, @"SeLow_Win10\x64\SeLow_x64.inf"),
process_inf_file(IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, @"SeLow\x64\SeLow_x64.inf")), build, version, date, null, null, "SeLow_Win10_x64.cat", false), Str.ShiftJisEncoding, false);
IO.FileCopy(Path.Combine(src_dir, @"SeLow\x64\SeLow_x64_win10.sys"), Path.Combine(dst_dir, @"SeLow_Win10\x64\SeLow_x64.sys"));
make_cat_file(Path.Combine(dst_dir, @"SeLow_Win10\x64"), cat_src_filename.ToArray(), "SeLow_Win10_x64.cat", true, false);
// Wfp x86
IO.MakeDir(Path.Combine(dst_dir, @"Wfp\x86"));
cat_src_filename = new List<string>();
cat_src_filename.Add("pxwfp_x86.sys");
cat_src_filename.Add("pxwfp_x86.inf");
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, @"Wfp\x86\pxwfp_x86.inf"),
process_inf_file(IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, @"Wfp\x86\pxwfp_x86.inf")), build, version, date, null, null, "pxwfp_x86.cat", false), Str.ShiftJisEncoding, false);
IO.FileCopy(Path.Combine(src_dir, @"Wfp\x86\pxwfp_x86.sys"), Path.Combine(dst_dir, @"Wfp\x86\pxwfp_x86.sys"));
make_cat_file(Path.Combine(dst_dir, @"Wfp\x86"), cat_src_filename.ToArray(), "inf.cat", false, false);
make_cat_file(Path.Combine(dst_dir, @"Wfp\x86"), cat_src_filename.ToArray(), "inf2.cat", true, false);
// Wfp x64
IO.MakeDir(Path.Combine(dst_dir, @"Wfp\x64"));
cat_src_filename = new List<string>();
cat_src_filename.Add("pxwfp_x64.sys");
cat_src_filename.Add("pxwfp_x64.inf");
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, @"Wfp\x64\pxwfp_x64.inf"),
process_inf_file(IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, @"Wfp\x64\pxwfp_x64.inf")), build, version, date, null, null, "pxwfp_x64.cat", false), Str.ShiftJisEncoding, false);
IO.FileCopy(Path.Combine(src_dir, @"Wfp\x64\pxwfp_x64.sys"), Path.Combine(dst_dir, @"Wfp\x64\pxwfp_x64.sys"));
make_cat_file(Path.Combine(dst_dir, @"Wfp\x64"), cat_src_filename.ToArray(), "inf.cat", false, false);
make_cat_file(Path.Combine(dst_dir, @"Wfp\x64"), cat_src_filename.ToArray(), "inf2.cat", true, false);
// Wfp x86 for Windows 10
IO.MakeDir(Path.Combine(dst_dir, @"Wfp_Win10\x86"));
cat_src_filename = new List<string>();
cat_src_filename.Add("pxwfp_x86.sys");
cat_src_filename.Add("pxwfp_x86.inf");
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, @"Wfp_Win10\x86\pxwfp_x86.inf"),
process_inf_file(IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, @"Wfp\x86\pxwfp_x86.inf")), build, version, date, null, null, "pxwfp_Win10_x86.cat", false), Str.ShiftJisEncoding, false);
IO.FileCopy(Path.Combine(src_dir, @"Wfp\x86\pxwfp_x86_win10.sys"), Path.Combine(dst_dir, @"Wfp_Win10\x86\pxwfp_x86.sys"));
make_cat_file(Path.Combine(dst_dir, @"Wfp_Win10\x86"), cat_src_filename.ToArray(), "pxwfp_Win10_x86.cat", true, false);
// Wfp x64 for Windows 10
IO.MakeDir(Path.Combine(dst_dir, @"Wfp_Win10\x64"));
cat_src_filename = new List<string>();
cat_src_filename.Add("pxwfp_x64.sys");
cat_src_filename.Add("pxwfp_x64.inf");
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, @"Wfp_Win10\x64\pxwfp_x64.inf"),
process_inf_file(IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, @"Wfp\x64\pxwfp_x64.inf")), build, version, date, null, null, "pxwfp_Win10_x64.cat", false), Str.ShiftJisEncoding, false);
IO.FileCopy(Path.Combine(src_dir, @"Wfp\x64\pxwfp_x64_win10.sys"), Path.Combine(dst_dir, @"Wfp_Win10\x64\pxwfp_x64.sys"));
make_cat_file(Path.Combine(dst_dir, @"Wfp_Win10\x64"), cat_src_filename.ToArray(), "pxwfp_Win10_x64.cat", true, false);
string tmp_body = IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, "make_whql_submission.cm_"));
tmp_body = Str.ReplaceStr(tmp_body, "test_tag", Str.DateTimeToStrShort(DateTime.Now) + "_Build_" + build.ToString());
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, "make_whql_submission.cmd"), tmp_body, Str.ShiftJisEncoding);
IO.FileCopy(Path.Combine(src_dir, "2_merge_whql_sign.cm_"), Path.Combine(dst_dir, "2_merge_whql_sign.cm_"));
tmp_body = IO.ReadAllTextWithAutoGetEncoding(Path.Combine(src_dir, "Memo.txt"));
tmp_body = Str.ReplaceStr(tmp_body, "tag_ver", (version / 100).ToString() + "." + (version % 100).ToString());
tmp_body = Str.ReplaceStr(tmp_body, "tag_build", build.ToString());
IO.WriteAllTextWithEncoding(Path.Combine(dst_dir, "Memo.txt"), tmp_body, Str.ShiftJisEncoding);
Kernel.Run(Path.Combine(Env.WindowsDir, "explorer.exe"), "\"" + dst_dir + "\"");
}
// Sign for all binary files (series mode) // Sign for all binary files (series mode)
public static void SignAllBinaryFilesSerial() public static void SignAllBinaryFilesSerial()
{ {
@ -1087,7 +1448,3 @@ namespace BuildUtil
} }
} }
} }
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -1448,7 +1448,3 @@ int CompareUserName(void *p1, void *p2)
return StrCmpi(u1->Name, u2->Name); return StrCmpi(u1->Name, u2->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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -317,7 +317,3 @@ char *NormalizePolicyName(char *name);
#endif // ACCOUNT_H #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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Contributors: // Contributors:
// - ELIN (https://github.com/el1n) // - ELIN (https://github.com/el1n)
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
@ -1166,7 +1166,7 @@ UINT StMakeOpenVpnConfigFile(ADMIN *a, RPC_READ_LOG_FILE *t)
name = NewName(cn, cn, cn, L"US", NULL, NULL); name = NewName(cn, cn, cn, L"US", NULL, NULL);
dummy_x = NewRootX(dummy_public_k, dummy_private_k, name, MAX(GetDaysUntil2038(), SERVER_DEFAULT_CERT_DAYS), NULL); dummy_x = NewRootX(dummy_public_k, dummy_private_k, name, GetDaysUntil2038Ex(), NULL);
FreeName(name); FreeName(name);
@ -6739,7 +6739,7 @@ UINT StAddCa(ADMIN *a, RPC_HUB_ADD_CA *t)
if (t->Cert == NULL) if (t->Cert == NULL)
{ {
ERR_INVALID_PARAMETER; return ERR_INVALID_PARAMETER;
} }
if (t->Cert->is_compatible_bit == false) if (t->Cert->is_compatible_bit == false)
@ -11840,12 +11840,12 @@ void InRpcHubEnumCa(RPC_HUB_ENUM_CA *t, PACK *p)
void OutRpcHubEnumCa(PACK *p, RPC_HUB_ENUM_CA *t) void OutRpcHubEnumCa(PACK *p, RPC_HUB_ENUM_CA *t)
{ {
UINT i; UINT i;
PackAddStr(p, "HubName", t->HubName);
// Validate arguments // Validate arguments
if (t == NULL || p == NULL) if (t == NULL || p == NULL)
{ {
return; return;
} }
PackAddStr(p, "HubName", t->HubName);
for (i = 0;i < t->NumCa;i++) for (i = 0;i < t->NumCa;i++)
{ {
@ -12313,12 +12313,12 @@ void InRpcEnumAccessList(RPC_ENUM_ACCESS_LIST *a, PACK *p)
void OutRpcEnumAccessList(PACK *p, RPC_ENUM_ACCESS_LIST *a) void OutRpcEnumAccessList(PACK *p, RPC_ENUM_ACCESS_LIST *a)
{ {
UINT i; UINT i;
PackAddStr(p, "HubName", a->HubName);
// Validate arguments // Validate arguments
if (a == NULL || p == NULL) if (a == NULL || p == NULL)
{ {
return; return;
} }
PackAddStr(p, "HubName", a->HubName);
for (i = 0;i < a->NumAccess;i++) for (i = 0;i < a->NumAccess;i++)
{ {
@ -12573,12 +12573,12 @@ void InRpcEnumUser(RPC_ENUM_USER *t, PACK *p)
void OutRpcEnumUser(PACK *p, RPC_ENUM_USER *t) void OutRpcEnumUser(PACK *p, RPC_ENUM_USER *t)
{ {
UINT i; UINT i;
PackAddStr(p, "HubName", t->HubName);
// Validate arguments // Validate arguments
if (t == NULL || p == NULL) if (t == NULL || p == NULL)
{ {
return; return;
} }
PackAddStr(p, "HubName", t->HubName);
for (i = 0;i < t->NumUser;i++) for (i = 0;i < t->NumUser;i++)
{ {
@ -12787,12 +12787,12 @@ void InRpcEnumSession(RPC_ENUM_SESSION *t, PACK *p)
void OutRpcEnumSession(PACK *p, RPC_ENUM_SESSION *t) void OutRpcEnumSession(PACK *p, RPC_ENUM_SESSION *t)
{ {
UINT i; UINT i;
PackAddStr(p, "HubName", t->HubName);
// Validate arguments // Validate arguments
if (t == NULL || p == NULL) if (t == NULL || p == NULL)
{ {
return; return;
} }
PackAddStr(p, "HubName", t->HubName);
for (i = 0;i < t->NumSession;i++) for (i = 0;i < t->NumSession;i++)
{ {
@ -13907,7 +13907,3 @@ bool SiIsEmptyPassword(void *hash_password)
return false; return 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -1533,7 +1533,3 @@ void OutRpcInternetSetting(PACK *p, INTERNET_SETTING *t);
#endif // ADMIN_H #endif // ADMIN_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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -205,7 +205,8 @@ void AcWaitForRequest(AZURE_CLIENT *ac, SOCK *s, AZURE_PARAM *param)
BinToStr(server_cert_hash_str, sizeof(server_cert_hash_str), BinToStr(server_cert_hash_str, sizeof(server_cert_hash_str),
server_cert_hash, SHA1_SIZE); server_cert_hash, SHA1_SIZE);
if (IsEmptyStr(ac->DDnsStatusCopy.AzureCertHash) || StrCmpi(server_cert_hash_str, ac->DDnsStatusCopy.AzureCertHash) == 0) if (IsEmptyStr(ac->DDnsStatusCopy.AzureCertHash) || StrCmpi(server_cert_hash_str, ac->DDnsStatusCopy.AzureCertHash) == 0
|| StrCmpi(server_cert_hash_str, ac->DDnsStatus.AzureCertHash) == 0)
{ {
if (SendAll(ns, AZURE_PROTOCOL_DATA_SIANGTURE, 24, true)) if (SendAll(ns, AZURE_PROTOCOL_DATA_SIANGTURE, 24, true))
{ {
@ -682,7 +683,3 @@ AZURE_CLIENT *NewAzureClient(CEDAR *cedar, SERVER *server)
return 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -173,7 +173,3 @@ void AcWaitForRequest(AZURE_CLIENT *ac, SOCK *s, AZURE_PARAM *param);
#endif // AZURE_CLIENT_H #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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -114,7 +114,3 @@
#include "CedarPch.h" #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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -118,7 +118,3 @@
#endif // 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -556,7 +556,13 @@ BRIDGE *BrNewBridge(HUB *h, char *name, POLICY *p, bool local, bool monitor, boo
return b; return b;
} }
// Raw IP bridge is supported only on Linux
bool IsRawIpBridgeSupported()
{
#ifdef UNIX_LINUX
return true;
#else // UNIX_LINUX
return false;
#endif // UNIX_LINUX
}
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -126,6 +126,9 @@
#endif // OS_WIN32 #endif // OS_WIN32
// Constants
#define BRIDGE_SPECIAL_IPRAW_NAME "ipv4_rawsocket_virtual_router"
// Bridge // Bridge
struct BRIDGE struct BRIDGE
{ {
@ -171,12 +174,9 @@ bool DeleteLocalBridge(CEDAR *c, char *hubname, char *devicename);
bool IsBridgeSupported(); bool IsBridgeSupported();
bool IsNeedWinPcap(); bool IsNeedWinPcap();
UINT GetEthDeviceHash(); UINT GetEthDeviceHash();
bool IsRawIpBridgeSupported();
#endif // BRIDGE_H #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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -374,7 +374,7 @@ TOKEN_LIST *GetEthListSolaris()
#ifdef UNIX_LINUX #ifdef UNIX_LINUX
// Get Ethernet device list on Linux // Get Ethernet device list on Linux
TOKEN_LIST *GetEthListLinux() TOKEN_LIST *GetEthListLinux(bool enum_normal, bool enum_rawip)
{ {
struct ifreq ifr; struct ifreq ifr;
TOKEN_LIST *t; TOKEN_LIST *t;
@ -383,6 +383,11 @@ TOKEN_LIST *GetEthListLinux()
LIST *o; LIST *o;
char name[MAX_SIZE]; char name[MAX_SIZE];
if (enum_normal == false && enum_rawip)
{
return ParseToken(BRIDGE_SPECIAL_IPRAW_NAME, NULL);
}
o = NewListFast(CompareStr); o = NewListFast(CompareStr);
s = UnixEthOpenRawSocket(); s = UnixEthOpenRawSocket();
@ -431,7 +436,7 @@ TOKEN_LIST *GetEthListLinux()
Sort(o); Sort(o);
t = ZeroMalloc(sizeof(TOKEN_LIST)); t = ZeroMalloc(sizeof(TOKEN_LIST));
t->NumTokens = LIST_NUM(o); t->NumTokens = LIST_NUM(o) + (enum_rawip ? 1 : 0);
t->Token = ZeroMalloc(sizeof(char *) * t->NumTokens); t->Token = ZeroMalloc(sizeof(char *) * t->NumTokens);
for (i = 0;i < LIST_NUM(o);i++) for (i = 0;i < LIST_NUM(o);i++)
@ -440,6 +445,11 @@ TOKEN_LIST *GetEthListLinux()
t->Token[i] = name; t->Token[i] = name;
} }
if (enum_rawip)
{
t->Token[t->NumTokens - 1] = CopyStr(BRIDGE_SPECIAL_IPRAW_NAME);
}
ReleaseList(o); ReleaseList(o);
return t; return t;
@ -542,11 +552,15 @@ TOKEN_LIST *GetEthListBpf()
// Enumerate Ethernet devices // Enumerate Ethernet devices
TOKEN_LIST *GetEthList() TOKEN_LIST *GetEthList()
{
return GetEthListEx(NULL, true, false);
}
TOKEN_LIST *GetEthListEx(UINT *total_num_including_hidden, bool enum_normal, bool enum_rawip)
{ {
TOKEN_LIST *t = NULL; TOKEN_LIST *t = NULL;
#if defined(UNIX_LINUX) #if defined(UNIX_LINUX)
t = GetEthListLinux(); t = GetEthListLinux(enum_normal, enum_rawip);
#elif defined(UNIX_SOLARIS) #elif defined(UNIX_SOLARIS)
t = GetEthListSolaris(); t = GetEthListSolaris();
#elif defined(BRIDGE_PCAP) #elif defined(BRIDGE_PCAP)
@ -575,6 +589,11 @@ ETH *OpenEthLinux(char *name, bool local, bool tapmode, char *tapaddr)
return NULL; return NULL;
} }
if (StrCmpi(name, BRIDGE_SPECIAL_IPRAW_NAME) == 0)
{
return OpenEthLinuxIpRaw();
}
if (tapmode) if (tapmode)
{ {
#ifndef NO_VLAN #ifndef NO_VLAN
@ -732,6 +751,10 @@ UINT EthGetMtu(ETH *e)
{ {
return 0; return 0;
} }
if (e->IsRawIpMode)
{
return 0;
}
if (e->CurrentMtu != 0) if (e->CurrentMtu != 0)
{ {
@ -802,6 +825,10 @@ bool EthSetMtu(ETH *e, UINT mtu)
{ {
return false; return false;
} }
if (e->IsRawIpMode)
{
return false;
}
if (mtu == 0) if (mtu == 0)
{ {
@ -865,6 +892,11 @@ bool EthIsChangeMtuSupported(ETH *e)
return false; return false;
} }
if (e->IsRawIpMode)
{
return false;
}
return true; return true;
#else // defined(UNIX_LINUX) || defined(UNIX_BSD) || defined(UNIX_SOLARIS) #else // defined(UNIX_LINUX) || defined(UNIX_BSD) || defined(UNIX_SOLARIS)
return false; return false;
@ -1526,6 +1558,13 @@ void CloseEth(ETH *e)
return; return;
} }
if (e->IsRawIpMode)
{
CloseEthLinuxIpRaw(e);
return;
}
if (e->Tap != NULL) if (e->Tap != NULL)
{ {
#ifndef NO_VLAN #ifndef NO_VLAN
@ -1647,6 +1686,11 @@ UINT EthGetPacketLinux(ETH *e, void **data)
return INFINITE; return INFINITE;
} }
if (e->IsRawIpMode)
{
return EthGetPacketLinuxIpRaw(e, data);
}
if (e->Tap != NULL) if (e->Tap != NULL)
{ {
#ifndef NO_VLAN #ifndef NO_VLAN
@ -1949,6 +1993,11 @@ void EthPutPacket(ETH *e, void *data, UINT size)
{ {
return; return;
} }
if (e->IsRawIpMode)
{
EthPutPacketLinuxIpRaw(e, data, size);
return;
}
if (size < 14 || size > MAX_PACKET_SIZE) if (size < 14 || size > MAX_PACKET_SIZE)
{ {
Free(data); Free(data);
@ -2017,10 +2066,745 @@ void EthPutPacket(ETH *e, void *data, UINT size)
Free(data); Free(data);
} }
// Open ETH by using IP raw packets
ETH *OpenEthLinuxIpRaw()
{
ETH *e;
if (IsRawIpBridgeSupported() == false)
{
return NULL;
}
e = ZeroMalloc(sizeof(ETH));
e->IsRawIpMode = true;
e->RawTcp = NewUDP4(MAKE_SPECIAL_PORT(IPPROTO_TCP), NULL);
e->RawUdp = NewUDP4(MAKE_SPECIAL_PORT(IPPROTO_UDP), NULL);
e->RawIcmp = NewUDP4(MAKE_SPECIAL_PORT(IPPROTO_ICMP), NULL);
if (e->RawTcp == NULL || e->RawUdp == NULL || e->RawIcmp == NULL)
{
ReleaseSock(e->RawTcp);
ReleaseSock(e->RawUdp);
ReleaseSock(e->RawIcmp);
Free(e);
return NULL;
}
ClearSockDfBit(e->RawTcp);
ClearSockDfBit(e->RawUdp);
ClearSockDfBit(e->RawIcmp);
SetRawSockHeaderIncludeOption(e->RawTcp, true);
SetRawSockHeaderIncludeOption(e->RawUdp, true);
SetRawSockHeaderIncludeOption(e->RawIcmp, true);
e->Name = CopyStr(BRIDGE_SPECIAL_IPRAW_NAME);
e->Title = CopyStr(BRIDGE_SPECIAL_IPRAW_NAME);
e->Cancel = NewCancel();
UnixDeletePipe(e->Cancel->pipe_read, e->Cancel->pipe_write);
e->Cancel->pipe_read = e->Cancel->pipe_write = -1;
UnixSetSocketNonBlockingMode(e->RawTcp->socket, true);
UnixSetSocketNonBlockingMode(e->RawUdp->socket, true);
UnixSetSocketNonBlockingMode(e->RawIcmp->socket, true);
e->Cancel->SpecialFlag = true;
e->Cancel->pipe_read = e->RawTcp->socket;
e->Cancel->pipe_special_read2 = e->RawUdp->socket;
e->Cancel->pipe_special_read3 = e->RawIcmp->socket;
e->RawIpMyMacAddr[2] = 0x01;
e->RawIpMyMacAddr[5] = 0x01;
SetIP(&e->MyIP, 10, 171, 7, 253);
SetIP(&e->YourIP, 10, 171, 7, 254);
e->RawIpSendQueue = NewQueueFast();
e->RawIP_TmpBufferSize = 67000;
e->RawIP_TmpBuffer = Malloc(e->RawIP_TmpBufferSize);
return e;
}
// Close ETH by using IP raw packets
void CloseEthLinuxIpRaw(ETH *e)
{
if (e == NULL)
{
return;
}
while (true)
{
BUF *buf = GetNext(e->RawIpSendQueue);
if (buf == NULL)
{
break;
}
FreeBuf(buf);
}
ReleaseQueue(e->RawIpSendQueue);
Free(e->Name);
Free(e->Title);
ReleaseSock(e->RawTcp);
ReleaseSock(e->RawUdp);
ReleaseSock(e->RawIcmp);
ReleaseCancel(e->Cancel);
Free(e->RawIP_TmpBuffer);
Free(e);
}
// Receive an IP raw packet
UINT EthGetPacketLinuxIpRaw(ETH *e, void **data)
{
UINT r;
BUF *b;
// Validate arguments
if (e == NULL || data == NULL)
{
return INFINITE;
}
if (e->RawIp_HasError)
{
return INFINITE;
}
b = GetNext(e->RawIpSendQueue);
if (b != NULL)
{
UINT size;
*data = b->Buf;
size = b->Size;
Free(b);
return size;
}
r = EthGetPacketLinuxIpRawForSock(e, data, e->RawTcp, IP_PROTO_TCP);
if (r == 0)
{
r = EthGetPacketLinuxIpRawForSock(e, data, e->RawUdp, IP_PROTO_UDP);
if (r == 0)
{
r = EthGetPacketLinuxIpRawForSock(e, data, e->RawIcmp, IP_PROTO_ICMPV4);
}
}
if (r == INFINITE)
{
e->RawIp_HasError = true;
}
return r;
}
// Receive an IP raw packet for the specified socket
UINT EthGetPacketLinuxIpRawForSock(ETH *e, void **data, SOCK *s, UINT proto)
{
UCHAR *tmp;
UINT r;
IP src_addr;
UINT src_port;
UINT ret = INFINITE;
UCHAR *retbuf;
PKT *p;
bool ok = false;
// Validate arguments
if (e == NULL || data == NULL)
{
return INFINITE;
}
tmp = e->RawIP_TmpBuffer;
LABEL_RETRY:
*data = NULL;
r = RecvFrom(s, &src_addr, &src_port, tmp, e->RawIP_TmpBufferSize);
if (r == SOCK_LATER)
{
return 0;
}
if (r == 0)
{
if (s->IgnoreRecvErr)
{
return 0;
}
else
{
return INFINITE;
}
}
ret = 14 + r;
retbuf = Malloc(ret);
*data = retbuf;
Copy(retbuf, e->RawIpYourMacAddr, 6);
Copy(retbuf + 6, e->RawIpMyMacAddr, 6);
retbuf[12] = 0x08;
retbuf[13] = 0x00;
Copy(retbuf + 14, tmp, r);
// Mangle packet
p = ParsePacket(retbuf, ret);
if (p != NULL)
{
if (p->TypeL3 == L3_IPV4)
{
IPV4_HEADER *ip;
IP original_dest_ip;
ip = p->L3.IPv4Header;
UINTToIP(&original_dest_ip, ip->DstIP);
if (IsZeroIP(&e->MyPhysicalIPForce) == false && CmpIpAddr(&e->MyPhysicalIPForce, &original_dest_ip) == 0 ||
(IsIPMyHost(&original_dest_ip) && IsLocalHostIP(&original_dest_ip) == false && IsHostIPAddress4(&original_dest_ip)))
{
if (IsZeroIP(&e->MyPhysicalIPForce) && CmpIpAddr(&e->MyPhysicalIP, &original_dest_ip) != 0)
{
// Update MyPhysicalIP
Copy(&e->MyPhysicalIP, &original_dest_ip, sizeof(IP));
// Debug("e->MyPhysicalIP = %r\n", &e->MyPhysicalIP);
}
if (IsZeroIP(&e->MyPhysicalIPForce) == false)
{
Copy(&e->MyPhysicalIP, &e->MyPhysicalIPForce, sizeof(IP));
}
ip->DstIP = IPToUINT(&e->YourIP);
ip->Checksum = 0;
ip->Checksum = IpChecksum(ip, IPV4_GET_HEADER_LEN(ip) * 5);
if (p->TypeL4 == L4_TCP)
{
TCP_HEADER *tcp = p->L4.TCPHeader;
/*
if (Endian16(tcp->SrcPort) == 80)
{
IP a, b;
UINTToIP(&a, ip->SrcIP);
UINTToIP(&b, ip->DstIP);
Debug("%r %r %u %u\n", &a, &b, Endian16(tcp->SrcPort), Endian16(tcp->DstPort));
}*/
ok = true;
}
else if (p->TypeL4 == L4_UDP)
{
UDP_HEADER *udp = p->L4.UDPHeader;
udp->Checksum = 0;
ok = true;
}
else if (p->TypeL4 == L4_ICMPV4)
{
ICMP_HEADER *icmp = p->L4.ICMPHeader;
if (icmp->Type == ICMP_TYPE_DESTINATION_UNREACHABLE || icmp->Type == ICMP_TYPE_TIME_EXCEEDED)
{
// Rewrite the Src IP of the IPv4 header of the ICMP response packet
UINT size = p->PacketSize - ((UCHAR *)icmp - (UCHAR *)p->PacketData);
UCHAR *data = (UCHAR *)icmp;
IPV4_HEADER *orig_ipv4 = (IPV4_HEADER *)(((UCHAR *)data) + sizeof(ICMP_HEADER) + sizeof(ICMP_ECHO));
UINT orig_ipv4_size = size - (sizeof(ICMP_HEADER) + sizeof(ICMP_ECHO));
UINT orig_ipv4_header_size = GetIpHeaderSize((UCHAR *)orig_ipv4, orig_ipv4_size);
if (orig_ipv4_header_size >= sizeof(IPV4_HEADER) && orig_ipv4_size >= orig_ipv4_header_size)
{
if (orig_ipv4->Protocol == IP_PROTO_ICMPV4)
{
// Search the inner ICMP header
UINT inner_icmp_size = orig_ipv4_size - orig_ipv4_header_size;
if (inner_icmp_size >= (sizeof(ICMP_HEADER) + sizeof(ICMP_ECHO)))
{
ICMP_HEADER *inner_icmp = (ICMP_HEADER *)(((UCHAR *)data) +
sizeof(ICMP_HEADER) + sizeof(ICMP_ECHO) + orig_ipv4_header_size);
if (inner_icmp->Type == ICMP_TYPE_ECHO_REQUEST)
{
ICMP_ECHO *inner_echo = (ICMP_ECHO *)(((UCHAR *)inner_icmp) + sizeof(ICMP_HEADER));
inner_icmp->Checksum = 0;
orig_ipv4->SrcIP = IPToUINT(&e->YourIP);
orig_ipv4->Checksum = 0;
orig_ipv4->Checksum = IpChecksum(orig_ipv4, orig_ipv4_header_size);
// Rewrite the outer ICMP header
if (true)
{
UCHAR *payload;
UINT payload_size;
ICMP_ECHO *echo;
// Echo Response
echo = (ICMP_ECHO *)(((UCHAR *)data) + sizeof(ICMP_HEADER));
if (size >= (sizeof(ICMP_HEADER) + sizeof(ICMP_ECHO)))
{
payload = ((UCHAR *)data) + sizeof(ICMP_HEADER) + sizeof(ICMP_ECHO);
payload_size = size - (sizeof(ICMP_HEADER) + sizeof(ICMP_ECHO));
// Rewrite the header
icmp->Checksum = 0;
icmp->Checksum = IpChecksum(icmp, size);
}
}
}
}
}
}
}
icmp->Checksum = 0;
icmp->Checksum = IpChecksum(icmp, p->PayloadSize);
ok = true;
}
else if (p->TypeL4 == L4_FRAGMENT)
{
ok = true;
}
}
}
FreePacket(p);
}
if (ok == false)
{
Free(*data);
*data = NULL;
goto LABEL_RETRY;
}
return ret;
}
// Send internal IP packet (insert into the send queue)
void EthSendIpPacketInnerIpRaw(ETH *e, void *data, UINT size, USHORT protocol)
{
BUF *b;
if (e == NULL || data == NULL || size == 0)
{
return;
}
if (e->RawIpSendQueue->num_item >= 1024)
{
return;
}
b = NewBuf();
WriteBuf(b, e->RawIpYourMacAddr, 6);
WriteBuf(b, e->RawIpMyMacAddr, 6);
WriteBufShort(b, protocol);
WriteBuf(b, data, size);
SeekBufToBegin(b);
InsertQueue(e->RawIpSendQueue, b);
}
// Process the packet internal if necessary
bool EthProcessIpPacketInnerIpRaw(ETH *e, PKT *p)
{
bool ret = false;
if (e == NULL || p == NULL)
{
return false;
}
if (p->TypeL3 == L3_ARPV4)
{
// ARP processing
ARPV4_HEADER *arp = p->L3.ARPv4Header;
if (Endian16(arp->HardwareType) == ARP_HARDWARE_TYPE_ETHERNET &&
Endian16(arp->ProtocolType) == MAC_PROTO_IPV4 &&
arp->HardwareSize == 6 && arp->ProtocolType == 4)
{
if (IPToUINT(&e->MyIP) == arp->TargetIP)
{
if (Endian16(arp->Operation) == ARP_OPERATION_REQUEST)
{
ARPV4_HEADER r;
Zero(&r, sizeof(r));
r.HardwareType = Endian16(ARP_HARDWARE_TYPE_ETHERNET);
r.ProtocolType = Endian16(MAC_PROTO_IPV4);
r.HardwareSize = 6;
r.ProtocolSize = 4;
r.Operation = Endian16(ARP_OPERATION_RESPONSE);
Copy(r.SrcAddress, e->RawIpMyMacAddr, 6);
Copy(r.TargetAddress, arp->SrcAddress, 6);
r.SrcIP = IPToUINT(&e->MyIP);
r.TargetIP = arp->SrcIP;
EthSendIpPacketInnerIpRaw(e, &r, sizeof(ARPV4_HEADER), MAC_PROTO_ARPV4);
}
}
}
}
else if (p->TypeL3 == L3_IPV4 && p->TypeL4 == L4_UDP && p->TypeL7 == L7_DHCPV4)
{
// DHCP processing
DHCPV4_HEADER *dhcp;
UCHAR *data;
UINT size;
UINT dhcp_header_size;
UINT dhcp_data_offset;
UINT tran_id;
UINT magic_cookie = Endian32(DHCP_MAGIC_COOKIE);
bool ok;
DHCP_OPTION_LIST *opt;
dhcp = p->L7.DHCPv4Header;
tran_id = Endian32(dhcp->TransactionId);
// Get the DHCP data and size
dhcp_header_size = sizeof(DHCPV4_HEADER);
dhcp_data_offset = (UINT)(((UCHAR *)p->L7.DHCPv4Header) - ((UCHAR *)p->MacHeader) + dhcp_header_size);
data = ((UCHAR *)dhcp) + dhcp_header_size;
size = p->PacketSize - dhcp_data_offset;
if (dhcp_header_size < 5)
{
// Data size is invalid
return false;
}
// Search for Magic Cookie
ok = false;
while (size >= 5)
{
if (Cmp(data, &magic_cookie, sizeof(magic_cookie)) == 0)
{
// Found
data += 4;
size -= 4;
ok = true;
break;
}
data++;
size--;
}
if (ok == false)
{
// The packet is invalid
return false;
}
// Parse DHCP options list
opt = ParseDhcpOptionList(data, size);
if (opt == NULL)
{
// The packet is invalid
return false;
}
if (dhcp->OpCode == 1 && (opt->Opcode == DHCP_DISCOVER || opt->Opcode == DHCP_REQUEST || opt->Opcode == DHCP_INFORM))
{
// Operate as the server
UINT ip = IPToUINT(&e->YourIP);
if (ip != 0 || opt->Opcode == DHCP_INFORM)
{
// Respond if there is providable IP address
DHCP_OPTION_LIST ret;
LIST *o;
UINT hw_type;
UINT hw_addr_size;
UINT new_ip = ip;
IP default_dns;
Zero(&default_dns, sizeof(default_dns));
Zero(&ret, sizeof(ret));
ret.Opcode = (opt->Opcode == DHCP_DISCOVER ? DHCP_OFFER : DHCP_ACK);
ret.ServerAddress = IPToUINT(&e->MyIP);
ret.LeaseTime = 3600;
if (opt->Opcode == DHCP_INFORM)
{
ret.LeaseTime = 0;
}
ret.SubnetMask = SetIP32(255, 255, 255, 252);
if (UnixGetDefaultDns(&default_dns) && IsZeroIp(&default_dns) == false)
{
ret.DnsServer = IPToUINT(&default_dns);
ret.DnsServer2 = SetIP32(8, 8, 8, 8);
}
else
{
ret.DnsServer = SetIP32(8, 8, 8, 8);
ret.DnsServer2 = SetIP32(8, 8, 4, 4);
}
ret.Gateway = IPToUINT(&e->MyIP);
if (opt->Opcode != DHCP_INFORM)
{
char client_mac[MAX_SIZE];
char client_ip[64];
IP ips;
BinToStr(client_mac, sizeof(client_mac), p->MacAddressSrc, 6);
UINTToIP(&ips, ip);
IPToStr(client_ip, sizeof(client_ip), &ips);
Debug("IP_RAW: DHCP %s : %s given %s\n",
ret.Opcode == DHCP_OFFER ? "DHCP_OFFER" : "DHCP_ACK",
client_mac, client_ip);
}
// Build a DHCP option
o = BuildDhcpOption(&ret);
if (o != NULL)
{
BUF *b = BuildDhcpOptionsBuf(o);
if (b != NULL)
{
UINT dest_ip = p->L3.IPv4Header->SrcIP;
UINT blank_size = 128 + 64;
UINT dhcp_packet_size;
UINT magic = Endian32(DHCP_MAGIC_COOKIE);
DHCPV4_HEADER *dhcp;
void *magic_cookie_addr;
void *buffer_addr;
if (dest_ip == 0)
{
dest_ip = 0xffffffff;
}
// Calculate the DHCP packet size
dhcp_packet_size = blank_size + sizeof(DHCPV4_HEADER) + sizeof(magic) + b->Size;
if (dhcp_packet_size < DHCP_MIN_SIZE)
{
// Padding
dhcp_packet_size = DHCP_MIN_SIZE;
}
// Create a header
dhcp = ZeroMalloc(dhcp_packet_size);
dhcp->OpCode = 2;
dhcp->HardwareType = hw_type;
dhcp->HardwareAddressSize = hw_addr_size;
dhcp->Hops = 0;
dhcp->TransactionId = Endian32(tran_id);
dhcp->Seconds = 0;
dhcp->Flags = 0;
dhcp->YourIP = new_ip;
dhcp->ServerIP = IPToUINT(&e->MyIP);
Copy(dhcp->ClientMacAddress, p->MacAddressSrc, 6);
// Calculate the address
magic_cookie_addr = (((UCHAR *)dhcp) + sizeof(DHCPV4_HEADER) + blank_size);
buffer_addr = ((UCHAR *)magic_cookie_addr) + sizeof(magic);
// Magic Cookie
Copy(magic_cookie_addr, &magic, sizeof(magic));
// Buffer
Copy(buffer_addr, b->Buf, b->Size);
if (true)
{
UCHAR *data = ZeroMalloc(sizeof(IPV4_HEADER) + sizeof(UDP_HEADER) + dhcp_packet_size);
IPV4_HEADER *ipv4 = (IPV4_HEADER *)(data);
UDP_HEADER *udp = (UDP_HEADER *)(data + sizeof(IPV4_HEADER));
Copy(data + sizeof(IPV4_HEADER) + sizeof(UDP_HEADER), dhcp, dhcp_packet_size);
IPV4_SET_VERSION(ipv4, 4);
IPV4_SET_HEADER_LEN(ipv4, 5);
ipv4->TotalLength = Endian16(sizeof(IPV4_HEADER) + sizeof(UDP_HEADER) + dhcp_packet_size);
ipv4->TimeToLive = 63;
ipv4->Protocol = IP_PROTO_UDP;
ipv4->SrcIP = IPToUINT(&e->MyIP);
ipv4->DstIP = dest_ip;
ipv4->Checksum = IpChecksum(ipv4, sizeof(IPV4_HEADER));
udp->SrcPort = Endian16(NAT_DHCP_SERVER_PORT);
udp->DstPort = Endian16(NAT_DHCP_CLIENT_PORT);
udp->PacketLength = Endian16(sizeof(UDP_HEADER) + dhcp_packet_size);
udp->Checksum = CalcChecksumForIPv4(ipv4->SrcIP, ipv4->DstIP, IP_PROTO_UDP,
dhcp, dhcp_packet_size, 0);
if (udp->Checksum == 0)
{
udp->Checksum = 0xffff;
}
EthSendIpPacketInnerIpRaw(e, data, sizeof(IPV4_HEADER) + sizeof(UDP_HEADER) + dhcp_packet_size, MAC_PROTO_IPV4);
Free(data);
}
// Release the memory
Free(dhcp);
FreeBuf(b);
}
FreeDhcpOptions(o);
}
}
}
Free(opt);
}
return ret;
}
// Send an IP raw packet
void EthPutPacketLinuxIpRaw(ETH *e, void *data, UINT size)
{
PKT *p;
// Validate arguments
if (e == NULL || data == NULL)
{
return;
}
if (size < 14 || size > MAX_PACKET_SIZE || e->RawIp_HasError)
{
Free(data);
return;
}
p = ParsePacket(data, size);
if (p->BroadcastPacket || Cmp(p->MacAddressDest, e->RawIpMyMacAddr, 6) == 0)
{
if (IsValidUnicastMacAddress(p->MacAddressSrc))
{
Copy(e->RawIpYourMacAddr, p->MacAddressSrc, 6);
}
}
if (IsZero(e->RawIpYourMacAddr, 6) || IsValidUnicastMacAddress(p->MacAddressSrc) == false ||
(p->BroadcastPacket == false && Cmp(p->MacAddressDest, e->RawIpMyMacAddr, 6) != 0))
{
Free(data);
FreePacket(p);
return;
}
if (p != NULL)
{
SOCK *s = NULL;
if (p->TypeL3 == L3_IPV4)
{
if (p->TypeL4 == L4_TCP)
{
if (IsZeroIP(&e->MyPhysicalIP) == false)
{
s = e->RawTcp;
}
}
else if (p->TypeL4 == L4_UDP)
{
if (EthProcessIpPacketInnerIpRaw(e, p) == false)
{
s = e->RawUdp;
}
}
else if (p->TypeL4 == L4_ICMPV4)
{
if (IsZeroIP(&e->MyPhysicalIP) == false)
{
s = e->RawIcmp;
}
}
else if (p->TypeL4 == L4_FRAGMENT)
{
if (IsZeroIP(&e->MyPhysicalIP) == false)
{
s = e->RawIcmp;
}
}
}
else if (p->TypeL3 == L3_ARPV4)
{
EthProcessIpPacketInnerIpRaw(e, p);
}
if (s != NULL && p->L3.IPv4Header->DstIP != 0xffffffff && p->BroadcastPacket == false &&
p->L3.IPv4Header->SrcIP == IPToUINT(&e->YourIP))
{
UCHAR *send_data = p->IPv4PayloadData;
UCHAR *head = p->PacketData;
UINT remove_header_size = (UINT)(send_data - head);
if (p->PacketSize > remove_header_size)
{
IP dest;
UINT send_data_size = p->PacketSize - remove_header_size;
// checksum
if (p->TypeL4 == L4_UDP)
{
p->L4.UDPHeader->Checksum = 0;
}
else if (p->TypeL4 == L4_TCP)
{
p->L4.TCPHeader->Checksum = 0;
p->L4.TCPHeader->Checksum = CalcChecksumForIPv4(IPToUINT(&e->MyPhysicalIP),
p->L3.IPv4Header->DstIP, IP_PROTO_TCP,
p->L4.TCPHeader, p->IPv4PayloadSize, 0);
}
UINTToIP(&dest, p->L3.IPv4Header->DstIP);
if (s->RawIP_HeaderIncludeFlag == false)
{
SendTo(s, &dest, 0, send_data, send_data_size);
}
else
{
IPV4_HEADER *ip = p->L3.IPv4Header;
ip->SrcIP = IPToUINT(&e->MyPhysicalIP);
ip->Checksum = 0;
ip->Checksum = IpChecksum(ip, IPV4_GET_HEADER_LEN(ip) * 4);
SendTo(s, &dest, 0, ip, ((UCHAR *)p->PacketData - (UCHAR *)ip) + p->PacketSize);
}
}
}
FreePacket(p);
}
Free(data);
}
#endif // BRIDGE_C #endif // BRIDGE_C
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -162,6 +162,19 @@ struct ETH
VLAN *Tap; // tap VLAN *Tap; // tap
bool Linux_IsAuxDataSupported; // Is PACKET_AUXDATA supported bool Linux_IsAuxDataSupported; // Is PACKET_AUXDATA supported
bool IsRawIpMode; // RAW IP mode
SOCK *RawTcp, *RawUdp, *RawIcmp; // RAW sockets
bool RawIp_HasError;
UCHAR RawIpMyMacAddr[6];
UCHAR RawIpYourMacAddr[6];
IP MyIP;
IP YourIP;
QUEUE *RawIpSendQueue;
IP MyPhysicalIP;
IP MyPhysicalIPForce;
UCHAR *RawIP_TmpBuffer;
UINT RawIP_TmpBufferSize;
}; };
#if defined( BRIDGE_BPF ) || defined( BRIDGE_PCAP ) #if defined( BRIDGE_BPF ) || defined( BRIDGE_PCAP )
@ -180,7 +193,8 @@ bool IsEthSupportedLinux();
bool IsEthSupportedSolaris(); bool IsEthSupportedSolaris();
bool IsEthSupportedPcap(); bool IsEthSupportedPcap();
TOKEN_LIST *GetEthList(); TOKEN_LIST *GetEthList();
TOKEN_LIST *GetEthListLinux(); TOKEN_LIST *GetEthListEx(UINT *total_num_including_hidden, bool enum_normal, bool enum_rawip);
TOKEN_LIST *GetEthListLinux(bool enum_normal, bool enum_rawip);
TOKEN_LIST *GetEthListSolaris(); TOKEN_LIST *GetEthListSolaris();
TOKEN_LIST *GetEthListPcap(); TOKEN_LIST *GetEthListPcap();
ETH *OpenEth(char *name, bool local, bool tapmode, char *tapaddr); ETH *OpenEth(char *name, bool local, bool tapmode, char *tapaddr);
@ -203,6 +217,14 @@ bool EthIsChangeMtuSupported(ETH *e);
bool EthGetInterfaceDescriptionUnix(char *name, char *str, UINT size); bool EthGetInterfaceDescriptionUnix(char *name, char *str, UINT size);
bool EthIsInterfaceDescriptionSupportedUnix(); bool EthIsInterfaceDescriptionSupportedUnix();
ETH *OpenEthLinuxIpRaw();
void CloseEthLinuxIpRaw(ETH *e);
UINT EthGetPacketLinuxIpRaw(ETH *e, void **data);
UINT EthGetPacketLinuxIpRawForSock(ETH *e, void **data, SOCK *s, UINT proto);
void EthPutPacketLinuxIpRaw(ETH *e, void *data, UINT size);
bool EthProcessIpPacketInnerIpRaw(ETH *e, PKT *p);
void EthSendIpPacketInnerIpRaw(ETH *e, void *data, UINT size, USHORT protocol);
#ifdef UNIX_SOLARIS #ifdef UNIX_SOLARIS
// Function prototype for Solaris // Function prototype for Solaris
bool DlipAttatchRequest(int fd, UINT devid); bool DlipAttatchRequest(int fd, UINT devid);
@ -216,7 +238,3 @@ int UnixEthOpenRawSocket();
#endif // BRIDGEUNIX_H #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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -1356,9 +1356,9 @@ TOKEN_LIST *GetEthList()
{ {
UINT v; UINT v;
return GetEthListEx(&v); return GetEthListEx(&v, true, false);
} }
TOKEN_LIST *GetEthListEx(UINT *total_num_including_hidden) TOKEN_LIST *GetEthListEx(UINT *total_num_including_hidden, bool enum_normal, bool enum_rawip)
{ {
TOKEN_LIST *ret; TOKEN_LIST *ret;
UINT i; UINT i;
@ -1371,6 +1371,11 @@ TOKEN_LIST *GetEthListEx(UINT *total_num_including_hidden)
return NULL; return NULL;
} }
if (enum_normal == false)
{
return NullToken();
}
if (total_num_including_hidden == NULL) if (total_num_including_hidden == NULL)
{ {
total_num_including_hidden = &dummy_int; total_num_including_hidden = &dummy_int;
@ -1894,6 +1899,12 @@ bool IsPcdSupported()
UINT type; UINT type;
OS_INFO *info = GetOsInfo(); OS_INFO *info = GetOsInfo();
if (MsIsWindows10())
{
// Windows 10 or later never supports PCD driver.
return false;
}
type = info->OsType; type = info->OsType;
if (OS_IS_WINDOWS_NT(type) == false) if (OS_IS_WINDOWS_NT(type) == false)
@ -1972,11 +1983,6 @@ HINSTANCE InstallPcdDriverInternal()
src_filename = BRIDGE_WIN32_PCD_SYS_X64; src_filename = BRIDGE_WIN32_PCD_SYS_X64;
} }
if (MsIsIA64())
{
src_filename = BRIDGE_WIN32_PCD_SYS_IA64;
}
// Copy see.sys // Copy see.sys
if (FileCopy(src_filename, tmp) == false) if (FileCopy(src_filename, tmp) == false)
{ {
@ -1995,10 +2001,6 @@ HINSTANCE InstallPcdDriverInternal()
{ {
dll_filename = BRIDGE_WIN32_PCD_DLL_X64; dll_filename = BRIDGE_WIN32_PCD_DLL_X64;
} }
else if (MsIsIA64())
{
dll_filename = BRIDGE_WIN32_PCD_DLL_IA64;
}
} }
// Try to load see.dll and initialize // Try to load see.dll and initialize
@ -2142,7 +2144,7 @@ RELEASE:
return false; return false;
} }
o = GetEthListEx(&total_num); o = GetEthListEx(&total_num, true, false);
if (o == NULL || total_num == 0) if (o == NULL || total_num == 0)
{ {
FreeToken(o); FreeToken(o);
@ -2241,7 +2243,3 @@ void GetEthNetworkConnectionName(wchar_t *dst, UINT size, char *device_name)
#endif // BRIDGE_C #endif // BRIDGE_C
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -116,11 +116,9 @@
#define BRIDGE_WIN32_PACKET_DLL "Packet.dll" #define BRIDGE_WIN32_PACKET_DLL "Packet.dll"
#define BRIDGE_WIN32_PCD_DLL "|see.dll" #define BRIDGE_WIN32_PCD_DLL "|see.dll"
#define BRIDGE_WIN32_PCD_SYS "|see.sys" #define BRIDGE_WIN32_PCD_SYS "|DriverPackages\\See\\x86\\See_x86.sys"
#define BRIDGE_WIN32_PCD_DLL_X64 "|see_x64.dll" #define BRIDGE_WIN32_PCD_DLL_X64 "|see_x64.dll"
#define BRIDGE_WIN32_PCD_SYS_X64 "|see_x64.sys" #define BRIDGE_WIN32_PCD_SYS_X64 "|DriverPackages\\See\\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_REGKEY "SYSTEM\\CurrentControlSet\\services\\SEE"
#define BRIDGE_WIN32_PCD_BUILDVALUE "CurrentInstalledBuild" #define BRIDGE_WIN32_PCD_BUILDVALUE "CurrentInstalledBuild"
@ -215,6 +213,12 @@ struct ETH
SU *Su; // SeLow handle SU *Su; // SeLow handle
SU_ADAPTER *SuAdapter; // SeLow adapter handle SU_ADAPTER *SuAdapter; // SeLow adapter handle
// Unused
bool IsRawIpMode; // RAW IP mode
UCHAR RawIpMyMacAddr[6];
UCHAR RawIpYourMacAddr[6];
IP MyPhysicalIPForce;
}; };
// Function prototype // Function prototype
@ -223,7 +227,7 @@ void FreeEth();
bool IsEthSupported(); bool IsEthSupported();
bool IsEthSupportedInner(); bool IsEthSupportedInner();
TOKEN_LIST *GetEthList(); TOKEN_LIST *GetEthList();
TOKEN_LIST *GetEthListEx(UINT *total_num_including_hidden); TOKEN_LIST *GetEthListEx(UINT *total_num_including_hidden, bool enum_normal, bool enum_rawip);
ETH *OpenEth(char *name, bool local, bool tapmode, char *tapaddr); ETH *OpenEth(char *name, bool local, bool tapmode, char *tapaddr);
ETH *OpenEthInternal(char *name, bool local, bool tapmode, char *tapaddr); ETH *OpenEthInternal(char *name, bool local, bool tapmode, char *tapaddr);
void CloseEth(ETH *e); void CloseEth(ETH *e);
@ -262,7 +266,3 @@ bool Win32GetEnableSeLow();
#endif // BRIDGEWIN32_H #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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Contributors: // Contributors:
// - ELIN (https://github.com/el1n) // - ELIN (https://github.com/el1n)
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
@ -12526,7 +12526,3 @@ void *CmUpdateJumpList(UINT start_id)
#endif // WIN32 #endif // WIN32
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -156,7 +156,3 @@ UINT CmGetSecureBitmapId(char *dest_hostname);
#endif // CM_H #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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Contributors: // Contributors:
// - ELIN (https://github.com/el1n) // - ELIN (https://github.com/el1n)
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
@ -639,7 +639,3 @@ bool CmGetProxyServerNameAndPortFromIeProxyRegStr(char *name, UINT name_size, UI
void *CmUpdateJumpList(UINT start_id); 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -118,6 +118,34 @@ static UINT init_cedar_counter = 0;
static REF *cedar_log_ref = NULL; static REF *cedar_log_ref = NULL;
static LOG *cedar_log; static LOG *cedar_log;
// Check whether there is any EAP-enabled RADIUS configuration
bool CedarIsThereAnyEapEnabledRadiusConfig(CEDAR *c)
{
bool ret = false;
UINT i;
if (c == NULL)
{
return false;
}
LockHubList(c);
{
for (i = 0;i < LIST_NUM(c->HubList);i++)
{
HUB *hub = LIST_DATA(c->HubList, i);
if (hub->RadiusConvertAllMsChapv2AuthRequestToEap)
{
ret = true;
break;
}
}
}
UnlockHubList(c);
return ret;
}
// Get build date of current code // Get build date of current code
UINT64 GetCurrentBuildDate() UINT64 GetCurrentBuildDate()
{ {
@ -235,18 +263,27 @@ bool IsSupportedWinVer(RPC_WINVER *v)
} }
} }
#if 0 if ((v->VerMajor == 6 && v->VerMinor == 4) || (v->VerMajor == 10 && v->VerMinor == 0))
// Enable in future when supported
if ((v->VerMajor == 6 && v->VerMinor == 4) ||(v->VerMajor == 10 && v->VerMinor == 0))
{ {
// Windows 10, Server 10 if (v->IsServer == false)
{
// Windows 10 (not Windows Server 2016)
if (v->ServicePack <= 0) if (v->ServicePack <= 0)
{ {
// SP0 only // SP0 only
return true; return true;
} }
} }
#endif else
{
// Windows Server 2016
if (v->ServicePack <= 0)
{
// SP0 only
return true;
}
}
}
return false; return false;
} }
@ -1722,7 +1759,7 @@ CEDAR *NewCedar(X *server_x, K *server_k)
c->TrafficDiffList = NewList(NULL); c->TrafficDiffList = NewList(NULL);
SetCedarCipherList(c, "RC4-MD5"); SetCedarCipherList(c, SERVER_DEFAULT_CIPHER_NAME);
c->ClientId = _II("CLIENT_ID"); c->ClientId = _II("CLIENT_ID");
@ -1877,7 +1914,3 @@ void FreeCedar()
FreeProtocol(); FreeProtocol();
} }
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -135,10 +135,10 @@
// Version number // Version number
#define CEDAR_VER 415 #define CEDAR_VER 423
// Build Number // Build Number
#define CEDAR_BUILD 9546 #define CEDAR_BUILD 9647
// Beta number // Beta number
//#define BETA_NUMBER 3 //#define BETA_NUMBER 3
@ -153,16 +153,16 @@
// Specify the location to build // Specify the location to build
#ifndef BUILD_PLACE #ifndef BUILD_PLACE
#define BUILD_PLACE "pc30" #define BUILD_PLACE "pc37"
#endif // BUILD_PLACE #endif // BUILD_PLACE
// Specifies the build date // Specifies the build date
#define BUILD_DATE_Y 2015 #define BUILD_DATE_Y 2017
#define BUILD_DATE_M 4 #define BUILD_DATE_M 10
#define BUILD_DATE_D 5 #define BUILD_DATE_D 19
#define BUILD_DATE_HO 2 #define BUILD_DATE_HO 14
#define BUILD_DATE_MI 54 #define BUILD_DATE_MI 28
#define BUILD_DATE_SE 8 #define BUILD_DATE_SE 18
// Tolerable time difference // Tolerable time difference
#define ALLOW_TIMESTAMP_DIFF (UINT64)(3 * 24 * 60 * 60 * 1000) #define ALLOW_TIMESTAMP_DIFF (UINT64)(3 * 24 * 60 * 60 * 1000)
@ -242,7 +242,7 @@
#define FIFO_BUDGET VPN_GP(GP_FIFO_BUDGET, 1000000) #define FIFO_BUDGET VPN_GP(GP_FIFO_BUDGET, 1000000)
#endif // USE_STRATEGY_LOW_MEMORY #endif // USE_STRATEGY_LOW_MEMORY
#define MAX_PACKET_SIZE 1560 // Maximum packet size #define MAX_PACKET_SIZE 1600 // Maximum packet size
#define UDP_BUF_SIZE (32 * 1024) // Aim of the UDP packet size #define UDP_BUF_SIZE (32 * 1024) // Aim of the UDP packet size
#ifndef USE_STRATEGY_LOW_MEMORY #ifndef USE_STRATEGY_LOW_MEMORY
@ -670,7 +670,7 @@
#define ARP_ENTRY_EXPIRES (30 * 1000) // ARP table expiration date #define ARP_ENTRY_EXPIRES (30 * 1000) // ARP table expiration date
#define ARP_ENTRY_POLLING_TIME (1 * 1000) // ARP table cleaning timer #define ARP_ENTRY_POLLING_TIME (1 * 1000) // ARP table cleaning timer
#define ARP_REQUEST_TIMEOUT (200) // ARP request time-out period #define ARP_REQUEST_TIMEOUT (1000) // ARP request time-out period
#define ARP_REQUEST_GIVEUP (5 * 1000) // Time to give up sending the ARP request #define ARP_REQUEST_GIVEUP (5 * 1000) // Time to give up sending the ARP request
#define IP_WAIT_FOR_ARP_TIMEOUT (5 * 1000) // Total time that an IP packet waiting for ARP table #define IP_WAIT_FOR_ARP_TIMEOUT (5 * 1000) // Total time that an IP packet waiting for ARP table
#define IP_COMBINE_TIMEOUT (10 * 1000) // Time-out of IP packet combining #define IP_COMBINE_TIMEOUT (10 * 1000) // Time-out of IP packet combining
@ -1052,7 +1052,7 @@ typedef struct CEDAR
UINT QueueBudget; // Queue budget UINT QueueBudget; // Queue budget
LOCK *FifoBudgetLock; // Fifo budget lock LOCK *FifoBudgetLock; // Fifo budget lock
UINT FifoBudget; // Fifo budget UINT FifoBudget; // Fifo budget
bool AcceptOnlyTls; // Accept only TLS (Disable SSL) SSL_ACCEPT_SETTINGS SslAcceptSettings; // SSL Accept Settings
char OpenVPNDefaultClientOption[MAX_SIZE]; // OpenVPN Default Client Option String char OpenVPNDefaultClientOption[MAX_SIZE]; // OpenVPN Default Client Option String
} CEDAR; } CEDAR;
@ -1259,12 +1259,9 @@ UINT CedarGetQueueBudgetConsuming(CEDAR *c);
UINT CedarGetFifoBudgetConsuming(CEDAR *c); UINT CedarGetFifoBudgetConsuming(CEDAR *c);
UINT CedarGetQueueBudgetBalance(CEDAR *c); UINT CedarGetQueueBudgetBalance(CEDAR *c);
UINT CedarGetFifoBudgetBalance(CEDAR *c); UINT CedarGetFifoBudgetBalance(CEDAR *c);
bool CedarIsThereAnyEapEnabledRadiusConfig(CEDAR *c);
#endif // CEDAR_H #endif // 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/

View File

@ -46,7 +46,7 @@
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
Optimization="0" Optimization="0"
AdditionalIncludeDirectories="$(SolutionDir)Mayaqua\win32_inc;.;$(SolutionDir);WinPcap" AdditionalIncludeDirectories="$(SolutionDir)Mayaqua\win32_inc;.;$(SolutionDir);WinPcap"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_USE_32BIT_TIME_T" PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
MinimalRebuild="true" MinimalRebuild="true"
ExceptionHandling="0" ExceptionHandling="0"
BasicRuntimeChecks="3" BasicRuntimeChecks="3"
@ -188,7 +188,7 @@
EnableIntrinsicFunctions="false" EnableIntrinsicFunctions="false"
FavorSizeOrSpeed="0" FavorSizeOrSpeed="0"
AdditionalIncludeDirectories="$(SolutionDir)Mayaqua\win32_inc;.;$(SolutionDir);WinPcap" AdditionalIncludeDirectories="$(SolutionDir)Mayaqua\win32_inc;.;$(SolutionDir);WinPcap"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_USE_32BIT_TIME_T;VPN_SPEED" PreprocessorDefinitions="WIN32;NDEBUG;_LIB;VPN_SPEED"
StringPooling="false" StringPooling="false"
ExceptionHandling="0" ExceptionHandling="0"
RuntimeLibrary="0" RuntimeLibrary="0"

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -113,7 +113,3 @@
#include "CedarPch.h" #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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -124,7 +124,3 @@
#include <Mayaqua/Mayaqua.h> #include <Mayaqua/Mayaqua.h>
#include <Cedar/Cedar.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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -142,6 +142,16 @@ typedef struct AUTHNT AUTHNT;
// ============================================================== // ==============================================================
typedef struct RADIUS_LOGIN_OPTION RADIUS_LOGIN_OPTION; typedef struct RADIUS_LOGIN_OPTION RADIUS_LOGIN_OPTION;
typedef struct RADIUS_PACKET RADIUS_PACKET;
typedef struct RADIUS_AVP RADIUS_AVP;
typedef struct EAP_CLIENT EAP_CLIENT;
typedef struct EAP_MESSAGE EAP_MESSAGE;
typedef struct EAP_MSCHAPV2_GENERAL EAP_MSCHAPV2_GENERAL;
typedef struct EAP_MSCHAPV2_CHALLENGE EAP_MSCHAPV2_CHALLENGE;
typedef struct EAP_MSCHAPV2_RESPONSE EAP_MSCHAPV2_RESPONSE;
typedef struct EAP_MSCHAPV2_SUCCESS_SERVER EAP_MSCHAPV2_SUCCESS_SERVER;
typedef struct EAP_MSCHAPV2_SUCCESS_CLIENT EAP_MSCHAPV2_SUCCESS_CLIENT;
typedef struct EAP_PEAP EAP_PEAP;
// ============================================================== // ==============================================================
@ -528,6 +538,8 @@ typedef struct CTC CTC;
typedef struct CTR CTR; typedef struct CTR CTR;
typedef struct TTC TTC; typedef struct TTC TTC;
typedef struct TTS TTS; typedef struct TTS TTS;
typedef struct TTS_WORKER TTS_WORKER;
typedef struct TTC_WORKER TTC_WORKER;
typedef struct TT_RESULT TT_RESULT; typedef struct TT_RESULT TT_RESULT;
typedef struct TTS_SOCK TTS_SOCK; typedef struct TTS_SOCK TTS_SOCK;
typedef struct TTC_SOCK TTC_SOCK; typedef struct TTC_SOCK TTC_SOCK;
@ -738,6 +750,8 @@ typedef struct MIRROR_SERVER MIRROR_SERVER;
// ============================================================== // ==============================================================
typedef struct NATIVE_STACK NATIVE_STACK; typedef struct NATIVE_STACK NATIVE_STACK;
typedef struct IPTABLES_STATE IPTABLES_STATE;
typedef struct IPTABLES_ENTRY IPTABLES_ENTRY;
// ============================================================== // ==============================================================
@ -751,7 +765,3 @@ typedef struct SU_ADAPTER_LIST SU_ADAPTER_LIST;
#endif // CEDARTYPE_H #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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Contributors: // Contributors:
// - nattoheaven (https://github.com/nattoheaven) // - nattoheaven (https://github.com/nattoheaven)
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
@ -2181,13 +2181,14 @@ BUF *CiAccountToCfg(RPC_CLIENT_CREATE_ACCOUNT *t)
// RPC dispatch routine // RPC dispatch routine
PACK *CiRpcDispatch(RPC *rpc, char *name, PACK *p) PACK *CiRpcDispatch(RPC *rpc, char *name, PACK *p)
{ {
CLIENT *c = rpc->Param;
PACK *ret; PACK *ret;
CLIENT *c;
// Validate arguments // Validate arguments
if (rpc == NULL || name == NULL || p == NULL) if (rpc == NULL || name == NULL || p == NULL)
{ {
return NULL; return NULL;
} }
c = rpc->Param;
ret = NewPack(); ret = NewPack();
@ -6029,12 +6030,13 @@ L_TRY:
ReleaseSock(s); ReleaseSock(s);
ret = ZeroMalloc(sizeof(REMOTE_CLIENT)); ret = ZeroMalloc(sizeof(REMOTE_CLIENT));
ret->Rpc = rpc;
rpc->Param = ret; rpc->Param = ret;
if (ret != NULL) if (ret != NULL)
{ {
RPC_CLIENT_VERSION t; RPC_CLIENT_VERSION t;
ret->Rpc = rpc;
Zero(&t, sizeof(t)); Zero(&t, sizeof(t));
CcGetClientVersion(ret, &t); CcGetClientVersion(ret, &t);
ret->OsType = t.OsType; ret->OsType = t.OsType;
@ -6487,7 +6489,7 @@ bool Win32CiSecureSign(SECURE_SIGN *sign)
// Success // Success
ret = true; ret = true;
sign->ClientCert = batch[0].OutputX; sign->ClientCert = batch[0].OutputX;
Copy(sign->Signature, batch[1].OutputSign, 128); Copy(sign->Signature, batch[1].OutputSign, MIN(sizeof(sign->Signature),sizeof(batch[1].OutputSign)));
} }
} }
@ -6661,7 +6663,7 @@ bool CtConnect(CLIENT *c, RPC_CLIENT_CONNECT *connect)
CiSetError(c, ERR_ACCOUNT_ACTIVE); CiSetError(c, ERR_ACCOUNT_ACTIVE);
} }
else if (r->ClientAuth->AuthType == CLIENT_AUTHTYPE_SECURE && else if (r->ClientAuth->AuthType == CLIENT_AUTHTYPE_SECURE &&
client->UseSecureDeviceId == 0) c->UseSecureDeviceId == 0)
{ {
// Secure device is not specified // Secure device is not specified
CiSetError(c, ERR_NO_SECURE_DEVICE_SPECIFIED); CiSetError(c, ERR_NO_SECURE_DEVICE_SPECIFIED);
@ -8450,7 +8452,7 @@ bool CtCreateVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *create)
return false; return false;
} }
// Regulation in Windows 8 // Regulation in Windows 8 / 10
if (MsIsInfCatalogRequired()) if (MsIsInfCatalogRequired())
{ {
if (CiIsValidVLanRegulatedName(create->DeviceName) == false) if (CiIsValidVLanRegulatedName(create->DeviceName) == false)
@ -11110,7 +11112,3 @@ void CiClientStatusPrinter(SESSION *s, wchar_t *status)
} }
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -878,7 +878,3 @@ void CiInitDriverVerStruct(MS_DRIVER_VER *ver);
#endif // CLIENT_H #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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -1166,6 +1166,7 @@ void TtGenerateRandomData(UCHAR **buf, UINT *size)
void TtsWorkerThread(THREAD *thread, void *param) void TtsWorkerThread(THREAD *thread, void *param)
{ {
TTS *tts; TTS *tts;
TTS_WORKER *w;
UINT buf_size; UINT buf_size;
UCHAR *send_buf_data, *recv_buf_data; UCHAR *send_buf_data, *recv_buf_data;
bool all_sockets_blocked = false; bool all_sockets_blocked = false;
@ -1185,14 +1186,15 @@ void TtsWorkerThread(THREAD *thread, void *param)
TtGenerateRandomData(&send_buf_data, &buf_size); TtGenerateRandomData(&send_buf_data, &buf_size);
TtGenerateRandomData(&recv_buf_data, &buf_size); TtGenerateRandomData(&recv_buf_data, &buf_size);
tts = (TTS *)param; w = (TTS_WORKER *)param;
tts = (TTS *)w->Tts;
// Preparation of socket events // Preparation of socket events
tts->SockEvent = NewSockEvent(); w->SockEvent = NewSockEvent();
AddRef(tts->SockEvent->ref); AddRef(w->SockEvent->ref);
// Preparing the Server socket list // Preparing the Server socket list
tts->TtsSockList = NewList(NULL); w->TtsSockList = NewList(NULL);
// Notify completion of preparation to parent thread // Notify completion of preparation to parent thread
NoticeThreadInit(thread); NoticeThreadInit(thread);
@ -1206,12 +1208,12 @@ void TtsWorkerThread(THREAD *thread, void *param)
// Wait for all sockets // Wait for all sockets
if (dont_block_next_time == false) if (dont_block_next_time == false)
{ {
WaitSockEvent(tts->SockEvent, 50); WaitSockEvent(w->SockEvent, 50);
} }
dont_block_next_time = false; dont_block_next_time = false;
// Process for sockets that are currently registered // Process for sockets that are currently registered
LockList(tts->TtsSockList); LockList(w->TtsSockList);
{ {
UINT i; UINT i;
@ -1223,17 +1225,17 @@ void TtsWorkerThread(THREAD *thread, void *param)
{ {
all_sockets_blocked = true; all_sockets_blocked = true;
for (i = 0;i < LIST_NUM(tts->TtsSockList);i++) for (i = 0;i < LIST_NUM(w->TtsSockList);i++)
{ {
UINT ret = SOCK_LATER; UINT ret = SOCK_LATER;
UCHAR *send_data = NULL, *recv_data = NULL; UCHAR *send_data = NULL, *recv_data = NULL;
UINT send_size = 0, recv_size = 0; UINT send_size = 0, recv_size = 0;
TTS_SOCK *ts = LIST_DATA(tts->TtsSockList, i); TTS_SOCK *ts = LIST_DATA(w->TtsSockList, i);
bool blocked_for_this_socket = false; bool blocked_for_this_socket = false;
if (ts->SockJoined == false) if (ts->SockJoined == false)
{ {
JoinSockToSockEvent(ts->Sock, tts->SockEvent); JoinSockToSockEvent(ts->Sock, w->SockEvent);
ts->SockJoined = true; ts->SockJoined = true;
} }
@ -1245,6 +1247,7 @@ void TtsWorkerThread(THREAD *thread, void *param)
if (ret != 0 && ret != SOCK_LATER) if (ret != 0 && ret != SOCK_LATER)
{ {
ts->State = 5; ts->State = 5;
ts->LastCommTime = now;
} }
break; break;
@ -1255,6 +1258,8 @@ void TtsWorkerThread(THREAD *thread, void *param)
{ {
UCHAR c; UCHAR c;
ts->LastCommTime = now;
// Direction of the data is in the first byte that is received // Direction of the data is in the first byte that is received
c = recv_buf_data[0]; c = recv_buf_data[0];
@ -1276,6 +1281,8 @@ void TtsWorkerThread(THREAD *thread, void *param)
// Span // Span
ts->Span = READ_UINT64(recv_buf_data + sizeof(UINT64) + 1); ts->Span = READ_UINT64(recv_buf_data + sizeof(UINT64) + 1);
ts->GiveupSpan = ts->Span * 3ULL + 180000ULL;
} }
} }
break; break;
@ -1289,6 +1296,8 @@ void TtsWorkerThread(THREAD *thread, void *param)
// Checking the first byte of received // Checking the first byte of received
UCHAR c = recv_buf_data[0]; UCHAR c = recv_buf_data[0];
ts->LastCommTime = now;
if (ts->FirstRecvTick == 0) if (ts->FirstRecvTick == 0)
{ {
// Record the time at which the data has been received for the first // Record the time at which the data has been received for the first
@ -1326,11 +1335,42 @@ void TtsWorkerThread(THREAD *thread, void *param)
if (ts->NoMoreSendData == false) if (ts->NoMoreSendData == false)
{ {
ret = Send(ts->Sock, send_buf_data, buf_size, false); ret = Send(ts->Sock, send_buf_data, buf_size, false);
if (ret != 0 && ret != SOCK_LATER)
{
ts->LastCommTime = now;
}
} }
else else
{ {
ret = Recv(ts->Sock, recv_buf_data, buf_size, false); ret = Recv(ts->Sock, recv_buf_data, buf_size, false);
if (ret != 0 && ret != SOCK_LATER)
{
ts->LastCommTime = now;
} }
}
if (ts->FirstSendTick == 0)
{
ts->FirstSendTick = now;
}
else
{
if (ts->FirstSendTick <= now)
{
if (ts->Span != 0)
{
UINT64 giveup_tick = ts->FirstSendTick + ts->Span * 3ULL + 180000ULL;
if (now > giveup_tick)
{
ret = 0;
}
}
}
}
break; break;
case 3: case 3:
@ -1343,6 +1383,11 @@ void TtsWorkerThread(THREAD *thread, void *param)
{ {
ret = Send(ts->Sock, &tmp64, sizeof(tmp64), false); ret = Send(ts->Sock, &tmp64, sizeof(tmp64), false);
if (ret != 0 && ret != SOCK_LATER)
{
ts->LastCommTime = now;
}
if (ret != SOCK_LATER) if (ret != SOCK_LATER)
{ {
UINT j; UINT j;
@ -1353,9 +1398,9 @@ void TtsWorkerThread(THREAD *thread, void *param)
{ {
// Not to send more data to the socket of the // Not to send more data to the socket of the
// transmission direction in the same session ID // transmission direction in the same session ID
for (j = 0;j < LIST_NUM(tts->TtsSockList);j++) for (j = 0;j < LIST_NUM(w->TtsSockList);j++)
{ {
TTS_SOCK *ts2 = LIST_DATA(tts->TtsSockList, j); TTS_SOCK *ts2 = LIST_DATA(w->TtsSockList, j);
if (ts2->SessionId == ts->SessionId && if (ts2->SessionId == ts->SessionId &&
ts2 != ts) ts2 != ts)
@ -1369,6 +1414,12 @@ void TtsWorkerThread(THREAD *thread, void *param)
break; break;
} }
if (now > (ts->LastCommTime + ts->GiveupSpan))
{
// Timeout: disconnect orphan sessions
ret = 0;
}
if (ret == 0) if (ret == 0)
{ {
// Mark as deleting the socket because it is disconnected // Mark as deleting the socket because it is disconnected
@ -1408,7 +1459,7 @@ void TtsWorkerThread(THREAD *thread, void *param)
Disconnect(ts->Sock); Disconnect(ts->Sock);
ReleaseSock(ts->Sock); ReleaseSock(ts->Sock);
Delete(tts->TtsSockList, ts); Delete(w->TtsSockList, ts);
Free(ts); Free(ts);
} }
@ -1416,23 +1467,23 @@ void TtsWorkerThread(THREAD *thread, void *param)
DeleteAll(o); DeleteAll(o);
} }
if (tts->NewSocketArrived || tts->Halt) if (w->NewSocketArrived || tts->Halt)
{ {
tts->NewSocketArrived = false; w->NewSocketArrived = false;
all_sockets_blocked = true; all_sockets_blocked = true;
dont_block_next_time = true; dont_block_next_time = true;
} }
} }
} }
UnlockList(tts->TtsSockList); UnlockList(w->TtsSockList);
} }
LockList(tts->TtsSockList); LockList(w->TtsSockList);
{ {
// Release the sockets of all remaining // Release the sockets of all remaining
for (i = 0;i < LIST_NUM(tts->TtsSockList);i++) for (i = 0;i < LIST_NUM(w->TtsSockList);i++)
{ {
TTS_SOCK *ts = LIST_DATA(tts->TtsSockList, i); TTS_SOCK *ts = LIST_DATA(w->TtsSockList, i);
UniFormat(tmp, sizeof(tmp), _UU("TTS_DISCONNECT"), ts->Id, ts->Sock->RemoteHostname); UniFormat(tmp, sizeof(tmp), _UU("TTS_DISCONNECT"), ts->Id, ts->Sock->RemoteHostname);
TtPrint(tts->Param, tts->Print, tmp); TtPrint(tts->Param, tts->Print, tmp);
@ -1443,12 +1494,12 @@ void TtsWorkerThread(THREAD *thread, void *param)
Free(ts); Free(ts);
} }
} }
UnlockList(tts->TtsSockList); UnlockList(w->TtsSockList);
// Cleanup // Cleanup
ReleaseList(o); ReleaseList(o);
ReleaseList(tts->TtsSockList); ReleaseList(w->TtsSockList);
ReleaseSockEvent(tts->SockEvent); ReleaseSockEvent(w->SockEvent);
Free(send_buf_data); Free(send_buf_data);
Free(recv_buf_data); Free(recv_buf_data);
} }
@ -1470,6 +1521,7 @@ void TtsIPv6AcceptThread(THREAD *thread, void *param)
void TtsAcceptProc(TTS *tts, SOCK *listen_socket) void TtsAcceptProc(TTS *tts, SOCK *listen_socket)
{ {
wchar_t tmp[MAX_SIZE]; wchar_t tmp[MAX_SIZE];
UINT seed = 0;
// Validate arguments // Validate arguments
if (tts == NULL || listen_socket == NULL) if (tts == NULL || listen_socket == NULL)
{ {
@ -1492,26 +1544,42 @@ void TtsAcceptProc(TTS *tts, SOCK *listen_socket)
} }
else else
{ {
UINT num, i;
TTS_WORKER *w;
// Connected from the client // Connected from the client
AcceptInit(s); AcceptInitEx(s, true);
tts->NewSocketArrived = true;
LockList(tts->TtsSockList); // Choose a worker thread
num = LIST_NUM(tts->WorkerList);
i = seed % num;
seed++;
w = LIST_DATA(tts->WorkerList, i);
w->NewSocketArrived = true;
LockList(w->TtsSockList);
{ {
TTS_SOCK *ts = ZeroMalloc(sizeof(TTS_SOCK)); TTS_SOCK *ts = ZeroMalloc(sizeof(TTS_SOCK));
ts->Id = (++tts->IdSeed); ts->Id = (++tts->IdSeed);
ts->Sock = s; ts->Sock = s;
ts->GiveupSpan = (UINT64)(10 * 60 * 1000);
ts->LastCommTime = Tick64();
UniFormat(tmp, sizeof(tmp), _UU("TTS_ACCEPTED"), ts->Id, UniFormat(tmp, sizeof(tmp), _UU("TTS_ACCEPTED"), ts->Id,
s->RemoteHostname, s->RemotePort); s->RemoteHostname, s->RemotePort);
TtPrint(tts->Param, tts->Print, tmp); TtPrint(tts->Param, tts->Print, tmp);
Insert(tts->TtsSockList, ts); Insert(w->TtsSockList, ts);
tts->NewSocketArrived = true; w->NewSocketArrived = true;
} }
UnlockList(tts->TtsSockList); UnlockList(w->TtsSockList);
SetSockEvent(tts->SockEvent); SetSockEvent(w->SockEvent);
} }
} }
} }
@ -1546,6 +1614,8 @@ void TtsListenThread(THREAD *thread, void *param)
} }
else else
{ {
UINT i, num_worker_threads;
UniFormat(tmp, sizeof(tmp), _UU("TTS_LISTEN_STARTED"), tts->Port); UniFormat(tmp, sizeof(tmp), _UU("TTS_LISTEN_STARTED"), tts->Port);
TtPrint(tts->Param, tts->Print, tmp); TtPrint(tts->Param, tts->Print, tmp);
@ -1569,9 +1639,19 @@ void TtsListenThread(THREAD *thread, void *param)
AddRef(tts->ListenSocketV6->ref); AddRef(tts->ListenSocketV6->ref);
} }
// Start the worker thread num_worker_threads = GetNumberOfCpu();
tts->WorkThread = NewThread(TtsWorkerThread, tts);
WaitThreadInit(tts->WorkThread); // Start the worker threads
for (i = 0;i < num_worker_threads;i++)
{
TTS_WORKER *w = ZeroMalloc(sizeof(TTS_WORKER));
w->Tts = tts;
w->WorkThread = NewThread(TtsWorkerThread, w);
WaitThreadInit(w->WorkThread);
Add(tts->WorkerList, w);
}
// Notify completion of preparation to parent thread // Notify completion of preparation to parent thread
NoticeThreadInit(thread); NoticeThreadInit(thread);
@ -1595,12 +1675,20 @@ void TtsListenThread(THREAD *thread, void *param)
ReleaseSock(tts->ListenSocket); ReleaseSock(tts->ListenSocket);
ReleaseSock(tts->ListenSocketV6); ReleaseSock(tts->ListenSocketV6);
SetSockEvent(tts->SockEvent);
for (i = 0;i < LIST_NUM(tts->WorkerList);i++)
{
TTS_WORKER *w = LIST_DATA(tts->WorkerList, i);
SetSockEvent(w->SockEvent);
// Wait for stopping the worker thread // Wait for stopping the worker thread
WaitThread(tts->WorkThread, INFINITE); WaitThread(w->WorkThread, INFINITE);
ReleaseThread(tts->WorkThread); ReleaseThread(w->WorkThread);
ReleaseSockEvent(tts->SockEvent); ReleaseSockEvent(w->SockEvent);
Free(w);
}
} }
} }
@ -1685,7 +1773,6 @@ void StopTtc(TTC *ttc)
TtPrint(ttc->Param, ttc->Print, _UU("TTC_STOPPING")); TtPrint(ttc->Param, ttc->Print, _UU("TTC_STOPPING"));
ttc->Halt = true; ttc->Halt = true;
SetSockEvent(ttc->SockEvent);
} }
// Generate a result // Generate a result
@ -1748,136 +1835,36 @@ void TtcGenerateResult(TTC *ttc)
res->BpsTotal = res->BpsUpload + res->BpsDownload; res->BpsTotal = res->BpsUpload + res->BpsDownload;
} }
// Client thread // Client worker thread
void TtcThread(THREAD *thread, void *param) void TtcWorkerThread(THREAD *thread, void *param)
{ {
TTC_WORKER *w;
TTC *ttc; TTC *ttc;
UINT i; bool dont_block_next_time = false;
bool halting = false;
UINT64 halt_timeout = 0;
bool all_sockets_blocked;
wchar_t tmp[MAX_SIZE]; wchar_t tmp[MAX_SIZE];
bool ok = false;
UINT buf_size;
UCHAR *send_buf_data, *recv_buf_data; UCHAR *send_buf_data, *recv_buf_data;
// Validate arguments UINT buf_size;
UINT64 tmp64;
if (thread == NULL || param == NULL) if (thread == NULL || param == NULL)
{ {
return; return;
} }
w = (TTC_WORKER *)param;
ttc = w->Ttc;
// Allocate the data area // Allocate the data area
TtGenerateRandomData(&send_buf_data, &buf_size); TtGenerateRandomData(&send_buf_data, &buf_size);
TtGenerateRandomData(&recv_buf_data, &buf_size); TtGenerateRandomData(&recv_buf_data, &buf_size);
ttc = (TTC *)param;
ttc->SockEvent = NewSockEvent();
AddRef(ttc->SockEvent->ref);
// Ready
NoticeThreadInit(thread); NoticeThreadInit(thread);
TtcPrintSummary(ttc); // Wait for start
Wait(w->StartEvent, INFINITE);
UniFormat(tmp, sizeof(tmp), _UU("TTC_CONNECT_START"),
ttc->Host, ttc->Port, ttc->NumTcp);
TtPrint(ttc->Param, ttc->Print, tmp);
// Establish all connections to the client
ttc->ItcSockList = NewList(NULL);
ok = true;
for (i = 0;i < ttc->NumTcp;i++)
{
SOCK *s;
TTC_SOCK *ts = ZeroMalloc(sizeof(TTC_SOCK));
ts->Id = i + 1;
if (ttc->Type == TRAFFIC_TYPE_DOWNLOAD)
{
ts->Download = true;
}
else if (ttc->Type == TRAFFIC_TYPE_UPLOAD)
{
ts->Download = false;
}
else
{
ts->Download = ((i % 2) == 0) ? true : false;
}
s = ConnectEx2(ttc->Host, ttc->Port, 0, ttc->Cancel);
if (s == NULL)
{
UniFormat(tmp, sizeof(tmp), _UU("TTC_CONNECT_FAILED"), i + 1);
TtPrint(ttc->Param, ttc->Print, tmp);
ok = false;
Free(ts);
break;
}
else
{
char buffer[TRAFFIC_VER_STR_SIZE];
SetTimeout(s, 5000);
Zero(buffer, sizeof(buffer));
if (Recv(s, buffer, sizeof(buffer), false) != sizeof(buffer) || Cmp(buffer, TRAFFIC_VER_STR, TRAFFIC_VER_STR_SIZE) != 0)
{
TtPrint(ttc->Param, ttc->Print, _UU("TTC_CONNECT_NOT_SERVER"));
ok = false;
ReleaseSock(s);
Free(ts);
break;
}
UniFormat(tmp, sizeof(tmp), _UU("TTC_CONNECT_OK"), i + 1);
TtPrint(ttc->Param, ttc->Print, tmp);
UniFormat(tmp, sizeof(tmp), _UU("TTC_CONNECT_OK_2"), GetTtcTypeStr(ts->Download ? TRAFFIC_TYPE_DOWNLOAD : TRAFFIC_TYPE_UPLOAD));
TtPrint(ttc->Param, ttc->Print, tmp);
ts->Sock = s;
SetTimeout(s, TIMEOUT_INFINITE);
JoinSockToSockEvent(s, ttc->SockEvent);
}
Insert(ttc->ItcSockList, ts);
}
Set(ttc->InitedEvent);
if (ttc->StartEvent != NULL)
{
Wait(ttc->StartEvent, INFINITE);
SleepThread(500);
}
if (ok)
{
bool all_sockets_blocked;
bool dont_block_next_time = false;
bool halt_flag = false;
UINT64 start_tick, end_tick;
UINT64 halt_timeout = 0;
wchar_t tmp1[MAX_SIZE], tmp2[MAX_SIZE];
UINT check_clock_seed = 0;
bool halting = false;
UINT64 tmp64;
UINT64 session_id = Rand64();
// Record the current time
start_tick = Tick64();
end_tick = start_tick + ttc->Span;
// Show start message
GetDateTimeStrEx64(tmp1, sizeof(tmp1), SystemToLocal64(TickToTime(start_tick)), NULL);
GetDateTimeStrEx64(tmp2, sizeof(tmp2), SystemToLocal64(TickToTime(end_tick)), NULL);
UniFormat(tmp, sizeof(tmp), _UU("TTC_COMM_START"), tmp1, tmp2);
TtPrint(ttc->Param, ttc->Print, tmp);
// Main loop // Main loop
while (true) while (true)
@ -1886,7 +1873,7 @@ void TtcThread(THREAD *thread, void *param)
if (dont_block_next_time == false) if (dont_block_next_time == false)
{ {
WaitSockEvent(ttc->SockEvent, 50); WaitSockEvent(w->SockEvent, 50);
} }
dont_block_next_time = false; dont_block_next_time = false;
@ -1897,25 +1884,34 @@ void TtcThread(THREAD *thread, void *param)
break; break;
} }
if (ttc->Halt || end_tick <= Tick64() || (ttc->Cancel != NULL && (*ttc->Cancel))) if (ttc->Halt || ttc->end_tick <= Tick64() || (ttc->Cancel != NULL && (*ttc->Cancel)))
{ {
// End measurement // End measurement
if (halting == false) if (halting == false)
{ {
if (ttc->Halt || (ttc->Cancel != NULL && (*ttc->Cancel))) if (ttc->Halt || (ttc->Cancel != NULL && (*ttc->Cancel)))
{
if ((ttc->flag1++) == 0)
{ {
// User cancel // User cancel
TtPrint(ttc->Param, ttc->Print, _UU("TTC_COMM_USER_CANCEL")); TtPrint(ttc->Param, ttc->Print, _UU("TTC_COMM_USER_CANCEL"));
} }
}
else else
{ {
// Time elapsed // Time elapsed
if ((ttc->flag2++) == 0)
{
UniFormat(tmp, sizeof(tmp), _UU("TTC_COMM_END"), UniFormat(tmp, sizeof(tmp), _UU("TTC_COMM_END"),
(double)ttc->Span / 1000.0); (double)ttc->Span / 1000.0);
TtPrint(ttc->Param, ttc->Print, tmp); TtPrint(ttc->Param, ttc->Print, tmp);
} }
}
ttc->RealSpan = Tick64() - start_tick; if (ttc->RealSpan == 0)
{
ttc->RealSpan = Tick64() - ttc->start_tick;
}
halting = true; halting = true;
@ -1929,9 +1925,9 @@ void TtcThread(THREAD *thread, void *param)
bool ok = true; bool ok = true;
// Wait that all TCP connections to finish processing // Wait that all TCP connections to finish processing
for (i = 0;i < LIST_NUM(ttc->ItcSockList);i++) for (i = 0;i < LIST_NUM(w->SockList);i++)
{ {
TTC_SOCK *ts = LIST_DATA(ttc->ItcSockList, i); TTC_SOCK *ts = LIST_DATA(w->SockList, i);
if (ts->Download == false) if (ts->Download == false)
{ {
@ -1945,8 +1941,7 @@ void TtcThread(THREAD *thread, void *param)
if (ok) if (ok)
{ {
// Measurement completed // Measurement completed
// Show the result w->Ok = true;
TtcGenerateResult(ttc);
break; break;
} }
else else
@ -1969,10 +1964,10 @@ void TtcThread(THREAD *thread, void *param)
{ {
all_sockets_blocked = true; all_sockets_blocked = true;
for (i = 0;i < LIST_NUM(ttc->ItcSockList);i++) for (i = 0;i < LIST_NUM(w->SockList);i++)
{ {
UINT ret = SOCK_LATER; UINT ret = SOCK_LATER;
TTC_SOCK *ts = LIST_DATA(ttc->ItcSockList, i); TTC_SOCK *ts = LIST_DATA(w->SockList, i);
bool blocked_for_this_socket = false; bool blocked_for_this_socket = false;
UCHAR c = 0; UCHAR c = 0;
UCHAR c_and_session_id[1 + sizeof(UINT64) + sizeof(UINT64)]; UCHAR c_and_session_id[1 + sizeof(UINT64) + sizeof(UINT64)];
@ -2015,7 +2010,7 @@ void TtcThread(THREAD *thread, void *param)
} }
c_and_session_id[0] = c; c_and_session_id[0] = c;
WRITE_UINT64(c_and_session_id + 1, session_id); WRITE_UINT64(c_and_session_id + 1, ttc->session_id);
WRITE_UINT64(c_and_session_id + sizeof(UINT64) + 1, ttc->Span); WRITE_UINT64(c_and_session_id + sizeof(UINT64) + 1, ttc->Span);
ret = Send(ts->Sock, c_and_session_id, 1 + sizeof(UINT64) + sizeof(UINT64), false); ret = Send(ts->Sock, c_and_session_id, 1 + sizeof(UINT64) + sizeof(UINT64), false);
@ -2123,13 +2118,231 @@ void TtcThread(THREAD *thread, void *param)
dont_block_next_time = true; dont_block_next_time = true;
} }
if (end_tick <= Tick64()) if (ttc->end_tick <= Tick64())
{ {
all_sockets_blocked = true; all_sockets_blocked = true;
dont_block_next_time = true; dont_block_next_time = true;
} }
} }
} }
Free(send_buf_data);
Free(recv_buf_data);
}
// Client thread
void TtcThread(THREAD *thread, void *param)
{
TTC *ttc;
UINT i;
wchar_t tmp[MAX_SIZE];
bool ok = false;
IP ip_ret;
// Validate arguments
if (thread == NULL || param == NULL)
{
return;
}
ttc = (TTC *)param;
// Ready
NoticeThreadInit(thread);
TtcPrintSummary(ttc);
UniFormat(tmp, sizeof(tmp), _UU("TTC_CONNECT_START"),
ttc->Host, ttc->Port, ttc->NumTcp);
TtPrint(ttc->Param, ttc->Print, tmp);
// Establish all connections to the client
ttc->ItcSockList = NewList(NULL);
ok = true;
Zero(&ip_ret, sizeof(ip_ret));
for (i = 0;i < ttc->NumTcp;i++)
{
SOCK *s;
TTC_SOCK *ts = ZeroMalloc(sizeof(TTC_SOCK));
char target_host[MAX_SIZE];
ts->Id = i + 1;
if (ttc->Type == TRAFFIC_TYPE_DOWNLOAD)
{
ts->Download = true;
}
else if (ttc->Type == TRAFFIC_TYPE_UPLOAD)
{
ts->Download = false;
}
else
{
ts->Download = ((i % 2) == 0) ? true : false;
}
StrCpy(target_host, sizeof(target_host), ttc->Host);
if (IsZeroIp(&ip_ret) == false)
{
IPToStr(target_host, sizeof(target_host), &ip_ret);
}
s = ConnectEx4(target_host, ttc->Port, 0, ttc->Cancel, NULL, NULL, false, false, true, &ip_ret);
if (s == NULL)
{
UniFormat(tmp, sizeof(tmp), _UU("TTC_CONNECT_FAILED"), i + 1);
TtPrint(ttc->Param, ttc->Print, tmp);
ok = false;
Free(ts);
break;
}
else
{
char buffer[TRAFFIC_VER_STR_SIZE];
SetTimeout(s, 5000);
Zero(buffer, sizeof(buffer));
if (Recv(s, buffer, sizeof(buffer), false) != sizeof(buffer) || Cmp(buffer, TRAFFIC_VER_STR, TRAFFIC_VER_STR_SIZE) != 0)
{
TtPrint(ttc->Param, ttc->Print, _UU("TTC_CONNECT_NOT_SERVER"));
ok = false;
ReleaseSock(s);
Free(ts);
break;
}
UniFormat(tmp, sizeof(tmp), _UU("TTC_CONNECT_OK"), i + 1);
TtPrint(ttc->Param, ttc->Print, tmp);
UniFormat(tmp, sizeof(tmp), _UU("TTC_CONNECT_OK_2"), GetTtcTypeStr(ts->Download ? TRAFFIC_TYPE_DOWNLOAD : TRAFFIC_TYPE_UPLOAD));
TtPrint(ttc->Param, ttc->Print, tmp);
ts->Sock = s;
SetTimeout(s, TIMEOUT_INFINITE);
}
Insert(ttc->ItcSockList, ts);
}
Set(ttc->InitedEvent);
if (ttc->StartEvent != NULL)
{
Wait(ttc->StartEvent, INFINITE);
SleepThread(500);
}
if (ok)
{
UINT64 start_tick, end_tick;
UINT64 halt_timeout = 0;
wchar_t tmp1[MAX_SIZE], tmp2[MAX_SIZE];
UINT check_clock_seed = 0;
bool halting = false;
UINT64 session_id = Rand64();
UINT i, num_cpu;
bool all_ok = false;
ttc->session_id = session_id;
num_cpu = GetNumberOfCpu();
ttc->WorkerThreadList = NewList(NULL);
for (i = 0;i < num_cpu;i++)
{
TTC_WORKER *w = ZeroMalloc(sizeof(TTC_WORKER));
w->Ttc = ttc;
w->SockList = NewList(NULL);
w->StartEvent = NewEvent();
w->SockEvent = NewSockEvent();
w->WorkerThread = NewThread(TtcWorkerThread, w);
WaitThreadInit(w->WorkerThread);
Add(ttc->WorkerThreadList, w);
}
// Assign each of sockets to each of worker threads
for (i = 0;i < LIST_NUM(ttc->ItcSockList);i++)
{
TTC_SOCK *ts = LIST_DATA(ttc->ItcSockList, i);
UINT num = LIST_NUM(ttc->WorkerThreadList);
UINT j = i % num;
TTC_WORKER *w = LIST_DATA(ttc->WorkerThreadList, j);
Add(w->SockList, ts);
JoinSockToSockEvent(ts->Sock, w->SockEvent);
}
// Record the current time
start_tick = Tick64();
end_tick = start_tick + ttc->Span;
ttc->start_tick = start_tick;
ttc->end_tick = end_tick;
// Set the start event for all worker threads
for (i = 0;i < LIST_NUM(ttc->WorkerThreadList);i++)
{
TTC_WORKER *w = LIST_DATA(ttc->WorkerThreadList, i);
Set(w->StartEvent);
}
// Show start message
GetDateTimeStrEx64(tmp1, sizeof(tmp1), SystemToLocal64(TickToTime(start_tick)), NULL);
GetDateTimeStrEx64(tmp2, sizeof(tmp2), SystemToLocal64(TickToTime(end_tick)), NULL);
UniFormat(tmp, sizeof(tmp), _UU("TTC_COMM_START"), tmp1, tmp2);
TtPrint(ttc->Param, ttc->Print, tmp);
// Wait for all worker threads finish
all_ok = true;
for (i = 0;i < LIST_NUM(ttc->WorkerThreadList);i++)
{
TTC_WORKER *w = LIST_DATA(ttc->WorkerThreadList, i);
WaitThread(w->WorkerThread, INFINITE);
if (w->Ok == false)
{
all_ok = false;
}
}
if (all_ok)
{
// Measurement completed
// Show the result
TtcGenerateResult(ttc);
}
// Release worker threads
for (i = 0;i < LIST_NUM(ttc->WorkerThreadList);i++)
{
TTC_WORKER *w = LIST_DATA(ttc->WorkerThreadList, i);
ReleaseThread(w->WorkerThread);
ReleaseEvent(w->StartEvent);
ReleaseList(w->SockList);
ReleaseSockEvent(w->SockEvent);
Free(w);
}
ReleaseList(ttc->WorkerThreadList);
ttc->WorkerThreadList = NULL;
} }
else else
{ {
@ -2148,10 +2361,7 @@ void TtcThread(THREAD *thread, void *param)
Free(ts); Free(ts);
} }
ReleaseSockEvent(ttc->SockEvent);
ReleaseList(ttc->ItcSockList); ReleaseList(ttc->ItcSockList);
Free(send_buf_data);
Free(recv_buf_data);
} }
// Start the communication throughput measurement client // Start the communication throughput measurement client
@ -2217,7 +2427,6 @@ UINT FreeTtc(TTC *ttc, TT_RESULT *result)
} }
} }
ReleaseSockEvent(ttc->SockEvent);
ReleaseEvent(ttc->InitedEvent); ReleaseEvent(ttc->InitedEvent);
Free(ttc); Free(ttc);
@ -2238,6 +2447,8 @@ TTS *NewTts(UINT port, void *param, TT_PRINT_PROC *print_proc)
TtPrint(param, print_proc, _UU("TTS_INIT")); TtPrint(param, print_proc, _UU("TTS_INIT"));
tts->WorkerList = NewList(NULL);
// Creating a thread // Creating a thread
t = NewThread(TtsListenThread, tts); t = NewThread(TtsListenThread, tts);
WaitThreadInit(t); WaitThreadInit(t);
@ -2274,6 +2485,8 @@ UINT FreeTts(TTS *tts)
ret = tts->ErrorCode; ret = tts->ErrorCode;
ReleaseList(tts->WorkerList);
Free(tts); Free(tts);
return ret; return ret;
@ -2292,6 +2505,8 @@ void PtTrafficPrintProc(void *param, wchar_t *str)
c = (CONSOLE *)param; c = (CONSOLE *)param;
if (c->ConsoleType == CONSOLE_LOCAL) if (c->ConsoleType == CONSOLE_LOCAL)
{
Lock(c->OutputLock);
{ {
wchar_t tmp[MAX_SIZE]; wchar_t tmp[MAX_SIZE];
@ -2304,6 +2519,8 @@ void PtTrafficPrintProc(void *param, wchar_t *str)
} }
UniPrint(L"%s", tmp); UniPrint(L"%s", tmp);
} }
Unlock(c->OutputLock);
}
} }
// Display the communication throughput results // Display the communication throughput results
@ -2392,10 +2609,12 @@ UINT PtTrafficServer(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
LIST *o; LIST *o;
UINT ret = ERR_NO_ERROR; UINT ret = ERR_NO_ERROR;
UINT port; UINT port;
bool nohup;
TTS *tts; TTS *tts;
PARAM args[] = PARAM args[] =
{ {
{"[port]", NULL, NULL, NULL, NULL}, {"[port]", NULL, NULL, NULL, NULL},
{"NOHUP", NULL, NULL, NULL, NULL},
}; };
// Get the parameter list // Get the parameter list
@ -2411,8 +2630,18 @@ UINT PtTrafficServer(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
port = TRAFFIC_DEFAULT_PORT; port = TRAFFIC_DEFAULT_PORT;
} }
nohup = GetParamYes(o, "nohup");
tts = NewTts(port, c, PtTrafficPrintProc); tts = NewTts(port, c, PtTrafficPrintProc);
if (nohup)
{
while (true)
{
SleepThread(10000);
}
}
c->Write(c, _UU("TTS_ENTER_TO_EXIT")); c->Write(c, _UU("TTS_ENTER_TO_EXIT"));
Free(c->ReadLine(c, L"", true)); Free(c->ReadLine(c, L"", true));
@ -8035,7 +8264,7 @@ UINT PsServerCipherGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
RPC_STR t; RPC_STR t;
TOKEN_LIST *ciphers; TOKEN_LIST *ciphers;
UINT i; UINT i;
wchar_t tmp[MAX_SIZE]; wchar_t tmp[4096];
o = ParseCommandList(c, cmd_name, str, NULL, 0); o = ParseCommandList(c, cmd_name, str, NULL, 0);
if (o == NULL) if (o == NULL)
@ -9996,6 +10225,10 @@ UINT PsLogFileGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
} }
filename = GetParamStr(o, "SAVE"); filename = GetParamStr(o, "SAVE");
if (IsEmptyStr(filename))
{
filename = GetParamStr(o, "SAVEPATH");
}
c->Write(c, _UU("CMD_LogFileGet_START")); c->Write(c, _UU("CMD_LogFileGet_START"));
@ -14974,6 +15207,7 @@ UINT PsAccessAddEx(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
{"DELAY", CmdPrompt, _UU("CMD_AccessAddEx_Prompt_DELAY"), CmdEvalMinMax, &minmax_delay}, {"DELAY", CmdPrompt, _UU("CMD_AccessAddEx_Prompt_DELAY"), CmdEvalMinMax, &minmax_delay},
{"JITTER", CmdPrompt, _UU("CMD_AccessAddEx_Prompt_JITTER"), CmdEvalMinMax, &minmax_jitter}, {"JITTER", CmdPrompt, _UU("CMD_AccessAddEx_Prompt_JITTER"), CmdEvalMinMax, &minmax_jitter},
{"LOSS", CmdPrompt, _UU("CMD_AccessAddEx_Prompt_LOSS"), CmdEvalMinMax, &minmax_loss}, {"LOSS", CmdPrompt, _UU("CMD_AccessAddEx_Prompt_LOSS"), CmdEvalMinMax, &minmax_loss},
{"REDIRECTURL", NULL, NULL, NULL, NULL},
}; };
// If virtual HUB is not selected, it's an error // If virtual HUB is not selected, it's an error
@ -15017,6 +15251,7 @@ UINT PsAccessAddEx(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
a->Delay = GetParamInt(o, "DELAY"); a->Delay = GetParamInt(o, "DELAY");
a->Jitter = GetParamInt(o, "JITTER"); a->Jitter = GetParamInt(o, "JITTER");
a->Loss = GetParamInt(o, "LOSS"); a->Loss = GetParamInt(o, "LOSS");
StrCpy(a->RedirectUrl, sizeof(a->RedirectUrl), GetParamStr(o, "REDIRECTURL"));
// RPC call // RPC call
ret = ScAddAccess(ps->Rpc, &t); ret = ScAddAccess(ps->Rpc, &t);
@ -15178,6 +15413,7 @@ UINT PsAccessAddEx6(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
{"DELAY", CmdPrompt, _UU("CMD_AccessAddEx6_Prompt_DELAY"), CmdEvalMinMax, &minmax_delay}, {"DELAY", CmdPrompt, _UU("CMD_AccessAddEx6_Prompt_DELAY"), CmdEvalMinMax, &minmax_delay},
{"JITTER", CmdPrompt, _UU("CMD_AccessAddEx6_Prompt_JITTER"), CmdEvalMinMax, &minmax_jitter}, {"JITTER", CmdPrompt, _UU("CMD_AccessAddEx6_Prompt_JITTER"), CmdEvalMinMax, &minmax_jitter},
{"LOSS", CmdPrompt, _UU("CMD_AccessAddEx6_Prompt_LOSS"), CmdEvalMinMax, &minmax_loss}, {"LOSS", CmdPrompt, _UU("CMD_AccessAddEx6_Prompt_LOSS"), CmdEvalMinMax, &minmax_loss},
{"REDIRECTURL", NULL, NULL, NULL, NULL},
}; };
// If virtual HUB is not selected, it's an error // If virtual HUB is not selected, it's an error
@ -15233,6 +15469,7 @@ UINT PsAccessAddEx6(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
a->Delay = GetParamInt(o, "DELAY"); a->Delay = GetParamInt(o, "DELAY");
a->Jitter = GetParamInt(o, "JITTER"); a->Jitter = GetParamInt(o, "JITTER");
a->Loss = GetParamInt(o, "LOSS"); a->Loss = GetParamInt(o, "LOSS");
StrCpy(a->RedirectUrl, sizeof(a->RedirectUrl), GetParamStr(o, "REDIRECTURL"));
// RPC call // RPC call
ret = ScAddAccess(ps->Rpc, &t); ret = ScAddAccess(ps->Rpc, &t);
@ -18309,6 +18546,7 @@ UINT PsSecureNatStatusGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
CtInsert(ct, _UU("NM_STATUS_DHCP"), tmp); CtInsert(ct, _UU("NM_STATUS_DHCP"), tmp);
CtInsert(ct, _UU("SM_SNAT_IS_KERNEL"), t.IsKernelMode ? _UU("SEC_YES") : _UU("SEC_NO")); CtInsert(ct, _UU("SM_SNAT_IS_KERNEL"), t.IsKernelMode ? _UU("SEC_YES") : _UU("SEC_NO"));
CtInsert(ct, _UU("SM_SNAT_IS_RAW"), t.IsRawIpMode ? _UU("SEC_YES") : _UU("SEC_NO"));
CtFree(ct, c); CtFree(ct, c);
} }
@ -23096,7 +23334,7 @@ UINT PsConnect(CONSOLE *c, char *host, UINT port, char *hub, char *adminhub, wch
// Failure // Failure
retcode = err; retcode = err;
if (err == ERR_ACCESS_DENIED) if (err == ERR_ACCESS_DENIED && c->ProgrammingMode == false)
{ {
char *pass; char *pass;
// Password is incorrect // Password is incorrect
@ -23402,6 +23640,7 @@ UINT VpnCmdProc(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
{"OUT", NULL, NULL, NULL, NULL}, {"OUT", NULL, NULL, NULL, NULL},
{"CMD", NULL, NULL, NULL, NULL}, {"CMD", NULL, NULL, NULL, NULL},
{"CSV", NULL, NULL, NULL, NULL}, {"CSV", NULL, NULL, NULL, NULL},
{"PROGRAMMING", NULL, NULL, NULL, NULL},
}; };
#ifdef OS_WIN32 #ifdef OS_WIN32
@ -23621,6 +23860,7 @@ UINT CommandMain(wchar_t *command_line)
wchar_t *infile, *outfile; wchar_t *infile, *outfile;
char *a_infile, *a_outfile; char *a_infile, *a_outfile;
wchar_t *csvmode; wchar_t *csvmode;
wchar_t *programming_mode;
CONSOLE *c; CONSOLE *c;
// Validate arguments // Validate arguments
@ -23664,6 +23904,13 @@ UINT CommandMain(wchar_t *command_line)
c->ConsoleType = CONSOLE_CSV; c->ConsoleType = CONSOLE_CSV;
} }
programming_mode = ParseCommand(command_line, L"programming");
if (programming_mode != NULL)
{
Free(programming_mode);
c->ProgrammingMode = true;
}
if (DispatchNextCmdEx(c, command_line, ">", cmd, sizeof(cmd) / sizeof(cmd[0]), NULL) == false) if (DispatchNextCmdEx(c, command_line, ">", cmd, sizeof(cmd) / sizeof(cmd[0]), NULL) == false)
{ {
ret = ERR_INVALID_PARAMETER; ret = ERR_INVALID_PARAMETER;
@ -23757,7 +24004,3 @@ LABEL_CLEANUP:
#endif // OS_WIN32 #endif // OS_WIN32
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -181,13 +181,30 @@ struct TTC
THREAD *Thread; // Thread THREAD *Thread; // Thread
volatile bool Halt; // Halting flag volatile bool Halt; // Halting flag
bool *Cancel; // Halting flag 2 bool *Cancel; // Halting flag 2
SOCK_EVENT *SockEvent; // Socket event
LIST *ItcSockList; // Client socket list LIST *ItcSockList; // Client socket list
TT_RESULT Result; // Result TT_RESULT Result; // Result
UINT ErrorCode; // Error code UINT ErrorCode; // Error code
bool AbnormalTerminated; // Abnormal termination bool AbnormalTerminated; // Abnormal termination
EVENT *StartEvent; // Start event EVENT *StartEvent; // Start event
EVENT *InitedEvent; // Initialize completion notification event EVENT *InitedEvent; // Initialize completion notification event
LIST *WorkerThreadList; // List of worker threads
UINT flag1, flag2;
UINT64 session_id;
UINT64 end_tick;
UINT64 start_tick;
};
// Traffic test worker thread
struct TTC_WORKER
{
THREAD *WorkerThread;
TTC *Ttc;
LIST *SockList; // Client socket list
SOCK_EVENT *SockEvent; // Socket event
EVENT *StartEvent; // Start event
bool Ok; // The result
}; };
// Server side socket // Server side socket
@ -202,7 +219,10 @@ struct TTS_SOCK
UINT64 SessionId; // Session ID UINT64 SessionId; // Session ID
bool NoMoreSendData; // Flag not to send more data bool NoMoreSendData; // Flag not to send more data
UINT64 FirstRecvTick; // Time which the data has been received last UINT64 FirstRecvTick; // Time which the data has been received last
UINT64 FirstSendTick; // Time which the data has been sent last
UINT64 Span; // Period UINT64 Span; // Period
UINT64 GiveupSpan;
UINT64 LastCommTime;
}; };
// Traffic test server // Traffic test server
@ -213,15 +233,22 @@ struct TTS
volatile bool Halt; // Halting flag volatile bool Halt; // Halting flag
UINT Port; // Port number UINT Port; // Port number
THREAD *Thread; // Thread THREAD *Thread; // Thread
THREAD *WorkThread; // Worker thread
THREAD *IPv6AcceptThread; // IPv6 Accept thread THREAD *IPv6AcceptThread; // IPv6 Accept thread
SOCK *ListenSocket; // Socket to wait SOCK *ListenSocket; // Socket to wait
SOCK *ListenSocketV6; // Socket to wait (IPv6) SOCK *ListenSocketV6; // Socket to wait (IPv6)
UINT ErrorCode; // Error code UINT ErrorCode; // Error code
UINT IdSeed; // ID value
LIST *WorkerList; // Worker threads list
};
// Traffic test worker thread
struct TTS_WORKER
{
TTS *Tts; // TTS
THREAD *WorkThread; // Worker thread
SOCK_EVENT *SockEvent; // Socket event SOCK_EVENT *SockEvent; // Socket event
LIST *TtsSockList; // Server socket list LIST *TtsSockList; // Server socket list
bool NewSocketArrived; // New socket has arrived bool NewSocketArrived; // New socket has arrived
UINT IdSeed; // ID value
}; };
// VPN Tools context // VPN Tools context
@ -673,7 +700,3 @@ UINT PsVpnAzureGetStatus(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);
#endif // COMMAND_H #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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -1030,7 +1030,7 @@ void ConnectionSend(CONNECTION *c, UINT64 now)
UINT size; UINT size;
SESSION *s; SESSION *s;
HUB *hub = NULL; HUB *hub = NULL;
bool use_qos; bool use_qos = false;
// Validate arguments // Validate arguments
if (c == NULL) if (c == NULL)
{ {
@ -1038,11 +1038,11 @@ void ConnectionSend(CONNECTION *c, UINT64 now)
} }
s = c->Session; s = c->Session;
use_qos = s->QoS;
if (s != NULL) if (s != NULL)
{ {
hub = s->Hub; hub = s->Hub;
use_qos = s->QoS;
} }
// Protocol // Protocol
@ -3137,10 +3137,7 @@ void ConnectionAccept(CONNECTION *c)
// Start the SSL communication // Start the SSL communication
Debug("StartSSL()\n"); Debug("StartSSL()\n");
if (c->Cedar->AcceptOnlyTls) Copy(&s->SslAcceptSettings, &c->Cedar->SslAcceptSettings, sizeof(SSL_ACCEPT_SETTINGS));
{
s->AcceptOnlyTls = true;
}
if (StartSSL(s, x, k) == false) if (StartSSL(s, x, k) == false)
{ {
// Failed // Failed
@ -3672,6 +3669,3 @@ CONNECTION *NewClientConnectionEx(SESSION *s, char *client_str, UINT client_ver,
return c; return c;
} }
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -144,7 +144,7 @@ struct SECURE_SIGN
char SecurePrivateKeyName[MAX_SECURE_DEVICE_FILE_LEN + 1]; // Secure device secret key name char SecurePrivateKeyName[MAX_SECURE_DEVICE_FILE_LEN + 1]; // Secure device secret key name
X *ClientCert; // Client certificate X *ClientCert; // Client certificate
UCHAR Random[SHA1_SIZE]; // Random value for signature UCHAR Random[SHA1_SIZE]; // Random value for signature
UCHAR Signature[128]; // Signed data UCHAR Signature[4096 / 8]; // Signed data
UINT UseSecureDeviceId; UINT UseSecureDeviceId;
UINT BitmapId; // Bitmap ID UINT BitmapId; // Bitmap ID
}; };
@ -372,7 +372,3 @@ UINT GetMachineRand();
#endif // CONNECTION_H #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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -769,6 +769,18 @@ bool DispatchNextCmdEx(CONSOLE *c, wchar_t *exec_command, char *prompt, CMD cmd[
// Show the prompt // Show the prompt
RETRY: RETRY:
tmp = CopyStrToUni(prompt); tmp = CopyStrToUni(prompt);
if (c->ProgrammingMode)
{
wchar_t tmp2[MAX_PATH];
UniFormat(tmp2, sizeof(tmp2), L"[PROMPT:%u:%s]\r\n", c->RetCode, tmp);
Free(tmp);
tmp = CopyUniStr(tmp2);
}
str = c->ReadLine(c, tmp, false); str = c->ReadLine(c, tmp, false);
Free(tmp); Free(tmp);
@ -1430,6 +1442,14 @@ EVAL_VALUE:
Free(str); Free(str);
break; break;
} }
else if (c->ProgrammingMode)
{
// In the programming mode, return the error immediately.
ok = false;
Free(name);
Free(str);
break;
}
else else
{ {
// Request to re-enter // Request to re-enter
@ -1458,7 +1478,11 @@ EVAL_VALUE:
wchar_t *tmp; wchar_t *tmp;
SHOW_PROMPT: SHOW_PROMPT:
// Prompt because it is a mandatory parameter // Prompt because it is a mandatory parameter
tmp = NULL;
if (c->ProgrammingMode == false)
{
tmp = p->PromptProc(c, p->PromptProcParam); tmp = p->PromptProc(c, p->PromptProcParam);
}
if (tmp == NULL) if (tmp == NULL)
{ {
// User canceled // User canceled
@ -2213,6 +2237,7 @@ CONSOLE *NewLocalConsole(wchar_t *infile, wchar_t *outfile)
c->ReadPassword = ConsoleLocalReadPassword; c->ReadPassword = ConsoleLocalReadPassword;
c->Write = ConsoleLocalWrite; c->Write = ConsoleLocalWrite;
c->GetWidth = ConsoleLocalGetWidth; c->GetWidth = ConsoleLocalGetWidth;
c->OutputLock = NewLock();
if (UniIsEmptyStr(infile) == false) if (UniIsEmptyStr(infile) == false)
{ {
@ -2324,6 +2349,8 @@ void ConsoleLocalFree(CONSOLE *c)
Free(p); Free(p);
} }
DeleteLock(c->OutputLock);
// Memory release // Memory release
Free(c); Free(c);
} }
@ -2534,7 +2561,3 @@ void ConsoleWriteOutFile(CONSOLE *c, wchar_t *str, bool add_last_crlf)
} }
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -160,6 +160,8 @@ struct CONSOLE
char *(*ReadPassword)(CONSOLE *c, wchar_t *prompt); // Function to read the password char *(*ReadPassword)(CONSOLE *c, wchar_t *prompt); // Function to read the password
bool (*Write)(CONSOLE *c, wchar_t *str); // Function to write a string bool (*Write)(CONSOLE *c, wchar_t *str); // Function to write a string
UINT (*GetWidth)(CONSOLE *c); // Get the width of the screen UINT (*GetWidth)(CONSOLE *c); // Get the width of the screen
bool ProgrammingMode; // Programming Mode
LOCK *OutputLock; // Output Lock
}; };
// Local console parameters // Local console parameters
@ -246,7 +248,3 @@ UINT ConsoleLocalGetWidth(CONSOLE *c);
// 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/

View File

@ -1,17 +1,17 @@
// SoftEther VPN Source Code // SoftEther VPN Source Code - Developer Edition Master Branch
// Cedar Communication Module // Cedar Communication Module
// //
// SoftEther VPN Server, Client and Bridge are free software under GPLv2. // SoftEther VPN Server, Client and Bridge are free software under GPLv2.
// //
// Copyright (c) 2012-2014 Daiyuu Nobori. // Copyright (c) Daiyuu Nobori.
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
// Copyright (c) 2012-2014 SoftEther Corporation. // Copyright (c) SoftEther Corporation.
// //
// All Rights Reserved. // All Rights Reserved.
// //
// http://www.softether.org/ // http://www.softether.org/
// //
// Author: Daiyuu Nobori // Author: Daiyuu Nobori, Ph.D.
// Comments: Tetsuo Sugiyama, Ph.D. // Comments: Tetsuo Sugiyama, Ph.D.
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -624,8 +624,9 @@ UINT DCRegister(DDNS_CLIENT *c, bool ipv6, DDNS_REGISTER_PARAM *p, char *replace
PackAddInt(req, "lasterror_ipv4", c->Err_IPv4_GetMyIp); PackAddInt(req, "lasterror_ipv4", c->Err_IPv4_GetMyIp);
PackAddInt(req, "lasterror_ipv6", c->Err_IPv6_GetMyIp); PackAddInt(req, "lasterror_ipv6", c->Err_IPv6_GetMyIp);
PackAddBool(req, "use_azure", use_azure); PackAddBool(req, "use_azure", use_azure);
PackAddStr(req, "product_str", CEDAR_PRODUCT_STR); PackAddStr(req, "product_str", "SoftEther OSS");
PackAddInt(req, "ddns_protocol_version", DDNS_VERSION); PackAddInt(req, "ddns_protocol_version", DDNS_VERSION);
PackAddInt(req, "ddns_oss", 1);
if (use_azure) if (use_azure)
@ -670,9 +671,12 @@ UINT DCRegister(DDNS_CLIENT *c, bool ipv6, DDNS_REGISTER_PARAM *p, char *replace
if (ret == NULL) if (ret == NULL)
{ {
Debug("WpcCall: %s\n", url3); Debug("WpcCall: %s\n", url3);
ret = WpcCallEx(url3, &t, DDNS_CONNECT_TIMEOUT, DDNS_COMM_TIMEOUT, "register", req, ret = WpcCallEx2(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, NULL, NULL, ((cert_hash != NULL && ((cert_hash->Size % SHA1_SIZE) == 0)) ? cert_hash->Buf : NULL),
add_header_name, add_header_value); (cert_hash != NULL ? cert_hash->Size / SHA1_SIZE : 0),
NULL, DDNS_RPC_MAX_RECV_SIZE,
add_header_name, add_header_value,
DDNS_SNI_VER_STRING);
Debug("WpcCall Ret: %u\n", ret); Debug("WpcCall Ret: %u\n", ret);
} }
@ -874,8 +878,11 @@ UINT DCGetMyIpMain(DDNS_CLIENT *c, bool ipv6, char *dst, UINT dst_size, bool use
} }
recv = HttpRequest(&data, (ipv6 ? NULL : &c->InternetSetting), DDNS_CONNECT_TIMEOUT, DDNS_COMM_TIMEOUT, &ret, false, NULL, NULL, StrCpy(data.SniString, sizeof(data.SniString), DDNS_SNI_VER_STRING);
NULL, ((cert_hash != NULL && cert_hash->Size == SHA1_SIZE) ? cert_hash->Buf : NULL));
recv = HttpRequestEx3(&data, (ipv6 ? NULL : &c->InternetSetting), DDNS_CONNECT_TIMEOUT, DDNS_COMM_TIMEOUT, &ret, false, NULL, NULL,
NULL, ((cert_hash != NULL && (cert_hash->Size % SHA1_SIZE) == 0) ? cert_hash->Buf : NULL),
(cert_hash != NULL ? cert_hash->Size / SHA1_SIZE : 0), NULL, 0, NULL, NULL);
FreeBuf(cert_hash); FreeBuf(cert_hash);
@ -1040,7 +1047,3 @@ void DCGenNewKey(UCHAR *key)
} }
// 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/

Some files were not shown because too many files have changed in this diff Show More