* copy vendor drop to trunk
[lab.git] / Dev / utvpn / utvpn-unix-v101-7101-public / src / Cedar / CMInner.h
1 // SoftEther UT-VPN SourceCode\r
2 // \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
7 // \r
8 // http://utvpn.tsukuba.ac.jp/\r
9 // \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
13 // \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
18 // \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
22 // \r
23 // このファイルは GPL バージョン 2 ライセンスで公開されています。\r
24 // 誰でもこのファイルの内容を複製、改変したり、改変したバージョンを再配布\r
25 // することができます。ただし、原著作物を改変した場合は、原著作物の著作権表示\r
26 // を除去することはできません。改変した著作物を配布する場合は、改変実施者の\r
27 // 著作権表示を原著作物の著作権表示に付随して記載するようにしてください。\r
28 // \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
32 // ホストされています。\r
33 // 本プログラムの配布者は、本プログラムを、業としての利用以外のため、\r
34 // および、試験または研究のために利用が行われることを想定して配布\r
35 // しています。\r
36 // SoftEther UT-VPN プロジェクトの Web サイトは http://utvpn.tsukuba.ac.jp/ に\r
37 // あります。\r
38 // 本ソフトウェアの不具合の修正、機能改良、セキュリティホールの修復などのコード\r
39 // の改変を行った場合で、その成果物を SoftEther UT-VPN プロジェクトに提出して\r
40 // いただける場合は、 http://utvpn.tsukuba.ac.jp/ までソースコードを送付して\r
41 // ください。SoftEther UT-VPN プロジェクトの本体リリースまたはブランチリリース\r
42 // に組み込みさせていただきます。\r
43 // \r
44 // GPL に基づいて原著作物が提供される本ソフトウェアの改良版を配布、販売する\r
45 // 場合は、そのソースコードを GPL に基づいて誰にでも開示する義務が生じます。\r
46 // \r
47 // 本ソフトウェアに関連する著作権、特許権、商標権はソフトイーサ株式会社\r
48 // (SoftEther Corporation) およびその他の著作権保持者が保有しています。\r
49 // ソフトイーサ株式会社等はこれらの権利を放棄していません。本ソフトウェアの\r
50 // 二次著作物を配布、販売する場合は、これらの権利を侵害しないようにご注意\r
51 // ください。\r
52 // \r
53 // お願い: どのような通信ソフトウェアにも通常は必ず未発見の\r
54 // セキュリティホールが潜んでいます。本ソースコードをご覧いただいた結果、\r
55 // UT-VPN にセキュリティホールを発見された場合は、当該セキュリティホールの\r
56 // 情報を不特定多数に開示される前に、必ず、ソフトイーサ株式会社\r
57 // および脆弱性情報の届出を受け付ける公的機関まで通報いただき、\r
58 // 公益保護にご協力いただきますようお願い申し上げます。\r
59 // \r
60 // ソフトイーサ株式会社は、当該セキュリティホールについて迅速に対処を\r
61 // 行い、UT-VPN および UT-VPN に関連するソフトウェアのユーザー・顧客\r
62 // を保護するための努力を行います。\r
63 // \r
64 // ソフトイーサへの届出先: http://www.softether.co.jp/jp/contact/\r
65 // 日本国内の脆弱性情報届出受付公的機関:\r
66 //         独立行政法人 情報処理推進機構\r
67 //         http://www.ipa.go.jp/security/vuln/report/\r
68 // \r
69 // 上記各事項について不明な点は、ソフトイーサ株式会社までご連絡ください。\r
70 // 連絡先: http://www.softether.co.jp/jp/contact/\r
71 \r
72 // -----------------------------------------------\r
73 // [ChangeLog]\r
74 // 2010.05.20\r
75 //  新規リリース by SoftEther\r
76 // -----------------------------------------------\r
77 \r
78 // CMInner.h\r
79 // CM.c の内部向けヘッダ\r
80 \r
81 #define STARTUP_MUTEX_NAME      "utvpncmgr_startup_mutex"\r
82 \r
83 void CmVoice(char *name);\r
84 \r
85 typedef struct CM_UAC_HELPER\r
86 {\r
87         THREAD *Thread;\r
88         volatile bool Halt;\r
89         EVENT *HaltEvent;\r
90 } CM_UAC_HELPER;\r
91 \r
92 typedef struct CM_VOICE\r
93 {\r
94         UINT voice_id;\r
95         char *perfix;\r
96 } CM_VOICE;\r
97 \r
98 static CM_VOICE cm_voice[] =\r
99 {\r
100         {VOICE_SSK,             "ssk"           },\r
101         {VOICE_AHO,             "aho"           },\r
102 };\r
103 \r
104 typedef struct CM_ENUM_HUB\r
105 {\r
106         HWND hWnd;\r
107         THREAD *Thread;\r
108         SESSION *Session;\r
109         CLIENT_OPTION *ClientOption;\r
110         TOKEN_LIST *Hub;\r
111 } CM_ENUM_HUB;\r
112 \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
117 \r
118 typedef struct CM\r
119 {\r
120         HWND hMainWnd;\r
121         HWND hStatusBar;\r
122         REMOTE_CLIENT *Client;\r
123         char *server_name;\r
124         wchar_t *import_file_name;\r
125         bool HideStatusBar;\r
126         bool HideTrayIcon;\r
127         bool ShowGrid;\r
128         bool VistaStyle;\r
129         bool ShowPort;\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
134         bool IconView;\r
135         THREAD *NotifyClientThread;\r
136         NOTIFY_CLIENT *NotifyClient;\r
137         volatile bool Halt;\r
138         bool OnCloseDispatched;\r
139         LIST *StatusWindowList;\r
140         CEDAR *Cedar;\r
141         LIST *EnumHubList;\r
142         UINT WindowCount;\r
143         bool DisableVoice;\r
144         UINT VoiceId;\r
145         UINT OldConnectedNum;\r
146         bool UpdateConnectedNumFlag;\r
147         UCHAR ShortcutKey[SHA1_SIZE];\r
148         bool TrayInited;\r
149         bool TrayAnimation;\r
150         bool TraySpeedAnimation;\r
151         UINT TrayAnimationCounter;\r
152         bool StartupMode;\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
162         HWND hEasyWnd;\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
170         bool MenuPopuping;\r
171         bool SplashHasBeenShown;\r
172 } CM;\r
173 \r
174 typedef struct CM_STATUS\r
175 {\r
176         wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1];          // アカウント名\r
177         HWND hWndPolicy;                                        // ポリシーダイアログ\r
178 } CM_STATUS;\r
179 \r
180 typedef struct CM_POLICY\r
181 {\r
182         HWND hWnd;\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
187 } CM_POLICY;\r
188 \r
189 typedef struct CM_ACCOUNT\r
190 {\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
203         RPC *Rpc;                                                       // RPC\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
213 } CM_ACCOUNT;\r
214 \r
215 typedef struct CM_CHANGE_PASSWORD\r
216 {\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
221 \r
222 typedef struct CM_TRAFFIC\r
223 {\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
230         UINT Type;                              // 種類\r
231         UINT Span;                              // 期間\r
232 } CM_TRAFFIC;\r
233 \r
234 typedef struct CM_TRAFFIC_DLG\r
235 {\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
248 } CM_TRAFFIC_DLG;\r
249 \r
250 // インターネット接続設定\r
251 typedef struct CM_INTERNET_SETTING\r
252 {\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
259 \r
260 static CM *cm = NULL;\r
261 \r
262 void CmFreeTrayExternal(void *hWnd);\r
263 \r
264 // 通常 RPC 呼び出しマクロ\r
265 __forceinline static bool CALL(HWND hWnd, UINT code)\r
266 {\r
267         UINT ret = code;\r
268         if (ret != ERR_NO_ERROR)\r
269         {\r
270                 if (ret == ERR_DISCONNECTED)\r
271                 {\r
272                         if (cm != NULL)\r
273                         {\r
274                                 Close(cm->hMainWnd);\r
275                         }\r
276                         else\r
277                         {\r
278                                 MsgBox(hWnd, MB_ICONSTOP, _UU("SM_DISCONNECTED"));\r
279                         }\r
280 \r
281                         if (cm != NULL)\r
282                         {\r
283                                 CmFreeTrayExternal((void *)cm->hMainWnd);\r
284                         }\r
285                         exit(0);\r
286                 }\r
287                 else\r
288                 {\r
289                         UINT flag = MB_ICONEXCLAMATION;\r
290                         if (ret == ERR_VLAN_IS_USED)\r
291                         {\r
292                                 CmVoice("using_vlan");\r
293                         }\r
294                         if (hWnd != NULL && cm != NULL && cm->hEasyWnd != NULL)\r
295                         {\r
296                                 hWnd = cm->hEasyWnd;\r
297                         }\r
298                         if (hWnd != NULL && cm != NULL && hWnd == cm->hEasyWnd)\r
299                         {\r
300                                 flag |= MB_SETFOREGROUND | MB_TOPMOST;\r
301                         }\r
302                         MsgBox(hWnd, flag, _E(ret));\r
303                 }\r
304         }\r
305 \r
306         if (ret == ERR_NO_ERROR)\r
307         {\r
308                 return true;\r
309         }\r
310         else\r
311         {\r
312                 return false;\r
313         }\r
314 }\r
315 \r
316 // 拡張 RPC 呼び出しマクロ (エラー値を取得する)\r
317 __forceinline static UINT CALLEX(HWND hWnd, UINT code)\r
318 {\r
319         UINT ret = code;\r
320         if (ret != ERR_NO_ERROR)\r
321         {\r
322                 if (ret == ERR_DISCONNECTED)\r
323                 {\r
324                         if (cm != NULL)\r
325                         {\r
326                                 Close(cm->hMainWnd);\r
327                         }\r
328                         else\r
329                         {\r
330                                 MsgBox(hWnd, MB_ICONSTOP, _UU("SM_DISCONNECTED"));\r
331                         }\r
332                         if (cm != NULL)\r
333                         {\r
334                                 CmFreeTrayExternal((void *)cm->hMainWnd);\r
335                         }\r
336                         exit(0);\r
337                 }\r
338         }\r
339 \r
340         return ret;\r
341 }\r
342 \r
343 typedef struct CM_LOADX\r
344 {\r
345         X *x;\r
346 } CM_LOADX;\r
347 \r
348 typedef struct CM_SETTING_DLG\r
349 {\r
350         bool CheckPassword;\r
351         UCHAR HashedPassword[SHA1_SIZE];\r
352 } CM_SETTING_DLG;\r
353 \r
354 typedef struct CM_EASY_DLG\r
355 {\r
356         bool EndDialogCalled;\r
357 } CM_EASY_DLG;\r
358 \r
359 \r
360 // タスクトレイ関係\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
377 \r
378 // スプラッシュスクリーンの枠線の色\r
379 #define CM_SPLASH_BORDER_COLOR  (RGB(102, 0, 204))\r
380 \r
381 \r
382 // 関数プロトタイプ\r
383 void InitCM();\r
384 void FreeCM();\r
385 void MainCM();\r
386 bool LoginCM();\r
387 void LogoutCM();\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
578 void CmShowEasy();\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
598 \r
599 \r
600 \r