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
79 // Win32 用 SoftEther UT-VPN Server Manager
\r
88 #define _WIN32_WINNT 0x0502
\r
89 #define WINVER 0x0502
\r
90 #include <winsock2.h>
\r
91 #include <windows.h>
\r
92 #include <wincrypt.h>
\r
93 #include <wininet.h>
\r
95 #include <commctrl.h>
\r
96 #include <Dbghelp.h>
\r
101 #include <stdarg.h>
\r
104 #include <Mayaqua/Mayaqua.h>
\r
105 #include <Cedar/Cedar.h>
\r
106 #include "CMInner.h"
\r
107 #include "SMInner.h"
\r
108 #include "NMInner.h"
\r
109 #include "../PenCore/resource.h"
\r
112 static SM *sm = NULL;
\r
113 static bool link_create_now = false;
\r
116 void SmHubMsg(HWND hWnd, SM_EDIT_HUB *s)
\r
124 Dialog(hWnd, D_SM_MSG, SmHubMsgDlg, s);
\r
127 // メッセージダイアログプロシージャ
\r
128 UINT SmHubMsgDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
130 SM_EDIT_HUB *s = (SM_EDIT_HUB *)param;
\r
139 case WM_INITDIALOG:
\r
140 SmHubMsgDlgInit(hWnd, s);
\r
144 switch (LOWORD(wParam))
\r
147 SmHubMsgDlgUpdate(hWnd, s);
\r
154 SmHubMsgDlgOnOk(hWnd, s);
\r
162 SmHubMsgDlgUpdate(hWnd, s);
\r
164 if (IsChecked(hWnd, C_USEMSG))
\r
166 FocusEx(hWnd, E_TEXT);
\r
174 EndDialog(hWnd, 0);
\r
182 void SmHubMsgDlgInit(HWND hWnd, SM_EDIT_HUB *s)
\r
186 if (hWnd == NULL || s == NULL)
\r
193 SetFont(hWnd, E_TEXT, GetMeiryoFont());
\r
197 DlgFont(hWnd, E_TEXT, 11, false);
\r
200 FormatText(hWnd, S_MSG_2, s->HubName);
\r
202 LimitText(hWnd, E_TEXT, HUB_MAXMSG_LEN);
\r
204 Zero(&t, sizeof(t));
\r
206 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
208 if (CALL(hWnd, ScGetHubMsg(s->p->Rpc, &t)) == false)
\r
214 if (UniIsEmptyStr(t.Msg) == false)
\r
216 SetText(hWnd, E_TEXT, t.Msg);
\r
218 Check(hWnd, C_USEMSG, true);
\r
222 Check(hWnd, C_USEMSG, false);
\r
227 SmHubMsgDlgUpdate(hWnd, s);
\r
231 void SmHubMsgDlgOnOk(HWND hWnd, SM_EDIT_HUB *s)
\r
235 if (hWnd == NULL || s == NULL)
\r
240 Zero(&t, sizeof(t));
\r
242 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
244 if (IsChecked(hWnd, C_USEMSG) == false)
\r
246 t.Msg = CopyUniStr(L"");
\r
250 t.Msg = GetText(hWnd, E_TEXT);
\r
253 if (CALL(hWnd, ScSetHubMsg(s->p->Rpc, &t)) == false)
\r
260 EndDialog(hWnd, 1);
\r
264 void SmHubMsgDlgUpdate(HWND hWnd, SM_EDIT_HUB *s)
\r
268 if (hWnd == NULL || s == NULL)
\r
273 SetEnable(hWnd, E_TEXT, IsChecked(hWnd, C_USEMSG));
\r
275 if (IsChecked(hWnd, C_USEMSG))
\r
277 wchar_t *s = GetText(hWnd, E_TEXT);
\r
279 b = !IsEmptyUniStr(s);
\r
284 SetEnable(hWnd, IDOK, b);
\r
288 void SmVLan(HWND hWnd, SM_SERVER *s)
\r
296 Dialog(hWnd, D_SM_VLAN, SmVLanDlg, s);
\r
300 UINT SmVLanDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
302 SM_SERVER *s = (SM_SERVER *)param;
\r
313 case WM_INITDIALOG:
\r
314 SmVLanDlgInit(hWnd, s);
\r
316 if (LvNum(hWnd, L_LIST) == 0)
\r
318 Disable(hWnd, L_LIST);
\r
319 SetTimer(hWnd, 1, 100, NULL);
\r
327 KillTimer(hWnd, 1);
\r
329 MsgBoxEx(hWnd, MB_ICONINFORMATION, _UU("SM_VLAN_NOTHING"),
\r
330 s->CurrentSetting->ClientOption.Hostname);
\r
346 UINT i = LvGetSelected(hWnd, L_LIST);
\r
349 char *name = LvGetStrA(hWnd, L_LIST, i, 0);
\r
351 if (IsEmptyStr(name) == false)
\r
355 Zero(&t, sizeof(t));
\r
357 StrCpy(t.StrValue, sizeof(t.StrValue), name);
\r
358 t.IntValue = BOOL_TO_INT(wParam == B_ENABLE);
\r
360 if (CALL(hWnd, ScSetEnableEthVLan(s->Rpc, &t)))
\r
362 SmVLanDlgRefresh(hWnd, s);
\r
364 if (wParam == B_ENABLE)
\r
366 MsgBoxEx(hWnd, MB_ICONINFORMATION,
\r
367 _UU("SM_VLAN_MSG_1"),
\r
372 MsgBoxEx(hWnd, MB_ICONINFORMATION,
\r
373 _UU("SM_VLAN_MSG_2"),
\r
387 n = (NMHDR *)lParam;
\r
393 case LVN_ITEMCHANGED:
\r
394 SmVLanDlgUpdate(hWnd, s);
\r
402 EndDialog(hWnd, 0);
\r
410 void SmVLanDlgInit(HWND hWnd, SM_SERVER *s)
\r
413 if (hWnd == NULL || s == NULL)
\r
418 LvInit(hWnd, L_LIST);
\r
419 LvInsertColumn(hWnd, L_LIST, 0, _UU("SM_VLAN_COLUMN_0"), 245);
\r
420 LvInsertColumn(hWnd, L_LIST, 1, _UU("SM_VLAN_COLUMN_1"), 75);
\r
421 LvInsertColumn(hWnd, L_LIST, 2, _UU("SM_VLAN_COLUMN_2"), 100);
\r
422 LvInsertColumn(hWnd, L_LIST, 3, _UU("SM_VLAN_COLUMN_3"), 100);
\r
423 LvInsertColumn(hWnd, L_LIST, 4, _UU("SM_VLAN_COLUMN_4"), 290);
\r
424 LvInsertColumn(hWnd, L_LIST, 5, _UU("SM_VLAN_COLUMN_5"), 430);
\r
426 SmVLanDlgRefresh(hWnd, s);
\r
430 void SmVLanDlgRefresh(HWND hWnd, SM_SERVER *s)
\r
433 RPC_ENUM_ETH_VLAN t;
\r
436 if (hWnd == NULL || s == NULL)
\r
441 Zero(&t, sizeof(t));
\r
442 if (CALL(hWnd, ScEnumEthVLan(s->Rpc, &t)) == false)
\r
448 b = LvInsertStart();
\r
450 for (i = 0;i < t.NumItem;i++)
\r
452 RPC_ENUM_ETH_VLAN_ITEM *e = &t.Items[i];
\r
456 wchar_t tmp0[MAX_SIZE];
\r
457 wchar_t tmp1[MAX_SIZE];
\r
458 wchar_t tmp2[MAX_SIZE];
\r
460 wchar_t tmp4[MAX_SIZE];
\r
461 wchar_t tmp5[MAX_SIZE];
\r
463 StrToUni(tmp0, sizeof(tmp0), e->DeviceName);
\r
464 StrToUni(tmp1, sizeof(tmp1), e->DriverType);
\r
465 StrToUni(tmp2, sizeof(tmp2), e->DriverName);
\r
466 tmp3 = (e->Enabled ? _UU("SM_VLAN_YES") : _UU("SM_VLAN_NO"));
\r
467 StrToUni(tmp4, sizeof(tmp4), e->Guid);
\r
468 StrToUni(tmp5, sizeof(tmp5), e->DeviceInstanceId);
\r
471 e->Enabled ? ICO_NIC_ONLINE : ICO_NIC_OFFLINE, 0, 6,
\r
472 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5);
\r
476 LvInsertEnd(b, hWnd, L_LIST);
\r
478 FreeRpcEnumEthVLan(&t);
\r
480 SmVLanDlgUpdate(hWnd, s);
\r
483 // VLAN ダイアログコントロール更新
\r
484 void SmVLanDlgUpdate(HWND hWnd, SM_SERVER *s)
\r
487 if (hWnd == NULL || s == NULL)
\r
492 if (LvIsSingleSelected(hWnd, L_LIST) == false)
\r
494 Disable(hWnd, B_ENABLE);
\r
495 Disable(hWnd, B_DISABLE);
\r
499 UINT i = LvGetSelected(hWnd, L_LIST);
\r
502 wchar_t *s = LvGetStr(hWnd, L_LIST, i, 3);
\r
504 if (UniStrCmpi(s, _UU("SM_VLAN_YES")) != 0)
\r
506 Enable(hWnd, B_ENABLE);
\r
507 Disable(hWnd, B_DISABLE);
\r
511 Enable(hWnd, B_DISABLE);
\r
512 Disable(hWnd, B_ENABLE);
\r
520 // 現在の VPN Server / VPN Bridge の状態が初期状態かどうか調べる
\r
521 bool SmSetupIsNew(SM_SERVER *s)
\r
525 char hubname[MAX_HUBNAME_LEN + 1];
\r
526 bool check_hub = false;
\r
533 if (s->ServerAdminMode == false)
\r
539 is_bridge =s->Bridge;
\r
544 RPC_BRIDGE_SUPPORT t;
\r
546 Zero(&t, sizeof(t));
\r
548 if (ScGetBridgeSupport(rpc, &t) == ERR_NO_ERROR)
\r
550 if (t.IsBridgeSupportedOs == false ||
\r
563 if (is_bridge == false)
\r
568 Zero(&t, sizeof(t));
\r
569 if (ScGetServerInfo(rpc, &t) == ERR_NO_ERROR)
\r
571 if (t.ServerType != SERVER_TYPE_STANDALONE)
\r
576 FreeRpcServerInfo(&t);
\r
592 RPC_ENUM_LOCALBRIDGE t;
\r
595 Zero(&t, sizeof(t));
\r
596 if (ScEnumLocalBridge(rpc, &t) == ERR_NO_ERROR)
\r
598 if (t.NumItem != 0)
\r
602 FreeRpcEnumLocalBridge(&t);
\r
615 if (is_bridge == false)
\r
620 Zero(&t, sizeof(t));
\r
621 if (ScEnumHub(rpc, &t) == ERR_NO_ERROR)
\r
627 else if (t.NumHub == 1)
\r
629 if (StrCmpi(t.Hubs[0].HubName, SERVER_DEFAULT_HUB_NAME) != 0)
\r
639 FreeRpcEnumHub(&t);
\r
653 if (is_bridge == false)
\r
655 StrCpy(hubname, sizeof(hubname), SERVER_DEFAULT_HUB_NAME);
\r
659 StrCpy(hubname, sizeof(hubname), SERVER_DEFAULT_BRIDGE_NAME);
\r
666 // 仮想 HUB 内のオブジェクト数
\r
669 Zero(&t, sizeof(t));
\r
670 StrCpy(t.HubName, sizeof(t.HubName), hubname);
\r
672 if (ScGetHubStatus(rpc, &t) == ERR_NO_ERROR)
\r
674 if (t.NumSessions != 0 || t.NumAccessLists != 0 ||
\r
675 t.NumUsers != 0 || t.NumGroups != 0 ||
\r
676 t.NumMacTables != 0 || t.NumIpTables != 0 ||
\r
677 t.SecureNATEnabled)
\r
693 Zero(&t, sizeof(t));
\r
694 StrCpy(t.HubName, sizeof(t.HubName), hubname);
\r
696 if (ScEnumLink(rpc, &t) == ERR_NO_ERROR)
\r
700 if (t.NumLink != 0)
\r
705 FreeRpcEnumLink(&t);
\r
718 if (is_bridge == false)
\r
723 Zero(&t, sizeof(t));
\r
724 StrCpy(t.HubName, sizeof(t.HubName), hubname);
\r
726 if (ScEnumCa(rpc, &t) == ERR_NO_ERROR)
\r
735 FreeRpcHubEnumCa(&t);
\r
748 if (is_bridge == false)
\r
753 Zero(&t, sizeof(t));
\r
754 StrCpy(t.HubName, sizeof(t.HubName), hubname);
\r
756 if (ScEnumCrl(rpc, &t) == ERR_NO_ERROR)
\r
760 if (t.NumItem != 0)
\r
765 FreeRpcEnumCrl(&t);
\r
778 if (is_bridge == false)
\r
783 Zero(&t, sizeof(t));
\r
784 StrCpy(t.HubName, sizeof(t.HubName), hubname);
\r
786 if (ScGetHubRadius(rpc, &t) == ERR_NO_ERROR)
\r
788 if (IsEmptyStr(t.RadiusServerName) == false)
\r
799 if (is_bridge == false)
\r
804 Zero(&t, sizeof(t));
\r
805 StrCpy(t.HubName, sizeof(t.HubName), hubname);
\r
807 if (ScGetHub(rpc, &t) == ERR_NO_ERROR)
\r
809 if (t.HubOption.NoEnum || t.HubOption.MaxSession != 0 ||
\r
821 if (is_bridge == false)
\r
826 Zero(&t, sizeof(t));
\r
827 StrCpy(t.HubName, sizeof(t.HubName), hubname);
\r
829 if (ScGetAcList(rpc, &t) == ERR_NO_ERROR)
\r
832 if (LIST_NUM(t.o) != 0)
\r
849 if (is_bridge == false)
\r
852 RPC_ADMIN_OPTION t;
\r
854 Zero(&t, sizeof(t));
\r
855 StrCpy(t.HubName, sizeof(t.HubName), hubname);
\r
857 if (ScGetHubAdminOptions(rpc, &t) == ERR_NO_ERROR)
\r
862 for (i = 0;i < t.NumItem;i++)
\r
864 if (t.Items[i].Value != 0)
\r
870 FreeRpcAdminOption(&t);
\r
885 if (is_bridge == false)
\r
890 Zero(&t, sizeof(t));
\r
891 if (ScEnumL3Switch(rpc, &t) == ERR_NO_ERROR)
\r
893 if (t.NumItem != 0)
\r
898 FreeRpcEnumL3Sw(&t);
\r
914 // セットアップ手順ダイアログ初期化
\r
915 void SmSetupStepDlgInit(HWND hWnd, SM_SETUP *s)
\r
921 if (hWnd == NULL || s == NULL)
\r
926 SetIcon(hWnd, 0, ICO_SETUP);
\r
928 DlgFont(hWnd, S_1_1, 0, true);
\r
929 DlgFont(hWnd, S_2_1, 0, true);
\r
930 DlgFont(hWnd, S_3_1, 0, true);
\r
937 if (s->UseSite && s->UseSiteEdge == false)
\r
942 SetEnable(hWnd, S_1_1, b);
\r
943 SetEnable(hWnd, S_1_2, b);
\r
944 SetEnable(hWnd, B_USER, b);
\r
947 if (s->UseSiteEdge)
\r
952 SetEnable(hWnd, S_2_1, b);
\r
953 SetEnable(hWnd, S_2_2, b);
\r
954 SetEnable(hWnd, B_CASCADE, b);
\r
956 CbReset(hWnd, C_DEVICE);
\r
957 CbSetHeight(hWnd, C_DEVICE, 18);
\r
959 Zero(&t, sizeof(t));
\r
961 CbAddStr(hWnd, C_DEVICE, _UU("SM_SETUP_SELECT"), 0);
\r
963 if (CALL(hWnd, ScEnumEthernet(s->Rpc, &t)) == false)
\r
968 for (i = 0;i < t.NumItem;i++)
\r
970 wchar_t tmp[MAX_PATH];
\r
971 RPC_ENUM_ETH_ITEM *e = &t.Items[i];
\r
973 StrToUni(tmp, sizeof(tmp), e->DeviceName);
\r
975 CbAddStr(hWnd, C_DEVICE, tmp, 1);
\r
978 FreeRpcEnumEth(&t);
\r
985 void SmSetupOnClose(HWND hWnd, SM_SETUP *s)
\r
988 char name[MAX_PATH];
\r
990 if (hWnd == NULL || s == NULL)
\r
995 tmp = CbGetStr(hWnd, C_DEVICE);
\r
999 UniToStr(name, sizeof(name), tmp);
\r
1001 if (CbGetSelect(hWnd, C_DEVICE) != 0)
\r
1003 RPC_LOCALBRIDGE t;
\r
1005 Zero(&t, sizeof(t));
\r
1007 StrCpy(t.DeviceName, sizeof(t.DeviceName), name);
\r
1008 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
1010 t.TapMode = false;
\r
1012 if (CALL(hWnd, ScAddLocalBridge(s->Rpc, &t)) == false)
\r
1021 EndDialog(hWnd, 0);
\r
1024 // セットアップ手順ダイアログプロシージャ
\r
1025 UINT SmSetupStepDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
1027 SM_SETUP *s = (SM_SETUP *)param;
\r
1036 case WM_INITDIALOG:
\r
1038 SmSetupStepDlgInit(hWnd, s);
\r
1050 Zero(&h, sizeof(h));
\r
1051 h.HubName = s->HubName;
\r
1055 SmUserListDlgEx(hWnd, &h, NULL, s->Flag1 ? false : true);
\r
1067 Zero(&h, sizeof(h));
\r
1068 h.HubName = s->HubName;
\r
1072 SmLinkDlgEx(hWnd, &h, s->Flag2 ? false : true);
\r
1086 SmSetupOnClose(hWnd, s);
\r
1094 void SmSetupStep(HWND hWnd, SM_SETUP *s)
\r
1102 Dialog(hWnd, D_SM_SETUP_STEP, SmSetupStepDlg, s);
\r
1105 // セットアップによる初期化を行う
\r
1106 bool SmSetupInit(HWND hWnd, SM_SETUP *s)
\r
1114 if (s->IsBridge == false)
\r
1116 if (SmSetupDeleteAllLayer3(hWnd, s) == false)
\r
1121 if (SmSetupDeleteAllHub(hWnd, s) == false)
\r
1128 if (SmSetupDeleteAllObjectInBridgeHub(hWnd, s) == false)
\r
1134 if (SmSetupDeleteAllLocalBridge(hWnd, s) == false)
\r
1139 if (s->IsBridge == false)
\r
1143 char *password = "";
\r
1145 Zero(&t, sizeof(t));
\r
1146 Hash(t.HashedPassword, password, StrLen(password), true);
\r
1147 HashPassword(t.SecurePassword, ADMINISTRATOR_USERNAME, password);
\r
1148 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
1149 t.HubType = HUB_TYPE_STANDALONE;
\r
1152 if (CALL(hWnd, ScCreateHub(s->Rpc, &t)) == false)
\r
1161 // すべての VPN Bridge 用の仮想 HUB 内のオブジェクトを削除
\r
1162 bool SmSetupDeleteAllObjectInBridgeHub(HWND hWnd, SM_SETUP *s)
\r
1164 char *hubname = SERVER_DEFAULT_BRIDGE_NAME;
\r
1166 if (hWnd == NULL || s == NULL)
\r
1176 Zero(&t, sizeof(t));
\r
1177 StrCpy(t.HubName, sizeof(t.HubName), hubname);
\r
1179 if (CALL(hWnd, ScEnumLink(s->Rpc, &t)) == false)
\r
1184 for (i = 0;i < t.NumLink;i++)
\r
1186 RPC_ENUM_LINK_ITEM *e = &t.Links[i];
\r
1189 Zero(&a, sizeof(a));
\r
1190 StrCpy(a.HubName, sizeof(a.HubName), hubname);
\r
1191 UniStrCpy(a.AccountName, sizeof(a.AccountName), e->AccountName);
\r
1193 if (CALL(hWnd, ScDeleteLink(s->Rpc, &a)) == false)
\r
1195 FreeRpcEnumLink(&t);
\r
1200 FreeRpcEnumLink(&t);
\r
1207 Zero(&t, sizeof(t));
\r
1208 StrCpy(t.HubName, sizeof(t.HubName), hubname);
\r
1210 if (CALL(hWnd, ScDisableSecureNAT(s->Rpc, &t)) == false)
\r
1219 // すべての仮想レイヤ 3 スイッチの削除
\r
1220 bool SmSetupDeleteAllLayer3(HWND hWnd, SM_SETUP *s)
\r
1225 if (hWnd == NULL || s == NULL)
\r
1230 Zero(&t, sizeof(t));
\r
1231 if(CALL(hWnd, ScEnumL3Switch(s->Rpc, &t)) == false)
\r
1236 for (i = 0;i < t.NumItem;i++)
\r
1238 RPC_ENUM_L3SW_ITEM *e = &t.Items[i];
\r
1241 Zero(&tt, sizeof(tt));
\r
1242 StrCpy(tt.Name, sizeof(tt.Name), e->Name);
\r
1244 if (CALL(hWnd, ScDelL3Switch(s->Rpc, &tt)) == false)
\r
1246 FreeRpcEnumL3Sw(&t);
\r
1251 FreeRpcEnumL3Sw(&t);
\r
1256 // すべてのローカルブリッジの削除
\r
1257 bool SmSetupDeleteAllLocalBridge(HWND hWnd, SM_SETUP *s)
\r
1259 RPC_ENUM_LOCALBRIDGE t;
\r
1262 if (hWnd == NULL || s == NULL)
\r
1267 Zero(&t, sizeof(t));
\r
1268 if (CALL(hWnd, ScEnumLocalBridge(s->Rpc, &t)) == false)
\r
1273 for (i = 0;i < t.NumItem;i++)
\r
1275 RPC_LOCALBRIDGE *e = &t.Items[i];
\r
1277 if (CALL(hWnd, ScDeleteLocalBridge(s->Rpc, e)) == false)
\r
1279 FreeRpcEnumLocalBridge(&t);
\r
1284 FreeRpcEnumLocalBridge(&t);
\r
1290 bool SmSetupDeleteAllHub(HWND hWnd, SM_SETUP *s)
\r
1295 if (hWnd == NULL || s == NULL)
\r
1300 Zero(&t, sizeof(t));
\r
1301 if (CALL(hWnd, ScEnumHub(s->Rpc, &t)) == false)
\r
1306 for (i = 0;i < t.NumHub;i++)
\r
1308 RPC_ENUM_HUB_ITEM *e = &t.Hubs[i];
\r
1309 RPC_DELETE_HUB tt;
\r
1311 Zero(&tt, sizeof(tt));
\r
1312 StrCpy(tt.HubName, sizeof(tt.HubName), e->HubName);
\r
1314 if (CALL(hWnd, ScDeleteHub(s->Rpc, &tt)) == false)
\r
1316 FreeRpcEnumHub(&t);
\r
1321 FreeRpcEnumHub(&t);
\r
1326 // 仮想 HUB のコントロール更新
\r
1327 void SmSetupHubDlgUpdate(HWND hWnd, SM_SETUP *s)
\r
1330 char tmp[MAX_HUBNAME_LEN + 1];
\r
1332 if (hWnd == NULL || s == NULL)
\r
1337 GetTxtA(hWnd, E_HUBNAME, tmp, sizeof(tmp));
\r
1339 if (IsEmptyStr(tmp) || IsSafeStr(tmp) == false)
\r
1344 SetEnable(hWnd, IDOK, ok);
\r
1348 UINT SmSetupHubDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
1350 SM_SETUP *s = (SM_SETUP *)param;
\r
1359 case WM_INITDIALOG:
\r
1360 SetTextA(hWnd, E_HUBNAME, "VPN");
\r
1361 FocusEx(hWnd, E_HUBNAME);
\r
1362 SmSetupHubDlgUpdate(hWnd, s);
\r
1366 SmSetupHubDlgUpdate(hWnd, s);
\r
1371 GetTxtA(hWnd, E_HUBNAME, s->HubName, sizeof(s->HubName));
\r
1372 EndDialog(hWnd, true);
\r
1382 EndDialog(hWnd, 0);
\r
1389 // セットアップダイアログの [次へ] ボタン
\r
1390 void SmSetupDlgOnOk(HWND hWnd, SM_SETUP *s)
\r
1393 if (hWnd == NULL || s == NULL)
\r
1398 if (MsgBox(hWnd, MB_YESNO | MB_ICONEXCLAMATION, _UU("SM_SETUP_WARNING")) == IDNO)
\r
1403 s->UseRemote = IsChecked(hWnd, C_REMOTE);
\r
1404 s->UseSite = IsChecked(hWnd, C_SITE);
\r
1405 s->UseSiteEdge = IsChecked(hWnd, C_EDGE);
\r
1409 StrCpy(s->HubName, sizeof(s->HubName), SERVER_DEFAULT_BRIDGE_NAME);
\r
1413 if (Dialog(hWnd, D_SM_SETUP_HUB, SmSetupHubDlg, s) == false)
\r
1419 // 初期化 (既存オブジェクトの抹消)
\r
1420 if (SmSetupInit(hWnd, s) == false)
\r
1426 SmSetupStep(hWnd, s);
\r
1429 EndDialog(hWnd, true);
\r
1433 void SmSetupDlgInit(HWND hWnd, SM_SETUP *s)
\r
1436 if (hWnd == NULL || s == NULL)
\r
1441 SetIcon(hWnd, 0, ICO_SETUP);
\r
1442 DlgFont(hWnd, S_TITLE, 14, true);
\r
1443 DlgFont(hWnd, C_REMOTE, 0, true);
\r
1444 DlgFont(hWnd, C_SITE, 0, true);
\r
1445 DlgFont(hWnd, C_OTHER, 0, true);
\r
1449 SetText(hWnd, B_BOLD, _UU("SM_SETUP_BRIDGE_ONLY"));
\r
1450 SetText(hWnd, C_EDGE, _UU("SM_SETUP_BRIDGE_EDGE"));
\r
1452 Check(hWnd, C_SITE, true);
\r
1453 Check(hWnd, C_EDGE, true);
\r
1454 Focus(hWnd, C_SITE);
\r
1457 SmSetupDlgUpdate(hWnd, s);
\r
1461 void SmSetupDlgUpdate(HWND hWnd, SM_SETUP *s)
\r
1463 bool enable_remote = true;
\r
1464 bool enable_site = true;
\r
1465 bool enable_site_center = true;
\r
1466 bool enable_detail = true;
\r
1469 if (hWnd == NULL || s == NULL)
\r
1476 enable_remote = false;
\r
1477 enable_site_center = false;
\r
1478 enable_detail = false;
\r
1481 if (IsChecked(hWnd, C_OTHER))
\r
1486 SetEnable(hWnd, C_REMOTE, enable_remote && IsChecked(hWnd, C_OTHER) == false);
\r
1487 SetEnable(hWnd, S_REMOTE_1, enable_remote && IsChecked(hWnd, C_OTHER) == false);
\r
1489 SetEnable(hWnd, C_SITE, enable_site && IsChecked(hWnd, C_OTHER) == false);
\r
1490 SetEnable(hWnd, S_SITE_1, enable_site && IsChecked(hWnd, C_OTHER) == false);
\r
1491 SetEnable(hWnd, S_SITE_2, enable_site && IsChecked(hWnd, C_SITE) && IsChecked(hWnd, C_OTHER) == false);
\r
1492 SetEnable(hWnd, C_CENTER, enable_site && enable_site_center && IsChecked(hWnd, C_SITE) && IsChecked(hWnd, C_OTHER) == false);
\r
1493 SetEnable(hWnd, C_EDGE, enable_site && IsChecked(hWnd, C_SITE) && IsChecked(hWnd, C_OTHER) == false);
\r
1495 SetEnable(hWnd, C_OTHER, enable_detail);
\r
1496 SetEnable(hWnd, S_OTHER, enable_detail);
\r
1498 if (IsChecked(hWnd, C_REMOTE) == false && IsChecked(hWnd, C_SITE) == false)
\r
1503 if (IsChecked(hWnd, C_SITE))
\r
1505 if (IsChecked(hWnd, C_CENTER) == false && IsChecked(hWnd, C_EDGE) == false)
\r
1511 SetEnable(hWnd, IDOK, ok);
\r
1513 SetText(hWnd, S_INFO,
\r
1514 IsChecked(hWnd, C_OTHER) ? _UU("SM_SETUP_INFO_2") : _UU("SM_SETUP_INFO_1"));
\r
1518 UINT SmSetupDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
1520 SM_SETUP *s = (SM_SETUP *)param;
\r
1529 case WM_INITDIALOG:
\r
1530 SmSetupDlgInit(hWnd, s);
\r
1534 SmSetupDlgUpdate(hWnd, s);
\r
1539 SmSetupDlgOnOk(hWnd, s);
\r
1549 EndDialog(hWnd, 0);
\r
1557 bool SmSetup(HWND hWnd, SM_SERVER *s)
\r
1566 Zero(&ss, sizeof(ss));
\r
1568 ss.IsBridge = ss.s->Bridge;
\r
1571 if (Dialog(hWnd, D_SM_SETUP, SmSetupDlg, &ss) == false)
\r
1580 void SmLicenseAddDlgOnOk(HWND hWnd, SM_SERVER *s)
\r
1582 char tmp[MAX_SIZE];
\r
1584 if (hWnd == NULL || s == NULL)
\r
1589 SmLicenseAddDlgGetText(hWnd, tmp, sizeof(tmp));
\r
1595 Disable(hWnd, IDOK);
\r
1596 Disable(hWnd, IDCANCEL);
\r
1598 Zero(&t, sizeof(t));
\r
1599 StrCpy(t.StrValue, sizeof(t.StrValue), tmp);
\r
1601 if (CALL(hWnd, ScAddLicenseKey(s->Rpc, &t)) == false)
\r
1603 FocusEx(hWnd, B_KEY6);
\r
1607 EndDialog(hWnd, true);
\r
1610 Enable(hWnd, IDOK);
\r
1611 Enable(hWnd, IDCANCEL);
\r
1616 void SmLicenseAddDlgShiftTextItem(HWND hWnd, UINT id1, UINT id2, UINT *next_focus)
\r
1620 if (hWnd == NULL || next_focus == NULL)
\r
1625 s = GetTextA(hWnd, id1);
\r
1626 if (StrLen(s) >= 6)
\r
1628 char *s2 = CopyStr(s);
\r
1629 char tmp[MAX_SIZE];
\r
1631 SetTextA(hWnd, id1, s2);
\r
1636 GetTxtA(hWnd, id2, tmp, sizeof(tmp));
\r
1638 StrCat(tmp, sizeof(tmp), s + 6);
\r
1639 ReplaceStrEx(tmp, sizeof(tmp), tmp, "-", "", false);
\r
1641 SetTextA(hWnd, id2, tmp);
\r
1643 *next_focus = id2;
\r
1647 *next_focus = IDOK;
\r
1655 void SmLicenseAddDlgGetText(HWND hWnd, char *str, UINT size)
\r
1657 char *k1, *k2, *k3, *k4, *k5, *k6;
\r
1659 if (hWnd == NULL || str == NULL)
\r
1664 k1 = GetTextA(hWnd, B_KEY1);
\r
1665 k2 = GetTextA(hWnd, B_KEY2);
\r
1666 k3 = GetTextA(hWnd, B_KEY3);
\r
1667 k4 = GetTextA(hWnd, B_KEY4);
\r
1668 k5 = GetTextA(hWnd, B_KEY5);
\r
1669 k6 = GetTextA(hWnd, B_KEY6);
\r
1671 Format(str, size, "%s-%s-%s-%s-%s-%s", k1, k2, k3, k4, k5, k6);
\r
1682 void SmLicenseAddDlgUpdate(HWND hWnd, SM_SERVER *s)
\r
1684 UINT next_focus = 0;
\r
1685 char tmp[MAX_SIZE];
\r
1687 if (s == NULL || hWnd == NULL)
\r
1692 SmLicenseAddDlgShiftTextItem(hWnd, B_KEY1, B_KEY2, &next_focus);
\r
1693 SmLicenseAddDlgShiftTextItem(hWnd, B_KEY2, B_KEY3, &next_focus);
\r
1694 SmLicenseAddDlgShiftTextItem(hWnd, B_KEY3, B_KEY4, &next_focus);
\r
1695 SmLicenseAddDlgShiftTextItem(hWnd, B_KEY4, B_KEY5, &next_focus);
\r
1696 SmLicenseAddDlgShiftTextItem(hWnd, B_KEY5, B_KEY6, &next_focus);
\r
1697 SmLicenseAddDlgShiftTextItem(hWnd, B_KEY6, 0, &next_focus);
\r
1699 if ((IsFocus(hWnd, B_KEY1) && GetTextLen(hWnd, B_KEY1, true) <= 5) ||
\r
1700 (IsFocus(hWnd, B_KEY2) && GetTextLen(hWnd, B_KEY2, true) <= 5) ||
\r
1701 (IsFocus(hWnd, B_KEY3) && GetTextLen(hWnd, B_KEY3, true) <= 5) ||
\r
1702 (IsFocus(hWnd, B_KEY4) && GetTextLen(hWnd, B_KEY4, true) <= 5) ||
\r
1703 (IsFocus(hWnd, B_KEY5) && GetTextLen(hWnd, B_KEY5, true) <= 5) ||
\r
1704 (IsFocus(hWnd, B_KEY6) && GetTextLen(hWnd, B_KEY6, true) <= 5))
\r
1709 if (next_focus != 0)
\r
1711 Focus(hWnd, next_focus);
\r
1714 SmLicenseAddDlgGetText(hWnd, tmp, sizeof(tmp));
\r
1716 SetEnable(hWnd, IDOK, true);
\r
1719 // ライセンス追加ダイアログ初期化
\r
1720 void SmLicenseAddDlgInit(HWND hWnd, SM_SERVER *s)
\r
1724 if (hWnd == NULL || s == NULL)
\r
1729 h = GetFont("Arial", 10, true, false, false, false);
\r
1730 SetFont(hWnd, B_KEY1, h);
\r
1731 SetFont(hWnd, B_KEY2, h);
\r
1732 SetFont(hWnd, B_KEY3, h);
\r
1733 SetFont(hWnd, B_KEY4, h);
\r
1734 SetFont(hWnd, B_KEY5, h);
\r
1735 SetFont(hWnd, B_KEY6, h);
\r
1737 DlgFont(hWnd, S_INFO, 10, true);
\r
1739 SmLicenseAddDlgUpdate(hWnd, s);
\r
1743 UINT SmLicenseAddDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
1745 SM_SERVER *s = (SM_SERVER *)param;
\r
1754 case WM_INITDIALOG:
\r
1755 SmLicenseAddDlgInit(hWnd, s);
\r
1759 switch (LOWORD(wParam))
\r
1767 switch (HIWORD(wParam))
\r
1770 SmLicenseAddDlgUpdate(hWnd, s);
\r
1772 switch (LOWORD(wParam))
\r
1775 if (GetTextLen(hWnd, B_KEY2, true) == 0)
\r
1777 FocusEx(hWnd, B_KEY1);
\r
1781 if (GetTextLen(hWnd, B_KEY3, true) == 0)
\r
1783 FocusEx(hWnd, B_KEY2);
\r
1787 if (GetTextLen(hWnd, B_KEY4, true) == 0)
\r
1789 FocusEx(hWnd, B_KEY3);
\r
1793 if (GetTextLen(hWnd, B_KEY5, true) == 0)
\r
1795 FocusEx(hWnd, B_KEY4);
\r
1799 if (GetTextLen(hWnd, B_KEY6, true) == 0)
\r
1801 FocusEx(hWnd, B_KEY5);
\r
1813 SmLicenseAddDlgOnOk(hWnd, s);
\r
1823 EndDialog(hWnd, 0);
\r
1831 bool SmLicenseAdd(HWND hWnd, SM_SERVER *s)
\r
1839 return Dialog(hWnd, D_SM_LICENSE_ADD, SmLicenseAddDlg, s);
\r
1843 void SmLicenseDlgInit(HWND hWnd, SM_SERVER *s)
\r
1846 if (hWnd == NULL || s == NULL)
\r
1851 SetIcon(hWnd, 0, ICO_CERT);
\r
1853 DlgFont(hWnd, S_BOLD, 0, true);
\r
1854 DlgFont(hWnd, S_BOLD2, 0, true);
\r
1856 LvInit(hWnd, L_LIST);
\r
1857 LvSetStyle(hWnd, L_LIST, LVS_EX_GRIDLINES);
\r
1858 LvInsertColumn(hWnd, L_LIST, 0, _UU("SM_LICENSE_COLUMN_1"), 50);
\r
1859 LvInsertColumn(hWnd, L_LIST, 1, _UU("SM_LICENSE_COLUMN_2"), 100);
\r
1860 LvInsertColumn(hWnd, L_LIST, 2, _UU("SM_LICENSE_COLUMN_3"), 290);
\r
1861 LvInsertColumn(hWnd, L_LIST, 3, _UU("SM_LICENSE_COLUMN_4"), 150);
\r
1862 LvInsertColumn(hWnd, L_LIST, 4, _UU("SM_LICENSE_COLUMN_5"), 120);
\r
1863 LvInsertColumn(hWnd, L_LIST, 5, _UU("SM_LICENSE_COLUMN_6"), 250);
\r
1864 LvInsertColumn(hWnd, L_LIST, 6, _UU("SM_LICENSE_COLUMN_7"), 100);
\r
1865 LvInsertColumn(hWnd, L_LIST, 7, _UU("SM_LICENSE_COLUMN_8"), 100);
\r
1866 LvInsertColumn(hWnd, L_LIST, 8, _UU("SM_LICENSE_COLUMN_9"), 100);
\r
1868 LvInitEx(hWnd, L_STATUS, true);
\r
1869 LvInsertColumn(hWnd, L_STATUS, 0, _UU("SM_STATUS_COLUMN_1"), 100);
\r
1870 LvInsertColumn(hWnd, L_STATUS, 1, _UU("SM_STATUS_COLUMN_2"), 100);
\r
1872 SmLicenseDlgRefresh(hWnd, s);
\r
1876 void SmLicenseDlgRefresh(HWND hWnd, SM_SERVER *s)
\r
1878 RPC_ENUM_LICENSE_KEY t;
\r
1879 RPC_LICENSE_STATUS st;
\r
1881 wchar_t tmp[MAX_SIZE];
\r
1884 if (hWnd == NULL || s == NULL)
\r
1889 Zero(&t, sizeof(t));
\r
1891 if (CALL(hWnd, ScEnumLicenseKey(s->Rpc, &t)) == false)
\r
1897 b = LvInsertStart();
\r
1899 for (i = 0;i < t.NumItem;i++)
\r
1901 wchar_t tmp1[32], tmp2[LICENSE_KEYSTR_LEN + 1], tmp3[LICENSE_MAX_PRODUCT_NAME_LEN + 1],
\r
1902 *tmp4, tmp5[128], tmp6[LICENSE_LICENSEID_STR_LEN + 1], tmp7[64],
\r
1903 tmp8[64], tmp9[64];
\r
1904 RPC_ENUM_LICENSE_KEY_ITEM *e = &t.Items[i];
\r
1906 UniToStru(tmp1, e->Id);
\r
1907 StrToUni(tmp2, sizeof(tmp2), e->LicenseKey);
\r
1908 StrToUni(tmp3, sizeof(tmp3), e->LicenseName);
\r
1909 tmp4 = LiGetLicenseStatusStr(e->Status);
\r
1910 if (e->Expires == 0)
\r
1912 UniStrCpy(tmp5, sizeof(tmp5), _UU("SM_LICENSE_NO_EXPIRES"));
\r
1916 GetDateStrEx64(tmp5, sizeof(tmp5), e->Expires, NULL);
\r
1918 StrToUni(tmp6, sizeof(tmp6), e->LicenseId);
\r
1919 UniToStru(tmp7, e->ProductId);
\r
1920 UniFormat(tmp8, sizeof(tmp8), L"%I64u", e->SystemId);
\r
1921 UniToStru(tmp9, e->SerialId);
\r
1924 e->Status == LICENSE_STATUS_OK ? ICO_PASS : ICO_DISCARD,
\r
1926 tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9);
\r
1929 LvInsertEnd(b, hWnd, L_LIST);
\r
1931 FreeRpcEnumLicenseKey(&t);
\r
1933 Zero(&st, sizeof(st));
\r
1935 if (CALL(hWnd, ScGetLicenseStatus(s->Rpc, &st)) == false)
\r
1941 b = LvInsertStart();
\r
1943 if (st.EditionId == LICENSE_EDITION_VPN3_NO_LICENSE)
\r
1945 LvInsertAdd(b, 0, NULL, 2, _UU("SM_NO_LICENSE_COLUMN"), _UU("SM_NO_LICENSE"));
\r
1950 StrToUni(tmp, sizeof(tmp), st.EditionStr);
\r
1951 LvInsertAdd(b, 0, NULL, 2, _UU("SM_LICENSE_STATUS_EDITION"), tmp);
\r
1954 if (st.ReleaseDate != 0)
\r
1956 GetDateStrEx64(tmp, sizeof(tmp), st.ReleaseDate, NULL);
\r
1957 LvInsertAdd(b, 0, NULL, 2, _UU("SM_LICENSE_STATUS_RELEASE"), tmp);
\r
1961 UniFormat(tmp, sizeof(tmp), L"%I64u", st.SystemId);
\r
1962 LvInsertAdd(b, 0, NULL, 2, _UU("SM_LICENSE_STATUS_SYSTEM_ID"), tmp);
\r
1964 // 現在の製品ライセンスの有効期限
\r
1965 if (st.SystemExpires == 0)
\r
1967 UniStrCpy(tmp, sizeof(tmp), _UU("SM_LICENSE_NO_EXPIRES"));
\r
1971 GetDateStrEx64(tmp, sizeof(tmp), st.SystemExpires, NULL);
\r
1973 LvInsertAdd(b, 0, NULL, 2, _UU("SM_LICENSE_STATUS_EXPIRES"), tmp);
\r
1975 // サブスクリプション (サポート) 契約
\r
1976 if (st.NeedSubscription == false)
\r
1978 UniStrCpy(tmp, sizeof(tmp), _UU("SM_LICENSE_STATUS_SUBSCRIPTION_NONEED"));
\r
1982 if (st.SubscriptionExpires == 0)
\r
1984 UniStrCpy(tmp, sizeof(tmp), _UU("SM_LICENSE_STATUS_SUBSCRIPTION_NONE"));
\r
1988 wchar_t dtstr[MAX_PATH];
\r
1990 GetDateStrEx64(dtstr, sizeof(dtstr), st.SubscriptionExpires, NULL);
\r
1992 UniFormat(tmp, sizeof(tmp),
\r
1993 st.IsSubscriptionExpired ? _UU("SM_LICENSE_STATUS_SUBSCRIPTION_EXPIRED") : _UU("SM_LICENSE_STATUS_SUBSCRIPTION_VALID"),
\r
1997 LvInsertAdd(b, 0, NULL, 2, _UU("SM_LICENSE_STATUS_SUBSCRIPTION"), tmp);
\r
1999 if (st.NeedSubscription == false && st.SubscriptionExpires != 0)
\r
2001 wchar_t dtstr[MAX_PATH];
\r
2003 GetDateStrEx64(dtstr, sizeof(dtstr), st.SubscriptionExpires, NULL);
\r
2005 LvInsertAdd(b, 0, NULL, 2, _UU("SM_LICENSE_STATUS_SUBSCRIPTION_BUILD_STR"), tmp);
\r
2008 if (st.NeedSubscription && st.SubscriptionExpires != 0)
\r
2010 wchar_t dtstr[MAX_PATH];
\r
2012 GetDateStrEx64(dtstr, sizeof(dtstr), st.SubscriptionExpires, NULL);
\r
2014 UniFormat(tmp, sizeof(tmp), _UU("SM_LICENSE_STATUS_SUBSCRIPTION_BUILD_STR"), dtstr);
\r
2016 LvInsertAdd(b, 0, NULL, 2, _UU("SM_LICENSE_STATUS_SUBSCRIPTION_BUILD"), tmp);
\r
2019 if (GetCapsBool(s->CapsList, "b_vpn3"))
\r
2022 if (st.NumUserCreationLicense == INFINITE)
\r
2024 UniStrCpy(tmp, sizeof(tmp), _UU("SM_LICENSE_INFINITE"));
\r
2028 UniToStru(tmp, st.NumUserCreationLicense);
\r
2030 LvInsertAdd(b, 0, NULL, 2, _UU("SM_LICENSE_NUM_USER"), tmp);
\r
2034 if (st.NumClientConnectLicense == INFINITE)
\r
2036 UniStrCpy(tmp, sizeof(tmp), _UU("SM_LICENSE_INFINITE"));
\r
2040 UniToStru(tmp, st.NumClientConnectLicense);
\r
2042 LvInsertAdd(b, 0, NULL, 2, _UU("SM_LICENSE_NUM_CLIENT"), tmp);
\r
2045 if (st.NumBridgeConnectLicense == INFINITE)
\r
2047 UniStrCpy(tmp, sizeof(tmp), _UU("SM_LICENSE_INFINITE"));
\r
2051 UniToStru(tmp, st.NumBridgeConnectLicense);
\r
2053 LvInsertAdd(b, 0, NULL, 2, _UU("SM_LICENSE_NUM_BRIDGE"), tmp);
\r
2055 // エンタープライズ機能の利用可否
\r
2056 LvInsertAdd(b, 0, NULL, 2, _UU("SM_LICENSE_STATUS_ENTERPRISE"),
\r
2057 st.AllowEnterpriseFunction ? _UU("SM_LICENSE_STATUS_ENTERPRISE_YES") : _UU("SM_LICENSE_STATUS_ENTERPRISE_NO"));
\r
2060 LvInsertEnd(b, hWnd, L_STATUS);
\r
2062 if (LvNum(hWnd, L_STATUS) >= 1)
\r
2064 LvAutoSize(hWnd, L_STATUS);
\r
2067 SmLicenseDlgUpdate(hWnd, s);
\r
2070 // ライセンスダイアログコントロール更新
\r
2071 void SmLicenseDlgUpdate(HWND hWnd, SM_SERVER *s)
\r
2075 if (hWnd == NULL || s == NULL)
\r
2080 b = LvIsSingleSelected(hWnd, L_LIST);
\r
2082 SetEnable(hWnd, B_DEL, b);
\r
2083 SetEnable(hWnd, IDOK, b);
\r
2087 UINT SmLicenseDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
2089 SM_SERVER *s = (SM_SERVER *)param;
\r
2099 case WM_INITDIALOG:
\r
2100 SmLicenseDlgInit(hWnd, s);
\r
2104 n = (NMHDR *)lParam;
\r
2107 case LVN_ITEMCHANGED:
\r
2108 switch (n->idFrom)
\r
2112 SmLicenseDlgUpdate(hWnd, s);
\r
2123 if (IsEnable(hWnd, IDOK))
\r
2125 UINT i = LvGetSelected(hWnd, L_LIST);
\r
2127 if (i != INFINITE)
\r
2129 char *s = LvGetStrA(hWnd, L_LIST, i, 1);
\r
2130 char tmp[MAX_SIZE];
\r
2132 Format(tmp, sizeof(tmp), _SS("LICENSE_SUPPORT_URL"), s);
\r
2133 ShellExecute(hWnd, "open", tmp, NULL, NULL, SW_SHOW);
\r
2141 ShellExecute(hWnd, "open", _SS("LICENSE_INFO_URL"), NULL, NULL, SW_SHOW);
\r
2145 if (SmLicenseAdd(hWnd, s))
\r
2147 SmLicenseDlgRefresh(hWnd, s);
\r
2152 if (IsEnable(hWnd, B_DEL))
\r
2154 UINT id = (UINT)LvGetParam(hWnd, L_LIST, LvGetSelected(hWnd, L_LIST));
\r
2158 if (MsgBox(hWnd, MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2, _UU("SM_LICENSE_DELETE_MSG")) == IDYES)
\r
2162 Zero(&t, sizeof(t));
\r
2165 if (CALL(hWnd, ScDelLicenseKey(s->Rpc, &t)))
\r
2167 SmLicenseDlgRefresh(hWnd, s);
\r
2181 EndDialog(hWnd, 0);
\r
2185 LvStandardHandler(hWnd, msg, wParam, lParam, L_LIST);
\r
2191 void SmLicense(HWND hWnd, SM_SERVER *s)
\r
2199 Dialog(hWnd, D_SM_LICENSE, SmLicenseDlg, s);
\r
2201 FreeCapsList(s->CapsList);
\r
2202 s->CapsList = ScGetCapsEx(s->Rpc);
\r
2206 UINT SmSaveLogProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
2208 SM_READ_LOG_FILE *p = (SM_READ_LOG_FILE *)param;
\r
2217 case WM_INITDIALOG:
\r
2218 FormatText(hWnd, S_INFO, p->filepath);
\r
2226 if (p->Buffer != NULL)
\r
2228 char filename[MAX_PATH];
\r
2230 Format(filename, sizeof(filename), "%s_%s", p->server_name, p->filepath);
\r
2231 ConvertSafeFileName(filename, sizeof(filename), filename);
\r
2233 if (wParam == IDOK)
\r
2236 char fullpath[MAX_PATH];
\r
2238 Format(fullpath, sizeof(fullpath), "%s\\%s",
\r
2239 MsGetMyTempDir(), filename);
\r
2241 if (DumpBuf(p->Buffer, fullpath) == false)
\r
2243 MsgBoxEx(hWnd, MB_ICONSTOP, _UU("SM_READ_SAVE_TMP_FAILED"),
\r
2248 if (((UINT)ShellExecute(hWnd, "open", fullpath, NULL, NULL, SW_SHOWNORMAL)) > 32)
\r
2250 EndDialog(hWnd, true);
\r
2254 MsgBoxEx(hWnd, MB_ICONEXCLAMATION, _UU("SM_READ_SAVE_OPEN_ERROR"), fullpath);
\r
2261 wchar_t def[MAX_PATH];
\r
2262 wchar_t *uni_path;
\r
2264 StrToUni(def, sizeof(def), filename);
\r
2266 uni_path = SaveDlg(hWnd, _UU("SM_READ_SAVE_DLG_FILTER"), _UU("SM_READ_SAVE_DLG_TITLE"),
\r
2269 if (uni_path != NULL)
\r
2271 char path[MAX_PATH];
\r
2273 UniToStr(path, sizeof(path), uni_path);
\r
2276 if (DumpBuf(p->Buffer, path) == false)
\r
2278 MsgBox(hWnd, MB_ICONSTOP, _UU("SM_READ_SAVE_FAILED"));
\r
2282 EndDialog(hWnd, true);
\r
2296 EndDialog(hWnd, false);
\r
2303 // ダウンロードコールバックプロシージャ
\r
2304 bool SmReadLogFileProc(DOWNLOAD_PROGRESS *g)
\r
2306 wchar_t tmp[MAX_SIZE];
\r
2307 char size1[64], size2[64];
\r
2308 SM_READ_LOG_FILE *p;
\r
2316 p = (SM_READ_LOG_FILE *)g->Param;
\r
2319 SetPos(hWnd, P_PROGRESS, g->ProgressPercent);
\r
2321 ToStrByte(size1, sizeof(size1), g->CurrentSize);
\r
2322 ToStrByte(size2, sizeof(size2), g->TotalSize);
\r
2323 UniFormat(tmp, sizeof(tmp), _UU("SM_READ_LOG_FILE_INFO_2"), size2, size1);
\r
2325 SetText(hWnd, S_INFO, tmp);
\r
2329 return p->cancel_flag ? false : true;
\r
2332 // ログファイルダウンロードダイアログプロシージャ
\r
2333 UINT SmReadLogFile(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
2335 SM_READ_LOG_FILE *p = (SM_READ_LOG_FILE *)param;
\r
2345 case WM_INITDIALOG:
\r
2347 SetFont(hWnd, S_INFO, Font(11, true));
\r
2348 SetText(hWnd, S_INFO, _UU("SM_READ_LOG_FILE_INFO_1"));
\r
2349 DisableClose(hWnd);
\r
2350 FormatText(hWnd, S_INFO2, p->filepath);
\r
2351 SetRange(hWnd, P_PROGRESS, 0, 100);
\r
2353 SetTimer(hWnd, 1, 100, NULL);
\r
2360 KillTimer(hWnd, 1);
\r
2361 buf = DownloadFileFromServer(p->s->Rpc, p->server_name, p->filepath, p->totalsize, SmReadLogFileProc, p);
\r
2364 if (p->cancel_flag == false)
\r
2367 MsgBox(hWnd, MB_ICONSTOP, _UU("SM_READ_LOG_FILE_ERROR"));
\r
2369 EndDialog(hWnd, false);
\r
2375 Dialog(hWnd, D_SM_SAVE_LOG, SmSaveLogProc, p);
\r
2377 EndDialog(hWnd, true);
\r
2387 p->cancel_flag = true;
\r
2396 // ログファイルのダウンロードを開始する
\r
2397 void SmLogFileStartDownload(HWND hWnd, SM_SERVER *s, char *server_name, char *filepath, UINT totalsize)
\r
2399 SM_READ_LOG_FILE p;
\r
2401 if (hWnd == NULL || server_name == NULL || filepath == NULL || totalsize == 0)
\r
2406 Zero(&p, sizeof(p));
\r
2407 p.filepath = filepath;
\r
2409 p.server_name = server_name;
\r
2410 p.totalsize = totalsize;
\r
2412 Dialog(hWnd, D_SM_READ_LOG_FILE, SmReadLogFile, &p);
\r
2416 void SmLogFileDlgInit(HWND hWnd, SM_SERVER *p)
\r
2419 if (hWnd == NULL || p == NULL)
\r
2424 SetIcon(hWnd, 0, ICO_LOG2);
\r
2426 LvInit(hWnd, L_LIST);
\r
2428 LvInsertColumn(hWnd, L_LIST, 0, _UU("SM_LOG_FILE_COLUMN_1"), 250);
\r
2429 LvInsertColumn(hWnd, L_LIST, 1, _UU("SM_LOG_FILE_COLUMN_2"), 100);
\r
2430 LvInsertColumn(hWnd, L_LIST, 2, _UU("SM_LOG_FILE_COLUMN_3"), 130);
\r
2431 LvInsertColumn(hWnd, L_LIST, 3, _UU("SM_LOG_FILE_COLUMN_4"), 110);
\r
2433 SmLogFileDlgRefresh(hWnd, p);
\r
2437 void SmLogFileDlgRefresh(HWND hWnd, SM_SERVER *p)
\r
2441 RPC_ENUM_LOG_FILE t;
\r
2443 if (hWnd == NULL || p == NULL)
\r
2448 Zero(&t, sizeof(t));
\r
2449 if (CALL(hWnd, ScEnumLogFile(p->Rpc, &t)) == false)
\r
2455 v = LvInsertStart();
\r
2457 for (i = 0;i < t.NumItem;i++)
\r
2459 RPC_ENUM_LOG_FILE_ITEM *e = &t.Items[i];
\r
2460 wchar_t tmp1[MAX_PATH], tmp2[128], tmp3[128], tmp4[MAX_HOST_NAME_LEN + 1];
\r
2461 char tmp[MAX_SIZE];
\r
2463 StrToUni(tmp1, sizeof(tmp1), e->FilePath);
\r
2465 ToStrByte(tmp, sizeof(tmp), e->FileSize);
\r
2466 StrToUni(tmp2, sizeof(tmp2), tmp);
\r
2468 GetDateTimeStr64Uni(tmp3, sizeof(tmp3), SystemToLocal64(e->UpdatedTime));
\r
2470 StrToUni(tmp4, sizeof(tmp4), e->ServerName);
\r
2472 LvInsertAdd(v, ICO_LOG2, (void *)e->FileSize, 4, tmp1, tmp2, tmp3, tmp4);
\r
2475 LvInsertEndEx(v, hWnd, L_LIST, true);
\r
2477 if (t.NumItem != 0)
\r
2479 LvAutoSize(hWnd, L_LIST);
\r
2482 FreeRpcEnumLogFile(&t);
\r
2484 SmLogFileDlgUpdate(hWnd, p);
\r
2488 void SmLogFileDlgUpdate(HWND hWnd, SM_SERVER *p)
\r
2491 if (hWnd == NULL || p == NULL)
\r
2496 SetEnable(hWnd, IDOK, LvIsSingleSelected(hWnd, L_LIST));
\r
2499 // ログファイルダイアログプロシージャ
\r
2500 UINT SmLogFileDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
2503 SM_SERVER *p = (SM_SERVER *)param;
\r
2512 case WM_INITDIALOG:
\r
2513 SmLogFileDlgInit(hWnd, p);
\r
2520 if (IsEnable(hWnd, IDOK))
\r
2522 UINT i = LvGetSelected(hWnd, L_LIST);
\r
2523 if (i != INFINITE)
\r
2525 UINT size = (UINT)LvGetParam(hWnd, L_LIST, i);
\r
2526 char *server_name;
\r
2529 server_name = LvGetStrA(hWnd, L_LIST, i, 3);
\r
2530 filepath = LvGetStrA(hWnd, L_LIST, i, 0);
\r
2531 SmLogFileStartDownload(hWnd, p, server_name, filepath, size);
\r
2533 Free(server_name);
\r
2543 SmLogFileDlgRefresh(hWnd, p);
\r
2549 n = (NMHDR *)lParam;
\r
2552 case LVN_ITEMCHANGED:
\r
2553 switch (n->idFrom)
\r
2556 SmLogFileDlgUpdate(hWnd, p);
\r
2564 EndDialog(hWnd, false);
\r
2568 LvStandardHandler(hWnd, msg, wParam, lParam, L_LIST);
\r
2574 void SmHubEditAcDlgInit(HWND hWnd, SM_EDIT_AC *p)
\r
2577 if (hWnd == NULL || p == NULL)
\r
2582 SetEnable(hWnd, R_IPV6, GetCapsBool(p->e->s->p->CapsList, "b_support_ipv6_ac"));
\r
2588 Check(hWnd, R_SINGLE, true);
\r
2589 Check(hWnd, R_PASS, true);
\r
2590 Check(hWnd, R_IPV4, true);
\r
2594 for (i = 0;i < LIST_NUM(p->e->AcList);i++)
\r
2596 AC *ac = LIST_DATA(p->e->AcList, i);
\r
2598 v = MAX(v, ac->Priority);
\r
2603 SetInt(hWnd, E_PRIORITY, v);
\r
2607 AC *ac = GetAc(p->e->AcList, p->id);
\r
2611 EndDialog(hWnd, false);
\r
2615 Check(hWnd, R_SINGLE, ac->Masked == false);
\r
2616 Check(hWnd, R_MASKED, ac->Masked);
\r
2617 Check(hWnd, R_IPV4, IsIP4(&ac->IpAddress));
\r
2618 Check(hWnd, R_IPV6, IsIP6(&ac->IpAddress));
\r
2620 if (IsIP4(&ac->IpAddress))
\r
2622 IpSet(hWnd, E_IP, IPToUINT(&ac->IpAddress));
\r
2626 char tmp[MAX_SIZE];
\r
2628 IPToStr(tmp, sizeof(tmp), &ac->IpAddress);
\r
2629 SetTextA(hWnd, E_IPV6, tmp);
\r
2634 if (IsIP4(&ac->IpAddress))
\r
2636 IpSet(hWnd, E_MASK, IPToUINT(&ac->SubnetMask));
\r
2640 char tmp[MAX_SIZE];
\r
2642 MaskToStrEx(tmp, sizeof(tmp), &ac->SubnetMask, false);
\r
2646 StrCatLeft(tmp, sizeof(tmp), "/");
\r
2649 SetTextA(hWnd, E_MASKV6, tmp);
\r
2653 Check(hWnd, R_PASS, ac->Deny == false);
\r
2654 Check(hWnd, R_DENY, ac->Deny);
\r
2655 SetInt(hWnd, E_PRIORITY, ac->Priority);
\r
2660 Focus(hWnd, E_IP);
\r
2662 SmHubEditAcDlgUpdate(hWnd, p);
\r
2666 void SmHubEditAcDlgUpdate(HWND hWnd, SM_EDIT_AC *p)
\r
2669 char tmp[MAX_SIZE];
\r
2671 if (hWnd == NULL || p == NULL)
\r
2676 if (IsChecked(hWnd, R_SINGLE))
\r
2678 if (IsChecked(hWnd, R_IPV6) == false)
\r
2681 Hide(hWnd, E_IPV6);
\r
2683 if (IpIsFilled(hWnd, E_IP) == false)
\r
2688 if (IpGet(hWnd, E_IP) == 0 || IpGet(hWnd, E_IP) == 0xffffffff)
\r
2695 Show(hWnd, E_IPV6);
\r
2698 GetTxtA(hWnd, E_IPV6, tmp, sizeof(tmp));
\r
2700 if (IsStrIPv6Address(tmp) == false)
\r
2706 Hide(hWnd, S_MASK);
\r
2707 Hide(hWnd, E_MASK);
\r
2708 Hide(hWnd, E_MASKV6);
\r
2712 if (IsChecked(hWnd, R_IPV6) == false)
\r
2715 Hide(hWnd, E_IPV6);
\r
2717 if (IpIsFilled(hWnd, E_IP) == false || IpIsFilled(hWnd, E_MASK) == false)
\r
2722 if (IpGet(hWnd, E_IP) == 0xffffffff)
\r
2729 char tmp1[MAX_SIZE], tmp2[MAX_SIZE];
\r
2731 Show(hWnd, E_IPV6);
\r
2734 GetTxtA(hWnd, E_IPV6, tmp1, sizeof(tmp1));
\r
2735 GetTxtA(hWnd, E_MASKV6, tmp2, sizeof(tmp2));
\r
2737 if (!(IsIpStr6(tmp1) && IsIpMask6(tmp2)))
\r
2743 Show(hWnd, S_MASK);
\r
2744 SetShow(hWnd, E_MASK, !IsChecked(hWnd, R_IPV6));
\r
2745 SetShow(hWnd, E_MASKV6, IsChecked(hWnd, R_IPV6));
\r
2748 if (GetInt(hWnd, E_PRIORITY) == 0)
\r
2753 SetIcon(hWnd, S_ICON, IsChecked(hWnd, R_PASS) ? ICO_INTERNET : ICO_INTERNET_X);
\r
2755 SetEnable(hWnd, IDOK, b);
\r
2758 // ダイアログで OK ボタンがクリックされた
\r
2759 void SmHubEditAcDlgOnOk(HWND hWnd, SM_EDIT_AC *p)
\r
2762 char tmp[MAX_SIZE];
\r
2764 if (hWnd == NULL || p == NULL)
\r
2769 Zero(&ac, sizeof(ac));
\r
2770 ac.Deny = IsChecked(hWnd, R_DENY);
\r
2771 ac.Priority = GetInt(hWnd, E_PRIORITY);
\r
2773 if (IsChecked(hWnd, R_IPV6) == false)
\r
2775 UINTToIP(&ac.IpAddress, IpGet(hWnd, E_IP));
\r
2779 GetTxtA(hWnd, E_IPV6, tmp, sizeof(tmp));
\r
2781 StrToIP6(&ac.IpAddress, tmp);
\r
2784 ac.Masked = IsChecked(hWnd, R_MASKED);
\r
2788 if (IsChecked(hWnd, R_IPV6) == false)
\r
2790 UINTToIP(&ac.SubnetMask, IpGet(hWnd, E_MASK));
\r
2794 GetTxtA(hWnd, E_MASKV6, tmp, sizeof(tmp));
\r
2796 StrToMask6(&ac.SubnetMask, tmp);
\r
2802 SetAc(p->e->AcList, p->id, &ac);
\r
2806 AddAc(p->e->AcList, &ac);
\r
2809 EndDialog(hWnd, true);
\r
2813 UINT SmHubEditAcDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
2815 SM_EDIT_AC *p = (SM_EDIT_AC *)param;
\r
2824 case WM_INITDIALOG:
\r
2825 SmHubEditAcDlgInit(hWnd, p);
\r
2829 switch (LOWORD(wParam))
\r
2842 SmHubEditAcDlgUpdate(hWnd, p);
\r
2852 if (IsChecked(hWnd, R_IPV6) == false)
\r
2854 if (IpIsFilled(hWnd, E_IP))
\r
2856 Focus(hWnd, E_MASK);
\r
2860 Focus(hWnd, E_IP);
\r
2865 char tmp[MAX_SIZE];
\r
2867 GetTxtA(hWnd, E_IPV6, tmp, sizeof(tmp));
\r
2869 if (IsStrIPv6Address(tmp))
\r
2871 FocusEx(hWnd, E_MASKV6);
\r
2875 FocusEx(hWnd, E_IPV6);
\r
2881 SmHubEditAcDlgOnOk(hWnd, p);
\r
2891 EndDialog(hWnd, false);
\r
2899 void SmHubAcDlgInit(HWND hWnd, SM_EDIT_AC_LIST *p)
\r
2902 if (hWnd == NULL || p == NULL)
\r
2907 SetIcon(hWnd, 0, ICO_INTERNET);
\r
2909 FormatText(hWnd, S_TITLE, p->s->HubName);
\r
2911 LvInit(hWnd, L_LIST);
\r
2912 LvInsertColumn(hWnd, L_LIST, 0, _UU("SM_AC_COLUMN_1"), 40);
\r
2913 LvInsertColumn(hWnd, L_LIST, 1, _UU("SM_AC_COLUMN_2"), 80);
\r
2914 LvInsertColumn(hWnd, L_LIST, 2, _UU("SM_AC_COLUMN_3"), 90);
\r
2915 LvInsertColumn(hWnd, L_LIST, 3, _UU("SM_AC_COLUMN_4"), 170);
\r
2917 SmHubAcDlgRefresh(hWnd, p);
\r
2921 void SmHubAcDlgUpdate(HWND hWnd, SM_EDIT_AC_LIST *p)
\r
2925 if (hWnd == NULL || p == NULL)
\r
2930 b = LvIsSingleSelected(hWnd, L_LIST);
\r
2932 SetEnable(hWnd, IDOK, b);
\r
2933 SetEnable(hWnd, B_DELETE, b);
\r
2937 void SmHubAcDlgRefresh(HWND hWnd, SM_EDIT_AC_LIST *p)
\r
2942 if (hWnd == NULL || p == NULL)
\r
2947 v = LvInsertStart();
\r
2949 for (i = 0;i < LIST_NUM(p->AcList);i++)
\r
2951 wchar_t tmp1[32], *tmp2, tmp3[MAX_SIZE], tmp4[32];
\r
2953 AC *ac = LIST_DATA(p->AcList, i);
\r
2955 UniToStru(tmp1, ac->Id);
\r
2956 tmp2 = ac->Deny ? _UU("SM_AC_DENY") : _UU("SM_AC_PASS");
\r
2957 tmp_str = GenerateAcStr(ac);
\r
2958 StrToUni(tmp3, sizeof(tmp3), tmp_str);
\r
2962 UniToStru(tmp4, ac->Priority);
\r
2964 LvInsertAdd(v, ac->Deny ? ICO_INTERNET_X : ICO_INTERNET,
\r
2965 (void *)ac->Id, 4, tmp1, tmp4, tmp2, tmp3);
\r
2968 LvInsertEnd(v, hWnd, L_LIST);
\r
2969 LvSortEx(hWnd, L_LIST, 0, false, true);
\r
2972 SmHubAcDlgUpdate(hWnd, p);
\r
2975 // アクセス制御リスト編集ダイアログ
\r
2976 UINT SmHubAcDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
2979 SM_EDIT_AC_LIST *p = (SM_EDIT_AC_LIST *)param;
\r
2988 case WM_INITDIALOG:
\r
2989 SmHubAcDlgInit(hWnd, p);
\r
2996 if (IsEnable(hWnd, IDOK))
\r
2999 Zero(&s, sizeof(s));
\r
3002 s.id = (UINT)LvGetParam(hWnd, L_LIST, LvGetSelected(hWnd, L_LIST));
\r
3004 if (Dialog(hWnd, D_SM_AC, SmHubEditAcDlgProc, &s))
\r
3006 SmHubAcDlgRefresh(hWnd, p);
\r
3012 if (IsEnable(hWnd, B_ADD))
\r
3015 Zero(&s, sizeof(s));
\r
3019 if (Dialog(hWnd, D_SM_AC, SmHubEditAcDlgProc, &s))
\r
3021 SmHubAcDlgRefresh(hWnd, p);
\r
3027 if (IsEnable(hWnd, B_DELETE))
\r
3029 UINT id = (UINT)LvGetParam(hWnd, L_LIST, LvGetSelected(hWnd, L_LIST));
\r
3031 if (DelAc(p->AcList, id))
\r
3033 SmHubAcDlgRefresh(hWnd, p);
\r
3039 if (IsEnable(hWnd, B_SAVE))
\r
3043 Zero(&t, sizeof(t));
\r
3044 StrCpy(t.HubName, sizeof(t.HubName), p->s->HubName);
\r
3045 t.o = CloneAcList(p->AcList);
\r
3047 if (CALL(hWnd, ScSetAcList(p->s->p->Rpc, &t)))
\r
3049 EndDialog(hWnd, true);
\r
3052 FreeRpcAcList(&t);
\r
3063 n = (NMHDR *)lParam;
\r
3066 case LVN_ITEMCHANGED:
\r
3067 switch (n->idFrom)
\r
3070 SmHubAcDlgUpdate(hWnd, p);
\r
3078 EndDialog(hWnd, false);
\r
3082 LvStandardHandler(hWnd, msg, wParam, lParam, L_LIST);
\r
3088 void SmHubAc(HWND hWnd, SM_EDIT_HUB *s)
\r
3090 SM_EDIT_AC_LIST p;
\r
3093 if (hWnd == NULL || s == NULL)
\r
3098 Zero(&t, sizeof(t));
\r
3099 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
3101 if (CALL(hWnd, ScGetAcList(s->p->Rpc, &t)) == false)
\r
3106 Zero(&p, sizeof(p));
\r
3108 p.AcList = CloneAcList(t.o);
\r
3110 FreeRpcAcList(&t);
\r
3112 Dialog(hWnd, D_SM_AC_LIST, SmHubAcDlgProc, &p);
\r
3114 FreeAcList(p.AcList);
\r
3118 void SmEditCrlDlgInit(HWND hWnd, SM_EDIT_CRL *c)
\r
3121 if (hWnd == NULL || c == NULL)
\r
3126 if (c->NewCrl == false)
\r
3131 Zero(&t, sizeof(t));
\r
3132 StrCpy(t.HubName, sizeof(t.HubName), c->s->HubName);
\r
3135 if (CALL(hWnd, ScGetCrl(c->s->Rpc, &t)) == false)
\r
3137 EndDialog(hWnd, false);
\r
3143 SmEditCrlDlgSetName(hWnd, crl->Name);
\r
3144 SmEditCrlDlgSetSerial(hWnd, crl->Serial);
\r
3145 SmEditCrlDlgSetHash(hWnd, crl->DigestMD5, crl->DigestSHA1);
\r
3150 SmEditCrlDlgUpdate(hWnd, c);
\r
3154 void SmEditCrlDlgUpdate(HWND hWnd, SM_EDIT_CRL *c)
\r
3158 if (hWnd == NULL || c == NULL)
\r
3163 SetEnable(hWnd, E_CN, IsChecked(hWnd, R_CN));
\r
3164 SetEnable(hWnd, E_O, IsChecked(hWnd, R_O));
\r
3165 SetEnable(hWnd, E_OU, IsChecked(hWnd, R_OU));
\r
3166 SetEnable(hWnd, E_C, IsChecked(hWnd, R_C));
\r
3167 SetEnable(hWnd, E_ST, IsChecked(hWnd, R_ST));
\r
3168 SetEnable(hWnd, E_L, IsChecked(hWnd, R_L));
\r
3169 SetEnable(hWnd, E_SERI, IsChecked(hWnd, R_SERI));
\r
3170 SetEnable(hWnd, E_MD5_HASH, IsChecked(hWnd, R_MD5_HASH));
\r
3171 SetEnable(hWnd, E_SHA1_HASH, IsChecked(hWnd, R_SHA1_HASH));
\r
3173 if (IsChecked(hWnd, R_CN))
\r
3175 if (IsEmpty(hWnd, E_CN))
\r
3181 if (IsChecked(hWnd, R_O))
\r
3183 if (IsEmpty(hWnd, E_O))
\r
3189 if (IsChecked(hWnd, R_OU))
\r
3191 if (IsEmpty(hWnd, E_OU))
\r
3197 if (IsChecked(hWnd, R_C))
\r
3199 if (IsEmpty(hWnd, E_C))
\r
3205 if (IsChecked(hWnd, R_ST))
\r
3207 if (IsEmpty(hWnd, E_ST))
\r
3213 if (IsChecked(hWnd, R_L))
\r
3215 if (IsEmpty(hWnd, E_L))
\r
3221 if (IsChecked(hWnd, R_SERI))
\r
3223 char tmp[MAX_SIZE];
\r
3226 GetTxtA(hWnd, E_SERI, tmp, sizeof(tmp));
\r
3227 buf = StrToBin(tmp);
\r
3229 if (buf->Size == 0)
\r
3237 if (IsChecked(hWnd, R_MD5_HASH))
\r
3239 char tmp[MAX_SIZE];
\r
3242 GetTxtA(hWnd, E_MD5_HASH, tmp, sizeof(tmp));
\r
3243 buf = StrToBin(tmp);
\r
3245 if (buf->Size != MD5_SIZE)
\r
3253 if (IsChecked(hWnd, R_SHA1_HASH))
\r
3255 char tmp[MAX_SIZE];
\r
3258 GetTxtA(hWnd, E_SHA1_HASH, tmp, sizeof(tmp));
\r
3259 buf = StrToBin(tmp);
\r
3261 if (buf->Size != SHA1_SIZE)
\r
3269 SetEnable(hWnd, IDOK, b);
\r
3273 void SmEditCrlDlgOnOk(HWND hWnd, SM_EDIT_CRL *c)
\r
3278 bool empty = true;
\r
3280 if (hWnd == NULL || c == NULL)
\r
3285 crl = ZeroMalloc(sizeof(CRL));
\r
3286 crl->Name = ZeroMalloc(sizeof(NAME));
\r
3289 if (IsChecked(hWnd, R_CN))
\r
3291 n->CommonName = GetText(hWnd, E_CN);
\r
3295 if (IsChecked(hWnd, R_O))
\r
3297 n->Organization = GetText(hWnd, E_O);
\r
3301 if (IsChecked(hWnd, R_OU))
\r
3303 n->Unit = GetText(hWnd, E_OU);
\r
3307 if (IsChecked(hWnd, R_C))
\r
3309 n->Country = GetText(hWnd, E_C);
\r
3313 if (IsChecked(hWnd, R_ST))
\r
3315 n->State = GetText(hWnd, E_ST);
\r
3319 if (IsChecked(hWnd, R_L))
\r
3321 n->Local = GetText(hWnd, E_L);
\r
3325 if (IsChecked(hWnd, R_SERI))
\r
3327 char tmp[MAX_SIZE];
\r
3330 GetTxtA(hWnd, E_SERI, tmp, sizeof(tmp));
\r
3331 b = StrToBin(tmp);
\r
3333 if (b != NULL && b->Size >= 1)
\r
3335 crl->Serial = NewXSerial(b->Buf, b->Size);
\r
3343 if (IsChecked(hWnd, R_MD5_HASH))
\r
3345 char tmp[MAX_SIZE];
\r
3348 GetTxtA(hWnd, E_MD5_HASH, tmp, sizeof(tmp));
\r
3349 b = StrToBin(tmp);
\r
3351 if (b != NULL && b->Size == MD5_SIZE)
\r
3353 Copy(crl->DigestMD5, b->Buf, MD5_SIZE);
\r
3361 if (IsChecked(hWnd, R_SHA1_HASH))
\r
3363 char tmp[MAX_SIZE];
\r
3366 GetTxtA(hWnd, E_SHA1_HASH, tmp, sizeof(tmp));
\r
3367 b = StrToBin(tmp);
\r
3369 if (b != NULL && b->Size == SHA1_SIZE)
\r
3371 Copy(crl->DigestSHA1, b->Buf, SHA1_SIZE);
\r
3381 if (MsgBox(hWnd, MB_ICONEXCLAMATION | MB_YESNO | MB_DEFBUTTON2, _UU("SM_CRL_EMPTY_MSG")) == IDNO)
\r
3389 Zero(&t, sizeof(t));
\r
3390 StrCpy(t.HubName, sizeof(t.HubName), c->s->HubName);
\r
3393 if (CALL(hWnd, ScAddCrl(c->s->Rpc, &t)))
\r
3395 EndDialog(hWnd, true);
\r
3402 Zero(&t, sizeof(t));
\r
3403 StrCpy(t.HubName, sizeof(t.HubName), c->s->HubName);
\r
3407 if (CALL(hWnd, ScSetCrl(c->s->Rpc, &t)))
\r
3409 EndDialog(hWnd, true);
\r
3417 void SmEditCrlDlgOnLoad(HWND hWnd, SM_EDIT_CRL *c)
\r
3421 if (hWnd == NULL || c == NULL)
\r
3426 if (CmLoadXFromFileOrSecureCard(hWnd, &x))
\r
3428 UCHAR md5[MD5_SIZE], sha1[SHA1_SIZE];
\r
3430 SmEditCrlDlgSetName(hWnd, x->subject_name);
\r
3431 SmEditCrlDlgSetSerial(hWnd, x->serial);
\r
3432 GetXDigest(x, md5, false);
\r
3433 GetXDigest(x, sha1, true);
\r
3434 SmEditCrlDlgSetHash(hWnd, md5, sha1);
\r
3438 SmEditCrlDlgUpdate(hWnd, c);
\r
3442 // ダイアログにハッシュ情報を設定する
\r
3443 void SmEditCrlDlgSetHash(HWND hWnd, UCHAR *hash_md5, UCHAR *hash_sha1)
\r
3445 char tmp[MAX_SIZE];
\r
3452 if (hash_md5 != NULL && IsZero(hash_md5, MD5_SIZE) == false)
\r
3454 Check(hWnd, R_MD5_HASH, true);
\r
3455 BinToStrEx(tmp, sizeof(tmp), hash_md5, MD5_SIZE);
\r
3456 SetTextA(hWnd, E_MD5_HASH, tmp);
\r
3460 Check(hWnd, R_MD5_HASH, false);
\r
3463 if (hash_sha1 != NULL && IsZero(hash_sha1, SHA1_SIZE) == false)
\r
3465 Check(hWnd, R_SHA1_HASH, true);
\r
3466 BinToStrEx(tmp, sizeof(tmp), hash_sha1, SHA1_SIZE);
\r
3467 SetTextA(hWnd, E_SHA1_HASH, tmp);
\r
3471 Check(hWnd, R_SHA1_HASH, false);
\r
3475 // ダイアログにシリアル番号を設定する
\r
3476 void SmEditCrlDlgSetSerial(HWND hWnd, X_SERIAL *serial)
\r
3478 char tmp[MAX_SIZE];
\r
3480 if (hWnd == NULL || serial == NULL)
\r
3485 BinToStrEx(tmp, sizeof(tmp), serial->data, serial->size);
\r
3487 Check(hWnd, R_SERI, true);
\r
3489 SetTextA(hWnd, E_SERI, tmp);
\r
3492 // ダイアログに名前状況を設定する
\r
3493 void SmEditCrlDlgSetName(HWND hWnd, NAME *name)
\r
3496 if (hWnd == NULL || name == NULL)
\r
3502 if (UniIsEmptyStr(name->CommonName))
\r
3504 Check(hWnd, R_CN, false);
\r
3508 Check(hWnd, R_CN, true);
\r
3509 SetText(hWnd, E_CN, name->CommonName);
\r
3513 if (UniIsEmptyStr(name->Organization))
\r
3515 Check(hWnd, R_O, false);
\r
3519 Check(hWnd, R_O, true);
\r
3520 SetText(hWnd, E_O, name->Organization);
\r
3524 if (UniIsEmptyStr(name->Unit))
\r
3526 Check(hWnd, R_OU, false);
\r
3530 Check(hWnd, R_OU, true);
\r
3531 SetText(hWnd, E_OU, name->Unit);
\r
3535 if (UniIsEmptyStr(name->Country))
\r
3537 Check(hWnd, R_C, false);
\r
3541 Check(hWnd, R_C, true);
\r
3542 SetText(hWnd, E_C, name->Country);
\r
3546 if (UniIsEmptyStr(name->State))
\r
3548 Check(hWnd, R_ST, false);
\r
3552 Check(hWnd, R_ST, true);
\r
3553 SetText(hWnd, E_ST, name->State);
\r
3557 if (UniIsEmptyStr(name->Local))
\r
3559 Check(hWnd, R_L, false);
\r
3563 Check(hWnd, R_L, true);
\r
3564 SetText(hWnd, E_L, name->Local);
\r
3568 // CRL 編集ダイアログプロシージャ
\r
3569 UINT SmEditCrlDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
3571 SM_EDIT_CRL *c = (SM_EDIT_CRL *)param;
\r
3580 case WM_INITDIALOG:
\r
3581 SmEditCrlDlgInit(hWnd, c);
\r
3585 switch (LOWORD(wParam))
\r
3605 SmEditCrlDlgUpdate(hWnd, c);
\r
3612 SmEditCrlDlgOnLoad(hWnd, c);
\r
3616 SmEditCrlDlgOnOk(hWnd, c);
\r
3624 FocusEx(hWnd, E_CN);
\r
3628 FocusEx(hWnd, E_O);
\r
3632 FocusEx(hWnd, E_OU);
\r
3636 FocusEx(hWnd, E_C);
\r
3640 FocusEx(hWnd, E_ST);
\r
3644 FocusEx(hWnd, E_L);
\r
3648 FocusEx(hWnd, E_SERI);
\r
3652 FocusEx(hWnd, E_MD5_HASH);
\r
3656 FocusEx(hWnd, E_SHA1_HASH);
\r
3662 EndDialog(hWnd, false);
\r
3670 void SmCrlDlgInit(HWND hWnd, SM_HUB *s)
\r
3673 if (hWnd == NULL || s == NULL)
\r
3678 SetIcon(hWnd, 0, ICO_CERT_X);
\r
3680 LvInit(hWnd, L_LIST);
\r
3681 LvInsertColumn(hWnd, L_LIST, 0, _UU("SM_CRL_COLUMN_1"), 555);
\r
3683 SmCrlDlgRefresh(hWnd, s);
\r
3687 void SmCrlDlgUpdate(HWND hWnd, SM_HUB *s)
\r
3690 if (hWnd == NULL || s == NULL)
\r
3695 SetEnable(hWnd, IDOK, LvIsSingleSelected(hWnd, L_LIST));
\r
3696 SetEnable(hWnd, B_DELETE, LvIsSingleSelected(hWnd, L_LIST));
\r
3700 void SmCrlDlgRefresh(HWND hWnd, SM_HUB *s)
\r
3706 if (hWnd == NULL || s == NULL)
\r
3711 Zero(&t, sizeof(t));
\r
3712 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
3714 if (CALL(hWnd, ScEnumCrl(s->Rpc, &t)) == false)
\r
3716 EndDialog(hWnd, false);
\r
3720 v = LvInsertStart();
\r
3722 for (i = 0;i < t.NumItem;i++)
\r
3724 RPC_ENUM_CRL_ITEM *e = &t.Items[i];
\r
3725 LvInsertAdd(v, ICO_CERT_X, (void *)e->Key, 1, e->CrlInfo);
\r
3728 LvInsertEndEx(v, hWnd, L_LIST, true);
\r
3730 if (t.NumItem >= 1)
\r
3732 LvAutoSize(hWnd, L_LIST);
\r
3735 FreeRpcEnumCrl(&t);
\r
3737 SmCrlDlgUpdate(hWnd, s);
\r
3740 // 無効な証明書一覧ダイアログプロシージャ
\r
3741 UINT SmCrlDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
3744 SM_HUB *s = (SM_HUB *)param;
\r
3754 case WM_INITDIALOG:
\r
3755 SmCrlDlgInit(hWnd, s);
\r
3762 Zero(&c, sizeof(c));
\r
3766 if (Dialog(hWnd, D_SM_EDIT_CRL, SmEditCrlDlgProc, &c))
\r
3768 SmCrlDlgRefresh(hWnd, s);
\r
3773 if (IsEnable(hWnd, B_DELETE))
\r
3775 if (MsgBox(hWnd, MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2, _UU("SM_CRL_DELETE_MSG")) == IDYES)
\r
3779 Zero(&t, sizeof(t));
\r
3780 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
3781 t.Key = (UINT)LvGetParam(hWnd, L_LIST, LvGetSelected(hWnd, L_LIST));
\r
3783 if (CALL(hWnd, ScDelCrl(s->Rpc, &t)))
\r
3785 SmCrlDlgRefresh(hWnd, s);
\r
3794 if (IsEnable(hWnd, IDOK))
\r
3798 Zero(&c, sizeof(c));
\r
3801 c.Key = (UINT)LvGetParam(hWnd, L_LIST, LvGetSelected(hWnd, L_LIST));
\r
3803 if (Dialog(hWnd, D_SM_EDIT_CRL, SmEditCrlDlgProc, &c))
\r
3805 SmCrlDlgRefresh(hWnd, s);
\r
3817 EndDialog(hWnd, 0);
\r
3821 n = (NMHDR *)lParam;
\r
3824 case LVN_ITEMCHANGED:
\r
3825 switch (n->idFrom)
\r
3828 SmCrlDlgUpdate(hWnd, s);
\r
3836 LvStandardHandler(hWnd, msg, wParam, lParam, L_LIST);
\r
3842 void SmSecureManager(HWND hWnd)
\r
3844 UINT id = SmGetCurrentSecureIdFromReg();
\r
3848 id = SmSelectSecureId(hWnd);
\r
3856 CmSecureManager(hWnd, id);
\r
3860 void SmSelectKeyPairDlgInit(HWND hWnd, SM_SECURE_KEYPAIR *k)
\r
3862 SECURE_DEVICE *dev;
\r
3864 if (hWnd == NULL || k == NULL)
\r
3869 dev = GetSecureDevice(k->Id);
\r
3872 FormatText(hWnd, S_INFO, dev->DeviceName);
\r
3875 LvInit(hWnd, L_CERT);
\r
3876 LvInsertColumn(hWnd, L_CERT, 0, _UU("SEC_MGR_COLUMN1"), 200);
\r
3877 LvInsertColumn(hWnd, L_CERT, 1, _UU("SEC_MGR_COLUMN2"), 110);
\r
3879 LvInit(hWnd, L_KEY);
\r
3880 LvInsertColumn(hWnd, L_KEY, 0, _UU("SEC_MGR_COLUMN1"), 200);
\r
3881 LvInsertColumn(hWnd, L_KEY, 1, _UU("SEC_MGR_COLUMN2"), 110);
\r
3883 SetEnable(hWnd, L_CERT, k->UseCert);
\r
3884 SetEnable(hWnd, B_BOLD1, k->UseCert);
\r
3885 SetEnable(hWnd, L_KEY, k->UseKey);
\r
3886 SetEnable(hWnd, B_BOLD2, k->UseKey);
\r
3888 SetFont(hWnd, B_BOLD1, Font(0, true));
\r
3889 SetFont(hWnd, B_BOLD2, Font(0, true));
\r
3891 SmSelectKeyPairDlgUpdate(hWnd, k);
\r
3895 void SmSelectKeyPairDlgUpdate(HWND hWnd, SM_SECURE_KEYPAIR *k)
\r
3899 if (hWnd == NULL || k == NULL)
\r
3906 if (LvIsSingleSelected(hWnd, L_CERT) == false)
\r
3912 char *name = LvGetSelectedStrA(hWnd, L_CERT, 0);
\r
3915 if (LvIsSingleSelected(hWnd, L_KEY) == false)
\r
3917 if ((k->Flag++) == 0)
\r
3919 LvSelect(hWnd, L_KEY, LvSearchStrA(hWnd, L_KEY, 0, name));
\r
3929 if (LvIsSingleSelected(hWnd, L_KEY) == false)
\r
3935 char *name = LvGetSelectedStrA(hWnd, L_KEY, 0);
\r
3938 if (LvIsSingleSelected(hWnd, L_CERT) == false)
\r
3940 if ((k->Flag++) == 0)
\r
3942 LvSelect(hWnd, L_CERT, LvSearchStrA(hWnd, L_CERT, 0, name));
\r
3950 SetEnable(hWnd, IDOK, ok);
\r
3954 void SmSelectKeyPairDlgRefresh(HWND hWnd, SM_SECURE_KEYPAIR *k)
\r
3958 WINUI_SECURE_BATCH batch[] =
\r
3960 {WINUI_SECURE_ENUM_OBJECTS, NULL, false, NULL, NULL, NULL, NULL, NULL, NULL},
\r
3963 if (hWnd == NULL || k == NULL)
\r
3968 ret = SecureDeviceWindow(hWnd, batch, sizeof(batch) / sizeof(batch[0]), k->Id, k->BitmapId);
\r
3976 o = batch[0].EnumList;
\r
3981 CmSecureManagerDlgPrintListEx(hWnd, L_CERT, o, SEC_X);
\r
3986 CmSecureManagerDlgPrintListEx(hWnd, L_KEY, o, SEC_K);
\r
3989 FreeEnumSecObject(o);
\r
3993 SmSelectKeyPairDlgUpdate(hWnd, k);
\r
3996 // キーペア読み込みダイアログプロシージャ
\r
3997 UINT SmSelectKeyPairDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
4000 SM_SECURE_KEYPAIR *k = (SM_SECURE_KEYPAIR *)param;
\r
4010 case WM_INITDIALOG:
\r
4011 SmSelectKeyPairDlgInit(hWnd, k);
\r
4013 SetTimer(hWnd, 1, 1, NULL);
\r
4014 SetTimer(hWnd, 2, 100, NULL);
\r
4021 KillTimer(hWnd, 1);
\r
4022 SmSelectKeyPairDlgRefresh(hWnd, k);
\r
4026 SmSelectKeyPairDlgUpdate(hWnd, k);
\r
4035 s1 = LvGetSelectedStrA(hWnd, L_CERT, 0);
\r
4036 s2 = LvGetSelectedStrA(hWnd, L_KEY, 0);
\r
4039 StrCpy(k->CertName, sizeof(k->CertName), s1);
\r
4043 StrCpy(k->KeyName, sizeof(k->KeyName), s2);
\r
4047 EndDialog(hWnd, true);
\r
4057 EndDialog(hWnd, 0);
\r
4061 n = (NMHDR *)lParam;
\r
4062 switch (n->idFrom)
\r
4068 case LVN_ITEMCHANGED:
\r
4069 SmSelectKeyPairDlgUpdate(hWnd, k);
\r
4080 // キーペアをスマートカードから読み込む
\r
4081 bool SmSelectKeyPair(HWND hWnd, char *cert_name, UINT cert_name_size, char *key_name, UINT key_name_size)
\r
4083 return SmSelectKeyPairEx(hWnd, cert_name, cert_name_size, key_name, key_name_size, 0);
\r
4085 bool SmSelectKeyPairEx(HWND hWnd, char *cert_name, UINT cert_name_size, char *key_name, UINT key_name_size, UINT bitmap_id)
\r
4087 SM_SECURE_KEYPAIR p;
\r
4089 if (hWnd == NULL || (cert_name == NULL && key_name == NULL))
\r
4094 Zero(&p, sizeof(p));
\r
4095 p.Id = SmGetCurrentSecureId(hWnd);
\r
4101 p.UseCert = (cert_name == NULL) ? false : true;
\r
4102 p.UseKey = (key_name == NULL) ? false : true;
\r
4103 p.BitmapId = bitmap_id;
\r
4105 if (Dialog(hWnd, D_SM_SELECT_KEYPAIR, SmSelectKeyPairDlg, &p) == false)
\r
4112 StrCpy(cert_name, cert_name_size, p.CertName);
\r
4116 StrCpy(key_name, key_name_size, p.KeyName);
\r
4122 // スマートカード番号をユーザーに選択させる
\r
4123 UINT SmSelectSecureId(HWND hWnd)
\r
4125 UINT id = MsRegReadInt(REG_CURRENT_USER, SECURE_MANAGER_KEY, "DeviceId");
\r
4128 if (id != 0 && CheckSecureDeviceId(id) == false)
\r
4133 ret = CmSelectSecure(hWnd, id);
\r
4139 SmWriteSelectSecureIdReg(ret);
\r
4144 // 現在のスマートカード番号をレジストリに書き込む
\r
4145 void SmWriteSelectSecureIdReg(UINT id)
\r
4147 MsRegWriteInt(REG_CURRENT_USER, SECURE_MANAGER_KEY, "DeviceId", id);
\r
4150 // 現在のスマートカード番号を取得する
\r
4151 UINT SmGetCurrentSecureId(HWND hWnd)
\r
4154 UINT id = MsRegReadInt(REG_CURRENT_USER, SECURE_MANAGER_KEY, "DeviceId");
\r
4157 if (id == 0 || CheckSecureDeviceId(id) == false)
\r
4159 // 不正な場合はスマートカードデバイス番号を選択させる
\r
4160 id = SmSelectSecureId(hWnd);
\r
4166 // レジストリから現在のスマートカード番号を取得する
\r
4167 UINT SmGetCurrentSecureIdFromReg()
\r
4170 UINT id = MsRegReadInt(REG_CURRENT_USER, SECURE_MANAGER_KEY, "DeviceId");
\r
4173 if (id == 0 || CheckSecureDeviceId(id) == false)
\r
4181 // 指定した名前の L3 スイッチが開始されているかどうか取得する
\r
4182 bool SmL3IsSwActive(SM_SERVER *s, char *name)
\r
4188 if (s == NULL || name == NULL)
\r
4193 Zero(&t, sizeof(t));
\r
4194 if (ScEnumL3Switch(s->Rpc, &t) == ERR_NO_ERROR)
\r
4196 for (i = 0;i < t.NumItem;i++)
\r
4198 RPC_ENUM_L3SW_ITEM *e = &t.Items[i];
\r
4199 if (StrCmpi(e->Name, name) == 0)
\r
4208 FreeRpcEnumL3Sw(&t);
\r
4215 void SmL3SwTableDlgInit(HWND hWnd, SM_L3SW *w)
\r
4218 if (hWnd == NULL || w == NULL)
\r
4223 SmL3SwTableDlgUpdate(hWnd, w);
\r
4227 void SmL3SwTableDlgUpdate(HWND hWnd, SM_L3SW *w)
\r
4232 if (hWnd == NULL || w == NULL)
\r
4237 if (IpIsFilled(hWnd, E_NETWORK) == false ||
\r
4238 IpIsFilled(hWnd, E_MASK) == false ||
\r
4239 IpIsFilled(hWnd, E_GATEWAY) == false)
\r
4244 ip = IpGet(hWnd, E_GATEWAY);
\r
4245 if (ip == 0 || ip == 0xffffffff)
\r
4250 if (GetInt(hWnd, E_METRIC) == 0)
\r
4255 if (IsNetworkAddress32(IpGet(hWnd, E_NETWORK), IpGet(hWnd, E_MASK)) == false)
\r
4260 SetEnable(hWnd, IDOK, b);
\r
4263 UINT SmL3SwTableDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
4265 SM_L3SW *w = (SM_L3SW *)param;
\r
4275 case WM_INITDIALOG:
\r
4276 SmL3SwTableDlgInit(hWnd, w);
\r
4280 switch (LOWORD(wParam))
\r
4286 SmL3SwTableDlgUpdate(hWnd, w);
\r
4293 Zero(&t, sizeof(t));
\r
4294 StrCpy(t.Name, sizeof(t.Name), w->SwitchName);
\r
4295 t.NetworkAddress = IpGet(hWnd, E_NETWORK);
\r
4296 t.SubnetMask = IpGet(hWnd, E_MASK);
\r
4297 t.GatewayAddress = IpGet(hWnd, E_GATEWAY);
\r
4298 t.Metric = GetInt(hWnd, E_METRIC);
\r
4300 if (CALL(hWnd, ScAddL3Table(w->s->Rpc, &t)))
\r
4302 EndDialog(hWnd, 1);
\r
4313 EndDialog(hWnd, 0);
\r
4321 void SmL3SwIfDlgInit(HWND hWnd, SM_L3SW *w)
\r
4326 if (hWnd == NULL || w == NULL)
\r
4331 Zero(&t, sizeof(t));
\r
4333 if (CALL(hWnd, ScEnumHub(w->s->Rpc, &t)) == false)
\r
4339 CbReset(hWnd, E_HUBNAME);
\r
4340 CbSetHeight(hWnd, E_HUBNAME, 18);
\r
4342 for (i = 0;i < t.NumHub;i++)
\r
4344 RPC_ENUM_HUB_ITEM *e = &t.Hubs[i];
\r
4346 if (e->HubType != HUB_TYPE_FARM_DYNAMIC)
\r
4348 CbAddStrA(hWnd, E_HUBNAME, e->HubName, 0);
\r
4352 FreeRpcEnumHub(&t);
\r
4354 SetTextA(hWnd, E_HUBNAME, "");
\r
4356 SmL3SwIfDlgUpdate(hWnd, w);
\r
4360 void SmL3SwIfDlgUpdate(HWND hWnd, SM_L3SW *w)
\r
4364 if (hWnd == NULL || w == NULL)
\r
4369 if (IsEmpty(hWnd, E_HUBNAME))
\r
4374 if (IpIsFilled(hWnd, E_IP) == false || IpIsFilled(hWnd, E_MASK) == false)
\r
4379 if (IpGet(hWnd, E_IP) == 0 || IpGet(hWnd, E_IP) == 0xffffffff)
\r
4384 if (IsSubnetMask32(IpGet(hWnd, E_MASK)) == false)
\r
4389 SetEnable(hWnd, IDOK, b);
\r
4392 // 仮想インターフェイスの追加ダイアログ
\r
4393 UINT SmL3SwIfDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
4395 SM_L3SW *w = (SM_L3SW *)param;
\r
4405 case WM_INITDIALOG:
\r
4406 SmL3SwIfDlgInit(hWnd, w);
\r
4408 SetTimer(hWnd, 1, 250, NULL);
\r
4415 SmL3SwIfDlgUpdate(hWnd, w);
\r
4421 switch (LOWORD(wParam))
\r
4426 SmL3SwIfDlgUpdate(hWnd, w);
\r
4433 hubname = GetTextA(hWnd, E_HUBNAME);
\r
4434 if (hubname != NULL)
\r
4437 Zero(&t, sizeof(t));
\r
4438 StrCpy(t.HubName, sizeof(t.HubName), hubname);
\r
4439 t.IpAddress = IpGet(hWnd, E_IP);
\r
4440 t.SubnetMask = IpGet(hWnd, E_MASK);
\r
4441 StrCpy(t.Name, sizeof(t.Name), w->SwitchName);
\r
4443 if (CALL(hWnd, ScAddL3If(w->s->Rpc, &t)))
\r
4445 EndDialog(hWnd, 1);
\r
4459 EndDialog(hWnd, 0);
\r
4467 void SmL3SwDlgInit(HWND hWnd, SM_L3SW *w)
\r
4470 if (hWnd == NULL || w == NULL)
\r
4475 SetIcon(hWnd, 0, ICO_SWITCH_OFFLINE);
\r
4477 FormatText(hWnd, 0, w->SwitchName);
\r
4479 SetFont(hWnd, S_BOLD1, Font(0, true));
\r
4480 SetFont(hWnd, S_BOLD2, Font(0, true));
\r
4482 LvInit(hWnd, L_IF);
\r
4483 LvInsertColumn(hWnd, L_IF, 0, _UU("SM_L3_SW_IF_COLUMN1"), 150);
\r
4484 LvInsertColumn(hWnd, L_IF, 1, _UU("SM_L3_SW_IF_COLUMN2"), 150);
\r
4485 LvInsertColumn(hWnd, L_IF, 2, _UU("SM_L3_SW_IF_COLUMN3"), 180);
\r
4487 LvInit(hWnd, L_TABLE);
\r
4488 LvInsertColumn(hWnd, L_TABLE, 0, _UU("SM_L3_SW_TABLE_COLUMN1"), 130);
\r
4489 LvInsertColumn(hWnd, L_TABLE, 1, _UU("SM_L3_SW_TABLE_COLUMN2"), 130);
\r
4490 LvInsertColumn(hWnd, L_TABLE, 2, _UU("SM_L3_SW_TABLE_COLUMN3"), 130);
\r
4491 LvInsertColumn(hWnd, L_TABLE, 3, _UU("SM_L3_SW_TABLE_COLUMN4"), 100);
\r
4493 w->Enable = SmL3IsSwActive(w->s, w->SwitchName) ? false : true;
\r
4495 SmL3SwDlgRefresh(hWnd, w);
\r
4499 void SmL3SwDlgUpdate(HWND hWnd, SM_L3SW *w)
\r
4502 if (hWnd == NULL || w == NULL)
\r
4507 SetEnable(hWnd, B_ADD_IF, w->s->ServerAdminMode && w->Enable);
\r
4508 SetEnable(hWnd, B_ADD_TABLE, w->s->ServerAdminMode && w->Enable);
\r
4509 SetEnable(hWnd, B_DEL_IF, LvIsSingleSelected(hWnd, L_IF) && w->s->ServerAdminMode && w->Enable);
\r
4510 SetEnable(hWnd, B_DEL_TABLE, LvIsSingleSelected(hWnd, L_TABLE) && w->s->ServerAdminMode && w->Enable);
\r
4511 SetEnable(hWnd, B_START, w->s->ServerAdminMode && w->Enable);
\r
4512 SetEnable(hWnd, B_STOP, w->s->ServerAdminMode && (w->Enable == false));
\r
4516 void SmL3SwDlgRefresh(HWND hWnd, SM_L3SW *w)
\r
4519 wchar_t tmp1[MAX_SIZE];
\r
4520 wchar_t tmp2[MAX_SIZE];
\r
4521 wchar_t tmp3[MAX_SIZE];
\r
4522 wchar_t tmp4[MAX_SIZE];
\r
4524 if (hWnd == NULL || w == NULL)
\r
4534 Zero(&t, sizeof(t));
\r
4535 StrCpy(t.Name, sizeof(t.Name), w->SwitchName);
\r
4537 if (CALL(hWnd, ScEnumL3If(w->s->Rpc, &t)) == false)
\r
4543 v = LvInsertStart();
\r
4545 for (i = 0;i < t.NumItem;i++)
\r
4547 RPC_L3IF *e = &t.Items[i];
\r
4549 IPToUniStr32(tmp1, sizeof(tmp1), e->IpAddress);
\r
4550 IPToUniStr32(tmp2, sizeof(tmp2), e->SubnetMask);
\r
4551 StrToUni(tmp3, sizeof(tmp3), e->HubName);
\r
4553 LvInsertAdd(v, ICO_NIC_ONLINE, NULL, 3, tmp1, tmp2, tmp3);
\r
4556 LvReset(hWnd, L_IF);
\r
4558 LvInsertEnd(v, hWnd, L_IF);
\r
4560 FreeRpcEnumL3If(&t);
\r
4565 RPC_ENUM_L3TABLE t;
\r
4568 Zero(&t, sizeof(t));
\r
4569 StrCpy(t.Name, sizeof(t.Name), w->SwitchName);
\r
4571 if (CALL(hWnd, ScEnumL3Table(w->s->Rpc, &t)) == false)
\r
4577 v = LvInsertStart();
\r
4579 for (i = 0;i < t.NumItem;i++)
\r
4581 RPC_L3TABLE *e = &t.Items[i];
\r
4583 IPToUniStr32(tmp1, sizeof(tmp1), e->NetworkAddress);
\r
4584 IPToUniStr32(tmp2, sizeof(tmp2), e->SubnetMask);
\r
4585 IPToUniStr32(tmp3, sizeof(tmp3), e->GatewayAddress);
\r
4586 UniToStru(tmp4, e->Metric);
\r
4588 LvInsertAdd(v, ICO_PROTOCOL, NULL, 4, tmp1, tmp2, tmp3, tmp4);
\r
4591 LvReset(hWnd, L_TABLE);
\r
4593 LvInsertEnd(v, hWnd, L_TABLE);
\r
4595 FreeRpcEnumL3Table(&t);
\r
4598 SmL3SwDlgUpdate(hWnd, w);
\r
4601 // L3 スイッチの編集ダイアログ
\r
4602 UINT SmL3SwDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
4604 SM_L3SW *w = (SM_L3SW *)param;
\r
4614 case WM_INITDIALOG:
\r
4615 SmL3SwDlgInit(hWnd, w);
\r
4617 SetTimer(hWnd, 1, 1000, NULL);
\r
4624 KillTimer(hWnd, 1);
\r
4625 w->Enable = SmL3IsSwActive(w->s, w->SwitchName) ? false : true;
\r
4626 SmL3SwDlgUpdate(hWnd, w);
\r
4627 SetTimer(hWnd, 1, 1000, NULL);
\r
4636 if (IsEnable(hWnd, B_START))
\r
4640 Zero(&t, sizeof(t));
\r
4641 StrCpy(t.Name, sizeof(t.Name), w->SwitchName);
\r
4643 if (CALL(hWnd, ScStartL3Switch(w->s->Rpc, &t)))
\r
4645 SmL3SwDlgUpdate(hWnd, w);
\r
4651 if (IsEnable(hWnd, B_STOP))
\r
4655 Zero(&t, sizeof(t));
\r
4656 StrCpy(t.Name, sizeof(t.Name), w->SwitchName);
\r
4658 if (CALL(hWnd, ScStopL3Switch(w->s->Rpc, &t)))
\r
4660 SmL3SwDlgUpdate(hWnd, w);
\r
4666 if (Dialog(hWnd, D_SM_L3_SW_IF, SmL3SwIfDlg, w))
\r
4668 SmL3SwDlgRefresh(hWnd, w);
\r
4673 if (LvIsSingleSelected(hWnd, L_IF))
\r
4676 char *tmp1, *tmp2, *tmp3;
\r
4678 tmp1 = LvGetSelectedStrA(hWnd, L_IF, 0);
\r
4679 tmp2 = LvGetSelectedStrA(hWnd, L_IF, 1);
\r
4680 tmp3 = LvGetSelectedStrA(hWnd, L_IF, 2);
\r
4682 Zero(&t, sizeof(t));
\r
4683 StrCpy(t.Name, sizeof(t.Name), w->SwitchName);
\r
4684 t.IpAddress = StrToIP32(tmp1);
\r
4685 t.SubnetMask = StrToIP32(tmp2);
\r
4686 StrCpy(t.HubName, sizeof(t.HubName), tmp3);
\r
4688 if (CALL(hWnd, ScDelL3If(w->s->Rpc, &t)))
\r
4690 SmL3SwDlgRefresh(hWnd, w);
\r
4700 if (Dialog(hWnd, D_SM_L3_SW_TABLE, SmL3SwTableDlg, w))
\r
4702 SmL3SwDlgRefresh(hWnd, w);
\r
4707 if (LvIsSingleSelected(hWnd, L_TABLE))
\r
4710 char *tmp1, *tmp2, *tmp3, *tmp4;
\r
4712 tmp1 = LvGetSelectedStrA(hWnd, L_TABLE, 0);
\r
4713 tmp2 = LvGetSelectedStrA(hWnd, L_TABLE, 1);
\r
4714 tmp3 = LvGetSelectedStrA(hWnd, L_TABLE, 2);
\r
4715 tmp4 = LvGetSelectedStrA(hWnd, L_TABLE, 3);
\r
4717 Zero(&t, sizeof(t));
\r
4718 StrCpy(t.Name, sizeof(t.Name), w->SwitchName);
\r
4719 t.NetworkAddress = StrToIP32(tmp1);
\r
4720 t.SubnetMask = StrToIP32(tmp2);
\r
4721 t.GatewayAddress = StrToIP32(tmp3);
\r
4722 t.Metric = ToInt(tmp4);
\r
4724 if (CALL(hWnd, ScDelL3Table(w->s->Rpc, &t)))
\r
4726 SmL3SwDlgRefresh(hWnd, w);
\r
4743 EndDialog(hWnd, 0);
\r
4747 n = (NMHDR *)lParam;
\r
4748 switch (n->idFrom)
\r
4754 case LVN_ITEMCHANGED:
\r
4755 SmL3SwDlgUpdate(hWnd, w);
\r
4767 void SmL3AddDlgUpdate(HWND hWnd, SM_SERVER *s)
\r
4771 if (hWnd == NULL || s == NULL)
\r
4776 tmp = GetTextA(hWnd, E_NAME);
\r
4778 SetEnable(hWnd, IDOK, IsEmptyStr(tmp) == false && IsSafeStr(tmp));
\r
4783 // 新しい L3 スイッチの作成ダイアログ
\r
4784 UINT SmL3AddDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
4786 SM_SERVER *s = (SM_SERVER *)param;
\r
4796 case WM_INITDIALOG:
\r
4797 LimitText(hWnd, E_NAME, MAX_HUBNAME_LEN);
\r
4798 SmL3AddDlgUpdate(hWnd, s);
\r
4802 switch (LOWORD(wParam))
\r
4805 SmL3AddDlgUpdate(hWnd, s);
\r
4812 Zero(&t, sizeof(t));
\r
4813 GetTxtA(hWnd, E_NAME, t.Name, sizeof(t.Name));
\r
4814 if (CALL(hWnd, ScAddL3Switch(s->Rpc, &t)))
\r
4816 EndDialog(hWnd, 1);
\r
4827 EndDialog(hWnd, 0);
\r
4835 void SmL3DlgInit(HWND hWnd, SM_SERVER *s)
\r
4838 if (hWnd == NULL || s == NULL)
\r
4843 SetFont(hWnd, S_BOLD, Font(0, true));
\r
4845 SetIcon(hWnd, 0, ICO_SWITCH);
\r
4847 LvInit(hWnd, L_LIST);
\r
4848 LvInsertColumn(hWnd, L_LIST, 0, _UU("SM_L3_SW_COLUMN1"), 150);
\r
4849 LvInsertColumn(hWnd, L_LIST, 1, _UU("SM_L3_SW_COLUMN2"), 120);
\r
4850 LvInsertColumn(hWnd, L_LIST, 2, _UU("SM_L3_SW_COLUMN3"), 100);
\r
4851 LvInsertColumn(hWnd, L_LIST, 3, _UU("SM_L3_SW_COLUMN4"), 100);
\r
4853 SmL3DlgRefresh(hWnd, s);
\r
4857 void SmL3DlgUpdate(HWND hWnd, SM_SERVER *s)
\r
4860 bool active = false;
\r
4862 if (hWnd == NULL || s == NULL)
\r
4867 if (LvIsSingleSelected(hWnd, L_LIST))
\r
4872 i = LvGetSelected(hWnd, L_LIST);
\r
4873 if (i != INFINITE)
\r
4875 tmp = LvGetStr(hWnd, L_LIST, i, 1);
\r
4876 if (UniStrCmpi(tmp, _UU("SM_L3_SW_ST_F_F")) != 0)
\r
4884 SetEnable(hWnd, B_START, b && (active == false));
\r
4885 SetEnable(hWnd, B_STOP, b && (active != false));
\r
4886 SetEnable(hWnd, IDOK, b);
\r
4887 SetEnable(hWnd, B_DELETE, b);
\r
4891 void SmL3DlgRefresh(HWND hWnd, SM_SERVER *s)
\r
4897 if (hWnd == NULL || s == NULL)
\r
4902 Zero(&t, sizeof(t));
\r
4903 if (CALL(hWnd, ScEnumL3Switch(s->Rpc, &t)) == false)
\r
4909 v = LvInsertStart();
\r
4911 for (i = 0;i < t.NumItem;i++)
\r
4913 RPC_ENUM_L3SW_ITEM *e = &t.Items[i];
\r
4914 wchar_t tmp1[MAX_SIZE], *tmp2, tmp3[64], tmp4[64];
\r
4916 StrToUni(tmp1, sizeof(tmp1), e->Name);
\r
4917 if (e->Active == false)
\r
4919 tmp2 = _UU("SM_L3_SW_ST_F_F");
\r
4921 else if (e->Online == false)
\r
4923 tmp2 = _UU("SM_L3_SW_ST_T_F");
\r
4927 tmp2 = _UU("SM_L3_SW_ST_T_T");
\r
4929 UniToStru(tmp3, e->NumInterfaces);
\r
4930 UniToStru(tmp4, e->NumTables);
\r
4932 LvInsertAdd(v, e->Active ? ICO_SWITCH : ICO_SWITCH_OFFLINE, NULL,
\r
4933 4, tmp1, tmp2, tmp3, tmp4);
\r
4936 LvInsertEnd(v, hWnd, L_LIST);
\r
4938 FreeRpcEnumL3Sw(&t);
\r
4940 SmL3DlgUpdate(hWnd, s);
\r
4944 UINT SmL3Dlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
4947 SM_SERVER *s = (SM_SERVER *)param;
\r
4958 case WM_INITDIALOG:
\r
4959 SmL3DlgInit(hWnd, s);
\r
4961 SetTimer(hWnd, 1, 1000, NULL);
\r
4965 KillTimer(hWnd, 1);
\r
4966 SmL3DlgRefresh(hWnd, s);
\r
4967 SetTimer(hWnd, 1, 1000, NULL);
\r
4975 if (Dialog(hWnd, D_SM_L3_ADD, SmL3AddDlg, s))
\r
4977 SmL3DlgRefresh(hWnd, s);
\r
4983 name = LvGetSelectedStrA(hWnd, L_LIST, 0);
\r
4986 Zero(&t, sizeof(t));
\r
4987 StrCpy(t.Name, sizeof(t.Name), name);
\r
4989 if (CALL(hWnd, ScStartL3Switch(s->Rpc, &t)))
\r
4991 SmL3DlgRefresh(hWnd, s);
\r
5000 name = LvGetSelectedStrA(hWnd, L_LIST, 0);
\r
5003 Zero(&t, sizeof(t));
\r
5004 StrCpy(t.Name, sizeof(t.Name), name);
\r
5006 if (CALL(hWnd, ScStopL3Switch(s->Rpc, &t)))
\r
5008 SmL3DlgRefresh(hWnd, s);
\r
5017 if (IsEnable(hWnd, IDOK))
\r
5019 name = LvGetSelectedStrA(hWnd, L_LIST, 0);
\r
5023 Zero(&w, sizeof(w));
\r
5025 w.SwitchName = name;
\r
5027 Dialog(hWnd, D_SM_L3_SW, SmL3SwDlg, &w);
\r
5036 name = LvGetSelectedStrA(hWnd, L_LIST, 0);
\r
5039 if (MsgBoxEx(hWnd, MB_ICONEXCLAMATION | MB_YESNO | MB_DEFBUTTON2,
\r
5040 _UU("SM_L3_SW_DEL_MSG"), name) == IDYES)
\r
5042 Zero(&t, sizeof(t));
\r
5043 StrCpy(t.Name, sizeof(t.Name), name);
\r
5045 if (CALL(hWnd, ScDelL3Switch(s->Rpc, &t)))
\r
5047 SmL3DlgRefresh(hWnd, s);
\r
5063 n = (NMHDR *)lParam;
\r
5064 switch (n->idFrom)
\r
5069 case LVN_ITEMCHANGED:
\r
5070 SmL3DlgUpdate(hWnd, s);
\r
5074 Command(hWnd, IDOK);
\r
5082 EndDialog(hWnd, 0);
\r
5090 void SmL3(HWND hWnd, SM_SERVER *s)
\r
5098 Dialog(hWnd, D_SM_L3, SmL3Dlg, s);
\r
5102 UINT SmHubAdminOptionValueDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
5104 SM_EDIT_AO *a = (SM_EDIT_AO *)param;
\r
5106 char tmp[MAX_SIZE];
\r
5115 case WM_INITDIALOG:
\r
5116 CbReset(hWnd, C_NAME);
\r
5117 for (i = 0;i < a->DefaultOptions.NumItem;i++)
\r
5119 wchar_t tmp[MAX_PATH];
\r
5120 StrToUni(tmp, sizeof(tmp), a->DefaultOptions.Items[i].Name);
\r
5121 CbAddStr(hWnd, C_NAME, tmp, 0);
\r
5123 if (a->NewMode == false)
\r
5125 char tmp[MAX_SIZE];
\r
5127 SetTextA(hWnd, C_NAME, a->Name);
\r
5128 ToStr(tmp, a->Value);
\r
5130 SetTextA(hWnd, E_VALUE, tmp);
\r
5134 SetTextA(hWnd, C_NAME, "");
\r
5136 SmHubAdminOptionValueDlgUpdate(hWnd, a);
\r
5137 if (a->NewMode == false)
\r
5139 FocusEx(hWnd, E_VALUE);
\r
5140 Disable(hWnd, C_NAME);
\r
5144 FocusEx(hWnd, C_NAME);
\r
5147 SetTimer(hWnd, 1, 100, NULL);
\r
5151 SmHubAdminOptionValueDlgUpdate(hWnd, a);
\r
5160 GetTxtA(hWnd, C_NAME, a->Name, sizeof(a->Name));
\r
5163 GetTxtA(hWnd, E_VALUE, tmp, sizeof(tmp));
\r
5164 a->Value = ToInt(tmp);
\r
5168 if (StartWith(a->Name, "no") || StartWith(a->Name, "allow") || StartWith(a->Name, "deny")
\r
5169 || StartWith(a->Name, "filter") || StartWith(a->Name, "fix") || StartWith(a->Name, "force")
\r
5170 || StartWith(a->Name, "use") || StartWith(a->Name, "b_") || StartWith(a->Name, "is")
\r
5171 || StartWith(a->Name, "manage") || StartWith(a->Name, "yield")
\r
5172 || StartWith(a->Name, "permit") || StartWith(a->Name, "yes") || StartWith(a->Name, "ok")
\r
5173 || StartWith(a->Name, "do") || StartWith(a->Name, "only") || StartWith(a->Name, "disable"))
\r
5175 if (StrCmpi(tmp, "0") != 0 && StrCmpi(tmp, "1") != 0)
\r
5177 MsgBox(hWnd, MB_ICONEXCLAMATION, _UU("SM_TRUE_OR_FALSE"));
\r
5178 FocusEx(hWnd, E_VALUE);
\r
5183 EndDialog(hWnd, true);
\r
5191 SmHubAdminOptionValueDlgUpdate(hWnd, a);
\r
5196 EndDialog(hWnd, false);
\r
5203 // 管理オプション値用ダイアログ コントロール更新
\r
5204 void SmHubAdminOptionValueDlgUpdate(HWND hWnd, SM_EDIT_AO *a)
\r
5206 char tmp[MAX_SIZE];
\r
5208 if (hWnd == NULL || a == NULL)
\r
5213 GetTxtA(hWnd, C_NAME, tmp, sizeof(tmp));
\r
5215 SetEnable(hWnd, IDOK, IsEmpty(hWnd, C_NAME) == false && IsEmpty(hWnd, E_VALUE) == false &&
\r
5220 void SmHubAdminOptionDlgInit(HWND hWnd, SM_EDIT_AO *a)
\r
5224 if (hWnd == NULL || a == NULL)
\r
5229 SetIcon(hWnd, 0, ICO_USER_ADMIN);
\r
5231 if (a->e->p->ServerAdminMode)
\r
5233 a->CanChange = true;
\r
5237 if (a->ExtOption == false)
\r
5239 for (i = 0;i < a->CurrentOptions.NumItem;i++)
\r
5241 if (StrCmpi(a->CurrentOptions.Items[i].Name, "allow_hub_admin_change_option") == 0)
\r
5243 if (a->CurrentOptions.Items[i].Value != 0)
\r
5245 a->CanChange = true;
\r
5252 a->CanChange = true;
\r
5256 FormatText(hWnd, S_INFO, a->e->HubName);
\r
5258 DlgFont(hWnd, S_BOLD, 0, true);
\r
5260 LvInit(hWnd, L_LIST);
\r
5261 LvInsertColumn(hWnd, L_LIST, 0, _UU("SM_AO_COLUMN_1"), 260);
\r
5262 LvInsertColumn(hWnd, L_LIST, 1, _UU("SM_AO_COLUMN_2"), 100);
\r
5264 for (i = 0;i < a->CurrentOptions.NumItem;i++)
\r
5266 ADMIN_OPTION *e = &a->CurrentOptions.Items[i];
\r
5267 wchar_t tmp1[MAX_SIZE];
\r
5268 wchar_t tmp2[MAX_SIZE];
\r
5270 StrToUni(tmp1, sizeof(tmp1), e->Name);
\r
5271 UniToStru(tmp2, e->Value);
\r
5273 LvInsert(hWnd, L_LIST, ICO_LOG, NULL, 2, tmp1, tmp2);
\r
5279 SetIcon(hWnd, S_ICON, ICO_LINK2);
\r
5280 SetIcon(hWnd, 0, ICO_LINK2);
\r
5282 SetText(hWnd, 0, _UU("SM_HUBEXT_OPTION_TITLE"));
\r
5283 SetText(hWnd, S_STATIC1, _UU("SM_HUBEXT_OPTION_STATIC1"));
\r
5284 SetText(hWnd, S_STATIC2, _UU("SM_HUBEXT_OPTION_STATIC2"));
\r
5288 SmHubAdminOptionDlgUpdate(hWnd, a);
\r
5292 void SmHubAdminOptionDlgUpdate(HWND hWnd, SM_EDIT_AO *a)
\r
5297 if (hWnd == NULL || a == NULL)
\r
5302 helpstr = _UU("HUB_AO_CLICK");
\r
5304 SetEnable(hWnd, IDOK, a->CanChange);
\r
5305 SetEnable(hWnd, B_ADD, a->CanChange);
\r
5306 SetEnable(hWnd, B_EDIT, a->CanChange && (LvIsMasked(hWnd, L_LIST) && LvIsMultiMasked(hWnd, L_LIST) == false));
\r
5308 if (LvIsMasked(hWnd, L_LIST) && LvIsMultiMasked(hWnd, L_LIST) == false)
\r
5311 i = LvGetSelected(hWnd, L_LIST);
\r
5318 if (i != INFINITE)
\r
5320 char *name = LvGetStrA(hWnd, L_LIST, i, 0);
\r
5325 for (j = 0;j < a->DefaultOptions.NumItem;j++)
\r
5327 if (StrCmpi(a->DefaultOptions.Items[j].Name, name) == 0)
\r
5337 if (i != INFINITE)
\r
5339 char *name = LvGetStrA(hWnd, L_LIST, i, 0);
\r
5342 helpstr = GetHubAdminOptionHelpString(name);
\r
5347 SetEnable(hWnd, B_DELETE, b);
\r
5349 SetText(hWnd, E_HELP, helpstr);
\r
5353 void SmHubAdminOptionDlgOk(HWND hWnd, SM_EDIT_AO *a)
\r
5356 RPC_ADMIN_OPTION t;
\r
5358 if (hWnd == NULL || a == NULL)
\r
5363 num = LvNum(hWnd, L_LIST);
\r
5365 Zero(&t, sizeof(t));
\r
5367 StrCpy(t.HubName, sizeof(t.HubName), a->e->HubName);
\r
5369 t.Items = ZeroMalloc(sizeof(ADMIN_OPTION) * num);
\r
5371 for (i = 0;i < num;i++)
\r
5373 char *name = LvGetStrA(hWnd, L_LIST, i, 0);
\r
5374 char *s_value = LvGetStrA(hWnd, L_LIST, i, 1);
\r
5375 ADMIN_OPTION *a = &t.Items[i];
\r
5377 StrCpy(a->Name, sizeof(a->Name), name);
\r
5378 a->Value = ToInt(s_value);
\r
5384 if (a->ExtOption == false)
\r
5386 if (CALL(hWnd, ScSetHubAdminOptions(a->e->p->Rpc, &t)))
\r
5388 MsgBox(hWnd, MB_ICONINFORMATION, _UU("SM_AO_SET_OK"));
\r
5389 EndDialog(hWnd, true);
\r
5394 if (CALL(hWnd, ScSetHubExtOptions(a->e->p->Rpc, &t)))
\r
5396 MsgBox(hWnd, MB_ICONINFORMATION, _UU("SM_EXT_OPTION_SET_OK"));
\r
5397 EndDialog(hWnd, true);
\r
5401 FreeRpcAdminOption(&t);
\r
5404 // 仮想 HUB 管理オプションダイアログ
\r
5405 UINT SmHubAdminOptionDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
5407 SM_EDIT_AO *a = (SM_EDIT_AO *)param;
\r
5418 case WM_INITDIALOG:
\r
5419 SmHubAdminOptionDlgInit(hWnd, a);
\r
5426 a->NewMode = true;
\r
5427 StrCpy(a->Name, sizeof(a->Name), "");
\r
5429 if (Dialog(hWnd, D_SM_AO_VALUE, SmHubAdminOptionValueDlg,
\r
5432 wchar_t tmp1[MAX_SIZE];
\r
5433 wchar_t tmp2[MAX_SIZE];
\r
5434 StrToUni(tmp1, sizeof(tmp1), a->Name);
\r
5435 UniToStru(tmp2, a->Value);
\r
5437 LvInsert(hWnd, L_LIST, ICO_LOG, NULL, 2, tmp1, tmp2);
\r
5442 i = LvGetSelected(hWnd, L_LIST);
\r
5443 if (i != INFINITE && a->CanChange)
\r
5445 char *name, *value;
\r
5446 name = LvGetStrA(hWnd, L_LIST, i, 0);
\r
5447 value = LvGetStrA(hWnd, L_LIST, i, 1);
\r
5448 a->NewMode = false;
\r
5449 StrCpy(a->Name, sizeof(a->Name), name);
\r
5450 a->Value = ToInt(value);
\r
5452 if (Dialog(hWnd, D_SM_AO_VALUE, SmHubAdminOptionValueDlg,
\r
5455 char tmp[MAX_PATH];
\r
5456 ToStr(tmp, a->Value);
\r
5457 LvSetItemA(hWnd, L_LIST, i, 1, tmp);
\r
5466 i = LvGetSelected(hWnd, L_LIST);
\r
5467 if (i != INFINITE)
\r
5469 LvDeleteItem(hWnd, L_LIST, i);
\r
5478 SmHubAdminOptionDlgOk(hWnd, a);
\r
5484 n = (NMHDR *)lParam;
\r
5485 switch (n->idFrom)
\r
5490 case LVN_ITEMCHANGED:
\r
5491 SmHubAdminOptionDlgUpdate(hWnd, a);
\r
5495 Command(hWnd, B_EDIT);
\r
5503 EndDialog(hWnd, 0);
\r
5511 void SmHubExtOption(HWND hWnd, SM_EDIT_HUB *e)
\r
5515 if (hWnd == NULL || e == NULL)
\r
5520 Zero(&a, sizeof(a));
\r
5522 a.ExtOption = true;
\r
5524 StrCpy(a.CurrentOptions.HubName, sizeof(a.CurrentOptions.HubName), e->HubName);
\r
5526 // 現在のサーバー上のオプションを取得する
\r
5527 if (CALL(hWnd, ScGetHubExtOptions(e->p->Rpc, &a.CurrentOptions)) == false)
\r
5532 Dialog(hWnd, D_SM_ADMIN_OPTION, SmHubAdminOptionDlg, &a);
\r
5534 FreeRpcAdminOption(&a.CurrentOptions);
\r
5535 FreeRpcAdminOption(&a.DefaultOptions);
\r
5539 void SmHubAdminOption(HWND hWnd, SM_EDIT_HUB *e)
\r
5543 if (hWnd == NULL || e == NULL)
\r
5548 Zero(&a, sizeof(a));
\r
5551 StrCpy(a.CurrentOptions.HubName, sizeof(a.CurrentOptions.HubName), e->HubName);
\r
5553 // 現在のサーバー上のオプションを取得する
\r
5554 if (CALL(hWnd, ScGetHubAdminOptions(e->p->Rpc, &a.CurrentOptions)) == false)
\r
5559 ScGetDefaultHubAdminOptions(e->p->Rpc, &a.DefaultOptions);
\r
5561 Dialog(hWnd, D_SM_ADMIN_OPTION, SmHubAdminOptionDlg, &a);
\r
5563 FreeRpcAdminOption(&a.CurrentOptions);
\r
5564 FreeRpcAdminOption(&a.DefaultOptions);
\r
5568 void SmConfigDlgInit(HWND hWnd, SM_CONFIG *c)
\r
5573 if (hWnd == NULL || c == NULL)
\r
5578 Focus(hWnd, IDCANCEL);
\r
5580 SetIcon(hWnd, 0, ICO_MACHINE);
\r
5582 SetFont(hWnd, E_CONFIG, GetFont(_SS("DEFAULT_FONT_2"), 0, false, false,
\r
5585 FormatText(hWnd, IDC_INFO, c->s->ServerName);
\r
5587 // UTF-8 から Unicode に変換
\r
5588 tmp_size = CalcUtf8ToUni(c->Config.FileData, StrLen(c->Config.FileData)) + 1;
\r
5589 tmp = ZeroMalloc(tmp_size);
\r
5590 Utf8ToUni(tmp, tmp_size, c->Config.FileData, StrLen(c->Config.FileData));
\r
5592 SetText(hWnd, E_CONFIG, tmp);
\r
5598 UINT SmConfigDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
5600 SM_CONFIG *c = (SM_CONFIG *)param;
\r
5602 wchar_t *filename_unicode;
\r
5603 wchar_t tmp[MAX_SIZE];
\r
5612 case WM_INITDIALOG:
\r
5613 SmConfigDlgInit(hWnd, c);
\r
5620 StrToUni(tmp, sizeof(tmp), c->Config.FileName);
\r
5621 filename_unicode = SaveDlg(hWnd, _UU("DLG_CONFIG_FILES"), _UU("DLG_SAVE_CONFIG"), tmp, L".config");
\r
5622 if (filename_unicode != NULL)
\r
5624 BUF *b = NewBuf();
\r
5625 filename = CopyUniToStr(filename_unicode);
\r
5626 WriteBuf(b, c->Config.FileData, StrLen(c->Config.FileData));
\r
5627 if (DumpBuf(b, filename))
\r
5629 MsgBox(hWnd, MB_ICONINFORMATION, _UU("SM_CONFIG_SAVED"));
\r
5633 MsgBox(hWnd, MB_ICONSTOP, _UU("SM_CONFIG_SAVE_FAILED"));
\r
5637 Free(filename_unicode);
\r
5642 filename_unicode = OpenDlg(hWnd, _UU("DLG_CONFIG_FILES"), _UU("DLG_OPEN_CONFIG"));
\r
5643 if (filename_unicode != NULL)
\r
5646 filename = CopyUniToStr(filename_unicode);
\r
5647 b = ReadDump(filename);
\r
5652 if (MsgBox(hWnd, MB_ICONQUESTION | MB_YESNO, _UU("SM_CONFIG_CONFIRM")) == IDYES)
\r
5654 Zero(&t, sizeof(t));
\r
5655 t.FileData = ZeroMalloc(b->Size + 1);
\r
5656 Copy(t.FileData, b->Buf, b->Size);
\r
5658 if (CALL(hWnd, ScSetConfig(c->s->Rpc, &t)))
\r
5661 MsgBox(hWnd, MB_ICONINFORMATION, _UU("SM_CONFIG_WRITE_OK"));
\r
5665 FreeRpcConfig(&t);
\r
5667 FreeRpcConfig(&t);
\r
5673 MsgBox(hWnd, MB_ICONSTOP, _UU("SM_CONFIG_OPEN_FAILED"));
\r
5676 Free(filename_unicode);
\r
5687 EndDialog(hWnd, 0);
\r
5694 // config 編集ダイアログを表示する
\r
5695 void SmConfig(HWND hWnd, SM_SERVER *s)
\r
5699 if (hWnd == NULL || s == NULL)
\r
5704 Zero(&c, sizeof(c));
\r
5708 // 現在の config をサーバーから取得
\r
5709 if (CALL(hWnd, ScGetConfig(s->Rpc, &c.Config)) == false)
\r
5715 Dialog(hWnd, D_SM_CONFIG, SmConfigDlg, &c);
\r
5718 FreeRpcConfig(&c.Config);
\r
5722 void SmBridgeDlgInit(HWND hWnd, SM_SERVER *s)
\r
5726 RPC_SERVER_INFO si;
\r
5728 if (hWnd == NULL || s == NULL)
\r
5733 LvInit(hWnd, L_LIST);
\r
5734 LvInsertColumn(hWnd, L_LIST, 0, _UU("SM_BRIDGE_COLUMN_1"), 50);
\r
5735 LvInsertColumn(hWnd, L_LIST, 1, _UU("SM_BRIDGE_COLUMN_2"), 145);
\r
5736 LvInsertColumn(hWnd, L_LIST, 2, _UU("SM_BRIDGE_COLUMN_3"), 300);
\r
5737 LvInsertColumn(hWnd, L_LIST, 3, _UU("SM_BRIDGE_COLUMN_4"), 100);
\r
5739 SmBridgeDlgRefresh(hWnd, s);
\r
5741 SetShow(hWnd, B_VLAN, GetCapsBool(s->CapsList, "b_support_eth_vlan"));
\r
5743 SetIcon(hWnd, 0, ICO_BRIDGE);
\r
5746 Zero(&si, sizeof(si));
\r
5747 ScGetServerInfo(s->Rpc, &si);
\r
5748 if (GetCapsBool(s->CapsList, "b_tap_supported") == false)
\r
5751 Hide(hWnd, R_TAP);
\r
5752 Hide(hWnd, S_TAP_1);
\r
5753 Hide(hWnd, E_TAPNAME);
\r
5754 Hide(hWnd, S_TAP_2);
\r
5755 Hide(hWnd, R_BRIDGE);
\r
5756 Hide(hWnd, S_STATIC5);
\r
5758 Check(hWnd, R_BRIDGE, true);
\r
5759 FreeRpcServerInfo(&si);
\r
5762 Zero(&t, sizeof(t));
\r
5763 ScEnumEthernet(s->Rpc, &t);
\r
5765 CbReset(hWnd, E_NICNAME);
\r
5766 CbSetHeight(hWnd, E_NICNAME, 18);
\r
5768 for (i = 0;i < t.NumItem;i++)
\r
5770 RPC_ENUM_ETH_ITEM *e = &t.Items[i];
\r
5771 if(UniIsEmptyStr(e->NetworkConnectionName) == false)
\r
5773 wchar_t ncname[MAX_SIZE * 2];
\r
5774 UniFormat(ncname, sizeof(ncname), BRIDGE_NETWORK_CONNECTION_STR, e->NetworkConnectionName, e->DeviceName);
\r
5775 CbAddStr(hWnd, E_NICNAME, ncname, 0);
\r
5779 wchar_t *s = CopyStrToUni(e->DeviceName);
\r
5780 CbAddStr(hWnd, E_NICNAME, s, 0);
\r
5785 FreeRpcEnumEth(&t);
\r
5790 Zero(&t, sizeof(t));
\r
5792 ScEnumHub(s->Rpc, &t);
\r
5794 CbReset(hWnd, E_HUBNAME);
\r
5795 CbSetHeight(hWnd, E_HUBNAME, 18);
\r
5797 for (i = 0;i < t.NumHub;i++)
\r
5799 RPC_ENUM_HUB_ITEM *e = &t.Hubs[i];
\r
5800 wchar_t *s = CopyStrToUni(e->HubName);
\r
5802 if (e->HubType != HUB_TYPE_FARM_DYNAMIC)
\r
5804 CbAddStr(hWnd, E_HUBNAME, s, 0);
\r
5809 SetText(hWnd, E_HUBNAME, L"");
\r
5811 FreeRpcEnumHub(&t);
\r
5816 SetTextA(hWnd, E_HUBNAME, "BRIDGE");
\r
5819 Focus(hWnd, E_HUBNAME);
\r
5821 SmBridgeDlgUpdate(hWnd, s);
\r
5823 SetTimer(hWnd, 1, 1000, NULL);
\r
5826 // ブリッジダイアログコントロール更新
\r
5827 void SmBridgeDlgUpdate(HWND hWnd, SM_SERVER *s)
\r
5831 if (hWnd == NULL || s == NULL)
\r
5836 if (LvIsMasked(hWnd, L_LIST) && LvIsMultiMasked(hWnd, L_LIST) == false)
\r
5838 Enable(hWnd, B_DELETE);
\r
5842 Disable(hWnd, B_DELETE);
\r
5845 if (IsEmpty(hWnd, E_HUBNAME))
\r
5850 if (IsChecked(hWnd, R_TAP) == false)
\r
5853 Enable(hWnd, S_ETH_1);
\r
5854 Enable(hWnd, E_NICNAME);
\r
5855 Disable(hWnd, S_TAP_1);
\r
5856 Disable(hWnd, S_TAP_2);
\r
5857 Disable(hWnd, E_TAPNAME);
\r
5858 SetText(hWnd, S_INFO, _UU("SM_BRIDGE_INFO_1"));
\r
5859 SetIcon(hWnd, S_ICON, ICO_NIC_ONLINE);
\r
5860 if (IsEmpty(hWnd, E_NICNAME))
\r
5867 char tmp[MAX_SIZE];
\r
5869 Disable(hWnd, S_ETH_1);
\r
5870 Disable(hWnd, E_NICNAME);
\r
5871 Enable(hWnd, S_TAP_1);
\r
5872 Enable(hWnd, S_TAP_2);
\r
5873 Enable(hWnd, E_TAPNAME);
\r
5874 SetText(hWnd, S_INFO, _UU("SM_BRIDGE_INFO_2"));
\r
5875 SetIcon(hWnd, S_ICON, ICO_PROTOCOL);
\r
5876 GetTxtA(hWnd, E_TAPNAME, tmp, sizeof(tmp));
\r
5877 if (IsEmptyStr(tmp))
\r
5883 if (IsSafeStr(tmp) == false)
\r
5887 if (StrLen(tmp) >= 12)
\r
5894 SetEnable(hWnd, IDOK, ok);
\r
5898 void SmBridgeDlgRefresh(HWND hWnd, SM_SERVER *s)
\r
5901 RPC_ENUM_LOCALBRIDGE t;
\r
5904 if (hWnd == NULL || s == NULL)
\r
5909 lvb = LvInsertStart();
\r
5911 Zero(&t, sizeof(t));
\r
5913 ScEnumLocalBridge(s->Rpc, &t);
\r
5915 for (i = 0;i < t.NumItem;i++)
\r
5917 RPC_LOCALBRIDGE *e = &t.Items[i];
\r
5918 wchar_t name[MAX_SIZE];
\r
5919 wchar_t nic[MAX_SIZE];
\r
5920 wchar_t hub[MAX_SIZE];
\r
5921 wchar_t *status = _UU("SM_BRIDGE_OFFLINE");
\r
5923 UniToStru(name, i + 1);
\r
5924 StrToUni(nic, sizeof(nic), e->DeviceName);
\r
5925 StrToUni(hub, sizeof(hub), e->HubName);
\r
5929 status = e->Active ? _UU("SM_BRIDGE_ONLINE") : _UU("SM_BRIDGE_ERROR");
\r
5932 LvInsertAdd(lvb, e->TapMode == false ? (e->Active ? ICO_NIC_ONLINE : ICO_NIC_OFFLINE) : ICO_PROTOCOL,
\r
5933 NULL, 4, name, hub, nic, status);
\r
5936 FreeRpcEnumLocalBridge(&t);
\r
5938 LvInsertEnd(lvb, hWnd, L_LIST);
\r
5940 SmBridgeDlgUpdate(hWnd, s);
\r
5944 void SmBridgeDlgOnOk(HWND hWnd, SM_SERVER *s)
\r
5946 char nic[MAX_SIZE];
\r
5947 char hub[MAX_SIZE];
\r
5948 RPC_LOCALBRIDGE t;
\r
5949 bool tapmode = false;
\r
5951 if (hWnd == NULL || s == NULL)
\r
5956 GetTxtA(hWnd, E_HUBNAME, hub, sizeof(hub));
\r
5958 Zero(nic, sizeof(nic));
\r
5960 if (IsChecked(hWnd, R_TAP) == false)
\r
5962 wchar_t nctmp[MAX_SIZE * 2];
\r
5963 if(GetCapsBool(s->CapsList, "b_support_network_connection_name") && GetTxt(hWnd, E_NICNAME, nctmp, sizeof(nctmp)))
\r
5967 Zero(&et, sizeof(et));
\r
5968 ScEnumEthernet(s->Rpc, &et);
\r
5969 for(i = 0; i < et.NumItem; i++)
\r
5971 RPC_ENUM_ETH_ITEM *e = &et.Items[i];
\r
5972 if(UniIsEmptyStr(e->NetworkConnectionName) == false)
\r
5974 wchar_t ncname[MAX_SIZE * 2];
\r
5975 UniFormat(ncname, sizeof(ncname), BRIDGE_NETWORK_CONNECTION_STR, e->NetworkConnectionName, e->DeviceName);
\r
5976 if(UniStrCmp(ncname, nctmp) == 0)
\r
5978 StrCpy(nic, sizeof(nic), e->DeviceName);
\r
5983 FreeRpcEnumEth(&et);
\r
5985 if (IsEmptyStr(nic))
\r
5987 GetTxtA(hWnd, E_NICNAME, nic, sizeof(nic));
\r
5992 GetTxtA(hWnd, E_NICNAME, nic, sizeof(nic));
\r
5998 GetTxtA(hWnd, E_TAPNAME, nic, sizeof(nic));
\r
6004 Zero(&t, sizeof(t));
\r
6005 StrCpy(t.DeviceName, sizeof(t.DeviceName), nic);
\r
6006 StrCpy(t.HubName, sizeof(t.HubName), hub);
\r
6007 t.TapMode = tapmode;
\r
6009 if (InStrEx(t.DeviceName, "vpn", false) || InStrEx(t.DeviceName, "tun", false)
\r
6010 || InStrEx(t.DeviceName, "tap", false))
\r
6012 // VPN デバイスにローカルブリッジしようとしている
\r
6013 if (MsgBoxEx(hWnd, MB_ICONEXCLAMATION | MB_YESNO | MB_DEFBUTTON2,
\r
6014 _UU("SM_BRIDGE_VPN"),
\r
6015 t.DeviceName) == IDNO)
\r
6021 // Intel 製 LAN カードなどに関する警告
\r
6022 if (tapmode == false)
\r
6024 MsgBox(hWnd, MB_ICONINFORMATION, _UU("SM_BRIDGE_INTEL"));
\r
6027 if (CALL(hWnd, ScAddLocalBridge(s->Rpc, &t)) == false)
\r
6029 Focus(hWnd, E_HUBNAME);
\r
6033 SetText(hWnd, E_HUBNAME, L"");
\r
6034 Focus(hWnd, E_HUBNAME);
\r
6038 SetTextA(hWnd, E_TAPNAME, "");
\r
6041 SmBridgeDlgRefresh(hWnd, s);
\r
6043 MsgBox(hWnd, MB_ICONINFORMATION, _UU("SM_BRIDGE_OK"));
\r
6046 // ブリッジダイアログプロシージャ
\r
6047 UINT SmBridgeDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
6050 SM_SERVER *s = (SM_SERVER *)param;
\r
6060 case WM_INITDIALOG:
\r
6061 SmBridgeDlgInit(hWnd, s);
\r
6065 switch (LOWORD(wParam))
\r
6072 SmBridgeDlgUpdate(hWnd, s);
\r
6079 Focus(hWnd, E_NICNAME);
\r
6083 FocusEx(hWnd, E_TAPNAME);
\r
6088 SmBridgeDlgOnOk(hWnd, s);
\r
6103 i = LvGetSelected(hWnd, L_LIST);
\r
6104 if (i != INFINITE)
\r
6106 wchar_t *nic, *hub;
\r
6107 wchar_t tmp[MAX_SIZE];
\r
6108 RPC_LOCALBRIDGE t;
\r
6110 hub = LvGetStr(hWnd, L_LIST, i, 1);
\r
6111 nic = LvGetStr(hWnd, L_LIST, i, 2);
\r
6113 UniFormat(tmp, sizeof(tmp), _UU("SM_BRIDGE_DELETE"),
\r
6116 if (MsgBox(hWnd, MB_ICONEXCLAMATION | MB_YESNO | MB_DEFBUTTON2, tmp) == IDYES)
\r
6118 Zero(&t, sizeof(t));
\r
6119 UniToStr(t.DeviceName, sizeof(t.DeviceName), nic);
\r
6120 UniToStr(t.HubName, sizeof(t.HubName), hub);
\r
6122 if (CALL(hWnd, ScDeleteLocalBridge(s->Rpc, &t)))
\r
6124 MsgBox(hWnd, MB_ICONINFORMATION, _UU("SM_BRIDGE_DELETE_OK"));
\r
6125 SmBridgeDlgRefresh(hWnd, s);
\r
6140 KillTimer(hWnd, 1);
\r
6141 SmBridgeDlgRefresh(hWnd, s);
\r
6142 SetTimer(hWnd, 1, 1000, NULL);
\r
6148 n = (NMHDR *)lParam;
\r
6151 case LVN_ITEMCHANGED:
\r
6152 switch (n->idFrom)
\r
6155 SmBridgeDlgUpdate(hWnd, s);
\r
6163 EndDialog(hWnd, false);
\r
6170 // WinPcap のインストール作業
\r
6171 void SmInstallWinPcap(HWND hWnd, SM_SERVER *s)
\r
6173 wchar_t temp_name[MAX_SIZE];
\r
6177 // インストールを開始するかどうか質問する
\r
6178 if (MsgBox(hWnd, MB_ICONQUESTION | MB_YESNO, _UU("SM_BRIDGE_WPCAP_INSTALL")) == IDNO)
\r
6184 UniFormat(temp_name, sizeof(temp_name), L"%s\\winpcap_installer.exe", MsGetTempDirW());
\r
6187 buf = ReadDump(MsIsNt() ? "|winpcap_installer.exe" : "|winpcap_installer_win9x.exe");
\r
6191 MsgBox(hWnd, MB_ICONSTOP, _UU("SM_BRIDGE_RESOURCE"));
\r
6196 io = FileCreateW(temp_name);
\r
6203 FileWrite(io, buf->Buf, buf->Size);
\r
6209 if (RunW(temp_name, NULL, false, true) == false)
\r
6212 FileDeleteW(temp_name);
\r
6216 FileDeleteW(temp_name);
\r
6224 if (OS_IS_WINDOWS_NT(GetOsInfo()->OsType) == false)
\r
6227 MsgBox(hWnd, MB_ICONINFORMATION, _UU("SM_BRIDGE_WPCAP_REBOOT1"));
\r
6232 if (MsgBox(hWnd, MB_ICONQUESTION | MB_YESNO, _UU("SM_BRIDGE_WPCAP_REBOOT2")) == IDNO)
\r
6240 Zero(&t, sizeof(t));
\r
6241 ScRebootServer(s->Rpc, &t);
\r
6245 Zero(&t, sizeof(t));
\r
6246 CALL(hWnd, ScTest(s->Rpc, &t));
\r
6252 void SmBridgeDlg(HWND hWnd, SM_SERVER *s)
\r
6254 RPC_BRIDGE_SUPPORT t;
\r
6256 if (hWnd == NULL || s == NULL)
\r
6261 // まずサーバー側のブリッジ対応状況を調べる
\r
6262 Zero(&t, sizeof(t));
\r
6263 if (CALLEX(hWnd, ScGetBridgeSupport(s->Rpc, &t)) != ERR_NO_ERROR)
\r
6266 MsgBox(hWnd, MB_ICONEXCLAMATION, _UU("SM_BRIDGE_TOO_OLD_VER"));
\r
6270 if (t.IsBridgeSupportedOs == false)
\r
6272 // OS がブリッジに対応していない
\r
6273 MsgBox(hWnd, MB_ICONEXCLAMATION, _UU("SM_BRIDGE_UNSUPPORTED"));
\r
6277 if (t.IsWinPcapNeeded)
\r
6279 if (s->Rpc->Sock->RemoteIP.addr[0] != 127)
\r
6281 // WinPcap が必要だがリモート管理モードなので何も出来ない
\r
6282 MsgBox(hWnd, MB_ICONINFORMATION, _UU("SM_BRIDGE_WPCAP_REMOTE"));
\r
6287 // WinPcap が必要でローカル管理モードである
\r
6290 // Administrators である
\r
6291 SmInstallWinPcap(hWnd, s);
\r
6296 // Administrators でない
\r
6297 MsgBox(hWnd, MB_ICONINFORMATION, _UU("SM_BRIDGE_WPCAP_ROOT"));
\r
6303 Dialog(hWnd, D_SM_BRIDGE, SmBridgeDlgProc, s);
\r
6307 void SmSNATDlgUpdate(HWND hWnd, SM_HUB *s)
\r
6312 if (hWnd == NULL || s == NULL)
\r
6317 Zero(&t, sizeof(t));
\r
6318 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
6319 if (CALL(hWnd, ScGetHubStatus(s->Rpc, &t)) == false)
\r
6325 b = t.SecureNATEnabled;
\r
6329 Disable(hWnd, B_ENABLE);
\r
6330 Enable(hWnd, B_DISABLE);
\r
6331 Enable(hWnd, B_NAT);
\r
6332 Enable(hWnd, B_DHCP);
\r
6333 Enable(hWnd, B_STATUS);
\r
6337 Enable(hWnd, B_ENABLE);
\r
6338 Disable(hWnd, B_DISABLE);
\r
6339 Disable(hWnd, B_NAT);
\r
6340 Disable(hWnd, B_DHCP);
\r
6341 Disable(hWnd, B_STATUS);
\r
6346 UINT SmSNATDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
6348 SM_HUB *s = (SM_HUB *)param;
\r
6358 case WM_INITDIALOG:
\r
6359 SetIcon(hWnd, 0, ICO_ROUTER);
\r
6360 DlgFont(hWnd, S_WARNING, (_GETLANG() == 0 || _GETLANG() == 2) ? 13 : 10, true);
\r
6361 FormatText(hWnd, S_TITLE, s->HubName);
\r
6362 SmSNATDlgUpdate(hWnd, s);
\r
6364 SetTimer(hWnd, 1, 1000, NULL);
\r
6370 KillTimer(hWnd, 1);
\r
6372 SmSNATDlgUpdate(hWnd, s);
\r
6374 SetTimer(hWnd, 1, 1000, NULL);
\r
6386 if (MsgBox(hWnd, MB_ICONEXCLAMATION | MB_OKCANCEL | MB_DEFBUTTON2,
\r
6387 _UU("SM_SECURE_NAT_MSG")) == IDOK)
\r
6389 Zero(&t, sizeof(t));
\r
6390 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
6391 CALL(hWnd, ScEnableSecureNAT(s->Rpc, &t));
\r
6392 SmSNATDlgUpdate(hWnd, s);
\r
6397 Zero(&t, sizeof(t));
\r
6398 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
6399 CALL(hWnd, ScDisableSecureNAT(s->Rpc, &t));
\r
6400 SmSNATDlgUpdate(hWnd, s);
\r
6404 NmEditVhOption(hWnd, s);
\r
6416 SmStatusDlg(hWnd, s->p, s, false, true, _UU("SM_SNAT_STATUS"), ICO_ROUTER,
\r
6423 EndDialog(hWnd, 0);
\r
6431 void SmCreateCertDlgInit(HWND hWnd, SM_CERT *s)
\r
6435 char *reg_o, *reg_ou, *reg_c, *reg_st, *reg_l;
\r
6436 UINT bits[] = {1024, 1536, 2048, 3072, 4096 };
\r
6440 if (hWnd == NULL || s == NULL)
\r
6445 SetTextA(hWnd, E_CN, s->default_cn);
\r
6447 last_bit = MsRegReadInt(REG_CURRENT_USER, SM_CERT_REG_KEY, "Bits");
\r
6448 if (last_bit == 0)
\r
6453 CbReset(hWnd, C_BITS);
\r
6454 for (i = 0;i < sizeof(bits) / sizeof(bits[0]);i++)
\r
6456 char tmp[MAX_PATH];
\r
6459 ToStr(tmp, bits[i]);
\r
6461 index = CbAddStrA(hWnd, C_BITS, tmp, bits[i]);
\r
6464 CbSelect(hWnd, C_BITS, 1024);
\r
6465 CbSelect(hWnd, C_BITS, last_bit);
\r
6467 reg_o = MsRegReadStr(REG_CURRENT_USER, SM_CERT_REG_KEY, "O");
\r
6468 reg_ou = MsRegReadStr(REG_CURRENT_USER, SM_CERT_REG_KEY, "OU");
\r
6469 reg_c = MsRegReadStr(REG_CURRENT_USER, SM_CERT_REG_KEY, "C");
\r
6470 reg_st = MsRegReadStr(REG_CURRENT_USER, SM_CERT_REG_KEY, "ST");
\r
6471 reg_l = MsRegReadStr(REG_CURRENT_USER, SM_CERT_REG_KEY, "L");
\r
6472 SetTextA(hWnd, E_O, reg_o);
\r
6473 SetTextA(hWnd, E_OU, reg_ou);
\r
6474 SetTextA(hWnd, E_C, reg_c);
\r
6475 SetTextA(hWnd, E_ST, reg_st);
\r
6476 SetTextA(hWnd, E_L, reg_l);
\r
6483 LimitText(hWnd, E_C, 2);
\r
6485 cert_sign = MsRegReadInt(REG_CURRENT_USER, SM_CERT_REG_KEY, "Sign");
\r
6486 cert_days = MsRegReadInt(REG_CURRENT_USER, SM_CERT_REG_KEY, "Days");
\r
6488 Check(hWnd, R_ROOT_CERT, cert_sign ? false : true);
\r
6489 Check(hWnd, R_SIGNED_CERT, cert_sign ? true : false);
\r
6491 if (cert_days == 0)
\r
6496 SetIntEx(hWnd, E_EXPIRE, cert_days);
\r
6498 SmCreateCertDlgUpdate(hWnd, s);
\r
6500 FocusEx(hWnd, E_CN);
\r
6504 void SmCreateCertDlgUpdate(HWND hWnd, SM_CERT *s)
\r
6510 if (hWnd == NULL || s == NULL)
\r
6515 if (IsEmpty(hWnd, E_CN) && IsEmpty(hWnd, E_O) && IsEmpty(hWnd, E_OU) &&
\r
6516 IsEmpty(hWnd, E_ST) && IsEmpty(hWnd, E_L))
\r
6521 i = GetInt(hWnd, E_EXPIRE);
\r
6522 if (i == 0 || i >= (365 * 30))
\r
6527 b = IsChecked(hWnd, R_SIGNED_CERT);
\r
6529 SetEnable(hWnd, S_LOAD_1, b);
\r
6530 SetEnable(hWnd, B_LOAD, b);
\r
6531 SetEnable(hWnd, S_LOAD_2, b);
\r
6533 if (b && (s->root_k == NULL || s->root_x == NULL))
\r
6538 SetEnable(hWnd, IDOK, ok);
\r
6542 void SmCreateCertDlgOnOk(HWND hWnd, SM_CERT *s)
\r
6544 wchar_t cn[MAX_SIZE], o[MAX_SIZE], ou[MAX_SIZE], c[MAX_SIZE], st[MAX_SIZE], l[MAX_SIZE];
\r
6545 char *reg_o, *reg_ou, *reg_c, *reg_st, *reg_l;
\r
6548 char serial[MAX_SIZE * 2];
\r
6553 X_SERIAL *x_serial;
\r
6557 if (hWnd == NULL || s == NULL)
\r
6562 GetTxt(hWnd, E_CN, cn, sizeof(cn));
\r
6563 GetTxt(hWnd, E_O, o, sizeof(o));
\r
6564 GetTxt(hWnd, E_OU, ou, sizeof(ou));
\r
6565 GetTxt(hWnd, E_C, c, sizeof(c));
\r
6566 GetTxt(hWnd, E_ST, st, sizeof(st));
\r
6567 GetTxt(hWnd, E_L, l, sizeof(l));
\r
6568 GetTxtA(hWnd, E_SERIAL, serial, sizeof(serial));
\r
6570 bits = CbGetSelect(hWnd, C_BITS);
\r
6571 if (bits == INFINITE)
\r
6576 buf = StrToBin(serial);
\r
6582 if (buf->Size > 1)
\r
6584 x_serial = NewXSerial(buf->Buf, buf->Size);
\r
6593 n = NewName(UniStrLen(cn) ? cn : NULL,
\r
6594 UniStrLen(o) ? o : NULL,
\r
6595 UniStrLen(ou) ? ou : NULL,
\r
6596 UniStrLen(c) ? c : NULL,
\r
6597 UniStrLen(st) ? st : NULL,
\r
6598 UniStrLen(l) ? l : NULL);
\r
6600 days = GetInt(hWnd, E_EXPIRE);
\r
6602 sign = IsChecked(hWnd, R_SIGNED_CERT);
\r
6604 MsRegWriteInt(REG_CURRENT_USER, SM_CERT_REG_KEY, "Sign", sign);
\r
6605 MsRegWriteInt(REG_CURRENT_USER, SM_CERT_REG_KEY, "Days", days);
\r
6606 MsRegWriteInt(REG_CURRENT_USER, SM_CERT_REG_KEY, "Bits", bits);
\r
6608 RsaGen(&pri, &pub, bits);
\r
6610 if (sign == false)
\r
6612 x = NewRootX(pub, pri, n, days, x_serial);
\r
6616 x = NewX(pub, s->root_k, s->root_x, n, days, x_serial);
\r
6621 FreeXSerial(x_serial);
\r
6631 if (s->do_not_save == false)
\r
6633 if (SmSaveKeyPairDlg(hWnd, x, pri) == false)
\r
6646 reg_o = GetTextA(hWnd, E_O);
\r
6647 reg_ou = GetTextA(hWnd, E_OU);
\r
6648 reg_c = GetTextA(hWnd, E_C);
\r
6649 reg_st = GetTextA(hWnd, E_ST);
\r
6650 reg_l = GetTextA(hWnd, E_L);
\r
6651 MsRegWriteStr(REG_CURRENT_USER, SM_CERT_REG_KEY, "O", reg_o);
\r
6652 MsRegWriteStr(REG_CURRENT_USER, SM_CERT_REG_KEY, "OU", reg_ou);
\r
6653 MsRegWriteStr(REG_CURRENT_USER, SM_CERT_REG_KEY, "C", reg_c);
\r
6654 MsRegWriteStr(REG_CURRENT_USER, SM_CERT_REG_KEY, "ST", reg_st);
\r
6655 MsRegWriteStr(REG_CURRENT_USER, SM_CERT_REG_KEY, "L", reg_l);
\r
6662 EndDialog(hWnd, true);
\r
6666 UINT SmCreateCertDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
6668 SM_CERT *s = (SM_CERT *)param;
\r
6677 case WM_INITDIALOG:
\r
6679 SmCreateCertDlgInit(hWnd, s);
\r
6683 switch (LOWORD(wParam))
\r
6686 case R_SIGNED_CERT:
\r
6695 SmCreateCertDlgUpdate(hWnd, s);
\r
6703 SmCreateCertDlgOnOk(hWnd, s);
\r
6707 if (IsChecked(hWnd, R_ROOT_CERT))
\r
6709 FocusEx(hWnd, E_CN);
\r
6719 if (CmLoadXAndK(hWnd, &x, &k))
\r
6721 wchar_t tmp[MAX_SIZE];
\r
6727 SmGetCertInfoStr(tmp, sizeof(tmp), x);
\r
6728 SetText(hWnd, S_LOAD_2, tmp);
\r
6729 SmCreateCertDlgUpdate(hWnd, s);
\r
6742 EndDialog(hWnd, false);
\r
6750 bool SmCreateCert(HWND hWnd, X **x, K **k, bool do_not_save, char *default_cn)
\r
6754 Zero(&s, sizeof(s));
\r
6756 if (default_cn == NULL)
\r
6761 s.default_cn = default_cn;
\r
6763 s.do_not_save = do_not_save;
\r
6765 ret = Dialog(hWnd, D_SM_CREATE_CERT, SmCreateCertDlgProc, &s);
\r
6789 void SmIpTableDlgInit(HWND hWnd, SM_TABLE *s)
\r
6792 if (hWnd == NULL || s == NULL)
\r
6797 SetIcon(hWnd, 0, ICO_PROTOCOL);
\r
6798 FormatText(hWnd, S_TITLE, s->Hub->HubName);
\r
6800 if (s->SessionName != NULL)
\r
6802 wchar_t tmp[MAX_SIZE];
\r
6803 wchar_t tmp2[MAX_SIZE];
\r
6804 GetTxt(hWnd, S_TITLE, tmp, sizeof(tmp));
\r
6805 UniFormat(tmp2, sizeof(tmp2), _UU("SM_SESSION_FILTER"), s->SessionName);
\r
6806 UniStrCat(tmp, sizeof(tmp), tmp2);
\r
6807 SetText(hWnd, S_TITLE, tmp);
\r
6810 LvInit(hWnd, L_TABLE);
\r
6811 LvInsertColumn(hWnd, L_TABLE, 0, _UU("SM_IP_COLUMN_1"), 190);
\r
6812 LvInsertColumn(hWnd, L_TABLE, 1, _UU("SM_IP_COLUMN_2"), 140);
\r
6813 LvInsertColumn(hWnd, L_TABLE, 2, _UU("SM_IP_COLUMN_3"), 133);
\r
6814 LvInsertColumn(hWnd, L_TABLE, 3, _UU("SM_IP_COLUMN_4"), 133);
\r
6815 LvInsertColumn(hWnd, L_TABLE, 4, _UU("SM_IP_COLUMN_5"), 133);
\r
6816 LvSetStyle(hWnd, L_TABLE, LVS_EX_GRIDLINES);
\r
6818 SmIpTableDlgRefresh(hWnd, s);
\r
6822 void SmIpTableDlgUpdate(HWND hWnd, SM_TABLE *s)
\r
6826 if (hWnd == NULL || s == NULL)
\r
6831 if (LvIsSelected(hWnd, L_TABLE) == false || LvIsMultiMasked(hWnd, L_TABLE))
\r
6836 SetEnable(hWnd, B_DELETE, ok);
\r
6840 void SmIpTableDlgRefresh(HWND hWnd, SM_TABLE *s)
\r
6843 RPC_ENUM_IP_TABLE t;
\r
6844 UINT old_selected = 0;
\r
6846 if (hWnd == NULL || s == NULL)
\r
6851 Zero(&t, sizeof(t));
\r
6852 StrCpy(t.HubName, sizeof(t.HubName), s->Hub->HubName);
\r
6854 if (CALL(hWnd, ScEnumIpTable(s->Rpc, &t)) == false)
\r
6856 EndDialog(hWnd, false);
\r
6860 i = LvGetSelected(hWnd, L_TABLE);
\r
6861 if (i != INFINITE)
\r
6863 old_selected = (UINT)LvGetParam(hWnd, L_TABLE, i);
\r
6866 LvReset(hWnd, L_TABLE);
\r
6868 for (i = 0;i < t.NumIpTable;i++)
\r
6870 char str[MAX_SIZE];
\r
6871 wchar_t tmp1[MAX_SIZE];
\r
6872 wchar_t tmp2[MAX_SIZE];
\r
6873 wchar_t tmp3[MAX_SIZE];
\r
6874 wchar_t tmp4[MAX_SIZE];
\r
6875 wchar_t tmp5[MAX_SIZE];
\r
6876 RPC_ENUM_IP_TABLE_ITEM *e = &t.IpTables[i];
\r
6878 if (s->SessionName == NULL || StrCmpi(e->SessionName, s->SessionName) == 0)
\r
6880 StrToUni(tmp1, sizeof(tmp1), e->SessionName);
\r
6882 if (e->DhcpAllocated == false)
\r
6884 IPToStr(str, sizeof(str), &e->IpV6);
\r
6885 StrToUni(tmp2, sizeof(tmp2), str);
\r
6889 IPToStr(str, sizeof(str), &e->IpV6);
\r
6890 UniFormat(tmp2, sizeof(tmp2), _UU("SM_MAC_IP_DHCP"), str);
\r
6893 GetDateTimeStr64Uni(tmp3, sizeof(tmp3), SystemToLocal64(e->CreatedTime));
\r
6895 GetDateTimeStr64Uni(tmp4, sizeof(tmp4), SystemToLocal64(e->UpdatedTime));
\r
6897 if (StrLen(e->RemoteHostname) == 0)
\r
6899 UniStrCpy(tmp5, sizeof(tmp5), _UU("SM_MACIP_LOCAL"));
\r
6903 UniFormat(tmp5, sizeof(tmp5), _UU("SM_MACIP_SERVER"), e->RemoteHostname);
\r
6906 LvInsert(hWnd, L_TABLE, e->DhcpAllocated ? ICO_PROTOCOL_DHCP : ICO_PROTOCOL, (void *)e->Key, 5,
\r
6907 tmp1, tmp2, tmp3, tmp4, tmp5);
\r
6911 FreeRpcEnumIpTable(&t);
\r
6913 if (old_selected != 0)
\r
6915 LvSelect(hWnd, L_TABLE, LvSearchParam(hWnd, L_TABLE, (void *)old_selected));
\r
6918 SmIpTableDlgUpdate(hWnd, s);
\r
6921 // IP アドレステーブルダイアログプロシージャ
\r
6922 UINT SmIpTableDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
6924 SM_TABLE *s = (SM_TABLE *)param;
\r
6935 case WM_INITDIALOG:
\r
6937 SmIpTableDlgInit(hWnd, s);
\r
6945 i = LvGetSelected(hWnd, L_TABLE);
\r
6946 if (i != INFINITE)
\r
6948 RPC_DELETE_TABLE t;
\r
6949 UINT key = (UINT)LvGetParam(hWnd, L_TABLE, i);
\r
6951 Zero(&t, sizeof(t));
\r
6952 StrCpy(t.HubName, sizeof(t.HubName), s->Hub->HubName);
\r
6954 if (CALL(hWnd, ScDeleteIpTable(s->Rpc, &t)))
\r
6956 LvDeleteItem(hWnd, L_TABLE, i);
\r
6963 SmIpTableDlgRefresh(hWnd, s);
\r
6974 n = (NMHDR *)lParam;
\r
6975 switch (n->idFrom)
\r
6980 case LVN_ITEMCHANGED:
\r
6981 SmIpTableDlgUpdate(hWnd, s);
\r
6989 EndDialog(hWnd, false);
\r
6993 LvStandardHandler(hWnd, msg, wParam, lParam, L_TABLE);
\r
6998 // IP アドレステーブルダイアログ
\r
6999 void SmIpTableDlg(HWND hWnd, SM_HUB *s, char *session_name)
\r
7003 if (hWnd == NULL || s == NULL)
\r
7008 Zero(&t, sizeof(t));
\r
7011 t.SessionName = session_name;
\r
7013 Dialog(hWnd, D_SM_IP, SmIpTableDlgProc, &t);
\r
7018 void SmMacTableDlgInit(HWND hWnd, SM_TABLE *s)
\r
7022 if (hWnd == NULL || s == NULL)
\r
7027 SetIcon(hWnd, 0, ICO_NIC_ONLINE);
\r
7028 FormatText(hWnd, S_TITLE, s->Hub->HubName);
\r
7030 if (s->SessionName != NULL)
\r
7032 wchar_t tmp[MAX_SIZE];
\r
7033 wchar_t tmp2[MAX_SIZE];
\r
7034 GetTxt(hWnd, S_TITLE, tmp, sizeof(tmp));
\r
7035 UniFormat(tmp2, sizeof(tmp2), _UU("SM_SESSION_FILTER"), s->SessionName);
\r
7036 UniStrCat(tmp, sizeof(tmp), tmp2);
\r
7037 SetText(hWnd, S_TITLE, tmp);
\r
7040 LvInit(hWnd, L_TABLE);
\r
7041 LvInsertColumn(hWnd, L_TABLE, i++, _UU("SM_MAC_COLUMN_1"), 190);
\r
7042 if (GetCapsBool(s->Hub->p->CapsList, "b_support_vlan"))
\r
7044 LvInsertColumn(hWnd, L_TABLE, i++, _UU("SM_MAC_COLUMN_1A"), 65);
\r
7046 LvInsertColumn(hWnd, L_TABLE, i++, _UU("SM_MAC_COLUMN_2"), 140);
\r
7047 LvInsertColumn(hWnd, L_TABLE, i++, _UU("SM_MAC_COLUMN_3"), 133);
\r
7048 LvInsertColumn(hWnd, L_TABLE, i++, _UU("SM_MAC_COLUMN_4"), 133);
\r
7049 LvInsertColumn(hWnd, L_TABLE, i++, _UU("SM_MAC_COLUMN_5"), 133);
\r
7050 LvSetStyle(hWnd, L_TABLE, LVS_EX_GRIDLINES);
\r
7052 SmMacTableDlgRefresh(hWnd, s);
\r
7056 void SmMacTableDlgUpdate(HWND hWnd, SM_TABLE *s)
\r
7060 if (hWnd == NULL || s == NULL)
\r
7065 if (LvIsSelected(hWnd, L_TABLE) == false || LvIsMultiMasked(hWnd, L_TABLE))
\r
7070 SetEnable(hWnd, B_DELETE, ok);
\r
7074 void SmMacTableDlgRefresh(HWND hWnd, SM_TABLE *s)
\r
7077 RPC_ENUM_MAC_TABLE t;
\r
7078 UINT old_selected = 0;
\r
7080 if (hWnd == NULL || s == NULL)
\r
7085 Zero(&t, sizeof(t));
\r
7086 StrCpy(t.HubName, sizeof(t.HubName), s->Hub->HubName);
\r
7088 if (CALL(hWnd, ScEnumMacTable(s->Rpc, &t)) == false)
\r
7090 EndDialog(hWnd, false);
\r
7094 i = LvGetSelected(hWnd, L_TABLE);
\r
7095 if (i != INFINITE)
\r
7097 old_selected = (UINT)LvGetParam(hWnd, L_TABLE, i);
\r
7100 LvReset(hWnd, L_TABLE);
\r
7102 for (i = 0;i < t.NumMacTable;i++)
\r
7104 char str[MAX_SIZE];
\r
7105 wchar_t tmp1[MAX_SIZE];
\r
7106 wchar_t tmp2[MAX_SIZE];
\r
7107 wchar_t tmp3[MAX_SIZE];
\r
7108 wchar_t tmp4[MAX_SIZE];
\r
7109 wchar_t tmp5[MAX_SIZE];
\r
7110 wchar_t tmp6[MAX_SIZE];
\r
7111 RPC_ENUM_MAC_TABLE_ITEM *e = &t.MacTables[i];
\r
7113 if (s->SessionName == NULL || StrCmpi(e->SessionName, s->SessionName) == 0)
\r
7115 StrToUni(tmp1, sizeof(tmp1), e->SessionName);
\r
7117 MacToStr(str, sizeof(str), e->MacAddress);
\r
7118 StrToUni(tmp2, sizeof(tmp2), str);
\r
7120 GetDateTimeStr64Uni(tmp3, sizeof(tmp3), SystemToLocal64(e->CreatedTime));
\r
7122 GetDateTimeStr64Uni(tmp4, sizeof(tmp4), SystemToLocal64(e->UpdatedTime));
\r
7124 if (StrLen(e->RemoteHostname) == 0)
\r
7126 UniStrCpy(tmp5, sizeof(tmp5), _UU("SM_MACIP_LOCAL"));
\r
7130 UniFormat(tmp5, sizeof(tmp5), _UU("SM_MACIP_SERVER"), e->RemoteHostname);
\r
7133 UniToStru(tmp6, e->VlanId);
\r
7134 if (e->VlanId == 0)
\r
7136 UniStrCpy(tmp6, sizeof(tmp6), _UU("CM_ST_NONE"));
\r
7139 if (GetCapsBool(s->Hub->p->CapsList, "b_support_vlan"))
\r
7141 LvInsert(hWnd, L_TABLE, ICO_NIC_ONLINE, (void *)e->Key, 6,
\r
7142 tmp1, tmp6, tmp2, tmp3, tmp4, tmp5);
\r
7146 LvInsert(hWnd, L_TABLE, ICO_NIC_ONLINE, (void *)e->Key, 5,
\r
7147 tmp1, tmp2, tmp3, tmp4, tmp5);
\r
7152 FreeRpcEnumMacTable(&t);
\r
7154 if (old_selected != 0)
\r
7156 LvSelect(hWnd, L_TABLE, LvSearchParam(hWnd, L_TABLE, (void *)old_selected));
\r
7159 SmMacTableDlgUpdate(hWnd, s);
\r
7162 // MAC アドレステーブルダイアログプロシージャ
\r
7163 UINT SmMacTableDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
7165 SM_TABLE *s = (SM_TABLE *)param;
\r
7176 case WM_INITDIALOG:
\r
7178 SmMacTableDlgInit(hWnd, s);
\r
7186 i = LvGetSelected(hWnd, L_TABLE);
\r
7187 if (i != INFINITE)
\r
7189 RPC_DELETE_TABLE t;
\r
7190 UINT key = (UINT)LvGetParam(hWnd, L_TABLE, i);
\r
7192 Zero(&t, sizeof(t));
\r
7193 StrCpy(t.HubName, sizeof(t.HubName), s->Hub->HubName);
\r
7195 if (CALL(hWnd, ScDeleteMacTable(s->Rpc, &t)))
\r
7197 LvDeleteItem(hWnd, L_TABLE, i);
\r
7204 SmMacTableDlgRefresh(hWnd, s);
\r
7215 n = (NMHDR *)lParam;
\r
7216 switch (n->idFrom)
\r
7221 case LVN_ITEMCHANGED:
\r
7222 SmMacTableDlgUpdate(hWnd, s);
\r
7230 EndDialog(hWnd, false);
\r
7234 LvStandardHandler(hWnd, msg, wParam, lParam, L_TABLE);
\r
7239 // MAC アドレステーブルダイアログ
\r
7240 void SmMacTableDlg(HWND hWnd, SM_HUB *s, char *session_name)
\r
7244 if (hWnd == NULL || s == NULL)
\r
7249 Zero(&t, sizeof(t));
\r
7252 t.SessionName = session_name;
\r
7254 Dialog(hWnd, D_SM_MAC, SmMacTableDlgProc, &t);
\r
7258 void SmSessionDlgInit(HWND hWnd, SM_HUB *s)
\r
7261 if (hWnd == NULL || s == NULL)
\r
7266 SetIcon(hWnd, 0, ICO_VPN);
\r
7267 FormatText(hWnd, 0, s->HubName);
\r
7268 FormatText(hWnd, S_TITLE, s->HubName);
\r
7270 LvInit(hWnd, L_LIST);
\r
7271 LvInsertColumn(hWnd, L_LIST, 0, _UU("SM_SESS_COLUMN_1"), 176);
\r
7272 LvInsertColumn(hWnd, L_LIST, 1, _UU("SM_SESS_COLUMN_8"), 58);
\r
7273 LvInsertColumn(hWnd, L_LIST, 2, _UU("SM_SESS_COLUMN_2"), 62);
\r
7274 LvInsertColumn(hWnd, L_LIST, 3, _UU("SM_SESS_COLUMN_3"), 78);
\r
7275 LvInsertColumn(hWnd, L_LIST, 4, _UU("SM_SESS_COLUMN_4"), 122);
\r
7276 LvInsertColumn(hWnd, L_LIST, 5, _UU("SM_SESS_COLUMN_5"), 68);
\r
7277 LvInsertColumn(hWnd, L_LIST, 6, _UU("SM_SESS_COLUMN_6"), 100);
\r
7278 LvInsertColumn(hWnd, L_LIST, 7, _UU("SM_SESS_COLUMN_7"), 100);
\r
7279 LvSetStyle(hWnd, L_LIST, LVS_EX_GRIDLINES);
\r
7281 if (s->p->ServerType == SERVER_TYPE_FARM_CONTROLLER && GetCapsBool(s->p->CapsList, "b_support_cluster_admin") == false)
\r
7283 Show(hWnd, S_FARM_INFO_1);
\r
7284 Show(hWnd, S_FARM_INFO_2);
\r
7287 SmSessionDlgRefresh(hWnd, s);
\r
7291 void SmSessionDlgUpdate(HWND hWnd, SM_HUB *s)
\r
7296 if (hWnd == NULL || s == NULL)
\r
7301 if (LvIsSelected(hWnd, L_LIST) == false || LvIsMultiMasked(hWnd, L_LIST))
\r
7308 UINT i = LvGetSelected(hWnd, L_LIST);
\r
7309 if (i != INFINITE)
\r
7311 void *p = LvGetParam(hWnd, L_LIST, i);
\r
7312 if (((bool)p) != false)
\r
7314 if (GetCapsBool(s->p->CapsList, "b_support_cluster_admin") == false)
\r
7322 if (s->p->ServerInfo.ServerBuildInt < 2844)
\r
7324 // セッションのリモート管理非対応 Ver
\r
7328 SetEnable(hWnd, IDOK, ok2);
\r
7329 SetEnable(hWnd, B_DISCONNECT, ok2);
\r
7330 SetEnable(hWnd, B_SESSION_IP_TABLE, ok);
\r
7331 SetEnable(hWnd, B_SESSION_MAC_TABLE, ok);
\r
7335 void SmSessionDlgRefresh(HWND hWnd, SM_HUB *s)
\r
7339 wchar_t *old_select;
\r
7340 RPC_ENUM_SESSION t;
\r
7342 if (hWnd == NULL || s == NULL)
\r
7347 Zero(&t, sizeof(t));
\r
7348 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
7350 if (CALL(hWnd, ScEnumSession(s->Rpc, &t)) == false)
\r
7352 EndDialog(hWnd, false);
\r
7356 old_select = LvGetSelectedStr(hWnd, L_LIST, 0);
\r
7358 LvReset(hWnd, L_LIST);
\r
7360 b = LvInsertStart();
\r
7362 for (i = 0;i < t.NumSession;i++)
\r
7364 RPC_ENUM_SESSION_ITEM *e = &t.Sessions[i];
\r
7365 wchar_t tmp1[MAX_SIZE];
\r
7367 wchar_t tmp3[MAX_SIZE];
\r
7368 wchar_t tmp4[MAX_SIZE];
\r
7369 wchar_t tmp5[MAX_SIZE];
\r
7370 wchar_t tmp6[MAX_SIZE];
\r
7371 wchar_t tmp7[MAX_SIZE];
\r
7372 wchar_t tmp8[MAX_SIZE];
\r
7373 bool free_tmp2 = false;
\r
7376 StrToUni(tmp1, sizeof(tmp1), e->Name);
\r
7378 tmp2 = _UU("SM_SESS_NORMAL");
\r
7380 if (s->p->ServerType != SERVER_TYPE_STANDALONE)
\r
7382 if (e->RemoteSession)
\r
7384 tmp2 = ZeroMalloc(MAX_SIZE);
\r
7385 UniFormat(tmp2, MAX_SIZE, _UU("SM_SESS_REMOTE"), e->RemoteHostname);
\r
7391 if (StrLen(e->RemoteHostname) == 0)
\r
7393 tmp2 = _UU("SM_SESS_LOCAL");
\r
7397 tmp2 = ZeroMalloc(MAX_SIZE);
\r
7398 UniFormat(tmp2, MAX_SIZE, _UU("SM_SESS_LOCAL_2"), e->RemoteHostname);
\r
7408 free_tmp2 = false;
\r
7410 tmp2 = _UU("SM_SESS_LINK");
\r
7411 icon = ICO_CASCADE;
\r
7413 else if (e->SecureNATMode)
\r
7418 free_tmp2 = false;
\r
7420 tmp2 = _UU("SM_SESS_SNAT");*/
\r
7421 icon = ICO_ROUTER;
\r
7423 else if (e->BridgeMode)
\r
7425 icon = ICO_BRIDGE;
\r
7427 else if (e->Layer3Mode)
\r
7429 icon = ICO_SWITCH;
\r
7432 StrToUni(tmp3, sizeof(tmp3), e->Username);
\r
7434 StrToUni(tmp4, sizeof(tmp4), e->Hostname);
\r
7437 UniStrCpy(tmp4, sizeof(tmp4), _UU("SM_SESS_LINK_HOSTNAME"));
\r
7439 else if (e->SecureNATMode)
\r
7441 UniStrCpy(tmp4, sizeof(tmp4), _UU("SM_SESS_SNAT_HOSTNAME"));
\r
7443 else if (e->BridgeMode)
\r
7445 UniStrCpy(tmp4, sizeof(tmp4), _UU("SM_SESS_BRIDGE_HOSTNAME"));
\r
7447 else if (StartWith(e->Username, L3_USERNAME))
\r
7449 UniStrCpy(tmp4, sizeof(tmp4), _UU("SM_SESS_LAYER3_HOSTNAME"));
\r
7452 UniFormat(tmp5, sizeof(tmp5), L"%u / %u", e->CurrentNumTcp, e->MaxNumTcp);
\r
7455 UniStrCpy(tmp5, sizeof(tmp5), _UU("SM_SESS_LINK_TCP"));
\r
7457 else if (e->SecureNATMode)
\r
7459 UniStrCpy(tmp5, sizeof(tmp5), _UU("SM_SESS_SNAT_TCP"));
\r
7461 else if (e->BridgeMode)
\r
7463 UniStrCpy(tmp5, sizeof(tmp5), _UU("SM_SESS_BRIDGE_TCP"));
\r
7466 if (e->VLanId == 0)
\r
7468 UniStrCpy(tmp8, sizeof(tmp8), _UU("CM_ST_NO_VLAN"));
\r
7472 UniToStru(tmp8, e->VLanId);
\r
7475 UniToStr3(tmp6, sizeof(tmp6), e->PacketSize);
\r
7476 UniToStr3(tmp7, sizeof(tmp7), e->PacketNum);
\r
7478 if (icon == ICO_VPN)
\r
7480 if (e->Client_BridgeMode)
\r
7482 icon = ICO_SESSION_BRIDGE;
\r
7484 else if (e->Client_MonitorMode)
\r
7486 icon = ICO_SESSION_MONITOR;
\r
7490 LvInsertAdd(b, icon, (void *)(e->RemoteSession), 8, tmp1, tmp8, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7);
\r
7498 LvInsertEnd(b, hWnd, L_LIST);
\r
7500 if (old_select != NULL && UniStrLen(old_select) != 0)
\r
7502 UINT i = LvSearchStr(hWnd, L_LIST, 0, old_select);
\r
7503 if (i != INFINITE)
\r
7505 LvSelect(hWnd, L_LIST, i);
\r
7511 FreeRpcEnumSession(&t);
\r
7513 SmSessionDlgUpdate(hWnd, s);
\r
7517 void SmPrintNodeInfo(LVB *b, NODE_INFO *info)
\r
7519 wchar_t tmp[MAX_SIZE];
\r
7520 char str[MAX_SIZE];
\r
7522 if (b == NULL || info == NULL)
\r
7527 StrToUni(tmp, sizeof(tmp), info->ClientProductName);
\r
7528 LvInsertAdd(b, 0, NULL, 2, _UU("SM_NODE_CLIENT_NAME"), tmp);
\r
7530 UniFormat(tmp, sizeof(tmp), L"%u.%02u", Endian32(info->ClientProductVer) / 100, Endian32(info->ClientProductVer) % 100);
\r
7531 LvInsertAdd(b, 0, NULL, 2, _UU("SM_NODE_CLIENT_VER"), tmp);
\r
7533 UniFormat(tmp, sizeof(tmp), L"Build %u", Endian32(info->ClientProductBuild));
\r
7534 LvInsertAdd(b, 0, NULL, 2, _UU("SM_NODE_CLIENT_BUILD"), tmp);
\r
7536 StrToUni(tmp, sizeof(tmp), info->ClientOsName);
\r
7537 LvInsertAdd(b, 0, NULL, 2, _UU("SM_NODE_CLIENT_OS_NAME"), tmp);
\r
7539 StrToUni(tmp, sizeof(tmp), info->ClientOsVer);
\r
7540 LvInsertAdd(b, 0, NULL, 2, _UU("SM_NODE_CLIENT_OS_VER"), tmp);
\r
7542 StrToUni(tmp, sizeof(tmp), info->ClientOsProductId);
\r
7543 LvInsertAdd(b, 0, NULL, 2, _UU("SM_NODE_CLIENT_OS_PID"), tmp);
\r
7545 StrToUni(tmp, sizeof(tmp), info->ClientHostname);
\r
7546 LvInsertAdd(b, 0, NULL, 2, _UU("SM_NODE_CLIENT_HOST"), tmp);
\r
7548 IPToStr4or6(str, sizeof(str), info->ClientIpAddress, info->ClientIpAddress6);
\r
7549 StrToUni(tmp, sizeof(tmp), str);
\r
7550 LvInsertAdd(b, 0, NULL, 2, _UU("SM_NODE_CLIENT_IP"), tmp);
\r
7552 UniToStru(tmp, Endian32(info->ClientPort));
\r
7553 LvInsertAdd(b, 0, NULL, 2, _UU("SM_NODE_CLIENT_PORT"), tmp);
\r
7555 StrToUni(tmp, sizeof(tmp), info->ServerHostname);
\r
7556 LvInsertAdd(b, 0, NULL, 2, _UU("SM_NODE_SERVER_HOST"), tmp);
\r
7558 IPToStr4or6(str, sizeof(str), info->ServerIpAddress, info->ServerIpAddress6);
\r
7559 StrToUni(tmp, sizeof(tmp), str);
\r
7560 LvInsertAdd(b, 0, NULL, 2, _UU("SM_NODE_SERVER_IP"), tmp);
\r
7562 UniToStru(tmp, Endian32(info->ServerPort));
\r
7563 LvInsertAdd(b, 0, NULL, 2, _UU("SM_NODE_SERVER_PORT"), tmp);
\r
7565 if (StrLen(info->ProxyHostname) != 0)
\r
7567 StrToUni(tmp, sizeof(tmp), info->ProxyHostname);
\r
7568 LvInsertAdd(b, 0, NULL, 2, _UU("SM_NODE_PROXY_HOSTNAME"), tmp);
\r
7570 IPToStr4or6(str, sizeof(str), info->ProxyIpAddress, info->ProxyIpAddress6);
\r
7571 StrToUni(tmp, sizeof(tmp), str);
\r
7572 LvInsertAdd(b, 0, NULL, 2, _UU("SM_NODE_PROXY_IP"), tmp);
\r
7574 UniToStru(tmp, Endian32(info->ProxyPort));
\r
7575 LvInsertAdd(b, 0, NULL, 2, _UU("SM_NODE_PROXY_PORT"), tmp);
\r
7580 bool SmRefreshSessionStatus(HWND hWnd, SM_SERVER *s, void *param)
\r
7583 SM_SESSION_STATUS *status = (SM_SESSION_STATUS *)param;
\r
7584 RPC_SESSION_STATUS t;
\r
7585 wchar_t tmp[MAX_SIZE];
\r
7586 char str[MAX_SIZE];
\r
7588 if (hWnd == NULL || s == NULL || param == NULL)
\r
7593 Zero(&t, sizeof(t));
\r
7594 StrCpy(t.HubName, sizeof(t.HubName), status->Hub->HubName);
\r
7595 StrCpy(t.Name, sizeof(t.Name), status->SessionName);
\r
7597 if (CALL(hWnd, ScGetSessionStatus(s->Rpc, &t)) == false)
\r
7602 b = LvInsertStart();
\r
7604 if (t.ClientIp != 0)
\r
7606 IPToStr4or6(str, sizeof(str), t.ClientIp, t.ClientIp6);
\r
7607 StrToUni(tmp, sizeof(tmp), str);
\r
7608 LvInsertAdd(b, 0, NULL, 2, _UU("SM_CLIENT_IP"), tmp);
\r
7611 if (StrLen(t.ClientHostName) != 0)
\r
7613 StrToUni(tmp, sizeof(tmp), t.ClientHostName);
\r
7614 LvInsertAdd(b, 0, NULL, 2, _UU("SM_CLIENT_HOSTNAME"), tmp);
\r
7617 StrToUni(tmp, sizeof(tmp), t.Username);
\r
7618 LvInsertAdd(b, 0, NULL, 2, _UU("SM_SESS_STATUS_USERNAME"), tmp);
\r
7620 if (StrCmpi(t.Username, LINK_USER_NAME_PRINT) != 0 && StrCmpi(t.Username, SNAT_USER_NAME_PRINT) != 0 && StrCmpi(t.Username, BRIDGE_USER_NAME_PRINT) != 0)
\r
7622 StrToUni(tmp, sizeof(tmp), t.RealUsername);
\r
7623 LvInsertAdd(b, 0, NULL, 2, _UU("SM_SESS_STATUS_REALUSER"), tmp);
\r
7626 if (IsEmptyStr(t.GroupName) == false)
\r
7628 StrToUni(tmp, sizeof(tmp), t.GroupName);
\r
7629 LvInsertAdd(b, 0, NULL, 2, _UU("SM_SESS_STATUS_GROUPNAME"), tmp);
\r
7632 CmPrintStatusToListViewEx(b, &t.Status, true);
\r
7634 if (StrCmpi(t.Username, LINK_USER_NAME_PRINT) != 0 && StrCmpi(t.Username, SNAT_USER_NAME_PRINT) != 0 && StrCmpi(t.Username, BRIDGE_USER_NAME_PRINT) != 0 &&
\r
7635 StartWith(t.Username, L3_USERNAME) == false)
\r
7637 SmPrintNodeInfo(b, &t.NodeInfo);
\r
7640 LvInsertEnd(b, hWnd, L_STATUS);
\r
7642 FreeRpcSessionStatus(&t);
\r
7647 // セッション管理ダイアログプロシージャ
\r
7648 UINT SmSessionDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
7650 SM_HUB *s = (SM_HUB *)param;
\r
7652 wchar_t tmp2[MAX_SIZE];
\r
7653 char name[MAX_SIZE];
\r
7655 SM_SESSION_STATUS status;
\r
7662 tmp = LvGetSelectedStr(hWnd, L_LIST, 0);
\r
7663 UniToStr(name, sizeof(name), tmp);
\r
7667 case WM_INITDIALOG:
\r
7669 SmSessionDlgInit(hWnd, s);
\r
7676 if (IsEnable(hWnd, IDOK))
\r
7679 UniFormat(tmp2, sizeof(tmp2), _UU("SM_SESS_STATUS_CAPTION"), name);
\r
7680 Zero(&status, sizeof(status));
\r
7682 status.SessionName = name;
\r
7683 SmStatusDlg(hWnd, s->p, &status, true, true, tmp2, ICO_VPN,
\r
7684 NULL, SmRefreshSessionStatus);
\r
7688 case B_DISCONNECT:
\r
7690 if (MsgBoxEx(hWnd, MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2,
\r
7691 _UU("SM_SESS_DISCONNECT_MSG"), name) == IDYES)
\r
7693 RPC_DELETE_SESSION t;
\r
7694 Zero(&t, sizeof(t));
\r
7695 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
7696 StrCpy(t.Name, sizeof(t.Name), name);
\r
7698 if (CALL(hWnd, ScDeleteSession(s->Rpc, &t)))
\r
7700 SmSessionDlgRefresh(hWnd, s);
\r
7707 SmSessionDlgRefresh(hWnd, s);
\r
7710 case B_SESSION_IP_TABLE:
\r
7712 SmIpTableDlg(hWnd, s, name);
\r
7715 case B_SESSION_MAC_TABLE:
\r
7717 SmMacTableDlg(hWnd, s, name);
\r
7722 SmMacTableDlg(hWnd, s, NULL);
\r
7727 SmIpTableDlg(hWnd, s, NULL);
\r
7738 n = (NMHDR *)lParam;
\r
7741 case LVN_ITEMCHANGED:
\r
7742 switch (n->idFrom)
\r
7745 SmSessionDlgUpdate(hWnd, s);
\r
7753 EndDialog(hWnd, false);
\r
7759 LvStandardHandler(hWnd, msg, wParam, lParam, L_LIST);
\r
7765 void SmSessionDlg(HWND hWnd, SM_HUB *s)
\r
7768 if (hWnd == NULL || s == NULL)
\r
7773 Dialog(hWnd, D_SM_SESSION, SmSessionDlgProc, s);
\r
7777 void SmCaDlgRefresh(HWND hWnd, SM_HUB *s)
\r
7781 RPC_HUB_ENUM_CA t;
\r
7783 if (hWnd == NULL || s == NULL)
\r
7788 Zero(&t, sizeof(t));
\r
7789 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
7790 if (CALL(hWnd, ScEnumCa(s->Rpc, &t)) == false)
\r
7792 EndDialog(hWnd, false);
\r
7796 b = LvInsertStart();
\r
7798 for (i = 0;i < t.NumCa;i++)
\r
7800 wchar_t tmp[MAX_SIZE];
\r
7801 RPC_HUB_ENUM_CA_ITEM *e = &t.Ca[i];
\r
7803 GetDateStrEx64(tmp, sizeof(tmp), SystemToLocal64(e->Expires), NULL);
\r
7805 LvInsertAdd(b, ICO_SERVER_CERT, (void *)e->Key, 3,
\r
7806 e->SubjectName, e->IssuerName, tmp);
\r
7809 LvInsertEnd(b, hWnd, L_CERT);
\r
7811 FreeRpcHubEnumCa(&t);
\r
7813 SmCaDlgUpdate(hWnd, s);
\r
7817 void SmCaDlgInit(HWND hWnd, SM_HUB *s)
\r
7820 if (hWnd == NULL || s == NULL)
\r
7825 SetIcon(hWnd, 0, ICO_SERVER_CERT);
\r
7827 LvInit(hWnd, L_CERT);
\r
7828 LvInsertColumn(hWnd, L_CERT, 0, _UU("CM_CERT_COLUMN_1"), 190);
\r
7829 LvInsertColumn(hWnd, L_CERT, 1, _UU("CM_CERT_COLUMN_2"), 190);
\r
7830 LvInsertColumn(hWnd, L_CERT, 2, _UU("CM_CERT_COLUMN_3"), 160);
\r
7832 SmCaDlgRefresh(hWnd, s);
\r
7836 void SmCaDlgUpdate(HWND hWnd, SM_HUB *s)
\r
7839 if (hWnd == NULL || s == NULL)
\r
7844 SetEnable(hWnd, B_DELETE, LvIsSelected(hWnd, L_CERT));
\r
7845 SetEnable(hWnd, IDOK, LvIsSelected(hWnd, L_CERT));
\r
7849 void SmCaDlgOnOk(HWND hWnd, SM_HUB *s)
\r
7852 if (hWnd == NULL || s == NULL)
\r
7859 bool SmCaDlgAdd(HWND hWnd, SM_HUB *s)
\r
7864 if (hWnd == NULL || s == NULL)
\r
7869 if (CmLoadXFromFileOrSecureCard(hWnd, &x) == false)
\r
7874 Zero(&t, sizeof(t));
\r
7875 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
7878 if (CALL(hWnd, ScAddCa(s->Rpc, &t)) == false)
\r
7883 FreeRpcHubAddCa(&t);
\r
7888 // CA 一覧ダイアログプロシージャ
\r
7889 UINT SmCaDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
7892 SM_HUB *s = (SM_HUB *)param;
\r
7902 case WM_INITDIALOG:
\r
7904 SmCaDlgInit(hWnd, s);
\r
7912 if (SmCaDlgAdd(hWnd, s))
\r
7914 SmCaDlgRefresh(hWnd, s);
\r
7920 i = LvGetSelected(hWnd, L_CERT);
\r
7921 if (i != INFINITE)
\r
7923 key = (UINT)LvGetParam(hWnd, L_CERT, i);
\r
7926 if (MsgBox(hWnd, MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2,
\r
7927 _UU("CM_CERT_DELETE_MSG")) == IDYES)
\r
7929 RPC_HUB_DELETE_CA t;
\r
7930 Zero(&t, sizeof(t));
\r
7931 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
7934 if (CALL(hWnd, ScDeleteCa(s->Rpc, &t)))
\r
7936 SmCaDlgRefresh(hWnd, s);
\r
7945 i = LvGetSelected(hWnd, L_CERT);
\r
7946 if (i != INFINITE)
\r
7948 key = (UINT)LvGetParam(hWnd, L_CERT, i);
\r
7952 Zero(&t, sizeof(t));
\r
7953 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
7956 if (CALL(hWnd, ScGetCa(s->Rpc, &t)))
\r
7958 CertDlg(hWnd, t.Cert, NULL, true);
\r
7959 FreeRpcHubGetCa(&t);
\r
7973 n = (NMHDR *)lParam;
\r
7974 switch (n->idFrom)
\r
7979 case LVN_ITEMCHANGED:
\r
7980 SmCaDlgUpdate(hWnd, s);
\r
7988 EndDialog(hWnd, false);
\r
7992 LvStandardHandler(hWnd, msg, wParam, lParam, L_CERT);
\r
7998 void SmCaDlg(HWND hWnd, SM_HUB *s)
\r
8001 if (hWnd == NULL || s == NULL)
\r
8006 Dialog(hWnd, D_SM_CA, SmCaDlgProc, s);
\r
8010 void SmLogDlgInit(HWND hWnd, SM_HUB *s)
\r
8014 if (hWnd == NULL || s == NULL)
\r
8019 SetIcon(hWnd, 0, ICO_LOG2);
\r
8021 FormatText(hWnd, S_TITLE, s->HubName);
\r
8023 CbSetHeight(hWnd, C_SEC_SWITCH, 18);
\r
8024 CbSetHeight(hWnd, C_PACKET_SWITCH, 18);
\r
8027 CbAddStr(hWnd, C_SEC_SWITCH, _UU("SM_LOG_SWITCH_0"), 0);
\r
8028 CbAddStr(hWnd, C_SEC_SWITCH, _UU("SM_LOG_SWITCH_1"), 1);
\r
8029 CbAddStr(hWnd, C_SEC_SWITCH, _UU("SM_LOG_SWITCH_2"), 2);
\r
8030 CbAddStr(hWnd, C_SEC_SWITCH, _UU("SM_LOG_SWITCH_3"), 3);
\r
8031 CbAddStr(hWnd, C_SEC_SWITCH, _UU("SM_LOG_SWITCH_4"), 4);
\r
8032 CbAddStr(hWnd, C_SEC_SWITCH, _UU("SM_LOG_SWITCH_5"), 5);
\r
8033 CbAddStr(hWnd, C_PACKET_SWITCH, _UU("SM_LOG_SWITCH_0"), 0);
\r
8034 CbAddStr(hWnd, C_PACKET_SWITCH, _UU("SM_LOG_SWITCH_1"), 1);
\r
8035 CbAddStr(hWnd, C_PACKET_SWITCH, _UU("SM_LOG_SWITCH_2"), 2);
\r
8036 CbAddStr(hWnd, C_PACKET_SWITCH, _UU("SM_LOG_SWITCH_3"), 3);
\r
8037 CbAddStr(hWnd, C_PACKET_SWITCH, _UU("SM_LOG_SWITCH_4"), 4);
\r
8038 CbAddStr(hWnd, C_PACKET_SWITCH, _UU("SM_LOG_SWITCH_5"), 5);
\r
8041 Zero(&t, sizeof(t));
\r
8042 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
8043 if (CALL(hWnd, ScGetHubLog(s->Rpc, &t)) == false)
\r
8045 EndDialog(hWnd, false);
\r
8049 Check(hWnd, B_SEC, t.LogSetting.SaveSecurityLog);
\r
8050 CbSelect(hWnd, C_SEC_SWITCH, t.LogSetting.SecurityLogSwitchType);
\r
8052 Check(hWnd, B_PACKET, t.LogSetting.SavePacketLog);
\r
8053 CbSelect(hWnd, C_PACKET_SWITCH, t.LogSetting.PacketLogSwitchType);
\r
8055 Check(hWnd, B_PACKET_0_0, t.LogSetting.PacketLogConfig[0] == 0);
\r
8056 Check(hWnd, B_PACKET_0_1, t.LogSetting.PacketLogConfig[0] == 1);
\r
8057 Check(hWnd, B_PACKET_0_2, t.LogSetting.PacketLogConfig[0] == 2);
\r
8059 Check(hWnd, B_PACKET_1_0, t.LogSetting.PacketLogConfig[1] == 0);
\r
8060 Check(hWnd, B_PACKET_1_1, t.LogSetting.PacketLogConfig[1] == 1);
\r
8061 Check(hWnd, B_PACKET_1_2, t.LogSetting.PacketLogConfig[1] == 2);
\r
8063 Check(hWnd, B_PACKET_2_0, t.LogSetting.PacketLogConfig[2] == 0);
\r
8064 Check(hWnd, B_PACKET_2_1, t.LogSetting.PacketLogConfig[2] == 1);
\r
8065 Check(hWnd, B_PACKET_2_2, t.LogSetting.PacketLogConfig[2] == 2);
\r
8067 Check(hWnd, B_PACKET_3_0, t.LogSetting.PacketLogConfig[3] == 0);
\r
8068 Check(hWnd, B_PACKET_3_1, t.LogSetting.PacketLogConfig[3] == 1);
\r
8069 Check(hWnd, B_PACKET_3_2, t.LogSetting.PacketLogConfig[3] == 2);
\r
8071 Check(hWnd, B_PACKET_4_0, t.LogSetting.PacketLogConfig[4] == 0);
\r
8072 Check(hWnd, B_PACKET_4_1, t.LogSetting.PacketLogConfig[4] == 1);
\r
8073 Check(hWnd, B_PACKET_4_2, t.LogSetting.PacketLogConfig[4] == 2);
\r
8075 Check(hWnd, B_PACKET_5_0, t.LogSetting.PacketLogConfig[5] == 0);
\r
8076 Check(hWnd, B_PACKET_5_1, t.LogSetting.PacketLogConfig[5] == 1);
\r
8077 Check(hWnd, B_PACKET_5_2, t.LogSetting.PacketLogConfig[5] == 2);
\r
8079 Check(hWnd, B_PACKET_6_0, t.LogSetting.PacketLogConfig[6] == 0);
\r
8080 Check(hWnd, B_PACKET_6_1, t.LogSetting.PacketLogConfig[6] == 1);
\r
8081 Check(hWnd, B_PACKET_6_2, t.LogSetting.PacketLogConfig[6] == 2);
\r
8083 Check(hWnd, B_PACKET_7_0, t.LogSetting.PacketLogConfig[7] == 0);
\r
8084 Check(hWnd, B_PACKET_7_1, t.LogSetting.PacketLogConfig[7] == 1);
\r
8085 Check(hWnd, B_PACKET_7_2, t.LogSetting.PacketLogConfig[7] == 2);
\r
8087 SmLogDlgUpdate(hWnd, s);
\r
8091 void SmLogDlgUpdate(HWND hWnd, SM_HUB *s)
\r
8095 if (hWnd == NULL || s == NULL)
\r
8100 b = IsChecked(hWnd, B_SEC);
\r
8101 SetEnable(hWnd, S_SEC, b);
\r
8102 SetEnable(hWnd, C_SEC_SWITCH, b);
\r
8104 b = IsChecked(hWnd, B_PACKET);
\r
8105 SetEnable(hWnd, S_PACKET, b);
\r
8106 SetEnable(hWnd, C_PACKET_SWITCH, b);
\r
8107 SetEnable(hWnd, S_PACKET_0, b);
\r
8108 SetEnable(hWnd, S_PACKET_1, b);
\r
8109 SetEnable(hWnd, S_PACKET_2, b);
\r
8110 SetEnable(hWnd, S_PACKET_3, b);
\r
8111 SetEnable(hWnd, S_PACKET_4, b);
\r
8112 SetEnable(hWnd, S_PACKET_5, b);
\r
8113 SetEnable(hWnd, S_PACKET_6, b);
\r
8114 SetEnable(hWnd, S_PACKET_7, b);
\r
8115 SetEnable(hWnd, B_PACKET_0_0, b); SetEnable(hWnd, B_PACKET_0_1, b); SetEnable(hWnd, B_PACKET_0_2, b);
\r
8116 SetEnable(hWnd, B_PACKET_1_0, b); SetEnable(hWnd, B_PACKET_1_1, b); SetEnable(hWnd, B_PACKET_1_2, b);
\r
8117 SetEnable(hWnd, B_PACKET_2_0, b); SetEnable(hWnd, B_PACKET_2_1, b); SetEnable(hWnd, B_PACKET_2_2, b);
\r
8118 SetEnable(hWnd, B_PACKET_3_0, b); SetEnable(hWnd, B_PACKET_3_1, b); SetEnable(hWnd, B_PACKET_3_2, b);
\r
8119 SetEnable(hWnd, B_PACKET_4_0, b); SetEnable(hWnd, B_PACKET_4_1, b); SetEnable(hWnd, B_PACKET_4_2, b);
\r
8120 SetEnable(hWnd, B_PACKET_5_0, b); SetEnable(hWnd, B_PACKET_5_1, b); SetEnable(hWnd, B_PACKET_5_2, b);
\r
8121 SetEnable(hWnd, B_PACKET_6_0, b); SetEnable(hWnd, B_PACKET_6_1, b); SetEnable(hWnd, B_PACKET_6_2, b);
\r
8122 SetEnable(hWnd, B_PACKET_7_0, b); SetEnable(hWnd, B_PACKET_7_1, b); SetEnable(hWnd, B_PACKET_7_2, b);
\r
8126 void SmLogDlgOnOk(HWND hWnd, SM_HUB *s)
\r
8131 if (hWnd == NULL || s == NULL)
\r
8136 Zero(&g, sizeof(g));
\r
8137 g.SaveSecurityLog = IsChecked(hWnd, B_SEC);
\r
8138 g.SavePacketLog = IsChecked(hWnd, B_PACKET);
\r
8139 g.SecurityLogSwitchType = CbGetSelect(hWnd, C_SEC_SWITCH);
\r
8140 g.PacketLogSwitchType = CbGetSelect(hWnd, C_PACKET_SWITCH);
\r
8142 g.PacketLogConfig[0] = IsChecked(hWnd, B_PACKET_0_0) ? 0 : IsChecked(hWnd, B_PACKET_0_1) ? 1 : 2;
\r
8143 g.PacketLogConfig[1] = IsChecked(hWnd, B_PACKET_1_0) ? 0 : IsChecked(hWnd, B_PACKET_1_1) ? 1 : 2;
\r
8144 g.PacketLogConfig[2] = IsChecked(hWnd, B_PACKET_2_0) ? 0 : IsChecked(hWnd, B_PACKET_2_1) ? 1 : 2;
\r
8145 g.PacketLogConfig[3] = IsChecked(hWnd, B_PACKET_3_0) ? 0 : IsChecked(hWnd, B_PACKET_3_1) ? 1 : 2;
\r
8146 g.PacketLogConfig[4] = IsChecked(hWnd, B_PACKET_4_0) ? 0 : IsChecked(hWnd, B_PACKET_4_1) ? 1 : 2;
\r
8147 g.PacketLogConfig[5] = IsChecked(hWnd, B_PACKET_5_0) ? 0 : IsChecked(hWnd, B_PACKET_5_1) ? 1 : 2;
\r
8148 g.PacketLogConfig[6] = IsChecked(hWnd, B_PACKET_6_0) ? 0 : IsChecked(hWnd, B_PACKET_6_1) ? 1 : 2;
\r
8149 g.PacketLogConfig[7] = IsChecked(hWnd, B_PACKET_7_0) ? 0 : IsChecked(hWnd, B_PACKET_7_1) ? 1 : 2;
\r
8151 Zero(&t, sizeof(t));
\r
8152 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
8153 Copy(&t.LogSetting, &g, sizeof(HUB_LOG));
\r
8155 if (CALL(hWnd, ScSetHubLog(s->Rpc, &t)) == false)
\r
8160 EndDialog(hWnd, true);
\r
8164 UINT SmLogDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
8166 SM_HUB *s = (SM_HUB *)param;
\r
8175 case WM_INITDIALOG:
\r
8177 SmLogDlgInit(hWnd, s);
\r
8181 switch (LOWORD(wParam))
\r
8185 SmLogDlgUpdate(hWnd, s);
\r
8193 SmLogDlgOnOk(hWnd, s);
\r
8204 EndDialog(hWnd, false);
\r
8211 // カスケード接続のステータスの表示
\r
8212 bool SmRefreshLinkStatus(HWND hWnd, SM_SERVER *s, void *param)
\r
8214 SM_LINK *k = (SM_LINK *)param;
\r
8215 RPC_LINK_STATUS t;
\r
8218 if (hWnd == NULL || s == NULL || param == NULL)
\r
8223 Zero(&t, sizeof(t));
\r
8224 StrCpy(t.HubName, sizeof(t.HubName), k->Hub->HubName);
\r
8225 UniStrCpy(t.AccountName, sizeof(t.AccountName), k->AccountName);
\r
8227 if (CALL(hWnd, ScGetLinkStatus(s->Rpc, &t)) == false)
\r
8232 b = LvInsertStart();
\r
8234 CmPrintStatusToListView(b, &t.Status);
\r
8236 LvInsertEnd(b, hWnd, L_STATUS);
\r
8238 FreeRpcLinkStatus(&t);
\r
8244 bool SmLinkEdit(HWND hWnd, SM_HUB *s, wchar_t *name)
\r
8247 RPC_CREATE_LINK t;
\r
8250 if (hWnd == NULL || s == NULL || name == NULL)
\r
8255 Zero(&a, sizeof(a));
\r
8256 Zero(&t, sizeof(t));
\r
8258 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
8259 t.ClientOption = ZeroMalloc(sizeof(CLIENT_OPTION));
\r
8260 UniStrCpy(t.ClientOption->AccountName, sizeof(t.ClientOption->AccountName), name);
\r
8262 if (CALL(hWnd, ScGetLink(s->Rpc, &t)) == false)
\r
8268 a.EditMode = true;
\r
8269 a.LinkMode = true;
\r
8270 a.ClientOption = ZeroMalloc(sizeof(CLIENT_OPTION));
\r
8271 a.OnlineFlag = t.Online;
\r
8272 Copy(a.ClientOption, t.ClientOption, sizeof(CLIENT_OPTION));
\r
8273 a.ClientAuth = CopyClientAuth(t.ClientAuth);
\r
8274 Copy(&a.Policy, &t.Policy, sizeof(POLICY));
\r
8275 a.CheckServerCert = t.CheckServerCert;
\r
8276 a.ServerCert = CloneX(t.ServerCert);
\r
8277 a.HideTrustCert = GetCapsBool(s->p->CapsList, "b_support_config_hub");
\r
8278 FreeRpcCreateLink(&t);
\r
8280 a.PolicyVer = s->p->PolicyVer;
\r
8282 if (GetCapsBool(s->p->CapsList, "b_support_cascade_client_cert") == false)
\r
8284 a.HideClientCertAuth = true;
\r
8287 a.HideSecureAuth = true;
\r
8289 ret = CmEditAccountDlg(hWnd, &a);
\r
8291 FreeX(a.ServerCert);
\r
8292 Free(a.ClientOption);
\r
8293 CiFreeClientAuth(a.ClientAuth);
\r
8299 bool SmLinkCreate(HWND hWnd, SM_HUB *s)
\r
8301 return SmLinkCreateEx(hWnd, s, false);
\r
8303 bool SmLinkCreateEx(HWND hWnd, SM_HUB *s, bool connectNow)
\r
8306 bool ret = false;;
\r
8308 if (hWnd == NULL || s == NULL)
\r
8313 Zero(&a, sizeof(a));
\r
8316 a.EditMode = false;
\r
8317 a.LinkMode = true;
\r
8318 a.ClientOption = ZeroMalloc(sizeof(CLIENT_OPTION));
\r
8319 a.OnlineFlag = false;
\r
8320 a.ClientAuth = ZeroMalloc(sizeof(CLIENT_AUTH));
\r
8321 a.ClientAuth->AuthType = CLIENT_AUTHTYPE_PASSWORD;
\r
8322 Copy(&a.Policy, GetDefaultPolicy(), sizeof(POLICY));
\r
8323 a.ClientOption->Port = 443; // デフォルトポート番号
\r
8324 a.ClientOption->NumRetry = INFINITE;
\r
8325 a.ClientOption->RetryInterval = 15;
\r
8326 a.ClientOption->MaxConnection = 8;
\r
8327 a.ClientOption->UseEncrypt = true;
\r
8328 a.ClientOption->HalfConnection = false;
\r
8329 a.ClientOption->AdditionalConnectionInterval = 1;
\r
8330 a.ClientOption->RequireBridgeRoutingMode = true;
\r
8331 a.Link_ConnectNow = connectNow;
\r
8333 a.PolicyVer = s->p->PolicyVer;
\r
8335 if (GetCapsBool(s->p->CapsList, "b_support_cascade_client_cert") == false)
\r
8337 a.HideClientCertAuth = true;
\r
8340 a.HideSecureAuth = true;
\r
8342 ret = CmEditAccountDlg(hWnd, &a);
\r
8344 FreeX(a.ServerCert);
\r
8345 Free(a.ClientOption);
\r
8346 CiFreeClientAuth(a.ClientAuth);
\r
8352 void SmLinkDlgInit(HWND hWnd, SM_HUB *s)
\r
8355 if (hWnd == NULL || s == NULL)
\r
8360 SetIcon(hWnd, 0, ICO_LINK);
\r
8362 FormatText(hWnd, 0, s->HubName);
\r
8364 LvInit(hWnd, L_LINK);
\r
8366 LvInsertColumn(hWnd, L_LINK, 0, _UU("SM_LINK_COLUMN_1"), 120);
\r
8367 LvInsertColumn(hWnd, L_LINK, 1, _UU("SM_LINK_COLUMN_2"), 150);
\r
8368 LvInsertColumn(hWnd, L_LINK, 2, _UU("SM_LINK_COLUMN_3"), 180);
\r
8369 LvInsertColumn(hWnd, L_LINK, 3, _UU("SM_LINK_COLUMN_4"), 130);
\r
8370 LvInsertColumn(hWnd, L_LINK, 4, _UU("SM_LINK_COLUMN_5"), 130);
\r
8372 LvSetStyle(hWnd, L_LINK, LVS_EX_GRIDLINES);
\r
8374 SmLinkDlgRefresh(hWnd, s);
\r
8378 void SmLinkDlgUpdate(HWND hWnd, SM_HUB *s)
\r
8381 bool online = false;
\r
8383 if (hWnd == NULL || s == NULL)
\r
8388 if (LvIsSelected(hWnd, L_LINK) == false || LvIsMultiMasked(hWnd, L_LINK))
\r
8394 online = (bool)LvGetParam(hWnd, L_LINK, LvGetSelected(hWnd, L_LINK));
\r
8397 SetEnable(hWnd, B_EDIT, ok);
\r
8398 SetEnable(hWnd, B_ONLINE, ok && (online == false));
\r
8399 SetEnable(hWnd, B_OFFLINE, ok && online);
\r
8400 SetEnable(hWnd, IDOK, ok && online);
\r
8401 SetEnable(hWnd, B_DELETE, ok);
\r
8402 SetEnable(hWnd, B_RENAME, ok);
\r
8406 void SmLinkDlgRefresh(HWND hWnd, SM_HUB *s)
\r
8412 if (hWnd == NULL || s == NULL)
\r
8417 Zero(&t, sizeof(t));
\r
8418 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
8419 if (CALL(hWnd, ScEnumLink(s->Rpc, &t)) == false)
\r
8421 EndDialog(hWnd, false);
\r
8425 b = LvInsertStart();
\r
8427 for (i = 0;i < t.NumLink;i++)
\r
8429 RPC_ENUM_LINK_ITEM *e = &t.Links[i];
\r
8430 wchar_t tmp1[MAX_SIZE];
\r
8431 wchar_t tmp2[MAX_SIZE];
\r
8432 wchar_t tmp3[MAX_SIZE];
\r
8433 wchar_t tmp4[MAX_SIZE];
\r
8434 UINT icon = ICO_CASCADE;
\r
8436 GetDateTimeStrEx64(tmp1, sizeof(tmp1), SystemToLocal64(e->ConnectedTime), NULL);
\r
8437 StrToUni(tmp2, sizeof(tmp2), e->Hostname);
\r
8438 StrToUni(tmp3, sizeof(tmp3), e->HubName);
\r
8440 if (e->Online == false)
\r
8442 UniStrCpy(tmp4, sizeof(tmp4), _UU("SM_LINK_STATUS_OFFLINE"));
\r
8448 UniStrCpy(tmp4, sizeof(tmp4), _UU("SM_LINK_STATUS_ONLINE"));
\r
8452 if (e->LastError != 0)
\r
8454 UniFormat(tmp4, sizeof(tmp4), _UU("SM_LINK_STATUS_ERROR"), e->LastError, _E(e->LastError));
\r
8458 UniStrCpy(tmp4, sizeof(tmp4), _UU("SM_LINK_CONNECTING"));
\r
8463 if (e->Online == false)
\r
8465 icon = ICO_CASCADE_OFFLINE;
\r
8469 if (e->Connected == false && e->LastError != 0)
\r
8471 icon = ICO_CASCADE_ERROR;
\r
8475 icon = ICO_CASCADE;
\r
8480 icon, (void *)e->Online, 5,
\r
8481 e->AccountName, tmp4, tmp1, tmp2, tmp3);
\r
8484 LvInsertEnd(b, hWnd, L_LINK);
\r
8486 FreeRpcEnumLink(&t);
\r
8488 SmLinkDlgUpdate(hWnd, s);
\r
8492 // リンク一覧ダイアログプロシージャ
\r
8493 UINT SmLinkDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
8495 SM_HUB *s = (SM_HUB *)param;
\r
8498 NMLVDISPINFOW *disp_info;
\r
8506 str = LvGetSelectedStr(hWnd, L_LINK, 0);
\r
8510 case WM_INITDIALOG:
\r
8512 SmLinkDlgInit(hWnd, s);
\r
8514 if (link_create_now)
\r
8516 if (SmLinkCreateEx(hWnd, s, true))
\r
8518 SmLinkDlgRefresh(hWnd, s);
\r
8522 SetTimer(hWnd, 1, 1000, NULL);
\r
8529 KillTimer(hWnd, 1);
\r
8530 SmLinkDlgRefresh(hWnd, s);
\r
8531 SetTimer(hWnd, 1, 1000, NULL);
\r
8541 if (SmLinkCreate(hWnd, s))
\r
8543 SmLinkDlgRefresh(hWnd, s);
\r
8551 if (SmLinkEdit(hWnd, s, str))
\r
8553 SmLinkDlgRefresh(hWnd, s);
\r
8563 Zero(&t, sizeof(t));
\r
8564 UniStrCpy(t.AccountName, sizeof(t.AccountName), str);
\r
8565 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
8567 if (CALL(hWnd, ScSetLinkOnline(s->Rpc, &t)))
\r
8569 SmLinkDlgRefresh(hWnd, s);
\r
8579 Zero(&t, sizeof(t));
\r
8580 UniStrCpy(t.AccountName, sizeof(t.AccountName), str);
\r
8581 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
8583 if (MsgBoxEx(hWnd, MB_ICONEXCLAMATION | MB_YESNO | MB_DEFBUTTON2,
\r
8584 _UU("SM_LINK_OFFLINE_MSG"), t.AccountName) == IDYES)
\r
8586 if (CALL(hWnd, ScSetLinkOffline(s->Rpc, &t)))
\r
8588 SmLinkDlgRefresh(hWnd, s);
\r
8598 wchar_t tmp[MAX_SIZE];
\r
8600 Zero(&t, sizeof(t));
\r
8602 t.AccountName = str;
\r
8603 UniFormat(tmp, sizeof(tmp), _UU("SM_LINK_STATUS_CAPTION"), str);
\r
8604 SmStatusDlg(hWnd, s->p, &t, true, true, tmp,
\r
8605 ICO_CASCADE, NULL, SmRefreshLinkStatus);
\r
8614 Zero(&t, sizeof(t));
\r
8615 UniStrCpy(t.AccountName, sizeof(t.AccountName), str);
\r
8616 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
8618 if (MsgBoxEx(hWnd, MB_ICONEXCLAMATION | MB_YESNO | MB_DEFBUTTON2,
\r
8619 _UU("SM_LINK_DELETE_MSG"), t.AccountName) == IDYES)
\r
8621 if (CALL(hWnd, ScDeleteLink(s->Rpc, &t)))
\r
8623 SmLinkDlgRefresh(hWnd, s);
\r
8631 SmLinkDlgRefresh(hWnd, s);
\r
8641 Focus(hWnd, L_LINK);
\r
8642 LvRename(hWnd, L_LINK, LvGetSelected(hWnd, L_LINK));
\r
8648 n = (NMHDR *)lParam;
\r
8649 switch (n->idFrom)
\r
8654 case LVN_ITEMCHANGED:
\r
8656 SmLinkDlgUpdate(hWnd, s);
\r
8659 case LVN_ENDLABELEDITW:
\r
8661 disp_info = (NMLVDISPINFOW *)n;
\r
8662 if (disp_info->item.pszText != NULL)
\r
8664 wchar_t *new_name = disp_info->item.pszText;
\r
8665 wchar_t *old_name = LvGetStr(hWnd, L_LINK, disp_info->item.iItem, 0);
\r
8667 if (old_name != NULL)
\r
8669 if (UniStrCmp(new_name, old_name) != 0 && UniIsEmptyStr(new_name) == false)
\r
8671 RPC_RENAME_LINK t;
\r
8672 Zero(&t, sizeof(t));
\r
8673 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
8674 UniStrCpy(t.OldAccountName, sizeof(t.OldAccountName), old_name);
\r
8675 UniStrCpy(t.NewAccountName, sizeof(t.NewAccountName), new_name);
\r
8676 if (CALL(hWnd, ScRenameLink(s->Rpc, &t)))
\r
8678 SmLinkDlgRefresh(hWnd, s);
\r
8689 key = (NMLVKEYDOWN *)n;
\r
8693 UINT code = key->wVKey;
\r
8694 ctrl = (GetKeyState(VK_CONTROL) & 0x8000) == 0 ? false : true;
\r
8695 alt = (GetKeyState(VK_MENU) & 0x8000) == 0 ? false : true;
\r
8697 if (code == VK_F2)
\r
8699 Command(hWnd, B_RENAME);
\r
8709 EndDialog(hWnd, false);
\r
8715 LvStandardHandler(hWnd, msg, wParam, lParam, L_LINK);
\r
8721 void SmLinkDlg(HWND hWnd, SM_HUB *s)
\r
8723 SmLinkDlgEx(hWnd, s, false);
\r
8725 void SmLinkDlgEx(HWND hWnd, SM_HUB *s, bool createNow)
\r
8728 if (hWnd == NULL || s == NULL)
\r
8733 link_create_now = createNow;
\r
8735 Dialog(hWnd, D_SM_LINK, SmLinkDlgProc, s);
\r
8739 void SmRadiusDlgInit(HWND hWnd, SM_HUB *s)
\r
8743 if (hWnd == NULL || s == NULL)
\r
8748 SetIcon(hWnd, 0, ICO_TOWER);
\r
8750 FormatText(hWnd, S_TITLE, s->HubName);
\r
8751 FormatText(hWnd, S_RADIUS_7, RADIUS_RETRY_INTERVAL, RADIUS_RETRY_TIMEOUT);
\r
8753 Zero(&t, sizeof(t));
\r
8754 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
8756 if (CALL(hWnd, ScGetHubRadius(s->Rpc, &t)) == false)
\r
8758 EndDialog(hWnd, false);
\r
8762 Check(hWnd, R_USE_RADIUS, StrLen(t.RadiusServerName) != 0);
\r
8764 if (StrLen(t.RadiusServerName) != 0)
\r
8766 SetTextA(hWnd, E_HOSTNAME, t.RadiusServerName);
\r
8767 SetIntEx(hWnd, E_PORT, t.RadiusPort);
\r
8768 SetTextA(hWnd, E_SECRET1, t.RadiusSecret);
\r
8769 SetTextA(hWnd, E_SECRET2, t.RadiusSecret);
\r
8770 SetIntEx(hWnd, E_RADIUS_RETRY_INTERVAL, t.RadiusRetryInterval);
\r
8771 FocusEx(hWnd, E_HOSTNAME);
\r
8775 SetInt(hWnd, E_PORT, RADIUS_DEFAULT_PORT);
\r
8776 SetInt(hWnd, E_RADIUS_RETRY_INTERVAL, RADIUS_RETRY_INTERVAL);
\r
8779 SmRadiusDlgUpdate(hWnd, s);
\r
8783 void SmRadiusDlgUpdate(HWND hWnd, SM_HUB *s)
\r
8787 char tmp1[MAX_SIZE];
\r
8788 char tmp2[MAX_SIZE];
\r
8790 if (hWnd == NULL || s == NULL)
\r
8795 b1 = GetCapsBool(s->p->CapsList, "b_support_radius_retry_interval_and_several_servers");
\r
8798 Hide(hWnd, S_RADIUS_7);
\r
8799 Hide(hWnd, S_RADIUS_8);
\r
8800 Hide(hWnd, S_RADIUS_9);
\r
8801 Hide(hWnd, E_RADIUS_RETRY_INTERVAL);
\r
8804 b = IsChecked(hWnd, R_USE_RADIUS);
\r
8806 SetEnable(hWnd, S_RADIUS_1, b);
\r
8807 SetEnable(hWnd, S_RADIUS_2, b);
\r
8808 SetEnable(hWnd, S_RADIUS_3, b);
\r
8809 SetEnable(hWnd, S_RADIUS3, b);
\r
8810 SetEnable(hWnd, S_RADIUS_4, b);
\r
8811 SetEnable(hWnd, S_RADIUS_5, b);
\r
8812 SetEnable(hWnd, S_RADIUS_6, b);
\r
8813 SetEnable(hWnd, S_RADIUS_7, b);
\r
8814 SetEnable(hWnd, S_RADIUS_8, b);
\r
8815 SetEnable(hWnd, S_RADIUS_9, b);
\r
8816 SetEnable(hWnd, E_HOSTNAME, b);
\r
8817 SetEnable(hWnd, E_PORT, b);
\r
8818 SetEnable(hWnd, E_SECRET1, b);
\r
8819 SetEnable(hWnd, E_SECRET2, b);
\r
8820 SetEnable(hWnd, E_RADIUS_RETRY_INTERVAL, b);
\r
8825 GetTxtA(hWnd, E_SECRET1, tmp1, sizeof(tmp1));
\r
8826 GetTxtA(hWnd, E_SECRET2, tmp2, sizeof(tmp2));
\r
8828 if (StrCmp(tmp1, tmp2) != 0)
\r
8833 if (IsEmpty(hWnd, E_HOSTNAME))
\r
8838 p = GetInt(hWnd, E_PORT);
\r
8840 if (p == 0 || p >= 65536)
\r
8845 m = GetInt(hWnd, E_RADIUS_RETRY_INTERVAL);
\r
8846 if (m > RADIUS_RETRY_TIMEOUT || m < RADIUS_RETRY_INTERVAL)
\r
8852 SetEnable(hWnd, IDOK, ok);
\r
8856 void SmRadiusDlgOnOk(HWND hWnd, SM_HUB *s)
\r
8860 if (hWnd == NULL || s == NULL)
\r
8865 Zero(&t, sizeof(t));
\r
8866 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
8868 if (IsChecked(hWnd, R_USE_RADIUS))
\r
8870 GetTxtA(hWnd, E_HOSTNAME, t.RadiusServerName, sizeof(t.RadiusServerName));
\r
8871 t.RadiusPort = GetInt(hWnd, E_PORT);
\r
8872 GetTxtA(hWnd, E_SECRET1,t.RadiusSecret, sizeof(t.RadiusSecret));
\r
8873 t.RadiusRetryInterval = GetInt(hWnd, E_RADIUS_RETRY_INTERVAL);
\r
8876 if (CALL(hWnd, ScSetHubRadius(s->Rpc, &t)) == false)
\r
8881 EndDialog(hWnd, true);
\r
8885 // Radius ダイアログ プロシージャ
\r
8886 UINT SmRadiusDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
8888 SM_HUB *s = (SM_HUB *)param;
\r
8897 case WM_INITDIALOG:
\r
8899 SmRadiusDlgInit(hWnd, s);
\r
8903 switch (LOWORD(wParam))
\r
8909 case E_RADIUS_RETRY_INTERVAL:
\r
8910 case R_USE_RADIUS:
\r
8911 SmRadiusDlgUpdate(hWnd, s);
\r
8919 SmRadiusDlgOnOk(hWnd, s);
\r
8927 case R_USE_RADIUS:
\r
8928 if (IsChecked(hWnd, R_USE_RADIUS))
\r
8930 FocusEx(hWnd, E_HOSTNAME);
\r
8937 EndDialog(hWnd, false);
\r
8945 void SmRadiusDlg(HWND hWnd, SM_HUB *s)
\r
8948 if (hWnd == NULL || s == NULL)
\r
8953 Dialog(hWnd, D_SM_RADIUS, SmRadiusDlgProc, s);
\r
8958 void SmEditAccessInit(HWND hWnd, SM_EDIT_ACCESS *s)
\r
8961 wchar_t tmp[MAX_SIZE];
\r
8963 if (hWnd == NULL || s == NULL)
\r
8968 SetIcon(hWnd, 0, ICO_PASS);
\r
8970 GetTxt(hWnd, 0, tmp, sizeof(tmp));
\r
8972 UniStrCat(tmp, sizeof(tmp), s->Access->IsIPv6 ? L" (IPv6)" : L" (IPv4)");
\r
8974 SetText(hWnd, 0, tmp);
\r
8976 s->Inited = false;
\r
8979 SetText(hWnd, E_NOTE, a->Note);
\r
8981 Check(hWnd, R_DISCARD, a->Discard);
\r
8982 Check(hWnd, R_PASS, a->Discard == false);
\r
8983 SetIntEx(hWnd, E_PRIORITY, a->Priority);
\r
8985 if (a->IsIPv6 == false)
\r
8988 if (a->SrcIpAddress == 0 && a->SrcSubnetMask == 0)
\r
8990 Check(hWnd, R_SRC_ALL, true);
\r
8994 IpSet(hWnd, E_SRC_IP, a->SrcIpAddress);
\r
8995 IpSet(hWnd, E_SRC_MASK, a->SrcSubnetMask);
\r
8998 if (a->DestIpAddress == 0 && a->DestSubnetMask == 0)
\r
9000 Check(hWnd, R_DST_ALL, true);
\r
9004 IpSet(hWnd, E_DST_IP, a->DestIpAddress);
\r
9005 IpSet(hWnd, E_DST_MASK, a->DestSubnetMask);
\r
9011 if (IsZeroIP6Addr(&a->SrcIpAddress6) && IsZeroIP6Addr(&a->SrcSubnetMask6))
\r
9013 Check(hWnd, R_SRC_ALL, true);
\r
9017 char tmp[MAX_SIZE];
\r
9019 IP6AddrToStr(tmp, sizeof(tmp), &a->SrcIpAddress6);
\r
9020 SetTextA(hWnd, E_SRC_IP_V6, tmp);
\r
9022 Mask6AddrToStrEx(tmp, sizeof(tmp), &a->SrcSubnetMask6, false);
\r
9026 StrCatLeft(tmp, sizeof(tmp), "/");
\r
9029 SetTextA(hWnd, E_SRC_MASK_V6, tmp);
\r
9032 if (IsZeroIP6Addr(&a->DestIpAddress6) && IsZeroIP6Addr(&a->DestSubnetMask6))
\r
9034 Check(hWnd, R_DST_ALL, true);
\r
9038 char tmp[MAX_SIZE];
\r
9040 IP6AddrToStr(tmp, sizeof(tmp), &a->DestIpAddress6);
\r
9041 SetTextA(hWnd, E_DST_IP_V6, tmp);
\r
9043 Mask6AddrToStrEx(tmp, sizeof(tmp), &a->DestSubnetMask6, false);
\r
9047 StrCatLeft(tmp, sizeof(tmp), "/");
\r
9050 SetTextA(hWnd, E_DST_MASK_V6, tmp);
\r
9054 CbSetHeight(hWnd, C_PROTOCOL, 18);
\r
9055 CbAddStr(hWnd, C_PROTOCOL, _UU("SM_ACCESS_PROTO_1"), 0);
\r
9056 CbAddStr(hWnd, C_PROTOCOL, _UU("SM_ACCESS_PROTO_2"), 0);
\r
9057 CbAddStr(hWnd, C_PROTOCOL, _UU("SM_ACCESS_PROTO_3"), 0);
\r
9058 CbAddStr(hWnd, C_PROTOCOL, _UU("SM_ACCESS_PROTO_4"), 0);
\r
9059 CbAddStr(hWnd, C_PROTOCOL, _UU("SM_ACCESS_PROTO_5"), 0);
\r
9060 CbAddStr(hWnd, C_PROTOCOL, _UU("SM_ACCESS_PROTO_6"), 0);
\r
9062 switch (a->Protocol)
\r
9065 CbSelectIndex(hWnd, C_PROTOCOL, 0);
\r
9068 CbSelectIndex(hWnd, C_PROTOCOL, 1);
\r
9071 CbSelectIndex(hWnd, C_PROTOCOL, 2);
\r
9074 CbSelectIndex(hWnd, C_PROTOCOL, 3);
\r
9077 CbSelectIndex(hWnd, C_PROTOCOL, 4);
\r
9080 CbSelectIndex(hWnd, C_PROTOCOL, 5);
\r
9084 Check(hWnd, R_DISABLE, a->Active ? false : true);
\r
9086 SetIntEx(hWnd, E_IP_PROTO, a->Protocol);
\r
9088 SetIntEx(hWnd, E_SRC_PORT_1, a->SrcPortStart);
\r
9089 SetIntEx(hWnd, E_SRC_PORT_2, a->SrcPortEnd);
\r
9090 SetIntEx(hWnd, E_DST_PORT_1, a->DestPortStart);
\r
9091 SetIntEx(hWnd, E_DST_PORT_2, a->DestPortEnd);
\r
9093 SetTextA(hWnd, E_USERNAME1, a->SrcUsername);
\r
9094 SetTextA(hWnd, E_USERNAME2, a->DestUsername);
\r
9096 if(a->CheckSrcMac != false)
\r
9098 char mac[MAX_SIZE], mask[MAX_SIZE];
\r
9099 MacToStr(mac, sizeof(mac), a->SrcMacAddress);
\r
9100 MacToStr(mask, sizeof(mask), a->SrcMacMask);
\r
9101 SetTextA(hWnd, E_SRC_MAC, mac);
\r
9102 SetTextA(hWnd, E_SRC_MAC_MASK, mask);
\r
9104 if(a->CheckDstMac != false)
\r
9106 char mac[MAX_SIZE], mask[MAX_SIZE];
\r
9107 MacToStr(mac, sizeof(mac), a->DstMacAddress);
\r
9108 MacToStr(mask, sizeof(mask), a->DstMacMask);
\r
9109 SetTextA(hWnd, E_DST_MAC, mac);
\r
9110 SetTextA(hWnd, E_DST_MAC_MASK, mask);
\r
9112 Check(hWnd, R_CHECK_SRC_MAC, !a->CheckSrcMac);
\r
9113 Check(hWnd, R_CHECK_DST_MAC, !a->CheckDstMac);
\r
9115 Check(hWnd, R_CHECK_TCP_STATE, a->CheckTcpState);
\r
9116 if(a->CheckTcpState != false)
\r
9118 Check(hWnd, R_ESTABLISHED, a->Established);
\r
9119 Check(hWnd, R_UNESTABLISHED, !a->Established);
\r
9122 if (GetCapsBool(s->Hub->p->CapsList, "b_support_acl_group") == false)
\r
9124 SetText(hWnd, S_STATIC11, _UU("D_SM_EDIT_ACCESS@STATIC11_OLD"));
\r
9125 SetText(hWnd, S_STATIC12, _UU("D_SM_EDIT_ACCESS@STATIC12_OLD"));
\r
9126 SetText(hWnd, S_STATIC15, _UU("D_SM_EDIT_ACCESS@STATIC15_OLD"));
\r
9131 SmEditAccessUpdate(hWnd, s);
\r
9135 void SmEditAccessUpdate(HWND hWnd, SM_EDIT_ACCESS *s)
\r
9140 bool check_srcmac, check_dstmac, support_mac;
\r
9141 bool check_state, support_check_state;
\r
9142 char srcmac[MAX_SIZE], srcmac_mask[MAX_SIZE], dstmac[MAX_SIZE], dstmac_mask[MAX_SIZE];
\r
9143 char tmp[MAX_SIZE];
\r
9144 wchar_t unitmp[MAX_SIZE];
\r
9147 if (hWnd == NULL || s == NULL)
\r
9152 if (s->Inited == false)
\r
9159 GetTxt(hWnd, E_NOTE, a->Note, sizeof(a->Note));
\r
9161 a->Discard = IsChecked(hWnd, R_DISCARD);
\r
9163 a->Priority = GetInt(hWnd, E_PRIORITY);
\r
9164 if (a->Priority == 0)
\r
9170 b = IsChecked(hWnd, R_SRC_ALL) ? false : true;
\r
9173 if (a->IsIPv6 == false)
\r
9175 a->SrcIpAddress = 0;
\r
9176 a->SrcSubnetMask = 0;
\r
9180 Zero(&a->SrcIpAddress6, sizeof(IPV6_ADDR));
\r
9181 Zero(&a->SrcSubnetMask6, sizeof(IPV6_ADDR));
\r
9186 if (a->IsIPv6 == false)
\r
9188 if (IpIsFilled(hWnd, E_SRC_IP) == false || IpIsFilled(hWnd, E_SRC_MASK) == false)
\r
9194 a->SrcIpAddress = IpGet(hWnd, E_SRC_IP);
\r
9195 a->SrcSubnetMask = IpGet(hWnd, E_SRC_MASK);
\r
9200 char tmp1[MAX_SIZE];
\r
9201 char tmp2[MAX_SIZE];
\r
9203 GetTxtA(hWnd, E_SRC_IP_V6, tmp1, sizeof(tmp1));
\r
9204 GetTxtA(hWnd, E_SRC_MASK_V6, tmp2, sizeof(tmp2));
\r
9206 if (StrToIP6Addr(&a->SrcIpAddress6, tmp1) == false ||
\r
9207 StrToMask6Addr(&a->SrcSubnetMask6, tmp2) == false)
\r
9213 SetEnable(hWnd, S_SRC_IP_1, b);
\r
9214 SetEnable(hWnd, S_SRC_IP_2, b);
\r
9215 SetEnable(hWnd, S_SRC_IP_3, b);
\r
9216 SetEnable(hWnd, E_SRC_IP, b);
\r
9217 SetEnable(hWnd, E_SRC_MASK, b);
\r
9218 SetEnable(hWnd, E_SRC_IP_V6, b);
\r
9219 SetEnable(hWnd, E_SRC_MASK_V6, b);
\r
9221 b = IsChecked(hWnd, R_DST_ALL) ? false : true;
\r
9224 if (a->IsIPv6 == false)
\r
9226 a->DestIpAddress = 0;
\r
9227 a->DestSubnetMask = 0;
\r
9231 Zero(&a->DestIpAddress6, sizeof(IPV6_ADDR));
\r
9232 Zero(&a->DestSubnetMask6, sizeof(IPV6_ADDR));
\r
9237 if (a->IsIPv6 == false)
\r
9239 if (IpIsFilled(hWnd, E_DST_IP) == false || IpIsFilled(hWnd, E_DST_MASK) == false)
\r
9245 a->DestIpAddress = IpGet(hWnd, E_DST_IP);
\r
9246 a->DestSubnetMask = IpGet(hWnd, E_DST_MASK);
\r
9251 char tmp1[MAX_SIZE];
\r
9252 char tmp2[MAX_SIZE];
\r
9254 GetTxtA(hWnd, E_DST_IP_V6, tmp1, sizeof(tmp1));
\r
9255 GetTxtA(hWnd, E_DST_MASK_V6, tmp2, sizeof(tmp2));
\r
9257 if (StrToIP6Addr(&a->DestIpAddress6, tmp1) == false ||
\r
9258 StrToMask6Addr(&a->DestSubnetMask6, tmp2) == false)
\r
9264 SetEnable(hWnd, S_IP_DST_1, b);
\r
9265 SetEnable(hWnd, S_IP_DST_2, b);
\r
9266 SetEnable(hWnd, S_IP_DST_3, b);
\r
9267 SetEnable(hWnd, E_DST_IP, b);
\r
9268 SetEnable(hWnd, E_DST_MASK, b);
\r
9269 SetEnable(hWnd, E_DST_IP_V6, b);
\r
9270 SetEnable(hWnd, E_DST_MASK_V6, b);
\r
9272 a->Protocol = GetInt(hWnd, C_PROTOCOL);
\r
9274 GetTxtA(hWnd, C_PROTOCOL, tmp, sizeof(tmp));
\r
9275 GetTxt(hWnd, C_PROTOCOL, unitmp, sizeof(unitmp));
\r
9277 if (UniStrCmpi(unitmp, _UU("SM_ACCESS_PROTO_6")) == 0 || StrCmpi(tmp, _SS("SM_ACCESS_PROTO_6")) == 0)
\r
9279 a->Protocol = GetInt(hWnd, E_IP_PROTO);
\r
9281 if (IsEmpty(hWnd, E_IP_PROTO))
\r
9286 Enable(hWnd, S_PROTOID);
\r
9287 Enable(hWnd, E_IP_PROTO);
\r
9291 Disable(hWnd, E_IP_PROTO);
\r
9292 Disable(hWnd, S_PROTOID);
\r
9296 if (a->Protocol == 17 || a->Protocol == 6)
\r
9301 SetEnable(hWnd, S_TCP_1, tcp);
\r
9302 SetEnable(hWnd, S_TCP_2, tcp);
\r
9303 SetEnable(hWnd, S_TCP_3, tcp);
\r
9304 SetEnable(hWnd, S_TCP_4, tcp);
\r
9305 SetEnable(hWnd, S_TCP_5, tcp);
\r
9306 SetEnable(hWnd, S_TCP_6, tcp);
\r
9307 SetEnable(hWnd, S_TCP_7, tcp);
\r
9308 SetEnable(hWnd, E_SRC_PORT_1, tcp);
\r
9309 SetEnable(hWnd, E_SRC_PORT_2, tcp);
\r
9310 SetEnable(hWnd, E_DST_PORT_1, tcp);
\r
9311 SetEnable(hWnd, E_DST_PORT_2, tcp);
\r
9315 a->SrcPortEnd = a->SrcPortStart = a->DestPortEnd = a->DestPortStart = 0;
\r
9319 a->SrcPortStart = GetInt(hWnd, E_SRC_PORT_1);
\r
9320 a->SrcPortEnd = GetInt(hWnd, E_SRC_PORT_2);
\r
9321 a->DestPortStart = GetInt(hWnd, E_DST_PORT_1);
\r
9322 a->DestPortEnd = GetInt(hWnd, E_DST_PORT_2);
\r
9324 if (a->SrcPortStart != 0)
\r
9326 if (a->SrcPortEnd != 0)
\r
9328 if (a->SrcPortStart > a->SrcPortEnd)
\r
9336 if (a->SrcPortEnd != 0)
\r
9342 if (a->DestPortStart != 0)
\r
9344 if (a->DestPortEnd != 0)
\r
9346 if (a->DestPortStart > a->DestPortEnd)
\r
9354 if (a->DestPortEnd != 0)
\r
9360 if (a->DestPortEnd < a->DestPortStart)
\r
9362 a->DestPortEnd = a->DestPortStart;
\r
9365 if (a->SrcPortEnd < a->SrcPortStart)
\r
9367 a->SrcPortEnd = a->SrcPortStart;
\r
9371 a->SrcUsernameHash = a->DestUsernameHash = 0;
\r
9372 GetTxtA(hWnd, E_USERNAME1, a->SrcUsername, sizeof(a->SrcUsername));
\r
9373 GetTxtA(hWnd, E_USERNAME2, a->DestUsername, sizeof(a->DestUsername));
\r
9375 Trim(a->SrcUsername);
\r
9377 if (StrLen(a->SrcUsername) != 0)
\r
9379 if (IsUserName(a->SrcUsername) == false)
\r
9385 Trim(a->DestUsername);
\r
9387 if (StrLen(a->DestUsername) != 0)
\r
9389 if (IsUserName(a->DestUsername) == false)
\r
9395 support_mac = GetCapsBool(s->Hub->p->CapsList, "b_support_check_mac");
\r
9397 // 送信元 MAC アドレスの設定
\r
9398 check_srcmac = a->CheckSrcMac = support_mac && (IsChecked(hWnd, R_CHECK_SRC_MAC) ? false : true);
\r
9399 if(check_srcmac == false)
\r
9401 Zero(a->SrcMacAddress, sizeof(a->SrcMacAddress));
\r
9402 Zero(a->SrcMacMask, sizeof(a->SrcMacMask));
\r
9406 GetTxtA(hWnd, E_SRC_MAC, srcmac, sizeof(srcmac));
\r
9407 GetTxtA(hWnd, E_SRC_MAC_MASK, srcmac_mask, sizeof(srcmac_mask));
\r
9409 Trim(srcmac_mask);
\r
9410 if(StrLen(srcmac) != 0 && StrLen(srcmac_mask) != 0)
\r
9412 UCHAR mac[6], mask[6];
\r
9413 if(StrToMac(mac, srcmac) && StrToMac(mask, srcmac_mask))
\r
9415 Copy(a->SrcMacAddress, mac, 6);
\r
9416 Copy(a->SrcMacMask, mask, 6);
\r
9428 SetEnable(hWnd, S_CHECK_SRC_MAC, support_mac);
\r
9429 SetEnable(hWnd, R_CHECK_SRC_MAC, support_mac);
\r
9430 SetEnable(hWnd, S_SRC_MAC, check_srcmac);
\r
9431 SetEnable(hWnd, S_SRC_MAC_MASK, check_srcmac);
\r
9432 SetEnable(hWnd, E_SRC_MAC, check_srcmac);
\r
9433 SetEnable(hWnd, E_SRC_MAC_MASK, check_srcmac);
\r
9436 check_dstmac = a->CheckDstMac = support_mac && (IsChecked(hWnd, R_CHECK_DST_MAC) ? false : true);
\r
9437 if(check_dstmac == false)
\r
9439 Zero(a->DstMacAddress, sizeof(a->DstMacAddress));
\r
9440 Zero(a->DstMacMask, sizeof(a->DstMacMask));
\r
9444 GetTxtA(hWnd, E_DST_MAC, dstmac, sizeof(dstmac));
\r
9445 GetTxtA(hWnd, E_DST_MAC_MASK, dstmac_mask, sizeof(dstmac_mask));
\r
9447 Trim(dstmac_mask);
\r
9448 if(StrLen(dstmac) != 0 && StrLen(dstmac_mask) != 0)
\r
9450 UCHAR mac[6], mask[6];
\r
9451 if(StrToMac(mac, dstmac) && StrToMac(mask, dstmac_mask))
\r
9453 Copy(a->DstMacAddress, mac, 6);
\r
9454 Copy(a->DstMacMask, mask, 6);
\r
9466 SetEnable(hWnd, S_CHECK_DST_MAC, support_mac);
\r
9467 SetEnable(hWnd, R_CHECK_DST_MAC, support_mac);
\r
9468 SetEnable(hWnd, S_DST_MAC, check_dstmac);
\r
9469 SetEnable(hWnd, S_DST_MAC_MASK, check_dstmac);
\r
9470 SetEnable(hWnd, E_DST_MAC, check_dstmac);
\r
9471 SetEnable(hWnd, E_DST_MAC_MASK, check_dstmac);
\r
9473 SetEnable(hWnd, S_MAC_NOTE, check_srcmac || check_dstmac);
\r
9476 support_check_state = GetCapsBool(s->Hub->p->CapsList, "b_support_check_tcp_state") && a->Protocol == 6;
\r
9477 SetEnable(hWnd, R_CHECK_TCP_STATE, support_check_state);
\r
9478 check_state = a->CheckTcpState = support_check_state && IsChecked(hWnd, R_CHECK_TCP_STATE);
\r
9480 a->Established = IsChecked(hWnd, R_ESTABLISHED) && check_state;
\r
9481 SetEnable(hWnd, R_ESTABLISHED, check_state);
\r
9482 SetEnable(hWnd, R_UNESTABLISHED, check_state);
\r
9483 if(check_state != false && IsChecked(hWnd, R_ESTABLISHED) == false && IsChecked(hWnd, R_UNESTABLISHED) == false)
\r
9488 a->Active = IsChecked(hWnd, R_DISABLE) ? false : true;
\r
9490 SetEnable(hWnd, B_SIMULATION, a->Discard == false && GetCapsBool(s->Hub->p->CapsList, "b_support_ex_acl"));
\r
9492 SetEnable(hWnd, IDOK, ok);
\r
9496 void SmEditAccessOnOk(HWND hWnd, SM_EDIT_ACCESS *s)
\r
9499 if (hWnd == NULL || s == NULL)
\r
9504 SmEditAccessUpdate(hWnd, s);
\r
9506 EndDialog(hWnd, true);
\r
9511 UINT SmEditAccessDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
9513 SM_EDIT_ACCESS *s = (SM_EDIT_ACCESS *)param;
\r
9516 char tmp[MAX_SIZE];
\r
9525 case WM_INITDIALOG:
\r
9527 SmEditAccessInit(hWnd, s);
\r
9529 goto REFRESH_ICON;
\r
9532 switch (LOWORD(wParam))
\r
9543 case E_SRC_MASK_V6:
\r
9544 case E_DST_MASK_V6:
\r
9547 case E_SRC_PORT_1:
\r
9548 case E_SRC_PORT_2:
\r
9549 case E_DST_PORT_1:
\r
9550 case E_DST_PORT_2:
\r
9555 case R_CHECK_SRC_MAC:
\r
9557 case E_SRC_MAC_MASK:
\r
9558 case R_CHECK_DST_MAC:
\r
9560 case E_DST_MAC_MASK:
\r
9561 case R_CHECK_TCP_STATE:
\r
9562 case R_ESTABLISHED:
\r
9563 case R_UNESTABLISHED:
\r
9564 SmEditAccessUpdate(hWnd, s);
\r
9571 if (GetTxtA(hWnd, E_USERNAME1, tmp, sizeof(tmp)))
\r
9573 char *ret = SmSelectUserDlgEx(hWnd, s->Hub, tmp, GetCapsBool(s->Hub->p->CapsList, "b_support_acl_group"));
\r
9576 SetTextA(hWnd, E_USERNAME1, "");
\r
9580 SetTextA(hWnd, E_USERNAME1, ret);
\r
9583 FocusEx(hWnd, E_USERNAME1);
\r
9588 if (GetTxtA(hWnd, E_USERNAME2, tmp, sizeof(tmp)))
\r
9590 char *ret = SmSelectUserDlgEx(hWnd, s->Hub, tmp, GetCapsBool(s->Hub->p->CapsList, "b_support_acl_group"));
\r
9593 SetTextA(hWnd, E_USERNAME2, "");
\r
9597 SetTextA(hWnd, E_USERNAME2, ret);
\r
9600 FocusEx(hWnd, E_USERNAME2);
\r
9606 SmEditAccessOnOk(hWnd, s);
\r
9615 if (IsChecked(hWnd, R_SRC_ALL) == false)
\r
9617 if (s->Access->IsIPv6)
\r
9619 FocusEx(hWnd, E_SRC_IP_V6);
\r
9623 Focus(hWnd, E_SRC_IP);
\r
9629 if (IsChecked(hWnd, R_DST_ALL) == false)
\r
9631 if (s->Access->IsIPv6)
\r
9633 FocusEx(hWnd, E_DST_IP_V6);
\r
9637 Focus(hWnd, E_DST_IP);
\r
9641 case R_CHECK_SRC_MAC:
\r
9642 if(IsChecked(hWnd, R_CHECK_SRC_MAC) == false)
\r
9644 Focus(hWnd, E_SRC_MAC);
\r
9647 case R_CHECK_DST_MAC:
\r
9648 if(IsChecked(hWnd, R_CHECK_DST_MAC) == false)
\r
9650 Focus(hWnd, E_DST_MAC);
\r
9659 if (a->Discard == false && a->Active == false)
\r
9661 ico = ICO_PASS_DISABLE;
\r
9663 else if (a->Discard == false && a->Active)
\r
9667 else if (a->Discard && a->Active == false)
\r
9669 ico = ICO_DISCARD_DISABLE;
\r
9673 ico = ICO_DISCARD;
\r
9676 SetIcon(hWnd, S_ICON, ico);
\r
9679 case B_SIMULATION:
\r
9681 Dialog(hWnd, D_SM_SIMULATION, SmSimulationDlg, s);
\r
9687 EndDialog(hWnd, false);
\r
9694 // 遅延・ジッタ・パケットロスダイアログ
\r
9695 UINT SmSimulationDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
9697 SM_EDIT_ACCESS *s = (SM_EDIT_ACCESS *)param;
\r
9706 case WM_INITDIALOG:
\r
9707 SmSimulationInit(hWnd, s);
\r
9711 switch (LOWORD(wParam))
\r
9716 SmSimulationUpdate(hWnd, s);
\r
9723 SmSimulationOnOk(hWnd, s);
\r
9731 SmSimulationUpdate(hWnd, s);
\r
9732 if (IsChecked(hWnd, C_DELAY))
\r
9734 FocusEx(hWnd, E_DELAY);
\r
9739 SmSimulationUpdate(hWnd, s);
\r
9740 if (IsChecked(hWnd, C_JITTER))
\r
9742 FocusEx(hWnd, E_JITTER);
\r
9747 SmSimulationUpdate(hWnd, s);
\r
9748 if (IsChecked(hWnd, C_LOSS))
\r
9750 FocusEx(hWnd, E_LOSS);
\r
9757 EndDialog(hWnd, false);
\r
9764 // 遅延・ジッタ・パケットロスダイアログの更新
\r
9765 void SmSimulationUpdate(HWND hWnd, SM_EDIT_ACCESS *s)
\r
9770 if (hWnd == NULL || s == NULL)
\r
9775 b1 = IsChecked(hWnd, C_DELAY);
\r
9776 b2 = IsChecked(hWnd, C_JITTER);
\r
9777 b3 = IsChecked(hWnd, C_LOSS);
\r
9779 SetEnable(hWnd, S_DELAY, b1);
\r
9780 SetEnable(hWnd, S_DELAY2, b1);
\r
9781 SetEnable(hWnd, E_DELAY, b1);
\r
9783 SetEnable(hWnd, C_JITTER, b1);
\r
9790 SetEnable(hWnd, S_JITTER, b2);
\r
9791 SetEnable(hWnd, S_JITTER2, b2);
\r
9792 SetEnable(hWnd, E_JITTER, b2);
\r
9794 SetEnable(hWnd, S_LOSS, b3);
\r
9795 SetEnable(hWnd, S_LOSS2, b3);
\r
9796 SetEnable(hWnd, E_LOSS, b3);
\r
9800 UINT i = GetInt(hWnd, E_DELAY);
\r
9801 if (i == 0 || i > HUB_ACCESSLIST_DELAY_MAX)
\r
9809 UINT i = GetInt(hWnd, E_JITTER);
\r
9810 if (i == 0 || i > HUB_ACCESSLIST_JITTER_MAX)
\r
9818 UINT i = GetInt(hWnd, E_LOSS);
\r
9819 if (i == 0 || i > HUB_ACCESSLIST_LOSS_MAX)
\r
9825 SetEnable(hWnd, IDOK, ok);
\r
9828 // 遅延・ジッタ・パケットロスダイアログの初期化
\r
9829 void SmSimulationInit(HWND hWnd, SM_EDIT_ACCESS *s)
\r
9833 if (hWnd == NULL || s == NULL)
\r
9840 Check(hWnd, C_DELAY, a->Delay != 0);
\r
9841 Check(hWnd, C_JITTER, a->Jitter != 0);
\r
9842 Check(hWnd, C_LOSS, a->Loss != 0);
\r
9844 SetIntEx(hWnd, E_DELAY, a->Delay);
\r
9845 if (a->Delay != 0)
\r
9847 SetIntEx(hWnd, E_JITTER, a->Jitter);
\r
9849 SetIntEx(hWnd, E_LOSS, a->Loss);
\r
9851 SmSimulationUpdate(hWnd, s);
\r
9853 if (a->Delay != 0)
\r
9855 FocusEx(hWnd, E_DELAY);
\r
9859 Focus(hWnd, C_DELAY);
\r
9863 // 遅延・ジッタ・パケットロスダイアログの保存
\r
9864 void SmSimulationOnOk(HWND hWnd, SM_EDIT_ACCESS *s)
\r
9868 if (hWnd == NULL || s == NULL)
\r
9875 a->Jitter = a->Loss = a->Delay = 0;
\r
9877 if (IsChecked(hWnd, C_DELAY))
\r
9879 a->Delay = GetInt(hWnd, E_DELAY);
\r
9882 if (IsChecked(hWnd, C_JITTER))
\r
9884 a->Jitter = GetInt(hWnd, E_JITTER);
\r
9887 if (IsChecked(hWnd, C_LOSS))
\r
9889 a->Loss = GetInt(hWnd, E_LOSS);
\r
9892 EndDialog(hWnd, 1);
\r
9896 bool SmEditAccess(HWND hWnd, SM_ACCESS_LIST *s, ACCESS *a)
\r
9898 SM_EDIT_ACCESS edit;
\r
9902 if (hWnd == NULL || s == NULL)
\r
9907 Zero(&edit, sizeof(edit));
\r
9908 edit.AccessList = s;
\r
9909 edit.EditMode = true;
\r
9910 edit.Access = ZeroMalloc(sizeof(ACCESS));
\r
9911 edit.Hub = s->Hub;
\r
9912 Copy(edit.Access, a, sizeof(ACCESS));
\r
9914 if (edit.Access->IsIPv6 == false)
\r
9916 ret = Dialog(hWnd, D_SM_EDIT_ACCESS, SmEditAccessDlg, &edit);
\r
9920 ret = Dialog(hWnd, D_SM_EDIT_ACCESS_V6, SmEditAccessDlg, &edit);
\r
9925 Copy(a, edit.Access, sizeof(ACCESS));
\r
9926 Free(edit.Access);
\r
9927 Sort(s->AccessList);
\r
9930 for (i = 0;i < LIST_NUM(s->AccessList);i++)
\r
9932 ACCESS *a = LIST_DATA(s->AccessList, i);
\r
9938 Free(edit.Access);
\r
9945 bool SmAddAccess(HWND hWnd, SM_ACCESS_LIST *s, bool ipv6)
\r
9947 SM_EDIT_ACCESS edit;
\r
9951 if (hWnd == NULL || s == NULL)
\r
9956 Zero(&edit, sizeof(edit));
\r
9957 edit.AccessList = s;
\r
9958 edit.Access = ZeroMalloc(sizeof(ACCESS));
\r
9959 edit.Access->Active = true;
\r
9960 edit.Access->Priority = 0;
\r
9961 edit.Access->IsIPv6 = ipv6;
\r
9962 edit.Hub = s->Hub;
\r
9965 for (i = 0;i < LIST_NUM(s->AccessList);i++)
\r
9967 ACCESS *a = LIST_DATA(s->AccessList, i);
\r
9968 edit.Access->Priority = MAX(edit.Access->Priority, a->Priority);
\r
9971 if (edit.Access->Priority == 0)
\r
9973 edit.Access->Priority = 900;
\r
9976 edit.Access->Priority += 100;
\r
9978 if (edit.Access->IsIPv6 == false)
\r
9980 ret = Dialog(hWnd, D_SM_EDIT_ACCESS, SmEditAccessDlg, &edit);
\r
9984 ret = Dialog(hWnd, D_SM_EDIT_ACCESS_V6, SmEditAccessDlg, &edit);
\r
9989 Insert(s->AccessList, edit.Access);
\r
9992 for (i = 0;i < LIST_NUM(s->AccessList);i++)
\r
9994 ACCESS *a = LIST_DATA(s->AccessList, i);
\r
10000 Free(edit.Access);
\r
10007 void SmAccessListInit(HWND hWnd, SM_ACCESS_LIST *s)
\r
10010 if (hWnd == NULL || s == NULL)
\r
10015 SetIcon(hWnd, 0, ICO_PASS);
\r
10016 FormatText(hWnd, S_TITLE, s->Hub->HubName);
\r
10018 LvInit(hWnd, L_ACCESS_LIST);
\r
10019 LvInsertColumn(hWnd, L_ACCESS_LIST, 0, _UU("SM_ACCESS_COLUMN_0"), 60);
\r
10020 LvInsertColumn(hWnd, L_ACCESS_LIST, 1, _UU("SM_ACCESS_COLUMN_1"), 60);
\r
10021 LvInsertColumn(hWnd, L_ACCESS_LIST, 2, _UU("SM_ACCESS_COLUMN_2"), 60);
\r
10022 LvInsertColumn(hWnd, L_ACCESS_LIST, 3, _UU("SM_ACCESS_COLUMN_3"), 70);
\r
10023 LvInsertColumn(hWnd, L_ACCESS_LIST, 4, _UU("SM_ACCESS_COLUMN_4"), 150);
\r
10024 LvInsertColumn(hWnd, L_ACCESS_LIST, 5, _UU("SM_ACCESS_COLUMN_5"), 600);
\r
10026 LvSetStyle(hWnd, L_ACCESS_LIST, LVS_EX_GRIDLINES);
\r
10028 SetEnable(hWnd, B_ADD_V6, GetCapsBool(s->Hub->p->CapsList, "b_support_ipv6_acl"));
\r
10030 SmAccessListRefresh(hWnd, s);
\r
10034 void SmAccessListUpdate(HWND hWnd, SM_ACCESS_LIST *s)
\r
10038 if (hWnd == NULL || s == NULL)
\r
10043 if (LvIsSelected(hWnd, L_ACCESS_LIST) == false || LvIsMultiMasked(hWnd, L_ACCESS_LIST))
\r
10048 SetEnable(hWnd, IDOK, ok);
\r
10049 SetEnable(hWnd, B_DELETE, ok);
\r
10051 SetEnable(hWnd, B_CREATE, LIST_NUM(s->AccessList) < MAX_ACCESSLISTS);
\r
10055 void SmAccessListRefresh(HWND hWnd, SM_ACCESS_LIST *s)
\r
10060 if (hWnd == NULL || s == NULL)
\r
10065 b = LvInsertStart();
\r
10067 Sort(s->AccessList);
\r
10069 for (i = 0;i < LIST_NUM(s->AccessList);i++)
\r
10071 ACCESS *a = LIST_DATA(s->AccessList, i);
\r
10072 char tmp[MAX_SIZE];
\r
10073 UINT ico = ICO_PASS;
\r
10074 wchar_t tmp3[MAX_SIZE];
\r
10075 wchar_t tmp1[MAX_SIZE];
\r
10076 wchar_t tmp2[MAX_SIZE];
\r
10077 GetAccessListStr(tmp, sizeof(tmp), a);
\r
10078 UniToStru(tmp1, a->Priority);
\r
10079 StrToUni(tmp2, sizeof(tmp2), tmp);
\r
10081 if (a->Discard == false && a->Active == false)
\r
10083 ico = ICO_PASS_DISABLE;
\r
10085 else if (a->Discard == false && a->Active)
\r
10089 else if (a->Discard && a->Active == false)
\r
10091 ico = ICO_DISCARD_DISABLE;
\r
10095 ico = ICO_DISCARD;
\r
10098 UniToStru(tmp3, a->Id);
\r
10100 LvInsertAdd(b, ico, (void *)a, 6,
\r
10102 a->Discard ? _UU("SM_ACCESS_DISCARD") : _UU("SM_ACCESS_PASS"),
\r
10103 a->Active ? _UU("SM_ACCESS_ENABLE") : _UU("SM_ACCESS_DISABLE"),
\r
10109 LvInsertEnd(b, hWnd, L_ACCESS_LIST);
\r
10110 LvSortEx(hWnd, L_ACCESS_LIST, 0, false, true);
\r
10112 SmAccessListUpdate(hWnd, s);
\r
10115 // アクセスリストダイアログプロシージャ
\r
10116 UINT SmAccessListProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
10118 SM_ACCESS_LIST *s = (SM_ACCESS_LIST *)param;
\r
10122 if (hWnd == NULL)
\r
10129 case WM_INITDIALOG:
\r
10131 SmAccessListInit(hWnd, s);
\r
10139 if (SmAddAccess(hWnd, s, false))
\r
10141 SmAccessListRefresh(hWnd, s);
\r
10147 if (SmAddAccess(hWnd, s, true))
\r
10149 SmAccessListRefresh(hWnd, s);
\r
10155 a = LvGetParam(hWnd, L_ACCESS_LIST, LvGetSelected(hWnd, L_ACCESS_LIST));
\r
10158 if (SmEditAccess(hWnd, s, a))
\r
10160 SmAccessListRefresh(hWnd, s);
\r
10167 a = LvGetParam(hWnd, L_ACCESS_LIST, LvGetSelected(hWnd, L_ACCESS_LIST));
\r
10171 if (IsInList(s->AccessList, a))
\r
10173 Delete(s->AccessList, a);
\r
10176 for (i = 0;i < LIST_NUM(s->AccessList);i++)
\r
10178 ACCESS *a = LIST_DATA(s->AccessList, i);
\r
10181 SmAccessListRefresh(hWnd, s);
\r
10192 RPC_ENUM_ACCESS_LIST t;
\r
10193 Zero(&t, sizeof(t));
\r
10194 StrCpy(t.HubName, sizeof(t.HubName), s->Hub->HubName);
\r
10195 t.NumAccess = LIST_NUM(s->AccessList);
\r
10196 t.Accesses = ZeroMalloc(sizeof(ACCESS) * t.NumAccess);
\r
10197 for (i = 0;i < LIST_NUM(s->AccessList);i++)
\r
10199 ACCESS *access = LIST_DATA(s->AccessList, i);
\r
10200 Copy(&t.Accesses[i], access, sizeof(ACCESS));
\r
10203 ok = CALL(hWnd, ScSetAccessList(s->Rpc, &t));
\r
10204 FreeRpcEnumAccessList(&t);
\r
10207 EndDialog(hWnd, true);
\r
10220 n = (NMHDR *)lParam;
\r
10221 switch (n->idFrom)
\r
10223 case L_ACCESS_LIST:
\r
10226 case LVN_ITEMCHANGED:
\r
10227 SmAccessListUpdate(hWnd, s);
\r
10235 EndDialog(hWnd, false);
\r
10239 LvStandardHandler(hWnd, msg, wParam, lParam, L_ACCESS_LIST);
\r
10246 void SmAccessListDlg(HWND hWnd, SM_HUB *s)
\r
10248 SM_ACCESS_LIST a;
\r
10250 RPC_ENUM_ACCESS_LIST t;
\r
10253 if (hWnd == NULL || s == NULL)
\r
10258 Zero(&a, sizeof(a));
\r
10263 Zero(&t, sizeof(t));
\r
10264 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
10265 if (CALL(hWnd, ScEnumAccess(s->Rpc, &t)) == false)
\r
10270 a.AccessList = NewListFast(CmpAccessList);
\r
10272 for (i = 0;i < t.NumAccess;i++)
\r
10274 ACCESS *access = ZeroMalloc(sizeof(ACCESS));
\r
10275 Copy(access, &t.Accesses[i], sizeof(ACCESS));
\r
10277 Add(a.AccessList, access);
\r
10281 Sort(a.AccessList);
\r
10282 FreeRpcEnumAccessList(&t);
\r
10285 ret = Dialog(hWnd, D_SM_ACCESS_LIST, SmAccessListProc, &a);
\r
10287 for (i = 0;i < LIST_NUM(a.AccessList);i++)
\r
10289 ACCESS *access = LIST_DATA(a.AccessList, i);
\r
10292 ReleaseList(a.AccessList);
\r
10296 void SmEditGroupDlgInit(HWND hWnd, SM_EDIT_GROUP *g)
\r
10298 RPC_SET_GROUP *group;
\r
10301 if (hWnd == NULL || g == NULL)
\r
10306 SetIcon(hWnd, 0, ICO_GROUP);
\r
10308 group = &g->SetGroup;
\r
10310 if (g->EditMode == false)
\r
10312 SetText(hWnd, 0, _UU("SM_EDIT_GROUP_CAPTION_1"));
\r
10316 wchar_t tmp[MAX_SIZE];
\r
10317 UniFormat(tmp, sizeof(tmp), _UU("SM_EDIT_GROUP_CAPTION_2"), group->Name);
\r
10318 SetText(hWnd, 0, tmp);
\r
10321 SetTextA(hWnd, E_GROUPNAME, group->Name);
\r
10322 SetText(hWnd, E_REALNAME, group->Realname);
\r
10323 SetText(hWnd, E_NOTE, group->Note);
\r
10325 g->Inited = true;
\r
10327 if (g->EditMode == false)
\r
10329 Disable(hWnd, L_STATUS);
\r
10333 LvInit(hWnd, L_STATUS);
\r
10334 LvInsertColumn(hWnd, L_STATUS, 0, _UU("SM_STATUS_COLUMN_1"), 0);
\r
10335 LvInsertColumn(hWnd, L_STATUS, 1, _UU("SM_STATUS_COLUMN_2"), 0);
\r
10336 LvSetStyle(hWnd, L_STATUS, LVS_EX_GRIDLINES);
\r
10338 b = LvInsertStart();
\r
10340 SmInsertTrafficInfo(b, &group->Traffic);
\r
10342 LvInsertEnd(b, hWnd, L_STATUS);
\r
10344 LvAutoSize(hWnd, L_STATUS);
\r
10347 Check(hWnd, R_POLICY, group->Policy != NULL);
\r
10351 Disable(hWnd, E_GROUPNAME);
\r
10352 FocusEx(hWnd, E_REALNAME);
\r
10355 SmEditGroupDlgUpdate(hWnd, g);
\r
10359 void SmEditGroupDlgUpdate(HWND hWnd, SM_EDIT_GROUP *g)
\r
10362 RPC_SET_GROUP *group;
\r
10364 if (hWnd == NULL || g == NULL)
\r
10369 if (g->Inited == false)
\r
10374 group = &g->SetGroup;
\r
10376 GetTxtA(hWnd, E_GROUPNAME, group->Name, sizeof(group->Name));
\r
10377 Trim(group->Name);
\r
10379 if (IsUserName(group->Name) == false)
\r
10384 GetTxt(hWnd, E_REALNAME, group->Realname, sizeof(group->Realname));
\r
10385 UniTrim(group->Realname);
\r
10387 GetTxt(hWnd, E_NOTE, group->Note, sizeof(group->Note));
\r
10388 UniTrim(group->Note);
\r
10390 SetEnable(hWnd, B_POLICY, IsChecked(hWnd, R_POLICY));
\r
10392 if (IsChecked(hWnd, R_POLICY))
\r
10394 if (group->Policy == NULL)
\r
10400 SetEnable(hWnd, IDOK, ok);
\r
10404 void SmEditGroupDlgOnOk(HWND hWnd, SM_EDIT_GROUP *g)
\r
10406 RPC_SET_GROUP *group;
\r
10409 if (hWnd == NULL || g == NULL)
\r
10414 SmEditGroupDlgUpdate(hWnd, g);
\r
10416 group = &g->SetGroup;
\r
10418 if (IsChecked(hWnd, R_POLICY) == false)
\r
10420 if (group->Policy != NULL)
\r
10422 Free(group->Policy);
\r
10423 group->Policy = NULL;
\r
10427 Zero(&t, sizeof(t));
\r
10428 Copy(&t, group, sizeof(RPC_SET_GROUP));
\r
10430 t.Policy = ClonePolicy(group->Policy);
\r
10432 if (g->EditMode == false)
\r
10434 if (CALL(hWnd, ScCreateGroup(g->Rpc, &t)) == false)
\r
10436 FocusEx(hWnd, E_GROUPNAME);
\r
10442 if (CALL(hWnd, ScSetGroup(g->Rpc, &t)) == false)
\r
10448 FreeRpcSetGroup(&t);
\r
10450 if (g->EditMode == false)
\r
10452 MsgBoxEx(hWnd, MB_ICONINFORMATION, _UU("SM_GROUP_CREATED"), group->Name);
\r
10455 EndDialog(hWnd, true);
\r
10458 // グループ編集ダイアログプロシージャ
\r
10459 UINT SmEditGroupDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
10461 SM_EDIT_GROUP *g = (SM_EDIT_GROUP *)param;
\r
10462 wchar_t tmp[MAX_SIZE];
\r
10465 if (hWnd == NULL)
\r
10472 case WM_INITDIALOG:
\r
10474 SmEditGroupDlgInit(hWnd, g);
\r
10478 switch (LOWORD(wParam))
\r
10480 case E_GROUPNAME:
\r
10484 SmEditGroupDlgUpdate(hWnd, g);
\r
10492 SmEditGroupDlgOnOk(hWnd, g);
\r
10501 if (IsChecked(hWnd, R_POLICY))
\r
10503 Focus(hWnd, B_POLICY);
\r
10509 UniFormat(tmp, sizeof(tmp), _UU("SM_GROUP_POLICY_CAPTION"), g->SetGroup.Name);
\r
10510 if (g->SetGroup.Policy == NULL)
\r
10512 POLICY *p = ClonePolicy(GetDefaultPolicy());
\r
10513 if (SmPolicyDlgEx2(hWnd, p, tmp, false, g->p->PolicyVer))
\r
10515 g->SetGroup.Policy = p;
\r
10516 SmEditGroupDlgUpdate(hWnd, g);
\r
10525 SmPolicyDlgEx2(hWnd, g->SetGroup.Policy, tmp, false, g->p->PolicyVer);
\r
10532 n = (NMHDR *)lParam;
\r
10533 switch (n->idFrom)
\r
10538 case LVN_ITEMCHANGED:
\r
10539 SmEditGroupDlgUpdate(hWnd, g);
\r
10547 EndDialog(hWnd, false);
\r
10555 bool SmEditGroupDlg(HWND hWnd, SM_GROUP *s, char *name)
\r
10558 RPC_SET_GROUP *group;
\r
10561 if (hWnd == NULL || s == NULL)
\r
10566 Zero(&g, sizeof(g));
\r
10567 g.EditMode = true;
\r
10572 group = &g.SetGroup;
\r
10574 StrCpy(group->Name, sizeof(group->Name), name);
\r
10575 StrCpy(group->HubName, sizeof(group->HubName), s->Hub->HubName);
\r
10577 if (CALL(hWnd, ScGetGroup(s->Rpc, group)) == false)
\r
10582 ret = Dialog(hWnd, D_SM_EDIT_GROUP, SmEditGroupDlgProc, &g);
\r
10584 FreeRpcSetGroup(group);
\r
10590 bool SmCreateGroupDlg(HWND hWnd, SM_GROUP *s)
\r
10593 RPC_SET_GROUP *group;
\r
10596 if (hWnd == NULL || s == NULL)
\r
10601 Zero(&g, sizeof(g));
\r
10602 g.EditMode = false;
\r
10607 group = &g.SetGroup;
\r
10609 StrCpy(group->HubName, sizeof(group->HubName), s->Hub->HubName);
\r
10611 ret = Dialog(hWnd, D_SM_EDIT_GROUP, SmEditGroupDlgProc, &g);
\r
10613 FreeRpcSetGroup(group);
\r
10619 void SmGroupListDlgInit(HWND hWnd, SM_GROUP *s)
\r
10621 if (hWnd == NULL || s == NULL)
\r
10626 SetIcon(hWnd, 0, ICO_GROUP);
\r
10629 LvInit(hWnd, L_GROUP);
\r
10630 LvInsertColumn(hWnd, L_GROUP, 0, _UU("SM_GROUPLIST_NAME"), 130);
\r
10631 LvInsertColumn(hWnd, L_GROUP, 1, _UU("SM_GROUPLIST_REALNAME"), 130);
\r
10632 LvInsertColumn(hWnd, L_GROUP, 2, _UU("SM_GROUPLIST_NOTE"), 170);
\r
10633 LvInsertColumn(hWnd, L_GROUP, 3, _UU("SM_GROUPLIST_NUMUSERS"), 80);
\r
10634 LvSetStyle(hWnd, L_GROUP, LVS_EX_GRIDLINES);
\r
10636 FormatText(hWnd, S_TITLE, s->Hub->HubName);
\r
10638 SmGroupListDlgRefresh(hWnd, s);
\r
10640 if (s->SelectMode)
\r
10642 SetStyle(hWnd, L_GROUP, LVS_SINGLESEL);
\r
10645 if (s->SelectMode)
\r
10647 wchar_t tmp[MAX_SIZE];
\r
10648 SetText(hWnd, IDOK, _UU("SM_SELECT_GROUP"));
\r
10650 if (s->SelectedGroupName != NULL)
\r
10653 StrToUni(tmp, sizeof(tmp), s->SelectedGroupName);
\r
10654 i = LvSearchStr(hWnd, L_GROUP, 0, tmp);
\r
10655 if (i != INFINITE)
\r
10657 LvSelect(hWnd, L_GROUP, i);
\r
10664 void SmGroupListDlgUpdate(HWND hWnd, SM_GROUP *s)
\r
10667 if (hWnd == NULL || s == NULL)
\r
10672 if (LvIsSelected(hWnd, L_GROUP) == false || LvIsMultiMasked(hWnd, L_GROUP))
\r
10677 SetEnable(hWnd, IDOK, ok);
\r
10678 SetEnable(hWnd, B_USER, ok);
\r
10679 SetEnable(hWnd, B_STATUS, ok);
\r
10681 if (s->SelectMode == false)
\r
10683 SetEnable(hWnd, B_DELETE, ok);
\r
10687 SetEnable(hWnd, B_DELETE, false);
\r
10688 SetEnable(hWnd, B_USER, false);
\r
10689 SetText(hWnd, IDCANCEL, _UU("SM_SELECT_NO_GROUP"));
\r
10694 void SmGroupListDlgRefresh(HWND hWnd, SM_GROUP *s)
\r
10696 RPC_ENUM_GROUP t;
\r
10699 if (hWnd == NULL || s == NULL)
\r
10704 Zero(&t, sizeof(t));
\r
10705 StrCpy(t.HubName, sizeof(t.HubName), s->Hub->HubName);
\r
10707 if (CALL(hWnd, ScEnumGroup(s->Rpc, &t)) == false)
\r
10712 b = LvInsertStart();
\r
10714 for (i = 0;i < t.NumGroup;i++)
\r
10716 wchar_t tmp1[MAX_SIZE];
\r
10717 wchar_t tmp2[MAX_SIZE];
\r
10718 RPC_ENUM_GROUP_ITEM *e = &t.Groups[i];
\r
10720 StrToUni(tmp1, sizeof(tmp1), e->Name);
\r
10721 UniToStru(tmp2, e->NumUsers);
\r
10723 LvInsertAdd(b, e->DenyAccess == false ? ICO_GROUP : ICO_GROUP_DENY,
\r
10724 NULL, 4, tmp1, e->Realname, e->Note, tmp2);
\r
10727 LvInsertEnd(b, hWnd, L_GROUP);
\r
10729 SmGroupListDlgUpdate(hWnd, s);
\r
10731 FreeRpcEnumGroup(&t);
\r
10734 // グループリストダイアログプロシージャ
\r
10735 UINT SmGroupListDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
10737 SM_GROUP *s = (SM_GROUP *)param;
\r
10741 if (hWnd == NULL)
\r
10748 case WM_INITDIALOG:
\r
10750 SmGroupListDlgInit(hWnd, s);
\r
10758 if (SmCreateGroupDlg(hWnd, s))
\r
10760 SmGroupListDlgRefresh(hWnd, s);
\r
10766 tmp = LvGetSelectedStr(hWnd, L_GROUP, 0);
\r
10769 char name[MAX_SIZE];
\r
10770 UniToStr(name, sizeof(name), tmp);
\r
10772 if (s->SelectMode == false)
\r
10774 if (SmEditGroupDlg(hWnd, s, name))
\r
10776 SmGroupListDlgRefresh(hWnd, s);
\r
10781 s->SelectedGroupName = CopyStr(name);
\r
10782 EndDialog(hWnd, true);
\r
10790 tmp = LvGetSelectedStr(hWnd, L_GROUP, 0);
\r
10793 char name[MAX_SIZE];
\r
10794 RPC_DELETE_USER t;
\r
10795 UniToStr(name, sizeof(name), tmp);
\r
10797 if (MsgBoxEx(hWnd, MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2,
\r
10798 _UU("SM_GROUP_DELETE_MSG"), name) == IDYES)
\r
10800 Zero(&t, sizeof(t));
\r
10801 StrCpy(t.HubName, sizeof(t.HubName), s->Hub->HubName);
\r
10802 StrCpy(t.Name, sizeof(t.Name), name);
\r
10804 if (CALL(hWnd, ScDeleteGroup(s->Rpc, &t)))
\r
10806 SmGroupListDlgRefresh(hWnd, s);
\r
10816 tmp = LvGetSelectedStr(hWnd, L_GROUP, 0);
\r
10819 char name[MAX_SIZE];
\r
10820 UniToStr(name, sizeof(name), tmp);
\r
10821 SmUserListDlgEx(hWnd, s->Hub, name, false);
\r
10828 SmGroupListDlgRefresh(hWnd, s);
\r
10839 n = (NMHDR *)lParam;
\r
10840 switch (n->idFrom)
\r
10845 case LVN_ITEMCHANGED:
\r
10846 SmGroupListDlgUpdate(hWnd, s);
\r
10854 EndDialog(hWnd, false);
\r
10858 LvStandardHandler(hWnd, msg, wParam, lParam, L_GROUP);
\r
10863 // グループリストダイアログ (選択モード)
\r
10864 char *SmSelectGroupDlg(HWND hWnd, SM_HUB *s, char *default_name)
\r
10868 if (hWnd == NULL || s == NULL)
\r
10873 Zero(&g, sizeof(g));
\r
10877 g.SelectMode = true;
\r
10878 g.SelectedGroupName = default_name;
\r
10880 if (Dialog(hWnd, D_SM_GROUP, SmGroupListDlgProc, &g) == false)
\r
10885 return g.SelectedGroupName;
\r
10889 void SmGroupListDlg(HWND hWnd, SM_HUB *s)
\r
10893 if (hWnd == NULL || s == NULL)
\r
10898 Zero(&g, sizeof(g));
\r
10902 g.SelectMode = false;
\r
10904 Dialog(hWnd, D_SM_GROUP, SmGroupListDlgProc, &g);
\r
10908 bool SmRefreshUserInfo(HWND hWnd, SM_SERVER *s, void *param)
\r
10911 SM_USER_INFO *p = (SM_USER_INFO *)param;
\r
10913 wchar_t tmp[MAX_SIZE];
\r
10917 if (hWnd == NULL || s == NULL || param == NULL)
\r
10922 username = p->Username;
\r
10924 Zero(&t, sizeof(t));
\r
10925 StrCpy(t.HubName, sizeof(t.HubName), p->Hub->HubName);
\r
10926 StrCpy(t.Name, sizeof(t.Name), username);
\r
10928 if (CALL(hWnd, ScGetUser(s->Rpc, &t)) == false)
\r
10933 b = LvInsertStart();
\r
10935 StrToUni(tmp, sizeof(tmp), t.Name);
\r
10936 LvInsertAdd(b, ICO_USER, NULL, 2, _UU("SM_USERINFO_NAME"), tmp);
\r
10938 if (StrLen(t.GroupName) != 0)
\r
10940 StrToUni(tmp, sizeof(tmp), t.GroupName);
\r
10941 LvInsertAdd(b, ICO_GROUP, NULL, 2, _UU("SM_USERINFO_GROUP"), tmp);
\r
10944 GetDateTimeStrEx64(tmp, sizeof(tmp), SystemToLocal64(t.CreatedTime), NULL);
\r
10945 LvInsertAdd(b, ICO_USER_ADMIN, NULL, 2, _UU("SM_USERINFO_CREATE"), tmp);
\r
10947 GetDateTimeStrEx64(tmp, sizeof(tmp), SystemToLocal64(t.UpdatedTime), NULL);
\r
10948 LvInsertAdd(b, ICO_USER_ADMIN, NULL, 2, _UU("SM_USERINFO_UPDATE"), tmp);
\r
10950 if (t.ExpireTime != 0)
\r
10952 GetDateTimeStrEx64(tmp, sizeof(tmp), SystemToLocal64(t.ExpireTime), NULL);
\r
10953 LvInsertAdd(b, ICO_WARNING, NULL, 2, _UU("SM_USERINFO_EXPIRE"), tmp);
\r
10956 SmInsertTrafficInfo(b, &t.Traffic);
\r
10958 UniToStru(tmp, t.NumLogin);
\r
10959 LvInsertAdd(b, ICO_LINK, NULL, 2, _UU("SM_USERINFO_NUMLOGIN"), tmp);
\r
10961 LvInsertEnd(b, hWnd, L_STATUS);
\r
10963 FreeRpcSetUser(&t);
\r
10969 void SmPolicyDlgInit(HWND hWnd, SM_POLICY *s)
\r
10973 if (hWnd == NULL || s == NULL)
\r
10978 SetIcon(hWnd, 0, ICO_MACHINE);
\r
10979 SetText(hWnd, 0, s->Caption);
\r
10980 SetText(hWnd, S_TITLE, s->Caption);
\r
10981 DlgFont(hWnd, S_BOLD, 10, true);
\r
10982 DlgFont(hWnd, S_BOLD2, 10, true);
\r
10984 DlgFont(hWnd, S_POLICY_TITLE, 11, false);
\r
10985 DlgFont(hWnd, E_POLICY_DESCRIPTION, 10, false);
\r
10987 Zero(&cp, sizeof(cp));
\r
10988 cp.Policy = s->Policy;
\r
10989 cp.Extension = true;
\r
10991 LvInit(hWnd, L_POLICY);
\r
10992 LvInsertColumn(hWnd, L_POLICY, 0, _UU("POL_TITLE_STR"), 250);
\r
10993 LvInsertColumn(hWnd, L_POLICY, 1, _UU("POL_VALUE_STR"), 150);
\r
10994 LvSetStyle(hWnd, L_POLICY, LVS_EX_GRIDLINES);
\r
10996 CmPolicyDlgPrintEx2(hWnd, &cp, s->CascadeMode, s->Ver);
\r
10998 LvSelect(hWnd, L_POLICY, 0);
\r
11000 s->Inited = true;
\r
11001 SmPolicyDlgUpdate(hWnd, s);
\r
11005 void SmPolicyDlgUpdate(HWND hWnd, SM_POLICY *s)
\r
11008 bool value_changed = false;
\r
11011 if (hWnd == NULL || s == NULL)
\r
11016 if (s->Inited == false)
\r
11021 i = LvGetSelected(hWnd, L_POLICY);
\r
11022 if (i != INFINITE)
\r
11024 i = (UINT)LvGetParam(hWnd, L_POLICY, i);
\r
11026 if (i == INFINITE || i >= NUM_POLICY_ITEM)
\r
11028 SetText(hWnd, S_POLICY_TITLE, _UU("SM_POLICY_INIT_TITLE"));
\r
11029 SetText(hWnd, E_POLICY_DESCRIPTION, L"");
\r
11030 Disable(hWnd, S_POLICY_TITLE);
\r
11031 Disable(hWnd, S_BOLD);
\r
11032 Hide(hWnd, S_BOLD2);
\r
11033 Hide(hWnd, R_ENABLE);
\r
11034 Hide(hWnd, R_DISABLE);
\r
11035 Hide(hWnd, R_DEFINE);
\r
11036 Hide(hWnd, E_VALUE);
\r
11037 Hide(hWnd, S_TANI);
\r
11038 Hide(hWnd, S_LIMIT);
\r
11042 POLICY_ITEM *item = &policy_item[i];
\r
11043 bool changed = false;
\r
11044 wchar_t *tmp = GetText(hWnd, S_POLICY_TITLE);
\r
11045 if (UniStrCmp(tmp, GetPolicyTitle(i)) != 0)
\r
11050 SetText(hWnd, S_POLICY_TITLE, GetPolicyTitle(i));
\r
11051 SetText(hWnd, E_POLICY_DESCRIPTION, GetPolicyDescription(i));
\r
11052 Enable(hWnd, S_POLICY_TITLE);
\r
11053 Enable(hWnd, S_BOLD);
\r
11054 Show(hWnd, S_BOLD2);
\r
11056 if (item->TypeInt == false)
\r
11058 Show(hWnd, R_ENABLE);
\r
11059 Show(hWnd, R_DISABLE);
\r
11060 Hide(hWnd, R_DEFINE);
\r
11061 Hide(hWnd, E_VALUE);
\r
11062 Hide(hWnd, S_TANI);
\r
11063 Hide(hWnd, S_LIMIT);
\r
11067 if (POLICY_BOOL(s->Policy, i))
\r
11069 Check(hWnd, R_ENABLE, true);
\r
11070 Check(hWnd, R_DISABLE, false);
\r
11074 Check(hWnd, R_ENABLE, false);
\r
11075 Check(hWnd, R_DISABLE, true);
\r
11079 if ((!(POLICY_BOOL(s->Policy, i))) != (!(IsChecked(hWnd, R_ENABLE))))
\r
11081 POLICY_BOOL(s->Policy, i) = IsChecked(hWnd, R_ENABLE);
\r
11082 value_changed = true;
\r
11087 wchar_t tmp[MAX_SIZE];
\r
11089 if (item->AllowZero)
\r
11093 Check(hWnd, R_DEFINE, POLICY_INT(s->Policy, i) != 0);
\r
11094 Enable(hWnd, R_DEFINE);
\r
11095 SetIntEx(hWnd, E_VALUE, POLICY_INT(s->Policy, i));
\r
11098 SetEnable(hWnd, E_VALUE, IsChecked(hWnd, R_DEFINE));
\r
11099 SetEnable(hWnd, S_TANI, IsChecked(hWnd, R_DEFINE));
\r
11100 SetEnable(hWnd, S_LIMIT, IsChecked(hWnd, R_DEFINE));
\r
11106 Check(hWnd, R_DEFINE, true);
\r
11107 Disable(hWnd, R_DEFINE);
\r
11108 SetInt(hWnd, E_VALUE, POLICY_INT(s->Policy, i));
\r
11111 SetEnable(hWnd, E_VALUE, IsChecked(hWnd, R_DEFINE));
\r
11112 SetEnable(hWnd, S_TANI, IsChecked(hWnd, R_DEFINE));
\r
11113 SetEnable(hWnd, S_LIMIT, IsChecked(hWnd, R_DEFINE));
\r
11116 UniReplaceStrEx(tmp, sizeof(tmp), _UU(policy_item[i].FormatStr),
\r
11117 L"%u ", L"", false);
\r
11118 UniReplaceStrEx(tmp, sizeof(tmp), tmp,
\r
11119 L"%u", L"", false);
\r
11121 SetText(hWnd, S_TANI, tmp);
\r
11123 UniFormat(tmp, sizeof(tmp), _UU("SM_LIMIT_STR"), policy_item[i].MinValue, policy_item[i].MaxValue);
\r
11124 SetText(hWnd, S_LIMIT, tmp);
\r
11126 Hide(hWnd, R_ENABLE);
\r
11127 Hide(hWnd, R_DISABLE);
\r
11128 Show(hWnd, E_VALUE);
\r
11129 Show(hWnd, R_DEFINE);
\r
11130 Show(hWnd, S_TANI);
\r
11131 Show(hWnd, S_LIMIT);
\r
11133 value = GetInt(hWnd, E_VALUE);
\r
11135 if (item->AllowZero && (IsChecked(hWnd, R_DEFINE) == false))
\r
11141 if (value < policy_item[i].MinValue || value > policy_item[i].MaxValue)
\r
11149 if (POLICY_INT(s->Policy, i) != value)
\r
11151 POLICY_INT(s->Policy, i) = value;
\r
11152 value_changed = true;
\r
11158 SetEnable(hWnd, IDOK, ok);
\r
11159 SetEnable(hWnd, L_POLICY, ok);
\r
11161 if (value_changed)
\r
11164 Zero(&cp, sizeof(cp));
\r
11165 cp.Policy = s->Policy;
\r
11166 cp.Extension = true;
\r
11168 CmPolicyDlgPrintEx(hWnd, &cp, s->CascadeMode);
\r
11173 void SmPolicyDlgOk(HWND hWnd, SM_POLICY *s)
\r
11176 if (hWnd == NULL || s == NULL)
\r
11181 EndDialog(hWnd, true);
\r
11184 // ポリシー ダイアログ ボックス プロシージャ
\r
11185 UINT SmPolicyDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
11187 SM_POLICY *s = (SM_POLICY *)param;
\r
11190 if (hWnd == NULL)
\r
11197 case WM_INITDIALOG:
\r
11199 SmPolicyDlgInit(hWnd, s);
\r
11203 switch (LOWORD(wParam))
\r
11209 SmPolicyDlgUpdate(hWnd, s);
\r
11217 SmPolicyDlgOk(hWnd, s);
\r
11226 if (IsChecked(hWnd, R_DEFINE))
\r
11228 FocusEx(hWnd, E_VALUE);
\r
11235 n = (NMHDR *)lParam;
\r
11236 switch (n->idFrom)
\r
11241 case LVN_ITEMCHANGED:
\r
11242 SmPolicyDlgUpdate(hWnd, s);
\r
11250 EndDialog(hWnd, false);
\r
11257 // ポリシー ダイアログ ボックスの表示
\r
11258 bool SmPolicyDlg(HWND hWnd, POLICY *p, wchar_t *caption)
\r
11260 return SmPolicyDlgEx(hWnd, p, caption, false);
\r
11262 bool SmPolicyDlgEx(HWND hWnd, POLICY *p, wchar_t *caption, bool cascade_mode)
\r
11264 return SmPolicyDlgEx2(hWnd, p, caption, cascade_mode, POLICY_CURRENT_VERSION);
\r
11266 bool SmPolicyDlgEx2(HWND hWnd, POLICY *p, wchar_t *caption, bool cascade_mode, UINT ver)
\r
11271 if (hWnd == NULL || p == NULL)
\r
11276 if (caption == NULL)
\r
11278 caption = _UU("SM_POLICY_DEF_CAPTION");
\r
11281 Zero(&s, sizeof(s));
\r
11282 s.Caption = caption;
\r
11283 s.Policy = ClonePolicy(p);
\r
11284 s.CascadeMode = cascade_mode;
\r
11287 ret = Dialog(hWnd, D_SM_POLICY, SmPolicyDlgProc, &s);
\r
11291 Copy(p, s.Policy, sizeof(POLICY));
\r
11300 void SmEditUserDlgOk(HWND hWnd, SM_EDIT_USER *s)
\r
11305 if (hWnd == NULL || s == NULL)
\r
11310 SmEditUserDlgUpdate(hWnd, s);
\r
11312 Zero(&t, sizeof(t));
\r
11315 StrCpy(t.HubName, sizeof(t.HubName), u->HubName);
\r
11316 StrCpy(t.Name, sizeof(t.Name), u->Name);
\r
11317 StrCpy(t.GroupName, sizeof(t.GroupName), u->GroupName);
\r
11318 UniStrCpy(t.Realname, sizeof(t.Realname), u->Realname);
\r
11319 UniStrCpy(t.Note, sizeof(t.Note), u->Note);
\r
11320 t.ExpireTime = u->ExpireTime;
\r
11321 t.AuthType = u->AuthType;
\r
11322 t.AuthData = CopyAuthData(u->AuthData, t.AuthType);
\r
11324 if (IsChecked(hWnd, R_POLICY))
\r
11326 t.Policy = ClonePolicy(u->Policy);
\r
11333 if (s->EditMode == false)
\r
11335 if (CALL(hWnd, ScCreateUser(s->Rpc, &t)) == false)
\r
11337 FocusEx(hWnd, E_USERNAME);
\r
11340 FreeRpcSetUser(&t);
\r
11342 MsgBoxEx(hWnd, MB_ICONINFORMATION, _UU("SM_USER_CREEATE_OK"), u->Name);
\r
11346 if (CALL(hWnd, ScSetUser(s->Rpc, &t)) == false)
\r
11348 FocusEx(hWnd, E_REALNAME);
\r
11351 FreeRpcSetUser(&t);
\r
11354 EndDialog(hWnd, true);
\r
11358 void SmEditUserDlgInit(HWND hWnd, SM_EDIT_USER *s)
\r
11361 wchar_t tmp[MAX_SIZE];
\r
11363 UINT icons[6] = {ICO_PASS, ICO_KEY, ICO_CERT, ICO_SERVER_CERT,
\r
11364 ICO_TOWER, ICO_LINK};
\r
11368 if (hWnd == NULL || s == NULL)
\r
11373 SetIcon(hWnd, 0, ICO_USER);
\r
11378 LvInit(hWnd, L_AUTH);
\r
11379 LvSetStyle(hWnd, L_AUTH, LVS_EX_GRIDLINES);
\r
11381 GetClientRect(DlgItem(hWnd, L_AUTH), &rect);
\r
11382 LvInsertColumn(hWnd, L_AUTH, 0, L"Name", rect.right - rect.left);
\r
11384 for (i = 0;i < 6;i++)
\r
11386 LvInsert(hWnd, L_AUTH, icons[i], (void *)i, 1, SmGetAuthTypeStr(i));
\r
11390 SetTextA(hWnd, E_USERNAME, u->Name);
\r
11391 SetText(hWnd, E_REALNAME, u->Realname);
\r
11392 SetText(hWnd, E_NOTE, u->Note);
\r
11396 if (u->ExpireTime == 0)
\r
11399 Check(hWnd, R_EXPIRES, false);
\r
11400 GetLocalTime(&st);
\r
11401 UINT64ToSystem(&st, SystemToUINT64(&st) + (60 * 60 * 24 * 1000));
\r
11402 st.wHour = st.wMinute = st.wSecond = st.wMilliseconds = 0;
\r
11403 DateTime_SetSystemtime(DlgItem(hWnd, E_EXPIRES_DATE), GDT_VALID, &st);
\r
11404 DateTime_SetSystemtime(DlgItem(hWnd, E_EXPIRES_TIME), GDT_VALID, &st);
\r
11409 UINT64ToSystem(&st, SystemToLocal64(u->ExpireTime));
\r
11410 Check(hWnd, R_EXPIRES, true);
\r
11411 DateTime_SetSystemtime(DlgItem(hWnd, E_EXPIRES_DATE), GDT_VALID, &st);
\r
11412 DateTime_SetSystemtime(DlgItem(hWnd, E_EXPIRES_TIME), GDT_VALID, &st);
\r
11415 SetStyle(hWnd, E_EXPIRES_DATE, DTS_LONGDATEFORMAT);
\r
11416 SetWindowLong(DlgItem(hWnd, E_EXPIRES_TIME), GWL_STYLE, WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP | DTS_RIGHTALIGN | DTS_TIMEFORMAT | DTS_UPDOWN);
\r
11419 SetTextA(hWnd, E_GROUP, u->GroupName);
\r
11422 LvSelect(hWnd, L_AUTH, u->AuthType);
\r
11424 SetText(hWnd, S_CERT_INFO, _UU("SM_EDIT_USER_CERT_INFO"));
\r
11426 switch (u->AuthType)
\r
11428 case AUTHTYPE_PASSWORD:
\r
11431 SetTextA(hWnd, E_PASSWORD1, HIDDEN_PASSWORD);
\r
11432 SetTextA(hWnd, E_PASSWORD2, HIDDEN_PASSWORD);
\r
11436 case AUTHTYPE_USERCERT:
\r
11437 SmGetCertInfoStr(tmp, sizeof(tmp), ((AUTHUSERCERT *)u->AuthData)->UserX);
\r
11440 case AUTHTYPE_ROOTCERT:
\r
11441 if (u->AuthData != NULL)
\r
11443 AUTHROOTCERT *c = (AUTHROOTCERT *)u->AuthData;
\r
11444 if (c->CommonName != NULL && UniStrLen(c->CommonName) != 0)
\r
11446 Check(hWnd, R_CN, true);
\r
11447 SetText(hWnd, E_CN, c->CommonName);
\r
11451 Check(hWnd, R_CN, false);
\r
11453 if (c->Serial != NULL && c->Serial->size != 0)
\r
11455 X_SERIAL *s = c->Serial;
\r
11457 UINT tmp_size = s->size * 3 + 1;
\r
11458 tmp = ZeroMalloc(tmp_size);
\r
11459 BinToStrEx(tmp, tmp_size, s->data, s->size);
\r
11460 SetTextA(hWnd, E_SERIAL, tmp);
\r
11462 Check(hWnd, R_SERIAL, true);
\r
11466 Check(hWnd, R_SERIAL, false);
\r
11471 case AUTHTYPE_RADIUS:
\r
11472 if (u->AuthData != NULL)
\r
11474 AUTHRADIUS *r = (AUTHRADIUS *)u->AuthData;
\r
11475 if (UniStrLen(r->RadiusUsername) != 0)
\r
11477 Check(hWnd, R_SET_RADIUS_USERNAME, true);
\r
11478 SetText(hWnd, E_RADIUS_USERNAME, r->RadiusUsername);
\r
11482 Check(hWnd, R_SET_RADIUS_USERNAME, false);
\r
11487 case AUTHTYPE_NT:
\r
11488 if (u->AuthData != NULL)
\r
11490 AUTHNT *n = (AUTHNT *)u->AuthData;
\r
11491 if (UniStrLen(n->NtUsername) != 0)
\r
11493 Check(hWnd, R_SET_RADIUS_USERNAME, true);
\r
11494 SetText(hWnd, E_RADIUS_USERNAME, n->NtUsername);
\r
11498 Check(hWnd, R_SET_RADIUS_USERNAME, false);
\r
11504 if (u->Policy != NULL)
\r
11506 Check(hWnd, R_POLICY, true);
\r
11509 s->Inited = true;
\r
11511 SmEditUserDlgUpdate(hWnd, s);
\r
11513 if (s->EditMode == false)
\r
11515 Focus(hWnd, E_USERNAME);
\r
11516 SetText(hWnd, 0, _UU("SM_EDIT_USER_CAPTION_1"));
\r
11520 wchar_t tmp[MAX_SIZE];
\r
11521 UniFormat(tmp, sizeof(tmp), _UU("SM_EDIT_USER_CAPTION_2"), s->SetUser.Name);
\r
11522 SetText(hWnd, 0, tmp);
\r
11524 Disable(hWnd, E_USERNAME);
\r
11525 FocusEx(hWnd, E_REALNAME);
\r
11529 // ユーザー編集コントロール更新
\r
11530 void SmEditUserDlgUpdate(HWND hWnd, SM_EDIT_USER *s)
\r
11534 UINT old_authtype;
\r
11535 char tmp1[MAX_SIZE];
\r
11536 char tmp2[MAX_SIZE];
\r
11537 bool authtype_changed = false;
\r
11539 if (hWnd == NULL || s == NULL)
\r
11544 if (s->Inited == false)
\r
11552 GetTxtA(hWnd, E_USERNAME, u->Name, sizeof(u->Name));
\r
11554 if (StrLen(u->Name) == 0 || IsUserName(u->Name) == false)
\r
11560 GetTxt(hWnd, E_REALNAME, u->Realname, sizeof(u->Realname));
\r
11561 UniTrim(u->Realname);
\r
11564 GetTxt(hWnd, E_NOTE, u->Note, sizeof(u->Note));
\r
11565 UniTrim(u->Realname);
\r
11568 GetTxtA(hWnd, E_GROUP, u->GroupName, sizeof(u->GroupName));
\r
11569 Trim(u->GroupName);
\r
11572 if (IsChecked(hWnd, R_EXPIRES) == false)
\r
11574 u->ExpireTime = 0;
\r
11575 Disable(hWnd, E_EXPIRES_DATE);
\r
11576 Disable(hWnd, E_EXPIRES_TIME);
\r
11580 SYSTEMTIME st1, st2;
\r
11581 Enable(hWnd, E_EXPIRES_DATE);
\r
11582 Enable(hWnd, E_EXPIRES_TIME);
\r
11583 DateTime_GetSystemtime(DlgItem(hWnd, E_EXPIRES_DATE), &st1);
\r
11584 DateTime_GetSystemtime(DlgItem(hWnd, E_EXPIRES_TIME), &st2);
\r
11585 st1.wHour = st2.wHour;
\r
11586 st1.wMinute = st2.wMinute;
\r
11587 st1.wSecond = st2.wSecond;
\r
11588 st1.wMilliseconds = st2.wMilliseconds;
\r
11589 u->ExpireTime = LocalToSystem64(SystemToUINT64(&st1));
\r
11593 old_authtype = u->AuthType;
\r
11594 u->AuthType = LvGetSelected(hWnd, L_AUTH);
\r
11596 if (StrCmpi(u->Name, "*") == 0)
\r
11598 if (u->AuthType != AUTHTYPE_RADIUS && u->AuthType != AUTHTYPE_NT)
\r
11604 if (u->AuthType == INFINITE)
\r
11609 if (old_authtype != u->AuthType)
\r
11611 authtype_changed = true;
\r
11614 if (authtype_changed)
\r
11616 FreeAuthData(old_authtype, u->AuthData);
\r
11617 u->AuthData = NULL;
\r
11618 switch (u->AuthType)
\r
11620 case AUTHTYPE_ANONYMOUS:
\r
11621 u->AuthData = NULL;
\r
11624 case AUTHTYPE_PASSWORD:
\r
11625 u->AuthData = NewPasswordAuthData("", "");
\r
11626 GetTxtA(hWnd, E_PASSWORD1, tmp1, sizeof(tmp1));
\r
11627 if (StrCmp(tmp1, HIDDEN_PASSWORD) == 0)
\r
11629 SetTextA(hWnd, E_PASSWORD1, "");
\r
11631 GetTxtA(hWnd, E_PASSWORD2, tmp2, sizeof(tmp2));
\r
11632 if (StrCmp(tmp2, HIDDEN_PASSWORD) == 0)
\r
11634 SetTextA(hWnd, E_PASSWORD2, "");
\r
11638 case AUTHTYPE_USERCERT:
\r
11639 u->AuthData = NewUserCertAuthData(NULL);
\r
11640 SetText(hWnd, S_CERT_INFO, _UU("SM_EDIT_USER_CERT_INFO"));
\r
11643 case AUTHTYPE_ROOTCERT:
\r
11644 u->AuthData = NewRootCertAuthData(NULL, NULL);
\r
11647 case AUTHTYPE_NT:
\r
11648 u->AuthData = NewNTAuthData(L"");
\r
11651 case AUTHTYPE_RADIUS:
\r
11652 u->AuthData = NewRadiusAuthData(L"");
\r
11657 SetEnable(hWnd, S_RADIUS_3, (u->AuthType == AUTHTYPE_RADIUS) || (u->AuthType == AUTHTYPE_NT));
\r
11658 SetEnable(hWnd, R_SET_RADIUS_USERNAME, (u->AuthType == AUTHTYPE_RADIUS) || (u->AuthType == AUTHTYPE_NT));
\r
11659 SetEnable(hWnd, S_RADIUS_1, (u->AuthType == AUTHTYPE_RADIUS) || (u->AuthType == AUTHTYPE_NT));
\r
11661 if (StrCmp(u->Name, "*") == 0)
\r
11663 Check(hWnd, R_SET_RADIUS_USERNAME, false);
\r
11664 Disable(hWnd, R_SET_RADIUS_USERNAME);
\r
11667 if ((u->AuthType == AUTHTYPE_RADIUS) || (u->AuthType == AUTHTYPE_NT))
\r
11669 SetEnable(hWnd, E_RADIUS_USERNAME, IsChecked(hWnd, R_SET_RADIUS_USERNAME));
\r
11670 SetEnable(hWnd, S_RADIUS_2, IsChecked(hWnd, R_SET_RADIUS_USERNAME));
\r
11674 SetEnable(hWnd, E_RADIUS_USERNAME, false);
\r
11675 SetEnable(hWnd, S_RADIUS_2, false);
\r
11678 SetEnable(hWnd, S_PASSWORD_1, u->AuthType == AUTHTYPE_PASSWORD);
\r
11679 SetEnable(hWnd, S_PASSWORD_2, u->AuthType == AUTHTYPE_PASSWORD);
\r
11680 SetEnable(hWnd, S_PASSWORD_3, u->AuthType == AUTHTYPE_PASSWORD);
\r
11681 SetEnable(hWnd, E_PASSWORD1, u->AuthType == AUTHTYPE_PASSWORD);
\r
11682 SetEnable(hWnd, E_PASSWORD2, u->AuthType == AUTHTYPE_PASSWORD);
\r
11684 SetEnable(hWnd, S_USER_CERT_1, u->AuthType == AUTHTYPE_USERCERT);
\r
11685 SetEnable(hWnd, S_CERT_INFO, u->AuthType == AUTHTYPE_USERCERT);
\r
11686 SetEnable(hWnd, B_LOAD_CERT, u->AuthType == AUTHTYPE_USERCERT);
\r
11688 if (u->AuthType == AUTHTYPE_USERCERT)
\r
11690 SetEnable(hWnd, B_VIEW_CERT, ((AUTHUSERCERT *)u->AuthData)->UserX != NULL);
\r
11694 SetEnable(hWnd, B_VIEW_CERT, false);
\r
11697 SetEnable(hWnd, S_ROOT_CERT_1, u->AuthType == AUTHTYPE_ROOTCERT);
\r
11698 SetEnable(hWnd, S_ROOT_CERT_2, u->AuthType == AUTHTYPE_ROOTCERT);
\r
11699 SetEnable(hWnd, S_ROOT_CERT_3, u->AuthType == AUTHTYPE_ROOTCERT);
\r
11700 SetEnable(hWnd, R_CN, u->AuthType == AUTHTYPE_ROOTCERT);
\r
11701 SetEnable(hWnd, R_SERIAL, u->AuthType == AUTHTYPE_ROOTCERT);
\r
11703 if (u->AuthType == AUTHTYPE_ROOTCERT)
\r
11705 SetEnable(hWnd, E_CN, IsChecked(hWnd, R_CN));
\r
11706 SetEnable(hWnd, E_SERIAL, IsChecked(hWnd, R_SERIAL));
\r
11710 Disable(hWnd, E_CN);
\r
11711 Disable(hWnd, E_SERIAL);
\r
11714 switch (u->AuthType)
\r
11716 case AUTHTYPE_PASSWORD:
\r
11717 GetTxtA(hWnd, E_PASSWORD1, tmp1, sizeof(tmp1));
\r
11718 GetTxtA(hWnd, E_PASSWORD2, tmp2, sizeof(tmp2));
\r
11719 if (StrCmp(tmp1, tmp2) != 0)
\r
11725 if (StrCmp(tmp1, HIDDEN_PASSWORD) != 0)
\r
11727 HashPassword(((AUTHPASSWORD *)u->AuthData)->HashedKey, u->Name, tmp1);
\r
11732 case AUTHTYPE_USERCERT:
\r
11733 if (((AUTHUSERCERT *)u->AuthData)->UserX == NULL)
\r
11739 case AUTHTYPE_ROOTCERT:
\r
11740 Free(((AUTHROOTCERT *)u->AuthData)->CommonName);
\r
11741 ((AUTHROOTCERT *)u->AuthData)->CommonName = NULL;
\r
11742 if (IsChecked(hWnd, R_CN) && (IsEmpty(hWnd, E_CN) == false))
\r
11744 ((AUTHROOTCERT *)u->AuthData)->CommonName = GetText(hWnd, E_CN);
\r
11745 UniTrim(((AUTHROOTCERT *)u->AuthData)->CommonName);
\r
11747 if (IsChecked(hWnd, R_CN) && ((AUTHROOTCERT *)u->AuthData)->CommonName == NULL)
\r
11751 FreeXSerial(((AUTHROOTCERT *)u->AuthData)->Serial);
\r
11752 ((AUTHROOTCERT *)u->AuthData)->Serial = NULL;
\r
11753 if (IsChecked(hWnd, R_SERIAL))
\r
11755 char *serial_str = GetTextA(hWnd, E_SERIAL);
\r
11756 if (serial_str != NULL)
\r
11758 BUF *b = StrToBin(serial_str);
\r
11759 if (b->Size >= 1)
\r
11761 ((AUTHROOTCERT *)u->AuthData)->Serial = NewXSerial(b->Buf, b->Size);
\r
11764 Free(serial_str);
\r
11767 if (IsChecked(hWnd, R_SERIAL) && ((AUTHROOTCERT *)u->AuthData)->Serial == NULL)
\r
11773 case AUTHTYPE_RADIUS:
\r
11774 Free(((AUTHRADIUS *)u->AuthData)->RadiusUsername);
\r
11775 ((AUTHRADIUS *)u->AuthData)->RadiusUsername = NULL;
\r
11776 if (IsChecked(hWnd, R_SET_RADIUS_USERNAME) && (IsEmpty(hWnd, E_RADIUS_USERNAME) == false))
\r
11778 ((AUTHRADIUS *)u->AuthData)->RadiusUsername = GetText(hWnd, E_RADIUS_USERNAME);
\r
11780 if (IsChecked(hWnd, R_SET_RADIUS_USERNAME) && ((AUTHRADIUS *)u->AuthData)->RadiusUsername == NULL)
\r
11786 case AUTHTYPE_NT:
\r
11787 Free(((AUTHNT *)u->AuthData)->NtUsername);
\r
11788 ((AUTHNT *)u->AuthData)->NtUsername = NULL;
\r
11789 if (IsChecked(hWnd, R_SET_RADIUS_USERNAME) && (IsEmpty(hWnd, E_RADIUS_USERNAME) == false))
\r
11791 ((AUTHNT *)u->AuthData)->NtUsername = GetText(hWnd, E_RADIUS_USERNAME);
\r
11793 if (IsChecked(hWnd, R_SET_RADIUS_USERNAME) && ((AUTHNT *)u->AuthData)->NtUsername == NULL)
\r
11800 SetEnable(hWnd, B_POLICY, IsChecked(hWnd, R_POLICY));
\r
11801 if (IsChecked(hWnd, R_POLICY))
\r
11803 if (u->Policy == NULL)
\r
11809 SetEnable(hWnd, IDOK, ok);
\r
11812 // ユーザー編集ダイアログプロシージャ
\r
11813 UINT SmEditUserDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
11815 SM_EDIT_USER *s = (SM_EDIT_USER *)param;
\r
11819 wchar_t tmp[MAX_SIZE];
\r
11820 char name[MAX_SIZE];
\r
11823 if (hWnd == NULL)
\r
11830 case WM_INITDIALOG:
\r
11832 SmEditUserDlgInit(hWnd, s);
\r
11836 switch (LOWORD(wParam))
\r
11842 case E_EXPIRES_DATE:
\r
11843 case E_EXPIRES_TIME:
\r
11846 case R_SET_RADIUS_USERNAME:
\r
11847 case E_RADIUS_USERNAME:
\r
11849 case E_PASSWORD1:
\r
11850 case E_PASSWORD2:
\r
11855 SmEditUserDlgUpdate(hWnd, s);
\r
11863 SmEditUserDlgOk(hWnd, s);
\r
11872 UniFormat(tmp, sizeof(tmp), _UU("SM_EDIT_USER_POL_DLG"), s->SetUser.Name);
\r
11874 if (s->SetUser.Policy == NULL)
\r
11876 policy = ClonePolicy(GetDefaultPolicy());
\r
11877 if (SmPolicyDlgEx2(hWnd, policy, tmp, false, s->p->PolicyVer))
\r
11879 s->SetUser.Policy = policy;
\r
11880 SmEditUserDlgUpdate(hWnd, s);
\r
11889 SmPolicyDlgEx2(hWnd, s->SetUser.Policy, tmp, false, s->p->PolicyVer);
\r
11895 GetTxtA(hWnd, E_GROUP, name, sizeof(name));
\r
11897 ret = SmSelectGroupDlg(hWnd, s->Hub, StrLen(name) == 0 ? NULL : name);
\r
11900 SetTextA(hWnd, E_GROUP, ret);
\r
11905 SetTextA(hWnd, E_GROUP, "");
\r
11907 FocusEx(hWnd, E_GROUP);
\r
11910 case B_LOAD_CERT:
\r
11912 if (CmLoadXFromFileOrSecureCard(hWnd, &x))
\r
11915 if (s->SetUser.AuthType == AUTHTYPE_USERCERT)
\r
11917 wchar_t tmp[MAX_SIZE];
\r
11918 FreeX(((AUTHUSERCERT *)s->SetUser.AuthData)->UserX);
\r
11919 ((AUTHUSERCERT *)s->SetUser.AuthData)->UserX = x;
\r
11920 SmGetCertInfoStr(tmp, sizeof(tmp), x);
\r
11921 SetText(hWnd, S_CERT_INFO, tmp);
\r
11922 SmEditUserDlgUpdate(hWnd, s);
\r
11935 case B_VIEW_CERT:
\r
11937 if (s->SetUser.AuthType == AUTHTYPE_USERCERT)
\r
11939 CertDlg(hWnd, ((AUTHUSERCERT *)s->SetUser.AuthData)->UserX, NULL, true);
\r
11945 GetTxtA(hWnd, E_USERNAME, name, sizeof(name));
\r
11947 if (SmCreateCert(hWnd, &x, NULL, false, name))
\r
11949 if (s->SetUser.AuthType != AUTHTYPE_USERCERT)
\r
11951 LvSelect(hWnd, L_AUTH, 2);
\r
11953 goto UPDATE_CERT;
\r
11957 case R_SET_RADIUS_USERNAME:
\r
11958 if (IsChecked(hWnd, R_SET_RADIUS_USERNAME))
\r
11960 FocusEx(hWnd, E_RADIUS_USERNAME);
\r
11965 if (IsChecked(hWnd, R_EXPIRES))
\r
11967 Focus(hWnd, E_EXPIRES_DATE);
\r
11972 if (IsChecked(hWnd, R_POLICY))
\r
11974 Focus(hWnd, B_POLICY);
\r
11979 if (IsChecked(hWnd, R_CN))
\r
11981 Focus(hWnd, E_CN);
\r
11986 if (IsChecked(hWnd, R_SERIAL))
\r
11988 Focus(hWnd, E_SERIAL);
\r
11995 n = (NMHDR *)lParam;
\r
11996 switch (n->idFrom)
\r
12001 case LVN_ITEMCHANGED:
\r
12002 SmEditUserDlgUpdate(hWnd, s);
\r
12010 EndDialog(hWnd, false);
\r
12018 bool SmEditUserDlg(HWND hWnd, SM_HUB *s, char *username)
\r
12023 if (hWnd == NULL || s == NULL || username == NULL)
\r
12028 Zero(&e, sizeof(e));
\r
12034 StrCpy(e.SetUser.HubName, sizeof(e.SetUser.HubName), e.Hub->HubName);
\r
12035 StrCpy(e.SetUser.Name, sizeof(e.SetUser.Name), username);
\r
12037 if (CALL(hWnd, ScGetUser(s->Rpc, &e.SetUser)) == false)
\r
12042 e.EditMode = true;
\r
12044 ret = Dialog(hWnd, D_SM_EDIT_USER, SmEditUserDlgProc, &e);
\r
12046 FreeRpcSetUser(&e.SetUser);
\r
12051 // ユーザーの新規作成ダイアログ
\r
12052 bool SmCreateUserDlg(HWND hWnd, SM_HUB *s)
\r
12057 if (hWnd == NULL || s == NULL)
\r
12062 Zero(&e, sizeof(e));
\r
12063 e.EditMode = false;
\r
12069 StrCpy(e.SetUser.HubName, sizeof(e.SetUser.HubName), e.Hub->HubName);
\r
12070 e.SetUser.AuthType = CLIENT_AUTHTYPE_PASSWORD;
\r
12071 e.SetUser.AuthData = NewPasswordAuthData("", "");
\r
12073 ret = Dialog(hWnd, D_SM_EDIT_USER, SmEditUserDlgProc, &e);
\r
12075 FreeRpcSetUser(&e.SetUser);
\r
12080 // ユーザー認証方法の文字列の取得
\r
12081 wchar_t *SmGetAuthTypeStr(UINT id)
\r
12083 return GetAuthTypeStr(id);
\r
12087 void SmUserListInit(HWND hWnd, SM_USER *s)
\r
12089 wchar_t tmp1[MAX_SIZE];
\r
12090 wchar_t tmp2[MAX_SIZE];
\r
12092 if (hWnd == NULL || s == NULL)
\r
12097 SetIcon(hWnd, 0, ICO_USER);
\r
12100 LvInit(hWnd, L_USER);
\r
12101 LvSetStyle(hWnd, L_USER, LVS_EX_GRIDLINES);
\r
12102 LvInsertColumn(hWnd, L_USER, 0, _UU("SM_USER_COLUMN_1"), 120);
\r
12103 LvInsertColumn(hWnd, L_USER, 1, _UU("SM_USER_COLUMN_2"), 100);
\r
12104 LvInsertColumn(hWnd, L_USER, 2, _UU("SM_USER_COLUMN_3"), 100);
\r
12105 LvInsertColumn(hWnd, L_USER, 3, _UU("SM_USER_COLUMN_4"), 130);
\r
12106 LvInsertColumn(hWnd, L_USER, 4, _UU("SM_USER_COLUMN_5"), 100);
\r
12107 LvInsertColumn(hWnd, L_USER, 5, _UU("SM_USER_COLUMN_6"), 90);
\r
12108 LvInsertColumn(hWnd, L_USER, 6, _UU("SM_USER_COLUMN_7"), 120);
\r
12110 FormatText(hWnd, S_TITLE, s->Hub->HubName);
\r
12112 if (s->GroupName != NULL)
\r
12114 GetTxt(hWnd, 0, tmp1, sizeof(tmp1));
\r
12115 UniFormat(tmp2, sizeof(tmp2), _UU("SM_GROUP_MEMBER_STR"), s->GroupName);
\r
12116 UniStrCat(tmp1, sizeof(tmp1), tmp2);
\r
12117 SetText(hWnd, S_TITLE, tmp1);
\r
12118 Disable(hWnd, B_CREATE);
\r
12121 if (s->SelectMode)
\r
12123 SetStyle(hWnd, L_USER, LVS_SINGLESEL);
\r
12126 SmUserListRefresh(hWnd, s);
\r
12128 if (s->SelectMode)
\r
12130 wchar_t tmp[MAX_SIZE];
\r
12132 StrToUni(tmp, sizeof(tmp), s->SelectedName);
\r
12133 i = LvSearchStr(hWnd, L_USER, 0, tmp);
\r
12134 if (i != INFINITE)
\r
12136 LvSelect(hWnd, L_USER, i);
\r
12139 if (s->AllowGroup)
\r
12141 SetText(hWnd, B_DELETE, _UU("SM_SELECT_ALT_GROUP"));
\r
12147 void SmUserListRefresh(HWND hWnd, SM_USER *s)
\r
12153 if (hWnd == NULL || s == NULL)
\r
12158 Zero(&t, sizeof(t));
\r
12160 StrCpy(t.HubName, sizeof(t.HubName), s->Hub->HubName);
\r
12161 if (CALL(hWnd, ScEnumUser(s->Rpc, &t)) == false)
\r
12163 EndDialog(hWnd, false);
\r
12167 b = LvInsertStart();
\r
12169 for (i = 0;i < t.NumUser;i++)
\r
12171 RPC_ENUM_USER_ITEM *e = &t.Users[i];
\r
12172 wchar_t name[MAX_SIZE];
\r
12173 wchar_t group[MAX_SIZE];
\r
12174 wchar_t num[MAX_SIZE];
\r
12175 wchar_t time[MAX_SIZE];
\r
12177 if (s->GroupName != NULL)
\r
12179 if (StrCmpi(s->GroupName, e->GroupName) != 0)
\r
12185 StrToUni(name, sizeof(name), e->Name);
\r
12187 if (StrLen(e->GroupName) != 0)
\r
12189 StrToUni(group, sizeof(group), e->GroupName);
\r
12193 UniStrCpy(group, sizeof(group), _UU("SM_NO_GROUP"));
\r
12196 UniToStru(num, e->NumLogin);
\r
12198 GetDateTimeStrEx64(time, sizeof(time), SystemToLocal64(e->LastLoginTime), NULL);
\r
12200 LvInsertAdd(b, e->DenyAccess ? ICO_USER_DENY : ICO_USER, NULL, 7,
\r
12201 name, e->Realname, group, e->Note, SmGetAuthTypeStr(e->AuthType),
\r
12205 LvInsertEnd(b, hWnd, L_USER);
\r
12207 FreeRpcEnumUser(&t);
\r
12209 SmUserListUpdate(hWnd, s);
\r
12212 // ユーザーリストコントロール更新
\r
12213 void SmUserListUpdate(HWND hWnd, SM_USER *s)
\r
12217 if (hWnd == NULL || s == NULL)
\r
12222 if (LvIsSelected(hWnd, L_USER) == false || LvIsMultiMasked(hWnd, L_USER))
\r
12227 if (s->SelectMode)
\r
12229 SetText(hWnd, IDOK, _UU("SM_SELECT_USER"));
\r
12230 SetText(hWnd, IDCANCEL, _UU("SM_SELECT_NO"));
\r
12231 SetText(hWnd, S_TITLE, _UU("SM_PLEASE_SELECT"));
\r
12234 SetEnable(hWnd, IDOK, b);
\r
12236 SetEnable(hWnd, B_STATUS, b);
\r
12237 SetEnable(hWnd, B_DELETE, (b && s->SelectedName == false) || s->AllowGroup);
\r
12238 SetEnable(hWnd, B_CREATE, s->SelectedName == false);
\r
12241 // ユーザーリストダイアログプロシージャ
\r
12242 UINT SmUserListProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
12244 SM_USER *s = (SM_USER *)param;
\r
12248 if (hWnd == NULL)
\r
12255 case WM_INITDIALOG:
\r
12257 SmUserListInit(hWnd, s);
\r
12259 if (s->CreateNow)
\r
12262 if (IsEnable(hWnd, B_CREATE))
\r
12264 Command(hWnd, B_CREATE);
\r
12273 if (s->SelectMode == false)
\r
12276 str = LvGetSelectedStr(hWnd, L_USER, 0);
\r
12279 char name[MAX_SIZE];
\r
12280 UniToStr(name, sizeof(name), str);
\r
12282 if (SmEditUserDlg(hWnd, s->Hub, name))
\r
12284 SmUserListRefresh(hWnd, s);
\r
12293 str = LvGetSelectedStr(hWnd, L_USER, 0);
\r
12296 char name[MAX_SIZE];
\r
12297 UniToStr(name, sizeof(name), str);
\r
12299 s->SelectedName = CopyStr(name);
\r
12301 EndDialog(hWnd, true);
\r
12310 if (SmCreateUserDlg(hWnd, s->Hub))
\r
12312 SmUserListRefresh(hWnd, s);
\r
12317 if (s->AllowGroup)
\r
12320 EndDialog(hWnd, INFINITE);
\r
12325 str = LvGetSelectedStr(hWnd, L_USER, 0);
\r
12328 RPC_DELETE_USER t;
\r
12329 char name[MAX_SIZE];
\r
12330 UniToStr(name, sizeof(name), str);
\r
12332 Zero(&t, sizeof(t));
\r
12333 StrCpy(t.HubName, sizeof(t.HubName), s->Hub->HubName);
\r
12334 StrCpy(t.Name, sizeof(t.Name), name);
\r
12336 if (MsgBoxEx(hWnd, MB_YESNO | MB_DEFBUTTON2 | MB_ICONQUESTION,
\r
12337 _UU("SM_USER_DELETE_MSG"), str) == IDYES)
\r
12339 if (CALL(hWnd, ScDeleteUser(s->Rpc, &t)))
\r
12341 SmUserListRefresh(hWnd, s);
\r
12352 str = LvGetSelectedStr(hWnd, L_USER, 0);
\r
12355 char name[MAX_SIZE];
\r
12356 wchar_t tmp[MAX_SIZE];
\r
12357 SM_USER_INFO info;
\r
12358 UniToStr(name, sizeof(name), str);
\r
12360 UniFormat(tmp, sizeof(tmp), _UU("SM_USERINFO_CAPTION"), name);
\r
12362 Zero(&info, sizeof(info));
\r
12364 info.Rpc = s->Rpc;
\r
12365 info.Hub = s->Hub;
\r
12366 info.Username = name;
\r
12368 SmStatusDlg(hWnd, s->p, &info, false, true, tmp, ICO_USER, NULL, SmRefreshUserInfo);
\r
12377 SmUserListRefresh(hWnd, s);
\r
12388 n = (NMHDR *)lParam;
\r
12389 switch (n->idFrom)
\r
12394 case LVN_ITEMCHANGED:
\r
12396 SmUserListUpdate(hWnd, s);
\r
12404 EndDialog(hWnd, false);
\r
12408 LvStandardHandler(hWnd, msg, wParam, lParam, L_USER);
\r
12413 // ユーザーリストダイアログ (選択)
\r
12414 char *SmSelectUserDlg(HWND hWnd, SM_HUB *s, char *default_name)
\r
12416 return SmSelectUserDlgEx(hWnd, s, default_name, false);
\r
12418 char *SmSelectUserDlgEx(HWND hWnd, SM_HUB *s, char *default_name, bool allow_group)
\r
12423 if (hWnd == NULL || s == NULL)
\r
12428 Zero(&user, sizeof(user));
\r
12431 user.Rpc = s->Rpc;
\r
12432 user.GroupName = NULL;
\r
12433 user.SelectedName = default_name;
\r
12434 user.SelectMode = true;
\r
12435 user.AllowGroup = allow_group;
\r
12437 ret = Dialog(hWnd, D_SM_USER, SmUserListProc, &user);
\r
12443 else if (ret == INFINITE)
\r
12446 return SmSelectGroupDlg(hWnd, s, default_name);
\r
12450 return user.SelectedName;
\r
12454 // ユーザーリストダイアログ (グループ名でフィルタ)
\r
12455 void SmUserListDlgEx(HWND hWnd, SM_HUB *s, char *groupname, bool create)
\r
12459 if (hWnd == NULL || s == NULL)
\r
12464 Zero(&user, sizeof(user));
\r
12467 user.Rpc = s->Rpc;
\r
12468 user.GroupName = groupname;
\r
12469 user.CreateNow = create;
\r
12471 Dialog(hWnd, D_SM_USER, SmUserListProc, &user);
\r
12475 void SmUserListDlg(HWND hWnd, SM_HUB *s)
\r
12477 SmUserListDlgEx(hWnd, s, NULL, false);
\r
12481 void SmHubDlgInit(HWND hWnd, SM_HUB *s)
\r
12484 bool support_user, support_group, support_accesslist, support_cascade,
\r
12485 support_log, support_config_hub, support_secure_nat, support_config_radius;
\r
12487 if (hWnd == NULL || s == NULL)
\r
12492 FormatText(hWnd, 0, s->HubName);
\r
12493 FormatText(hWnd, S_TITLE, s->HubName);
\r
12494 SetIcon(hWnd, 0, ICO_HUB);
\r
12495 DlgFont(hWnd, S_TITLE, 15, true);
\r
12497 LvInit(hWnd, L_STATUS);
\r
12498 LvSetStyle(hWnd, L_STATUS, LVS_EX_GRIDLINES);
\r
12499 LvInsertColumn(hWnd, L_STATUS, 0, _UU("SM_STATUS_COLUMN_1"), 0);
\r
12500 LvInsertColumn(hWnd, L_STATUS, 1, _UU("SM_STATUS_COLUMN_2"), 0);
\r
12502 caps = s->p->CapsList;
\r
12504 support_user = GetCapsInt(caps, "i_max_users_per_hub") == 0 ? false : true;
\r
12505 support_group = GetCapsInt(caps, "i_max_groups_per_hub") == 0 ? false : true;
\r
12506 support_accesslist = GetCapsInt(caps, "i_max_access_lists") == 0 ? false : true;
\r
12507 support_cascade = GetCapsBool(caps, "b_support_cascade");
\r
12508 support_log = GetCapsBool(caps, "b_support_config_log");
\r
12509 support_config_hub = GetCapsBool(caps, "b_support_config_hub");
\r
12510 support_secure_nat = GetCapsBool(caps, "b_support_securenat");
\r
12511 support_config_radius = GetCapsBool(caps, "b_support_radius");
\r
12513 SetEnable(hWnd, B_USER, support_user);
\r
12514 SetEnable(hWnd, S_USER, support_user);
\r
12516 SetEnable(hWnd, B_GROUP, support_group);
\r
12517 SetEnable(hWnd, S_GROUP, support_group);
\r
12519 SetEnable(hWnd, B_ACCESS, support_accesslist);
\r
12520 SetEnable(hWnd, S_ACCESS, support_accesslist);
\r
12522 SetEnable(hWnd, B_PROPERTY, s->p->ServerType != SERVER_TYPE_FARM_MEMBER);
\r
12523 SetEnable(hWnd, S_PROPERTY, s->p->ServerType != SERVER_TYPE_FARM_MEMBER);
\r
12525 SetEnable(hWnd, B_RADIUS, support_config_radius);
\r
12526 SetEnable(hWnd, S_RADIUS, support_config_radius);
\r
12528 SetEnable(hWnd, B_LINK, support_cascade);
\r
12529 SetEnable(hWnd, S_LINK, support_cascade);
\r
12531 SetEnable(hWnd, B_LOG, support_log);
\r
12532 SetEnable(hWnd, S_LOG, support_log);
\r
12534 SetEnable(hWnd, B_CA, support_config_hub);
\r
12535 SetEnable(hWnd, S_CA, support_config_hub);
\r
12537 SetEnable(hWnd, B_SNAT, support_secure_nat);
\r
12538 SetEnable(hWnd, S_SNAT, support_secure_nat);
\r
12540 SetEnable(hWnd, B_CRL, GetCapsBool(caps, "b_support_crl"));
\r
12542 SetEnable(hWnd, B_LOG_FILE, GetCapsBool(caps, "b_support_read_log"));
\r
12544 SmHubDlgRefresh(hWnd, s);
\r
12548 void SmHubDlgUpdate(HWND hWnd, SM_HUB *s)
\r
12551 if (hWnd == NULL || s == NULL)
\r
12558 void SmHubDlgRefresh(HWND hWnd, SM_HUB *s)
\r
12561 if (hWnd == NULL || s == NULL)
\r
12566 SmRefreshHubStatus(hWnd, s->p, (void *)s->HubName);
\r
12567 LvAutoSize(hWnd, L_STATUS);
\r
12569 SmHubDlgUpdate(hWnd, s);
\r
12573 UINT SmHubDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
12575 SM_HUB *s = (SM_HUB *)param;
\r
12577 if (hWnd == NULL)
\r
12584 case WM_INITDIALOG:
\r
12586 SmHubDlgInit(hWnd, s);
\r
12594 SmUserListDlg(hWnd, s);
\r
12595 SmHubDlgRefresh(hWnd, s);
\r
12600 SmGroupListDlg(hWnd, s);
\r
12601 SmHubDlgRefresh(hWnd, s);
\r
12606 SmAccessListDlg(hWnd, s);
\r
12607 SmHubDlgRefresh(hWnd, s);
\r
12612 if (SmEditHubDlg(hWnd, s->p, s->HubName))
\r
12614 SmHubDlgRefresh(hWnd, s);
\r
12620 SmRadiusDlg(hWnd, s);
\r
12621 SmHubDlgRefresh(hWnd, s);
\r
12626 SmLinkDlg(hWnd, s);
\r
12627 SmHubDlgRefresh(hWnd, s);
\r
12632 SmSessionDlg(hWnd, s);
\r
12633 SmHubDlgRefresh(hWnd, s);
\r
12638 Dialog(hWnd, D_SM_LOG, SmLogDlg, s);
\r
12639 SmHubDlgRefresh(hWnd, s);
\r
12644 SmCaDlg(hWnd, s);
\r
12645 SmHubDlgRefresh(hWnd, s);
\r
12655 SmHubDlgRefresh(hWnd, s);
\r
12660 Dialog(hWnd, D_SM_SNAT, SmSNATDlgProc, s);
\r
12661 SmHubDlgRefresh(hWnd, s);
\r
12666 Dialog(hWnd, D_SM_CRL, SmCrlDlgProc, s);
\r
12671 Dialog(hWnd, D_SM_LOG_FILE, SmLogFileDlgProc, s->p);
\r
12677 EndDialog(hWnd, false);
\r
12685 void SmHubDlg(HWND hWnd, SM_HUB *s)
\r
12688 if (hWnd == NULL || s == NULL)
\r
12693 Dialog(hWnd, D_SM_HUB, SmHubDlgProc, s);
\r
12697 UINT SmChangeServerPasswordDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
12699 SM_SERVER *p = (SM_SERVER *)param;
\r
12700 char tmp1[MAX_SIZE];
\r
12701 char tmp2[MAX_SIZE];
\r
12702 UCHAR hash[SHA1_SIZE];
\r
12703 RPC_SET_PASSWORD t;
\r
12704 SETTING *setting;
\r
12706 if (hWnd == NULL)
\r
12713 case WM_INITDIALOG:
\r
12715 SetIcon(hWnd, 0, ICO_USER_ADMIN);
\r
12716 FormatText(hWnd, 0, p->ServerName);
\r
12717 FormatText(hWnd, S_TITLE, p->ServerName);
\r
12725 GetTxtA(hWnd, E_PASSWORD1, tmp1, sizeof(tmp1));
\r
12726 GetTxtA(hWnd, E_PASSWORD2, tmp2, sizeof(tmp2));
\r
12727 if (StrCmp(tmp1, tmp2) != 0)
\r
12729 MsgBox(hWnd, MB_ICONSTOP, _UU("SM_CHANGE_PASSWORD_1"));
\r
12730 FocusEx(hWnd, E_PASSWORD2);
\r
12733 if (StrLen(tmp1) == 0)
\r
12735 if (MsgBox(hWnd, MB_ICONEXCLAMATION | MB_YESNO | MB_DEFBUTTON2, _UU("SM_CHANGE_PASSWORD_2")) == IDNO)
\r
12737 Focus(hWnd, E_PASSWORD1);
\r
12741 Zero(&t, sizeof(t));
\r
12742 Hash(t.HashedPassword, tmp1, StrLen(tmp1), true);
\r
12743 Copy(hash, t.HashedPassword, sizeof(hash));
\r
12744 if (CALL(hWnd, ScSetServerPassword(p->Rpc, &t)) == false)
\r
12748 MsgBox(hWnd, MB_ICONINFORMATION, _UU("SM_CHANGE_PASSWORD_3"));
\r
12750 // 接続設定のパスワードを変更する
\r
12751 setting = SmGetSetting(p->CurrentSetting->Title);
\r
12752 if (setting != NULL && sm->TempSetting == NULL)
\r
12754 if (IsZero(setting->HashedPassword, SHA1_SIZE) == false)
\r
12756 Copy(setting->HashedPassword, hash, SHA1_SIZE);
\r
12757 SmWriteSettingList();
\r
12761 EndDialog(hWnd, true);
\r
12772 EndDialog(hWnd, false);
\r
12779 // サーバー ファーム コントローラへの接続状況更新
\r
12780 bool SmRefreshFarmConnectionInfo(HWND hWnd, SM_SERVER *p, void *param)
\r
12782 RPC_FARM_CONNECTION_STATUS t;
\r
12784 wchar_t tmp[MAX_SIZE];
\r
12785 char str[MAX_SIZE];
\r
12787 if (hWnd == NULL || p == NULL)
\r
12792 Zero(&t, sizeof(t));
\r
12793 if (CALL(hWnd, ScGetFarmConnectionStatus(p->Rpc, &t)) == false)
\r
12798 b = LvInsertStart();
\r
12800 if (t.Online == false)
\r
12802 LvInsertAdd(b, ICO_FARM, NULL, 2, _UU("SM_FC_IP"), _UU("SM_FC_NOT_CONNECTED"));
\r
12804 LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, _UU("SM_FC_PORT"), _UU("SM_FC_NOT_CONNECTED"));
\r
12808 IPToStr32(str, sizeof(str), t.Ip);
\r
12809 StrToUni(tmp, sizeof(tmp), str);
\r
12810 LvInsertAdd(b, ICO_FARM, NULL, 2, _UU("SM_FC_IP"), tmp);
\r
12812 UniToStru(tmp, t.Port);
\r
12813 LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, _UU("SM_FC_PORT"), tmp);
\r
12817 t.Online ? ICO_SERVER_ONLINE_EX : ICO_PROTOCOL_X, NULL, 2,
\r
12818 _UU("SM_FC_STATUS"),
\r
12819 t.Online ? _UU("SM_FC_ONLINE") : _UU("SM_FC_OFFLINE"));
\r
12821 if (t.Online == false)
\r
12823 UniFormat(tmp, sizeof(tmp), _UU("SM_FC_ERROR_TAG"), _E(t.LastError), t.LastError);
\r
12824 LvInsertAdd(b, ICO_STOP, NULL, 2,
\r
12825 _UU("SM_FC_LAST_ERROR"), tmp);
\r
12828 GetDateTimeStrEx64(tmp, sizeof(tmp), SystemToLocal64(t.StartedTime), NULL);
\r
12829 LvInsertAdd(b, ICO_INFORMATION, NULL, 2, _UU("SM_FC_START_TIME"), tmp);
\r
12831 GetDateTimeStrEx64(tmp, sizeof(tmp), SystemToLocal64(t.FirstConnectedTime), NULL);
\r
12832 LvInsertAdd(b, ICO_INFORMATION, NULL, 2, _UU("SM_FC_FIRST_TIME"), tmp);
\r
12834 //if (t.Online == false)
\r
12836 GetDateTimeStrEx64(tmp, sizeof(tmp), SystemToLocal64(t.CurrentConnectedTime), NULL);
\r
12837 LvInsertAdd(b, ICO_INFORMATION, NULL, 2, _UU("SM_FC_CURRENT_TIME"), tmp);
\r
12840 UniToStru(tmp, t.NumTry);
\r
12841 LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, _UU("SM_FC_NUM_TRY"), tmp);
\r
12843 UniToStru(tmp, t.NumConnected);
\r
12844 LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, _UU("SM_FC_NUM_CONNECTED"), tmp);
\r
12846 UniToStru(tmp, t.NumFailed);
\r
12847 LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, _UU("SM_FC_NUM_FAILED"), tmp);
\r
12849 LvInsertEnd(b, hWnd, L_STATUS);
\r
12855 void SmFarmMemberDlgInit(HWND hWnd, SM_SERVER *p)
\r
12858 if (hWnd == NULL || p == NULL)
\r
12863 SetIcon(hWnd, 0, ICO_FARM);
\r
12865 FormatText(hWnd, S_TITLE, p->ServerName);
\r
12868 LvInit(hWnd, L_FARM_MEMBER);
\r
12869 LvSetStyle(hWnd, L_FARM_MEMBER, LVS_EX_GRIDLINES);
\r
12870 LvInsertColumn(hWnd, L_FARM_MEMBER, 0, _UU("SM_FM_COLUMN_1"), 90);
\r
12871 LvInsertColumn(hWnd, L_FARM_MEMBER, 1, _UU("SM_FM_COLUMN_2"), 150);
\r
12872 LvInsertColumn(hWnd, L_FARM_MEMBER, 2, _UU("SM_FM_COLUMN_3"), 140);
\r
12873 LvInsertColumn(hWnd, L_FARM_MEMBER, 3, _UU("SM_FM_COLUMN_4"), 60);
\r
12874 LvInsertColumn(hWnd, L_FARM_MEMBER, 4, _UU("SM_FM_COLUMN_5"), 80);
\r
12875 LvInsertColumn(hWnd, L_FARM_MEMBER, 5, _UU("SM_FM_COLUMN_6"), 80);
\r
12876 LvInsertColumn(hWnd, L_FARM_MEMBER, 6, _UU("SM_FM_COLUMN_7"), 80);
\r
12877 LvInsertColumn(hWnd, L_FARM_MEMBER, 7, _UU("SM_FM_COLUMN_8"), 160);
\r
12878 LvInsertColumn(hWnd, L_FARM_MEMBER, 8, _UU("SM_FM_COLUMN_9"), 160);
\r
12880 SmFarmMemberDlgRefresh(hWnd, p);
\r
12884 void SmFarmMemberDlgUpdate(HWND hWnd, SM_SERVER *p)
\r
12887 if (hWnd == NULL || p == NULL)
\r
12892 SetEnable(hWnd, IDOK, LvIsSelected(hWnd, L_FARM_MEMBER) && (LvIsMultiMasked(hWnd, L_FARM_MEMBER) == false));
\r
12893 SetEnable(hWnd, B_CERT, LvIsSelected(hWnd, L_FARM_MEMBER) && (LvIsMultiMasked(hWnd, L_FARM_MEMBER) == false));
\r
12897 void SmFarmMemberDlgRefresh(HWND hWnd, SM_SERVER *p)
\r
12902 if (hWnd == NULL || p == NULL)
\r
12907 Zero(&t, sizeof(t));
\r
12908 if (CALL(hWnd, ScEnumFarmMember(p->Rpc, &t)) == false)
\r
12910 EndDialog(hWnd, false);
\r
12914 LvReset(hWnd, L_FARM_MEMBER);
\r
12916 for (i = 0;i < t.NumFarm;i++)
\r
12918 RPC_ENUM_FARM_ITEM *e = &t.Farms[i];
\r
12919 wchar_t tmp1[MAX_SIZE];
\r
12920 wchar_t tmp2[MAX_SIZE];
\r
12921 wchar_t tmp3[64];
\r
12922 wchar_t tmp4[64];
\r
12923 wchar_t tmp5[64];
\r
12924 wchar_t tmp6[64];
\r
12925 wchar_t tmp7[64];
\r
12926 wchar_t tmp8[64];
\r
12928 GetDateTimeStrEx64(tmp1, sizeof(tmp1), SystemToLocal64(e->ConnectedTime), NULL);
\r
12929 StrToUni(tmp2, sizeof(tmp2), e->Hostname);
\r
12930 UniToStru(tmp3, e->Point);
\r
12931 UniToStru(tmp4, e->NumSessions);
\r
12932 UniToStru(tmp5, e->NumTcpConnections);
\r
12933 UniToStru(tmp6, e->NumHubs);
\r
12934 UniToStru(tmp7, e->AssignedClientLicense);
\r
12935 UniToStru(tmp8, e->AssignedBridgeLicense);
\r
12937 LvInsert(hWnd, L_FARM_MEMBER, e->Controller ? ICO_FARM : ICO_TOWER, (void *)e->Id, 9,
\r
12938 e->Controller ? _UU("SM_FM_CONTROLLER") : _UU("SM_FM_MEMBER"),
\r
12939 tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8);
\r
12942 FreeRpcEnumFarm(&t);
\r
12944 SmFarmMemberDlgUpdate(hWnd, p);
\r
12948 void SmFarmMemberDlgOnOk(HWND hWnd, SM_SERVER *p)
\r
12951 if (hWnd == NULL || p == NULL)
\r
12958 // ファーム メンバ証明書の表示
\r
12959 void SmFarmMemberCert(HWND hWnd, SM_SERVER *p, UINT id)
\r
12963 if (hWnd == NULL || p == NULL || id == 0)
\r
12968 Zero(&t, sizeof(t));
\r
12971 if (CALL(hWnd, ScGetFarmInfo(p->Rpc, &t)) == false)
\r
12976 CertDlg(hWnd, t.ServerCert, NULL, true);
\r
12978 FreeRpcFarmInfo(&t);
\r
12982 bool SmRefreshFarmMemberInfo(HWND hWnd, SM_SERVER *p, void *param)
\r
12985 UINT id = (UINT)param;
\r
12988 wchar_t tmp[MAX_SIZE];
\r
12989 char str[MAX_SIZE];
\r
12991 if (hWnd == NULL || p == NULL || id == 0)
\r
12996 Zero(&t, sizeof(t));
\r
12999 if (CALL(hWnd, ScGetFarmInfo(p->Rpc, &t)) == false)
\r
13004 b = LvInsertStart();
\r
13006 LvInsertAdd(b, ICO_FARM, NULL, 2, _UU("SM_FMINFO_TYPE"),
\r
13007 t.Controller ? _UU("SM_FARM_CONTROLLER") : _UU("SM_FARM_MEMBER"));
\r
13009 GetDateTimeStrEx64(tmp, sizeof(tmp), SystemToLocal64(t.ConnectedTime), NULL);
\r
13010 LvInsertAdd(b, ICO_INFORMATION, NULL, 2, _UU("SM_FMINFO_CONNECT_TIME"), tmp);
\r
13012 IPToStr32(str, sizeof(str), t.Ip);
\r
13013 StrToUni(tmp, sizeof(tmp), str);
\r
13014 LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, _UU("SM_FMINFO_IP"), tmp);
\r
13016 StrToUni(tmp, sizeof(tmp), t.Hostname);
\r
13017 LvInsertAdd(b, ICO_TOWER, NULL, 2, _UU("SM_FMINFO_HOSTNAME"), tmp);
\r
13019 UniToStru(tmp, t.Point);
\r
13020 LvInsertAdd(b, ICO_TEST, NULL, 2, _UU("SM_FMINFO_POINT"), tmp);
\r
13022 UniToStru(tmp, t.Weight);
\r
13023 LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_FMINFO_WEIGHT"), tmp);
\r
13025 UniToStru(tmp, t.NumPort);
\r
13026 LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, _UU("SM_FMINFO_NUM_PORT"), tmp);
\r
13028 for (i = 0;i < t.NumPort;i++)
\r
13030 wchar_t tmp2[MAX_SIZE];
\r
13031 UniFormat(tmp, sizeof(tmp), _UU("SM_FMINFO_PORT"), i + 1);
\r
13032 UniToStru(tmp2, t.Ports[i]);
\r
13033 LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, tmp, tmp2);
\r
13036 UniToStru(tmp, t.NumFarmHub);
\r
13037 LvInsertAdd(b, ICO_HUB_OFFLINE, NULL, 2, _UU("SM_FMINFO_NUM_HUB"), tmp);
\r
13039 for (i = 0;i < t.NumFarmHub;i++)
\r
13041 wchar_t tmp2[MAX_SIZE];
\r
13042 UniFormat(tmp, sizeof(tmp), _UU("SM_FMINFO_HUB"), i + 1);
\r
13043 UniFormat(tmp2, sizeof(tmp2),
\r
13044 t.FarmHubs[i].DynamicHub ? _UU("SM_FMINFO_HUB_TAG_2") : _UU("SM_FMINFO_HUB_TAG_1"),
\r
13045 t.FarmHubs[i].HubName);
\r
13046 LvInsertAdd(b, ICO_HUB, NULL, 2, tmp, tmp2);
\r
13049 UniToStru(tmp, t.NumSessions);
\r
13050 LvInsertAdd(b, ICO_VPN, NULL, 2, _UU("SM_FMINFO_NUM_SESSION"), tmp);
\r
13052 UniToStru(tmp, t.NumTcpConnections);
\r
13053 LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, _UU("SM_FMINFO_NUN_CONNECTION"), tmp);
\r
13055 LvInsertEnd(b, hWnd, L_STATUS);
\r
13057 FreeRpcFarmInfo(&t);
\r
13062 // ファームメンバ一覧ダイアログ
\r
13063 UINT SmFarmMemberDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
13065 SM_SERVER *p = (SM_SERVER *)param;
\r
13069 if (hWnd == NULL)
\r
13076 case WM_INITDIALOG:
\r
13078 SmFarmMemberDlgInit(hWnd, p);
\r
13085 // ファーム メンバの情報を表示
\r
13086 i = LvGetSelected(hWnd, L_FARM_MEMBER);
\r
13087 if (i != INFINITE)
\r
13089 SmStatusDlg(hWnd, p, LvGetParam(hWnd, L_FARM_MEMBER, i), false, true,
\r
13090 _UU("SM_FMINFO_CAPTION"), ICO_FARM, NULL, SmRefreshFarmMemberInfo);
\r
13096 i = LvGetSelected(hWnd, L_FARM_MEMBER);
\r
13097 if (i != INFINITE)
\r
13099 SmFarmMemberCert(hWnd, p, (UINT)LvGetParam(hWnd, L_FARM_MEMBER, i));
\r
13110 SmFarmMemberDlgRefresh(hWnd, p);
\r
13116 n = (NMHDR *)lParam;
\r
13119 case LVN_ITEMCHANGED:
\r
13120 switch (n->idFrom)
\r
13122 case L_FARM_MEMBER:
\r
13123 SmFarmMemberDlgUpdate(hWnd, p);
\r
13131 EndDialog(hWnd, false);
\r
13135 LvStandardHandler(hWnd, msg, wParam, lParam, L_FARM_MEMBER);
\r
13141 LIST *SmStrToPortList(char *str)
\r
13143 return StrToPortList(str);
\r
13147 void SmFarmDlgInit(HWND hWnd, SM_SERVER *p)
\r
13151 if (hWnd == NULL || p == NULL)
\r
13156 SetIcon(hWnd, 0, ICO_FARM);
\r
13159 Zero(&t, sizeof(t));
\r
13160 if (CALL(hWnd, ScGetFarmSetting(p->Rpc, &t)) == false)
\r
13162 EndDialog(hWnd, false);
\r
13166 if (t.Weight == 0)
\r
13168 t.Weight = FARM_DEFAULT_WEIGHT;
\r
13171 FormatText(hWnd, S_TITLE, p->ServerName);
\r
13172 DlgFont(hWnd, S_CURRENT, 11, true);
\r
13174 SetText(hWnd, S_CURRENT, GetServerTypeStr(t.ServerType));
\r
13176 switch (t.ServerType)
\r
13178 case SERVER_TYPE_FARM_CONTROLLER:
\r
13179 Check(hWnd, R_CONTROLLER, true);
\r
13182 case SERVER_TYPE_FARM_MEMBER:
\r
13183 Check(hWnd, R_MEMBER, true);
\r
13187 Check(hWnd, R_STANDALONE, true);
\r
13191 SetInt(hWnd, E_WEIGHT, t.Weight);
\r
13193 if (t.ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
13195 Check(hWnd, R_CONTROLLER_ONLY, t.ControllerOnly);
\r
13198 if (t.ServerType == SERVER_TYPE_FARM_MEMBER)
\r
13200 char tmp[MAX_PUBLIC_PORT_NUM * 8];
\r
13202 if (t.PublicIp != 0)
\r
13204 IpSet(hWnd, E_IP, t.PublicIp);
\r
13206 StrCpy(tmp, sizeof(tmp), "");
\r
13207 if (t.NumPort != 0)
\r
13209 for (i = 0;i < t.NumPort;i++)
\r
13211 Format(tmp, sizeof(tmp), "%s%u", tmp, t.Ports[i]);
\r
13212 if (i != (t.NumPort - 1))
\r
13214 StrCat(tmp, sizeof(tmp), ", ");
\r
13217 SetTextA(hWnd, E_PORT, tmp);
\r
13219 SetTextA(hWnd, E_CONTROLLER, t.ControllerName);
\r
13220 SetIntEx(hWnd, E_CONTROLLER_PORT, t.ControllerPort);
\r
13221 SetTextA(hWnd, E_PASSWORD, HIDDEN_PASSWORD);
\r
13226 RPC_LISTENER_LIST t;
\r
13227 char tmp[MAX_PUBLIC_PORT_NUM * 8];
\r
13228 Zero(&t, sizeof(t));
\r
13229 StrCpy(tmp, sizeof(tmp), "");
\r
13230 if (CALL(hWnd, ScEnumListener(p->Rpc, &t)))
\r
13233 if (t.NumPort != 0)
\r
13235 for (i = 0;i < t.NumPort;i++)
\r
13237 Format(tmp, sizeof(tmp), "%s%u", tmp, t.Ports[i]);
\r
13238 if (i != (t.NumPort - 1))
\r
13240 StrCat(tmp, sizeof(tmp), ", ");
\r
13243 SetTextA(hWnd, E_PORT, tmp);
\r
13245 FreeRpcListenerList(&t);
\r
13249 SmFarmDlgUpdate(hWnd, p);
\r
13253 Focus(hWnd, IDOK);
\r
13257 void SmFarmDlgUpdate(HWND hWnd, SM_SERVER *p)
\r
13260 bool farm_member_control = false;
\r
13263 if (hWnd == NULL || p == NULL)
\r
13268 if (IsChecked(hWnd, R_MEMBER))
\r
13271 UINT i = IpGetFilledNum(hWnd, E_IP);
\r
13272 if (i != 0 && i != 4)
\r
13277 s = GetTextA(hWnd, E_PORT);
\r
13278 o = SmStrToPortList(s);
\r
13289 if (IsEmpty(hWnd, E_CONTROLLER))
\r
13294 i = GetInt(hWnd, E_CONTROLLER_PORT);
\r
13295 if (i == 0 || i >= 65536)
\r
13300 farm_member_control = true;
\r
13303 if (IsChecked(hWnd, R_STANDALONE))
\r
13305 Disable(hWnd, S_1);
\r
13306 Disable(hWnd, S_2);
\r
13307 Disable(hWnd, E_WEIGHT);
\r
13311 Enable(hWnd, S_1);
\r
13312 Enable(hWnd, S_2);
\r
13313 Enable(hWnd, E_WEIGHT);
\r
13316 if (IsChecked(hWnd, R_CONTROLLER))
\r
13318 Enable(hWnd, R_CONTROLLER_ONLY);
\r
13322 Disable(hWnd, R_CONTROLLER_ONLY);
\r
13325 if (IsChecked(hWnd, R_CONTROLLER) || IsChecked(hWnd, R_MEMBER))
\r
13327 if (GetInt(hWnd, E_WEIGHT) == 0)
\r
13333 SetEnable(hWnd, S_IP_1, farm_member_control);
\r
13334 SetEnable(hWnd, E_IP, farm_member_control);
\r
13335 SetEnable(hWnd, S_IP_2, farm_member_control);
\r
13336 SetEnable(hWnd, S_PORT_1, farm_member_control);
\r
13337 SetEnable(hWnd, E_PORT, farm_member_control);
\r
13338 SetEnable(hWnd, S_PORT_2, farm_member_control);
\r
13339 SetEnable(hWnd, S_PORT_3, farm_member_control);
\r
13340 SetEnable(hWnd, E_CONTROLLER, farm_member_control);
\r
13341 SetEnable(hWnd, S_CONTROLLER, farm_member_control);
\r
13342 SetEnable(hWnd, E_CONTROLLER_PORT, farm_member_control);
\r
13343 SetEnable(hWnd, S_CONTROLLER_PORT, farm_member_control);
\r
13344 SetEnable(hWnd, S_PASSWORD, farm_member_control);
\r
13345 SetEnable(hWnd, E_PASSWORD, farm_member_control);
\r
13346 SetEnable(hWnd, IDOK, ok);
\r
13350 void SmFarmDlgOnOk(HWND hWnd, SM_SERVER *p)
\r
13353 if (hWnd == NULL || p == NULL)
\r
13359 if (MsgBox(hWnd, MB_ICONEXCLAMATION | MB_OKCANCEL | MB_DEFBUTTON2,
\r
13360 _UU("SM_FARM_REBOOT_MSG")) == IDOK)
\r
13363 Zero(&t, sizeof(t));
\r
13364 t.ServerType = SERVER_TYPE_STANDALONE;
\r
13365 if (IsChecked(hWnd, R_CONTROLLER))
\r
13367 t.ServerType = SERVER_TYPE_FARM_CONTROLLER;
\r
13369 if (IsChecked(hWnd, R_MEMBER))
\r
13371 t.ServerType = SERVER_TYPE_FARM_MEMBER;
\r
13374 t.ControllerOnly = IsChecked(hWnd, R_CONTROLLER_ONLY);
\r
13375 t.Weight = GetInt(hWnd, E_WEIGHT);
\r
13377 if (t.ServerType == SERVER_TYPE_FARM_MEMBER)
\r
13380 char pass[MAX_SIZE];
\r
13381 t.PublicIp = IpGet(hWnd, E_IP);
\r
13382 s = GetTextA(hWnd, E_PORT);
\r
13385 LIST *o = SmStrToPortList(s);
\r
13389 t.NumPort = LIST_NUM(o);
\r
13390 t.Ports = ZeroMalloc(sizeof(UINT) * t.NumPort);
\r
13391 for (i = 0;i < t.NumPort;i++)
\r
13393 t.Ports[i] = (UINT)LIST_DATA(o, i);
\r
13399 GetTxtA(hWnd, E_CONTROLLER, t.ControllerName, sizeof(t.ControllerName));
\r
13400 t.ControllerPort = GetInt(hWnd, E_CONTROLLER_PORT);
\r
13401 GetTxtA(hWnd, E_PASSWORD, pass, sizeof(pass));
\r
13402 if (StrCmp(pass, HIDDEN_PASSWORD) != 0)
\r
13404 Hash(t.MemberPassword, pass, StrLen(pass), true);
\r
13409 if (CALL(hWnd, ScSetFarmSetting(p->Rpc, &t)) == false)
\r
13416 EndDialog(hWnd, true);
\r
13420 // サーバー ファーム ダイアログ プロシージャ
\r
13421 UINT SmFarmDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
13423 SM_SERVER *p = (SM_SERVER *)param;
\r
13425 if (hWnd == NULL)
\r
13432 case WM_INITDIALOG:
\r
13434 SmFarmDlgInit(hWnd, p);
\r
13438 switch (LOWORD(wParam))
\r
13440 case R_STANDALONE:
\r
13441 case R_CONTROLLER:
\r
13445 case E_CONTROLLER:
\r
13446 case E_CONTROLLER_PORT:
\r
13448 case R_CONTROLLER_ONLY:
\r
13450 SmFarmDlgUpdate(hWnd, p);
\r
13458 SmFarmDlgOnOk(hWnd, p);
\r
13467 if (IsChecked(hWnd, R_MEMBER))
\r
13469 Focus(hWnd, E_IP);
\r
13476 EndDialog(hWnd, false);
\r
13484 bool SmFarmDlg(HWND hWnd, SM_SERVER *p)
\r
13487 if (hWnd == NULL || p == NULL)
\r
13492 return Dialog(hWnd, D_SM_FARM, SmFarmDlgProc, p);
\r
13496 bool SmRefreshConnectionStatus(HWND hWnd, SM_SERVER *p, void *param)
\r
13498 RPC_CONNECTION_INFO t;
\r
13499 SM_CONNECTION_INFO *info = (SM_CONNECTION_INFO *)param;
\r
13501 wchar_t tmp[MAX_SIZE];
\r
13503 if (hWnd == NULL || p == NULL || param == NULL)
\r
13508 Zero(&t, sizeof(t));
\r
13509 StrCpy(t.Name, sizeof(t.Name), info->ConnectionName);
\r
13510 if (CALL(hWnd, ScGetConnectionInfo(p->Rpc, &t)) == false)
\r
13515 b = LvInsertStart();
\r
13517 StrToUni(tmp, sizeof(tmp), t.Name);
\r
13518 LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, _UU("SM_CONNINFO_NAME"), tmp);
\r
13520 LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_CONNINFO_TYPE"), SmGetConnectionTypeStr(t.Type));
\r
13522 StrToUni(tmp, sizeof(tmp), t.Hostname);
\r
13523 LvInsertAdd(b, ICO_FARM, NULL, 2, _UU("SM_CONNINFO_HOSTNAME"), tmp);
\r
13525 UniToStru(tmp, t.Port);
\r
13526 LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, _UU("SM_CONNINFO_PORT"), tmp);
\r
13528 GetDateTimeStrEx64(tmp, sizeof(tmp), SystemToLocal64(t.ConnectedTime), NULL);
\r
13529 LvInsertAdd(b, ICO_INFORMATION, NULL, 2, _UU("SM_CONNINFO_TIME"), tmp);
\r
13531 StrToUni(tmp, sizeof(tmp), t.ServerStr);
\r
13532 LvInsertAdd(b, ICO_VPNSERVER, NULL, 2, _UU("SM_CONNINFO_SERVER_STR"), tmp);
\r
13534 UniFormat(tmp, sizeof(tmp), L"%u.%02u", t.ServerVer / 100, t.ServerVer % 100);
\r
13535 LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_CONNINFO_SERVER_VER"), tmp);
\r
13537 UniToStru(tmp, t.ServerBuild);
\r
13538 LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_CONNINFO_SERVER_BUILD"), tmp);
\r
13540 if (StrLen(t.ClientStr) != 0)
\r
13542 StrToUni(tmp, sizeof(tmp), t.ClientStr);
\r
13543 LvInsertAdd(b, ICO_VPN, NULL, 2, _UU("SM_CONNINFO_CLIENT_STR"), tmp);
\r
13545 UniFormat(tmp, sizeof(tmp), L"%u.%02u", t.ClientVer / 100, t.ClientVer % 100);
\r
13546 LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_CONNINFO_CLIENT_VER"), tmp);
\r
13548 UniToStru(tmp, t.ClientBuild);
\r
13549 LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_CONNINFO_CLIENT_BUILD"), tmp);
\r
13552 LvInsertEnd(b, hWnd, L_STATUS);
\r
13558 void SmConnectionDlgInit(HWND hWnd, SM_SERVER *p)
\r
13561 if (hWnd == NULL || p == NULL)
\r
13566 SetIcon(hWnd, 0, ICO_PROTOCOL);
\r
13567 FormatText(hWnd, S_TITLE, p->ServerName);
\r
13570 LvInit(hWnd, L_LIST);
\r
13571 LvSetStyle(hWnd, L_LIST, LVS_EX_GRIDLINES);
\r
13572 LvInsertColumn(hWnd, L_LIST, 0, _UU("SM_CONN_COLUMN_1"), 90);
\r
13573 LvInsertColumn(hWnd, L_LIST, 1, _UU("SM_CONN_COLUMN_2"), 150);
\r
13574 LvInsertColumn(hWnd, L_LIST, 2, _UU("SM_CONN_COLUMN_3"), 200);
\r
13575 LvInsertColumn(hWnd, L_LIST, 3, _UU("SM_CONN_COLUMN_4"), 80);
\r
13577 SmConnectionDlgRefresh(hWnd, p);
\r
13578 SmConnectionDlgUpdate(hWnd, p);
\r
13582 void SmConnectionDlgRefresh(HWND hWnd, SM_SERVER *p)
\r
13586 RPC_ENUM_CONNECTION t;
\r
13588 if (hWnd == NULL || p == NULL)
\r
13593 Zero(&t, sizeof(t));
\r
13594 if (CALL(hWnd, ScEnumConnection(p->Rpc, &t)) == false)
\r
13596 EndDialog(hWnd, false);
\r
13600 b = LvInsertStart();
\r
13602 for (i = 0;i < t.NumConnection;i++)
\r
13604 wchar_t tmp[MAX_SIZE];
\r
13605 wchar_t name[MAX_SIZE];
\r
13606 wchar_t datetime[MAX_SIZE];
\r
13607 RPC_ENUM_CONNECTION_ITEM *e = &t.Connections[i];
\r
13609 StrToUni(name, sizeof(name), e->Name);
\r
13610 UniFormat(tmp, sizeof(tmp), _UU("SM_HOSTNAME_AND_PORT"), e->Hostname, e->Port);
\r
13611 GetDateTimeStrEx64(datetime, sizeof(datetime), SystemToLocal64(e->ConnectedTime), NULL);
\r
13613 LvInsertAdd(b, ICO_PROTOCOL, NULL, 4, name, tmp, datetime,
\r
13614 SmGetConnectionTypeStr(e->Type));
\r
13617 LvInsertEnd(b, hWnd, L_LIST);
\r
13619 FreeRpcEnumConnetion(&t);
\r
13623 void SmConnectionDlgUpdate(HWND hWnd, SM_SERVER *p)
\r
13627 if (hWnd == NULL || p == NULL)
\r
13632 if (LvIsSelected(hWnd, L_LIST) && (LvIsMultiMasked(hWnd, L_LIST) == false))
\r
13637 SetEnable(hWnd, IDOK, b);
\r
13638 SetEnable(hWnd, B_DISCONNECT, b && p->ServerAdminMode);
\r
13641 // コネクション一覧プロシージャ
\r
13642 UINT SmConnectionDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
13644 SM_SERVER *p = (SM_SERVER *)param;
\r
13648 if (hWnd == NULL)
\r
13655 case WM_INITDIALOG:
\r
13657 SmConnectionDlgInit(hWnd, p);
\r
13665 s = LvGetSelectedStr(hWnd, L_LIST, 0);
\r
13668 wchar_t caption[MAX_SIZE];
\r
13669 SM_CONNECTION_INFO info;
\r
13670 UniFormat(caption, sizeof(caption), _UU("SM_CONNINFO_CAPTION"),
\r
13672 Zero(&info, sizeof(info));
\r
13673 info.ConnectionName = CopyUniToStr(s);
\r
13675 SmStatusDlg(hWnd, p, &info, false, false, caption, ICO_PROTOCOL,
\r
13676 NULL, SmRefreshConnectionStatus);
\r
13677 Free(info.ConnectionName);
\r
13682 case B_DISCONNECT:
\r
13684 s = LvGetSelectedStr(hWnd, L_LIST, 0);
\r
13687 if (MsgBoxEx(hWnd, MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2,
\r
13688 _UU("SM_CONN_DISCONNECT_MSG"), s) == IDYES)
\r
13690 char tmp[MAX_SIZE];
\r
13691 RPC_DISCONNECT_CONNECTION t;
\r
13693 UniToStr(tmp, sizeof(tmp), s);
\r
13694 Zero(&t, sizeof(t));
\r
13695 StrCpy(t.Name, sizeof(t.Name), tmp);
\r
13697 if (CALL(hWnd, ScDisconnectConnection(p->Rpc, &t)))
\r
13699 SmConnectionDlgRefresh(hWnd, p);
\r
13708 SmConnectionDlgRefresh(hWnd, p);
\r
13719 n = (NMHDR *)lParam;
\r
13720 switch (n->idFrom)
\r
13725 case LVN_ITEMCHANGED:
\r
13726 SmConnectionDlgUpdate(hWnd, p);
\r
13734 EndDialog(hWnd, false);
\r
13738 LvStandardHandler(hWnd, msg, wParam, lParam, L_LIST);
\r
13744 void SmConnectionDlg(HWND hWnd, SM_SERVER *p)
\r
13747 if (hWnd == NULL || p == NULL)
\r
13752 Dialog(hWnd, D_SM_CONNECTION, SmConnectionDlgProc, p);
\r
13755 // コネクション種類文字列の取得
\r
13756 wchar_t *SmGetConnectionTypeStr(UINT type)
\r
13758 return GetConnectionTypeStr(type);
\r
13762 bool SmRefreshServerInfo(HWND hWnd, SM_SERVER *p, void *param)
\r
13764 RPC_SERVER_INFO t;
\r
13766 wchar_t tmp[MAX_SIZE];
\r
13768 if (hWnd == NULL || p == NULL)
\r
13773 Zero(&t, sizeof(t));
\r
13774 if (CALL(hWnd, ScGetServerInfo(p->Rpc, &t)) == false)
\r
13779 b = LvInsertStart();
\r
13782 StrToUni(tmp, sizeof(tmp), t.ServerProductName);
\r
13783 LvInsertAdd(b, ICO_VPNSERVER, NULL, 2, _UU("SM_INFO_PRODUCT_NAME"), tmp);
\r
13786 StrToUni(tmp, sizeof(tmp), t.ServerVersionString);
\r
13787 LvInsertAdd(b, ICO_INFORMATION, NULL, 2, _UU("SM_INFO_VERSION"), tmp);
\r
13790 StrToUni(tmp, sizeof(tmp), t.ServerBuildInfoString);
\r
13791 LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_INFO_BUILD"), tmp);
\r
13794 StrToUni(tmp, sizeof(tmp), t.ServerHostName);
\r
13795 LvInsertAdd(b, ICO_TOWER, NULL, 2, _UU("SM_INFO_HOSTNAME"), tmp);
\r
13798 LvInsertAdd(b, t.ServerType == SERVER_TYPE_STANDALONE ? ICO_SERVER_ONLINE : ICO_FARM, 0,
\r
13799 2, _UU("SM_ST_SERVER_TYPE"),
\r
13800 GetServerTypeStr(t.ServerType));
\r
13803 StrToUni(tmp, sizeof(tmp), t.OsInfo.OsSystemName);
\r
13804 LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_OS_SYSTEM_NAME"), tmp);
\r
13806 StrToUni(tmp, sizeof(tmp), t.OsInfo.OsProductName);
\r
13807 LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_OS_PRODUCT_NAME"), tmp);
\r
13809 if (t.OsInfo.OsServicePack != 0)
\r
13811 UniFormat(tmp, sizeof(tmp), _UU("SM_OS_SP_TAG"), t.OsInfo.OsServicePack);
\r
13812 LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_OS_SERVICE_PACK"), tmp);
\r
13815 StrToUni(tmp, sizeof(tmp), t.OsInfo.OsVendorName);
\r
13816 LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_OS_VENDER_NAME"), tmp);
\r
13818 StrToUni(tmp, sizeof(tmp), t.OsInfo.OsVersion);
\r
13819 LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_OS_VERSION"), tmp);
\r
13821 StrToUni(tmp, sizeof(tmp), t.OsInfo.KernelName);
\r
13822 LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_OS_KERNEL_NAME"), tmp);
\r
13824 StrToUni(tmp, sizeof(tmp), t.OsInfo.KernelVersion);
\r
13825 LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_OS_KERNEL_VERSION"), tmp);
\r
13827 SmAddServerCaps(b, p->CapsList);
\r
13829 LvInsertEnd(b, hWnd, L_STATUS);
\r
13831 FreeRpcServerInfo(&t);
\r
13836 // サーバーの Caps を画面に表示する
\r
13837 void SmAddServerCaps(LVB *b, CAPSLIST *t)
\r
13841 if (b == NULL || t == NULL)
\r
13846 for (i = 0;i < LIST_NUM(t->CapsList);i++)
\r
13848 CAPS *c = LIST_DATA(t->CapsList, i);
\r
13849 wchar_t title[MAX_SIZE];
\r
13852 Format(name, sizeof(name), "CT_%s", c->Name);
\r
13854 UniStrCpy(title, sizeof(title), _UU(name));
\r
13856 if (UniIsEmptyStr(title))
\r
13858 UniFormat(title, sizeof(title), L"%S", (StrLen(c->Name) >= 2) ? c->Name + 2 : c->Name);
\r
13861 if (StartWith(c->Name, "b_"))
\r
13863 bool icon_pass = c->Value == 0 ? false : true;
\r
13864 if (StrCmpi(c->Name, "b_must_install_pcap") == 0)
\r
13866 // WinPcap の項目のみ反転する
\r
13867 icon_pass = !icon_pass;
\r
13869 LvInsertAdd(b, icon_pass == false ? ICO_DISCARD : ICO_PASS,
\r
13870 NULL, 2, title, c->Value == 0 ? _UU("CAPS_NO") : _UU("CAPS_YES"));
\r
13875 UniToStru(str, c->Value);
\r
13876 LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, title, str);
\r
13882 bool SmRefreshServerStatus(HWND hWnd, SM_SERVER *p, void *param)
\r
13884 RPC_SERVER_STATUS t;
\r
13886 wchar_t tmp[MAX_SIZE];
\r
13887 char str[MAX_SIZE];
\r
13889 if (hWnd == NULL || p == NULL)
\r
13894 Zero(&t, sizeof(t));
\r
13895 if (CALL(hWnd, ScGetServerStatus(p->Rpc, &t)) == false)
\r
13900 b = LvInsertStart();
\r
13903 LvInsertAdd(b, t.ServerType == SERVER_TYPE_STANDALONE ? ICO_SERVER_ONLINE : ICO_FARM, 0,
\r
13904 2, _UU("SM_ST_SERVER_TYPE"),
\r
13905 GetServerTypeStr(t.ServerType));
\r
13908 UniToStru(tmp, t.NumTcpConnections);
\r
13909 LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, _UU("SM_ST_NUM_TCP"), tmp);
\r
13911 if (t.ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
13913 // ローカル TCP コネクション数
\r
13914 UniToStru(tmp, t.NumTcpConnectionsLocal);
\r
13915 LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, _UU("SM_ST_NUM_TCP_LOCAL"), tmp);
\r
13917 // リモート TCP コネクション数
\r
13918 UniToStru(tmp, t.NumTcpConnectionsRemote);
\r
13919 LvInsertAdd(b, ICO_PROTOCOL, NULL, 2, _UU("SM_ST_NUM_TCP_REMOTE"), tmp);
\r
13923 UniToStru(tmp, t.NumHubTotal);
\r
13924 LvInsertAdd(b, ICO_HUB, NULL, 2, _UU("SM_ST_NUM_HUB_TOTAL"), tmp);
\r
13926 if (t.ServerType != SERVER_TYPE_STANDALONE)
\r
13929 UniToStru(tmp, t.NumHubStatic);
\r
13930 LvInsertAdd(b, ICO_HUB, NULL, 2, _UU("SM_ST_NUM_HUB_STATIC"), tmp);
\r
13933 UniToStru(tmp, t.NumHubDynamic);
\r
13934 LvInsertAdd(b, ICO_HUB, NULL, 2, _UU("SM_ST_NUM_HUB_DYNAMIC"), tmp);
\r
13938 UniToStru(tmp, t.NumSessionsTotal);
\r
13939 LvInsertAdd(b, ICO_VPN, NULL, 2, _UU("SM_ST_NUM_SESSION_TOTAL"), tmp);
\r
13941 if (t.ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
13944 UniToStru(tmp, t.NumSessionsLocal);
\r
13945 LvInsertAdd(b, ICO_VPN, NULL, 2, _UU("SM_ST_NUM_SESSION_LOCAL"), tmp);
\r
13948 UniToStru(tmp, t.NumSessionsRemote);
\r
13949 LvInsertAdd(b, ICO_VPN, NULL, 2, _UU("SM_ST_NUM_SESSION_REMOTE"), tmp);
\r
13953 UniToStru(tmp, t.NumMacTables);
\r
13954 LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_ST_NUM_MAC_TABLE"), tmp);
\r
13957 UniToStru(tmp, t.NumIpTables);
\r
13958 LvInsertAdd(b, ICO_MACHINE, NULL, 2, _UU("SM_ST_NUM_IP_TABLE"), tmp);
\r
13961 UniToStru(tmp, t.NumUsers);
\r
13962 LvInsertAdd(b, ICO_USER, NULL, 2, _UU("SM_ST_NUM_USERS"), tmp);
\r
13965 UniToStru(tmp, t.NumGroups);
\r
13966 LvInsertAdd(b, ICO_GROUP, NULL, 2, _UU("SM_ST_NUM_GROUPS"), tmp);
\r
13969 UniToStru(tmp, t.AssignedClientLicenses);
\r
13970 LvInsertAdd(b, ICO_CERT, NULL, 2, _UU("SM_ST_CLIENT_LICENSE"), tmp);
\r
13971 UniToStru(tmp, t.AssignedBridgeLicenses);
\r
13972 LvInsertAdd(b, ICO_CERT, NULL, 2, _UU("SM_ST_BRIDGE_LICENSE"), tmp);
\r
13974 if (t.ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
13976 UniToStru(tmp, t.AssignedClientLicensesTotal);
\r
13977 LvInsertAdd(b, ICO_CERT, NULL, 2, _UU("SM_ST_CLIENT_LICENSE_EX"), tmp);
\r
13978 UniToStru(tmp, t.AssignedBridgeLicensesTotal);
\r
13979 LvInsertAdd(b, ICO_CERT, NULL, 2, _UU("SM_ST_BRIDGE_LICENSE_EX"), tmp);
\r
13983 SmInsertTrafficInfo(b, &t.Traffic);
\r
13986 GetDateTimeStrEx64(tmp, sizeof(tmp), SystemToLocal64(t.StartTime), NULL);
\r
13987 LvInsertAdd(b, ICO_NULL, NULL, 2, _UU("SM_ST_START_TIME"), tmp);
\r
13990 GetDateTimeStrMilli64(str, sizeof(str), SystemToLocal64(t.CurrentTime));
\r
13991 StrToUni(tmp, sizeof(tmp), str);
\r
13992 LvInsertAdd(b, ICO_NULL, NULL, 2, _UU("SM_ST_CURRENT_TIME"), tmp);
\r
13995 UniFormat(tmp, sizeof(tmp), L"%I64u", t.CurrentTick);
\r
13996 LvInsertAdd(b, ICO_NULL, NULL, 2, _UU("SM_ST_CURRENT_TICK"), tmp);
\r
13999 if (t.MemInfo.TotalMemory != 0)
\r
14003 ToStr3(vv, sizeof(vv), t.MemInfo.TotalMemory);
\r
14004 UniFormat(tmp, sizeof(tmp), _UU("SM_ST_RAM_SIZE_KB"), vv);
\r
14005 LvInsertAdd(b, ICO_MEMORY, NULL, 2, _UU("SM_ST_TOTAL_MEMORY"), tmp);
\r
14007 ToStr3(vv, sizeof(vv), t.MemInfo.UsedMemory);
\r
14008 UniFormat(tmp, sizeof(tmp), _UU("SM_ST_RAM_SIZE_KB"), vv);
\r
14009 LvInsertAdd(b, ICO_MEMORY, NULL, 2, _UU("SM_ST_USED_MEMORY"), tmp);
\r
14011 ToStr3(vv, sizeof(vv), t.MemInfo.FreeMemory);
\r
14012 UniFormat(tmp, sizeof(tmp), _UU("SM_ST_RAM_SIZE_KB"), vv);
\r
14013 LvInsertAdd(b, ICO_MEMORY, NULL, 2, _UU("SM_ST_FREE_MEMORY"), tmp);
\r
14015 ToStr3(vv, sizeof(vv), t.MemInfo.TotalPhys);
\r
14016 UniFormat(tmp, sizeof(tmp), _UU("SM_ST_RAM_SIZE_KB"), vv);
\r
14017 LvInsertAdd(b, ICO_MEMORY, NULL, 2, _UU("SM_ST_TOTAL_PHYS"), tmp);
\r
14019 ToStr3(vv, sizeof(vv), t.MemInfo.UsedPhys);
\r
14020 UniFormat(tmp, sizeof(tmp), _UU("SM_ST_RAM_SIZE_KB"), vv);
\r
14021 LvInsertAdd(b, ICO_MEMORY, NULL, 2, _UU("SM_ST_USED_PHYS"), tmp);
\r
14023 ToStr3(vv, sizeof(vv), t.MemInfo.FreePhys);
\r
14024 UniFormat(tmp, sizeof(tmp), _UU("SM_ST_RAM_SIZE_KB"), vv);
\r
14025 LvInsertAdd(b, ICO_MEMORY, NULL, 2, _UU("SM_ST_FREE_PHYS"), tmp);
\r
14028 LvInsertEnd(b, hWnd, L_STATUS);
\r
14034 void SmSaveKeyPairDlgInit(HWND hWnd, SM_SAVE_KEY_PAIR *s)
\r
14038 if (hWnd == NULL || s == NULL)
\r
14043 current = MsRegReadInt(REG_CURRENT_USER, SM_REG_KEY, "SavePkcs12");
\r
14045 if (current == 1)
\r
14047 Check(hWnd, R_PKCS12, true);
\r
14049 else if (current == 2)
\r
14051 Check(hWnd, R_SECURE, true);
\r
14055 Check(hWnd, R_X509_AND_KEY, true);
\r
14058 SmSaveKeyPairDlgUpdate(hWnd, s);
\r
14062 void SmSaveKeyPairDlgUpdate(HWND hWnd, SM_SAVE_KEY_PAIR *s)
\r
14064 SECURE_DEVICE *dev;
\r
14066 wchar_t tmp[MAX_SIZE];
\r
14068 if (hWnd == NULL || s == NULL)
\r
14073 dev = GetSecureDevice(SmGetCurrentSecureIdFromReg());
\r
14076 UniStrCpy(tmp, sizeof(tmp), _UU("SEC_CURRENT_NO_DEVICE"));
\r
14080 UniFormat(tmp, sizeof(tmp), _UU("SEC_CURRENT_DEVICE"), dev->DeviceName);
\r
14083 SetText(hWnd, S_INFO, tmp);
\r
14085 if (IsChecked(hWnd, R_USE_PASS))
\r
14088 s1 = GetTextA(hWnd, E_PASS1);
\r
14089 s2 = GetTextA(hWnd, E_PASS2);
\r
14090 if (StrCmp(s1, s2) != 0)
\r
14098 if (IsChecked(hWnd, R_SECURE))
\r
14106 SetEnable(hWnd, B_SELECT, IsChecked(hWnd, R_SECURE));
\r
14107 SetEnable(hWnd, B_SECURE_MANAGER, IsChecked(hWnd, R_SECURE));
\r
14108 SetEnable(hWnd, S_INFO, IsChecked(hWnd, R_SECURE));
\r
14110 SetEnable(hWnd, E_PASS1, IsChecked(hWnd, R_USE_PASS) && (IsChecked(hWnd, R_SECURE) == false));
\r
14111 SetEnable(hWnd, E_PASS2, IsChecked(hWnd, R_USE_PASS) && (IsChecked(hWnd, R_SECURE) == false));
\r
14112 SetEnable(hWnd, S_PASS1, IsChecked(hWnd, R_USE_PASS) && (IsChecked(hWnd, R_SECURE) == false));
\r
14113 SetEnable(hWnd, S_PASS2, IsChecked(hWnd, R_USE_PASS) && (IsChecked(hWnd, R_SECURE) == false));
\r
14114 SetEnable(hWnd, R_USE_PASS, (IsChecked(hWnd, R_SECURE) == false));
\r
14115 SetEnable(hWnd, S_PASS3, (IsChecked(hWnd, R_SECURE) == false));
\r
14116 SetEnable(hWnd, S_PASS4, (IsChecked(hWnd, R_SECURE) == false));
\r
14118 SetEnable(hWnd, IDOK, ok);
\r
14122 void SmSaveKeyPairDlgOnOk(HWND hWnd, SM_SAVE_KEY_PAIR *s)
\r
14125 char pass[MAX_SIZE];
\r
14128 if (hWnd == NULL || s == NULL)
\r
14135 if (IsChecked(hWnd, R_PKCS12))
\r
14139 else if (IsChecked(hWnd, R_SECURE))
\r
14143 MsRegWriteInt(REG_CURRENT_USER, SM_REG_KEY, "SavePkcs12", pkcs12);
\r
14147 GetTxtA(hWnd, E_PASS1, pass, sizeof(pass));
\r
14149 if (StrLen(pass) != 0)
\r
14158 if (pkcs12 == false)
\r
14160 // X509 と KEY に書き込む
\r
14161 wchar_t *x509_name, *key_name;
\r
14162 x509_name = SaveDlg(hWnd, _UU("DLG_CERT_FILES"), _UU("DLG_SAVE_CERT"), NULL, L".cer");
\r
14163 if (x509_name == NULL)
\r
14170 wchar_t default_key_name[MAX_SIZE];
\r
14171 UniReplaceStrEx(default_key_name, sizeof(default_key_name), x509_name,
\r
14172 L".cer", L"", false);
\r
14173 UniReplaceStrEx(default_key_name, sizeof(default_key_name), default_key_name,
\r
14174 L".crt", L"", false);
\r
14175 UniStrCat(default_key_name, sizeof(default_key_name), L".key");
\r
14176 key_name = SaveDlg(hWnd, _UU("DLG_KEY_FILTER"), _UU("DLG_SAVE_KEY"),
\r
14177 default_key_name, L".key");
\r
14178 if (key_name == NULL)
\r
14187 char filename1[MAX_SIZE];
\r
14188 char filename2[MAX_SIZE];
\r
14190 UniToStr(filename1, sizeof(filename1), x509_name);
\r
14191 UniToStr(filename2, sizeof(filename2), key_name);
\r
14194 if (XToFile(s->Cert, filename1, true) == false)
\r
14196 MsgBox(hWnd, MB_ICONSTOP, _UU("DLG_CERT_SAVE_ERROR"));
\r
14201 if (KToFile(s->Key, filename2, true, password) == false)
\r
14203 MsgBox(hWnd, MB_ICONSTOP, _UU("DLG_KEY_SAVE_ERROR"));
\r
14210 MsgBox(hWnd, MB_ICONINFORMATION, _UU("DLG_KEY_PAIR_SAVE_OK"));
\r
14211 EndDialog(hWnd, true);
\r
14222 wchar_t *name = SaveDlg(hWnd, _UU("DLG_PKCS12_FILTER"), _UU("DLG_SAVE_P12"), NULL, L".p12");
\r
14223 if (name == NULL)
\r
14231 char filename[MAX_SIZE];
\r
14232 UniToStr(filename, sizeof(filename), name);
\r
14235 p12 = NewP12(s->Cert, s->Key, pass);
\r
14239 MsgBox(hWnd, MB_ICONSTOP, _UU("DLG_KEY_PAIR_SAVE_OK"));
\r
14244 if (P12ToFile(p12, filename) == false)
\r
14247 MsgBox(hWnd, MB_ICONSTOP, _UU("DLG_KEY_PAIR_SAVE_OK"));
\r
14252 MsgBox(hWnd, MB_ICONINFORMATION, _UU("DLG_KEY_PAIR_SAVE_OK"));
\r
14253 EndDialog(hWnd, true);
\r
14264 char default_name[MAX_SIZE];
\r
14265 char *object_name;
\r
14269 WINUI_SECURE_BATCH batch[] =
\r
14271 {WINUI_SECURE_WRITE_CERT, NULL, true, NULL, NULL, NULL, NULL, NULL, NULL},
\r
14272 {WINUI_SECURE_WRITE_KEY, NULL, true, NULL, NULL, NULL, NULL, NULL, NULL},
\r
14279 GetPrintNameFromXA(default_name, sizeof(default_name), x);
\r
14280 ConvertSafeFileName(default_name, sizeof(default_name), default_name);
\r
14282 object_name = StringDlgA(hWnd, _UU("SEC_OBJECT_NAME_TITLE"),
\r
14283 _UU("SEC_OBJECT_NAME_INFO"), default_name, ICO_CERT, false, false);
\r
14285 if (object_name != NULL)
\r
14288 batch[0].InputX = x;
\r
14289 batch[0].Name = object_name;
\r
14290 batch[1].InputK = k;
\r
14291 batch[1].Name = object_name;
\r
14293 if (SecureDeviceWindow(hWnd, batch, sizeof(batch) / sizeof(batch[0]), SmGetCurrentSecureIdFromReg(), 0) == false)
\r
14302 Free(object_name);
\r
14307 MsgBox(hWnd, MB_ICONINFORMATION, _UU("SEC_NEW_CERT_IMPORT_OK"));
\r
14309 EndDialog(hWnd, true);
\r
14314 // 証明書と秘密鍵の保存ダイアログ
\r
14315 UINT SmSaveKeyPairDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
14317 SM_SAVE_KEY_PAIR *s = (SM_SAVE_KEY_PAIR *)param;
\r
14319 if (hWnd == NULL)
\r
14326 case WM_INITDIALOG:
\r
14328 SmSaveKeyPairDlgInit(hWnd, s);
\r
14332 switch (LOWORD(wParam))
\r
14338 case R_X509_AND_KEY:
\r
14340 SmSaveKeyPairDlgUpdate(hWnd, s);
\r
14348 SmSaveKeyPairDlgOnOk(hWnd, s);
\r
14357 if (IsChecked(hWnd, R_USE_PASS))
\r
14359 FocusEx(hWnd, E_PASS1);
\r
14364 SmSelectSecureId(hWnd);
\r
14365 SmSaveKeyPairDlgUpdate(hWnd, s);
\r
14368 case B_SECURE_MANAGER:
\r
14369 CmSecureManagerEx(hWnd, SmGetCurrentSecureId(hWnd), true);
\r
14370 SmSaveKeyPairDlgUpdate(hWnd, s);
\r
14376 EndDialog(hWnd, false);
\r
14384 bool SmSaveKeyPairDlg(HWND hWnd, X *x, K *k)
\r
14386 SM_SAVE_KEY_PAIR s;
\r
14388 if (hWnd == NULL || x == NULL || k == NULL)
\r
14393 Zero(&s, sizeof(s));
\r
14397 return Dialog(hWnd, D_SM_SAVE_KEY_PAIR, SmSaveKeyPairDlgProc, &s);
\r
14400 // SSL 関係ダイアログで OK がクリックされた
\r
14401 void SmSslDlgOnOk(HWND hWnd, SM_SSL *s)
\r
14406 if (hWnd == NULL || s == NULL)
\r
14411 if (s->p->ServerAdminMode == false)
\r
14413 EndDialog(hWnd, false);
\r
14417 name = GetTextA(hWnd, C_CIPHER);
\r
14418 if (name == NULL)
\r
14425 Zero(&t, sizeof(t));
\r
14429 if (CALL(hWnd, ScSetServerCipher(s->p->Rpc, &t)) == false)
\r
14431 Focus(hWnd, C_CIPHER);
\r
14437 if (s->SetCertAndKey)
\r
14441 Zero(&t, sizeof(t));
\r
14443 t.Cert = CloneX(s->Cert);
\r
14444 t.Key = CloneK(s->Key);
\r
14446 if (CALL(hWnd, ScSetServerCert(s->p->Rpc, &t)) == false)
\r
14450 FreeRpcKeyPair(&t);
\r
14452 MsgBox(hWnd, MB_ICONINFORMATION, _UU("CM_CERT_SET_MSG"));
\r
14455 Zero(&t, sizeof(t));
\r
14456 t.UseKeepConnect = IsChecked(hWnd, R_USE_KEEP_CONNECT);
\r
14457 GetTxtA(hWnd, E_HOSTNAME, t.KeepConnectHost, sizeof(t.KeepConnectHost));
\r
14458 t.KeepConnectPort = GetInt(hWnd, E_PORT);
\r
14459 t.KeepConnectInterval = GetInt(hWnd, E_INTERVAL);
\r
14460 t.KeepConnectProtocol = IsChecked(hWnd, R_UDP) ? 1 : 0;
\r
14462 CALL(hWnd, ScSetKeep(s->p->Rpc, &t));
\r
14464 if (GetCapsBool(s->p->CapsList, "b_support_syslog"))
\r
14466 if (s->p->ServerAdminMode)
\r
14468 SYSLOG_SETTING set;
\r
14470 Zero(&set, sizeof(set));
\r
14471 GetTxtA(hWnd, E_SYSLOG_HOSTNAME, set.Hostname, sizeof(set.Hostname));
\r
14472 set.Port = GetInt(hWnd, E_SYSLOG_PORT);
\r
14473 set.SaveType = CbGetSelect(hWnd, C_SYSLOG);
\r
14475 if (CALL(hWnd, ScSetSysLog(s->p->Rpc, &set)) == false)
\r
14482 EndDialog(hWnd, true);
\r
14485 // SSL 関係ダイアログ初期化
\r
14486 void SmSslDlgInit(HWND hWnd, SM_SSL *s)
\r
14489 TOKEN_LIST *cipher_list;
\r
14492 if (hWnd == NULL || s == NULL)
\r
14497 // 暗号化アルゴリズム一覧を設定する
\r
14498 cipher_list = GetCipherList();
\r
14499 CbSetHeight(hWnd, C_CIPHER, 18);
\r
14500 for (i = 0;i < cipher_list->NumTokens;i++)
\r
14502 wchar_t tmp[MAX_SIZE];
\r
14503 char *name = cipher_list->Token[i];
\r
14504 StrToUni(tmp, sizeof(tmp), name);
\r
14505 CbAddStr(hWnd, C_CIPHER, tmp, 0);
\r
14508 if (s->p != NULL)
\r
14510 // サーバーから暗号化アルゴリズム名を取得する
\r
14512 Zero(&t, sizeof(t));
\r
14513 if (CALL(hWnd, ScGetServerCipher(s->p->Rpc, &t)))
\r
14515 wchar_t tmp[MAX_SIZE];
\r
14516 StrToUni(tmp, sizeof(tmp), t.String);
\r
14517 SetText(hWnd, C_CIPHER, tmp);
\r
14522 EndDialog(hWnd, 0);
\r
14527 if (s->p != NULL)
\r
14529 wchar_t tmp[MAX_SIZE];
\r
14530 // サーバーから SSL 証明書と秘密鍵を取得する
\r
14532 s->SetCertAndKey = false;
\r
14533 Zero(&t, sizeof(t));
\r
14534 if (CALL(hWnd, ScGetServerCert(s->p->Rpc, &t)))
\r
14537 s->Cert = CloneX(t.Cert);
\r
14538 s->Key = CloneK(t.Key);
\r
14539 FreeRpcKeyPair(&t);
\r
14543 EndDialog(hWnd, 0);
\r
14548 SmGetCertInfoStr(tmp, sizeof(tmp), s->Cert);
\r
14549 SetText(hWnd, S_CERT_INFO, tmp);
\r
14553 SetEnable(hWnd, B_PASSWORD, s->p->ServerAdminMode);
\r
14556 SetEnable(hWnd, B_IMPORT, s->p->ServerAdminMode);
\r
14557 SetEnable(hWnd, B_EXPORT, s->p->ServerAdminMode);
\r
14558 SetEnable(hWnd, R_USE_KEEP_CONNECT, s->p->ServerAdminMode);
\r
14560 if (s->p->ServerAdminMode == false)
\r
14562 Disable(hWnd, C_CIPHER);
\r
14565 if (CALL(hWnd, ScGetKeep(s->p->Rpc, &t)))
\r
14567 Check(hWnd, R_USE_KEEP_CONNECT, t.UseKeepConnect);
\r
14568 SetTextA(hWnd, E_HOSTNAME, t.KeepConnectHost);
\r
14569 SetIntEx(hWnd, E_PORT, t.KeepConnectPort);
\r
14570 SetInt(hWnd, E_INTERVAL, t.KeepConnectInterval);
\r
14571 Check(hWnd, R_TCP, t.KeepConnectProtocol == 0);
\r
14572 Check(hWnd, R_UDP, t.KeepConnectProtocol != 0);
\r
14575 CbSetHeight(hWnd, C_SYSLOG, 18);
\r
14576 CbReset(hWnd, C_SYSLOG);
\r
14577 CbAddStr(hWnd, C_SYSLOG, _UU("SM_SYSLOG_0"), SYSLOG_NONE);
\r
14578 CbAddStr(hWnd, C_SYSLOG, _UU("SM_SYSLOG_1"), SYSLOG_SERVER_LOG);
\r
14579 CbAddStr(hWnd, C_SYSLOG, _UU("SM_SYSLOG_2"), SYSLOG_SERVER_AND_HUB_SECURITY_LOG);
\r
14580 CbAddStr(hWnd, C_SYSLOG, _UU("SM_SYSLOG_3"), SYSLOG_SERVER_AND_HUB_ALL_LOG);
\r
14582 if (GetCapsBool(s->p->CapsList, "b_support_syslog"))
\r
14584 SYSLOG_SETTING set;
\r
14586 SetEnable(hWnd, C_SYSLOG, s->p->ServerAdminMode);
\r
14587 SetEnable(hWnd, E_SYSLOG_HOSTNAME, s->p->ServerAdminMode);
\r
14588 SetEnable(hWnd, E_SYSLOG_PORT, s->p->ServerAdminMode);
\r
14589 SetEnable(hWnd, S_01, s->p->ServerAdminMode);
\r
14590 SetEnable(hWnd, S_02, s->p->ServerAdminMode);
\r
14592 Zero(&set, sizeof(set));
\r
14594 if (CALL(hWnd, ScGetSysLog(s->p->Rpc, &set)))
\r
14596 SetTextA(hWnd, E_SYSLOG_HOSTNAME, set.Hostname);
\r
14597 SetInt(hWnd, E_SYSLOG_PORT, set.Port == 0 ? SYSLOG_PORT : set.Port);
\r
14598 CbSelect(hWnd, C_SYSLOG, set.SaveType);
\r
14603 Disable(hWnd, C_SYSLOG);
\r
14604 Disable(hWnd, E_SYSLOG_HOSTNAME);
\r
14605 Disable(hWnd, E_SYSLOG_PORT);
\r
14606 Disable(hWnd, S_01);
\r
14607 Disable(hWnd, S_02);
\r
14610 SmSslDlgUpdate(hWnd, s);
\r
14613 // SSL 関係ダイアログコントロール更新
\r
14614 void SmSslDlgUpdate(HWND hWnd, SM_SSL *s)
\r
14619 if (hWnd == NULL || s == NULL)
\r
14624 if (IsChecked(hWnd, R_USE_KEEP_CONNECT))
\r
14628 if (IsEmpty(hWnd, E_HOSTNAME))
\r
14632 i = GetInt(hWnd, E_PORT);
\r
14633 if (i == 0 || i >= 65536)
\r
14637 i = GetInt(hWnd, E_INTERVAL);
\r
14638 if (i < 5 || i > 600)
\r
14648 if (IsEnable(hWnd, C_SYSLOG))
\r
14650 UINT i = CbGetSelect(hWnd, C_SYSLOG);
\r
14652 SetEnable(hWnd, E_SYSLOG_HOSTNAME, i != SYSLOG_NONE);
\r
14653 SetEnable(hWnd, E_SYSLOG_PORT, i != SYSLOG_NONE);
\r
14654 SetEnable(hWnd, S_01, i != SYSLOG_NONE);
\r
14655 SetEnable(hWnd, S_02, i != SYSLOG_NONE);
\r
14658 SetEnable(hWnd, S_HOSTNAME, b);
\r
14659 SetEnable(hWnd, E_HOSTNAME, b);
\r
14660 SetEnable(hWnd, S_PORT, b);
\r
14661 SetEnable(hWnd, E_PORT, b);
\r
14662 SetEnable(hWnd, S_INTERVAL, b);
\r
14663 SetEnable(hWnd, E_INTERVAL, b);
\r
14664 SetEnable(hWnd, S_INTERVAL2, b);
\r
14665 SetEnable(hWnd, S_PROTOCOL, b);
\r
14666 SetEnable(hWnd, R_TCP, b);
\r
14667 SetEnable(hWnd, R_UDP, b);
\r
14668 SetEnable(hWnd, S_INFO, b);
\r
14670 SetEnable(hWnd, IDOK, ok);
\r
14674 void SmGetCertInfoStr(wchar_t *str, UINT size, X *x)
\r
14676 wchar_t subject[MAX_SIZE];
\r
14677 wchar_t issuer[MAX_SIZE];
\r
14678 wchar_t date[MAX_SIZE];
\r
14680 if (x == NULL || str == NULL)
\r
14689 GetPrintNameFromName(subject, sizeof(subject), x->subject_name);
\r
14690 GetPrintNameFromName(issuer, sizeof(issuer), x->issuer_name);
\r
14691 GetDateStrEx64(date, sizeof(date), x->notAfter, NULL);
\r
14693 UniFormat(str, size, _UU("CM_CERT_INFO"), subject, issuer, date);
\r
14696 // SSL 関係ダイアログプロシージャ
\r
14697 UINT SmSslDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
14699 SM_SSL *s = (SM_SSL *)param;
\r
14703 if (hWnd == NULL)
\r
14710 case WM_INITDIALOG:
\r
14712 SmSslDlgInit(hWnd, s);
\r
14716 switch (LOWORD(wParam))
\r
14718 case R_USE_KEEP_CONNECT:
\r
14725 case E_SYSLOG_HOSTNAME:
\r
14726 case E_SYSLOG_PORT:
\r
14727 SmSslDlgUpdate(hWnd, s);
\r
14735 SmSslDlgOnOk(hWnd, s);
\r
14745 if (CmLoadXAndK(hWnd, &x, &k))
\r
14747 wchar_t tmp[MAX_SIZE];
\r
14752 s->SetCertAndKey = true;
\r
14754 SmGetCertInfoStr(tmp, sizeof(tmp), s->Cert);
\r
14755 SetText(hWnd, S_CERT_INFO, tmp);
\r
14761 SmSaveKeyPairDlg(hWnd, s->Cert, s->Key);
\r
14766 CertDlg(hWnd, s->Cert, NULL, true);
\r
14771 Dialog(hWnd, D_SM_CHANGE_PASSWORD, SmChangeServerPasswordDlg, s->p);
\r
14774 case R_USE_KEEP_CONNECT:
\r
14775 if (IsChecked(hWnd, R_USE_KEEP_CONNECT))
\r
14777 FocusEx(hWnd, E_HOSTNAME);
\r
14784 EndDialog(hWnd, false);
\r
14791 // SSL 関係ダイアログの表示
\r
14792 void SmSslDlg(HWND hWnd, SM_SERVER *p)
\r
14796 if (hWnd == NULL || p == NULL)
\r
14801 Zero(&s, sizeof(s));
\r
14804 Dialog(hWnd, D_SM_SSL, SmSslDlgProc, &s);
\r
14811 // リスナー作成ダイアログプロシージャ
\r
14812 UINT SmCreateListenerDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
14816 SM_SERVER *p = (SM_SERVER *)param;
\r
14818 if (hWnd == NULL)
\r
14825 case WM_INITDIALOG:
\r
14826 Focus(hWnd, E_PORT);
\r
14827 Disable(hWnd, IDOK);
\r
14831 switch (LOWORD(wParam))
\r
14834 port = GetInt(hWnd, E_PORT);
\r
14835 if (port == 0 || port >= 65536)
\r
14837 Disable(hWnd, IDOK);
\r
14841 Enable(hWnd, IDOK);
\r
14849 port = GetInt(hWnd, E_PORT);
\r
14850 Zero(&t, sizeof(t));
\r
14853 if (CALL(hWnd, ScCreateListener(p->Rpc, &t)))
\r
14855 EndDialog(hWnd, true);
\r
14864 EndDialog(hWnd, false);
\r
14872 bool SmCreateListenerDlg(HWND hWnd, SM_SERVER *p)
\r
14875 if (hWnd == NULL || p == NULL)
\r
14880 return Dialog(hWnd, D_SM_CREATE_LISTENER, SmCreateListenerDlgProc, p);
\r
14884 void SmEditHubOnOk(HWND hWnd, SM_EDIT_HUB *s)
\r
14886 RPC_CREATE_HUB t;
\r
14887 char pass1[MAX_SIZE];
\r
14888 char pass2[MAX_SIZE];
\r
14889 char hubname[MAX_HUBNAME_LEN + 1];
\r
14891 if (hWnd == NULL || s == NULL)
\r
14896 Zero(&t, sizeof(t));
\r
14899 StrCpy(hubname, sizeof(hubname), s->HubName);
\r
14900 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
14904 GetTxtA(hWnd, E_HUBNAME, t.HubName, sizeof(t.HubName));
\r
14905 StrCpy(hubname, sizeof(hubname), t.HubName);
\r
14908 GetTxtA(hWnd, E_PASSWORD1, pass1, sizeof(pass1));
\r
14909 GetTxtA(hWnd, E_PASSWORD2, pass2, sizeof(pass2));
\r
14911 if (s->EditMode == false || StrCmp(pass1, HIDDEN_PASSWORD) != 0)
\r
14913 Hash(t.HashedPassword, pass1, StrLen(pass1), true);
\r
14914 HashPassword(t.SecurePassword, ADMINISTRATOR_USERNAME, pass1);
\r
14917 if (IsChecked(hWnd, R_LIMIT_MAX_SESSION))
\r
14919 t.HubOption.MaxSession = GetInt(hWnd, E_MAX_SESSION);
\r
14922 t.Online = IsChecked(hWnd, R_ONLINE);
\r
14924 if (s->p->ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
14926 t.HubType = HUB_TYPE_FARM_STATIC;
\r
14927 if (IsChecked(hWnd, R_DYNAMIC))
\r
14929 t.HubType = HUB_TYPE_FARM_DYNAMIC;
\r
14933 t.HubOption.NoEnum = IsChecked(hWnd, R_NO_ENUM);
\r
14935 if (s->EditMode == false)
\r
14937 if (CALL(hWnd, ScCreateHub(s->p->Rpc, &t)))
\r
14939 MsgBoxEx(hWnd, MB_ICONINFORMATION, _UU("CM_EDIT_HUB_CREATER"), hubname);
\r
14940 EndDialog(hWnd, true);
\r
14945 if (CALL(hWnd, ScSetHub(s->p->Rpc, &t)))
\r
14947 EndDialog(hWnd, true);
\r
14953 void SmEditHubUpdate(HWND hWnd, SM_EDIT_HUB *s)
\r
14957 char hubname[MAX_HUBNAME_LEN + 1];
\r
14959 if (hWnd == NULL || s == NULL)
\r
14964 s1 = GetTextA(hWnd, E_PASSWORD1);
\r
14965 s2 = GetTextA(hWnd, E_PASSWORD2);
\r
14966 if (StrCmp(s1, s2) != 0)
\r
14973 GetTxtA(hWnd, E_HUBNAME, hubname, sizeof(hubname));
\r
14975 if (StrLen(hubname) == 0 ||
\r
14976 IsSafeStr(hubname) == false)
\r
14981 if (IsChecked(hWnd, R_LIMIT_MAX_SESSION))
\r
14983 Enable(hWnd, E_MAX_SESSION);
\r
14984 Enable(hWnd, S_MAX_SESSION_1);
\r
14985 Enable(hWnd, S_MAX_SESSION_2);
\r
14986 if (GetInt(hWnd, E_MAX_SESSION) == 0)
\r
14993 Disable(hWnd, E_MAX_SESSION);
\r
14994 Disable(hWnd, S_MAX_SESSION_1);
\r
14995 Disable(hWnd, S_MAX_SESSION_2);
\r
14998 SetEnable(hWnd, IDOK, ok);
\r
15002 void SmEditHubInit(HWND hWnd, SM_EDIT_HUB *s)
\r
15004 RPC_CREATE_HUB t;
\r
15006 bool support_extoption = false;
\r
15008 if (hWnd == NULL || s == NULL)
\r
15013 SetIcon(hWnd, 0, ICO_HUB);
\r
15015 Zero(&t, sizeof(t));
\r
15017 if (s->EditMode == false)
\r
15020 SetText(hWnd, 0, _UU("CM_EDIT_HUB_1"));
\r
15021 FocusEx(hWnd, E_HUBNAME);
\r
15023 if (s->p->ServerType == SERVER_TYPE_STANDALONE)
\r
15026 Disable(hWnd, R_STATIC);
\r
15027 Disable(hWnd, R_DYNAMIC);
\r
15028 SetText(hWnd, S_FARM_INFO, _UU("CM_EDIT_HUB_STANDALONE"));
\r
15032 Check(hWnd, R_STATIC, true);
\r
15035 Check(hWnd, R_ONLINE, true);
\r
15037 Hide(hWnd, B_ACL);
\r
15038 Hide(hWnd, S_ACL);
\r
15039 Hide(hWnd, S_ACL_2);
\r
15040 Hide(hWnd, S_ACL_3);
\r
15041 Hide(hWnd, S_MSG_1);
\r
15042 Hide(hWnd, S_MSG_4);
\r
15043 Hide(hWnd, S_MSG_2);
\r
15044 Hide(hWnd, B_MSG);
\r
15049 wchar_t tmp[MAX_SIZE];
\r
15050 UniFormat(tmp, sizeof(tmp), _UU("CM_EDIT_HUB_2"), s->HubName);
\r
15051 SetText(hWnd, 0, tmp);
\r
15052 SetTextA(hWnd, E_HUBNAME, s->HubName);
\r
15053 Disable(hWnd, E_HUBNAME);
\r
15055 if (s->p->ServerType == SERVER_TYPE_STANDALONE)
\r
15058 Disable(hWnd, R_STATIC);
\r
15059 Disable(hWnd, R_DYNAMIC);
\r
15060 SetText(hWnd, S_FARM_INFO, _UU("CM_EDIT_HUB_STANDALONE"));
\r
15063 if (s->p->ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
15066 if (GetCapsBool(s->p->CapsList, "b_cluster_hub_type_fixed"))
\r
15068 Disable(hWnd, R_STATIC);
\r
15069 Disable(hWnd, R_DYNAMIC);
\r
15070 SetText(hWnd, S_FARM_INFO, _UU("CM_EDIT_HUB_TYPE_FIXED"));
\r
15075 StrCpy(t.HubName, sizeof(t.HubName), s->HubName);
\r
15076 if (CALL(hWnd, ScGetHub(s->p->Rpc, &t)) == false)
\r
15078 EndDialog(hWnd, false);
\r
15082 SetTextA(hWnd, E_PASSWORD1, HIDDEN_PASSWORD);
\r
15083 SetTextA(hWnd, E_PASSWORD2, HIDDEN_PASSWORD);
\r
15085 if (t.HubOption.MaxSession == 0)
\r
15087 Check(hWnd, R_LIMIT_MAX_SESSION, false);
\r
15091 Check(hWnd, R_LIMIT_MAX_SESSION, true);
\r
15094 Check(hWnd, R_NO_ENUM, t.HubOption.NoEnum);
\r
15096 SetIntEx(hWnd, E_MAX_SESSION, t.HubOption.MaxSession);
\r
15098 Check(hWnd, R_ONLINE, t.Online);
\r
15099 Check(hWnd, R_OFFLINE, t.Online ? false : true);
\r
15101 Check(hWnd, R_STATIC, t.HubType == HUB_TYPE_FARM_STATIC);
\r
15102 Check(hWnd, R_DYNAMIC, t.HubType == HUB_TYPE_FARM_DYNAMIC);
\r
15104 SetShow(hWnd, B_ACL, GetCapsBool(s->p->CapsList, "b_support_ac"));
\r
15105 SetShow(hWnd, S_ACL, GetCapsBool(s->p->CapsList, "b_support_ac"));
\r
15106 SetShow(hWnd, S_ACL_2, GetCapsBool(s->p->CapsList, "b_support_ac"));
\r
15107 SetShow(hWnd, S_ACL_3, GetCapsBool(s->p->CapsList, "b_support_ac"));
\r
15109 SetShow(hWnd, S_MSG_1, GetCapsBool(s->p->CapsList, "b_support_msg"));
\r
15110 SetShow(hWnd, S_MSG_4, GetCapsBool(s->p->CapsList, "b_support_msg"));
\r
15111 SetShow(hWnd, S_MSG_2, GetCapsBool(s->p->CapsList, "b_support_msg"));
\r
15112 SetShow(hWnd, B_MSG, GetCapsBool(s->p->CapsList, "b_support_msg"));
\r
15118 support_extoption = GetCapsBool(s->p->CapsList, "b_support_hub_ext_options");
\r
15121 SetEnable(hWnd, S_STATIC, support_extoption);
\r
15122 SetEnable(hWnd, B_EXTOPTION, support_extoption);
\r
15124 SetEnable(hWnd, R_NO_ENUM, GetCapsBool(s->p->CapsList, "b_support_hide_hub"));
\r
15126 SmEditHubUpdate(hWnd, s);
\r
15130 Focus(hWnd, IDOK);
\r
15135 if (GetCapsBool(s->p->CapsList, "b_support_hub_admin_option"))
\r
15141 SetShow(hWnd, S_AO_1, b);
\r
15142 SetShow(hWnd, S_AO_2, b);
\r
15143 SetShow(hWnd, S_AO_3, b);
\r
15144 SetShow(hWnd, B_ADMINOPTION, b);
\r
15148 UINT SmEditHubProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
15150 SM_EDIT_HUB *s = (SM_EDIT_HUB *)param;
\r
15152 if (hWnd == NULL)
\r
15159 case WM_INITDIALOG:
\r
15160 SmEditHubInit(hWnd, s);
\r
15164 switch (LOWORD(wParam))
\r
15166 case E_PASSWORD1:
\r
15167 case E_PASSWORD2:
\r
15169 case R_LIMIT_MAX_SESSION:
\r
15170 case E_MAX_SESSION:
\r
15171 SmEditHubUpdate(hWnd, s);
\r
15178 SmEditHubOnOk(hWnd, s);
\r
15185 case R_LIMIT_MAX_SESSION:
\r
15186 if (IsChecked(hWnd, R_LIMIT_MAX_SESSION))
\r
15188 FocusEx(hWnd, E_MAX_SESSION);
\r
15192 case B_ADMINOPTION:
\r
15193 SmHubAdminOption(hWnd, s);
\r
15196 case B_EXTOPTION:
\r
15197 SmHubExtOption(hWnd, s);
\r
15201 SmHubAc(hWnd, s);
\r
15205 SmHubMsg(hWnd, s);
\r
15211 EndDialog(hWnd, false);
\r
15219 bool SmEditHubDlg(HWND hWnd, SM_SERVER *p, char *hubname)
\r
15223 if (hWnd == NULL || p == NULL)
\r
15228 Zero(&s, sizeof(s));
\r
15230 s.EditMode = true;
\r
15231 StrCpy(s.HubName, sizeof(s.HubName), hubname);
\r
15233 if (p->Bridge == false)
\r
15235 return Dialog(hWnd, D_SM_EDIT_HUB, SmEditHubProc, &s);
\r
15239 SmHubExtOption(hWnd, &s);
\r
15245 bool SmCreateHubDlg(HWND hWnd, SM_SERVER *p)
\r
15249 if (hWnd == NULL || p == NULL)
\r
15254 Zero(&s, sizeof(s));
\r
15256 s.EditMode = false;
\r
15258 return Dialog(hWnd, D_SM_EDIT_HUB, SmEditHubProc, &s);
\r
15262 bool SmRefreshHubStatus(HWND hWnd, SM_SERVER *p, void *param)
\r
15264 RPC_HUB_STATUS t;
\r
15266 if (hWnd == NULL || p == NULL || param == NULL)
\r
15271 Zero(&t, sizeof(RPC_HUB_STATUS));
\r
15272 StrCpy(t.HubName, sizeof(t.HubName), (char *)param);
\r
15273 if (CALL(hWnd, ScGetHubStatus(p->Rpc, &t)))
\r
15276 wchar_t tmp[MAX_SIZE];
\r
15277 LVB *b = LvInsertStart();
\r
15280 s = CopyStrToUni((char *)param);
\r
15281 LvInsertAdd(b, ICO_HUB, 0, 2, _UU("SM_HUB_STATUS_HUBNAME"), s);
\r
15285 LvInsertAdd(b, t.Online ? ICO_PROTOCOL : ICO_PROTOCOL_X, 0, 2, _UU("SM_HUB_STATUS_ONLINE"),
\r
15286 t.Online ? _UU("SM_HUB_ONLINE") : _UU("SM_HUB_OFFLINE"));
\r
15289 LvInsertAdd(b, t.HubType == HUB_TYPE_STANDALONE ? ICO_TOWER : ICO_FARM, 0, 2, _UU("SM_HUB_TYPE"),
\r
15290 GetHubTypeStr(t.HubType));
\r
15292 if (t.HubType == HUB_TYPE_STANDALONE)
\r
15294 // SecureNAT の有効/無効
\r
15295 LvInsertAdd(b, ICO_ROUTER, NULL, 2, _UU("SM_HUB_SECURE_NAT"),
\r
15296 t.SecureNATEnabled ? _UU("SM_HUB_SECURE_NAT_YES") : _UU("SM_HUB_SECURE_NAT_NO"));
\r
15300 UniToStru(tmp, t.NumSessions);
\r
15301 LvInsertAdd(b, ICO_PROTOCOL, 0, 2, _UU("SM_HUB_NUM_SESSIONS"), tmp);
\r
15302 if (t.NumSessionsClient != 0 || t.NumSessionsBridge != 0)
\r
15304 UniToStru(tmp, t.NumSessionsClient);
\r
15305 LvInsertAdd(b, ICO_PROTOCOL, 0, 2, _UU("SM_HUB_NUM_SESSIONS_CLIENT"), tmp);
\r
15306 UniToStru(tmp, t.NumSessionsBridge);
\r
15307 LvInsertAdd(b, ICO_PROTOCOL, 0, 2, _UU("SM_HUB_NUM_SESSIONS_BRIDGE"), tmp);
\r
15310 UniToStru(tmp, t.NumAccessLists);
\r
15311 LvInsertAdd(b, ICO_DISCARD, 0, 2, _UU("SM_HUB_NUM_ACCESSES"), tmp);
\r
15313 if (p->ServerType != SERVER_TYPE_FARM_MEMBER)
\r
15315 UniToStru(tmp, t.NumUsers);
\r
15316 LvInsertAdd(b, ICO_USER, 0, 2, _UU("SM_HUB_NUM_USERS"), tmp);
\r
15317 UniToStru(tmp, t.NumGroups);
\r
15318 LvInsertAdd(b, ICO_GROUP, 0, 2, _UU("SM_HUB_NUM_GROUPS"), tmp);
\r
15321 UniToStru(tmp, t.NumMacTables);
\r
15322 LvInsertAdd(b, ICO_MACHINE, 0, 2, _UU("SM_HUB_NUM_MAC_TABLES"), tmp);
\r
15323 UniToStru(tmp, t.NumIpTables);
\r
15324 LvInsertAdd(b, ICO_MACHINE, 0, 2, _UU("SM_HUB_NUM_IP_TABLES"), tmp);
\r
15327 UniToStru(tmp, t.NumLogin);
\r
15328 LvInsertAdd(b, ICO_KEY, NULL, 2, _UU("SM_HUB_NUM_LOGIN"), tmp);
\r
15330 if (t.LastLoginTime != 0)
\r
15332 GetDateTimeStr64Uni(tmp, sizeof(tmp), SystemToLocal64(t.LastLoginTime));
\r
15336 UniStrCpy(tmp, sizeof(tmp), _UU("COMMON_UNKNOWN"));
\r
15338 LvInsertAdd(b, ICO_DATETIME, NULL, 2, _UU("SM_HUB_LAST_LOGIN_TIME"), tmp);
\r
15340 if (t.LastCommTime != 0)
\r
15342 GetDateTimeStr64Uni(tmp, sizeof(tmp), SystemToLocal64(t.LastCommTime));
\r
15346 UniStrCpy(tmp, sizeof(tmp), _UU("COMMON_UNKNOWN"));
\r
15348 LvInsertAdd(b, ICO_DATETIME, NULL, 2, _UU("SM_HUB_LAST_COMM_TIME"), tmp);
\r
15350 if (t.CreatedTime != 0)
\r
15352 GetDateTimeStr64Uni(tmp, sizeof(tmp), SystemToLocal64(t.CreatedTime));
\r
15356 UniStrCpy(tmp, sizeof(tmp), _UU("COMMON_UNKNOWN"));
\r
15358 LvInsertAdd(b, ICO_DATETIME, NULL, 2, _UU("SM_HUB_CREATED_TIME"), tmp);
\r
15361 SmInsertTrafficInfo(b, &t.Traffic);
\r
15363 LvInsertEnd(b, hWnd, L_STATUS);
\r
15373 // トラフィック情報を LVB に追加
\r
15374 void SmInsertTrafficInfo(LVB *b, TRAFFIC *t)
\r
15376 wchar_t tmp[MAX_SIZE];
\r
15379 if (b == NULL || t == NULL)
\r
15385 ToStr3(vv, sizeof(vv), t->Send.UnicastCount);
\r
15386 UniFormat(tmp, sizeof(tmp), _UU("SM_ST_NUM_PACKET_STR"), vv);
\r
15387 LvInsertAdd(b, ICO_INFORMATION, 0, 2, _UU("SM_ST_SEND_UCAST_NUM"), tmp);
\r
15389 ToStr3(vv, sizeof(vv), t->Send.UnicastBytes);
\r
15390 UniFormat(tmp, sizeof(tmp), _UU("SM_ST_SIZE_BYTE_STR"), vv);
\r
15391 LvInsertAdd(b, ICO_INFORMATION, 0, 2, _UU("SM_ST_SEND_UCAST_SIZE"), tmp);
\r
15393 ToStr3(vv, sizeof(vv), t->Send.BroadcastCount);
\r
15394 UniFormat(tmp, sizeof(tmp), _UU("SM_ST_NUM_PACKET_STR"), vv);
\r
15395 LvInsertAdd(b, ICO_INFORMATION, 0, 2, _UU("SM_ST_SEND_BCAST_NUM"), tmp);
\r
15397 ToStr3(vv, sizeof(vv), t->Send.BroadcastBytes);
\r
15398 UniFormat(tmp, sizeof(tmp), _UU("SM_ST_SIZE_BYTE_STR"), vv);
\r
15399 LvInsertAdd(b, ICO_INFORMATION, 0, 2, _UU("SM_ST_SEND_BCAST_SIZE"), tmp);
\r
15402 ToStr3(vv, sizeof(vv), t->Recv.UnicastCount);
\r
15403 UniFormat(tmp, sizeof(tmp), _UU("SM_ST_NUM_PACKET_STR"), vv);
\r
15404 LvInsertAdd(b, ICO_INFORMATION, 0, 2, _UU("SM_ST_RECV_UCAST_NUM"), tmp);
\r
15406 ToStr3(vv, sizeof(vv), t->Recv.UnicastBytes);
\r
15407 UniFormat(tmp, sizeof(tmp), _UU("SM_ST_SIZE_BYTE_STR"), vv);
\r
15408 LvInsertAdd(b, ICO_INFORMATION, 0, 2, _UU("SM_ST_RECV_UCAST_SIZE"), tmp);
\r
15410 ToStr3(vv, sizeof(vv), t->Recv.BroadcastCount);
\r
15411 UniFormat(tmp, sizeof(tmp), _UU("SM_ST_NUM_PACKET_STR"), vv);
\r
15412 LvInsertAdd(b, ICO_INFORMATION, 0, 2, _UU("SM_ST_RECV_BCAST_NUM"), tmp);
\r
15414 ToStr3(vv, sizeof(vv), t->Recv.BroadcastBytes);
\r
15415 UniFormat(tmp, sizeof(tmp), _UU("SM_ST_SIZE_BYTE_STR"), vv);
\r
15416 LvInsertAdd(b, ICO_INFORMATION, 0, 2, _UU("SM_ST_RECV_BCAST_SIZE"), tmp);
\r
15419 // ステータス表示ダイアログプロシージャ
\r
15420 UINT SmStatusDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
15422 SM_STATUS *s = (SM_STATUS *)param;
\r
15424 if (hWnd == NULL)
\r
15431 case WM_INITDIALOG:
\r
15433 LvInitEx(hWnd, L_STATUS, s->NoImage);
\r
15434 LvSetStyle(hWnd, L_STATUS, LVS_EX_GRIDLINES);
\r
15435 SetIcon(hWnd, 0, s->Icon);
\r
15436 SetIcon(hWnd, S_ICON, s->Icon);
\r
15437 SetText(hWnd, 0, s->Caption);
\r
15438 SetText(hWnd, S_TITLE, s->Caption);
\r
15439 DlgFont(hWnd, S_TITLE, 15, true);
\r
15440 if (s->InitProc != NULL)
\r
15442 s->InitProc(hWnd, s->p, s->Param);
\r
15447 LvInsertColumn(hWnd, L_STATUS, 0, _UU("SM_STATUS_COLUMN_1"), 0);
\r
15448 LvInsertColumn(hWnd, L_STATUS, 1, _UU("SM_STATUS_COLUMN_2"), 0);
\r
15450 if (s->RefreshProc(hWnd, s->p, s->Param) == false)
\r
15454 LvAutoSize(hWnd, L_STATUS);
\r
15455 Focus(hWnd, L_STATUS);
\r
15457 if (s->show_refresh_button == false)
\r
15459 Hide(hWnd, IDOK);
\r
15469 if (s->RefreshProc(hWnd, s->p, s->Param) == false)
\r
15473 LvAutoSize(hWnd, L_STATUS);
\r
15483 EndDialog(hWnd, 0);
\r
15487 LvStandardHandler(hWnd, msg, wParam, lParam, L_STATUS);
\r
15493 void SmStatusDlg(HWND hWnd, SM_SERVER *p, void *param, bool no_image, bool show_refresh_button, wchar_t *caption, UINT icon,
\r
15494 SM_STATUS_INIT_PROC *init, SM_STATUS_REFRESH_PROC *refresh)
\r
15498 if (hWnd == NULL || p == NULL || refresh == NULL)
\r
15505 icon = ICO_INFORMATION;
\r
15507 if (caption == NULL)
\r
15509 caption = _UU("SM_INFORMATION");
\r
15512 Zero(&s, sizeof(s));
\r
15513 s.show_refresh_button = show_refresh_button;
\r
15515 s.NoImage = no_image;
\r
15518 s.Caption = caption;
\r
15519 s.InitProc = init;
\r
15520 s.RefreshProc = refresh;
\r
15522 Dialog(hWnd, D_SM_STATUS, SmStatusDlgProc, &s);
\r
15526 void SmServerDlgUpdate(HWND hWnd, SM_SERVER *p)
\r
15528 bool hub_selected = false;
\r
15529 bool hub_selected_online = false;
\r
15530 bool hub_selected_offline = false;
\r
15531 bool hub_have_admin_right = false;
\r
15532 bool listener_selected = false;
\r
15533 bool listener_selected_enabled = false;
\r
15534 bool listener_selected_disabled = false;
\r
15535 bool two_or_more_listener = false;
\r
15539 if (hWnd == NULL || p == NULL)
\r
15544 bridge = GetCapsBool(p->CapsList, "b_bridge");
\r
15546 hub_selected = LvIsSelected(hWnd, L_HUB);
\r
15548 if (hub_selected)
\r
15550 if (p->ServerAdminMode)
\r
15552 hub_have_admin_right = true;
\r
15554 i = LvGetSelected(hWnd, L_HUB);
\r
15555 if (i != INFINITE)
\r
15557 wchar_t *s = LvGetStr(hWnd, L_HUB, i, 1);
\r
15558 if (p->ServerAdminMode == false)
\r
15560 char *hubname = LvGetStrA(hWnd, L_HUB, i, 0);
\r
15561 if (hubname != NULL)
\r
15563 if (StrCmpi(hubname, p->HubName) == 0)
\r
15565 hub_have_admin_right = true;
\r
15570 hub_selected_online = (UniStrCmpi(s, _UU("SM_HUB_ONLINE")) == 0);
\r
15571 hub_selected_offline = hub_selected_online ? false : true;
\r
15576 listener_selected = LvIsSelected(hWnd, L_LISTENER);
\r
15577 if (listener_selected)
\r
15579 wchar_t *s = LvGetSelectedStr(hWnd, L_LISTENER, 1);
\r
15580 if (UniStrCmpi(s, _UU("CM_LISTENER_OFFLINE")) == 0)
\r
15582 listener_selected_disabled = true;
\r
15586 listener_selected_enabled = true;
\r
15591 if (LvNum(hWnd, L_LISTENER) >= 2)
\r
15593 two_or_more_listener = true;
\r
15596 SetEnable(hWnd, IDOK, bridge || (hub_selected && hub_have_admin_right));
\r
15597 SetEnable(hWnd, B_ONLINE, bridge == false && hub_selected_offline && hub_have_admin_right && p->ServerType != SERVER_TYPE_FARM_MEMBER);
\r
15598 SetEnable(hWnd, B_OFFLINE, bridge == false && hub_selected_online && hub_have_admin_right && p->ServerType != SERVER_TYPE_FARM_MEMBER);
\r
15599 SetEnable(hWnd, B_HUB_STATUS, hub_selected && hub_have_admin_right);
\r
15600 SetEnable(hWnd, B_DELETE, bridge == false && hub_selected && p->ServerAdminMode && p->ServerType != SERVER_TYPE_FARM_MEMBER);
\r
15601 SetEnable(hWnd, B_EDIT, hub_selected && hub_have_admin_right && p->ServerType != SERVER_TYPE_FARM_MEMBER);
\r
15602 SetEnable(hWnd, B_CREATE, bridge == false && p->ServerAdminMode && p->ServerType != SERVER_TYPE_FARM_MEMBER);
\r
15604 SetEnable(hWnd, B_CREATE_LISTENER, p->ServerAdminMode);
\r
15605 SetEnable(hWnd, B_DELETE_LISTENER, p->ServerAdminMode && listener_selected && two_or_more_listener);
\r
15606 SetEnable(hWnd, B_START, p->ServerAdminMode && listener_selected_disabled);
\r
15607 SetEnable(hWnd, B_STOP, p->ServerAdminMode && listener_selected_enabled);
\r
15608 SetEnable(hWnd, B_FARM, GetCapsBool(p->CapsList, "b_support_cluster") && p->ServerAdminMode);
\r
15609 SetEnable(hWnd, B_FARM_STATUS, GetCapsBool(p->CapsList, "b_support_cluster") && p->ServerType != SERVER_TYPE_STANDALONE);
\r
15612 // サーバー管理ダイアログ初期化
\r
15613 void SmServerDlgInit(HWND hWnd, SM_SERVER *p)
\r
15616 if (hWnd == NULL || p == NULL)
\r
15622 LvInit(hWnd, L_HUB);
\r
15623 LvSetStyle(hWnd, L_HUB, LVS_EX_GRIDLINES);
\r
15624 LvInsertColumn(hWnd, L_HUB, 0, _UU("SM_HUB_COLUMN_1"), 150);
\r
15625 LvInsertColumn(hWnd, L_HUB, 1, _UU("SM_HUB_COLUMN_2"), 80);
\r
15626 LvInsertColumn(hWnd, L_HUB, 2, _UU("SM_HUB_COLUMN_3"), 80);
\r
15627 LvInsertColumn(hWnd, L_HUB, 3, _UU("SM_HUB_COLUMN_4"), 80);
\r
15628 LvInsertColumn(hWnd, L_HUB, 4, _UU("SM_HUB_COLUMN_5"), 80);
\r
15629 LvInsertColumn(hWnd, L_HUB, 5, _UU("SM_HUB_COLUMN_6"), 80);
\r
15630 LvInsertColumn(hWnd, L_HUB, 6, _UU("SM_HUB_COLUMN_7"), 80);
\r
15631 LvInsertColumn(hWnd, L_HUB, 7, _UU("SM_HUB_COLUMN_8"), 80);
\r
15632 LvInsertColumn(hWnd, L_HUB, 8, _UU("SM_HUB_COLUMN_9"), 80);
\r
15633 LvInsertColumn(hWnd, L_HUB, 9, _UU("SM_HUB_COLUMN_10"), 120);
\r
15634 LvInsertColumn(hWnd, L_HUB, 10, _UU("SM_HUB_COLUMN_11"), 120);
\r
15636 LvInit(hWnd, L_LISTENER);
\r
15637 LvSetStyle(hWnd, L_LISTENER, LVS_EX_GRIDLINES);
\r
15638 LvInsertColumn(hWnd, L_LISTENER, 0, _UU("CM_LISTENER_COLUMN_1"), 90);
\r
15639 LvInsertColumn(hWnd, L_LISTENER, 1, _UU("CM_LISTENER_COLUMN_2"), 80);
\r
15641 SmServerDlgRefresh(hWnd, p);
\r
15643 if (p->ServerAdminMode == false)
\r
15645 // 仮想 HUB 管理モードの場合は唯一の HUB を選択する
\r
15646 wchar_t *s = CopyStrToUni(p->HubName);
\r
15647 LvSelect(hWnd, L_HUB, LvSearchStr(hWnd, L_HUB, 0, s));
\r
15652 // サーバー全体の管理モードの場合
\r
15653 UINT num_hubs = LvNum(hWnd, L_HUB);
\r
15655 if (num_hubs == 1)
\r
15657 // 仮想 HUB が 1 個の場合は必ずその仮想 HUB を選択する
\r
15658 LvSelect(hWnd, L_HUB, 0);
\r
15662 // 仮想 HUB が複数個ある場合は前回最後に選択した仮想 HUB を選択する
\r
15663 char tmp[MAX_SIZE];
\r
15666 Format(tmp, sizeof(tmp), "%s:%u:%s", p->CurrentSetting->ClientOption.Hostname,
\r
15667 p->CurrentSetting->ClientOption.Port,
\r
15668 p->CurrentSetting->ServerAdminMode ? "" : p->CurrentSetting->HubName);
\r
15670 hubname = MsRegReadStr(REG_CURRENT_USER, SM_LASTHUB_REG_KEY, tmp);
\r
15672 if (IsEmptyStr(hubname) == false)
\r
15674 LvSelect(hWnd, L_HUB, LvSearchStrA(hWnd, L_HUB, 0, hubname));
\r
15681 Focus(hWnd, L_HUB);
\r
15683 SmServerDlgUpdate(hWnd, p);
\r
15685 if (GetCapsBool(p->CapsList, "b_bridge"))
\r
15687 Disable(hWnd, L_HUB);
\r
15690 // ローカルブリッジボタン等はサーバーの Admin の場合に有効にする
\r
15691 SetEnable(hWnd, B_BRIDGE, GetCapsBool(p->CapsList, "b_local_bridge") && p->ServerAdminMode);
\r
15692 SetEnable(hWnd, B_CONNECTION, p->ServerAdminMode);
\r
15694 // Config R/W ボタン
\r
15695 SetEnable(hWnd, B_CONFIG, GetCapsBool(p->CapsList, "b_support_config_rw") && p->ServerAdminMode);
\r
15698 SetEnable(hWnd, B_L3, GetCapsBool(p->CapsList, "b_support_layer3") && p->ServerAdminMode);
\r
15701 SetShow(hWnd, B_LICENSE, GetCapsBool(p->CapsList, "b_support_license") && p->ServerAdminMode);
\r
15702 SetShow(hWnd, S_LICENSE, GetCapsBool(p->CapsList, "b_support_license") && p->ServerAdminMode);
\r
15703 SetShow(hWnd, S_BETA, GetCapsBool(p->CapsList, "b_beta_version") && (IsShow(hWnd, B_LICENSE) == false));
\r
15705 DlgFont(hWnd, S_BETA, 12, false);
\r
15709 void SmServerDlgRefresh(HWND hWnd, SM_SERVER *p)
\r
15714 if (hWnd == NULL || p == NULL)
\r
15720 Zero(&t, sizeof(t));
\r
15721 if (CALL(hWnd, ScEnumHub(p->Rpc, &t)))
\r
15723 LVB *b = LvInsertStart();
\r
15724 for (i = 0;i < t.NumHub;i++)
\r
15726 RPC_ENUM_HUB_ITEM *e = &t.Hubs[i];
\r
15727 wchar_t name[MAX_HUBNAME_LEN + 1];
\r
15728 wchar_t s1[64], s2[64], s3[64], s4[64], s5[64];
\r
15729 wchar_t s6[64], s7[128], s8[128];
\r
15730 UniToStru(s1, e->NumUsers);
\r
15731 UniToStru(s2, e->NumGroups);
\r
15732 UniToStru(s3, e->NumSessions);
\r
15733 UniToStru(s4, e->NumMacTables);
\r
15734 UniToStru(s5, e->NumIpTables);
\r
15736 UniToStru(s6, e->NumLogin);
\r
15738 if (e->LastLoginTime != 0)
\r
15740 GetDateTimeStr64Uni(s7, sizeof(s7), SystemToLocal64(e->LastLoginTime));
\r
15744 UniStrCpy(s7, sizeof(s7), _UU("COMMON_UNKNOWN"));
\r
15747 if (e->LastCommTime != 0)
\r
15749 GetDateTimeStr64Uni(s8, sizeof(s8), SystemToLocal64(e->LastCommTime));
\r
15753 UniStrCpy(s8, sizeof(s8), _UU("COMMON_UNKNOWN"));
\r
15756 StrToUni(name, sizeof(name), e->HubName);
\r
15759 e->Online ? ICO_HUB : ICO_HUB_OFFLINE,
\r
15763 e->Online ? _UU("SM_HUB_ONLINE") : _UU("SM_HUB_OFFLINE"),
\r
15764 GetHubTypeStr(e->HubType),
\r
15765 s1, s2, s3, s4, s5, s6, s7, s8);
\r
15767 LvInsertEnd(b, hWnd, L_HUB);
\r
15768 FreeRpcEnumHub(&t);
\r
15774 RPC_LISTENER_LIST t;
\r
15775 Zero(&t, sizeof(RPC_LISTENER_LIST));
\r
15776 if (CALL(hWnd, ScEnumListener(p->Rpc, &t)))
\r
15778 LVB *b = LvInsertStart();
\r
15779 for (i = 0;i < t.NumPort;i++)
\r
15781 wchar_t tmp[MAX_SIZE];
\r
15784 UniFormat(tmp, sizeof(tmp), _UU("CM_LISTENER_TCP_PORT"), t.Ports[i]);
\r
15786 status = _UU("CM_LISTENER_ONLINE");
\r
15787 icon = ICO_PROTOCOL;
\r
15790 status = _UU("CM_LISTENER_ERROR");
\r
15791 icon = ICO_PROTOCOL_X;
\r
15793 else if (t.Enables[i] == false)
\r
15795 status = _UU("CM_LISTENER_OFFLINE");
\r
15796 icon = ICO_PROTOCOL_OFFLINE;
\r
15799 LvInsertAdd(b, icon, (void *)t.Ports[i], 2, tmp, status);
\r
15801 LvInsertEnd(b, hWnd, L_LISTENER);
\r
15802 FreeRpcListenerList(&t);
\r
15806 SmServerDlgUpdate(hWnd, p);
\r
15809 // サーバー管理ダイアログプロシージャ
\r
15810 UINT SmServerDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
15812 SM_SERVER *p = (SM_SERVER *)param;
\r
15814 wchar_t tmp[MAX_SIZE];
\r
15818 if (hWnd == NULL)
\r
15825 case WM_INITDIALOG:
\r
15826 FormatText(hWnd, 0, p->Title);
\r
15828 if (p->Bridge == false)
\r
15830 FormatText(hWnd, S_TITLE, p->ServerName);
\r
15834 UniFormat(tmp, sizeof(tmp), _UU("SM_SERVER_BRIDGE_TITLE"), p->ServerName);
\r
15835 SetText(hWnd, S_TITLE, tmp);
\r
15837 SetText(hWnd, S_VHUB_BRIDGE, _UU("SM_S_VHUB_BRIDGE"));
\r
15840 DlgFont(hWnd, S_TITLE, 16, 1);
\r
15842 SetIcon(hWnd, 0, p->Bridge == false ? ICO_VPNSERVER : ICO_BRIDGE);
\r
15844 SmServerDlgInit(hWnd, p);
\r
15846 SetTimer(hWnd, 1, 50, NULL);
\r
15855 if (IsEnable(hWnd, IDOK))
\r
15857 if (p->Bridge == false)
\r
15859 s = LvGetSelectedStr(hWnd, L_HUB, 0);
\r
15863 s = CopyUniStr(L"BRIDGE");
\r
15867 char hubname[MAX_HUBNAME_LEN + 1];
\r
15869 Zero(&hub, sizeof(hub));
\r
15870 UniToStr(hubname, sizeof(hubname), s);
\r
15872 hub.Rpc = p->Rpc;
\r
15873 hub.HubName = hubname;
\r
15874 SmHubDlg(hWnd, &hub);
\r
15875 //SmServerDlgRefresh(hWnd, p);
\r
15883 s = LvGetSelectedStr(hWnd, L_HUB, 0);
\r
15886 RPC_SET_HUB_ONLINE t;
\r
15887 Zero(&t, sizeof(t));
\r
15888 UniToStr(t.HubName, sizeof(t.HubName), s);
\r
15890 if (CALL(hWnd, ScSetHubOnline(p->Rpc, &t)))
\r
15892 SmServerDlgRefresh(hWnd, p);
\r
15900 s = LvGetSelectedStr(hWnd, L_HUB, 0);
\r
15903 RPC_SET_HUB_ONLINE t;
\r
15904 Zero(&t, sizeof(t));
\r
15906 if (MsgBoxEx(hWnd, MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2,
\r
15907 _UU("CM_OFFLINE_MSG"), s) == IDYES)
\r
15909 UniToStr(t.HubName, sizeof(t.HubName), s);
\r
15910 t.Online = false;
\r
15911 if (CALL(hWnd, ScSetHubOnline(p->Rpc, &t)))
\r
15913 SmServerDlgRefresh(hWnd, p);
\r
15920 case B_HUB_STATUS:
\r
15922 s = LvGetSelectedStr(hWnd, L_HUB, 0);
\r
15925 wchar_t tmp[MAX_SIZE];
\r
15926 char *hubname = CopyUniToStr(s);
\r
15927 UniFormat(tmp, sizeof(tmp), _UU("SM_HUB_STATUS_CAPTION"), s);
\r
15928 SmStatusDlg(hWnd, p, hubname, false, true, tmp, ICO_HUB,
\r
15929 NULL, SmRefreshHubStatus);
\r
15937 if (SmCreateHubDlg(hWnd, p))
\r
15939 SmServerDlgRefresh(hWnd, p);
\r
15945 s = LvGetSelectedStr(hWnd, L_HUB, 0);
\r
15948 char *name = CopyUniToStr(s);
\r
15949 if (SmEditHubDlg(hWnd, p, name))
\r
15951 SmServerDlgRefresh(hWnd, p);
\r
15960 s = LvGetSelectedStr(hWnd, L_HUB, 0);
\r
15963 char *name = CopyUniToStr(s);
\r
15964 RPC_DELETE_HUB t;
\r
15965 Zero(&t, sizeof(t));
\r
15966 StrCpy(t.HubName, sizeof(t.HubName), name);
\r
15967 if (MsgBoxEx(hWnd, MB_ICONEXCLAMATION | MB_YESNO | MB_DEFBUTTON2, _UU("CM_DELETE_HUB_MSG"), name) == IDYES)
\r
15969 if (CALL(hWnd, ScDeleteHub(p->Rpc, &t)))
\r
15971 SmServerDlgRefresh(hWnd, p);
\r
15972 MsgBoxEx(hWnd, MB_ICONINFORMATION, _UU("CM_HUB_DELETED_MSG"), name);
\r
15980 case B_CREATE_LISTENER:
\r
15982 if (SmCreateListenerDlg(hWnd, p))
\r
15984 SmServerDlgRefresh(hWnd, p);
\r
15988 case B_DELETE_LISTENER:
\r
15990 i = LvGetSelected(hWnd, L_LISTENER);
\r
15991 if (i != INFINITE)
\r
15993 UINT port = (UINT)LvGetParam(hWnd, L_LISTENER, i);
\r
15994 if (MsgBoxEx(hWnd, MB_ICONEXCLAMATION | MB_YESNO | MB_DEFBUTTON2, _UU("CM_DELETE_LISTENER_MSG"), port) == IDYES)
\r
15997 Zero(&t, sizeof(t));
\r
15998 t.Enable = false;
\r
16001 if (CALL(hWnd, ScDeleteListener(p->Rpc, &t)))
\r
16003 SmServerDlgRefresh(hWnd, p);
\r
16011 i = LvGetSelected(hWnd, L_LISTENER);
\r
16012 if (i != INFINITE)
\r
16014 UINT port = (UINT)LvGetParam(hWnd, L_LISTENER, i);
\r
16016 Zero(&t, sizeof(t));
\r
16020 if (CALL(hWnd, ScEnableListener(p->Rpc, &t)))
\r
16022 SmServerDlgRefresh(hWnd, p);
\r
16029 i = LvGetSelected(hWnd, L_LISTENER);
\r
16030 if (i != INFINITE)
\r
16032 UINT port = (UINT)LvGetParam(hWnd, L_LISTENER, i);
\r
16033 if (MsgBoxEx(hWnd, MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2, _UU("CM_STOP_LISTENER_MSG"), port) == IDYES)
\r
16036 Zero(&t, sizeof(t));
\r
16037 t.Enable = false;
\r
16040 if (CALL(hWnd, ScEnableListener(p->Rpc, &t)))
\r
16042 SmServerDlgRefresh(hWnd, p);
\r
16050 SmSslDlg(hWnd, p);
\r
16055 SmStatusDlg(hWnd, p, p, false, true, _UU("SM_SERVER_STATUS"), ICO_VPNSERVER,
\r
16056 NULL, SmRefreshServerStatus);
\r
16061 SmStatusDlg(hWnd, p, p, false, false, _UU("SM_INFO_TITLE"), ICO_VPNSERVER,
\r
16062 NULL, SmRefreshServerInfo);
\r
16067 SmBridgeDlg(hWnd, p);
\r
16068 SmServerDlgRefresh(hWnd, p);
\r
16073 if (SmFarmDlg(hWnd, p))
\r
16075 // サーバー ファーム構成が変更された場合はダイアログを閉じる
\r
16080 case B_FARM_STATUS:
\r
16082 if (p->ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
16084 Dialog(hWnd, D_SM_FARM_MEMBER, SmFarmMemberDlgProc, p);
\r
16086 else if (p->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
16088 SmStatusDlg(hWnd, p, NULL, false, true, _UU("SM_FC_STATUS_CAPTION"),
\r
16089 ICO_FARM, NULL, SmRefreshFarmConnectionInfo);
\r
16093 case B_CONNECTION:
\r
16095 SmConnectionDlg(hWnd, p);
\r
16100 SmServerDlgRefresh(hWnd, p);
\r
16105 SmConfig(hWnd, p);
\r
16115 SmLicense(hWnd, p);
\r
16116 SmServerDlgUpdate(hWnd, p);
\r
16127 // 最後に選択されていた HUB を保存する
\r
16128 char *hubname = NULL;
\r
16129 char tmp[MAX_SIZE];
\r
16132 Format(tmp, sizeof(tmp), "%s:%u:%s", p->CurrentSetting->ClientOption.Hostname,
\r
16133 p->CurrentSetting->ClientOption.Port,
\r
16134 p->CurrentSetting->ServerAdminMode ? "" : p->CurrentSetting->HubName);
\r
16136 if (LvIsSingleSelected(hWnd, L_HUB))
\r
16138 hubname = LvGetSelectedStrA(hWnd, L_HUB, 0);
\r
16141 if (IsEmptyStr(hubname) == false)
\r
16143 MsRegWriteStr(REG_CURRENT_USER, SM_LASTHUB_REG_KEY, tmp, hubname);
\r
16147 MsRegDeleteValue(REG_CURRENT_USER, SM_LASTHUB_REG_KEY, tmp);
\r
16152 EndDialog(hWnd, false);
\r
16157 n = (NMHDR *)lParam;
\r
16158 switch (n->idFrom)
\r
16163 case LVN_ITEMCHANGED:
\r
16164 SmServerDlgUpdate(hWnd, p);
\r
16171 case LVN_ITEMCHANGED:
\r
16172 SmServerDlgUpdate(hWnd, p);
\r
16183 KillTimer(hWnd, 1);
\r
16185 if (p->EmptyPassword && p->ServerAdminMode)
\r
16187 // パスワードが空の場合は変更を推奨する
\r
16188 if (MsgBox(hWnd, MB_ICONQUESTION | MB_YESNO, _UU("SM_PASSWORD_MSG")) == IDYES)
\r
16190 Dialog(hWnd, D_SM_CHANGE_PASSWORD, SmChangeServerPasswordDlg, p);
\r
16194 if (p->ServerAdminMode)
\r
16196 // ライセンスキーが登録されていない場合は登録を促す
\r
16197 RPC_LICENSE_STATUS t;
\r
16199 Zero(&t, sizeof(t));
\r
16200 if (p->Bridge == false && GetCapsBool(p->CapsList, "b_support_license"))
\r
16202 if (ScGetLicenseStatus(p->Rpc, &t) == ERR_NO_ERROR)
\r
16204 if (t.EditionId == LICENSE_EDITION_VPN3_NO_LICENSE || (t.NeedSubscription && t.SubscriptionExpires == 0))
\r
16206 // 有効なライセンスキーが 1 つも登録されていない
\r
16208 if (MsgBox(hWnd, MB_YESNO | MB_ICONINFORMATION,
\r
16209 _UU("SM_SETUP_NO_LICENSE_KEY")) == IDYES)
\r
16211 SmLicense(hWnd, p);
\r
16218 SetTimer(hWnd, 2, 150, NULL);
\r
16223 KillTimer(hWnd, 2);
\r
16225 if (SmSetupIsNew(p))
\r
16227 if (SmSetup(hWnd, p))
\r
16229 SmServerDlgRefresh(hWnd, p);
\r
16233 SetTimer(hWnd, 3, 150, NULL);
\r
16238 KillTimer(hWnd, 3);
\r
16240 if (UniIsEmptyStr(p->AdminMsg) == false)
\r
16242 wchar_t tmp[MAX_SIZE];
\r
16244 UniFormat(tmp, sizeof(tmp), _UU("SM_SERVER_ADMIN_MSG"), p->ServerName);
\r
16245 OnceMsg(hWnd, tmp, p->AdminMsg, true, ICO_VPNSERVER);
\r
16252 LvStandardHandler(hWnd, msg, wParam, lParam, L_HUB);
\r
16258 void SmConnect(HWND hWnd, SETTING *s)
\r
16263 bool empty_password = false;
\r
16264 bool first_bad_password = false;
\r
16272 Disable(hWnd, L_SETTING);
\r
16273 Disable(hWnd, B_NEW_SETTING);
\r
16274 Disable(hWnd, B_EDIT_SETTING);
\r
16275 Disable(hWnd, B_DELETE);
\r
16276 Disable(hWnd, IDOK);
\r
16277 Disable(hWnd, B_ABOUT);
\r
16278 Disable(hWnd, IDCANCEL);
\r
16279 Disable(hWnd, B_SECURE_MANAGER);
\r
16280 Disable(hWnd, B_SELECT_SECURE);
\r
16284 if (IsZero(s->HashedPassword, SHA1_SIZE))
\r
16288 pass = SmPassword(hWnd, s->ClientOption.Hostname);
\r
16289 if (pass != NULL)
\r
16291 Hash(s->HashedPassword, pass, StrLen(pass), true);
\r
16303 UINT err = ERR_INTERNAL_ERROR;
\r
16305 rpc = AdminConnectEx2(sm->Cedar, &s->ClientOption, s->ServerAdminMode ? "" : s->HubName, s->HashedPassword, &err, NULL,
\r
16310 if (err != ERR_ACCESS_DENIED || first_bad_password)
\r
16312 MsgBox(hWnd, MB_ICONSTOP, _E(err));
\r
16314 if (err == ERR_ACCESS_DENIED)
\r
16317 first_bad_password = true;
\r
16318 goto ENTER_PASSWORD;
\r
16327 UCHAR test[SHA1_SIZE];
\r
16329 RPC_SERVER_STATUS status;
\r
16330 RPC_SERVER_INFO info;
\r
16331 SETTING *setting;
\r
16334 Hash(test, "", 0, true);
\r
16336 if (Cmp(test, s->HashedPassword, SHA1_SIZE) == 0)
\r
16338 empty_password = true;
\r
16341 if (sm->TempSetting == NULL)
\r
16343 setting = SmGetSetting(s->Title);
\r
16344 if (setting != NULL)
\r
16346 if (IsZero(setting->HashedPassword, SHA1_SIZE) == false)
\r
16348 Copy(setting->HashedPassword, s->HashedPassword, SHA1_SIZE);
\r
16349 SmWriteSettingList();
\r
16354 rpc->ServerAdminMode = s->ServerAdminMode;
\r
16355 if (s->ServerAdminMode == false)
\r
16357 StrCpy(rpc->HubName, sizeof(rpc->HubName), s->HubName);
\r
16360 Zero(&p, sizeof(p));
\r
16361 p.CurrentSetting = s;
\r
16363 p.EmptyPassword = empty_password;
\r
16364 p.ServerAdminMode = rpc->ServerAdminMode;
\r
16365 StrCpy(p.ServerName, sizeof(p.ServerName), s->ClientOption.Hostname);
\r
16366 if (p.ServerAdminMode == false)
\r
16368 StrCpy(p.HubName, sizeof(p.HubName), rpc->HubName);
\r
16370 UniStrCpy(p.Title, sizeof(p.Title), s->Title);
\r
16373 Zero(&status, sizeof(status));
\r
16374 ScGetServerStatus(rpc, &status);
\r
16376 p.ServerType = status.ServerType;
\r
16378 Zero(&info, sizeof(info));
\r
16379 ScGetServerInfo(rpc, &info);
\r
16381 Copy(&p.ServerInfo, &info, sizeof(RPC_SERVER_INFO));
\r
16382 Copy(&p.ServerStatus, &status, sizeof(RPC_SERVER_STATUS));
\r
16385 Zero(&msg, sizeof(msg));
\r
16386 if (ScGetAdminMsg(rpc, &msg) == ERR_NO_ERROR)
\r
16388 p.AdminMsg = UniCopyStr(msg.Msg);
\r
16389 FreeRpcMsg(&msg);
\r
16393 p.CapsList = ScGetCapsEx(p.Rpc);
\r
16395 p.Bridge = GetCapsBool(p.CapsList, "b_bridge");
\r
16397 if (GetCapsBool(p.CapsList, "b_support_policy_ver_3"))
\r
16407 Dialog(hWnd, D_SM_SERVER, SmServerDlgProc, &p);
\r
16410 AdminDisconnect(rpc);
\r
16413 FreeCapsList(p.CapsList);
\r
16415 Free(p.AdminMsg);
\r
16416 p.AdminMsg = NULL;
\r
16418 FreeRpcServerInfo(&info);
\r
16423 Enable(hWnd, L_SETTING);
\r
16424 Enable(hWnd, B_NEW_SETTING);
\r
16425 Enable(hWnd, B_EDIT_SETTING);
\r
16426 Enable(hWnd, B_DELETE);
\r
16427 Enable(hWnd, IDOK);
\r
16428 Enable(hWnd, B_ABOUT);
\r
16429 Enable(hWnd, IDCANCEL);
\r
16430 Enable(hWnd, B_SECURE_MANAGER);
\r
16431 Enable(hWnd, B_SELECT_SECURE);
\r
16435 char *SmPassword(HWND hWnd, char *server_name)
\r
16438 UI_PASSWORD_DLG p;
\r
16440 if (server_name == NULL)
\r
16445 Zero(&p, sizeof(p));
\r
16446 p.AdminMode = true;
\r
16447 StrCpy(p.ServerName, sizeof(p.ServerName), server_name);
\r
16449 if (PasswordDlg(hWnd, &p) == false)
\r
16454 ret = CopyStr(p.Password);
\r
16460 void SmEditSettingDlgInit(HWND hWnd, SM_EDIT_SETTING *p)
\r
16464 if (hWnd == NULL || p == NULL)
\r
16469 p->Inited = false;
\r
16474 if (p->EditMode == false)
\r
16476 SetText(hWnd, 0, _UU("SM_EDIT_CAPTION_1"));
\r
16480 wchar_t tmp[MAX_SIZE];
\r
16481 UniFormat(tmp, sizeof(tmp), _UU("SM_EDIT_CAPTION_2"), s->Title);
\r
16482 SetText(hWnd, 0, tmp);
\r
16486 SetText(hWnd, E_ACCOUNT_NAME, s->Title);
\r
16489 SetTextA(hWnd, E_HOSTNAME, s->ClientOption.Hostname);
\r
16492 CbSetHeight(hWnd, C_PORT, 18);
\r
16493 CbAddStr(hWnd, C_PORT, _UU("CM_PORT_4"), 0);
\r
16494 CbAddStr(hWnd, C_PORT, _UU("CM_PORT_1"), 0);
\r
16495 CbAddStr(hWnd, C_PORT, _UU("CM_PORT_2"), 0);
\r
16496 CbAddStr(hWnd, C_PORT, _UU("CM_PORT_3"), 0);
\r
16497 SetIntEx(hWnd, C_PORT, s->ClientOption.Port);
\r
16500 Check(hWnd, R_DIRECT_TCP, s->ClientOption.ProxyType == PROXY_DIRECT);
\r
16501 Check(hWnd, R_HTTPS, s->ClientOption.ProxyType == PROXY_HTTP);
\r
16502 Check(hWnd, R_SOCKS, s->ClientOption.ProxyType == PROXY_SOCKS);
\r
16505 Check(hWnd, R_SERVER_ADMIN, s->ServerAdminMode);
\r
16506 Check(hWnd, R_HUB_ADMIN, s->ServerAdminMode == false ? true : false);
\r
16507 CbSetHeight(hWnd, C_HUBNAME, 18);
\r
16508 SetTextA(hWnd, C_HUBNAME, s->HubName);
\r
16511 if (IsZero(s->HashedPassword, SHA1_SIZE))
\r
16513 Check(hWnd, R_NO_SAVE, true);
\r
16517 UCHAR test[SHA1_SIZE];
\r
16519 Hash(test, "", 0, true);
\r
16520 if (Cmp(test, s->HashedPassword, SHA1_SIZE) != 0)
\r
16522 SetTextA(hWnd, E_PASSWORD, HIDDEN_PASSWORD);
\r
16526 if (p->EditMode == false)
\r
16528 FocusEx(hWnd, E_ACCOUNT_NAME);
\r
16532 FocusEx(hWnd, E_HOSTNAME);
\r
16535 p->Inited = true;
\r
16538 CmEnumHubStart(hWnd, &s->ClientOption);
\r
16540 SmEditSettingDlgUpdate(hWnd, p);
\r
16544 void SmEditSettingDlgUpdate(HWND hWnd, SM_EDIT_SETTING *p)
\r
16547 UINT delete_hub_list = 0;
\r
16549 char tmp[MAX_SIZE];
\r
16551 if (hWnd == NULL || p == NULL || p->Inited == false)
\r
16558 GetTxt(hWnd, E_ACCOUNT_NAME, s->Title, sizeof(s->Title));
\r
16559 UniTrim(s->Title);
\r
16561 if (UniStrLen(s->Title) == 0)
\r
16566 if (IsChecked(hWnd, R_LOCALHOST))
\r
16568 SetTextA(hWnd, E_HOSTNAME, "localhost");
\r
16569 Disable(hWnd, E_HOSTNAME);
\r
16573 Enable(hWnd, E_HOSTNAME);
\r
16576 GetTxtA(hWnd, E_HOSTNAME, tmp, sizeof(tmp));
\r
16579 if (StrCmpi(tmp, s->ClientOption.Hostname) != 0)
\r
16581 delete_hub_list++;
\r
16584 StrCpy(s->ClientOption.Hostname, sizeof(s->ClientOption.Hostname), tmp);
\r
16586 if (StrLen(s->ClientOption.Hostname) == 0)
\r
16591 s->ClientOption.Port = GetInt(hWnd, C_PORT);
\r
16592 if (s->ClientOption.Port == 0)
\r
16597 if (IsChecked(hWnd, R_DIRECT_TCP))
\r
16599 s->ClientOption.ProxyType = PROXY_DIRECT;
\r
16601 else if (IsChecked(hWnd, R_HTTPS))
\r
16603 s->ClientOption.ProxyType = PROXY_HTTP;
\r
16607 s->ClientOption.ProxyType = PROXY_SOCKS;
\r
16610 SetEnable(hWnd, B_PROXY_CONFIG, s->ClientOption.ProxyType != PROXY_DIRECT);
\r
16612 if (s->ClientOption.ProxyType != PROXY_DIRECT)
\r
16614 if (StrLen(s->ClientOption.ProxyName) == 0)
\r
16618 if (s->ClientOption.ProxyPort == 0)
\r
16624 s->ServerAdminMode = IsChecked(hWnd, R_SERVER_ADMIN);
\r
16626 SetEnable(hWnd, C_HUBNAME, s->ServerAdminMode == false ? true : false);
\r
16627 SetEnable(hWnd, S_HUBNAME, s->ServerAdminMode == false ? true : false);
\r
16629 GetTxtA(hWnd, C_HUBNAME, s->HubName, sizeof(s->HubName));
\r
16630 Trim(s->HubName);
\r
16631 if (StrLen(s->HubName) == 0)
\r
16633 if (s->ServerAdminMode == false)
\r
16639 if (IsChecked(hWnd, R_NO_SAVE))
\r
16641 Zero(s->HashedPassword, SHA1_SIZE);
\r
16642 SetTextA(hWnd, E_PASSWORD, "");
\r
16643 Disable(hWnd, E_PASSWORD);
\r
16644 Disable(hWnd, S_PASSWORD);
\r
16648 char tmp[MAX_PASSWORD_LEN + 1];
\r
16649 Enable(hWnd, E_PASSWORD);
\r
16650 Enable(hWnd, S_PASSWORD);
\r
16651 GetTxtA(hWnd, E_PASSWORD, tmp, sizeof(tmp));
\r
16652 if (StrCmp(tmp, HIDDEN_PASSWORD) != 0)
\r
16654 Hash(s->HashedPassword, tmp, StrLen(tmp), true);
\r
16658 if (delete_hub_list)
\r
16660 CbReset(hWnd, C_HUBNAME);
\r
16663 SetEnable(hWnd, IDOK, ok);
\r
16666 // 設定の編集ダイアログ OK ボタン
\r
16667 void SmEditSettingDlgOnOk(HWND hWnd, SM_EDIT_SETTING *p)
\r
16670 if (hWnd == NULL || p == NULL)
\r
16675 if (p->EditMode == false)
\r
16678 SETTING *s = ZeroMalloc(sizeof(SETTING));
\r
16679 Copy(s, p->Setting, sizeof(SETTING));
\r
16680 if (SmAddSetting(s) == false)
\r
16682 MsgBoxEx(hWnd, MB_ICONEXCLAMATION, _UU("SM_SETTING_EXISTS"), s->Title);
\r
16684 FocusEx(hWnd, E_ACCOUNT_NAME);
\r
16687 EndDialog(hWnd, true);
\r
16692 SETTING *t = SmGetSetting(p->Setting->Title);
\r
16693 if (t != NULL && t != p->OldSetting)
\r
16695 MsgBoxEx(hWnd, MB_ICONEXCLAMATION, _UU("SM_SETTING_EXISTS"), p->Setting->Title);
\r
16696 FocusEx(hWnd, E_ACCOUNT_NAME);
\r
16700 Copy(p->OldSetting, p->Setting, sizeof(SETTING));
\r
16701 Sort(sm->SettingList);
\r
16702 SmWriteSettingList();
\r
16704 EndDialog(hWnd, true);
\r
16708 // 設定の追加 / 編集ダイアログ
\r
16709 UINT SmEditSettingDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
16711 SM_EDIT_SETTING *p = (SM_EDIT_SETTING *)param;
\r
16713 if (hWnd == NULL)
\r
16720 case WM_INITDIALOG:
\r
16721 SmEditSettingDlgInit(hWnd, p);
\r
16725 switch (LOWORD(wParam))
\r
16727 case R_LOCALHOST:
\r
16728 case E_ACCOUNT_NAME:
\r
16731 case R_DIRECT_TCP:
\r
16734 case R_SERVER_ADMIN:
\r
16735 case R_HUB_ADMIN:
\r
16739 SmEditSettingDlgUpdate(hWnd, p);
\r
16743 if (LOWORD(wParam) == R_LOCALHOST)
\r
16745 FocusEx(hWnd, E_HOSTNAME);
\r
16748 switch (LOWORD(wParam))
\r
16751 if (HIWORD(wParam) == EN_KILLFOCUS)
\r
16753 CmEnumHubStart(hWnd, &p->Setting->ClientOption);
\r
16757 if (HIWORD(wParam) == CBN_KILLFOCUS)
\r
16759 CmEnumHubStart(hWnd, &p->Setting->ClientOption);
\r
16762 case R_DIRECT_TCP:
\r
16765 if (HIWORD(wParam) == BN_CLICKED)
\r
16767 CmEnumHubStart(hWnd, &p->Setting->ClientOption);
\r
16775 SmEditSettingDlgOnOk(hWnd, p);
\r
16782 case B_PROXY_CONFIG:
\r
16784 if (CmProxyDlg(hWnd, &p->Setting->ClientOption))
\r
16786 UINT n = GetInt(hWnd, C_PORT);
\r
16787 if (p->Setting->ClientOption.ProxyType == PROXY_HTTP &&
\r
16790 // HTTP プロキシ経由の設定になっていて接続先が 443 番ポート
\r
16791 // 以外のポートである場合は警告を表示する
\r
16792 if (MsgBoxEx(hWnd, MB_ICONQUESTION | MB_YESNO, _UU("CM_HTTP_PROXY_WARNING"), n) == IDYES)
\r
16794 // ポート番号を 443 に変更する
\r
16795 SetText(hWnd, C_PORT, _UU("CM_PORT_2"));
\r
16798 SmEditSettingDlgUpdate(hWnd, p);
\r
16799 CmEnumHubStart(hWnd, &p->Setting->ClientOption);
\r
16804 if (IsChecked(hWnd, R_NO_SAVE) == false)
\r
16806 FocusEx(hWnd, E_PASSWORD);
\r
16813 EndDialog(hWnd, false);
\r
16821 bool SmAddSettingDlg(HWND hWnd, wchar_t *new_name, UINT new_name_size)
\r
16823 SM_EDIT_SETTING p;
\r
16828 if (hWnd == NULL || new_name == NULL)
\r
16833 Zero(&p, sizeof(p));
\r
16834 Zero(&s, sizeof(s));
\r
16836 s.ClientOption.Port = 443;
\r
16838 p.EditMode = false;
\r
16843 wchar_t tmp[MAX_SIZE];
\r
16846 UniFormat(tmp, sizeof(tmp), _UU("CM_NEW_ACCOUNT_NAME_1"));
\r
16850 UniFormat(tmp, sizeof(tmp), _UU("CM_NEW_ACCOUNT_NAME_2"), i);
\r
16853 if (SmGetSetting(tmp) == NULL)
\r
16855 UniStrCpy(s.Title, sizeof(s.Title), tmp);
\r
16856 Hash(s.HashedPassword, "", 0, true);
\r
16857 s.ServerAdminMode = true;
\r
16862 ret = Dialog(hWnd, D_SM_EDIT_SETTING, SmEditSettingDlgProc, &p);
\r
16866 UniStrCpy(new_name, new_name_size, s.Title);
\r
16873 bool SmEditSettingDlg(HWND hWnd)
\r
16875 SM_EDIT_SETTING p;
\r
16876 SETTING s, *setting;
\r
16880 if (hWnd == NULL)
\r
16885 i = LvGetSelected(hWnd, L_SETTING);
\r
16886 if (i == INFINITE)
\r
16891 name = LvGetStr(hWnd, L_SETTING, i, 0);
\r
16893 setting = SmGetSetting(name);
\r
16894 if (setting == NULL)
\r
16902 Copy(&s, setting, sizeof(SETTING));
\r
16904 Zero(&p, sizeof(p));
\r
16906 p.EditMode = true;
\r
16907 p.OldSetting = setting;
\r
16910 return Dialog(hWnd, D_SM_EDIT_SETTING, SmEditSettingDlgProc, &p);
\r
16914 bool SmCheckNewName(SETTING *s, wchar_t *new_title)
\r
16918 if (new_title == NULL)
\r
16924 if (IsInList(sm->SettingList, s) == false)
\r
16930 // 他に同一の名前が無いかどうかチェック
\r
16931 for (i = 0;i < LIST_NUM(sm->SettingList);i++)
\r
16933 SETTING *t = LIST_DATA(sm->SettingList, i);
\r
16937 if (UniStrCmpi(t->Title, new_title) == 0)
\r
16948 void SmDeleteSetting(wchar_t *title)
\r
16952 if (title == NULL)
\r
16957 s = SmGetSetting(title);
\r
16963 Delete(sm->SettingList, s);
\r
16965 Sort(sm->SettingList);
\r
16967 SmWriteSettingList();
\r
16971 bool SmAddSetting(SETTING *s)
\r
16979 if (SmGetSetting(s->Title) != NULL)
\r
16984 Insert(sm->SettingList, s);
\r
16986 SmWriteSettingList();
\r
16992 SETTING *SmGetSetting(wchar_t *title)
\r
16996 if (title == NULL)
\r
17001 Zero(&s, sizeof(SETTING));
\r
17002 UniStrCpy(s.Title, sizeof(s.Title), title);
\r
17004 return (SETTING *)Search(sm->SettingList, &s);
\r
17008 int SmCompareSetting(void *p1, void *p2)
\r
17010 SETTING *s1, *s2;
\r
17011 if (p1 == NULL || p2 == NULL)
\r
17015 s1 = *(SETTING **)p1;
\r
17016 s2 = *(SETTING **)p2;
\r
17017 if (s1 == NULL || s2 == NULL)
\r
17022 return UniStrCmpi(s1->Title, s2->Title);
\r
17026 void SmInitSettingList()
\r
17028 sm->SettingList = NewList(SmCompareSetting);
\r
17030 SmLoadSettingList();
\r
17032 SmInitDefaultSettingList();
\r
17036 void SmFreeSettingList()
\r
17041 SmWriteSettingList();
\r
17043 for (i = 0;i < LIST_NUM(sm->SettingList);i++)
\r
17045 SETTING *s = LIST_DATA(sm->SettingList, i);
\r
17048 ReleaseList(sm->SettingList);
\r
17050 sm->SettingList = NULL;
\r
17054 void SmWriteSettingList()
\r
17059 t = MsRegEnumValue(REG_CURRENT_USER, SM_SETTING_REG_KEY);
\r
17063 for (i = 0;i < t->NumTokens;i++)
\r
17065 char *name = t->Token[i];
\r
17066 MsRegDeleteValue(REG_CURRENT_USER, SM_SETTING_REG_KEY, name);
\r
17072 for (i = 0;i < LIST_NUM(sm->SettingList);i++)
\r
17074 char name[MAX_SIZE];
\r
17075 SETTING *s = LIST_DATA(sm->SettingList, i);
\r
17078 Format(name, sizeof(name), "Setting%u", i + 1);
\r
17079 MsRegWriteBin(REG_CURRENT_USER, SM_SETTING_REG_KEY, name, s, sizeof(SETTING));
\r
17084 void SmLoadSettingList()
\r
17088 char *key_name = SM_SETTING_REG_KEY;
\r
17090 t = MsRegEnumValue(REG_CURRENT_USER, key_name);
\r
17093 key_name = SM_SETTING_REG_KEY_OLD;
\r
17094 t = MsRegEnumValue(REG_CURRENT_USER, key_name);
\r
17101 for (i = 0;i < t->NumTokens;i++)
\r
17103 char *name = t->Token[i];
\r
17104 BUF *b = MsRegReadBin(REG_CURRENT_USER, key_name, name);
\r
17107 if (b->Size == sizeof(SETTING))
\r
17109 SETTING *s = ZeroMalloc(sizeof(SETTING));
\r
17110 Copy(s, b->Buf, sizeof(SETTING));
\r
17112 Add(sm->SettingList, s);
\r
17120 Sort(sm->SettingList);
\r
17123 // デフォルトの設定リストの初期化
\r
17124 void SmInitDefaultSettingList()
\r
17126 if (LIST_NUM(sm->SettingList) == 0)
\r
17129 LIST *pl = MsGetProcessList();
\r
17134 for (i = 0;i < LIST_NUM(pl);i++)
\r
17136 MS_PROCESS *p = LIST_DATA(pl, i);
\r
17138 if (InStr(p->ExeFilename, "utvpnserver.exe") || InStr(p->ExeFilename, "utvpnserver_x64.exe") ||
\r
17139 InStr(p->ExeFilename, "utvpnserver_ia64.exe") ||
\r
17140 InStr(p->ExeFilename, "utvpnbridge.exe") || InStr(p->ExeFilename, "utvpnbridge_x64.exe") ||
\r
17141 InStr(p->ExeFilename, "utvpnbridge_ia64.exe"))
\r
17148 MsFreeProcessList(pl);
\r
17152 if (MsIsServiceRunning(_SS("SVC_UTVPNSERVER_NAME")))
\r
17160 SETTING *s = ZeroMalloc(sizeof(SETTING));
\r
17162 UniStrCpy(s->Title, sizeof(s->Title), _UU("SM_LOCALHOST"));
\r
17163 s->ServerAdminMode = true;
\r
17164 Hash(s->HashedPassword, "", 0, true);
\r
17165 UniStrCpy(s->ClientOption.AccountName, sizeof(s->ClientOption.AccountName), s->Title);
\r
17166 StrCpy(s->ClientOption.Hostname, sizeof(s->ClientOption.Hostname), "localhost");
\r
17167 s->ClientOption.Port = 5555;
\r
17169 Add(sm->SettingList, s);
\r
17175 void SmMainDlgInit(HWND hWnd)
\r
17177 wchar_t *last_select;
\r
17178 UINT i = INFINITE;
\r
17180 if (hWnd == NULL)
\r
17185 SetIcon(hWnd, 0, ICO_VPNSERVER);
\r
17187 LvInit(hWnd, L_SETTING);
\r
17188 LvSetStyle(hWnd, L_SETTING, LVS_EX_GRIDLINES);
\r
17189 LvInsertColumn(hWnd, L_SETTING, 0, _UU("SM_MAIN_COLUMN_1"), 146);
\r
17190 LvInsertColumn(hWnd, L_SETTING, 1, _UU("SM_MAIN_COLUMN_2"), 130);
\r
17191 LvInsertColumn(hWnd, L_SETTING, 2, _UU("SM_MAIN_COLUMN_3"), 130);
\r
17193 SmRefreshSetting(hWnd);
\r
17195 last_select = MsRegReadStrW(REG_CURRENT_USER, SM_REG_KEY, "Last Select");
\r
17196 if (UniIsEmptyStr(last_select) == false)
\r
17198 i = LvSearchStr(hWnd, L_SETTING, 0, last_select);
\r
17200 Free(last_select);
\r
17202 if (i == INFINITE)
\r
17204 LvSelect(hWnd, L_SETTING, 0);
\r
17208 LvSelect(hWnd, L_SETTING, i);
\r
17211 Focus(hWnd, L_SETTING);
\r
17213 SmMainDlgUpdate(hWnd);
\r
17217 void SmRefreshSetting(HWND hWnd)
\r
17219 SmRefreshSettingEx(hWnd, NULL);
\r
17221 void SmRefreshSettingEx(HWND hWnd, wchar_t *select_name)
\r
17226 if (hWnd == NULL)
\r
17231 b = LvInsertStart();
\r
17233 for (i = 0;i < LIST_NUM(sm->SettingList);i++)
\r
17235 wchar_t tmp[MAX_SIZE];
\r
17236 wchar_t tmp2[MAX_SIZE];
\r
17237 SETTING *s = LIST_DATA(sm->SettingList, i);
\r
17239 if (s->ServerAdminMode)
\r
17241 UniStrCpy(tmp, sizeof(tmp), _UU("SM_MODE_SERVER"));
\r
17245 UniFormat(tmp, sizeof(tmp), _UU("SM_MODE_HUB"), s->HubName);
\r
17248 StrToUni(tmp2, sizeof(tmp2), s->ClientOption.Hostname);
\r
17251 (s->ServerAdminMode ? ICO_SERVER_ONLINE : ICO_HUB),
\r
17259 LvInsertEnd(b, hWnd, L_SETTING);
\r
17261 if (UniIsEmptyStr(select_name) == false)
\r
17263 LvSelect(hWnd, L_SETTING, LvSearchStr(hWnd, L_SETTING, 0, select_name));
\r
17268 void SmMainDlgUpdate(HWND hWnd)
\r
17272 if (hWnd == NULL)
\r
17277 if (LvIsSelected(hWnd, L_SETTING) == false)
\r
17281 if (LvIsMultiMasked(hWnd, L_SETTING))
\r
17286 SetEnable(hWnd, IDOK, ok);
\r
17287 SetEnable(hWnd, B_EDIT_SETTING, ok);
\r
17288 SetEnable(hWnd, B_DELETE, ok);
\r
17291 // メインウインドウプロシージャ
\r
17292 UINT SmMainDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *param)
\r
17295 NMLVDISPINFOW *info;
\r
17296 NMLVKEYDOWN *key;
\r
17299 wchar_t new_name[MAX_SIZE];
\r
17301 if (hWnd == NULL)
\r
17308 case WM_INITDIALOG:
\r
17309 ShowSplashEx(hWnd, "UT-VPN Server", 1300, SM_SPLASH_BORDER_COLOR);
\r
17310 SmMainDlgInit(hWnd);
\r
17311 SetTimer(hWnd, 4, 100, NULL);
\r
17318 KillTimer(hWnd, 4);
\r
17328 i = LvGetSelected(hWnd, L_SETTING);
\r
17329 if (i != INFINITE)
\r
17331 tmp = LvGetStr(hWnd, L_SETTING, i, 0);
\r
17334 SETTING *setting = SmGetSetting(tmp);
\r
17335 if (setting != NULL)
\r
17339 // レジストリに最後の選択として記録
\r
17340 MsRegWriteStrW(REG_CURRENT_USER, SM_REG_KEY, "Last Select", tmp);
\r
17343 Copy(&s, setting, sizeof(SETTING));
\r
17344 SmConnect(hWnd, &s);
\r
17355 case B_NEW_SETTING:
\r
17357 if (SmAddSettingDlg(hWnd, new_name, sizeof(new_name)))
\r
17359 SmRefreshSettingEx(hWnd, new_name);
\r
17363 case B_EDIT_SETTING:
\r
17365 if (SmEditSettingDlg(hWnd))
\r
17367 SmWriteSettingList();
\r
17368 SmRefreshSetting(hWnd);
\r
17375 i = LvGetSelected(hWnd, L_SETTING);
\r
17376 if (i != INFINITE)
\r
17378 tmp = LvGetStr(hWnd, L_SETTING, i, 0);
\r
17381 if (MsgBoxEx(hWnd, MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2,
\r
17382 _UU("SM_SETTING_DELETE_MSG"), tmp) == IDYES)
\r
17384 SmDeleteSetting(tmp);
\r
17385 SmWriteSettingList();
\r
17386 SmRefreshSetting(hWnd);
\r
17395 ShowSplashEx(hWnd, "UT-VPN Server", 0, SM_SPLASH_BORDER_COLOR);
\r
17398 case B_SECURE_MANAGER:
\r
17400 SmSecureManager(hWnd);
\r
17403 case B_SELECT_SECURE:
\r
17405 SmSelectSecureId(hWnd);
\r
17412 EndDialog(hWnd, 0);
\r
17416 n = (NMHDR *)lParam;
\r
17417 switch (n->idFrom)
\r
17423 Command(hWnd, IDOK);
\r
17426 case LVN_KEYDOWN:
\r
17427 key = (NMLVKEYDOWN *)n;
\r
17430 UINT code = key->wVKey;
\r
17434 if (LvIsSelected(hWnd, L_SETTING))
\r
17436 LvRename(hWnd, L_SETTING, LvGetSelected(hWnd, L_SETTING));
\r
17441 Command(hWnd, B_DELETE);
\r
17445 Command(hWnd, IDOK);
\r
17451 case LVN_ENDLABELEDITW:
\r
17453 info = (NMLVDISPINFOW *)n;
\r
17454 if (info->item.pszText != NULL)
\r
17456 wchar_t *new_name = info->item.pszText;
\r
17457 wchar_t *old_name = LvGetStr(hWnd, L_SETTING, info->item.iItem, 0);
\r
17459 if (old_name != NULL)
\r
17461 if (UniStrCmp(new_name, old_name) != 0 && UniStrLen(new_name) != 0)
\r
17464 SETTING *s = SmGetSetting(old_name);
\r
17467 if (SmGetSetting(new_name) != NULL)
\r
17469 MsgBoxEx(hWnd, MB_ICONEXCLAMATION, _UU("SM_SETTING_EXISTS"),
\r
17474 UniStrCpy(s->Title, sizeof(s->Title), new_name);
\r
17475 Sort(sm->SettingList);
\r
17476 SmWriteSettingList();
\r
17477 LvSetItem(hWnd, L_SETTING, info->item.iItem, 0, new_name);
\r
17487 case LVN_ITEMCHANGED:
\r
17488 SmMainDlgUpdate(hWnd);
\r
17496 LvSortHander(hWnd, msg, wParam, lParam, L_SETTING);
\r
17504 Dialog(NULL, D_SM_MAIN, SmMainDlgProc, NULL);
\r
17507 // Server Manager メイン処理
\r
17510 if (sm->TempSetting == NULL)
\r
17517 SmConnect(sm->hParentWnd, sm->TempSetting);
\r
17530 sm = ZeroMalloc(sizeof(SM));
\r
17532 InitWinUi(_UU("SM_TITLE"), _SS("DEFAULT_FONT"), _II("DEFAULT_FONT_SIZE"));
\r
17534 sm->Cedar = NewCedar(NULL, NULL);
\r
17536 SmInitSettingList();
\r
17541 SmParseCommandLine();
\r
17545 void SmParseCommandLine()
\r
17548 CONSOLE *c = NewLocalConsole(NULL, NULL);
\r
17549 wchar_t *cmdline;
\r
17552 {"[vpnserver]", NULL, NULL, NULL, NULL,},
\r
17553 {"HUB", NULL, NULL, NULL, NULL,},
\r
17554 {"PASSWORD", NULL, NULL, NULL, NULL,},
\r
17555 {"TITLE", NULL, NULL, NULL, NULL,},
\r
17556 {"HWND", NULL, NULL, NULL, NULL,},
\r
17563 cmdline = GetCommandLineUniStr();
\r
17565 if (UniIsEmptyStr(cmdline) == false)
\r
17567 o = ParseCommandList(c, "vpnsmgr", cmdline, args, sizeof(args) / sizeof(args[0]));
\r
17573 if (ParseHostPort(GetParamStr(o, "[vpnserver]"), &host, &port, 443))
\r
17575 char *hub = GetParamStr(o, "HUB");
\r
17576 char *password = GetParamStr(o, "PASSWORD");
\r
17577 char *title = GetParamStr(o, "TITLE");
\r
17578 char *hwndstr = GetParamStr(o, "HWND");
\r
17580 if (hub == NULL || StrCmpi(hub, "\"") == 0)
\r
17582 hub = CopyStr("");
\r
17584 if (password == NULL)
\r
17586 password = CopyStr("");
\r
17588 if (title == NULL)
\r
17590 title = CopyStr(host);
\r
17593 if (IsEmptyStr(host) == false)
\r
17595 SETTING *s = ZeroMalloc(sizeof(SETTING));
\r
17597 CLIENT_OPTION *o;
\r
17599 StrToUni(s->Title, sizeof(s->Title), title);
\r
17601 if (IsEmptyStr(hub))
\r
17603 s->ServerAdminMode = true;
\r
17607 s->ServerAdminMode = false;
\r
17608 StrCpy(s->HubName, sizeof(s->HubName), hub);
\r
17611 b = StrToBin(password);
\r
17612 if (b == NULL || b->Size != SHA1_SIZE)
\r
17614 Hash(s->HashedPassword, password, StrLen(password), true);
\r
17618 Copy(s->HashedPassword, b->Buf, SHA1_SIZE);
\r
17622 o = &s->ClientOption;
\r
17624 UniStrCpy(o->AccountName, sizeof(o->AccountName), s->Title);
\r
17625 StrCpy(o->Hostname, sizeof(o->Hostname), host);
\r
17627 o->ProxyType = PROXY_DIRECT;
\r
17628 StrCpy(o->DeviceName, sizeof(o->DeviceName), "DUMMY");
\r
17630 sm->TempSetting = s;
\r
17632 if (IsEmptyStr(hwndstr) == false)
\r
17634 sm->hParentWnd = (HWND)ToInt64(hwndstr);
\r
17663 SmFreeSettingList();
\r
17665 ReleaseCedar(sm->Cedar);
\r
17669 if (sm->TempSetting != NULL)
\r
17671 Free(sm->TempSetting);
\r
17678 // Server Manager の実行
\r