mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2024-11-07 18:20:41 +03:00
ac865f04fc
* spelling: accepts * spelling: account * spelling: accept * spelling: accumulate * spelling: adapter * spelling: address * spelling: additional * spelling: aggressive * spelling: adhered * spelling: allowed * spelling: ambiguous * spelling: amount * spelling: anonymous * spelling: acquisition * spelling: assemble * spelling: associated * spelling: assigns * spelling: attach * spelling: attempt * spelling: attribute * spelling: authenticate * spelling: authentication * spelling: available * spelling: bridging * spelling: cascade * spelling: cancel * spelling: check * spelling: challenge * spelling: changing * spelling: characters * spelling: cloud * spelling: compare * spelling: communication * spelling: compatible * spelling: compatibility * spelling: completion * spelling: complete * spelling: computers * spelling: configure * spelling: configuration * spelling: conformant * spelling: connection * spelling: contains * spelling: continuously * spelling: continue * spelling: convert * spelling: counters * spelling: create * spelling: created * spelling: cumulate * spelling: currently * spelling: debugging * spelling: decryption * spelling: description * spelling: default * spelling: driver * spelling: delete * spelling: destination * spelling: disabled * spelling: different * spelling: dynamically * spelling: directory * spelling: disappeared * spelling: disable * spelling: doesn't * spelling: download * spelling: dropped * spelling: enable * spelling: established * spelling: ether * spelling: except * spelling: expired * spelling: field * spelling: following * spelling: forever * spelling: firewall * spelling: first * spelling: fragment * spelling: function * spelling: gateway * spelling: identifier * spelling: identify * spelling: incoming * spelling: information * spelling: initialize * spelling: injection * spelling: inner * spelling: instead * spelling: installation * spelling: inserted * spelling: integer * spelling: interrupt * spelling: intuitive * spelling: interval * spelling: january * spelling: keybytes * spelling: know * spelling: language * spelling: length * spelling: library * spelling: listener * spelling: maintain * spelling: modified * spelling: necessary * spelling: number * spelling: obsoleted * spelling: occurred * spelling: occurring * spelling: occur * spelling: original * spelling: omittable * spelling: omit * spelling: opening * spelling: operation * spelling: packet * spelling: parameters * spelling: pointed * spelling: popupmenuopen * spelling: privilege * spelling: product * spelling: protection * spelling: promiscuous * spelling: prompt * spelling: query * spelling: random * spelling: reconnection * spelling: revocation * spelling: received * spelling: red hat * spelling: registry * spelling: release * spelling: retrieve
878 lines
34 KiB
C
878 lines
34 KiB
C
// SoftEther VPN Source Code - Developer Edition Master Branch
|
|
// Cedar Communication Module
|
|
//
|
|
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
|
//
|
|
// Copyright (c) Daiyuu Nobori.
|
|
// Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
|
|
// Copyright (c) SoftEther Corporation.
|
|
//
|
|
// All Rights Reserved.
|
|
//
|
|
// http://www.softether.org/
|
|
//
|
|
// Author: Daiyuu Nobori, Ph.D.
|
|
// Comments: Tetsuo Sugiyama, Ph.D.
|
|
//
|
|
// This program is free software; you can redistribute it and/or
|
|
// modify it under the terms of the GNU General Public License
|
|
// version 2 as published by the Free Software Foundation.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License version 2
|
|
// along with this program; if not, write to the Free Software
|
|
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
//
|
|
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
|
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
|
//
|
|
//
|
|
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
|
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
|
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
|
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
|
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
|
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
|
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
|
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
|
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
|
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
|
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
|
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
|
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
|
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
|
//
|
|
// USE ONLY IN JAPAN. DO NOT USE 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.
|
|
//
|
|
//
|
|
// 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.
|
|
//
|
|
// Thank you for your cooperation.
|
|
//
|
|
//
|
|
// NO MEMORY OR RESOURCE LEAKS
|
|
// ---------------------------
|
|
//
|
|
// The memory-leaks and resource-leaks verification under the stress
|
|
// test has been passed before release this source code.
|
|
|
|
|
|
// Client.h
|
|
// Header of Client.c
|
|
|
|
#ifndef CLIENT_H
|
|
#define CLIENT_H
|
|
|
|
#define CLIENT_CONFIG_PORT GC_CLIENT_CONFIG_PORT // Client port number
|
|
#define CLIENT_NOTIFY_PORT GC_CLIENT_NOTIFY_PORT // Client notification port number
|
|
#define CLIENT_WAIT_CN_READY_TIMEOUT (10 * 1000) // Standby time to start the client notification service
|
|
|
|
|
|
// Check whether the client can run on the specified OS_TYPE
|
|
#define IS_CLIENT_SUPPORTED_OS(t) \
|
|
((OS_IS_WINDOWS_NT(t) && GET_KETA(t, 100) >= 2) || (OS_IS_WINDOWS_9X(t)))
|
|
|
|
|
|
// Constants
|
|
#define CLIENT_CONFIG_FILE_NAME "@vpn_client.config"
|
|
#define CLIENT_DEFAULT_KEEPALIVE_HOST "keepalive.softether.org"
|
|
#define CLIENT_DEFAULT_KEEPALIVE_PORT 80
|
|
#define CLIENT_DEFAULT_KEEPALIVE_INTERVAL KEEP_INTERVAL_DEFAULT
|
|
|
|
#define CLIENT_RPC_MODE_NOTIFY 0
|
|
#define CLIENT_RPC_MODE_MANAGEMENT 1
|
|
#define CLIENT_RPC_MODE_SHORTCUT 2
|
|
#define CLIENT_RPC_MODE_SHORTCUT_DISCONNECT 3
|
|
|
|
#define CLIENT_MACOS_TAP_NAME "tap0"
|
|
|
|
#define CLIENT_SAVER_INTERVAL (30 * 1000)
|
|
|
|
#define CLIENT_NOTIFY_SERVICE_INSTANCENAME GC_SW_SOFTETHER_PREFIX "vpnclient_uihelper"
|
|
|
|
#define CLIENT_WIN32_EXE_FILENAME "vpnclient.exe"
|
|
#define CLIENT_WIN32_EXE_FILENAME_X64 "vpnclient_x64.exe"
|
|
#define CLIENT_WIN32_EXE_FILENAME_IA64 "vpnclient_ia64.exe"
|
|
|
|
#define CLIENT_CUSTOM_INI_FILENAME "@custom.ini"
|
|
|
|
#define CLIENT_GLOBAL_PULSE_NAME "clientglobalpulse"
|
|
|
|
#define CLIENT_WIN32_REGKEYNAME "Software\\" GC_REG_COMPANY_NAME "\\" CEDAR_PRODUCT_STR " VPN\\Client"
|
|
#define CLIENT_WIN32_REGVALUE_PORT "RpcPort"
|
|
#define CLIENT_WIN32_REGVALUE_PID "RpcPid"
|
|
|
|
|
|
// List of virtual LAN cards in UNIX
|
|
struct UNIX_VLAN
|
|
{
|
|
bool Enabled; // Enable flag
|
|
char Name[MAX_SIZE]; // Name
|
|
UCHAR MacAddress[6]; // MAC address
|
|
UCHAR Padding[2];
|
|
};
|
|
|
|
// Account
|
|
struct ACCOUNT
|
|
{
|
|
// Static data
|
|
CLIENT_OPTION *ClientOption; // Client Option
|
|
CLIENT_AUTH *ClientAuth; // Client authentication data
|
|
bool CheckServerCert; // Check the server certificate
|
|
X *ServerCert; // Server certificate
|
|
bool StartupAccount; // Start-up account
|
|
UCHAR ShortcutKey[SHA1_SIZE]; // Key
|
|
UINT64 CreateDateTime; // Creation date and time
|
|
UINT64 UpdateDateTime; // Updating date
|
|
UINT64 LastConnectDateTime; // Last connection date and time
|
|
|
|
// Dynamic data
|
|
LOCK *lock; // Lock
|
|
SESSION *ClientSession; // Client session
|
|
CLIENT_STATUS_PRINTER *StatusPrinter; // Status indicator
|
|
|
|
SOCK *StatusWindow; // Status window
|
|
};
|
|
|
|
// Client Settings
|
|
struct CLIENT_CONFIG
|
|
{
|
|
bool AllowRemoteConfig; // Allow the remote configuration
|
|
bool UseKeepConnect; // Keep connected to the Internet
|
|
char KeepConnectHost[MAX_HOST_NAME_LEN + 1]; // Host name
|
|
UINT KeepConnectPort; // Port number
|
|
UINT KeepConnectProtocol; // Protocol
|
|
UINT KeepConnectInterval; // Interval
|
|
bool NoChangeWcmNetworkSettingOnWindows8; // Don't change the WCM network settings on Windows 8
|
|
};
|
|
|
|
// Version acquisition
|
|
struct RPC_CLIENT_VERSION
|
|
{
|
|
char ClientProductName[128]; // Client product name
|
|
char ClientVersionString[128]; // Client version string
|
|
char ClientBuildInfoString[128]; // Build client information string
|
|
UINT ClientVerInt; // Client version integer value
|
|
UINT ClientBuildInt; // Client build number integer value
|
|
UINT ProcessId; // Process ID
|
|
UINT OsType; // OS type
|
|
bool IsVLanNameRegulated; // Whether a virtual LAN card name must be "VLAN" + number
|
|
bool IsVgcSupported; // Whether the VPN Gate Client is supported
|
|
bool ShowVgcLink; // Display a VPN Gate Client link
|
|
char ClientId[128]; // Client OD
|
|
};
|
|
|
|
// Password Setting
|
|
struct RPC_CLIENT_PASSWORD
|
|
{
|
|
char Password[MAX_PASSWORD_LEN + 1]; // Password
|
|
bool PasswordRemoteOnly; // The password is required only remote access
|
|
};
|
|
|
|
// Get the password setting
|
|
struct RPC_CLIENT_PASSWORD_SETTING
|
|
{
|
|
bool IsPasswordPresented; // Password exists
|
|
bool PasswordRemoteOnly; // The password is required only remote access
|
|
};
|
|
|
|
// Certificate enumeration item
|
|
struct RPC_CLIENT_ENUM_CA_ITEM
|
|
{
|
|
UINT Key; // Certificate key
|
|
wchar_t SubjectName[MAX_SIZE]; // Issued to
|
|
wchar_t IssuerName[MAX_SIZE]; // Issuer
|
|
UINT64 Expires; // Expiration date
|
|
};
|
|
|
|
// Certificate enumeration
|
|
struct RPC_CLIENT_ENUM_CA
|
|
{
|
|
UINT NumItem; // Number of items
|
|
RPC_CLIENT_ENUM_CA_ITEM **Items; // Item
|
|
};
|
|
|
|
// Certificate item
|
|
struct RPC_CERT
|
|
{
|
|
X *x; // Certificate
|
|
};
|
|
|
|
// Delete the certificate
|
|
struct RPC_CLIENT_DELETE_CA
|
|
{
|
|
UINT Key; // Certificate key
|
|
};
|
|
|
|
// Get the certificate
|
|
struct RPC_GET_CA
|
|
{
|
|
UINT Key; // Certificate key
|
|
X *x; // Certificate
|
|
};
|
|
|
|
// Get the issuer
|
|
struct RPC_GET_ISSUER
|
|
{
|
|
X *x; // Certificate
|
|
X *issuer_x; // Issuer
|
|
};
|
|
|
|
// Secure device enumeration item
|
|
struct RPC_CLIENT_ENUM_SECURE_ITEM
|
|
{
|
|
UINT DeviceId; // Device ID
|
|
UINT Type; // Type
|
|
char DeviceName[MAX_SIZE]; // Device name
|
|
char Manufacturer[MAX_SIZE]; // Manufacturer
|
|
};
|
|
|
|
// Enumeration of secure devices
|
|
struct RPC_CLIENT_ENUM_SECURE
|
|
{
|
|
UINT NumItem; // Number of items
|
|
RPC_CLIENT_ENUM_SECURE_ITEM **Items; // Item
|
|
};
|
|
|
|
// Specify a secure device
|
|
struct RPC_USE_SECURE
|
|
{
|
|
UINT DeviceId; // Device ID
|
|
};
|
|
|
|
// Enumerate objects in the secure device
|
|
struct RPC_ENUM_OBJECT_IN_SECURE
|
|
{
|
|
UINT hWnd; // Window handle
|
|
UINT NumItem; // Number of items
|
|
char **ItemName; // Item name
|
|
bool *ItemType; // Type (true = secret key, false = public key)
|
|
};
|
|
|
|
// Create a virtual LAN
|
|
struct RPC_CLIENT_CREATE_VLAN
|
|
{
|
|
char DeviceName[MAX_SIZE]; // Device name
|
|
};
|
|
|
|
// Get a Virtual LAN information
|
|
struct RPC_CLIENT_GET_VLAN
|
|
{
|
|
char DeviceName[MAX_SIZE]; // Device name
|
|
bool Enabled; // Flag of whether it works or not
|
|
char MacAddress[MAX_SIZE]; // MAC address
|
|
char Version[MAX_SIZE]; // Version
|
|
char FileName[MAX_SIZE]; // Driver file name
|
|
char Guid[MAX_SIZE]; // GUID
|
|
};
|
|
|
|
// Set the virtual LAN information
|
|
struct RPC_CLIENT_SET_VLAN
|
|
{
|
|
char DeviceName[MAX_SIZE]; // Device name
|
|
char MacAddress[MAX_SIZE]; // MAC address
|
|
};
|
|
|
|
// Virtual LAN enumeration item
|
|
struct RPC_CLIENT_ENUM_VLAN_ITEM
|
|
{
|
|
char DeviceName[MAX_SIZE]; // Device name
|
|
bool Enabled; // Operation flag
|
|
char MacAddress[MAX_SIZE]; // MAC address
|
|
char Version[MAX_SIZE]; // Version
|
|
};
|
|
|
|
// Enumerate the virtual LANs
|
|
struct RPC_CLIENT_ENUM_VLAN
|
|
{
|
|
UINT NumItem; // Item count
|
|
RPC_CLIENT_ENUM_VLAN_ITEM **Items; // Item
|
|
};
|
|
|
|
// Create an account
|
|
struct RPC_CLIENT_CREATE_ACCOUNT
|
|
{
|
|
CLIENT_OPTION *ClientOption; // Client Option
|
|
CLIENT_AUTH *ClientAuth; // Client authentication data
|
|
bool StartupAccount; // Startup account
|
|
bool CheckServerCert; // Checking of the server certificate
|
|
X *ServerCert; // Server certificate
|
|
UCHAR ShortcutKey[SHA1_SIZE]; // Shortcut Key
|
|
};
|
|
|
|
// Enumeration item of account
|
|
struct RPC_CLIENT_ENUM_ACCOUNT_ITEM
|
|
{
|
|
wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // Account name
|
|
char UserName[MAX_USERNAME_LEN + 1]; // User name
|
|
char ServerName[MAX_HOST_NAME_LEN + 1]; // Server name
|
|
char DeviceName[MAX_DEVICE_NAME_LEN + 1]; // Device name
|
|
UINT ProxyType; // Type of proxy connection
|
|
char ProxyName[MAX_HOST_NAME_LEN + 1]; // Host name
|
|
bool Active; // Operation flag
|
|
bool Connected; // Connection completion flag
|
|
bool StartupAccount; // Startup account
|
|
UINT Port; // Port number (Ver 3.0 or later)
|
|
char HubName[MAX_HUBNAME_LEN + 1]; // Virtual HUB name (Ver 3.0 or later)
|
|
UINT64 CreateDateTime; // Creation date and time (Ver 3.0 or later)
|
|
UINT64 UpdateDateTime; // Modified date (Ver 3.0 or later)
|
|
UINT64 LastConnectDateTime; // Last connection date and time (Ver 3.0 or later)
|
|
UINT tmp1; // Temporary data
|
|
};
|
|
|
|
// Enumeration of accounts
|
|
struct RPC_CLIENT_ENUM_ACCOUNT
|
|
{
|
|
UINT NumItem; // Item count
|
|
RPC_CLIENT_ENUM_ACCOUNT_ITEM **Items; // Items
|
|
};
|
|
|
|
// Delete the Account
|
|
struct RPC_CLIENT_DELETE_ACCOUNT
|
|
{
|
|
wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // Account name
|
|
};
|
|
|
|
// Change the account name
|
|
struct RPC_RENAME_ACCOUNT
|
|
{
|
|
wchar_t OldName[MAX_ACCOUNT_NAME_LEN + 1]; // Old name
|
|
wchar_t NewName[MAX_ACCOUNT_NAME_LEN + 1]; // New Name
|
|
};
|
|
|
|
// Get the account
|
|
struct RPC_CLIENT_GET_ACCOUNT
|
|
{
|
|
wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // Account name
|
|
CLIENT_OPTION *ClientOption; // Client Option
|
|
CLIENT_AUTH *ClientAuth; // Client authentication data
|
|
bool StartupAccount; // Startup account
|
|
bool CheckServerCert; // Check the server certificate
|
|
X *ServerCert; // Server certificate
|
|
UCHAR ShortcutKey[SHA1_SIZE]; // Shortcut Key
|
|
UINT64 CreateDateTime; // Creation date and time (Ver 3.0 or later)
|
|
UINT64 UpdateDateTime; // Modified date (Ver 3.0 or later)
|
|
UINT64 LastConnectDateTime; // Last connection date and time (Ver 3.0 or later)
|
|
};
|
|
|
|
// Connection
|
|
struct RPC_CLIENT_CONNECT
|
|
{
|
|
wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // Account name
|
|
};
|
|
|
|
// Get the Connection status
|
|
struct RPC_CLIENT_GET_CONNECTION_STATUS
|
|
{
|
|
wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // Account name
|
|
bool Active; // Operation flag
|
|
bool Connected; // Connected flag
|
|
UINT SessionStatus; // Session status
|
|
char ServerName[MAX_HOST_NAME_LEN + 1]; // Server name
|
|
UINT ServerPort; // Port number of the server
|
|
char ServerProductName[MAX_SIZE]; // Server product name
|
|
UINT ServerProductVer; // Server product version
|
|
UINT ServerProductBuild; // Server product build number
|
|
X *ServerX; // Server certificate
|
|
X *ClientX; // Client certificate
|
|
UINT64 StartTime; // Connection start time
|
|
UINT64 FirstConnectionEstablishedTime; // Connection completion time of the first connection
|
|
UINT64 CurrentConnectionEstablishTime; // Connection completion time of this connection
|
|
UINT NumConnectionsEstablished; // Number of connections have been established so far
|
|
bool HalfConnection; // Half-connection
|
|
bool QoS; // VoIP / QoS
|
|
UINT MaxTcpConnections; // Maximum number of the TCP connections
|
|
UINT NumTcpConnections; // Number of current TCP connections
|
|
UINT NumTcpConnectionsUpload; // Number of inbound connections
|
|
UINT NumTcpConnectionsDownload; // Number of outbound connections
|
|
bool UseEncrypt; // Use of encryption
|
|
char CipherName[32]; // Cipher algorithm name
|
|
char ProtocolName[64]; // Protocol name
|
|
bool UseCompress; // Use of compression
|
|
bool IsRUDPSession; // R-UDP session
|
|
char UnderlayProtocol[64]; // Physical communication protocol
|
|
bool IsUdpAccelerationEnabled; // The UDP acceleration is enabled
|
|
bool IsUsingUdpAcceleration; // Using the UDP acceleration function
|
|
char SessionName[MAX_SESSION_NAME_LEN + 1]; // Session name
|
|
char ConnectionName[MAX_CONNECTION_NAME_LEN + 1]; // Connection name
|
|
UCHAR SessionKey[SHA1_SIZE]; // Session key
|
|
POLICY Policy; // Policy
|
|
UINT64 TotalSendSize; // Total transmitted data size
|
|
UINT64 TotalRecvSize; // Total received data size
|
|
UINT64 TotalSendSizeReal; // Total transmitted data size (no compression)
|
|
UINT64 TotalRecvSizeReal; // Total received data size (no compression)
|
|
TRAFFIC Traffic; // Traffic data
|
|
bool IsBridgeMode; // Bridge Mode
|
|
bool IsMonitorMode; // Monitor mode
|
|
UINT VLanId; // VLAN ID
|
|
};
|
|
|
|
|
|
// RPC connection
|
|
struct CLIENT_RPC_CONNECTION
|
|
{
|
|
struct CLIENT *Client; // Client
|
|
bool RpcMode; // True: RPC mode, false: notification mode
|
|
THREAD *Thread; // Processing thread
|
|
SOCK *Sock; // Socket
|
|
};
|
|
|
|
// Client object
|
|
struct CLIENT
|
|
{
|
|
LOCK *lock; // Lock
|
|
LOCK *lockForConnect; // Lock to be used in the CtConnect
|
|
REF *ref; // Reference counter
|
|
CEDAR *Cedar; // Cedar
|
|
volatile bool Halt; // Halting flag
|
|
UINT Err; // Error code
|
|
CFG_RW *CfgRw; // Configuration file R/W
|
|
LIST *AccountList; // Account list
|
|
UCHAR EncryptedPassword[SHA1_SIZE]; // Password
|
|
bool PasswordRemoteOnly; // Password is required only remote access
|
|
UINT UseSecureDeviceId; // Secure device ID to be used
|
|
CLIENT_CONFIG Config; // Client Settings
|
|
LIST *RpcConnectionList; // RPC connection list
|
|
SOCK *RpcListener; // RPC listener
|
|
THREAD *RpcThread; // RPC thread
|
|
LOCK *HelperLock; // Auxiliary lock
|
|
THREAD *SaverThread; // Saver thread
|
|
EVENT *SaverHalter; // The event to stop the Saver thread
|
|
LIST *NotifyCancelList; // Notification event list
|
|
KEEP *Keep; // Keep Connection
|
|
LIST *UnixVLanList; // List of virtual LAN cards in UNIX
|
|
LOG *Logger; // Logger
|
|
bool DontSavePassword; // Flag for not to save the password
|
|
ERASER *Eraser; // Eraser
|
|
SOCKLIST *SockList; // Socket list
|
|
CM_SETTING *CmSetting; // CM configuration
|
|
void *GlobalPulse; // Global pulse
|
|
THREAD *PulseRecvThread; // Pulse reception thread
|
|
volatile bool HaltPulseThread; // Stop flag for the pulse reception thread
|
|
bool NoSaveLog; // Do not save the log
|
|
bool NoSaveConfig; // Do not save the settings
|
|
INTERNET_SETTING CommonProxySetting; // Common proxy settings
|
|
void *MsSuspendHandler; // MS suspend handler
|
|
|
|
};
|
|
|
|
// Notification to the remote client
|
|
struct RPC_CLIENT_NOTIFY
|
|
{
|
|
UINT NotifyCode; // Code
|
|
};
|
|
|
|
// Type of notification
|
|
#define CLIENT_NOTIFY_ACCOUNT_CHANGED 1 // Account change notification
|
|
#define CLIENT_NOTIFY_VLAN_CHANGED 2 // Virtual LAN card change notification
|
|
|
|
// Remote client
|
|
struct REMOTE_CLIENT
|
|
{
|
|
RPC *Rpc;
|
|
UINT OsType;
|
|
bool Unix;
|
|
bool Win9x;
|
|
UINT ProcessId;
|
|
UINT ClientBuildInt;
|
|
bool IsVgcSupported;
|
|
bool ShowVgcLink;
|
|
char ClientId[128];
|
|
};
|
|
|
|
// Notification client
|
|
struct NOTIFY_CLIENT
|
|
{
|
|
SOCK *Sock;
|
|
};
|
|
|
|
// CM configuration
|
|
struct CM_SETTING
|
|
{
|
|
bool EasyMode; // Simple mode
|
|
bool LockMode; // Setting lock mode
|
|
UCHAR HashedPassword[SHA1_SIZE]; // Password
|
|
};
|
|
|
|
|
|
|
|
|
|
// Function prototype
|
|
REMOTE_CLIENT *CcConnectRpc(char *server_name, char *password, bool *bad_pass, bool *no_remote, UINT wait_retry);
|
|
REMOTE_CLIENT *CcConnectRpcEx(char *server_name, char *password, bool *bad_pass, bool *no_remote, UCHAR *key, UINT *key_error_code, bool shortcut_disconnect, UINT wait_retry);
|
|
UINT CcShortcut(UCHAR *key);
|
|
UINT CcShortcutDisconnect(UCHAR *key);
|
|
void CcDisconnectRpc(REMOTE_CLIENT *rc);
|
|
NOTIFY_CLIENT *CcConnectNotify(REMOTE_CLIENT *rc);
|
|
void CcDisconnectNotify(NOTIFY_CLIENT *n);
|
|
void CcStopNotify(NOTIFY_CLIENT *n);
|
|
bool CcWaitNotify(NOTIFY_CLIENT *n);
|
|
UINT CcGetClientVersion(REMOTE_CLIENT *r, RPC_CLIENT_VERSION *a);
|
|
UINT CcSetCmSetting(REMOTE_CLIENT *r, CM_SETTING *a);
|
|
UINT CcGetCmSetting(REMOTE_CLIENT *r, CM_SETTING *a);
|
|
UINT CcSetPassword(REMOTE_CLIENT *r, RPC_CLIENT_PASSWORD *pass);
|
|
UINT CcGetPasswordSetting(REMOTE_CLIENT *r, RPC_CLIENT_PASSWORD_SETTING *a);
|
|
UINT CcEnumCa(REMOTE_CLIENT *r, RPC_CLIENT_ENUM_CA *e);
|
|
UINT CcAddCa(REMOTE_CLIENT *r, RPC_CERT *cert);
|
|
UINT CcDeleteCa(REMOTE_CLIENT *r, RPC_CLIENT_DELETE_CA *p);
|
|
UINT CcGetCa(REMOTE_CLIENT *r, RPC_GET_CA *get);
|
|
UINT CcEnumSecure(REMOTE_CLIENT *r, RPC_CLIENT_ENUM_SECURE *e);
|
|
UINT CcUseSecure(REMOTE_CLIENT *r, RPC_USE_SECURE *sec);
|
|
UINT CcGetUseSecure(REMOTE_CLIENT *r, RPC_USE_SECURE *sec);
|
|
UINT CcCreateVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *create);
|
|
UINT CcUpgradeVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *create);
|
|
UINT CcGetVLan(REMOTE_CLIENT *r, RPC_CLIENT_GET_VLAN *get);
|
|
UINT CcSetVLan(REMOTE_CLIENT *r, RPC_CLIENT_SET_VLAN *set);
|
|
UINT CcEnumVLan(REMOTE_CLIENT *r, RPC_CLIENT_ENUM_VLAN *e);
|
|
UINT CcDeleteVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *d);
|
|
UINT CcEnableVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *vlan);
|
|
UINT CcDisableVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *vlan);
|
|
UINT CcCreateAccount(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_ACCOUNT *a);
|
|
UINT CcEnumAccount(REMOTE_CLIENT *r, RPC_CLIENT_ENUM_ACCOUNT *e);
|
|
UINT CcDeleteAccount(REMOTE_CLIENT *r, RPC_CLIENT_DELETE_ACCOUNT *a);
|
|
UINT CcSetAccount(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_ACCOUNT *a);
|
|
UINT CcGetAccount(REMOTE_CLIENT *r, RPC_CLIENT_GET_ACCOUNT *a);
|
|
UINT CcRenameAccount(REMOTE_CLIENT *r, RPC_RENAME_ACCOUNT *rename);
|
|
UINT CcSetClientConfig(REMOTE_CLIENT *r, CLIENT_CONFIG *o);
|
|
UINT CcGetClientConfig(REMOTE_CLIENT *r, CLIENT_CONFIG *o);
|
|
UINT CcConnect(REMOTE_CLIENT *r, RPC_CLIENT_CONNECT *connect);
|
|
UINT CcDisconnect(REMOTE_CLIENT *r, RPC_CLIENT_CONNECT *connect);
|
|
UINT CcGetAccountStatus(REMOTE_CLIENT *r, RPC_CLIENT_GET_CONNECTION_STATUS *st);
|
|
UINT CcSetStartupAccount(REMOTE_CLIENT *r, RPC_CLIENT_DELETE_ACCOUNT *a);
|
|
UINT CcRemoveStartupAccount(REMOTE_CLIENT *r, RPC_CLIENT_DELETE_ACCOUNT *a);
|
|
UINT CcGetIssuer(REMOTE_CLIENT *r, RPC_GET_ISSUER *a);
|
|
|
|
|
|
void CcSetServiceToForegroundProcess(REMOTE_CLIENT *r);
|
|
char *CiGetFirstVLan(CLIENT *c);
|
|
void CiNormalizeAccountVLan(CLIENT *c);
|
|
|
|
bool CompareInternetSetting(INTERNET_SETTING *s1, INTERNET_SETTING *s2);
|
|
|
|
|
|
void CnStart();
|
|
void CnListenerProc(THREAD *thread, void *param);
|
|
|
|
void CnReleaseSocket(SOCK *s, PACK *p);
|
|
|
|
void CnStatusPrinter(SOCK *s, PACK *p);
|
|
void Win32CnStatusPrinter(SOCK *s, PACK *p);
|
|
|
|
void CnConnectErrorDlg(SOCK *s, PACK *p);
|
|
void Win32CnConnectErrorDlg(SOCK *s, PACK *p);
|
|
void Win32CnConnectErrorDlgThreadProc(THREAD *thread, void *param);
|
|
|
|
void CnPasswordDlg(SOCK *s, PACK *p);
|
|
void Win32CnPasswordDlg(SOCK *s, PACK *p);
|
|
void Win32CnPasswordDlgThreadProc(THREAD *thread, void *param);
|
|
|
|
void CnMsgDlg(SOCK *s, PACK *p);
|
|
void Win32CnMsgDlg(SOCK *s, PACK *p);
|
|
void Win32CnMsgDlgThreadProc(THREAD *thread, void *param);
|
|
|
|
void CnNicInfo(SOCK *s, PACK *p);
|
|
void Win32CnNicInfo(SOCK *s, PACK *p);
|
|
void Win32CnNicInfoThreadProc(THREAD *thread, void *param);
|
|
|
|
void CnCheckCert(SOCK *s, PACK *p);
|
|
void Win32CnCheckCert(SOCK *s, PACK *p);
|
|
void Win32CnCheckCertThreadProc(THREAD *thread, void *param);
|
|
|
|
void CnExecDriverInstaller(SOCK *s, PACK *p);
|
|
void Win32CnExecDriverInstaller(SOCK *s, PACK *p);
|
|
|
|
bool CnCheckAlreadyExists(bool lock);
|
|
bool CnIsCnServiceReady();
|
|
void CnWaitForCnServiceReady();
|
|
|
|
void CnSecureSign(SOCK *s, PACK *p);
|
|
|
|
SOCK *CncConnect();
|
|
SOCK *CncConnectEx(UINT timeout);
|
|
void CncReleaseSocket();
|
|
void CncExit();
|
|
UINT CncGetSessionId();
|
|
bool CncExecDriverInstaller(char *arg);
|
|
SOCK *CncStatusPrinterWindowStart(SESSION *s);
|
|
void CncStatusPrinterWindowPrint(SOCK *s, wchar_t *str);
|
|
void CncStatusPrinterWindowStop(SOCK *s);
|
|
void CncStatusPrinterWindowThreadProc(THREAD *thread, void *param);
|
|
bool CncConnectErrorDlg(SESSION *session, UI_CONNECTERROR_DLG *dlg);
|
|
void CncConnectErrorDlgHaltThread(THREAD *thread, void *param);
|
|
bool CncPasswordDlg(SESSION *session, UI_PASSWORD_DLG *dlg);
|
|
void CncPasswordDlgHaltThread(THREAD *thread, void *param);
|
|
void CncCheckCert(SESSION *session, UI_CHECKCERT *dlg);
|
|
void CncCheckCertHaltThread(THREAD *thread, void *param);
|
|
bool CncSecureSignDlg(SECURE_SIGN *sign);
|
|
SOCK *CncMsgDlg(UI_MSG_DLG *dlg);
|
|
void CndMsgDlgFree(SOCK *s);
|
|
SOCK *CncNicInfo(UI_NICINFO *info);
|
|
void CncNicInfoFree(SOCK *s);
|
|
|
|
void CtStartClient();
|
|
void CtStopClient();
|
|
CLIENT *CtGetClient();
|
|
void CtReleaseClient(CLIENT *c);
|
|
bool CtGetClientVersion(CLIENT *c, RPC_CLIENT_VERSION *ver);
|
|
bool CtGetCmSetting(CLIENT *c, CM_SETTING *s);
|
|
bool CtSetCmSetting(CLIENT *c, CM_SETTING *s);
|
|
bool CtSetPassword(CLIENT *c, RPC_CLIENT_PASSWORD *pass);
|
|
bool CtGetPasswordSetting(CLIENT *c, RPC_CLIENT_PASSWORD_SETTING *a);
|
|
bool CtEnumCa(CLIENT *c, RPC_CLIENT_ENUM_CA *e);
|
|
bool CtAddCa(CLIENT *c, RPC_CERT *cert);
|
|
bool CtDeleteCa(CLIENT *c, RPC_CLIENT_DELETE_CA *p);
|
|
bool CtGetCa(CLIENT *c, RPC_GET_CA *get);
|
|
bool CtEnumSecure(CLIENT *c, RPC_CLIENT_ENUM_SECURE *e);
|
|
bool CtUseSecure(CLIENT *c, RPC_USE_SECURE *sec);
|
|
bool CtGetUseSecure(CLIENT *c, RPC_USE_SECURE *sec);
|
|
bool CtEnumObjectInSecure(CLIENT *c, RPC_ENUM_OBJECT_IN_SECURE *e);
|
|
bool CtCreateVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *create);
|
|
bool CtUpgradeVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *create);
|
|
bool CtGetVLan(CLIENT *c, RPC_CLIENT_GET_VLAN *get);
|
|
bool CtSetVLan(CLIENT *c, RPC_CLIENT_SET_VLAN *set);
|
|
bool CtEnumVLan(CLIENT *c, RPC_CLIENT_ENUM_VLAN *e);
|
|
bool CtDeleteVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *d);
|
|
bool CtEnableVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *vlan);
|
|
bool CtDisableVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *vlan);
|
|
bool CtCreateAccount(CLIENT *c, RPC_CLIENT_CREATE_ACCOUNT *a, bool inner);
|
|
bool CtEnumAccount(CLIENT *c, RPC_CLIENT_ENUM_ACCOUNT *e);
|
|
bool CtDeleteAccount(CLIENT *c, RPC_CLIENT_DELETE_ACCOUNT *a, bool inner);
|
|
bool CtSetAccount(CLIENT *c, RPC_CLIENT_CREATE_ACCOUNT *a, bool inner);
|
|
bool CtGetAccount(CLIENT *c, RPC_CLIENT_GET_ACCOUNT *a);
|
|
bool CtRenameAccount(CLIENT *c, RPC_RENAME_ACCOUNT *rename, bool inner);
|
|
bool CtSetClientConfig(CLIENT *c, CLIENT_CONFIG *o);
|
|
bool CtGetClientConfig(CLIENT *c, CLIENT_CONFIG *o);
|
|
bool CtConnect(CLIENT *c, RPC_CLIENT_CONNECT *connect);
|
|
bool CtDisconnect(CLIENT *c, RPC_CLIENT_CONNECT *connect, bool inner);
|
|
bool CtGetAccountStatus(CLIENT *c, RPC_CLIENT_GET_CONNECTION_STATUS *st);
|
|
bool CtSetStartupAccount(CLIENT *c, RPC_CLIENT_DELETE_ACCOUNT *a, bool inner);
|
|
bool CtRemoveStartupAccount(CLIENT *c, RPC_CLIENT_DELETE_ACCOUNT *a);
|
|
bool CtGetIssuer(CLIENT *c, RPC_GET_ISSUER *a);
|
|
bool CtGetCommonProxySetting(CLIENT *c, INTERNET_SETTING *a);
|
|
bool CtSetCommonProxySetting(CLIENT *c, INTERNET_SETTING *a);
|
|
|
|
|
|
// Internal function prototype
|
|
void CiSendGlobalPulse(CLIENT *c);
|
|
void CiPulseRecvThread(THREAD *thread, void *param);
|
|
char *CiGetVpnClientExeFileName();
|
|
void CiServerThread(THREAD *t, void *param);
|
|
void CiInitSaver(CLIENT *c);
|
|
void CiFreeSaver(CLIENT *c);
|
|
void CiGetSessionStatus(RPC_CLIENT_GET_CONNECTION_STATUS *st, SESSION *s);
|
|
PACK *CiRpcDispatch(RPC *rpc, char *name, PACK *p);
|
|
void CiRpcAccepted(CLIENT *c, SOCK *s);
|
|
void CiNotifyMain(CLIENT *c, SOCK *s);
|
|
void CiRpcAcceptThread(THREAD *thread, void *param);
|
|
void CiRpcServerThread(THREAD *thread, void *param);
|
|
void CiStartRpcServer(CLIENT *c);
|
|
void CiStopRpcServer(CLIENT *c);
|
|
CLIENT_OPTION *CiLoadClientOption(FOLDER *f);
|
|
CLIENT_AUTH *CiLoadClientAuth(FOLDER *f);
|
|
ACCOUNT *CiLoadClientAccount(FOLDER *f);
|
|
void CiLoadClientConfig(CLIENT_CONFIG *c, FOLDER *f);
|
|
void CiLoadAccountDatabase(CLIENT *c, FOLDER *f);
|
|
void CiLoadCAList(CLIENT *c, FOLDER *f);
|
|
void CiLoadCACert(CLIENT *c, FOLDER *f);
|
|
void CiLoadVLanList(CLIENT *c, FOLDER *f);
|
|
void CiLoadVLan(CLIENT *c, FOLDER *f);
|
|
bool CiReadSettingFromCfg(CLIENT *c, FOLDER *root);
|
|
void CiWriteAccountDatabase(CLIENT *c, FOLDER *f);
|
|
void CiWriteAccountData(FOLDER *f, ACCOUNT *a);
|
|
void CiWriteClientOption(FOLDER *f, CLIENT_OPTION *o);
|
|
void CiWriteClientAuth(FOLDER *f, CLIENT_AUTH *a);
|
|
void CiWriteClientConfig(FOLDER *cc, CLIENT_CONFIG *config);
|
|
void CiWriteSettingToCfg(CLIENT *c, FOLDER *root);
|
|
void CiWriteCAList(CLIENT *c, FOLDER *f);
|
|
void CiWriteCACert(CLIENT *c, FOLDER *f, X *x);
|
|
void CiWriteVLanList(CLIENT *c, FOLDER *f);
|
|
void CiWriteVLan(CLIENT *c, FOLDER *f, UNIX_VLAN *v);
|
|
void CiFreeClientGetConnectionStatus(RPC_CLIENT_GET_CONNECTION_STATUS *st);
|
|
bool CiCheckCertProc(SESSION *s, CONNECTION *c, X *server_x, bool *expired);
|
|
bool CiSecureSignProc(SESSION *s, CONNECTION *c, SECURE_SIGN *sign);
|
|
bool Win32CiSecureSign(SECURE_SIGN *sign);
|
|
void CiFreeClientAuth(CLIENT_AUTH *auth);
|
|
void CiFreeClientCreateAccount(RPC_CLIENT_CREATE_ACCOUNT *a);
|
|
void CiFreeClientGetAccount(RPC_CLIENT_GET_ACCOUNT *a);
|
|
void CiFreeClientEnumVLan(RPC_CLIENT_ENUM_VLAN *e);
|
|
void CiFreeClientEnumSecure(RPC_CLIENT_ENUM_SECURE *e);
|
|
void CiFreeClientEnumCa(RPC_CLIENT_ENUM_CA *e);
|
|
void CiFreeEnumObjectInSecure(RPC_ENUM_OBJECT_IN_SECURE *a);
|
|
void CiFreeGetCa(RPC_GET_CA *a);
|
|
void CiFreeGetIssuer(RPC_GET_ISSUER *a);
|
|
void CiFreeClientEnumAccount(RPC_CLIENT_ENUM_ACCOUNT *a);
|
|
void CiSetError(CLIENT *c, UINT err);
|
|
void CiCheckOs();
|
|
CLIENT *CiNewClient();
|
|
void CiCleanupClient(CLIENT *c);
|
|
bool CiLoadConfigurationFile(CLIENT *c);
|
|
void CiSaveConfigurationFile(CLIENT *c);
|
|
void CiInitConfiguration(CLIENT *c);
|
|
void CiSetVLanToDefault(CLIENT *c);
|
|
bool CiIsVLan(CLIENT *c, char *name);
|
|
void CiFreeConfiguration(CLIENT *c);
|
|
int CiCompareAccount(void *p1, void *p2);
|
|
void CiFreeAccount(ACCOUNT *a);
|
|
void CiNotify(CLIENT *c);
|
|
void CiNotifyInternal(CLIENT *c);
|
|
void CiClientStatusPrinter(SESSION *s, wchar_t *status);
|
|
void CiInitKeep(CLIENT *c);
|
|
void CiFreeKeep(CLIENT *c);
|
|
int CiCompareUnixVLan(void *p1, void *p2);
|
|
BUF *CiAccountToCfg(RPC_CLIENT_CREATE_ACCOUNT *t);
|
|
RPC_CLIENT_CREATE_ACCOUNT *CiCfgToAccount(BUF *b);
|
|
void CiChangeAllVLanMacAddressIfCleared(CLIENT *c);
|
|
void CiChangeAllVLanMacAddress(CLIENT *c);
|
|
void CiChangeAllVLanMacAddressIfMachineChanged(CLIENT *c);
|
|
bool CiReadLastMachineHash(void *data);
|
|
bool CiWriteLastMachineHash(void *data);
|
|
void CiGetCurrentMachineHash(void *data);
|
|
void CiGetCurrentMachineHashOld(void *data);
|
|
void CiGetCurrentMachineHashNew(void *data);
|
|
LIST *CiLoadIni();
|
|
void CiFreeIni(LIST *o);
|
|
void CiLoadIniSettings(CLIENT *c);
|
|
bool CiLoadConfigFilePathFromIni(char *path, UINT size);
|
|
int CiCompareClientAccountEnumItemByLastConnectDateTime(void *p1, void *p2);
|
|
bool CiIsValidVLanRegulatedName(char *name);
|
|
void CiGenerateVLanRegulatedName(char *name, UINT size, UINT i);
|
|
bool CiGetNextRecommendedVLanName(REMOTE_CLIENT *r, char *name, UINT size);
|
|
void CiDisableWcmNetworkMinimize(CLIENT *c);
|
|
bool CiTryToParseAccount(BUF *b);
|
|
bool CiTryToParseAccountFile(wchar_t *name);
|
|
bool CiEraseSensitiveInAccount(BUF *b);
|
|
bool CiHasAccountSensitiveInformation(BUF *b);
|
|
bool CiHasAccountSensitiveInformationFile(wchar_t *name);
|
|
void CiApplyInnerVPNServerConfig(CLIENT *c);
|
|
SERVER *CiNewInnerVPNServer(CLIENT *c, bool relay_server);
|
|
void CiFreeInnerVPNServer(CLIENT *c, SERVER *s);
|
|
void CiIncrementNumActiveSessions();
|
|
void CiDecrementNumActiveSessions();
|
|
UINT CiGetNumActiveSessions();
|
|
|
|
BUF *EncryptPassword(char *password);
|
|
BUF *EncryptPassword2(char *password);
|
|
char *DecryptPassword(BUF *b);
|
|
char *DecryptPassword2(BUF *b);
|
|
|
|
void InRpcGetIssuer(RPC_GET_ISSUER *c, PACK *p);
|
|
void OutRpcGetIssuer(PACK *p, RPC_GET_ISSUER *c);
|
|
void InRpcClientVersion(RPC_CLIENT_VERSION *ver, PACK *p);
|
|
void OutRpcClientVersion(PACK *p, RPC_CLIENT_VERSION *ver);
|
|
void InRpcClientPassword(RPC_CLIENT_PASSWORD *pw, PACK *p);
|
|
void OutRpcClientPassword(PACK *p, RPC_CLIENT_PASSWORD *pw);
|
|
void InRpcClientEnumCa(RPC_CLIENT_ENUM_CA *e, PACK *p);
|
|
void OutRpcClientEnumCa(PACK *p, RPC_CLIENT_ENUM_CA *e);
|
|
void InRpcCert(RPC_CERT *c, PACK *p);
|
|
void OutRpcCert(PACK *p, RPC_CERT *c);
|
|
void InRpcClientDeleteCa(RPC_CLIENT_DELETE_CA *c, PACK *p);
|
|
void OutRpcClientDeleteCa(PACK *p, RPC_CLIENT_DELETE_CA *c);
|
|
void InRpcGetCa(RPC_GET_CA *c, PACK *p);
|
|
void OutRpcGetCa(PACK *p, RPC_GET_CA *c);
|
|
void InRpcClientEnumSecure(RPC_CLIENT_ENUM_SECURE *e, PACK *p);
|
|
void OutRpcClientEnumSecure(PACK *p, RPC_CLIENT_ENUM_SECURE *e);
|
|
void InRpcUseSecure(RPC_USE_SECURE *u, PACK *p);
|
|
void OutRpcUseSecure(PACK *p, RPC_USE_SECURE *u);
|
|
void InRpcEnumObjectInSecure(RPC_ENUM_OBJECT_IN_SECURE *e, PACK *p);
|
|
void OutRpcEnumObjectInSecure(PACK *p, RPC_ENUM_OBJECT_IN_SECURE *e);
|
|
void InRpcCreateVLan(RPC_CLIENT_CREATE_VLAN *v, PACK *p);
|
|
void OutRpcCreateVLan(PACK *p, RPC_CLIENT_CREATE_VLAN *v);
|
|
void InRpcClientGetVLan(RPC_CLIENT_GET_VLAN *v, PACK *p);
|
|
void OutRpcClientGetVLan(PACK *p, RPC_CLIENT_GET_VLAN *v);
|
|
void InRpcClientSetVLan(RPC_CLIENT_SET_VLAN *v, PACK *p);
|
|
void OutRpcClientSetVLan(PACK *p, RPC_CLIENT_SET_VLAN *v);
|
|
void InRpcClientEnumVLan(RPC_CLIENT_ENUM_VLAN *v, PACK *p);
|
|
void OutRpcClientEnumVLan(PACK *p, RPC_CLIENT_ENUM_VLAN *v);
|
|
void InRpcClientOption(CLIENT_OPTION *c, PACK *p);
|
|
void OutRpcClientOption(PACK *p, CLIENT_OPTION *c);
|
|
void InRpcClientAuth(CLIENT_AUTH *c, PACK *p);
|
|
void OutRpcClientAuth(PACK *p, CLIENT_AUTH *c);
|
|
void InRpcClientCreateAccount(RPC_CLIENT_CREATE_ACCOUNT *c, PACK *p);
|
|
void OutRpcClientCreateAccount(PACK *p, RPC_CLIENT_CREATE_ACCOUNT *c);
|
|
void InRpcClientEnumAccount(RPC_CLIENT_ENUM_ACCOUNT *e, PACK *p);
|
|
void OutRpcClientEnumAccount(PACK *p, RPC_CLIENT_ENUM_ACCOUNT *e);
|
|
void InRpcClientDeleteAccount(RPC_CLIENT_DELETE_ACCOUNT *a, PACK *p);
|
|
void OutRpcClientDeleteAccount(PACK *p, RPC_CLIENT_DELETE_ACCOUNT *a);
|
|
void InRpcRenameAccount(RPC_RENAME_ACCOUNT *a, PACK *p);
|
|
void OutRpcRenameAccount(PACK *p, RPC_RENAME_ACCOUNT *a);
|
|
void InRpcClientGetAccount(RPC_CLIENT_GET_ACCOUNT *c, PACK *p);
|
|
void OutRpcClientGetAccount(PACK *p, RPC_CLIENT_GET_ACCOUNT *c);
|
|
void InRpcClientConnect(RPC_CLIENT_CONNECT *c, PACK *p);
|
|
void OutRpcClientConnect(PACK *p, RPC_CLIENT_CONNECT *c);
|
|
void InRpcPolicy(POLICY *o, PACK *p);
|
|
void OutRpcPolicy(PACK *p, POLICY *o);
|
|
void InRpcClientGetConnectionStatus(RPC_CLIENT_GET_CONNECTION_STATUS *s, PACK *p);
|
|
void OutRpcClientGetConnectionStatus(PACK *p, RPC_CLIENT_GET_CONNECTION_STATUS *c);
|
|
void InRpcClientNotify(RPC_CLIENT_NOTIFY *n, PACK *p);
|
|
void OutRpcClientNotify(PACK *p, RPC_CLIENT_NOTIFY *n);
|
|
void InRpcClientConfig(CLIENT_CONFIG *c, PACK *p);
|
|
void OutRpcClientConfig(PACK *p, CLIENT_CONFIG *c);
|
|
void InRpcClientPasswordSetting(RPC_CLIENT_PASSWORD_SETTING *a, PACK *p);
|
|
void OutRpcClientPasswordSetting(PACK *p, RPC_CLIENT_PASSWORD_SETTING *a);
|
|
void InRpcTraffic(TRAFFIC *t, PACK *p);
|
|
void OutRpcTraffic(PACK *p, TRAFFIC *t);
|
|
void InRpcTrafficEx(TRAFFIC *t, PACK *p, UINT i);
|
|
void OutRpcTrafficEx(TRAFFIC *t, PACK *p, UINT i, UINT num);
|
|
void OutRpcCmSetting(PACK *p, CM_SETTING *c);
|
|
void InRpcCmSetting(CM_SETTING *c, PACK *p);
|
|
|
|
|
|
#ifdef OS_WIN32
|
|
void CiInitDriverVerStruct(MS_DRIVER_VER *ver);
|
|
#endif // OS_EIN32
|
|
|
|
#endif // CLIENT_H
|
|
|
|
|