1 // SoftEther UT-VPN SourceCode
\r
3 // Copyright (C) 2004-2010 SoftEther Corporation.
\r
4 // Copyright (C) 2004-2010 University of Tsukuba, Japan.
\r
5 // Copyright (C) 2003-2010 Daiyuu Nobori.
\r
6 // All Rights Reserved.
\r
8 // http://utvpn.tsukuba.ac.jp/
\r
10 // This program is free software; you can redistribute it and/or
\r
11 // modify it under the terms of the GNU General Public License
\r
12 // version 2 as published by the Free Software Foundation.
\r
14 // This program is distributed in the hope that it will be useful,
\r
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
17 // GNU General Public License for more details.
\r
19 // You should have received a copy of the GNU General Public License version 2
\r
20 // along with this program; if not, write to the Free Software
\r
21 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
\r
23 // このファイルは GPL バージョン 2 ライセンスで公開されています。
\r
24 // 誰でもこのファイルの内容を複製、改変したり、改変したバージョンを再配布
\r
25 // することができます。ただし、原著作物を改変した場合は、原著作物の著作権表示
\r
26 // を除去することはできません。改変した著作物を配布する場合は、改変実施者の
\r
27 // 著作権表示を原著作物の著作権表示に付随して記載するようにしてください。
\r
29 // この SoftEther UT-VPN オープンソース・プロジェクトは、日本国の
\r
30 // ソフトイーサ株式会社 (SoftEther Corporation, http://www.softether.co.jp/ )
\r
31 // および筑波大学 (University of Tsukuba, http://www.tsukuba.ac.jp/ ) によって
\r
33 // 本プログラムの配布者は、本プログラムを、業としての利用以外のため、
\r
34 // および、試験または研究のために利用が行われることを想定して配布
\r
36 // SoftEther UT-VPN プロジェクトの Web サイトは http://utvpn.tsukuba.ac.jp/ に
\r
38 // 本ソフトウェアの不具合の修正、機能改良、セキュリティホールの修復などのコード
\r
39 // の改変を行った場合で、その成果物を SoftEther UT-VPN プロジェクトに提出して
\r
40 // いただける場合は、 http://utvpn.tsukuba.ac.jp/ までソースコードを送付して
\r
41 // ください。SoftEther UT-VPN プロジェクトの本体リリースまたはブランチリリース
\r
44 // GPL に基づいて原著作物が提供される本ソフトウェアの改良版を配布、販売する
\r
45 // 場合は、そのソースコードを GPL に基づいて誰にでも開示する義務が生じます。
\r
47 // 本ソフトウェアに関連する著作権、特許権、商標権はソフトイーサ株式会社
\r
48 // (SoftEther Corporation) およびその他の著作権保持者が保有しています。
\r
49 // ソフトイーサ株式会社等はこれらの権利を放棄していません。本ソフトウェアの
\r
50 // 二次著作物を配布、販売する場合は、これらの権利を侵害しないようにご注意
\r
53 // お願い: どのような通信ソフトウェアにも通常は必ず未発見の
\r
54 // セキュリティホールが潜んでいます。本ソースコードをご覧いただいた結果、
\r
55 // UT-VPN にセキュリティホールを発見された場合は、当該セキュリティホールの
\r
56 // 情報を不特定多数に開示される前に、必ず、ソフトイーサ株式会社
\r
57 // および脆弱性情報の届出を受け付ける公的機関まで通報いただき、
\r
58 // 公益保護にご協力いただきますようお願い申し上げます。
\r
60 // ソフトイーサ株式会社は、当該セキュリティホールについて迅速に対処を
\r
61 // 行い、UT-VPN および UT-VPN に関連するソフトウェアのユーザー・顧客
\r
64 // ソフトイーサへの届出先: http://www.softether.co.jp/jp/contact/
\r
65 // 日本国内の脆弱性情報届出受付公的機関:
\r
67 // http://www.ipa.go.jp/security/vuln/report/
\r
69 // 上記各事項について不明な点は、ソフトイーサ株式会社までご連絡ください。
\r
70 // 連絡先: http://www.softether.co.jp/jp/contact/
\r
72 // -----------------------------------------------
\r
75 // 新規リリース by SoftEther
\r
76 // -----------------------------------------------
\r
84 #define CLIENT_CONFIG_PORT 9930 // クライアントポート番号
\r
85 #define CLIENT_NOTIFY_PORT 9983 // クライアント通知ポート番号
\r
86 #define CLIENT_WAIT_CN_READY_TIMEOUT (10 * 1000) // クライアント通知サービスが起動するまでの待機時間
\r
89 // クライアントが指定された OS_TYPE で稼動するかどうかチェック
\r
90 #define IS_CLIENT_SUPPORTED_OS(t) \
\r
91 ((OS_IS_WINDOWS_NT(t) && GET_KETA(t, 100) >= 2) || (OS_IS_WINDOWS_9X(t)))
\r
95 #define CLIENT_CONFIG_FILE_NAME "@vpn_client.config"
\r
96 #define CLIENT_DEFAULT_KEEPALIVE_HOST "keepalive.utvpn.tsukuba.ac.jp"
\r
97 #define CLIENT_DEFAULT_KEEPALIVE_PORT 80
\r
98 #define CLIENT_DEFAULT_KEEPALIVE_INTERVAL KEEP_INTERVAL_DEFAULT
\r
100 #define CLIENT_RPC_MODE_NOTIFY 0
\r
101 #define CLIENT_RPC_MODE_MANAGEMENT 1
\r
102 #define CLIENT_RPC_MODE_SHORTCUT 2
\r
103 #define CLIENT_RPC_MODE_SHORTCUT_DISCONNECT 3
\r
105 #define CLIENT_MACOS_TAP_NAME "tap0"
\r
107 #define CLIENT_SAVER_INTERVAL (30 * 1000)
\r
109 #define CLIENT_NOTIFY_SERVICE_INSTANCENAME "utvpnclient_uihelper"
\r
111 #define CLIENT_WIN32_EXE_FILENAME "utvpnclient.exe"
\r
112 #define CLIENT_WIN32_EXE_FILENAME_X64 "utvpnclient_x64.exe"
\r
113 #define CLIENT_WIN32_EXE_FILENAME_IA64 "utvpnclient_ia64.exe"
\r
115 #define CLIENT_CUSTOM_INI_FILENAME "@custom.ini"
\r
118 // UNIX における仮想 LAN カードの一覧
\r
121 bool Enabled; // 有効フラグ
\r
122 char Name[MAX_SIZE]; // 名前
\r
123 UCHAR MacAddress[6]; // MAC アドレス
\r
131 CLIENT_OPTION *ClientOption; // クライアント オプション
\r
132 CLIENT_AUTH *ClientAuth; // クライアント認証データ
\r
133 bool CheckServerCert; // サーバー証明書をチェックする
\r
134 X *ServerCert; // サーバー証明書
\r
135 bool StartupAccount; // スタートアップアカウントにする
\r
136 UCHAR ShortcutKey[SHA1_SIZE]; // キー
\r
137 UINT64 CreateDateTime; // 作成日時
\r
138 UINT64 UpdateDateTime; // 更新日時
\r
139 UINT64 LastConnectDateTime; // 最終接続日時
\r
143 SESSION *ClientSession; // クライアントセッション
\r
144 CLIENT_STATUS_PRINTER *StatusPrinter; // ステータス表示器
\r
146 SOCK *StatusWindow; // ステータスウインドウ
\r
150 struct CLIENT_CONFIG
\r
152 bool AllowRemoteConfig; // リモート設定を許可する
\r
153 bool UseKeepConnect; // インターネットへの接続を維持
\r
154 char KeepConnectHost[MAX_HOST_NAME_LEN + 1]; // ホスト名
\r
155 UINT KeepConnectPort; // ポート番号
\r
156 UINT KeepConnectProtocol; // プロトコル
\r
157 UINT KeepConnectInterval; // 間隔
\r
161 struct RPC_CLIENT_VERSION
\r
163 char ClientProductName[128]; // クライアント製品名
\r
164 char ClientVersionString[128]; // クライアントバージョン文字列
\r
165 char ClientBuildInfoString[128]; // クライアントビルド情報文字列
\r
166 UINT ClientVerInt; // クライアントバージョン整数値
\r
167 UINT ClientBuildInt; // クライアントビルド番号整数値
\r
168 UINT ProcessId; // プロセス ID
\r
169 UINT OsType; // OS の種類
\r
173 struct RPC_CLIENT_PASSWORD
\r
175 char Password[MAX_PASSWORD_LEN + 1]; // パスワード
\r
176 bool PasswordRemoteOnly; // パスワードはリモートのみ必要
\r
180 struct RPC_CLIENT_PASSWORD_SETTING
\r
182 bool IsPasswordPresented; // パスワードが存在する
\r
183 bool PasswordRemoteOnly; // パスワードはリモートのみ必要
\r
187 struct RPC_CLIENT_ENUM_CA_ITEM
\r
190 wchar_t SubjectName[MAX_SIZE]; // 発行先
\r
191 wchar_t IssuerName[MAX_SIZE]; // 発行者
\r
192 UINT64 Expires; // 有効期限
\r
196 struct RPC_CLIENT_ENUM_CA
\r
198 UINT NumItem; // 項目数
\r
199 RPC_CLIENT_ENUM_CA_ITEM **Items; // 項目
\r
209 struct RPC_CLIENT_DELETE_CA
\r
222 struct RPC_GET_ISSUER
\r
225 X *issuer_x; // 署名者
\r
229 struct RPC_CLIENT_ENUM_SECURE_ITEM
\r
231 UINT DeviceId; // デバイス ID
\r
233 char DeviceName[MAX_SIZE]; // デバイス名
\r
234 char Manufacturer[MAX_SIZE]; // 製造元
\r
238 struct RPC_CLIENT_ENUM_SECURE
\r
240 UINT NumItem; // 項目数
\r
241 RPC_CLIENT_ENUM_SECURE_ITEM **Items; // 項目
\r
245 struct RPC_USE_SECURE
\r
247 UINT DeviceId; // デバイス ID
\r
250 // セキュアデバイス内オブジェクト列挙
\r
251 struct RPC_ENUM_OBJECT_IN_SECURE
\r
253 UINT hWnd; // ウインドウハンドル
\r
254 UINT NumItem; // 項目数
\r
255 char **ItemName; // 項目名
\r
256 bool *ItemType; // 種類 (true=秘密鍵, false=公開鍵)
\r
260 struct RPC_CLIENT_CREATE_VLAN
\r
262 char DeviceName[MAX_SIZE]; // デバイス名
\r
266 struct RPC_CLIENT_GET_VLAN
\r
268 char DeviceName[MAX_SIZE]; // デバイス名
\r
269 bool Enabled; // 動作しているかどうかのフラグ
\r
270 char MacAddress[MAX_SIZE]; // MAC アドレス
\r
271 char Version[MAX_SIZE]; // バージョン
\r
272 char FileName[MAX_SIZE]; // ドライバファイル名
\r
273 char Guid[MAX_SIZE]; // GUID
\r
277 struct RPC_CLIENT_SET_VLAN
\r
279 char DeviceName[MAX_SIZE]; // デバイス名
\r
280 char MacAddress[MAX_SIZE]; // MAC アドレス
\r
284 struct RPC_CLIENT_ENUM_VLAN_ITEM
\r
286 char DeviceName[MAX_SIZE]; // デバイス名
\r
287 bool Enabled; // 動作フラグ
\r
288 char MacAddress[MAX_SIZE]; // MAC アドレス
\r
289 char Version[MAX_SIZE]; // バージョン
\r
293 struct RPC_CLIENT_ENUM_VLAN
\r
295 UINT NumItem; // アイテム数
\r
296 RPC_CLIENT_ENUM_VLAN_ITEM **Items; // アイテム
\r
300 struct RPC_CLIENT_CREATE_ACCOUNT
\r
302 CLIENT_OPTION *ClientOption; // クライアント オプション
\r
303 CLIENT_AUTH *ClientAuth; // クライアント認証データ
\r
304 bool StartupAccount; // スタートアップアカウント
\r
305 bool CheckServerCert; // サーバー証明書をチェックする
\r
306 X *ServerCert; // サーバー証明書
\r
307 UCHAR ShortcutKey[SHA1_SIZE]; // ショートカットキー
\r
311 struct RPC_CLIENT_ENUM_ACCOUNT_ITEM
\r
313 wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // アカウント名
\r
314 char UserName[MAX_USERNAME_LEN + 1]; // ユーザー名
\r
315 char ServerName[MAX_HOST_NAME_LEN + 1]; // サーバー名
\r
316 char DeviceName[MAX_DEVICE_NAME_LEN + 1]; // デバイス名
\r
317 UINT ProxyType; // プロキシ接続の種類
\r
318 char ProxyName[MAX_HOST_NAME_LEN + 1]; // ホスト名
\r
319 bool Active; // 動作フラグ
\r
320 bool Connected; // 接続完了フラグ
\r
321 bool StartupAccount; // スタートアップアカウント
\r
322 UINT Port; // ポート番号 (Ver 3.0 以降)
\r
323 char HubName[MAX_HUBNAME_LEN + 1]; // 仮想 HUB 名 (Ver 3.0 以降)
\r
324 UINT64 CreateDateTime; // 作成日時 (Ver 3.0 以降)
\r
325 UINT64 UpdateDateTime; // 更新日時 (Ver 3.0 以降)
\r
326 UINT64 LastConnectDateTime; // 最終接続日時 (Ver 3.0 以降)
\r
327 UINT tmp1; // 一時データ
\r
331 struct RPC_CLIENT_ENUM_ACCOUNT
\r
333 UINT NumItem; // アイテム数
\r
334 RPC_CLIENT_ENUM_ACCOUNT_ITEM **Items; // アイテム
\r
338 struct RPC_CLIENT_DELETE_ACCOUNT
\r
340 wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // アカウント名
\r
344 struct RPC_RENAME_ACCOUNT
\r
346 wchar_t OldName[MAX_ACCOUNT_NAME_LEN + 1]; // 古い名前
\r
347 wchar_t NewName[MAX_ACCOUNT_NAME_LEN + 1]; // 新しい名前
\r
351 struct RPC_CLIENT_GET_ACCOUNT
\r
353 wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // アカウント名
\r
354 CLIENT_OPTION *ClientOption; // クライアント オプション
\r
355 CLIENT_AUTH *ClientAuth; // クライアント認証データ
\r
356 bool StartupAccount; // スタートアップアカウント
\r
357 bool CheckServerCert; // サーバー証明書をチェックする
\r
358 X *ServerCert; // サーバー証明書
\r
359 UCHAR ShortcutKey[SHA1_SIZE]; // ショートカットキー
\r
360 UINT64 CreateDateTime; // 作成日時 (Ver 3.0 以降)
\r
361 UINT64 UpdateDateTime; // 更新日時 (Ver 3.0 以降)
\r
362 UINT64 LastConnectDateTime; // 最終接続日時 (Ver 3.0 以降)
\r
366 struct RPC_CLIENT_CONNECT
\r
368 wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // アカウント名
\r
372 struct RPC_CLIENT_GET_CONNECTION_STATUS
\r
374 wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // アカウント名
\r
375 bool Active; // 動作フラグ
\r
376 bool Connected; // 接続済みフラグ
\r
377 UINT SessionStatus; // セッションステータス
\r
378 char ServerName[MAX_HOST_NAME_LEN + 1]; // サーバー名
\r
379 UINT ServerPort; // サーバーのポート番号
\r
380 char ServerProductName[MAX_SIZE]; // サーバー製品名
\r
381 UINT ServerProductVer; // サーバー製品バージョン
\r
382 UINT ServerProductBuild; // サーバー製品ビルド番号
\r
383 X *ServerX; // サーバーの証明書
\r
384 X *ClientX; // クライアントの証明書
\r
385 UINT64 StartTime; // 接続開始時刻
\r
386 UINT64 FirstConnectionEstablisiedTime; // 最初のコネクションの接続完了時刻
\r
387 UINT64 CurrentConnectionEstablishTime; // このコネクションの接続完了時刻
\r
388 UINT NumConnectionsEatablished; // これまでに確立したコネクション数
\r
389 bool HalfConnection; // ハーフコネクション
\r
390 bool QoS; // VoIP / QoS
\r
391 UINT MaxTcpConnections; // 最大の TCP コネクション数
\r
392 UINT NumTcpConnections; // 現在の TCP コネクション数
\r
393 UINT NumTcpConnectionsUpload; // 上りコネクション数
\r
394 UINT NumTcpConnectionsDownload; // 下りコネクション数
\r
395 bool UseEncrypt; // 暗号化の使用
\r
396 char CipherName[32]; // 暗号化アルゴリズム名
\r
397 bool UseCompress; // 圧縮の使用
\r
398 char SessionName[MAX_SESSION_NAME_LEN + 1]; // セッション名
\r
399 char ConnectionName[MAX_CONNECTION_NAME_LEN + 1]; // コネクション名
\r
400 UCHAR SessionKey[SHA1_SIZE]; // セッションキー
\r
401 POLICY Policy; // ポリシー
\r
402 UINT64 TotalSendSize; // 合計送信データサイズ
\r
403 UINT64 TotalRecvSize; // 合計受信データサイズ
\r
404 UINT64 TotalSendSizeReal; // 合計送信データサイズ (無圧縮)
\r
405 UINT64 TotalRecvSizeReal; // 合計受信データサイズ (無圧縮)
\r
406 TRAFFIC Traffic; // トラフィックデータ
\r
407 bool IsBridgeMode; // ブリッジモード
\r
408 bool IsMonitorMode; // モニタモード
\r
409 UINT VLanId; // VLAN ID
\r
414 struct CLIENT_RPC_CONNECTION
\r
416 struct CLIENT *Client; // クライアント
\r
417 bool RpcMode; // true: RPC モード, false: 通知モード
\r
418 THREAD *Thread; // 処理スレッド
\r
419 SOCK *Sock; // ソケット
\r
426 LOCK *lockForConnect; // CtConnect 内部で使用するロック
\r
427 REF *ref; // 参照カウンタ
\r
428 CEDAR *Cedar; // Cedar
\r
429 volatile bool Halt; // 停止フラグ
\r
430 UINT Err; // エラーコード
\r
431 CFG_RW *CfgRw; // 設定ファイル R/W
\r
432 LIST *AccountList; // アカウントリスト
\r
433 UCHAR EncryptedPassword[SHA1_SIZE]; // パスワード
\r
434 bool PasswordRemoteOnly; // パスワードはリモート接続のみ必要とする
\r
435 UINT UseSecureDeviceId; // 使用するセキュアデバイス ID
\r
436 CLIENT_CONFIG Config; // クライアント設定
\r
437 LIST *RpcConnectionList; // RPC コネクションリスト
\r
438 SOCK *RpcListener; // RPC リスナ
\r
439 THREAD *RpcThread; // RPC スレッド
\r
440 LOCK *HelperLock; // 補助ロック
\r
441 THREAD *SaverThread; // 設定データ自動保存スレッド
\r
442 EVENT *SaverHalter; // 設定データ自動保存スレッド停止用イベント
\r
443 LIST *NotifyCancelList; // 通知イベントリスト
\r
444 KEEP *Keep; // Keep Connection
\r
445 LIST *UnixVLanList; // UNIX における仮想 LAN カードのリスト
\r
446 LOG *Logger; // ロガー
\r
447 bool DontSavePassword; // パスワードを保存しないフラグ
\r
448 ERASER *Eraser; // 自動ファイル削除器
\r
449 SOCKLIST *SockList; // ソケットリスト
\r
450 CM_SETTING *CmSetting; // CM 設定
\r
451 bool NoSaveLog; // ログ保存をしない
\r
452 bool NoSaveConfig; // 設定を保存しない
\r
456 struct RPC_CLIENT_NOTIFY
\r
458 UINT NotifyCode; // コード
\r
462 #define CLIENT_NOTIFY_ACCOUNT_CHANGED 1 // アカウント変化通知
\r
463 #define CLIENT_NOTIFY_VLAN_CHANGED 2 // 仮想 LAN カード変化通知
\r
466 struct REMOTE_CLIENT
\r
473 UINT ClientBuildInt;
\r
477 struct NOTIFY_CLIENT
\r
485 bool EasyMode; // 簡易モード
\r
486 bool LockMode; // 設定ロックモード
\r
487 UCHAR HashedPassword[SHA1_SIZE]; // パスワード
\r
494 REMOTE_CLIENT *CcConnectRpc(char *server_name, char *password, bool *bad_pass, bool *no_remote, UINT wait_retry);
\r
495 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);
\r
496 UINT CcShortcut(UCHAR *key);
\r
497 UINT CcShortcutDisconnect(UCHAR *key);
\r
498 void CcDisconnectRpc(REMOTE_CLIENT *rc);
\r
499 NOTIFY_CLIENT *CcConnectNotify(REMOTE_CLIENT *rc);
\r
500 void CcDisconnectNotify(NOTIFY_CLIENT *n);
\r
501 void CcStopNotify(NOTIFY_CLIENT *n);
\r
502 bool CcWaitNotify(NOTIFY_CLIENT *n);
\r
503 UINT CcGetClientVersion(REMOTE_CLIENT *r, RPC_CLIENT_VERSION *a);
\r
504 UINT CcSetCmSetting(REMOTE_CLIENT *r, CM_SETTING *a);
\r
505 UINT CcGetCmSetting(REMOTE_CLIENT *r, CM_SETTING *a);
\r
506 UINT CcSetPassword(REMOTE_CLIENT *r, RPC_CLIENT_PASSWORD *pass);
\r
507 UINT CcGetPasswordSetting(REMOTE_CLIENT *r, RPC_CLIENT_PASSWORD_SETTING *a);
\r
508 UINT CcEnumCa(REMOTE_CLIENT *r, RPC_CLIENT_ENUM_CA *e);
\r
509 UINT CcAddCa(REMOTE_CLIENT *r, RPC_CERT *cert);
\r
510 UINT CcDeleteCa(REMOTE_CLIENT *r, RPC_CLIENT_DELETE_CA *p);
\r
511 UINT CcGetCa(REMOTE_CLIENT *r, RPC_GET_CA *get);
\r
512 UINT CcEnumSecure(REMOTE_CLIENT *r, RPC_CLIENT_ENUM_SECURE *e);
\r
513 UINT CcUseSecure(REMOTE_CLIENT *r, RPC_USE_SECURE *sec);
\r
514 UINT CcGetUseSecure(REMOTE_CLIENT *r, RPC_USE_SECURE *sec);
\r
515 UINT CcEnumObjectInSecure(REMOTE_CLIENT *r, RPC_ENUM_OBJECT_IN_SECURE *e);
\r
516 UINT CcCreateVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *create);
\r
517 UINT CcUpgradeVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *create);
\r
518 UINT CcGetVLan(REMOTE_CLIENT *r, RPC_CLIENT_GET_VLAN *get);
\r
519 UINT CcSetVLan(REMOTE_CLIENT *r, RPC_CLIENT_SET_VLAN *set);
\r
520 UINT CcEnumVLan(REMOTE_CLIENT *r, RPC_CLIENT_ENUM_VLAN *e);
\r
521 UINT CcDeleteVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *d);
\r
522 UINT CcEnableVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *vlan);
\r
523 UINT CcDisableVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *vlan);
\r
524 UINT CcCreateAccount(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_ACCOUNT *a);
\r
525 UINT CcEnumAccount(REMOTE_CLIENT *r, RPC_CLIENT_ENUM_ACCOUNT *e);
\r
526 UINT CcDeleteAccount(REMOTE_CLIENT *r, RPC_CLIENT_DELETE_ACCOUNT *a);
\r
527 UINT CcSetAccount(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_ACCOUNT *a);
\r
528 UINT CcGetAccount(REMOTE_CLIENT *r, RPC_CLIENT_GET_ACCOUNT *a);
\r
529 UINT CcRenameAccount(REMOTE_CLIENT *r, RPC_RENAME_ACCOUNT *rename);
\r
530 UINT CcSetClientConfig(REMOTE_CLIENT *r, CLIENT_CONFIG *o);
\r
531 UINT CcGetClientConfig(REMOTE_CLIENT *r, CLIENT_CONFIG *o);
\r
532 UINT CcConnect(REMOTE_CLIENT *r, RPC_CLIENT_CONNECT *connect);
\r
533 UINT CcDisconnect(REMOTE_CLIENT *r, RPC_CLIENT_CONNECT *connect);
\r
534 UINT CcGetAccountStatus(REMOTE_CLIENT *r, RPC_CLIENT_GET_CONNECTION_STATUS *st);
\r
535 UINT CcSetStartupAccount(REMOTE_CLIENT *r, RPC_CLIENT_DELETE_ACCOUNT *a);
\r
536 UINT CcRemoveStartupAccount(REMOTE_CLIENT *r, RPC_CLIENT_DELETE_ACCOUNT *a);
\r
537 UINT CcGetIssuer(REMOTE_CLIENT *r, RPC_GET_ISSUER *a);
\r
538 void CcSetServiceToForegroundProcess(REMOTE_CLIENT *r);
\r
539 char *CiGetFirstVLan(CLIENT *c);
\r
540 void CiNormalizeAccountVLan(CLIENT *c);
\r
544 void CnListenerProc(THREAD *thread, void *param);
\r
546 void CnReleaseSocket(SOCK *s, PACK *p);
\r
548 void CnStatusPrinter(SOCK *s, PACK *p);
\r
549 void Win32CnStatusPrinter(SOCK *s, PACK *p);
\r
551 void CnConnectErrorDlg(SOCK *s, PACK *p);
\r
552 void Win32CnConnectErrorDlg(SOCK *s, PACK *p);
\r
553 void Win32CnConnectErrorDlgThreadProc(THREAD *thread, void *param);
\r
555 void CnPasswordDlg(SOCK *s, PACK *p);
\r
556 void Win32CnPasswordDlg(SOCK *s, PACK *p);
\r
557 void Win32CnPasswordDlgThreadProc(THREAD *thread, void *param);
\r
559 void CnMsgDlg(SOCK *s, PACK *p);
\r
560 void Win32CnMsgDlg(SOCK *s, PACK *p);
\r
561 void Win32CnMsgDlgThreadProc(THREAD *thread, void *param);
\r
563 void CnNicInfo(SOCK *s, PACK *p);
\r
564 void Win32CnNicInfo(SOCK *s, PACK *p);
\r
565 void Win32CnNicInfoThreadProc(THREAD *thread, void *param);
\r
567 void CnCheckCert(SOCK *s, PACK *p);
\r
568 void Win32CnCheckCert(SOCK *s, PACK *p);
\r
569 void Win32CnCheckCertThreadProc(THREAD *thread, void *param);
\r
571 void CnExecDriverInstaller(SOCK *s, PACK *p);
\r
572 void Win32CnExecDriverInstaller(SOCK *s, PACK *p);
\r
574 bool CnCheckAlreadyExists(bool lock);
\r
575 bool CnIsCnServiceReady();
\r
576 void CnWaitForCnServiceReady();
\r
578 void CnSecureSign(SOCK *s, PACK *p);
\r
580 SOCK *CncConnect();
\r
581 SOCK *CncConnectEx(UINT timeout);
\r
582 void CncReleaseSocket();
\r
584 UINT CncGetSessionId();
\r
585 bool CncExecDriverInstaller(char *arg);
\r
586 SOCK *CncStatusPrinterWindowStart(SESSION *s);
\r
587 void CncStatusPrinterWindowPrint(SOCK *s, wchar_t *str);
\r
588 void CncStatusPrinterWindowStop(SOCK *s);
\r
589 void CncStatusPrinterWindowThreadProc(THREAD *thread, void *param);
\r
590 bool CncConnectErrorDlg(SESSION *session, UI_CONNECTERROR_DLG *dlg);
\r
591 void CncConnectErrorDlgHaltThread(THREAD *thread, void *param);
\r
592 bool CncPasswordDlg(SESSION *session, UI_PASSWORD_DLG *dlg);
\r
593 void CncPasswordDlgHaltThread(THREAD *thread, void *param);
\r
594 void CncCheckCert(SESSION *session, UI_CHECKCERT *dlg);
\r
595 void CncCheckCertHaltThread(THREAD *thread, void *param);
\r
596 bool CncSecureSignDlg(SECURE_SIGN *sign);
\r
597 SOCK *CncMsgDlg(UI_MSG_DLG *dlg);
\r
598 void CndMsgDlgFree(SOCK *s);
\r
599 SOCK *CncNicInfo(UI_NICINFO *info);
\r
600 void CncNicInfoFree(SOCK *s);
\r
602 void CtStartClient();
\r
603 void CtStopClient();
\r
604 CLIENT *CtGetClient();
\r
605 void CtReleaseClient(CLIENT *c);
\r
606 bool CtGetClientVersion(CLIENT *c, RPC_CLIENT_VERSION *ver);
\r
607 bool CtGetCmSetting(CLIENT *c, CM_SETTING *s);
\r
608 bool CtSetCmSetting(CLIENT *c, CM_SETTING *s);
\r
609 bool CtSetPassword(CLIENT *c, RPC_CLIENT_PASSWORD *pass);
\r
610 bool CtGetPasswordSetting(CLIENT *c, RPC_CLIENT_PASSWORD_SETTING *a);
\r
611 bool CtEnumCa(CLIENT *c, RPC_CLIENT_ENUM_CA *e);
\r
612 bool CtAddCa(CLIENT *c, RPC_CERT *cert);
\r
613 bool CtDeleteCa(CLIENT *c, RPC_CLIENT_DELETE_CA *p);
\r
614 bool CtGetCa(CLIENT *c, RPC_GET_CA *get);
\r
615 bool CtEnumSecure(CLIENT *c, RPC_CLIENT_ENUM_SECURE *e);
\r
616 bool CtUseSecure(CLIENT *c, RPC_USE_SECURE *sec);
\r
617 bool CtGetUseSecure(CLIENT *c, RPC_USE_SECURE *sec);
\r
618 bool CtEnumObjectInSecure(CLIENT *c, RPC_ENUM_OBJECT_IN_SECURE *e);
\r
619 bool CtCreateVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *create);
\r
620 bool CtUpgradeVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *create);
\r
621 bool CtGetVLan(CLIENT *c, RPC_CLIENT_GET_VLAN *get);
\r
622 bool CtSetVLan(CLIENT *c, RPC_CLIENT_SET_VLAN *set);
\r
623 bool CtEnumVLan(CLIENT *c, RPC_CLIENT_ENUM_VLAN *e);
\r
624 bool CtDeleteVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *d);
\r
625 bool CtEnableVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *vlan);
\r
626 bool CtDisableVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *vlan);
\r
627 bool CtCreateAccount(CLIENT *c, RPC_CLIENT_CREATE_ACCOUNT *a);
\r
628 bool CtEnumAccount(CLIENT *c, RPC_CLIENT_ENUM_ACCOUNT *e);
\r
629 bool CtDeleteAccount(CLIENT *c, RPC_CLIENT_DELETE_ACCOUNT *a);
\r
630 bool CtSetAccount(CLIENT *c, RPC_CLIENT_CREATE_ACCOUNT *a);
\r
631 bool CtGetAccount(CLIENT *c, RPC_CLIENT_GET_ACCOUNT *a);
\r
632 bool CtRenameAccount(CLIENT *c, RPC_RENAME_ACCOUNT *rename);
\r
633 bool CtSetClientConfig(CLIENT *c, CLIENT_CONFIG *o);
\r
634 bool CtGetClientConfig(CLIENT *c, CLIENT_CONFIG *o);
\r
635 bool CtConnect(CLIENT *c, RPC_CLIENT_CONNECT *connect);
\r
636 bool CtDisconnect(CLIENT *c, RPC_CLIENT_CONNECT *connect);
\r
637 bool CtGetAccountStatus(CLIENT *c, RPC_CLIENT_GET_CONNECTION_STATUS *st);
\r
638 bool CtSetStartupAccount(CLIENT *c, RPC_CLIENT_DELETE_ACCOUNT *a);
\r
639 bool CtRemoveStartupAccount(CLIENT *c, RPC_CLIENT_DELETE_ACCOUNT *a);
\r
640 bool CtGetIssuer(CLIENT *c, RPC_GET_ISSUER *a);
\r
647 char *CiGetVpnClientExeFileName();
\r
648 void CiServerThread(THREAD *t, void *param);
\r
649 void CiInitSaver(CLIENT *c);
\r
650 void CiFreeSaver(CLIENT *c);
\r
651 void CiGetSessionStatus(RPC_CLIENT_GET_CONNECTION_STATUS *st, SESSION *s);
\r
652 PACK *CiRpcDispatch(RPC *rpc, char *name, PACK *p);
\r
653 void CiRpcAccepted(CLIENT *c, SOCK *s);
\r
654 void CiNotifyMain(CLIENT *c, SOCK *s);
\r
655 void CiRpcAcceptThread(THREAD *thread, void *param);
\r
656 void CiRpcServerThread(THREAD *thread, void *param);
\r
657 void CiStartRpcServer(CLIENT *c);
\r
658 void CiStopRpcServer(CLIENT *c);
\r
659 CLIENT_OPTION *CiLoadClientOption(FOLDER *f);
\r
660 CLIENT_AUTH *CiLoadClientAuth(FOLDER *f);
\r
661 ACCOUNT *CiLoadClientAccount(FOLDER *f);
\r
662 void CiLoadClientConfig(CLIENT_CONFIG *c, FOLDER *f);
\r
663 void CiLoadAccountDatabase(CLIENT *c, FOLDER *f);
\r
664 void CiLoadCAList(CLIENT *c, FOLDER *f);
\r
665 void CiLoadCACert(CLIENT *c, FOLDER *f);
\r
666 void CiLoadVLanList(CLIENT *c, FOLDER *f);
\r
667 void CiLoadVLan(CLIENT *c, FOLDER *f);
\r
668 bool CiReadSettingFromCfg(CLIENT *c, FOLDER *root);
\r
669 void CiWriteAccountDatabase(CLIENT *c, FOLDER *f);
\r
670 void CiWriteAccountData(FOLDER *f, ACCOUNT *a);
\r
671 void CiWriteClientOption(FOLDER *f, CLIENT_OPTION *o);
\r
672 void CiWriteClientAuth(FOLDER *f, CLIENT_AUTH *a);
\r
673 void CiWriteClientConfig(FOLDER *cc, CLIENT_CONFIG *config);
\r
674 void CiWriteSettingToCfg(CLIENT *c, FOLDER *root);
\r
675 void CiWriteCAList(CLIENT *c, FOLDER *f);
\r
676 void CiWriteCACert(CLIENT *c, FOLDER *f, X *x);
\r
677 void CiWriteVLanList(CLIENT *c, FOLDER *f);
\r
678 void CiWriteVLan(CLIENT *c, FOLDER *f, UNIX_VLAN *v);
\r
679 void CiFreeClientGetConnectionStatus(RPC_CLIENT_GET_CONNECTION_STATUS *st);
\r
680 bool CiCheckCertProc(SESSION *s, CONNECTION *c, X *server_x, bool *expired);
\r
681 bool CiSecureSignProc(SESSION *s, CONNECTION *c, SECURE_SIGN *sign);
\r
682 bool Win32CiSecureSign(SECURE_SIGN *sign);
\r
683 void CiFreeClientAuth(CLIENT_AUTH *auth);
\r
684 void CiFreeClientCreateAccount(RPC_CLIENT_CREATE_ACCOUNT *a);
\r
685 void CiFreeClientGetAccount(RPC_CLIENT_GET_ACCOUNT *a);
\r
686 void CiFreeClientEnumVLan(RPC_CLIENT_ENUM_VLAN *e);
\r
687 void CiFreeClientEnumSecure(RPC_CLIENT_ENUM_SECURE *e);
\r
688 void CiFreeClientEnumCa(RPC_CLIENT_ENUM_CA *e);
\r
689 void CiFreeEnumObjectInSecure(RPC_ENUM_OBJECT_IN_SECURE *a);
\r
690 void CiFreeGetCa(RPC_GET_CA *a);
\r
691 void CiFreeGetIssuer(RPC_GET_ISSUER *a);
\r
692 void CiFreeClientEnumAccount(RPC_CLIENT_ENUM_ACCOUNT *a);
\r
693 void CiSetError(CLIENT *c, UINT err);
\r
695 CLIENT *CiNewClient();
\r
696 void CiCleanupClient(CLIENT *c);
\r
697 bool CiLoadConfigurationFile(CLIENT *c);
\r
698 void CiSaveConfigurationFile(CLIENT *c);
\r
699 void CiInitConfiguration(CLIENT *c);
\r
700 void CiSetVLanToDefault(CLIENT *c);
\r
701 bool CiIsVLan(CLIENT *c, char *name);
\r
702 void CiFreeConfiguration(CLIENT *c);
\r
703 int CiCompareAccount(void *p1, void *p2);
\r
704 void CiFreeAccount(ACCOUNT *a);
\r
705 void CiNotify(CLIENT *c);
\r
706 void CiClientStatusPrinter(SESSION *s, wchar_t *status);
\r
707 void CiInitKeep(CLIENT *c);
\r
708 void CiFreeKeep(CLIENT *c);
\r
709 int CiCompareUnixVLan(void *p1, void *p2);
\r
710 BUF *CiAccountToCfg(RPC_CLIENT_CREATE_ACCOUNT *t);
\r
711 RPC_CLIENT_CREATE_ACCOUNT *CiCfgToAccount(BUF *b);
\r
712 void CiChangeAllVLanMacAddress(CLIENT *c);
\r
713 void CiChangeAllVLanMacAddressIfMachineChanged(CLIENT *c);
\r
714 bool CiReadLastMachineHash(void *data);
\r
715 bool CiWriteLastMachineHash(void *data);
\r
716 void CiGetCurrentMachineHash(void *data);
\r
717 void CiGetCurrentMachineHashOld(void *data);
\r
718 int CiCompareClientAccountEnumItemByLastConnectDateTime(void *p1, void *p2);
\r
720 BUF *EncryptPassword(char *password);
\r
721 char *DecryptPassword(BUF *b);
\r
723 void InRpcGetIssuer(RPC_GET_ISSUER *c, PACK *p);
\r
724 void OutRpcGetIssuer(PACK *p, RPC_GET_ISSUER *c);
\r
725 void InRpcClientVersion(RPC_CLIENT_VERSION *ver, PACK *p);
\r
726 void OutRpcClientVersion(PACK *p, RPC_CLIENT_VERSION *ver);
\r
727 void InRpcClientPassword(RPC_CLIENT_PASSWORD *pw, PACK *p);
\r
728 void OutRpcClientPassword(PACK *p, RPC_CLIENT_PASSWORD *pw);
\r
729 void InRpcClientEnumCa(RPC_CLIENT_ENUM_CA *e, PACK *p);
\r
730 void OutRpcClientEnumCa(PACK *p, RPC_CLIENT_ENUM_CA *e);
\r
731 void InRpcCert(RPC_CERT *c, PACK *p);
\r
732 void OutRpcCert(PACK *p, RPC_CERT *c);
\r
733 void InRpcClientDeleteCa(RPC_CLIENT_DELETE_CA *c, PACK *p);
\r
734 void OutRpcClientDeleteCa(PACK *p, RPC_CLIENT_DELETE_CA *c);
\r
735 void InRpcGetCa(RPC_GET_CA *c, PACK *p);
\r
736 void OutRpcGetCa(PACK *p, RPC_GET_CA *c);
\r
737 void InRpcClientEnumSecure(RPC_CLIENT_ENUM_SECURE *e, PACK *p);
\r
738 void OutRpcClientEnumSecure(PACK *p, RPC_CLIENT_ENUM_SECURE *e);
\r
739 void InRpcUseSecure(RPC_USE_SECURE *u, PACK *p);
\r
740 void OutRpcUseSecure(PACK *p, RPC_USE_SECURE *u);
\r
741 void InRpcEnumObjectInSecure(RPC_ENUM_OBJECT_IN_SECURE *e, PACK *p);
\r
742 void OutRpcEnumObjectInSecure(PACK *p, RPC_ENUM_OBJECT_IN_SECURE *e);
\r
743 void InRpcCreateVLan(RPC_CLIENT_CREATE_VLAN *v, PACK *p);
\r
744 void OutRpcCreateVLan(PACK *p, RPC_CLIENT_CREATE_VLAN *v);
\r
745 void InRpcClientGetVLan(RPC_CLIENT_GET_VLAN *v, PACK *p);
\r
746 void OutRpcClientGetVLan(PACK *p, RPC_CLIENT_GET_VLAN *v);
\r
747 void InRpcClientSetVLan(RPC_CLIENT_SET_VLAN *v, PACK *p);
\r
748 void OutRpcClientSetVLan(PACK *p, RPC_CLIENT_SET_VLAN *v);
\r
749 void InRpcClientEnumVLan(RPC_CLIENT_ENUM_VLAN *v, PACK *p);
\r
750 void OutRpcClientEnumVLan(PACK *p, RPC_CLIENT_ENUM_VLAN *v);
\r
751 void InRpcClientOption(CLIENT_OPTION *c, PACK *p);
\r
752 void OutRpcClientOption(PACK *p, CLIENT_OPTION *c);
\r
753 void InRpcClientAuth(CLIENT_AUTH *c, PACK *p);
\r
754 void OutRpcClientAuth(PACK *p, CLIENT_AUTH *c);
\r
755 void InRpcClientCreateAccount(RPC_CLIENT_CREATE_ACCOUNT *c, PACK *p);
\r
756 void OutRpcClientCreateAccount(PACK *p, RPC_CLIENT_CREATE_ACCOUNT *c);
\r
757 void InRpcClientEnumAccount(RPC_CLIENT_ENUM_ACCOUNT *e, PACK *p);
\r
758 void OutRpcClientEnumAccount(PACK *p, RPC_CLIENT_ENUM_ACCOUNT *e);
\r
759 void InRpcClientDeleteAccount(RPC_CLIENT_DELETE_ACCOUNT *a, PACK *p);
\r
760 void OutRpcClientDeleteAccount(PACK *p, RPC_CLIENT_DELETE_ACCOUNT *a);
\r
761 void InRpcRenameAccount(RPC_RENAME_ACCOUNT *a, PACK *p);
\r
762 void OutRpcRenameAccount(PACK *p, RPC_RENAME_ACCOUNT *a);
\r
763 void InRpcClientGetAccount(RPC_CLIENT_GET_ACCOUNT *c, PACK *p);
\r
764 void OutRpcClientGetAccount(PACK *p, RPC_CLIENT_GET_ACCOUNT *c);
\r
765 void InRpcClientConnect(RPC_CLIENT_CONNECT *c, PACK *p);
\r
766 void OutRpcClientConnect(PACK *p, RPC_CLIENT_CONNECT *c);
\r
767 void InRpcPolicy(POLICY *o, PACK *p);
\r
768 void OutRpcPolicy(PACK *p, POLICY *o);
\r
769 void InRpcClientGetConnectionStatus(RPC_CLIENT_GET_CONNECTION_STATUS *s, PACK *p);
\r
770 void OutRpcClientGetConnectionStatus(PACK *p, RPC_CLIENT_GET_CONNECTION_STATUS *c);
\r
771 void InRpcClientNotify(RPC_CLIENT_NOTIFY *n, PACK *p);
\r
772 void OutRpcClientNotify(PACK *p, RPC_CLIENT_NOTIFY *n);
\r
773 void InRpcClientConfig(CLIENT_CONFIG *c, PACK *p);
\r
774 void OutRpcClientConfig(PACK *p, CLIENT_CONFIG *c);
\r
775 void InRpcClientPasswordSetting(RPC_CLIENT_PASSWORD_SETTING *a, PACK *p);
\r
776 void OutRpcClientPasswordSetting(PACK *p, RPC_CLIENT_PASSWORD_SETTING *a);
\r
777 void InRpcTraffic(TRAFFIC *t, PACK *p);
\r
778 void OutRpcTraffic(PACK *p, TRAFFIC *t);
\r
779 void InRpcTrafficEx(TRAFFIC *t, PACK *p, UINT i);
\r
780 void OutRpcTrafficEx(TRAFFIC *t, PACK *p, UINT i, UINT num);
\r
781 void OutRpcCmSetting(PACK *p, CM_SETTING *c);
\r
782 void InRpcCmSetting(CM_SETTING *c, PACK *p);
\r