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
81 #define STARTUP_MUTEX_NAME "utvpncmgr_startup_mutex"
\r
83 void CmVoice(char *name);
\r
85 typedef struct CM_UAC_HELPER
\r
92 typedef struct CM_VOICE
\r
98 static CM_VOICE cm_voice[] =
\r
100 {VOICE_SSK, "ssk" },
\r
101 {VOICE_AHO, "aho" },
\r
104 typedef struct CM_ENUM_HUB
\r
109 CLIENT_OPTION *ClientOption;
\r
113 #define CM_SETTING_INIT_NONE 0
\r
114 #define CM_SETTING_INIT_EASY 1 // 簡易モードへ遷移
\r
115 #define CM_SETTING_INIT_NORMAL 2 // 通常モードへ遷移
\r
116 #define CM_SETTING_INIT_SELECT 3 // 選択画面を表示
\r
122 REMOTE_CLIENT *Client;
\r
124 wchar_t *import_file_name;
\r
125 bool HideStatusBar;
\r
130 wchar_t StatudBar1[MAX_SIZE];
\r
131 wchar_t StatudBar2[MAX_SIZE];
\r
132 wchar_t StatudBar3[MAX_SIZE];
\r
133 HICON Icon2, Icon3;
\r
135 THREAD *NotifyClientThread;
\r
136 NOTIFY_CLIENT *NotifyClient;
\r
137 volatile bool Halt;
\r
138 bool OnCloseDispatched;
\r
139 LIST *StatusWindowList;
\r
145 UINT OldConnectedNum;
\r
146 bool UpdateConnectedNumFlag;
\r
147 UCHAR ShortcutKey[SHA1_SIZE];
\r
149 bool TrayAnimation;
\r
150 bool TraySpeedAnimation;
\r
151 UINT TrayAnimationCounter;
\r
153 THREAD *TryExecUiHelperThread;
\r
154 volatile bool TryExecUiHelperHalt;
\r
155 HANDLE TryExecUiHelperProcessHandle;
\r
156 EVENT *TryExecUiHelperHaltEvent;
\r
157 bool WindowsShutdowning;
\r
158 bool CmSettingSupported;
\r
159 bool CmEasyModeSupported;
\r
160 bool CmSettingInitialFlag;
\r
161 CM_SETTING CmSetting;
\r
163 bool StartupFinished;
\r
164 bool ConnectStartedFlag;
\r
165 bool PositiveDisconnectFlag;
\r
166 wchar_t EasyLastSelectedAccountName[MAX_ACCOUNT_NAME_LEN + 1];
\r
167 WINDOWPLACEMENT FakeWindowPlacement;
\r
168 INSTANCE *StartupMutex;
\r
169 bool BadProcessChecked;
\r
171 bool SplashHasBeenShown;
\r
174 typedef struct CM_STATUS
\r
176 wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // アカウント名
\r
177 HWND hWndPolicy; // ポリシーダイアログ
\r
180 typedef struct CM_POLICY
\r
183 wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1]; // アカウント名
\r
184 POLICY *Policy; // ポリシーダイアログ
\r
185 CM_STATUS *CmStatus; // CM_STATUS
\r
186 bool Extension; // 拡張
\r
189 typedef struct CM_ACCOUNT
\r
191 bool EditMode; // 編集モード (false: 新規作成モード)
\r
192 bool LinkMode; // リンクモード
\r
193 bool NatMode; // NAT モード
\r
194 CLIENT_OPTION *ClientOption; // クライアントオプション
\r
195 CLIENT_AUTH *ClientAuth; // 認証データ
\r
196 bool Startup; // スタートアップアカウント
\r
197 bool CheckServerCert; // サーバー証明書のチェック
\r
198 X *ServerCert; // サーバー証明書
\r
199 char old_server_name[MAX_HOST_NAME_LEN + 1]; // 古いサーバー名
\r
200 bool Inited; // 初期化フラグ
\r
201 POLICY Policy; // ポリシー (リンクモードのみ)
\r
202 struct SM_HUB *Hub; // HUB
\r
204 bool OnlineFlag; // オンライン フラグ
\r
205 bool Flag1; // フラグ 1
\r
206 bool HideClientCertAuth; // クライアント認証を隠す
\r
207 bool HideSecureAuth; // スマートカード認証を隠す
\r
208 bool HideTrustCert; // 信頼する証明機関ボタンを隠す
\r
209 UCHAR ShortcutKey[SHA1_SIZE]; // ショートカットキー
\r
210 bool LockMode; // 設定ロックモード
\r
211 bool Link_ConnectNow; // すぐに接続を開始する
\r
212 UINT PolicyVer; // ポリシーバージョン
\r
215 typedef struct CM_CHANGE_PASSWORD
\r
217 CLIENT_OPTION *ClientOption; // クライアントオプション
\r
218 char Username[MAX_USERNAME_LEN + 1]; // ユーザー名
\r
219 char HubName[MAX_HUBNAME_LEN + 1]; // HUB 名
\r
220 } CM_CHANGE_PASSWORD;
\r
222 typedef struct CM_TRAFFIC
\r
224 bool ServerMode; // サーバーモード
\r
225 bool Double; // 2 倍モード
\r
226 bool Raw; // 生データモード
\r
227 UINT Port; // ポート番号
\r
228 char Host[MAX_HOST_NAME_LEN + 1]; // ホスト名
\r
229 UINT NumTcp; // TCP コネクション数
\r
234 typedef struct CM_TRAFFIC_DLG
\r
236 HWND hWnd; // ウインドウハンドル
\r
237 CM_TRAFFIC *Setting; // 設定
\r
238 TTS *Tts; // 測定サーバー
\r
239 TTC *Ttc; // 測定クライアント
\r
240 THREAD *HaltThread; // 停止用スレッド
\r
241 THREAD *ClientEndWaitThread; // クライアントが終了するのを待機するスレッド
\r
242 bool Started; // 開始フラグ
\r
243 bool Stopping; // 停止中
\r
244 UINT RetCode; // 戻り値
\r
245 TT_RESULT Result; // 結果
\r
246 EVENT *ResultShowEvent; // 結果表示イベント
\r
247 bool CloseDialogAfter; // ダイアログを閉じるかどうかのフラグ
\r
251 typedef struct CM_INTERNET_SETTING
\r
253 UINT ProxyType; // プロキシサーバーの種類
\r
254 char ProxyHostName[MAX_HOST_NAME_LEN + 1]; // プロキシサーバーホスト名
\r
255 UINT ProxyPort; // プロキシサーバーポート番号
\r
256 char ProxyUsername[MAX_USERNAME_LEN + 1]; // プロキシサーバーユーザー名
\r
257 char ProxyPassword[MAX_USERNAME_LEN + 1]; // プロキシサーバーパスワード
\r
258 } CM_INTERNET_SETTING;
\r
260 static CM *cm = NULL;
\r
262 void CmFreeTrayExternal(void *hWnd);
\r
265 __forceinline static bool CALL(HWND hWnd, UINT code)
\r
268 if (ret != ERR_NO_ERROR)
\r
270 if (ret == ERR_DISCONNECTED)
\r
274 Close(cm->hMainWnd);
\r
278 MsgBox(hWnd, MB_ICONSTOP, _UU("SM_DISCONNECTED"));
\r
283 CmFreeTrayExternal((void *)cm->hMainWnd);
\r
289 UINT flag = MB_ICONEXCLAMATION;
\r
290 if (ret == ERR_VLAN_IS_USED)
\r
292 CmVoice("using_vlan");
\r
294 if (hWnd != NULL && cm != NULL && cm->hEasyWnd != NULL)
\r
296 hWnd = cm->hEasyWnd;
\r
298 if (hWnd != NULL && cm != NULL && hWnd == cm->hEasyWnd)
\r
300 flag |= MB_SETFOREGROUND | MB_TOPMOST;
\r
302 MsgBox(hWnd, flag, _E(ret));
\r
306 if (ret == ERR_NO_ERROR)
\r
316 // 拡張 RPC 呼び出しマクロ (エラー値を取得する)
\r
317 __forceinline static UINT CALLEX(HWND hWnd, UINT code)
\r
320 if (ret != ERR_NO_ERROR)
\r
322 if (ret == ERR_DISCONNECTED)
\r
326 Close(cm->hMainWnd);
\r
330 MsgBox(hWnd, MB_ICONSTOP, _UU("SM_DISCONNECTED"));
\r
334 CmFreeTrayExternal((void *)cm->hMainWnd);
\r
343 typedef struct CM_LOADX
\r
348 typedef struct CM_SETTING_DLG
\r
350 bool CheckPassword;
\r
351 UCHAR HashedPassword[SHA1_SIZE];
\r
354 typedef struct CM_EASY_DLG
\r
356 bool EndDialogCalled;
\r
361 #define WM_CM_TRAY_MESSAGE (WM_APP + 44)
\r
362 #define WM_CM_SETTING_CHANGED_MESSAGE (WM_APP + 45)
\r
363 #define WM_CM_EASY_REFRESH (WM_APP + 46)
\r
364 #define WM_CM_SHOW (WM_APP + 47)
\r
365 #define CMD_EASY_DBLCLICK 40697
\r
366 #define CM_TRAY_ANIMATION_INTERVAL 3000
\r
367 #define CM_TRAY_MAX_ITEMS 4096
\r
368 #define CM_TRAY_MENU_ID_START 12000
\r
369 #define CM_TRAY_MENU_CONNECT_ID_START (CM_TRAY_MENU_ID_START + CM_TRAY_MAX_ITEMS)
\r
370 #define CM_TRAY_MENU_STATUS_ID_START (CM_TRAY_MENU_CONNECT_ID_START + CM_TRAY_MAX_ITEMS)
\r
371 #define CM_TRAY_MENU_DISCONNECT_ID_START (CM_TRAY_MENU_STATUS_ID_START + CM_TRAY_MAX_ITEMS)
\r
372 #define CM_TRAY_MENU_RECENT_ID_START (CM_TRAY_MENU_DISCONNECT_ID_START + CM_TRAY_MAX_ITEMS)
\r
373 #define CM_TRAY_IS_CONNECT_ID(id) (((id) >= CM_TRAY_MENU_CONNECT_ID_START) && (id) < CM_TRAY_MENU_STATUS_ID_START)
\r
374 #define CM_TRAY_IS_STATUS_ID(id) (((id) >= CM_TRAY_MENU_STATUS_ID_START) && (id) < CM_TRAY_MENU_DISCONNECT_ID_START)
\r
375 #define CM_TRAY_IS_DISCONNECT_ID(id) (((id) >= CM_TRAY_MENU_DISCONNECT_ID_START) && (id) < (CM_TRAY_MENU_DISCONNECT_ID_START + CM_TRAY_MAX_ITEMS))
\r
376 #define CM_TRAY_IS_RECENT_ID(id) (((id) >= CM_TRAY_MENU_RECENT_ID_START) && (id) < (CM_TRAY_MENU_RECENT_ID_START + CM_TRAY_MAX_ITEMS))
\r
378 // スプラッシュスクリーンの枠線の色
\r
379 #define CM_SPLASH_BORDER_COLOR (RGB(102, 0, 204))
\r
388 UINT CmLoginDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
389 void MainCMWindow();
\r
390 void CmSendImportMessage(HWND hWnd, wchar_t *filename, UINT msg);
\r
391 UINT CmMainWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
392 void CmMainWindowOnSize(HWND hWnd);
\r
393 void CmMainWindowOnInit(HWND hWnd);
\r
394 void CmMainWindowOnQuit(HWND hWnd);
\r
395 void CmSaveMainWindowPos(HWND hWnd);
\r
396 void CmMainWindowOnCommand(HWND hWnd, WPARAM wParam, LPARAM lParam);
\r
397 void CmMainWindowOnCommandEx(HWND hWnd, WPARAM wParam, LPARAM lParam, bool easy);
\r
398 bool CmIsEnabled(HWND hWnd, UINT id);
\r
399 bool CmIsChecked(UINT id);
\r
400 bool CmIsBold(UINT id);
\r
401 void CmMainWindowOnPopupMenu(HWND hWnd, HMENU hMenu, UINT pos);
\r
402 void CmSaveMainWindowPos(HWND hWnd);
\r
403 void CmRedrawStatusBar(HWND hWnd);
\r
404 void CmRefresh(HWND hWnd);
\r
405 void CmRefreshEx(HWND hWnd, bool style_changed);
\r
406 void CmSetForegroundProcessToCnService();
\r
407 void CmInitAccountList(HWND hWnd);
\r
408 void CmInitAccountListEx(HWND hWnd, bool easy);
\r
409 void CmInitVLanList(HWND hWnd);
\r
410 void CmRefreshAccountList(HWND hWnd);
\r
411 void CmRefreshAccountListEx(HWND hWnd, bool easy);
\r
412 void CmRefreshAccountListEx2(HWND hWnd, bool easy, bool style_changed);
\r
413 void CmRefreshVLanList(HWND hWnd);
\r
414 void CmRefreshVLanListEx(HWND hWnd, bool style_changed);
\r
415 void CmSaveAccountListPos(HWND hWnd);
\r
416 void CmSaveVLanListPos(HWND hWnd);
\r
417 wchar_t *CmGetProtocolName(UINT n);
\r
418 void CmVLanNameToPrintName(char *str, UINT size, char *name);
\r
419 bool CmPrintNameToVLanName(char *name, UINT size, char *str);
\r
420 void CmMainWindowOnNotify(HWND hWnd, NMHDR *n);
\r
421 void CmOnKey(HWND hWnd, bool ctrl, bool alt, UINT key);
\r
422 void CmAccountListRightClick(HWND hWnd);
\r
423 void CmVLanListRightClick(HWND hWnd);
\r
424 void CmConnect(HWND hWnd, wchar_t *account_name);
\r
425 void CmDisconnect(HWND hWnd, wchar_t *account_name);
\r
426 void CmInitNotifyClientThread();
\r
427 void CmFreeNotifyClientThread();
\r
428 void CmNotifyClientThread(THREAD *thread, void *param);
\r
429 void CmDeleteAccount(HWND hWnd, wchar_t *account_name);
\r
430 void CmStatus(HWND hWnd, wchar_t *account_name);
\r
431 void CmStatusDlg(HWND hWnd, wchar_t *account_name);
\r
432 UINT CmStatusDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
433 void CmStatusDlgPrint(HWND hWnd, CM_STATUS *cmst);
\r
434 void CmPrintStatusToListView(LVB *b, RPC_CLIENT_GET_CONNECTION_STATUS *s);
\r
435 void CmPrintStatusToListViewEx(LVB *b, RPC_CLIENT_GET_CONNECTION_STATUS *s, bool server_mode);
\r
436 void CmStatusDlgPrintCert(HWND hWnd, CM_STATUS *st, bool server);
\r
437 void CmPolicyDlg(HWND hWnd, CM_STATUS *st);
\r
438 UINT CmPolicyDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
439 void CmPolicyDlgPrint(HWND hWnd, CM_POLICY *p);
\r
440 void CmPolicyDlgPrintEx(HWND hWnd, CM_POLICY *p, bool cascade_mode);
\r
441 void CmPolicyDlgPrintEx2(HWND hWnd, CM_POLICY *p, bool cascade_mode, bool ver);
\r
442 void CmNewAccount(HWND hWnd);
\r
443 void CmEditAccount(HWND hWnd, wchar_t *account_name);
\r
444 void CmGenerateNewAccountName(HWND hWnd, wchar_t *name, UINT size);
\r
445 void CmGenerateCopyName(HWND hWnd, wchar_t *name, UINT size, wchar_t *old_name);
\r
446 void CmGenerateImportName(HWND hWnd, wchar_t *name, UINT size, wchar_t *old_name);
\r
447 CM_ACCOUNT *CmCreateNewAccountObject(HWND hWnd);
\r
448 CM_ACCOUNT *CmGetExistAccountObject(HWND hWnd, wchar_t *account_name);
\r
449 void CmEnumHubStart(HWND hWnd, CLIENT_OPTION *o);
\r
450 void CmInitEnumHub();
\r
451 void CmFreeEnumHub();
\r
452 void CmFreeAccountObject(HWND hWnd, CM_ACCOUNT *a);
\r
453 bool CmEditAccountDlg(HWND hWnd, CM_ACCOUNT *a);
\r
454 UINT CmEditAccountDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
455 void CmEditAccountDlgUpdate(HWND hWnd, CM_ACCOUNT *a);
\r
456 void CmEditAccountDlgInit(HWND hWnd, CM_ACCOUNT *a);
\r
457 void CmEditAccountDlgOnOk(HWND hWnd, CM_ACCOUNT *a);
\r
458 void CmEditAccountDlgStartEnumHub(HWND hWnd, CM_ACCOUNT *a);
\r
459 bool CmLoadXAndK(HWND hWnd, X **x, K **k);
\r
460 bool CmLoadK(HWND hWnd, K **k);
\r
461 bool CmLoadKEx(HWND hWnd, K **k, char *filename, UINT size);
\r
462 bool CmLoadKExW(HWND hWnd, K **k, wchar_t *filename, UINT size);
\r
463 bool CmLoadXFromFileOrSecureCard(HWND hWnd, X **x);
\r
464 void CmLoadXFromFileOrSecureCardDlgInit(HWND hWnd, CM_LOADX *p);
\r
465 void CmLoadXFromFileOrSecureCardDlgUpdate(HWND hWnd, CM_LOADX *p);
\r
466 UINT CmLoadXFromFileOrSecureCardDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
467 bool CmLoadX(HWND hWnd, X **x);
\r
468 bool CmLoadXEx(HWND hWnd, X **x, char *filename, UINT size);
\r
469 bool CmLoadXExW(HWND hWnd, X **x, wchar_t *filename, UINT size);
\r
470 X *CmGetIssuer(X *x);
\r
471 bool CmProxyDlg(HWND hWnd, CLIENT_OPTION *a);
\r
472 void CmProxyDlgUpdate(HWND hWnd, CLIENT_OPTION *a);
\r
473 UINT CmProxyDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
474 bool CmDetailDlg(HWND hWnd, CM_ACCOUNT *a);
\r
475 UINT CmDetailDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
476 char *CmNewVLanDlg(HWND hWnd);
\r
477 UINT CmNewVLanDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
478 void CmCopyAccount(HWND hWnd, wchar_t *account_name);
\r
479 void CmExportAccount(HWND hWnd, wchar_t *account_name);
\r
480 void CmSortcut(HWND hWnd, wchar_t *account_name);
\r
481 void CmImportAccount(HWND hWnd);
\r
482 void CmImportAccountMain(HWND hWnd, wchar_t *filename);
\r
483 void CmImportAccountMainEx(HWND hWnd, wchar_t *filename, bool overwrite);
\r
484 void CmTrustDlg(HWND hWnd);
\r
485 UINT CmTrustDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
486 void CmTrustDlgUpdate(HWND hWnd);
\r
487 void CmTrustDlgRefresh(HWND hWnd);
\r
488 void CmTrustImport(HWND hWnd);
\r
489 void CmTrustExport(HWND hWnd);
\r
490 void CmTrustView(HWND hWnd);
\r
491 void CmPassword(HWND hWnd);
\r
492 UINT CmPasswordProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
493 void CmPasswordRefresh(HWND hWnd);
\r
494 void CmRefreshStatusBar(HWND hWnd);
\r
495 UINT CmGetNumConnected(HWND hWnd);
\r
496 void CmDisconnectAll(HWND hWnd);
\r
497 wchar_t *CmGenerateMainWindowTitle();
\r
498 void CmConfigDlg(HWND hWnd);
\r
499 UINT CmConfigDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
500 void CmConfigDlgInit(HWND hWnd);
\r
501 void CmConfigDlgRefresh(HWND hWnd);
\r
502 void CmConfigDlgOnOk(HWND hWnd);
\r
503 bool CmWarningDesktop(HWND hWnd, wchar_t *account_name);
\r
504 UINT CmDesktopDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
505 void CmDesktopDlgInit(HWND hWnd, wchar_t *account_name);
\r
506 void CmChangePassword(HWND hWnd, CLIENT_OPTION *o, char *hubname, char *username);
\r
507 UINT CmChangePasswordProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
508 void CmChangePasswordUpdate(HWND hWnd, CM_CHANGE_PASSWORD *p);
\r
509 void SmShowPublicVpnServerHtml(HWND hWnd);
\r
510 void CmConnectShortcut(UCHAR *key);
\r
511 UINT CmSelectSecure(HWND hWnd, UINT current_id);
\r
512 void CmClientSecureManager(HWND hWnd);
\r
513 UINT CmClientSelectSecure(HWND hWnd);
\r
514 UINT CmSelectSecureDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
515 void CmSelectSecureDlgInit(HWND hWnd, UINT default_id);
\r
516 void CmSelectSecureDlgUpdate(HWND hWnd);
\r
517 void CmSecureManager(HWND hWnd, UINT id);
\r
518 void CmSecureManagerEx(HWND hWnd, UINT id, bool no_new_cert);
\r
519 UINT CmSecureManagerDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
520 void CmSecureManagerDlgInit(HWND hWnd, UINT id);
\r
521 void CmSecureManagerDlgUpdate(HWND hWnd, UINT id);
\r
522 void CmSecureManagerDlgRefresh(HWND hWnd, UINT id);
\r
523 void CmSecureManagerDlgPrintList(HWND hWnd, LIST *o);
\r
524 void CmSecureManagerDlgPrintListEx(HWND hWnd, UINT id, LIST *o, UINT type);
\r
525 wchar_t *CmSecureObjTypeToStr(UINT type);
\r
526 UINT CmSecureType(HWND hWnd);
\r
527 UINT CmSecureTypeDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
528 void CmSecureManagerDlgImport(HWND hWnd, UINT id);
\r
529 void CmSecureManagerDlgDelete(HWND hWnd, UINT id);
\r
530 void CmSecureManagerDlgExport(HWND hWnd, UINT id);
\r
531 void CmSecureManagerDlgNewCert(HWND hWnd, UINT id);
\r
532 void CmSecurePin(HWND hWnd, UINT id);
\r
533 UINT CmSecurePinDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
534 void CmSecurePinDlgUpdate(HWND hWnd);
\r
535 void CmInitTray(HWND hWnd);
\r
536 void CmPollingTray(HWND hWnd);
\r
537 void CmFreeTray(HWND hWnd);
\r
538 void CmChangeTrayString(HWND hWnd, wchar_t *str);
\r
539 UINT CmGetTrayIconId(bool animation, UINT animation_counter);
\r
540 void CmShowOrHideWindow(HWND hWnd);
\r
541 void CmShowTrayMenu(HWND hWnd);
\r
542 HMENU CmCreateTraySubMenu(HWND hWnd, bool flag, UINT start_id);
\r
543 HMENU CmCreateRecentSubMenu(HWND hWnd, UINT start_id);
\r
544 bool CmCheckPkcsEula(HWND hWnd, UINT id);
\r
545 UINT CmPkcsEulaDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
546 void CmDeleteOldStartupTrayFile();
\r
547 UINT CmTrafficDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
548 void CmTrafficDlgInit(HWND hWnd);
\r
549 bool CmTrafficDlgUpdate(HWND hWnd);
\r
550 void CmTrafficDlgOnOk(HWND hWnd);
\r
551 bool CmTrafficLoadFromReg(CM_TRAFFIC *t);
\r
552 void CmTrafficGetDefaultSetting(CM_TRAFFIC *t);
\r
553 void CmTrafficSaveToReg(CM_TRAFFIC *t);
\r
554 void CmTrafficDlgToStruct(HWND hWnd, CM_TRAFFIC *t);
\r
555 void CmExecTraffic(HWND hWnd, CM_TRAFFIC *t);
\r
556 UINT CmTrafficRunDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
557 void CmTrafficRunDlgInit(HWND hWnd, CM_TRAFFIC_DLG *d);
\r
558 void CmTrafficRunDlgStart(HWND hWnd, CM_TRAFFIC_DLG *d);
\r
559 void CmTrafficRunDlgPrintProc(void *param, wchar_t *str);
\r
560 void CmTrafficRunDlgAddStr(HWND hWnd, wchar_t *str);
\r
561 void CmTrafficRunDlgHalt(HWND hWnd, CM_TRAFFIC_DLG *d);
\r
562 void CmTrafficRunDlgHaltThread(THREAD *t, void *param);
\r
563 void CmTrafficRunDlgClientWaitThread(THREAD *t, void *param);
\r
564 void CmTrafficResult(HWND hWnd, TT_RESULT *r);
\r
565 UINT CmTrafficResultDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
566 void CmTrafficResultDlgInit(HWND hWnd, TT_RESULT *res);
\r
567 void CmTryToExecUiHelper();
\r
568 void CmInitTryToExecUiHelper();
\r
569 void CmFreeTryToExecUiHelper();
\r
570 void CmTryToExecUiHelperThread(THREAD *thread, void *param);
\r
571 bool CmSetting(HWND hWnd);
\r
572 UINT CmSettingDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
573 void CmSettingDlgInit(HWND hWnd, CM_SETTING_DLG *d);
\r
574 void CmSettingDlgUpdate(HWND hWnd, CM_SETTING_DLG *d);
\r
575 void CmSettingDlgOnOk(HWND hWnd, CM_SETTING_DLG *d);
\r
576 void CmApplyCmSetting();
\r
577 void CmMainWindowOnTrayClicked(HWND hWnd, WPARAM wParam, LPARAM lParam);
\r
579 void CmCloseEasy();
\r
580 void CmMainWindowOnShowEasy(HWND hWnd);
\r
581 UINT CmEasyDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param);
\r
582 void CmEasyDlgInit(HWND hWnd, CM_EASY_DLG *d);
\r
583 void CmEasyDlgUpdate(HWND hWnd, CM_EASY_DLG *d);
\r
584 void CmEasyDlgRefresh(HWND hWnd, CM_EASY_DLG *d);
\r
585 void CmRefreshEasy();
\r
586 void CmEasyDlgOnNotify(HWND hWnd, CM_EASY_DLG *d, NMHDR *n);
\r
587 void CmEasyDlgOnKey(HWND hWnd, CM_EASY_DLG *d, bool ctrl, bool alt, UINT key);
\r
588 void CmEasyDlgOnCommand(HWND hWnd, CM_EASY_DLG *d, WPARAM wParam, LPARAM lParam);
\r
589 bool CmStartStartupMutex();
\r
590 void CmEndStartupMutex();
\r
591 void CmSetUacWindowActive();
\r
592 void CmUacHelperThread(THREAD *thread, void *param);
\r
593 void CmProxyDlgUseForIE(HWND hWnd, CLIENT_OPTION *o);
\r
594 void CmGetSystemInternetSetting(CM_INTERNET_SETTING *setting);
\r
595 void CmProxyDlgSet(HWND hWnd, CLIENT_OPTION *o, CM_INTERNET_SETTING *setting);
\r
596 bool CmGetProxyServerNameAndPortFromIeProxyRegStr(char *name, UINT name_size, UINT *port, char *str, char *server_type);
\r
597 void *CmUpdateJumpList(UINT start_id);
\r