1 // SoftEther UT-VPN SourceCode
\r
3 // Copyright (C) 2004-2010 SoftEther Corporation.
\r
4 // Copyright (C) 2004-2010 University of Tsukuba, Japan.
\r
5 // Copyright (C) 2003-2010 Daiyuu Nobori.
\r
6 // All Rights Reserved.
\r
8 // http://utvpn.tsukuba.ac.jp/
\r
10 // This program is free software; you can redistribute it and/or
\r
11 // modify it under the terms of the GNU General Public License
\r
12 // version 2 as published by the Free Software Foundation.
\r
14 // This program is distributed in the hope that it will be useful,
\r
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
17 // GNU General Public License for more details.
\r
19 // You should have received a copy of the GNU General Public License version 2
\r
20 // along with this program; if not, write to the Free Software
\r
21 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
\r
23 // このファイルは GPL バージョン 2 ライセンスで公開されています。
\r
24 // 誰でもこのファイルの内容を複製、改変したり、改変したバージョンを再配布
\r
25 // することができます。ただし、原著作物を改変した場合は、原著作物の著作権表示
\r
26 // を除去することはできません。改変した著作物を配布する場合は、改変実施者の
\r
27 // 著作権表示を原著作物の著作権表示に付随して記載するようにしてください。
\r
29 // この SoftEther UT-VPN オープンソース・プロジェクトは、日本国の
\r
30 // ソフトイーサ株式会社 (SoftEther Corporation, http://www.softether.co.jp/ )
\r
31 // および筑波大学 (University of Tsukuba, http://www.tsukuba.ac.jp/ ) によって
\r
33 // 本プログラムの配布者は、本プログラムを、業としての利用以外のため、
\r
34 // および、試験または研究のために利用が行われることを想定して配布
\r
36 // SoftEther UT-VPN プロジェクトの Web サイトは http://utvpn.tsukuba.ac.jp/ に
\r
38 // 本ソフトウェアの不具合の修正、機能改良、セキュリティホールの修復などのコード
\r
39 // の改変を行った場合で、その成果物を SoftEther UT-VPN プロジェクトに提出して
\r
40 // いただける場合は、 http://utvpn.tsukuba.ac.jp/ までソースコードを送付して
\r
41 // ください。SoftEther UT-VPN プロジェクトの本体リリースまたはブランチリリース
\r
44 // GPL に基づいて原著作物が提供される本ソフトウェアの改良版を配布、販売する
\r
45 // 場合は、そのソースコードを GPL に基づいて誰にでも開示する義務が生じます。
\r
47 // 本ソフトウェアに関連する著作権、特許権、商標権はソフトイーサ株式会社
\r
48 // (SoftEther Corporation) およびその他の著作権保持者が保有しています。
\r
49 // ソフトイーサ株式会社等はこれらの権利を放棄していません。本ソフトウェアの
\r
50 // 二次著作物を配布、販売する場合は、これらの権利を侵害しないようにご注意
\r
53 // お願い: どのような通信ソフトウェアにも通常は必ず未発見の
\r
54 // セキュリティホールが潜んでいます。本ソースコードをご覧いただいた結果、
\r
55 // UT-VPN にセキュリティホールを発見された場合は、当該セキュリティホールの
\r
56 // 情報を不特定多数に開示される前に、必ず、ソフトイーサ株式会社
\r
57 // および脆弱性情報の届出を受け付ける公的機関まで通報いただき、
\r
58 // 公益保護にご協力いただきますようお願い申し上げます。
\r
60 // ソフトイーサ株式会社は、当該セキュリティホールについて迅速に対処を
\r
61 // 行い、UT-VPN および UT-VPN に関連するソフトウェアのユーザー・顧客
\r
64 // ソフトイーサへの届出先: http://www.softether.co.jp/jp/contact/
\r
65 // 日本国内の脆弱性情報届出受付公的機関:
\r
67 // http://www.ipa.go.jp/security/vuln/report/
\r
69 // 上記各事項について不明な点は、ソフトイーサ株式会社までご連絡ください。
\r
70 // 連絡先: http://www.softether.co.jp/jp/contact/
\r
72 // -----------------------------------------------
\r
75 // 新規リリース by SoftEther
\r
76 // -----------------------------------------------
\r
81 #include "CedarPch.h"
\r
84 // このあたりは急いで実装したのでコードがあまり美しくない。
\r
85 // 本当は Sun RPC のプリプロセッサのようにきれいな処理方法を採用したがったが
\r
86 // とりあえず今はマクロの羅列になっている。
\r
87 #define DECLARE_RPC_EX(rpc_name, data_type, function, in_rpc, out_rpc, free_rpc) \
\r
88 else if (StrCmpi(name, rpc_name) == 0) \
\r
91 t = ZeroMalloc(sizeof(data_type)); \
\r
93 err = function(a, t); \
\r
94 if (err == ERR_NO_ERROR) \
\r
102 #define DECLARE_RPC(rpc_name, data_type, function, in_rpc, out_rpc) \
\r
103 else if (StrCmpi(name, rpc_name) == 0) \
\r
106 t = ZeroMalloc(sizeof(data_type)); \
\r
108 err = function(a, t); \
\r
109 if (err == ERR_NO_ERROR) \
\r
116 #define DECLARE_SC_EX(rpc_name, data_type, function, in_rpc, out_rpc, free_rpc) \
\r
117 UINT function(RPC *r, data_type *t) \
\r
121 if (r == NULL || t == NULL) \
\r
123 return ERR_INTERNAL_ERROR; \
\r
128 Zero(t, sizeof(data_type)); \
\r
129 ret = AdminCall(r, rpc_name, p); \
\r
130 err = GetErrorFromPack(ret); \
\r
131 if (err == ERR_NO_ERROR) \
\r
138 #define DECLARE_SC(rpc_name, data_type, function, in_rpc, out_rpc) \
\r
139 UINT function(RPC *r, data_type *t) \
\r
143 if (r == NULL || t == NULL) \
\r
145 return ERR_INTERNAL_ERROR; \
\r
149 ret = AdminCall(r, rpc_name, p); \
\r
150 err = GetErrorFromPack(ret); \
\r
151 if (err == ERR_NO_ERROR) \
\r
158 #define CHECK_RIGHT \
\r
159 if (a->ServerAdmin == false && (t->HubName == NULL || StrCmpi(a->HubName, t->HubName) != 0)) \
\r
160 return ERR_NOT_ENOUGH_RIGHT; \
\r
161 if (IsEmptyStr(t->HubName)) \
\r
162 return ERR_INVALID_PARAMETER;
\r
163 #define SERVER_ADMIN_ONLY \
\r
164 if (a->ServerAdmin == false) \
\r
165 return ERR_NOT_ENOUGH_RIGHT;
\r
166 #define NO_SUPPORT_FOR_BRIDGE \
\r
167 if (a->Server->Cedar->Bridge) \
\r
168 return ERR_NOT_SUPPORTED;
\r
170 // サーバーの Caps を取得 (取得できない場合はビルド番号から判別)
\r
171 CAPSLIST *ScGetCapsEx(RPC *rpc)
\r
173 RPC_SERVER_INFO info;
\r
175 bool is_bridge = false;
\r
182 Zero(&info, sizeof(info));
\r
183 ScGetServerInfo(rpc, &info);
\r
185 t = ZeroMalloc(sizeof(CAPSLIST));
\r
187 // RPC で Caps を取得してみる
\r
188 if (ScGetCaps(rpc, t) != ERR_NO_ERROR)
\r
195 // 取得に失敗したのでビルド番号を取得する
\r
196 // (ものすごく古いバージョンの VPN Server のための対応コード)
\r
197 build = info.ServerBuildInt;
\r
199 is_bridge = (SearchStrEx(info.ServerProductName, "bridge", 0, false) == INFINITE) ? false : true;
\r
201 AddCapsInt(t, "i_max_packet_size", 1514);
\r
203 if (is_bridge == false)
\r
205 AddCapsInt(t, "i_max_hubs", 4096);
\r
206 AddCapsInt(t, "i_max_sessions", 4096);
\r
208 if (info.ServerType != SERVER_TYPE_FARM_MEMBER)
\r
210 AddCapsInt(t, "i_max_users_per_hub", 10000);
\r
211 AddCapsInt(t, "i_max_groups_per_hub", 10000);
\r
212 AddCapsInt(t, "i_max_access_lists", 4096);
\r
216 AddCapsInt(t, "i_max_users_per_hub", 0);
\r
217 AddCapsInt(t, "i_max_groups_per_hub", 0);
\r
218 AddCapsInt(t, "i_max_access_lists", 0);
\r
223 AddCapsInt(t, "i_max_hubs", 0);
\r
224 AddCapsInt(t, "i_max_sessions", 0);
\r
225 AddCapsInt(t, "i_max_users_per_hub", 0);
\r
226 AddCapsInt(t, "i_max_groups_per_hub", 0);
\r
227 AddCapsInt(t, "i_max_access_lists", 0);
\r
230 AddCapsInt(t, "i_max_mac_tables", 10000);
\r
231 AddCapsInt(t, "i_max_ip_tables", 10000);
\r
233 if (info.ServerType == SERVER_TYPE_STANDALONE)
\r
235 AddCapsBool(t, "b_support_securenat", (build >= 3600) ? true : false);
\r
236 AddCapsInt(t, "i_max_secnat_tables", 4096);
\r
240 AddCapsBool(t, "b_support_securenat", false);
\r
241 AddCapsInt(t, "i_max_secnat_tables", 0);
\r
246 AddCapsBool(t, "b_bridge", true);
\r
248 else if (info.ServerType == SERVER_TYPE_STANDALONE)
\r
250 AddCapsBool(t, "b_standalone", true);
\r
252 else if (info.ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
254 AddCapsBool(t, "b_cluster_controller", true);
\r
258 AddCapsBool(t, "b_cluster_member", true);
\r
261 AddCapsBool(t, "b_support_config_hub", info.ServerType != SERVER_TYPE_FARM_MEMBER &&
\r
262 is_bridge == false);
\r
264 AddCapsBool(t, "b_vpn_client_connect", is_bridge == false ? true : false);
\r
266 AddCapsBool(t, "b_support_radius", info.ServerType != SERVER_TYPE_FARM_MEMBER &&
\r
267 is_bridge == false);
\r
271 RPC_BRIDGE_SUPPORT b;
\r
272 Zero(&b, sizeof(b));
\r
273 if (ScGetBridgeSupport(rpc, &b) == ERR_NO_ERROR)
\r
275 AddCapsBool(t, "b_local_bridge", b.IsBridgeSupportedOs);
\r
276 AddCapsBool(t, "b_must_install_pcap", b.IsWinPcapNeeded);
\r
280 AddCapsBool(t, "b_local_bridge", false);
\r
281 AddCapsBool(t, "b_must_install_pcap", false);
\r
286 AddCapsBool(t, "b_local_bridge", false);
\r
287 AddCapsBool(t, "b_must_install_pcap", false);
\r
290 AddCapsBool(t, "b_tap_supported", false);
\r
292 if (info.ServerType == SERVER_TYPE_STANDALONE)
\r
294 AddCapsBool(t, "b_support_cascade", true);
\r
298 AddCapsBool(t, "b_support_cascade", false);
\r
301 AddCapsBool(t, "b_support_cascade_cert", false);
\r
302 AddCapsBool(t, "b_support_config_log", info.ServerType != SERVER_TYPE_FARM_MEMBER);
\r
303 AddCapsBool(t, "b_support_autodelete", false);
\r
308 if (info.ServerBuildInt <= 4350)
\r
310 if (is_bridge == false)
\r
312 // Build 4300 以下では必ず b_support_cluster が true
\r
313 CAPS *caps = GetCaps(t, "b_support_cluster");
\r
316 AddCapsBool(t, "b_support_cluster", true);
\r
330 // サーバー側に存在しない Caps の一覧を false として登録
\r
331 names = GetTableNameStartWith("CT_b_");
\r
335 for (i = 0;i < names->NumTokens;i++)
\r
337 char *name = names->Token[i] + 3;
\r
339 if (GetCaps(t, name) == NULL)
\r
341 AddCapsBool(t, name, false);
\r
349 FreeRpcServerInfo(&info);
\r
354 // 管理用 RPC 関数ディスパッチルーチン
\r
355 PACK *AdminDispatch(RPC *rpc, char *name, PACK *p)
\r
360 SERVER *server = NULL;
\r
361 CEDAR *cedar = NULL;
\r
364 if (rpc == NULL || name == NULL || p == NULL)
\r
370 err = ERR_NO_ERROR;
\r
373 a = (ADMIN *)rpc->Param;
\r
380 server = a->Server;
\r
382 if (server != NULL)
\r
384 cedar = server->Cedar;
\r
387 Lock(cedar->CedarSuperLock);
\r
391 char tmp[MAX_PATH];
\r
395 StrCpy(ip, sizeof(ip), "Unknown");
\r
397 if (rpc->Sock != NULL)
\r
399 IPToStr(ip, sizeof(ip), &rpc->Sock->RemoteIP);
\r
400 rpc_id = rpc->Sock->socket;
\r
403 Format(tmp, sizeof(tmp), "RPC: RPC-%u (%s): Entering RPC [%s]...",
\r
406 SiDebugLog(a->Server, tmp);
\r
411 // このあたりは急いで実装したのでコードがあまり美しくない。
\r
412 // 本当は Sun RPC のプリプロセッサのようにきれいな処理方法を採用したがったが
\r
413 // とりあえず今はマクロの羅列になっている。
\r
416 DECLARE_RPC_EX("Test", RPC_TEST, StTest, InRpcTest, OutRpcTest, FreeRpcTest)
\r
417 DECLARE_RPC_EX("GetServerInfo", RPC_SERVER_INFO, StGetServerInfo, InRpcServerInfo, OutRpcServerInfo, FreeRpcServerInfo)
\r
418 DECLARE_RPC("GetServerStatus", RPC_SERVER_STATUS, StGetServerStatus, InRpcServerStatus, OutRpcServerStatus)
\r
419 DECLARE_RPC("CreateListener", RPC_LISTENER, StCreateListener, InRpcListener, OutRpcListener)
\r
420 DECLARE_RPC_EX("EnumListener", RPC_LISTENER_LIST, StEnumListener, InRpcListenerList, OutRpcListenerList, FreeRpcListenerList)
\r
421 DECLARE_RPC("DeleteListener", RPC_LISTENER, StDeleteListener, InRpcListener, OutRpcListener)
\r
422 DECLARE_RPC("EnableListener", RPC_LISTENER, StEnableListener, InRpcListener, OutRpcListener)
\r
423 DECLARE_RPC("SetServerPassword", RPC_SET_PASSWORD, StSetServerPassword, InRpcSetPassword, OutRpcSetPassword)
\r
424 DECLARE_RPC_EX("SetFarmSetting", RPC_FARM, StSetFarmSetting, InRpcFarm, OutRpcFarm, FreeRpcFarm)
\r
425 DECLARE_RPC_EX("GetFarmSetting", RPC_FARM, StGetFarmSetting, InRpcFarm, OutRpcFarm, FreeRpcFarm)
\r
426 DECLARE_RPC_EX("GetFarmInfo", RPC_FARM_INFO, StGetFarmInfo, InRpcFarmInfo, OutRpcFarmInfo, FreeRpcFarmInfo)
\r
427 DECLARE_RPC_EX("EnumFarmMember", RPC_ENUM_FARM, StEnumFarmMember, InRpcEnumFarm, OutRpcEnumFarm, FreeRpcEnumFarm)
\r
428 DECLARE_RPC("GetFarmConnectionStatus", RPC_FARM_CONNECTION_STATUS, StGetFarmConnectionStatus, InRpcFarmConnectionStatus, OutRpcFarmConnectionStatus)
\r
429 DECLARE_RPC_EX("SetServerCert", RPC_KEY_PAIR, StSetServerCert, InRpcKeyPair, OutRpcKeyPair, FreeRpcKeyPair)
\r
430 DECLARE_RPC_EX("GetServerCert", RPC_KEY_PAIR, StGetServerCert, InRpcKeyPair, OutRpcKeyPair, FreeRpcKeyPair)
\r
431 DECLARE_RPC_EX("GetServerCipher", RPC_STR, StGetServerCipher, InRpcStr, OutRpcStr, FreeRpcStr)
\r
432 DECLARE_RPC_EX("SetServerCipher", RPC_STR, StSetServerCipher, InRpcStr, OutRpcStr, FreeRpcStr)
\r
433 DECLARE_RPC("CreateHub", RPC_CREATE_HUB, StCreateHub, InRpcCreateHub, OutRpcCreateHub)
\r
434 DECLARE_RPC("SetHub", RPC_CREATE_HUB, StSetHub, InRpcCreateHub, OutRpcCreateHub)
\r
435 DECLARE_RPC("GetHub", RPC_CREATE_HUB, StGetHub, InRpcCreateHub, OutRpcCreateHub)
\r
436 DECLARE_RPC_EX("EnumHub", RPC_ENUM_HUB, StEnumHub, InRpcEnumHub, OutRpcEnumHub, FreeRpcEnumHub)
\r
437 DECLARE_RPC("DeleteHub", RPC_DELETE_HUB, StDeleteHub, InRpcDeleteHub, OutRpcDeleteHub)
\r
438 DECLARE_RPC("GetHubRadius", RPC_RADIUS, StGetHubRadius, InRpcRadius, OutRpcRadius)
\r
439 DECLARE_RPC("SetHubRadius", RPC_RADIUS, StSetHubRadius, InRpcRadius, OutRpcRadius)
\r
440 DECLARE_RPC_EX("EnumConnection", RPC_ENUM_CONNECTION, StEnumConnection, InRpcEnumConnection, OutRpcEnumConnection, FreeRpcEnumConnetion)
\r
441 DECLARE_RPC("DisconnectConnection", RPC_DISCONNECT_CONNECTION, StDisconnectConnection, InRpcDisconnectConnection, OutRpcDisconnectConnection)
\r
442 DECLARE_RPC("GetConnectionInfo", RPC_CONNECTION_INFO, StGetConnectionInfo, InRpcConnectionInfo, OutRpcConnectionInfo)
\r
443 DECLARE_RPC("SetHubOnline", RPC_SET_HUB_ONLINE, StSetHubOnline, InRpcSetHubOnline, OutRpcSetHubOnline)
\r
444 DECLARE_RPC("GetHubStatus", RPC_HUB_STATUS, StGetHubStatus, InRpcHubStatus, OutRpcHubStatus)
\r
445 DECLARE_RPC("SetHubLog", RPC_HUB_LOG, StSetHubLog, InRpcHubLog, OutRpcHubLog)
\r
446 DECLARE_RPC("GetHubLog", RPC_HUB_LOG, StGetHubLog, InRpcHubLog, OutRpcHubLog)
\r
447 DECLARE_RPC_EX("AddCa", RPC_HUB_ADD_CA, StAddCa, InRpcHubAddCa, OutRpcHubAddCa, FreeRpcHubAddCa)
\r
448 DECLARE_RPC_EX("EnumCa", RPC_HUB_ENUM_CA, StEnumCa, InRpcHubEnumCa, OutRpcHubEnumCa, FreeRpcHubEnumCa)
\r
449 DECLARE_RPC_EX("GetCa", RPC_HUB_GET_CA, StGetCa, InRpcHubGetCa, OutRpcHubGetCa, FreeRpcHubGetCa)
\r
450 DECLARE_RPC("DeleteCa", RPC_HUB_DELETE_CA, StDeleteCa, InRpcHubDeleteCa, OutRpcHubDeleteCa)
\r
451 DECLARE_RPC("SetLinkOnline", RPC_LINK, StSetLinkOnline, InRpcLink, OutRpcLink)
\r
452 DECLARE_RPC("SetLinkOffline", RPC_LINK, StSetLinkOffline, InRpcLink, OutRpcLink)
\r
453 DECLARE_RPC("DeleteLink", RPC_LINK, StDeleteLink, InRpcLink, OutRpcLink)
\r
454 DECLARE_RPC("RenameLink", RPC_RENAME_LINK, StRenameLink, InRpcRenameLink, OutRpcRenameLink)
\r
455 DECLARE_RPC_EX("CreateLink", RPC_CREATE_LINK, StCreateLink, InRpcCreateLink, OutRpcCreateLink, FreeRpcCreateLink)
\r
456 DECLARE_RPC_EX("GetLink", RPC_CREATE_LINK, StGetLink, InRpcCreateLink, OutRpcCreateLink, FreeRpcCreateLink)
\r
457 DECLARE_RPC_EX("SetLink", RPC_CREATE_LINK, StSetLink, InRpcCreateLink, OutRpcCreateLink, FreeRpcCreateLink)
\r
458 DECLARE_RPC_EX("EnumLink", RPC_ENUM_LINK, StEnumLink, InRpcEnumLink, OutRpcEnumLink, FreeRpcEnumLink)
\r
459 DECLARE_RPC_EX("GetLinkStatus", RPC_LINK_STATUS, StGetLinkStatus, InRpcLinkStatus, OutRpcLinkStatus, FreeRpcLinkStatus)
\r
460 DECLARE_RPC("AddAccess", RPC_ADD_ACCESS, StAddAccess, InRpcAddAccess, OutRpcAddAccess)
\r
461 DECLARE_RPC("DeleteAccess", RPC_DELETE_ACCESS, StDeleteAccess, InRpcDeleteAccess, OutRpcDeleteAccess)
\r
462 DECLARE_RPC_EX("EnumAccess", RPC_ENUM_ACCESS_LIST, StEnumAccess, InRpcEnumAccessList, OutRpcEnumAccessList, FreeRpcEnumAccessList)
\r
463 DECLARE_RPC_EX("SetAccessList", RPC_ENUM_ACCESS_LIST, StSetAccessList, InRpcEnumAccessList, OutRpcEnumAccessList, FreeRpcEnumAccessList)
\r
464 DECLARE_RPC_EX("CreateUser", RPC_SET_USER, StCreateUser, InRpcSetUser, OutRpcSetUser, FreeRpcSetUser)
\r
465 DECLARE_RPC_EX("SetUser", RPC_SET_USER, StSetUser, InRpcSetUser, OutRpcSetUser, FreeRpcSetUser)
\r
466 DECLARE_RPC_EX("GetUser", RPC_SET_USER, StGetUser, InRpcSetUser, OutRpcSetUser, FreeRpcSetUser)
\r
467 DECLARE_RPC("DeleteUser", RPC_DELETE_USER, StDeleteUser, InRpcDeleteUser, OutRpcDeleteUser)
\r
468 DECLARE_RPC_EX("EnumUser", RPC_ENUM_USER, StEnumUser, InRpcEnumUser, OutRpcEnumUser, FreeRpcEnumUser)
\r
469 DECLARE_RPC_EX("CreateGroup", RPC_SET_GROUP, StCreateGroup, InRpcSetGroup, OutRpcSetGroup, FreeRpcSetGroup)
\r
470 DECLARE_RPC_EX("SetGroup", RPC_SET_GROUP, StSetGroup, InRpcSetGroup, OutRpcSetGroup, FreeRpcSetGroup)
\r
471 DECLARE_RPC_EX("GetGroup", RPC_SET_GROUP, StGetGroup, InRpcSetGroup, OutRpcSetGroup, FreeRpcSetGroup)
\r
472 DECLARE_RPC("DeleteGroup", RPC_DELETE_USER, StDeleteGroup, InRpcDeleteUser, OutRpcDeleteUser)
\r
473 DECLARE_RPC_EX("EnumGroup", RPC_ENUM_GROUP, StEnumGroup, InRpcEnumGroup, OutRpcEnumGroup, FreeRpcEnumGroup)
\r
474 DECLARE_RPC_EX("EnumSession", RPC_ENUM_SESSION, StEnumSession, InRpcEnumSession, OutRpcEnumSession, FreeRpcEnumSession)
\r
475 DECLARE_RPC_EX("GetSessionStatus", RPC_SESSION_STATUS, StGetSessionStatus, InRpcSessionStatus, OutRpcSessionStatus, FreeRpcSessionStatus)
\r
476 DECLARE_RPC("DeleteSession", RPC_DELETE_SESSION, StDeleteSession, InRpcDeleteSession, OutRpcDeleteSession)
\r
477 DECLARE_RPC_EX("EnumMacTable", RPC_ENUM_MAC_TABLE, StEnumMacTable, InRpcEnumMacTable, OutRpcEnumMacTable, FreeRpcEnumMacTable)
\r
478 DECLARE_RPC("DeleteMacTable", RPC_DELETE_TABLE, StDeleteMacTable, InRpcDeleteTable, OutRpcDeleteTable)
\r
479 DECLARE_RPC_EX("EnumIpTable", RPC_ENUM_IP_TABLE, StEnumIpTable, InRpcEnumIpTable, OutRpcEnumIpTable, FreeRpcEnumIpTable)
\r
480 DECLARE_RPC("DeleteIpTable", RPC_DELETE_TABLE, StDeleteIpTable, InRpcDeleteTable, OutRpcDeleteTable)
\r
481 DECLARE_RPC("SetKeep", RPC_KEEP, StSetKeep, InRpcKeep, OutRpcKeep)
\r
482 DECLARE_RPC("GetKeep", RPC_KEEP, StGetKeep, InRpcKeep, OutRpcKeep)
\r
483 DECLARE_RPC("EnableSecureNAT", RPC_HUB, StEnableSecureNAT, InRpcHub, OutRpcHub)
\r
484 DECLARE_RPC("DisableSecureNAT", RPC_HUB, StDisableSecureNAT, InRpcHub, OutRpcHub)
\r
485 DECLARE_RPC("SetSecureNATOption", VH_OPTION, StSetSecureNATOption, InVhOption, OutVhOption)
\r
486 DECLARE_RPC("GetSecureNATOption", VH_OPTION, StGetSecureNATOption, InVhOption, OutVhOption)
\r
487 DECLARE_RPC_EX("EnumNAT", RPC_ENUM_NAT, StEnumNAT, InRpcEnumNat, OutRpcEnumNat, FreeRpcEnumNat)
\r
488 DECLARE_RPC_EX("EnumDHCP", RPC_ENUM_DHCP, StEnumDHCP, InRpcEnumDhcp, OutRpcEnumDhcp, FreeRpcEnumDhcp)
\r
489 DECLARE_RPC("GetSecureNATStatus", RPC_NAT_STATUS, StGetSecureNATStatus, InRpcNatStatus, OutRpcNatStatus)
\r
490 DECLARE_RPC_EX("EnumEthernet", RPC_ENUM_ETH, StEnumEthernet, InRpcEnumEth, OutRpcEnumEth, FreeRpcEnumEth)
\r
491 DECLARE_RPC("AddLocalBridge", RPC_LOCALBRIDGE, StAddLocalBridge, InRpcLocalBridge, OutRpcLocalBridge)
\r
492 DECLARE_RPC("DeleteLocalBridge", RPC_LOCALBRIDGE, StDeleteLocalBridge, InRpcLocalBridge, OutRpcLocalBridge)
\r
493 DECLARE_RPC_EX("EnumLocalBridge", RPC_ENUM_LOCALBRIDGE, StEnumLocalBridge, InRpcEnumLocalBridge, OutRpcEnumLocalBridge, FreeRpcEnumLocalBridge)
\r
494 DECLARE_RPC("GetBridgeSupport", RPC_BRIDGE_SUPPORT, StGetBridgeSupport, InRpcBridgeSupport, OutRpcBridgeSupport)
\r
495 DECLARE_RPC("RebootServer", RPC_TEST, StRebootServer, InRpcTest, OutRpcTest)
\r
496 DECLARE_RPC_EX("GetCaps", CAPSLIST, StGetCaps, InRpcCapsList, OutRpcCapsList, FreeRpcCapsList)
\r
497 DECLARE_RPC_EX("GetConfig", RPC_CONFIG, StGetConfig, InRpcConfig, OutRpcConfig, FreeRpcConfig)
\r
498 DECLARE_RPC_EX("SetConfig", RPC_CONFIG, StSetConfig, InRpcConfig, OutRpcConfig, FreeRpcConfig)
\r
499 DECLARE_RPC_EX("GetDefaultHubAdminOptions", RPC_ADMIN_OPTION, StGetDefaultHubAdminOptions, InRpcAdminOption, OutRpcAdminOption, FreeRpcAdminOption)
\r
500 DECLARE_RPC_EX("GetHubAdminOptions", RPC_ADMIN_OPTION, StGetHubAdminOptions, InRpcAdminOption, OutRpcAdminOption, FreeRpcAdminOption)
\r
501 DECLARE_RPC_EX("SetHubAdminOptions", RPC_ADMIN_OPTION, StSetHubAdminOptions, InRpcAdminOption, OutRpcAdminOption, FreeRpcAdminOption)
\r
502 DECLARE_RPC_EX("GetHubExtOptions", RPC_ADMIN_OPTION, StGetHubExtOptions, InRpcAdminOption, OutRpcAdminOption, FreeRpcAdminOption)
\r
503 DECLARE_RPC_EX("SetHubExtOptions", RPC_ADMIN_OPTION, StSetHubExtOptions, InRpcAdminOption, OutRpcAdminOption, FreeRpcAdminOption)
\r
504 DECLARE_RPC("AddL3Switch", RPC_L3SW, StAddL3Switch, InRpcL3Sw, OutRpcL3Sw)
\r
505 DECLARE_RPC("DelL3Switch", RPC_L3SW, StDelL3Switch, InRpcL3Sw, OutRpcL3Sw)
\r
506 DECLARE_RPC_EX("EnumL3Switch", RPC_ENUM_L3SW, StEnumL3Switch, InRpcEnumL3Sw, OutRpcEnumL3Sw, FreeRpcEnumL3Sw)
\r
507 DECLARE_RPC("StartL3Switch", RPC_L3SW, StStartL3Switch, InRpcL3Sw, OutRpcL3Sw)
\r
508 DECLARE_RPC("StopL3Switch", RPC_L3SW, StStopL3Switch, InRpcL3Sw, OutRpcL3Sw)
\r
509 DECLARE_RPC("AddL3If", RPC_L3IF, StAddL3If, InRpcL3If, OutRpcL3If)
\r
510 DECLARE_RPC("DelL3If", RPC_L3IF, StDelL3If, InRpcL3If, OutRpcL3If)
\r
511 DECLARE_RPC_EX("EnumL3If", RPC_ENUM_L3IF, StEnumL3If, InRpcEnumL3If, OutRpcEnumL3If, FreeRpcEnumL3If)
\r
512 DECLARE_RPC("AddL3Table", RPC_L3TABLE, StAddL3Table, InRpcL3Table, OutRpcL3Table)
\r
513 DECLARE_RPC("DelL3Table", RPC_L3TABLE, StDelL3Table, InRpcL3Table, OutRpcL3Table)
\r
514 DECLARE_RPC_EX("EnumL3Table", RPC_ENUM_L3TABLE, StEnumL3Table, InRpcEnumL3Table, OutRpcEnumL3Table, FreeRpcEnumL3Table)
\r
515 DECLARE_RPC_EX("EnumCrl", RPC_ENUM_CRL, StEnumCrl, InRpcEnumCrl, OutRpcEnumCrl, FreeRpcEnumCrl)
\r
516 DECLARE_RPC_EX("AddCrl", RPC_CRL, StAddCrl, InRpcCrl, OutRpcCrl, FreeRpcCrl)
\r
517 DECLARE_RPC_EX("DelCrl", RPC_CRL, StDelCrl, InRpcCrl, OutRpcCrl, FreeRpcCrl)
\r
518 DECLARE_RPC_EX("GetCrl", RPC_CRL, StGetCrl, InRpcCrl, OutRpcCrl, FreeRpcCrl)
\r
519 DECLARE_RPC_EX("SetCrl", RPC_CRL, StSetCrl, InRpcCrl, OutRpcCrl, FreeRpcCrl)
\r
520 DECLARE_RPC_EX("SetAcList", RPC_AC_LIST, StSetAcList, InRpcAcList, OutRpcAcList, FreeRpcAcList)
\r
521 DECLARE_RPC_EX("GetAcList", RPC_AC_LIST, StGetAcList, InRpcAcList, OutRpcAcList, FreeRpcAcList)
\r
522 DECLARE_RPC_EX("EnumLogFile", RPC_ENUM_LOG_FILE, StEnumLogFile, InRpcEnumLogFile, OutRpcEnumLogFile, FreeRpcEnumLogFile)
\r
523 DECLARE_RPC_EX("ReadLogFile", RPC_READ_LOG_FILE, StReadLogFile, InRpcReadLogFile, OutRpcReadLogFile, FreeRpcReadLogFile)
\r
524 DECLARE_RPC("AddLicenseKey", RPC_TEST, StAddLicenseKey, InRpcTest, OutRpcTest)
\r
525 DECLARE_RPC("DelLicenseKey", RPC_TEST, StDelLicenseKey, InRpcTest, OutRpcTest)
\r
526 DECLARE_RPC_EX("EnumLicenseKey", RPC_ENUM_LICENSE_KEY, StEnumLicenseKey, InRpcEnumLicenseKey, OutRpcEnumLicenseKey, FreeRpcEnumLicenseKey)
\r
527 DECLARE_RPC("GetLicenseStatus", RPC_LICENSE_STATUS, StGetLicenseStatus, InRpcLicenseStatus, OutRpcLicenseStatus)
\r
528 DECLARE_RPC("SetSysLog", SYSLOG_SETTING, StSetSysLog, InRpcSysLogSetting, OutRpcSysLogSetting)
\r
529 DECLARE_RPC("GetSysLog", SYSLOG_SETTING, StGetSysLog, InRpcSysLogSetting, OutRpcSysLogSetting)
\r
530 DECLARE_RPC_EX("EnumEthVLan", RPC_ENUM_ETH_VLAN, StEnumEthVLan, InRpcEnumEthVLan, OutRpcEnumEthVLan, FreeRpcEnumEthVLan)
\r
531 DECLARE_RPC("SetEnableEthVLan", RPC_TEST, StSetEnableEthVLan, InRpcTest, OutRpcTest)
\r
532 DECLARE_RPC_EX("SetHubMsg", RPC_MSG, StSetHubMsg, InRpcMsg, OutRpcMsg, FreeRpcMsg)
\r
533 DECLARE_RPC_EX("GetHubMsg", RPC_MSG, StGetHubMsg, InRpcMsg, OutRpcMsg, FreeRpcMsg)
\r
534 DECLARE_RPC("Crash", RPC_TEST, StCrash, InRpcTest, OutRpcTest)
\r
535 DECLARE_RPC_EX("GetAdminMsg", RPC_MSG, StGetAdminMsg, InRpcMsg, OutRpcMsg, FreeRpcMsg)
\r
536 DECLARE_RPC("Flush", RPC_TEST, StFlush, InRpcTest, OutRpcTest)
\r
537 DECLARE_RPC("Debug", RPC_TEST, StDebug, InRpcTest, OutRpcTest)
\r
542 err = ERR_NOT_SUPPORTED;
\r
545 if (err != ERR_NO_ERROR)
\r
547 PackAddInt(ret, "error", err);
\r
552 char tmp[MAX_PATH];
\r
556 StrCpy(ip, sizeof(ip), "Unknown");
\r
558 if (rpc->Sock != NULL)
\r
560 IPToStr(ip, sizeof(ip), &rpc->Sock->RemoteIP);
\r
561 rpc_id = rpc->Sock->socket;
\r
564 Format(tmp, sizeof(tmp), "RPC: RPC-%u (%s): Leaving RPC [%s] (Error: %u).",
\r
565 rpc_id, ip, name, err);
\r
567 SiDebugLog(a->Server, tmp);
\r
570 Unlock(cedar->CedarSuperLock);
\r
575 // このあたりは急いで実装したのでコードがあまり美しくない。
\r
576 // 本当は Sun RPC のプリプロセッサのようにきれいな処理方法を採用したがったが
\r
577 // とりあえず今はマクロの羅列になっている。
\r
579 // RPC 呼び出し関数定義: ここから
\r
580 DECLARE_SC_EX("Test", RPC_TEST, ScTest, InRpcTest, OutRpcTest, FreeRpcTest)
\r
581 DECLARE_SC_EX("GetServerInfo", RPC_SERVER_INFO, ScGetServerInfo, InRpcServerInfo, OutRpcServerInfo, FreeRpcServerInfo)
\r
582 DECLARE_SC("GetServerStatus", RPC_SERVER_STATUS, ScGetServerStatus, InRpcServerStatus, OutRpcServerStatus)
\r
583 DECLARE_SC("CreateListener", RPC_LISTENER, ScCreateListener, InRpcListener, OutRpcListener)
\r
584 DECLARE_SC_EX("EnumListener", RPC_LISTENER_LIST, ScEnumListener, InRpcListenerList, OutRpcListenerList, FreeRpcListenerList)
\r
585 DECLARE_SC("DeleteListener", RPC_LISTENER, ScDeleteListener, InRpcListener, OutRpcListener)
\r
586 DECLARE_SC("EnableListener", RPC_LISTENER, ScEnableListener, InRpcListener, OutRpcListener)
\r
587 DECLARE_SC("SetServerPassword", RPC_SET_PASSWORD, ScSetServerPassword, InRpcSetPassword, OutRpcSetPassword)
\r
588 DECLARE_SC_EX("SetFarmSetting", RPC_FARM, ScSetFarmSetting, InRpcFarm, OutRpcFarm, FreeRpcFarm)
\r
589 DECLARE_SC_EX("GetFarmSetting", RPC_FARM, ScGetFarmSetting, InRpcFarm, OutRpcFarm, FreeRpcFarm)
\r
590 DECLARE_SC_EX("GetFarmInfo", RPC_FARM_INFO, ScGetFarmInfo, InRpcFarmInfo, OutRpcFarmInfo, FreeRpcFarmInfo)
\r
591 DECLARE_SC_EX("EnumFarmMember", RPC_ENUM_FARM, ScEnumFarmMember, InRpcEnumFarm, OutRpcEnumFarm, FreeRpcEnumFarm)
\r
592 DECLARE_SC("GetFarmConnectionStatus", RPC_FARM_CONNECTION_STATUS, ScGetFarmConnectionStatus, InRpcFarmConnectionStatus, OutRpcFarmConnectionStatus)
\r
593 DECLARE_SC_EX("SetServerCert", RPC_KEY_PAIR, ScSetServerCert, InRpcKeyPair, OutRpcKeyPair, FreeRpcKeyPair)
\r
594 DECLARE_SC_EX("GetServerCert", RPC_KEY_PAIR, ScGetServerCert, InRpcKeyPair, OutRpcKeyPair, FreeRpcKeyPair)
\r
595 DECLARE_SC_EX("GetServerCipher", RPC_STR, ScGetServerCipher, InRpcStr, OutRpcStr, FreeRpcStr)
\r
596 DECLARE_SC_EX("SetServerCipher", RPC_STR, ScSetServerCipher, InRpcStr, OutRpcStr, FreeRpcStr)
\r
597 DECLARE_SC("CreateHub", RPC_CREATE_HUB, ScCreateHub, InRpcCreateHub, OutRpcCreateHub)
\r
598 DECLARE_SC("SetHub", RPC_CREATE_HUB, ScSetHub, InRpcCreateHub, OutRpcCreateHub)
\r
599 DECLARE_SC("GetHub", RPC_CREATE_HUB, ScGetHub, InRpcCreateHub, OutRpcCreateHub)
\r
600 DECLARE_SC_EX("EnumHub", RPC_ENUM_HUB, ScEnumHub, InRpcEnumHub, OutRpcEnumHub, FreeRpcEnumHub)
\r
601 DECLARE_SC("DeleteHub", RPC_DELETE_HUB, ScDeleteHub, InRpcDeleteHub, OutRpcDeleteHub)
\r
602 DECLARE_SC("GetHubRadius", RPC_RADIUS, ScGetHubRadius, InRpcRadius, OutRpcRadius)
\r
603 DECLARE_SC("SetHubRadius", RPC_RADIUS, ScSetHubRadius, InRpcRadius, OutRpcRadius)
\r
604 DECLARE_SC_EX("EnumConnection", RPC_ENUM_CONNECTION, ScEnumConnection, InRpcEnumConnection, OutRpcEnumConnection, FreeRpcEnumConnetion)
\r
605 DECLARE_SC("DisconnectConnection", RPC_DISCONNECT_CONNECTION, ScDisconnectConnection, InRpcDisconnectConnection, OutRpcDisconnectConnection)
\r
606 DECLARE_SC("GetConnectionInfo", RPC_CONNECTION_INFO, ScGetConnectionInfo, InRpcConnectionInfo, OutRpcConnectionInfo)
\r
607 DECLARE_SC("SetHubOnline", RPC_SET_HUB_ONLINE, ScSetHubOnline, InRpcSetHubOnline, OutRpcSetHubOnline)
\r
608 DECLARE_SC("GetHubStatus", RPC_HUB_STATUS, ScGetHubStatus, InRpcHubStatus, OutRpcHubStatus)
\r
609 DECLARE_SC("SetHubLog", RPC_HUB_LOG, ScSetHubLog, InRpcHubLog, OutRpcHubLog)
\r
610 DECLARE_SC("GetHubLog", RPC_HUB_LOG, ScGetHubLog, InRpcHubLog, OutRpcHubLog)
\r
611 DECLARE_SC_EX("AddCa", RPC_HUB_ADD_CA, ScAddCa, InRpcHubAddCa, OutRpcHubAddCa, FreeRpcHubAddCa)
\r
612 DECLARE_SC_EX("EnumCa", RPC_HUB_ENUM_CA, ScEnumCa, InRpcHubEnumCa, OutRpcHubEnumCa, FreeRpcHubEnumCa)
\r
613 DECLARE_SC_EX("GetCa", RPC_HUB_GET_CA, ScGetCa, InRpcHubGetCa, OutRpcHubGetCa, FreeRpcHubGetCa)
\r
614 DECLARE_SC("DeleteCa", RPC_HUB_DELETE_CA, ScDeleteCa, InRpcHubDeleteCa, OutRpcHubDeleteCa)
\r
615 DECLARE_SC_EX("CreateLink", RPC_CREATE_LINK, ScCreateLink, InRpcCreateLink, OutRpcCreateLink, FreeRpcCreateLink)
\r
616 DECLARE_SC_EX("GetLink", RPC_CREATE_LINK, ScGetLink, InRpcCreateLink, OutRpcCreateLink, FreeRpcCreateLink)
\r
617 DECLARE_SC_EX("SetLink", RPC_CREATE_LINK, ScSetLink, InRpcCreateLink, OutRpcCreateLink, FreeRpcCreateLink)
\r
618 DECLARE_SC_EX("EnumLink", RPC_ENUM_LINK, ScEnumLink, InRpcEnumLink, OutRpcEnumLink, FreeRpcEnumLink)
\r
619 DECLARE_SC_EX("GetLinkStatus", RPC_LINK_STATUS, ScGetLinkStatus, InRpcLinkStatus, OutRpcLinkStatus, FreeRpcLinkStatus)
\r
620 DECLARE_SC("SetLinkOnline", RPC_LINK, ScSetLinkOnline, InRpcLink, OutRpcLink)
\r
621 DECLARE_SC("SetLinkOffline", RPC_LINK, ScSetLinkOffline, InRpcLink, OutRpcLink)
\r
622 DECLARE_SC("DeleteLink", RPC_LINK, ScDeleteLink, InRpcLink, OutRpcLink)
\r
623 DECLARE_SC("RenameLink", RPC_RENAME_LINK, ScRenameLink, InRpcRenameLink, OutRpcRenameLink)
\r
624 DECLARE_SC("AddAccess", RPC_ADD_ACCESS, ScAddAccess, InRpcAddAccess, OutRpcAddAccess)
\r
625 DECLARE_SC("DeleteAccess", RPC_DELETE_ACCESS, ScDeleteAccess, InRpcDeleteAccess, OutRpcDeleteAccess)
\r
626 DECLARE_SC_EX("EnumAccess", RPC_ENUM_ACCESS_LIST, ScEnumAccess, InRpcEnumAccessList, OutRpcEnumAccessList, FreeRpcEnumAccessList)
\r
627 DECLARE_SC_EX("SetAccessList", RPC_ENUM_ACCESS_LIST, ScSetAccessList, InRpcEnumAccessList, OutRpcEnumAccessList, FreeRpcEnumAccessList)
\r
628 DECLARE_SC_EX("CreateUser", RPC_SET_USER, ScCreateUser, InRpcSetUser, OutRpcSetUser, FreeRpcSetUser)
\r
629 DECLARE_SC_EX("SetUser", RPC_SET_USER, ScSetUser, InRpcSetUser, OutRpcSetUser, FreeRpcSetUser)
\r
630 DECLARE_SC_EX("GetUser", RPC_SET_USER, ScGetUser, InRpcSetUser, OutRpcSetUser, FreeRpcSetUser)
\r
631 DECLARE_SC("DeleteUser", RPC_DELETE_USER, ScDeleteUser, InRpcDeleteUser, OutRpcDeleteUser)
\r
632 DECLARE_SC_EX("EnumUser", RPC_ENUM_USER, ScEnumUser, InRpcEnumUser, OutRpcEnumUser, FreeRpcEnumUser)
\r
633 DECLARE_SC_EX("CreateGroup", RPC_SET_GROUP, ScCreateGroup, InRpcSetGroup, OutRpcSetGroup, FreeRpcSetGroup)
\r
634 DECLARE_SC_EX("SetGroup", RPC_SET_GROUP, ScSetGroup, InRpcSetGroup, OutRpcSetGroup, FreeRpcSetGroup)
\r
635 DECLARE_SC_EX("GetGroup", RPC_SET_GROUP, ScGetGroup, InRpcSetGroup, OutRpcSetGroup, FreeRpcSetGroup)
\r
636 DECLARE_SC("DeleteGroup", RPC_DELETE_USER, ScDeleteGroup, InRpcDeleteUser, OutRpcDeleteUser)
\r
637 DECLARE_SC_EX("EnumGroup", RPC_ENUM_GROUP, ScEnumGroup, InRpcEnumGroup, OutRpcEnumGroup, FreeRpcEnumGroup)
\r
638 DECLARE_SC_EX("EnumSession", RPC_ENUM_SESSION, ScEnumSession, InRpcEnumSession, OutRpcEnumSession, FreeRpcEnumSession)
\r
639 DECLARE_SC_EX("GetSessionStatus", RPC_SESSION_STATUS, ScGetSessionStatus, InRpcSessionStatus, OutRpcSessionStatus, FreeRpcSessionStatus)
\r
640 DECLARE_SC("DeleteSession", RPC_DELETE_SESSION, ScDeleteSession, InRpcDeleteSession, OutRpcDeleteSession)
\r
641 DECLARE_SC_EX("EnumMacTable", RPC_ENUM_MAC_TABLE, ScEnumMacTable, InRpcEnumMacTable, OutRpcEnumMacTable, FreeRpcEnumMacTable)
\r
642 DECLARE_SC("DeleteMacTable", RPC_DELETE_TABLE, ScDeleteMacTable, InRpcDeleteTable, OutRpcDeleteTable)
\r
643 DECLARE_SC_EX("EnumIpTable", RPC_ENUM_IP_TABLE, ScEnumIpTable, InRpcEnumIpTable, OutRpcEnumIpTable, FreeRpcEnumIpTable)
\r
644 DECLARE_SC("DeleteIpTable", RPC_DELETE_TABLE, ScDeleteIpTable, InRpcDeleteTable, OutRpcDeleteTable)
\r
645 DECLARE_SC("SetKeep", RPC_KEEP, ScSetKeep, InRpcKeep, OutRpcKeep)
\r
646 DECLARE_SC("GetKeep", RPC_KEEP, ScGetKeep, InRpcKeep, OutRpcKeep)
\r
647 DECLARE_SC("EnableSecureNAT", RPC_HUB, ScEnableSecureNAT, InRpcHub, OutRpcHub)
\r
648 DECLARE_SC("DisableSecureNAT", RPC_HUB, ScDisableSecureNAT, InRpcHub, OutRpcHub)
\r
649 DECLARE_SC("SetSecureNATOption", VH_OPTION, ScSetSecureNATOption, InVhOption, OutVhOption)
\r
650 DECLARE_SC("GetSecureNATOption", VH_OPTION, ScGetSecureNATOption, InVhOption, OutVhOption)
\r
651 DECLARE_SC_EX("EnumNAT", RPC_ENUM_NAT, ScEnumNAT, InRpcEnumNat, OutRpcEnumNat, FreeRpcEnumNat)
\r
652 DECLARE_SC_EX("EnumDHCP", RPC_ENUM_DHCP, ScEnumDHCP, InRpcEnumDhcp, OutRpcEnumDhcp, FreeRpcEnumDhcp)
\r
653 DECLARE_SC("GetSecureNATStatus", RPC_NAT_STATUS, ScGetSecureNATStatus, InRpcNatStatus, OutRpcNatStatus)
\r
654 DECLARE_SC_EX("EnumEthernet", RPC_ENUM_ETH, ScEnumEthernet, InRpcEnumEth, OutRpcEnumEth, FreeRpcEnumEth)
\r
655 DECLARE_SC("AddLocalBridge", RPC_LOCALBRIDGE, ScAddLocalBridge, InRpcLocalBridge, OutRpcLocalBridge)
\r
656 DECLARE_SC("DeleteLocalBridge", RPC_LOCALBRIDGE, ScDeleteLocalBridge, InRpcLocalBridge, OutRpcLocalBridge)
\r
657 DECLARE_SC_EX("EnumLocalBridge", RPC_ENUM_LOCALBRIDGE, ScEnumLocalBridge, InRpcEnumLocalBridge, OutRpcEnumLocalBridge, FreeRpcEnumLocalBridge)
\r
658 DECLARE_SC("GetBridgeSupport", RPC_BRIDGE_SUPPORT, ScGetBridgeSupport, InRpcBridgeSupport, OutRpcBridgeSupport)
\r
659 DECLARE_SC("RebootServer", RPC_TEST, ScRebootServer, InRpcTest, OutRpcTest)
\r
660 DECLARE_SC_EX("GetCaps", CAPSLIST, ScGetCaps, InRpcCapsList, OutRpcCapsList, FreeRpcCapsList)
\r
661 DECLARE_SC_EX("GetConfig", RPC_CONFIG, ScGetConfig, InRpcConfig, OutRpcConfig, FreeRpcConfig)
\r
662 DECLARE_SC_EX("SetConfig", RPC_CONFIG, ScSetConfig, InRpcConfig, OutRpcConfig, FreeRpcConfig)
\r
663 DECLARE_SC_EX("GetHubAdminOptions", RPC_ADMIN_OPTION, ScGetHubAdminOptions, InRpcAdminOption, OutRpcAdminOption, FreeRpcAdminOption)
\r
664 DECLARE_SC_EX("SetHubAdminOptions", RPC_ADMIN_OPTION, ScSetHubAdminOptions, InRpcAdminOption, OutRpcAdminOption, FreeRpcAdminOption)
\r
665 DECLARE_SC_EX("GetHubExtOptions", RPC_ADMIN_OPTION, ScGetHubExtOptions, InRpcAdminOption, OutRpcAdminOption, FreeRpcAdminOption)
\r
666 DECLARE_SC_EX("SetHubExtOptions", RPC_ADMIN_OPTION, ScSetHubExtOptions, InRpcAdminOption, OutRpcAdminOption, FreeRpcAdminOption)
\r
667 DECLARE_SC_EX("GetDefaultHubAdminOptions", RPC_ADMIN_OPTION, ScGetDefaultHubAdminOptions, InRpcAdminOption, OutRpcAdminOption, FreeRpcAdminOption)
\r
668 DECLARE_SC("AddL3Switch", RPC_L3SW, ScAddL3Switch, InRpcL3Sw, OutRpcL3Sw)
\r
669 DECLARE_SC("DelL3Switch", RPC_L3SW, ScDelL3Switch, InRpcL3Sw, OutRpcL3Sw)
\r
670 DECLARE_SC_EX("EnumL3Switch", RPC_ENUM_L3SW, ScEnumL3Switch, InRpcEnumL3Sw, OutRpcEnumL3Sw, FreeRpcEnumL3Sw)
\r
671 DECLARE_SC("StartL3Switch", RPC_L3SW, ScStartL3Switch, InRpcL3Sw, OutRpcL3Sw)
\r
672 DECLARE_SC("StopL3Switch", RPC_L3SW, ScStopL3Switch, InRpcL3Sw, OutRpcL3Sw)
\r
673 DECLARE_SC("AddL3If", RPC_L3IF, ScAddL3If, InRpcL3If, OutRpcL3If)
\r
674 DECLARE_SC("DelL3If", RPC_L3IF, ScDelL3If, InRpcL3If, OutRpcL3If)
\r
675 DECLARE_SC_EX("EnumL3If", RPC_ENUM_L3IF, ScEnumL3If, InRpcEnumL3If, OutRpcEnumL3If, FreeRpcEnumL3If)
\r
676 DECLARE_SC("AddL3Table", RPC_L3TABLE, ScAddL3Table, InRpcL3Table, OutRpcL3Table)
\r
677 DECLARE_SC("DelL3Table", RPC_L3TABLE, ScDelL3Table, InRpcL3Table, OutRpcL3Table)
\r
678 DECLARE_SC_EX("EnumL3Table", RPC_ENUM_L3TABLE, ScEnumL3Table, InRpcEnumL3Table, OutRpcEnumL3Table, FreeRpcEnumL3Table)
\r
679 DECLARE_SC_EX("EnumCrl", RPC_ENUM_CRL, ScEnumCrl, InRpcEnumCrl, OutRpcEnumCrl, FreeRpcEnumCrl)
\r
680 DECLARE_SC_EX("AddCrl", RPC_CRL, ScAddCrl, InRpcCrl, OutRpcCrl, FreeRpcCrl)
\r
681 DECLARE_SC_EX("DelCrl", RPC_CRL, ScDelCrl, InRpcCrl, OutRpcCrl, FreeRpcCrl)
\r
682 DECLARE_SC_EX("GetCrl", RPC_CRL, ScGetCrl, InRpcCrl, OutRpcCrl, FreeRpcCrl)
\r
683 DECLARE_SC_EX("SetCrl", RPC_CRL, ScSetCrl, InRpcCrl, OutRpcCrl, FreeRpcCrl)
\r
684 DECLARE_SC_EX("SetAcList", RPC_AC_LIST, ScSetAcList, InRpcAcList, OutRpcAcList, FreeRpcAcList)
\r
685 DECLARE_SC_EX("GetAcList", RPC_AC_LIST, ScGetAcList, InRpcAcList, OutRpcAcList, FreeRpcAcList)
\r
686 DECLARE_SC_EX("EnumLogFile", RPC_ENUM_LOG_FILE, ScEnumLogFile, InRpcEnumLogFile, OutRpcEnumLogFile, FreeRpcEnumLogFile)
\r
687 DECLARE_SC_EX("ReadLogFile", RPC_READ_LOG_FILE, ScReadLogFile, InRpcReadLogFile, OutRpcReadLogFile, FreeRpcReadLogFile)
\r
688 DECLARE_SC("AddLicenseKey", RPC_TEST, ScAddLicenseKey, InRpcTest, OutRpcTest)
\r
689 DECLARE_SC("DelLicenseKey", RPC_TEST, ScDelLicenseKey, InRpcTest, OutRpcTest)
\r
690 DECLARE_SC_EX("EnumLicenseKey", RPC_ENUM_LICENSE_KEY, ScEnumLicenseKey, InRpcEnumLicenseKey, OutRpcEnumLicenseKey, FreeRpcEnumLicenseKey)
\r
691 DECLARE_SC("GetLicenseStatus", RPC_LICENSE_STATUS, ScGetLicenseStatus, InRpcLicenseStatus, OutRpcLicenseStatus)
\r
692 DECLARE_SC("SetSysLog", SYSLOG_SETTING, ScSetSysLog, InRpcSysLogSetting, OutRpcSysLogSetting)
\r
693 DECLARE_SC("GetSysLog", SYSLOG_SETTING, ScGetSysLog, InRpcSysLogSetting, OutRpcSysLogSetting)
\r
694 DECLARE_SC_EX("EnumEthVLan", RPC_ENUM_ETH_VLAN, ScEnumEthVLan, InRpcEnumEthVLan, OutRpcEnumEthVLan, FreeRpcEnumEthVLan)
\r
695 DECLARE_SC("SetEnableEthVLan", RPC_TEST, ScSetEnableEthVLan, InRpcTest, OutRpcTest)
\r
696 DECLARE_SC_EX("SetHubMsg", RPC_MSG, ScSetHubMsg, InRpcMsg, OutRpcMsg, FreeRpcMsg)
\r
697 DECLARE_SC_EX("GetHubMsg", RPC_MSG, ScGetHubMsg, InRpcMsg, OutRpcMsg, FreeRpcMsg)
\r
698 DECLARE_SC("Crash", RPC_TEST, ScCrash, InRpcTest, OutRpcTest)
\r
699 DECLARE_SC_EX("GetAdminMsg", RPC_MSG, ScGetAdminMsg, InRpcMsg, OutRpcMsg, FreeRpcMsg)
\r
700 DECLARE_SC("Flush", RPC_TEST, ScFlush, InRpcTest, OutRpcTest)
\r
701 DECLARE_SC("Debug", RPC_TEST, ScDebug, InRpcTest, OutRpcTest)
\r
702 // RPC 呼び出し関数定義: ここまで
\r
706 UINT StSetHubMsg(ADMIN *a, RPC_MSG *t)
\r
708 SERVER *s = a->Server;
\r
709 CEDAR *c = s->Cedar;
\r
711 UINT ret = ERR_NO_ERROR;
\r
712 char hubname[MAX_HUBNAME_LEN + 1];
\r
715 NO_SUPPORT_FOR_BRIDGE;
\r
716 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
718 return ERR_NOT_SUPPORTED;
\r
720 if (UniStrLen(t->Msg) > HUB_MAXMSG_LEN)
\r
722 return ERR_MEMORY_NOT_ENOUGH;
\r
725 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
727 h = GetHub(c, hubname);
\r
731 ret = ERR_HUB_NOT_FOUND;
\r
735 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_msg") != 0)
\r
737 ret = ERR_NOT_ENOUGH_RIGHT;
\r
741 SetHubMsg(h, t->Msg);
\r
747 IncrementServerConfigRevision(s);
\r
753 UINT StGetHubMsg(ADMIN *a, RPC_MSG *t)
\r
755 SERVER *s = a->Server;
\r
756 CEDAR *c = s->Cedar;
\r
758 UINT ret = ERR_NO_ERROR;
\r
759 char hubname[MAX_HUBNAME_LEN + 1];
\r
762 NO_SUPPORT_FOR_BRIDGE;
\r
763 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
765 return ERR_NOT_SUPPORTED;
\r
767 if (UniStrLen(t->Msg) > HUB_MAXMSG_LEN)
\r
769 return ERR_MEMORY_NOT_ENOUGH;
\r
772 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
775 Zero(t, sizeof(t));
\r
777 h = GetHub(c, hubname);
\r
781 ret = ERR_HUB_NOT_FOUND;
\r
785 t->Msg = GetHubMsg(h);
\r
794 UINT StDebug(ADMIN *a, RPC_TEST *t)
\r
796 SERVER *s = a->Server;
\r
797 CEDAR *c = s->Cedar;
\r
798 UINT ret = ERR_NO_ERROR;
\r
803 Zero(&t2, sizeof(t2));
\r
805 ret = SiDebug(s, &t2, t->IntValue, t->StrValue);
\r
807 if (ret == ERR_NO_ERROR)
\r
809 Copy(t, &t2, sizeof(RPC_TEST));
\r
813 Zero(t, sizeof(RPC_TEST));
\r
820 UINT StFlush(ADMIN *a, RPC_TEST *t)
\r
822 SERVER *s = a->Server;
\r
823 CEDAR *c = s->Cedar;
\r
824 UINT ret = ERR_NO_ERROR;
\r
829 size = SiWriteConfigurationFile(s);
\r
831 t->IntValue = size;
\r
833 return ERR_NO_ERROR;
\r
836 // クラッシュさせる (システム管理者だけが実行できる緊急時用コード)
\r
837 UINT StCrash(ADMIN *a, RPC_TEST *t)
\r
839 SERVER *s = a->Server;
\r
840 CEDAR *c = s->Cedar;
\r
841 UINT ret = ERR_NO_ERROR;
\r
846 MsSetEnableMinidump(false);
\r
851 return ERR_NO_ERROR;
\r
855 UINT StGetAdminMsg(ADMIN *a, RPC_MSG *t)
\r
857 SERVER *s = a->Server;
\r
858 CEDAR *c = s->Cedar;
\r
859 UINT ret = ERR_NO_ERROR;
\r
860 RPC_WINVER server_ver;
\r
861 RPC_WINVER client_ver;
\r
862 wchar_t winver_msg_client[3800];
\r
863 wchar_t winver_msg_server[3800];
\r
864 wchar_t *utvpn_msg;
\r
869 Zero(t, sizeof(RPC_MSG));
\r
871 // Windows バージョンチェック
\r
872 GetWinVer(&server_ver);
\r
873 Copy(&client_ver, &a->ClientWinVer, sizeof(RPC_WINVER));
\r
875 Zero(winver_msg_client, sizeof(winver_msg_client));
\r
876 Zero(winver_msg_server, sizeof(winver_msg_server));
\r
878 utvpn_msg = _UU("UTVPN_MSG");
\r
880 if (IsSupportedWinVer(&client_ver) == false)
\r
886 UniFormat(winver_msg_client, sizeof(winver_msg_client), _UU("WINVER_ERROR_FORMAT"),
\r
887 _UU("WINVER_ERROR_PC_LOCAL"),
\r
889 _UU("WINVER_ERROR_VPNSERVER"),
\r
890 SUPPORTED_WINDOWS_LIST,
\r
891 _UU("WINVER_ERROR_PC_LOCAL"),
\r
892 _UU("WINVER_ERROR_VPNSERVER"),
\r
893 _UU("WINVER_ERROR_VPNSERVER"),
\r
894 _UU("WINVER_ERROR_VPNSERVER"),
\r
895 st.wYear, st.wMonth);
\r
898 if (IsSupportedWinVer(&server_ver) == false)
\r
904 UniFormat(winver_msg_server, sizeof(winver_msg_server), _UU("WINVER_ERROR_FORMAT"),
\r
905 _UU("WINVER_ERROR_PC_REMOTE"),
\r
907 _UU("WINVER_ERROR_VPNSERVER"),
\r
908 SUPPORTED_WINDOWS_LIST,
\r
909 _UU("WINVER_ERROR_PC_REMOTE"),
\r
910 _UU("WINVER_ERROR_VPNSERVER"),
\r
911 _UU("WINVER_ERROR_VPNSERVER"),
\r
912 _UU("WINVER_ERROR_VPNSERVER"),
\r
913 st.wYear, st.wMonth);
\r
916 tmpsize = UniStrSize(winver_msg_client) + UniStrSize(winver_msg_server) + UniStrSize(utvpn_msg) + 100;
\r
918 tmp = ZeroMalloc(tmpsize);
\r
919 UniStrCat(tmp, tmpsize, utvpn_msg);
\r
920 UniStrCat(tmp, tmpsize, winver_msg_client);
\r
921 UniStrCat(tmp, tmpsize, winver_msg_server);
\r
925 return ERR_NO_ERROR;
\r
929 UINT StEnumEthVLan(ADMIN *a, RPC_ENUM_ETH_VLAN *t)
\r
931 SERVER *s = a->Server;
\r
932 CEDAR *c = s->Cedar;
\r
933 UINT ret = ERR_NO_ERROR;
\r
938 if (GetServerCapsBool(s, "b_support_eth_vlan") == false)
\r
940 ret = ERR_NOT_SUPPORTED;
\r
944 FreeRpcEnumEthVLan(t);
\r
945 Zero(t, sizeof(RPC_ENUM_ETH_VLAN));
\r
947 if (EnumEthVLanWin32(t) == false)
\r
949 ret = ERR_INTERNAL_ERROR;
\r
953 ret = ERR_NOT_SUPPORTED;
\r
960 UINT StSetEnableEthVLan(ADMIN *a, RPC_TEST *t)
\r
962 SERVER *s = a->Server;
\r
963 CEDAR *c = s->Cedar;
\r
964 UINT ret = ERR_NO_ERROR;
\r
969 if (GetServerCapsBool(s, "b_support_eth_vlan") == false)
\r
971 ret = ERR_NOT_SUPPORTED;
\r
973 else if (MsIsAdmin() == false)
\r
975 ret = ERR_NOT_ENOUGH_RIGHT;
\r
979 if (SetVLanEnableStatus(t->StrValue, MAKEBOOL(t->IntValue)) == false)
\r
981 ret = ERR_INTERNAL_ERROR;
\r
985 ret = ERR_NOT_SUPPORTED;
\r
992 // (ソフトイーサ社の製品 PacketiX VPN の管理に使えるように互換性を残している)
\r
993 UINT StGetLicenseStatus(ADMIN *a, RPC_LICENSE_STATUS *t)
\r
995 SERVER *s = a->Server;
\r
996 CEDAR *c = s->Cedar;
\r
997 UINT ret = ERR_NO_ERROR;
\r
998 LICENSE_SYSTEM *ls = s->LicenseSystem;
\r
999 LICENSE_STATUS status;
\r
1003 return ERR_NOT_SUPPORTED;
\r
1006 NO_SUPPORT_FOR_BRIDGE;
\r
1008 SERVER_ADMIN_ONLY;
\r
1010 Zero(t, sizeof(RPC_LICENSE_STATUS));
\r
1012 // 現在のライセンスステータスを取得
\r
1013 LiParseCurrentLicenseStatus(ls, &status);
\r
1015 t->EditionId = status.Edition;
\r
1016 StrCpy(t->EditionStr, sizeof(t->EditionStr), status.EditionStr);
\r
1017 t->SystemId = status.SystemId;
\r
1018 t->SystemExpires = status.Expires;
\r
1019 t->NumClientConnectLicense = status.NumClientLicense;
\r
1020 t->NumBridgeConnectLicense = status.NumBridgeLicense;
\r
1021 t->NumUserCreationLicense = status.NumUserLicense;
\r
1022 t->SubscriptionExpires = status.SubscriptionExpires;
\r
1023 t->IsSubscriptionExpired = status.IsSubscriptionExpired;
\r
1024 t->NeedSubscription = status.NeedSubscription;
\r
1025 t->AllowEnterpriseFunction = status.AllowEnterpriseFunction;
\r
1026 t->ReleaseDate = c->BuiltDate;
\r
1032 // (ソフトイーサ社の製品 PacketiX VPN の管理に使えるように互換性を残している)
\r
1033 UINT StEnumLicenseKey(ADMIN *a, RPC_ENUM_LICENSE_KEY *t)
\r
1035 SERVER *s = a->Server;
\r
1036 CEDAR *c = s->Cedar;
\r
1037 UINT ret = ERR_NO_ERROR;
\r
1038 LICENSE_SYSTEM *ls = s->LicenseSystem;
\r
1042 return ERR_NOT_SUPPORTED;
\r
1045 NO_SUPPORT_FOR_BRIDGE;
\r
1047 SERVER_ADMIN_ONLY;
\r
1049 FreeRpcEnumLicenseKey(t);
\r
1050 Zero(t, sizeof(RPC_ENUM_LICENSE_KEY));
\r
1052 LockList(ls->LicenseList);
\r
1056 t->NumItem = LIST_NUM(ls->LicenseList);
\r
1057 t->Items = ZeroMalloc(sizeof(RPC_ENUM_LICENSE_KEY_ITEM) * t->NumItem);
\r
1059 for (i = 0;i < t->NumItem;i++)
\r
1061 RPC_ENUM_LICENSE_KEY_ITEM *k = &t->Items[i];
\r
1062 LICENSE *e = LIST_DATA(ls->LicenseList, i);
\r
1065 k->Expires = e->Expires;
\r
1066 StrCpy(k->LicenseId, sizeof(k->LicenseId), e->LicenseIdStr);
\r
1067 StrCpy(k->LicenseKey, sizeof(k->LicenseKey), e->LicenseKeyStr);
\r
1068 StrCpy(k->LicenseName, sizeof(k->LicenseName), e->Name);
\r
1069 k->Status = e->Status;
\r
1070 k->ProductId = e->ProductId;
\r
1071 k->SystemId = e->SystemId;
\r
1072 k->SerialId = e->SerialId;
\r
1075 UnlockList(ls->LicenseList);
\r
1081 // (ソフトイーサ社の製品 PacketiX VPN の管理に使えるように互換性を残している)
\r
1082 UINT StAddLicenseKey(ADMIN *a, RPC_TEST *t)
\r
1084 return ERR_NOT_SUPPORTED;
\r
1088 // (ソフトイーサ社の製品 PacketiX VPN の管理に使えるように互換性を残している)
\r
1089 UINT StDelLicenseKey(ADMIN *a, RPC_TEST *t)
\r
1091 return ERR_NOT_SUPPORTED;
\r
1095 BUF *DownloadFileFromServer(RPC *r, char *server_name, char *filepath, UINT total_size, DOWNLOAD_PROC *proc, void *param)
\r
1100 if (r == NULL || filepath == NULL)
\r
1105 if (server_name == NULL)
\r
1116 DOWNLOAD_PROGRESS g;
\r
1117 RPC_READ_LOG_FILE t;
\r
1120 Zero(&t, sizeof(t));
\r
1121 StrCpy(t.FilePath, sizeof(t.FilePath), filepath);
\r
1122 t.Offset = offset;
\r
1123 StrCpy(t.ServerName, sizeof(t.ServerName), server_name);
\r
1125 ret = ScReadLogFile(r, &t);
\r
1127 if (ret != ERR_NO_ERROR)
\r
1130 FreeRpcReadLogFile(&t);
\r
1135 if (t.Buffer == NULL)
\r
1142 offset += t.Buffer->Size;
\r
1143 Zero(&g, sizeof(g));
\r
1145 g.CurrentSize = offset;
\r
1146 g.TotalSize = MAX(total_size, offset);
\r
1147 g.ProgressPercent = (UINT)(MAKESURE((UINT64)g.CurrentSize * 100ULL / (UINT64)(MAX(g.TotalSize, 1)), 0, 100ULL));
\r
1149 WriteBuf(buf, t.Buffer->Buf, t.Buffer->Size);
\r
1151 FreeRpcReadLogFile(&t);
\r
1155 if (proc(&g) == false)
\r
1164 if (buf->Size == 0)
\r
1175 UINT StReadLogFile(ADMIN *a, RPC_READ_LOG_FILE *t)
\r
1177 SERVER *s = a->Server;
\r
1178 CEDAR *c = s->Cedar;
\r
1179 char logfilename[MAX_PATH];
\r
1180 char servername[MAX_HOST_NAME_LEN + 1];
\r
1182 bool local = true;
\r
1184 if (IsEmptyStr(t->FilePath))
\r
1186 return ERR_INVALID_PARAMETER;
\r
1189 StrCpy(logfilename, sizeof(logfilename), t->FilePath);
\r
1190 StrCpy(servername, sizeof(servername), t->ServerName);
\r
1191 offset = t->Offset;
\r
1193 if (s->ServerType != SERVER_TYPE_FARM_CONTROLLER)
\r
1195 GetMachineName(servername, sizeof(servername));
\r
1198 // ログファイルを読み込む権限があるかどうか検査する
\r
1199 if (a->LogFileList == NULL)
\r
1202 return ERR_OBJECT_NOT_FOUND;
\r
1204 if (CheckLogFileNameFromEnumList(a->LogFileList, logfilename, servername) == false)
\r
1206 // そのようなファイルは列挙リストに無い
\r
1207 return ERR_OBJECT_NOT_FOUND;
\r
1210 FreeRpcReadLogFile(t);
\r
1211 Zero(t, sizeof(RPC_READ_LOG_FILE));
\r
1213 if (s->ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
1217 // 要求されたファイルのサーバー名がクラスタメンバのホスト名
\r
1218 // と一致した場合はリモートサーバー上にファイルが存在するのでそれを読み込む
\r
1219 LockList(s->FarmMemberList);
\r
1221 for (i = 0;i < LIST_NUM(s->FarmMemberList);i++)
\r
1223 FARM_MEMBER *f = LIST_DATA(s->FarmMemberList, i);
\r
1225 if (f->Me == false)
\r
1227 if (StrCmpi(f->hostname, servername) == 0)
\r
1229 RPC_READ_LOG_FILE tt;
\r
1231 Zero(&tt, sizeof(tt));
\r
1234 StrCpy(tt.ServerName, sizeof(tt.ServerName), servername);
\r
1235 StrCpy(tt.FilePath, sizeof(tt.FilePath), logfilename);
\r
1236 tt.Offset = offset;
\r
1238 if (SiCallReadLogFile(s, f, &tt))
\r
1240 if (tt.Buffer != NULL && tt.Buffer->Size > 0)
\r
1242 t->Buffer = NewBuf();
\r
1243 WriteBuf(t->Buffer, tt.Buffer->Buf, tt.Buffer->Size);
\r
1247 FreeRpcReadLogFile(&tt);
\r
1254 UnlockList(s->FarmMemberList);
\r
1260 SiReadLocalLogFile(s, logfilename, offset, t);
\r
1265 ALog(a, NULL, "LA_READ_LOG_FILE", servername, logfilename);
\r
1268 return ERR_NO_ERROR;
\r
1272 UINT StEnumLogFile(ADMIN *a, RPC_ENUM_LOG_FILE *t)
\r
1274 SERVER *s = a->Server;
\r
1275 CEDAR *c = s->Cedar;
\r
1277 bool no_access = false;
\r
1281 if (a->ServerAdmin == false)
\r
1283 h = GetHub(c, a->HubName);
\r
1285 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_read_log_file") != 0)
\r
1294 if (s->ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
1296 // クラスタコントローラで管理者がログファイルの一覧を取得する
\r
1297 // と高負荷になるため制限している
\r
1298 return ERR_NOT_SUPPORTED;
\r
1304 return ERR_NOT_ENOUGH_RIGHT;
\r
1307 FreeRpcEnumLogFile(t);
\r
1308 Zero(t, sizeof(RPC_ENUM_LOG_FILE));
\r
1310 // ローカルのログファイルを列挙する
\r
1311 SiEnumLocalLogFileList(s, a->ServerAdmin ? NULL : a->HubName, t);
\r
1313 if (s->ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
1316 LIST *tt_list = NewListFast(NULL);
\r
1318 LockList(s->FarmMemberList);
\r
1320 for (i = 0;i < LIST_NUM(s->FarmMemberList);i++)
\r
1322 FARM_MEMBER *f = LIST_DATA(s->FarmMemberList, i);
\r
1324 if (f->Me == false)
\r
1326 // 他のメンバ上のログファイルを列挙する
\r
1327 RPC_ENUM_LOG_FILE *tt;
\r
1328 tt = ZeroMalloc(sizeof(RPC_ENUM_LOG_FILE));
\r
1330 if (SiCallEnumLogFileList(s, f, tt, a->ServerAdmin ? "" : a->HubName))
\r
1333 for (i = 0;i < tt->NumItem;i++)
\r
1335 RPC_ENUM_LOG_FILE_ITEM *e = &tt->Items[i];
\r
1337 StrCpy(e->ServerName, sizeof(e->ServerName), f->hostname);
\r
1349 UnlockList(s->FarmMemberList);
\r
1351 for (i = 0;i < LIST_NUM(tt_list);i++)
\r
1353 RPC_ENUM_LOG_FILE *tt = LIST_DATA(tt_list, i);
\r
1355 AdjoinRpcEnumLogFile(t, tt);
\r
1356 FreeRpcEnumLogFile(tt);
\r
1361 ReleaseList(tt_list);
\r
1364 // RPC セッションに最後に列挙したログファイル一覧をキャッシュする
\r
1365 if (a->LogFileList != NULL)
\r
1367 FreeEnumLogFile(a->LogFileList);
\r
1370 a->LogFileList = NewListFast(CmpLogFile);
\r
1372 for (i = 0;i < t->NumItem;i++)
\r
1374 RPC_ENUM_LOG_FILE_ITEM *e = &t->Items[i];
\r
1375 LOG_FILE *f = ZeroMalloc(sizeof(LOG_FILE));
\r
1377 f->FileSize = e->FileSize;
\r
1378 f->UpdatedTime = e->UpdatedTime;
\r
1379 StrCpy(f->Path, sizeof(f->Path), e->FilePath);
\r
1380 StrCpy(f->ServerName, sizeof(f->ServerName), e->ServerName);
\r
1382 Insert(a->LogFileList, f);
\r
1385 return ERR_NO_ERROR;
\r
1390 UINT StGetAcList(ADMIN *a, RPC_AC_LIST *t)
\r
1392 return ERR_NOT_SUPPORTED;
\r
1396 UINT StSetAcList(ADMIN *a, RPC_AC_LIST *t)
\r
1398 return ERR_NOT_SUPPORTED;
\r
1402 UINT StSetCrl(ADMIN *a, RPC_CRL *t)
\r
1404 SERVER *s = a->Server;
\r
1405 CEDAR *c = s->Cedar;
\r
1407 UINT ret = ERR_NO_ERROR;
\r
1409 char hubname[MAX_HUBNAME_LEN + 1];
\r
1412 NO_SUPPORT_FOR_BRIDGE;
\r
1413 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
1415 return ERR_NOT_SUPPORTED;
\r
1418 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
1421 h = GetHub(c, hubname);
\r
1425 ret = ERR_HUB_NOT_FOUND;
\r
1429 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_crl_list") != 0)
\r
1431 ret = ERR_NOT_ENOUGH_RIGHT;
\r
1435 if (h->HubDb == NULL)
\r
1437 ret = ERR_NOT_SUPPORTED;
\r
1441 LockList(h->HubDb->CrlList);
\r
1443 CRL *crl = ListKeyToPointer(h->HubDb->CrlList, t->Key);
\r
1447 ret = ERR_INTERNAL_ERROR;
\r
1451 CRL *new_crl = CopyCrl(t->Crl);
\r
1452 if (ReplaceListPointer(h->HubDb->CrlList, crl, new_crl))
\r
1454 ALog(a, h, "LA_ADD_CRL");
\r
1457 IncrementServerConfigRevision(s);
\r
1461 UnlockList(h->HubDb->CrlList);
\r
1472 UINT StGetCrl(ADMIN *a, RPC_CRL *t)
\r
1474 SERVER *s = a->Server;
\r
1475 CEDAR *c = s->Cedar;
\r
1477 UINT ret = ERR_NO_ERROR;
\r
1479 char hubname[MAX_HUBNAME_LEN + 1];
\r
1482 NO_SUPPORT_FOR_BRIDGE;
\r
1483 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
1485 return ERR_NOT_SUPPORTED;
\r
1488 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
1492 Zero(t, sizeof(RPC_CRL));
\r
1493 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
1496 h = GetHub(c, hubname);
\r
1500 ret = ERR_HUB_NOT_FOUND;
\r
1504 if (h->HubDb == NULL)
\r
1506 ret = ERR_NOT_SUPPORTED;
\r
1510 LockList(h->HubDb->CrlList);
\r
1512 CRL *crl = ListKeyToPointer(h->HubDb->CrlList, t->Key);
\r
1516 ret = ERR_INTERNAL_ERROR;
\r
1520 t->Crl = CopyCrl(crl);
\r
1523 UnlockList(h->HubDb->CrlList);
\r
1533 UINT StDelCrl(ADMIN *a, RPC_CRL *t)
\r
1535 SERVER *s = a->Server;
\r
1536 CEDAR *c = s->Cedar;
\r
1538 UINT ret = ERR_NO_ERROR;
\r
1539 char hubname[MAX_HUBNAME_LEN + 1];
\r
1542 NO_SUPPORT_FOR_BRIDGE;
\r
1543 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
1545 return ERR_NOT_SUPPORTED;
\r
1548 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
1550 h = GetHub(c, hubname);
\r
1554 ret = ERR_HUB_NOT_FOUND;
\r
1558 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_crl_list") != 0)
\r
1560 ret = ERR_NOT_ENOUGH_RIGHT;
\r
1564 if (h->HubDb == NULL)
\r
1566 ret = ERR_NOT_SUPPORTED;
\r
1570 LockList(h->HubDb->CrlList);
\r
1572 CRL *crl = ListKeyToPointer(h->HubDb->CrlList, t->Key);
\r
1576 ret = ERR_INTERNAL_ERROR;
\r
1580 ALog(a, h, "LA_DEL_CRL");
\r
1582 Delete(h->HubDb->CrlList, crl);
\r
1585 UnlockList(h->HubDb->CrlList);
\r
1596 UINT StAddCrl(ADMIN *a, RPC_CRL *t)
\r
1598 SERVER *s = a->Server;
\r
1599 CEDAR *c = s->Cedar;
\r
1601 UINT ret = ERR_NO_ERROR;
\r
1602 char hubname[MAX_HUBNAME_LEN + 1];
\r
1606 return ERR_NOT_SUPPORTED;
\r
1610 NO_SUPPORT_FOR_BRIDGE;
\r
1611 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
1613 return ERR_NOT_SUPPORTED;
\r
1616 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
1618 h = GetHub(c, hubname);
\r
1622 ret = ERR_HUB_NOT_FOUND;
\r
1626 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_crl_list") != 0)
\r
1628 ret = ERR_NOT_ENOUGH_RIGHT;
\r
1632 if (h->HubDb == NULL)
\r
1634 ret = ERR_NOT_SUPPORTED;
\r
1638 LockList(h->HubDb->CrlList);
\r
1640 if (LIST_NUM(h->HubDb->CrlList) < MAX_HUB_CRLS)
\r
1642 CRL *crl = CopyCrl(t->Crl);
\r
1644 Insert(h->HubDb->CrlList, crl);
\r
1646 ALog(a, h, "LA_SET_CRL");
\r
1648 IncrementServerConfigRevision(s);
\r
1651 UnlockList(h->HubDb->CrlList);
\r
1662 UINT StEnumCrl(ADMIN *a, RPC_ENUM_CRL *t)
\r
1664 SERVER *s = a->Server;
\r
1665 CEDAR *c = s->Cedar;
\r
1667 UINT ret = ERR_NO_ERROR;
\r
1668 char hubname[MAX_HUBNAME_LEN + 1];
\r
1671 NO_SUPPORT_FOR_BRIDGE;
\r
1672 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
1674 return ERR_NOT_SUPPORTED;
\r
1677 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
1678 FreeRpcEnumCrl(t);
\r
1679 Zero(t, sizeof(RPC_ENUM_CRL));
\r
1681 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
1683 h = GetHub(c, hubname);
\r
1687 ret = ERR_HUB_NOT_FOUND;
\r
1691 if (h->HubDb == NULL)
\r
1693 ret = ERR_NOT_SUPPORTED;
\r
1697 LockList(h->HubDb->CrlList);
\r
1701 t->NumItem = LIST_NUM(h->HubDb->CrlList);
\r
1702 t->Items = ZeroMalloc(sizeof(RPC_ENUM_CRL_ITEM) * t->NumItem);
\r
1704 for (i = 0;i < LIST_NUM(h->HubDb->CrlList);i++)
\r
1706 CRL *crl = LIST_DATA(h->HubDb->CrlList, i);
\r
1707 wchar_t *info = GenerateCrlStr(crl);
\r
1709 UniStrCpy(t->Items[i].CrlInfo, sizeof(t->Items[i].CrlInfo), info);
\r
1712 t->Items[i].Key = POINTER_TO_KEY(crl);
\r
1715 UnlockList(h->HubDb->CrlList);
\r
1725 UINT StEnumL3Table(ADMIN *a, RPC_ENUM_L3TABLE *t)
\r
1727 SERVER *s = a->Server;
\r
1728 CEDAR *c = s->Cedar;
\r
1729 UINT ret = ERR_NO_ERROR;
\r
1731 char name[MAX_HUBNAME_LEN + 1];
\r
1733 if (IsEmptyStr(t->Name))
\r
1735 return ERR_INVALID_PARAMETER;
\r
1738 NO_SUPPORT_FOR_BRIDGE;
\r
1740 StrCpy(name, sizeof(name), t->Name);
\r
1741 FreeRpcEnumL3Table(t);
\r
1742 Zero(t, sizeof(RPC_ENUM_L3TABLE));
\r
1743 StrCpy(t->Name, sizeof(t->Name), name);
\r
1745 sw = L3GetSw(c, t->Name);
\r
1749 ret = ERR_LAYER3_SW_NOT_FOUND;
\r
1757 t->NumItem = LIST_NUM(sw->TableList);
\r
1758 t->Items = ZeroMalloc(sizeof(RPC_L3TABLE) * t->NumItem);
\r
1760 for (i = 0;i < t->NumItem;i++)
\r
1762 L3TABLE *tbl = LIST_DATA(sw->TableList, i);
\r
1763 RPC_L3TABLE *e = &t->Items[i];
\r
1765 StrCpy(e->Name, sizeof(e->Name), name);
\r
1766 e->NetworkAddress = tbl->NetworkAddress;
\r
1767 e->SubnetMask = tbl->SubnetMask;
\r
1768 e->GatewayAddress = tbl->GatewayAddress;
\r
1769 e->Metric = tbl->Metric;
\r
1781 UINT StDelL3Table(ADMIN *a, RPC_L3TABLE *t)
\r
1783 SERVER *s = a->Server;
\r
1784 CEDAR *c = s->Cedar;
\r
1785 UINT ret = ERR_NO_ERROR;
\r
1788 SERVER_ADMIN_ONLY;
\r
1790 NO_SUPPORT_FOR_BRIDGE;
\r
1792 sw = L3GetSw(c, t->Name);
\r
1796 ret = ERR_LAYER3_SW_NOT_FOUND;
\r
1802 Zero(&tbl, sizeof(tbl));
\r
1803 tbl.NetworkAddress = t->NetworkAddress;
\r
1804 tbl.SubnetMask = t->SubnetMask;
\r
1805 tbl.GatewayAddress = t->GatewayAddress;
\r
1806 tbl.Metric = t->Metric;
\r
1808 if (L3DelTable(sw, &tbl) == false)
\r
1810 ret = ERR_LAYER3_TABLE_DEL_FAILED;
\r
1814 char tmp[MAX_SIZE];
\r
1815 IPToStr32(tmp, sizeof(tmp), tbl.NetworkAddress);
\r
1816 ALog(a, NULL, "LA_DEL_L3_TABLE", tmp, t->Name);
\r
1818 IncrementServerConfigRevision(s);
\r
1828 UINT StAddL3Table(ADMIN *a, RPC_L3TABLE *t)
\r
1830 SERVER *s = a->Server;
\r
1831 CEDAR *c = s->Cedar;
\r
1832 UINT ret = ERR_NO_ERROR;
\r
1835 if (IsNetworkAddress32(t->NetworkAddress, t->SubnetMask) == false ||
\r
1836 IsHostIPAddress32(t->GatewayAddress) == false)
\r
1838 return ERR_INVALID_PARAMETER;
\r
1841 SERVER_ADMIN_ONLY;
\r
1843 NO_SUPPORT_FOR_BRIDGE;
\r
1845 sw = L3GetSw(c, t->Name);
\r
1849 ret = ERR_LAYER3_SW_NOT_FOUND;
\r
1855 Zero(&tbl, sizeof(tbl));
\r
1856 tbl.NetworkAddress = t->NetworkAddress;
\r
1857 tbl.SubnetMask = t->SubnetMask;
\r
1858 tbl.GatewayAddress = t->GatewayAddress;
\r
1859 tbl.Metric = t->Metric;
\r
1861 if (L3AddTable(sw, &tbl) == false)
\r
1863 ret = ERR_LAYER3_TABLE_ADD_FAILED;
\r
1867 char tmp[MAX_SIZE];
\r
1868 IPToStr32(tmp, sizeof(tmp), tbl.NetworkAddress);
\r
1869 ALog(a, NULL, "LA_ADD_L3_TABLE", tmp, t->Name);
\r
1871 IncrementServerConfigRevision(s);
\r
1881 UINT StEnumL3If(ADMIN *a, RPC_ENUM_L3IF *t)
\r
1883 SERVER *s = a->Server;
\r
1884 CEDAR *c = s->Cedar;
\r
1885 UINT ret = ERR_NO_ERROR;
\r
1887 char name[MAX_HUBNAME_LEN + 1];
\r
1889 NO_SUPPORT_FOR_BRIDGE;
\r
1891 StrCpy(name, sizeof(name), t->Name);
\r
1893 FreeRpcEnumL3If(t);
\r
1894 Zero(t, sizeof(RPC_ENUM_L3IF));
\r
1896 StrCpy(t->Name, sizeof(t->Name), name);
\r
1898 sw = L3GetSw(c, t->Name);
\r
1902 ret = ERR_LAYER3_SW_NOT_FOUND;
\r
1910 t->NumItem = LIST_NUM(sw->IfList);
\r
1911 t->Items = ZeroMalloc(sizeof(RPC_L3IF) * t->NumItem);
\r
1913 for (i = 0;i < t->NumItem;i++)
\r
1915 L3IF *f = LIST_DATA(sw->IfList, i);
\r
1916 RPC_L3IF *e = &t->Items[i];
\r
1918 StrCpy(e->Name, sizeof(e->Name), sw->Name);
\r
1919 StrCpy(e->HubName, sizeof(e->HubName), f->HubName);
\r
1920 e->IpAddress = f->IpAddress;
\r
1921 e->SubnetMask = f->SubnetMask;
\r
1933 UINT StDelL3If(ADMIN *a, RPC_L3IF *t)
\r
1935 SERVER *s = a->Server;
\r
1936 CEDAR *c = s->Cedar;
\r
1937 UINT ret = ERR_NO_ERROR;
\r
1940 NO_SUPPORT_FOR_BRIDGE;
\r
1942 SERVER_ADMIN_ONLY;
\r
1944 sw = L3GetSw(c, t->Name);
\r
1948 ret = ERR_LAYER3_SW_NOT_FOUND;
\r
1952 if (L3DelIf(sw, t->HubName) == false)
\r
1954 ret = ERR_LAYER3_IF_DEL_FAILED;
\r
1958 ALog(a, NULL, "LA_DEL_L3_IF", t->HubName, t->Name);
\r
1960 IncrementServerConfigRevision(s);
\r
1969 UINT StAddL3If(ADMIN *a, RPC_L3IF *t)
\r
1971 SERVER *s = a->Server;
\r
1972 CEDAR *c = s->Cedar;
\r
1973 UINT ret = ERR_NO_ERROR;
\r
1976 if (IsSubnetMask32(t->SubnetMask) == false || IsHostIPAddress32(t->IpAddress) == false)
\r
1978 return ERR_INVALID_PARAMETER;
\r
1980 if ((t->IpAddress & (~t->SubnetMask)) == 0)
\r
1982 return ERR_INVALID_PARAMETER;
\r
1985 NO_SUPPORT_FOR_BRIDGE;
\r
1987 SERVER_ADMIN_ONLY;
\r
1989 sw = L3GetSw(c, t->Name);
\r
1993 ret = ERR_LAYER3_SW_NOT_FOUND;
\r
1999 if (L3SearchIf(sw, t->HubName) != NULL)
\r
2002 ret = ERR_LAYER3_IF_EXISTS;
\r
2006 if (L3AddIf(sw, t->HubName, t->IpAddress, t->SubnetMask) == false)
\r
2008 ret = ERR_LAYER3_IF_ADD_FAILED;
\r
2012 ALog(a, NULL, "LA_ADD_L3_IF", t->HubName, t->Name);
\r
2014 IncrementServerConfigRevision(s);
\r
2025 // Layer-3 スイッチの停止
\r
2026 UINT StStopL3Switch(ADMIN *a, RPC_L3SW *t)
\r
2028 SERVER *s = a->Server;
\r
2029 CEDAR *c = s->Cedar;
\r
2030 UINT ret = ERR_NO_ERROR;
\r
2033 if (IsEmptyStr(t->Name))
\r
2035 return ERR_INVALID_PARAMETER;
\r
2038 NO_SUPPORT_FOR_BRIDGE;
\r
2040 SERVER_ADMIN_ONLY;
\r
2042 sw = L3GetSw(c, t->Name);
\r
2046 ret = ERR_LAYER3_SW_NOT_FOUND;
\r
2051 ALog(a, NULL, "LA_STOP_L3_SW", sw->Name);
\r
2054 IncrementServerConfigRevision(s);
\r
2060 // Layer-3 スイッチの開始
\r
2061 UINT StStartL3Switch(ADMIN *a, RPC_L3SW *t)
\r
2063 SERVER *s = a->Server;
\r
2064 CEDAR *c = s->Cedar;
\r
2065 UINT ret = ERR_NO_ERROR;
\r
2068 if (IsEmptyStr(t->Name))
\r
2070 return ERR_INVALID_PARAMETER;
\r
2073 NO_SUPPORT_FOR_BRIDGE;
\r
2075 SERVER_ADMIN_ONLY;
\r
2077 sw = L3GetSw(c, t->Name);
\r
2081 ret = ERR_LAYER3_SW_NOT_FOUND;
\r
2087 // 登録されているインターフェイス数を検査する
\r
2088 if (LIST_NUM(sw->IfList) >= 1)
\r
2092 ALog(a, NULL, "LA_START_L3_SW", sw->Name);
\r
2094 IncrementServerConfigRevision(s);
\r
2098 ret = ERR_LAYER3_CANT_START_SWITCH;
\r
2109 // Layer-3 スイッチの列挙
\r
2110 UINT StEnumL3Switch(ADMIN *a, RPC_ENUM_L3SW *t)
\r
2113 SERVER *s = a->Server;
\r
2114 CEDAR *c = s->Cedar;
\r
2115 UINT ret = ERR_NO_ERROR;
\r
2117 NO_SUPPORT_FOR_BRIDGE;
\r
2119 FreeRpcEnumL3Sw(t);
\r
2120 Zero(t, sizeof(RPC_ENUM_L3SW));
\r
2122 LockList(c->L3SwList);
\r
2124 t->NumItem = LIST_NUM(c->L3SwList);
\r
2125 t->Items = ZeroMalloc(sizeof(RPC_ENUM_L3SW_ITEM) * t->NumItem);
\r
2126 for (i = 0;i < LIST_NUM(c->L3SwList);i++)
\r
2128 L3SW *sw = LIST_DATA(c->L3SwList, i);
\r
2129 RPC_ENUM_L3SW_ITEM *e = &t->Items[i];
\r
2133 StrCpy(e->Name, sizeof(e->Name), sw->Name);
\r
2134 e->NumInterfaces = LIST_NUM(sw->IfList);
\r
2135 e->NumTables = LIST_NUM(sw->TableList);
\r
2136 e->Active = sw->Active;
\r
2137 e->Online = sw->Online;
\r
2142 UnlockList(c->L3SwList);
\r
2147 // Layer-3 スイッチの削除
\r
2148 UINT StDelL3Switch(ADMIN *a, RPC_L3SW *t)
\r
2150 SERVER *s = a->Server;
\r
2151 CEDAR *c = s->Cedar;
\r
2152 UINT ret = ERR_NO_ERROR;
\r
2154 if (IsEmptyStr(t->Name))
\r
2156 return ERR_INVALID_PARAMETER;
\r
2159 NO_SUPPORT_FOR_BRIDGE;
\r
2161 SERVER_ADMIN_ONLY;
\r
2163 if (L3DelSw(c, t->Name) == false)
\r
2165 ret = ERR_LAYER3_SW_NOT_FOUND;
\r
2169 ALog(a, NULL, "LA_DEL_L3_SW", t->Name);
\r
2171 IncrementServerConfigRevision(s);
\r
2177 // Layer-3 スイッチの追加
\r
2178 UINT StAddL3Switch(ADMIN *a, RPC_L3SW *t)
\r
2180 SERVER *s = a->Server;
\r
2181 CEDAR *c = s->Cedar;
\r
2182 UINT ret = ERR_NO_ERROR;
\r
2185 NO_SUPPORT_FOR_BRIDGE;
\r
2187 if (IsEmptyStr(t->Name))
\r
2189 return ERR_INVALID_PARAMETER;
\r
2192 if (IsSafeStr(t->Name) == false)
\r
2194 return ERR_INVALID_PARAMETER;
\r
2197 SERVER_ADMIN_ONLY;
\r
2200 sw = L3GetSw(c, t->Name);
\r
2205 ret = ERR_LAYER3_SW_EXISTS;
\r
2209 LockList(c->L3SwList);
\r
2211 if (LIST_NUM(c->L3SwList) >= GetServerCapsInt(s, "i_max_l3_sw"))
\r
2219 sw = L3AddSw(c, t->Name);
\r
2223 ALog(a, NULL, "LA_ADD_L3_SW", t->Name);
\r
2225 IncrementServerConfigRevision(s);
\r
2229 UnlockList(c->L3SwList);
\r
2234 ret = ERR_INTERNAL_ERROR;
\r
2246 // 仮想 HUB の拡張オプションを設定する
\r
2247 UINT StSetHubExtOptions(ADMIN *a, RPC_ADMIN_OPTION *t)
\r
2249 SERVER *s = a->Server;
\r
2250 CEDAR *c = s->Cedar;
\r
2253 bool not_server_admin = false;
\r
2255 if (t->NumItem > MAX_HUB_ADMIN_OPTIONS)
\r
2257 return ERR_TOO_MANT_ITEMS;
\r
2260 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
2262 return ERR_NOT_SUPPORTED;
\r
2267 if (a->ServerAdmin == false)
\r
2269 not_server_admin = true;
\r
2274 h = GetHub(c, t->HubName);
\r
2280 return ERR_HUB_NOT_FOUND;
\r
2283 if (GetHubAdminOption(h, "deny_hub_admin_change_ext_option") && not_server_admin)
\r
2288 return ERR_NOT_ENOUGH_RIGHT;
\r
2294 DataToHubOptionStruct(h->Option, t);
\r
2298 ALog(a, NULL, "LA_SET_HUB_EXT_OPTION", h->Name);
\r
2300 h->CurrentVersion++;
\r
2301 SiHubUpdateProc(h);
\r
2305 IncrementServerConfigRevision(s);
\r
2307 return ERR_NO_ERROR;
\r
2310 // 仮想 HUB の拡張オプションを取得する
\r
2311 UINT StGetHubExtOptions(ADMIN *a, RPC_ADMIN_OPTION *t)
\r
2313 SERVER *s = a->Server;
\r
2314 CEDAR *c = s->Cedar;
\r
2321 h = GetHub(c, t->HubName);
\r
2327 return ERR_HUB_NOT_FOUND;
\r
2330 FreeRpcAdminOption(t);
\r
2331 Zero(t, sizeof(RPC_ADMIN_OPTION));
\r
2333 StrCpy(t->HubName, sizeof(t->HubName), h->Name);
\r
2338 HubOptionStructToData(t, h->Option, h->Name);
\r
2344 return ERR_NO_ERROR;
\r
2347 // 仮想 HUB の管理オプションを設定する
\r
2348 UINT StSetHubAdminOptions(ADMIN *a, RPC_ADMIN_OPTION *t)
\r
2351 SERVER *s = a->Server;
\r
2352 CEDAR *c = s->Cedar;
\r
2355 bool not_server_admin = false;
\r
2357 if (t->NumItem > MAX_HUB_ADMIN_OPTIONS)
\r
2359 return ERR_TOO_MANT_ITEMS;
\r
2362 NO_SUPPORT_FOR_BRIDGE;
\r
2363 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
2365 return ERR_NOT_SUPPORTED;
\r
2370 if (a->ServerAdmin == false)
\r
2372 not_server_admin = true;
\r
2377 h = GetHub(c, t->HubName);
\r
2383 return ERR_HUB_NOT_FOUND;
\r
2386 if (GetHubAdminOption(h, "allow_hub_admin_change_option") == false
\r
2387 && not_server_admin)
\r
2392 return ERR_NOT_ENOUGH_RIGHT;
\r
2395 LockList(h->AdminOptionList);
\r
2397 DeleteAllHubAdminOption(h, false);
\r
2399 for (i = 0;i < t->NumItem;i++)
\r
2401 ADMIN_OPTION *e = &t->Items[i];
\r
2402 ADMIN_OPTION *a = ZeroMalloc(sizeof(ADMIN_OPTION));
\r
2404 StrCpy(a->Name, sizeof(a->Name), e->Name);
\r
2405 a->Value = e->Value;
\r
2407 Insert(h->AdminOptionList, a);
\r
2410 AddHubAdminOptionsDefaults(h, false);
\r
2412 UnlockList(h->AdminOptionList);
\r
2414 ALog(a, NULL, "LA_SET_HUB_ADMIN_OPTION", h->Name);
\r
2416 h->CurrentVersion++;
\r
2417 SiHubUpdateProc(h);
\r
2421 IncrementServerConfigRevision(s);
\r
2423 return ERR_NO_ERROR;
\r
2426 // 仮想 HUB の管理オプションを取得する
\r
2427 UINT StGetHubAdminOptions(ADMIN *a, RPC_ADMIN_OPTION *t)
\r
2430 SERVER *s = a->Server;
\r
2431 CEDAR *c = s->Cedar;
\r
2436 NO_SUPPORT_FOR_BRIDGE;
\r
2437 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
2439 return ERR_NOT_SUPPORTED;
\r
2444 h = GetHub(c, t->HubName);
\r
2450 return ERR_HUB_NOT_FOUND;
\r
2453 FreeRpcAdminOption(t);
\r
2454 Zero(t, sizeof(RPC_ADMIN_OPTION));
\r
2456 StrCpy(t->HubName, sizeof(t->HubName), h->Name);
\r
2458 LockList(h->AdminOptionList);
\r
2460 t->NumItem = LIST_NUM(h->AdminOptionList);
\r
2461 t->Items = ZeroMalloc(sizeof(ADMIN_OPTION) * t->NumItem);
\r
2463 for (i = 0;i < t->NumItem;i++)
\r
2465 ADMIN_OPTION *a = LIST_DATA(h->AdminOptionList, i);
\r
2466 ADMIN_OPTION *e = &t->Items[i];
\r
2468 StrCpy(e->Name, sizeof(e->Name), a->Name);
\r
2469 e->Value = a->Value;
\r
2472 UnlockList(h->AdminOptionList);
\r
2476 return ERR_NO_ERROR;
\r
2479 // デフォルトの管理オプションの一覧を取得する
\r
2480 UINT StGetDefaultHubAdminOptions(ADMIN *a, RPC_ADMIN_OPTION *t)
\r
2484 NO_SUPPORT_FOR_BRIDGE;
\r
2485 if (a->Server->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
2487 return ERR_NOT_SUPPORTED;
\r
2490 FreeRpcAdminOption(t);
\r
2491 Zero(t, sizeof(RPC_ADMIN_OPTION));
\r
2493 t->NumItem = num_admin_options;
\r
2494 t->Items = ZeroMalloc(sizeof(ADMIN_OPTION) * t->NumItem);
\r
2496 for (i = 0;i < t->NumItem;i++)
\r
2498 ADMIN_OPTION *a = &t->Items[i];
\r
2500 StrCpy(a->Name, sizeof(a->Name), admin_options[i].Name);
\r
2501 a->Value = admin_options[i].Value;
\r
2504 return ERR_NO_ERROR;
\r
2508 UINT StGetConfig(ADMIN *a, RPC_CONFIG *t)
\r
2512 SERVER_ADMIN_ONLY;
\r
2515 Zero(t, sizeof(RPC_CONFIG));
\r
2519 ALog(a, NULL, "LA_GET_CONFIG");
\r
2521 if (s->CfgRw != NULL)
\r
2523 FOLDER *f = SiWriteConfigurationToCfg(s);
\r
2524 BUF *b = CfgFolderToBuf(f, true);
\r
2526 StrCpy(t->FileName, sizeof(t->FileName), s->CfgRw->FileName + (s->CfgRw->FileName[0] == '@' ? 1 : 0));
\r
2528 t->FileData = ZeroMalloc(b->Size + 1);
\r
2529 Copy(t->FileData, b->Buf, b->Size);
\r
2531 CfgDeleteFolder(f);
\r
2534 return ERR_NO_ERROR;
\r
2538 return ERR_INTERNAL_ERROR;
\r
2543 UINT StSetConfig(ADMIN *a, RPC_CONFIG *t)
\r
2547 char filename[MAX_PATH];
\r
2549 SERVER_ADMIN_ONLY;
\r
2552 if (s->CfgRw == NULL)
\r
2554 return ERR_INTERNAL_ERROR;
\r
2557 // 新しい Config ファイルに書き込む
\r
2558 Format(filename, sizeof(filename), "%s.new", s->CfgRw->FileName);
\r
2560 o = FileCreate(filename);
\r
2562 FileWrite(o, t->FileData, StrLen(t->FileData));
\r
2566 IncrementServerConfigRevision(s);
\r
2568 ALog(a, NULL, "LA_SET_CONFIG");
\r
2571 SiRebootServer(s->Cedar->Bridge);
\r
2573 return ERR_NO_ERROR;
\r
2577 UINT StGetCaps(ADMIN *a, CAPSLIST *t)
\r
2579 FreeRpcCapsList(t);
\r
2580 Zero(t, sizeof(CAPSLIST));
\r
2582 GetServerCapsMain(a->Server, t);
\r
2584 return ERR_NO_ERROR;
\r
2588 UINT StRebootServer(ADMIN *a, RPC_TEST *t)
\r
2590 SERVER_ADMIN_ONLY;
\r
2592 ALog(a, NULL, "LA_REBOOT_SERVER");
\r
2594 SiRebootServerEx(a->Server->Cedar->Bridge, t->IntValue);
\r
2596 return ERR_NO_ERROR;
\r
2599 // ローカルブリッジのサポート情報の取得
\r
2600 UINT StGetBridgeSupport(ADMIN *a, RPC_BRIDGE_SUPPORT *t)
\r
2602 Zero(t, sizeof(RPC_BRIDGE_SUPPORT));
\r
2604 t->IsBridgeSupportedOs = IsBridgeSupported();
\r
2605 t->IsWinPcapNeeded = IsNeedWinPcap();
\r
2607 return ERR_NO_ERROR;
\r
2610 // Ethernet デバイスの列挙
\r
2611 UINT StEnumEthernet(ADMIN *a, RPC_ENUM_ETH *t)
\r
2615 char tmp[MAX_SIZE];
\r
2616 bool unix_support = false;
\r
2618 SERVER_ADMIN_ONLY;
\r
2621 unix_support = EthIsInterfaceDescriptionSupportedUnix();
\r
2626 FreeRpcEnumEth(t);
\r
2627 Zero(t, sizeof(RPC_ENUM_ETH));
\r
2629 t->NumItem = o->NumTokens;
\r
2630 t->Items = ZeroMalloc(sizeof(RPC_ENUM_ETH_ITEM) * t->NumItem);
\r
2632 for (i = 0;i < t->NumItem;i++)
\r
2634 RPC_ENUM_ETH_ITEM *e = &t->Items[i];
\r
2636 StrCpy(e->DeviceName, sizeof(e->DeviceName), o->Token[i]);
\r
2638 StrCpy(tmp, sizeof(tmp), e->DeviceName);
\r
2641 GetEthNetworkConnectionName(e->NetworkConnectionName, sizeof(e->NetworkConnectionName), e->DeviceName);
\r
2643 if (unix_support == false)
\r
2645 StrCpy(tmp, sizeof(tmp), "");
\r
2649 if (EthGetInterfaceDescriptionUnix(e->DeviceName, tmp, sizeof(tmp)) == false)
\r
2651 StrCpy(tmp, sizeof(tmp), e->DeviceName);
\r
2655 StrToUni(e->NetworkConnectionName, sizeof(e->NetworkConnectionName), tmp);
\r
2661 return ERR_NO_ERROR;
\r
2665 UINT StAddLocalBridge(ADMIN *a, RPC_LOCALBRIDGE *t)
\r
2667 if (IsEmptyStr(t->DeviceName) || IsEmptyStr(t->HubName))
\r
2669 return ERR_INVALID_PARAMETER;
\r
2672 SERVER_ADMIN_ONLY;
\r
2674 if (IsEthSupported() == false)
\r
2676 return ERR_LOCAL_BRIDGE_UNSUPPORTED;
\r
2679 ALog(a, NULL, "LA_ADD_BRIDGE", t->HubName, t->DeviceName);
\r
2681 AddLocalBridge(a->Server->Cedar, t->HubName, t->DeviceName, false, false, t->TapMode, NULL, false);
\r
2683 IncrementServerConfigRevision(a->Server);
\r
2685 return ERR_NO_ERROR;
\r
2689 UINT StDeleteLocalBridge(ADMIN *a, RPC_LOCALBRIDGE *t)
\r
2691 if (IsEmptyStr(t->DeviceName) || IsEmptyStr(t->HubName))
\r
2693 return ERR_INVALID_PARAMETER;
\r
2696 SERVER_ADMIN_ONLY;
\r
2698 ALog(a, NULL, "LA_DELETE_BRIDGE", t->HubName, t->DeviceName);
\r
2700 if (DeleteLocalBridge(a->Server->Cedar, t->HubName, t->DeviceName) == false)
\r
2702 return ERR_OBJECT_NOT_FOUND;
\r
2705 IncrementServerConfigRevision(a->Server);
\r
2707 return ERR_NO_ERROR;
\r
2711 UINT StEnumLocalBridge(ADMIN *a, RPC_ENUM_LOCALBRIDGE *t)
\r
2716 if (IsEthSupported() == false)
\r
2718 return ERR_LOCAL_BRIDGE_UNSUPPORTED;
\r
2721 FreeRpcEnumLocalBridge(t);
\r
2722 Zero(t, sizeof(RPC_ENUM_LOCALBRIDGE));
\r
2724 c = a->Server->Cedar;
\r
2726 LockList(c->LocalBridgeList);
\r
2728 t->NumItem = LIST_NUM(c->LocalBridgeList);
\r
2729 t->Items = ZeroMalloc(sizeof(RPC_LOCALBRIDGE) * t->NumItem);
\r
2731 for (i = 0;i < t->NumItem;i++)
\r
2733 RPC_LOCALBRIDGE *e = &t->Items[i];
\r
2734 LOCALBRIDGE *br = LIST_DATA(c->LocalBridgeList, i);
\r
2736 if (br->Bridge == false)
\r
2738 e->Online = e->Active = false;
\r
2743 if (br->Bridge->Active)
\r
2749 e->Active = false;
\r
2752 StrCpy(e->DeviceName, sizeof(e->DeviceName), br->DeviceName);
\r
2753 StrCpy(e->HubName, sizeof(e->HubName), br->HubName);
\r
2755 e->TapMode = br->TapMode;
\r
2758 UnlockList(c->LocalBridgeList);
\r
2760 return ERR_NO_ERROR;
\r
2764 UINT StSetSysLog(ADMIN *a, SYSLOG_SETTING *t)
\r
2766 return ERR_NOT_SUPPORTED;
\r
2770 UINT StGetSysLog(ADMIN *a, SYSLOG_SETTING *t)
\r
2772 return ERR_NOT_SUPPORTED;
\r
2776 UINT StSetKeep(ADMIN *a, RPC_KEEP *t)
\r
2778 SERVER *s = a->Server;
\r
2780 if (t->UseKeepConnect)
\r
2782 if (IsEmptyStr(t->KeepConnectHost) ||
\r
2783 t->KeepConnectPort == 0 ||
\r
2784 t->KeepConnectPort >= 65536)
\r
2786 return ERR_INVALID_PARAMETER;
\r
2790 SERVER_ADMIN_ONLY;
\r
2792 Lock(s->Keep->lock);
\r
2794 KEEP *keep = s->Keep;
\r
2795 keep->Enable = t->UseKeepConnect;
\r
2796 keep->Server = true;
\r
2797 StrCpy(keep->ServerName, sizeof(keep->ServerName), t->KeepConnectHost);
\r
2798 keep->ServerPort = t->KeepConnectPort;
\r
2799 keep->UdpMode = t->KeepConnectProtocol;
\r
2800 keep->Interval = t->KeepConnectInterval * 1000;
\r
2801 if (keep->Interval < 5000)
\r
2803 keep->Interval = 5000;
\r
2805 else if (keep->Interval > 600000)
\r
2807 keep->Interval = 600000;
\r
2810 Unlock(s->Keep->lock);
\r
2812 ALog(a, NULL, "LA_SET_KEEP");
\r
2814 IncrementServerConfigRevision(s);
\r
2816 return ERR_NO_ERROR;
\r
2820 UINT StGetKeep(ADMIN *a, RPC_KEEP *t)
\r
2822 SERVER *s = a->Server;
\r
2824 Zero(t, sizeof(RPC_KEEP));
\r
2826 Lock(s->Keep->lock);
\r
2828 KEEP *k = s->Keep;
\r
2829 t->UseKeepConnect = k->Enable;
\r
2830 StrCpy(t->KeepConnectHost, sizeof(t->KeepConnectHost), k->ServerName);
\r
2831 t->KeepConnectPort = k->ServerPort;
\r
2832 t->KeepConnectProtocol = k->UdpMode;
\r
2833 t->KeepConnectInterval = k->Interval / 1000;
\r
2835 Unlock(s->Keep->lock);
\r
2837 return ERR_NO_ERROR;
\r
2841 UINT StDeleteIpTable(ADMIN *a, RPC_DELETE_TABLE *t)
\r
2843 SERVER *s = a->Server;
\r
2844 CEDAR *c = s->Cedar;
\r
2846 UINT ret = ERR_NO_ERROR;
\r
2852 h = GetHub(c, t->HubName);
\r
2858 return ERR_HUB_NOT_FOUND;
\r
2861 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_delete_iptable") != 0)
\r
2864 return ERR_NOT_ENOUGH_RIGHT;
\r
2867 LockList(h->IpTable);
\r
2869 if (IsInListKey(h->IpTable, t->Key))
\r
2871 IP_TABLE_ENTRY *e = ListKeyToPointer(h->IpTable, t->Key);
\r
2873 Delete(h->IpTable, e);
\r
2877 ret = ERR_OBJECT_NOT_FOUND;
\r
2880 UnlockList(h->IpTable);
\r
2882 if (ret == ERR_OBJECT_NOT_FOUND)
\r
2884 if (s->ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
2887 LockList(s->FarmMemberList);
\r
2889 for (i = 0;i < LIST_NUM(s->FarmMemberList);i++)
\r
2891 FARM_MEMBER *f = LIST_DATA(s->FarmMemberList, i);
\r
2892 if (f->Me == false)
\r
2894 SiCallDeleteIpTable(s, f, t->HubName, t->Key);
\r
2895 ret = ERR_NO_ERROR;
\r
2899 UnlockList(s->FarmMemberList);
\r
2908 // ローカル IP テーブルの列挙
\r
2909 UINT SiEnumIpTable(SERVER *s, char *hubname, RPC_ENUM_IP_TABLE *t)
\r
2915 if (s == NULL || hubname == NULL || t == NULL)
\r
2917 return ERR_INTERNAL_ERROR;
\r
2924 h = GetHub(c, hubname);
\r
2930 return ERR_HUB_NOT_FOUND;
\r
2933 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
2935 LockList(h->IpTable);
\r
2937 t->NumIpTable = LIST_NUM(h->IpTable);
\r
2938 t->IpTables = ZeroMalloc(sizeof(RPC_ENUM_IP_TABLE_ITEM) * t->NumIpTable);
\r
2940 for (i = 0;i < t->NumIpTable;i++)
\r
2942 RPC_ENUM_IP_TABLE_ITEM *e = &t->IpTables[i];
\r
2943 IP_TABLE_ENTRY *table = LIST_DATA(h->IpTable, i);
\r
2945 e->Key = POINTER_TO_KEY(table);
\r
2946 StrCpy(e->SessionName, sizeof(e->SessionName), table->Session->Name);
\r
2947 e->Ip = IPToUINT(&table->Ip);
\r
2948 Copy(&e->IpV6, &table->Ip, sizeof(IP));
\r
2949 e->DhcpAllocated = table->DhcpAllocated;
\r
2950 e->CreatedTime = TickToTime(table->CreatedTime);
\r
2951 e->UpdatedTime = TickToTime(table->UpdatedTime);
\r
2953 GetMachineName(e->RemoteHostname, sizeof(e->RemoteHostname));
\r
2956 UnlockList(h->IpTable);
\r
2960 return ERR_NO_ERROR;
\r
2964 UINT StEnumIpTable(ADMIN *a, RPC_ENUM_IP_TABLE *t)
\r
2966 SERVER *s = a->Server;
\r
2967 CEDAR *c = s->Cedar;
\r
2968 UINT ret = ERR_NO_ERROR;
\r
2969 char hubname[MAX_HUBNAME_LEN + 1];
\r
2975 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
2976 FreeRpcEnumIpTable(t);
\r
2977 Zero(t, sizeof(RPC_ENUM_IP_TABLE));
\r
2978 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
2980 ret = SiEnumIpTable(s, hubname, t);
\r
2981 if (ret != ERR_NO_ERROR)
\r
2986 if (s->ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
2989 LockList(s->FarmMemberList);
\r
2991 for (i = 0;i < LIST_NUM(s->FarmMemberList);i++)
\r
2993 FARM_MEMBER *f = LIST_DATA(s->FarmMemberList, i);
\r
2994 if (f->Me == false)
\r
2996 RPC_ENUM_IP_TABLE tmp;
\r
2998 Zero(&tmp, sizeof(tmp));
\r
3000 SiCallEnumIpTable(s, f, hubname, &tmp);
\r
3002 AdjoinRpcEnumIpTable(t, &tmp);
\r
3003 FreeRpcEnumIpTable(&tmp);
\r
3007 UnlockList(s->FarmMemberList);
\r
3014 UINT StDeleteMacTable(ADMIN *a, RPC_DELETE_TABLE *t)
\r
3016 SERVER *s = a->Server;
\r
3017 CEDAR *c = s->Cedar;
\r
3019 UINT ret = ERR_NO_ERROR;
\r
3025 h = GetHub(c, t->HubName);
\r
3031 return ERR_HUB_NOT_FOUND;
\r
3034 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_delete_mactable") != 0)
\r
3037 return ERR_NOT_ENOUGH_RIGHT;
\r
3040 LockList(h->MacTable);
\r
3042 if (IsInListKey(h->MacTable, t->Key))
\r
3044 MAC_TABLE_ENTRY *e = ListKeyToPointer(h->MacTable, t->Key);
\r
3046 Delete(h->MacTable, e);
\r
3050 ret = ERR_OBJECT_NOT_FOUND;
\r
3053 UnlockList(h->MacTable);
\r
3055 if (ret == ERR_OBJECT_NOT_FOUND)
\r
3057 if (s->ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
3060 LockList(s->FarmMemberList);
\r
3062 for (i = 0;i < LIST_NUM(s->FarmMemberList);i++)
\r
3064 FARM_MEMBER *f = LIST_DATA(s->FarmMemberList, i);
\r
3065 if (f->Me == false)
\r
3067 SiCallDeleteMacTable(s, f, t->HubName, t->Key);
\r
3068 ret = ERR_NO_ERROR;
\r
3072 UnlockList(s->FarmMemberList);
\r
3081 // ローカル MAC テーブルの列挙
\r
3082 UINT SiEnumMacTable(SERVER *s, char *hubname, RPC_ENUM_MAC_TABLE *t)
\r
3088 if (s == NULL || hubname == NULL || t == NULL)
\r
3090 return ERR_INTERNAL_ERROR;
\r
3097 h = GetHub(c, hubname);
\r
3103 return ERR_HUB_NOT_FOUND;
\r
3106 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
3108 LockList(h->MacTable);
\r
3110 t->NumMacTable = LIST_NUM(h->MacTable);
\r
3111 t->MacTables = ZeroMalloc(sizeof(RPC_ENUM_MAC_TABLE_ITEM) * t->NumMacTable);
\r
3113 for (i = 0;i < t->NumMacTable;i++)
\r
3115 RPC_ENUM_MAC_TABLE_ITEM *e = &t->MacTables[i];
\r
3116 MAC_TABLE_ENTRY *mac = LIST_DATA(h->MacTable, i);
\r
3118 e->Key = POINTER_TO_KEY(mac);
\r
3119 StrCpy(e->SessionName, sizeof(e->SessionName), mac->Session->Name);
\r
3120 Copy(e->MacAddress, mac->MacAddress, sizeof(e->MacAddress));
\r
3121 e->CreatedTime = TickToTime(mac->CreatedTime);
\r
3122 e->UpdatedTime = TickToTime(mac->UpdatedTime);
\r
3123 e->VlanId = mac->VlanId;
\r
3125 GetMachineName(e->RemoteHostname, sizeof(e->RemoteHostname));
\r
3128 UnlockList(h->MacTable);
\r
3132 return ERR_NO_ERROR;
\r
3136 UINT StEnumMacTable(ADMIN *a, RPC_ENUM_MAC_TABLE *t)
\r
3138 SERVER *s = a->Server;
\r
3139 CEDAR *c = s->Cedar;
\r
3141 UINT ret = ERR_NO_ERROR;
\r
3142 char hubname[MAX_HUBNAME_LEN + 1];
\r
3147 // ローカルの MAC テーブルを列挙する
\r
3148 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
3149 FreeRpcEnumMacTable(t);
\r
3150 Zero(t, sizeof(RPC_ENUM_MAC_TABLE));
\r
3152 ret = SiEnumMacTable(s, hubname, t);
\r
3153 if (ret != ERR_NO_ERROR)
\r
3158 if (s->ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
3160 // リモートの MAC テーブルを列挙する
\r
3161 LockList(s->FarmMemberList);
\r
3163 for (i = 0;i < LIST_NUM(s->FarmMemberList);i++)
\r
3165 FARM_MEMBER *f = LIST_DATA(s->FarmMemberList, i);
\r
3166 if (f->Me == false)
\r
3168 RPC_ENUM_MAC_TABLE tmp;
\r
3170 Zero(&tmp, sizeof(tmp));
\r
3172 SiCallEnumMacTable(s, f, hubname, &tmp);
\r
3174 AdjoinRpcEnumMacTable(t, &tmp);
\r
3175 FreeRpcEnumMacTable(&tmp);
\r
3179 UnlockList(s->FarmMemberList);
\r
3186 UINT StDeleteSession(ADMIN *a, RPC_DELETE_SESSION *t)
\r
3188 SERVER *s = a->Server;
\r
3189 CEDAR *c = s->Cedar;
\r
3191 UINT ret = ERR_NO_ERROR;
\r
3192 char hubname[MAX_HUBNAME_LEN + 1];
\r
3193 char name[MAX_SESSION_NAME_LEN + 1];
\r
3196 if (IsEmptyStr(t->Name))
\r
3198 return ERR_INVALID_PARAMETER;
\r
3201 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
3202 StrCpy(name, sizeof(name), t->Name);
\r
3208 h = GetHub(c, t->HubName);
\r
3214 return ERR_HUB_NOT_FOUND;
\r
3217 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_disconnect_session") != 0)
\r
3220 return ERR_NOT_ENOUGH_RIGHT;
\r
3223 sess = GetSessionByName(h, name);
\r
3227 if (s->ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
3231 LockList(s->FarmMemberList);
\r
3233 for (i = 0;i < LIST_NUM(s->FarmMemberList);i++)
\r
3235 FARM_MEMBER *f = LIST_DATA(s->FarmMemberList, i);
\r
3236 if (f->Me == false)
\r
3239 SiCallDeleteSession(s, f, t->HubName, t->Name);
\r
3243 UnlockList(s->FarmMemberList);
\r
3247 ret = ERR_OBJECT_NOT_FOUND;
\r
3252 if (sess->LinkModeServer)
\r
3254 ret = ERR_LINK_CANT_DISCONNECT;
\r
3256 else if (sess->SecureNATMode)
\r
3258 ret = ERR_SNAT_CANT_DISCONNECT;
\r
3260 else if (sess->BridgeMode)
\r
3262 ret = ERR_BRIDGE_CANT_DISCONNECT;
\r
3264 else if (sess->L3SwitchMode)
\r
3266 ret = ERR_LAYER3_CANT_DISCONNECT;
\r
3270 StopSession(sess);
\r
3272 ReleaseSession(sess);
\r
3275 if (ret != ERR_NO_ERROR)
\r
3277 ALog(a, h, "LA_DELETE_SESSION", t->Name);
\r
3286 UINT StGetSessionStatus(ADMIN *a, RPC_SESSION_STATUS *t)
\r
3288 SERVER *s = a->Server;
\r
3289 CEDAR *c = s->Cedar;
\r
3291 UINT ret = ERR_NO_ERROR;
\r
3292 char hubname[MAX_HUBNAME_LEN + 1];
\r
3293 char name[MAX_SESSION_NAME_LEN + 1];
\r
3296 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
3297 StrCpy(name, sizeof(name), t->Name);
\r
3299 if (IsEmptyStr(t->Name))
\r
3301 return ERR_INVALID_PARAMETER;
\r
3308 h = GetHub(c, t->HubName);
\r
3314 return ERR_HUB_NOT_FOUND;
\r
3317 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_query_session") != 0)
\r
3320 return ERR_NOT_ENOUGH_RIGHT;
\r
3323 FreeRpcSessionStatus(t);
\r
3324 Zero(t, sizeof(RPC_SESSION_STATUS));
\r
3325 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
3326 StrCpy(t->Name, sizeof(t->Name), name);
\r
3328 sess = GetSessionByName(h, t->Name);
\r
3332 if (s->ServerType != SERVER_TYPE_FARM_CONTROLLER)
\r
3335 ret = ERR_OBJECT_NOT_FOUND;
\r
3340 // 自分以外のメンバのセッションも検索してみる
\r
3341 LockList(s->FarmMemberList);
\r
3343 for (i = 0;i < LIST_NUM(s->FarmMemberList);i++)
\r
3345 FARM_MEMBER *f = LIST_DATA(s->FarmMemberList, i);
\r
3346 if (f->Me == false)
\r
3348 RPC_SESSION_STATUS tmp;
\r
3349 Zero(&tmp, sizeof(tmp));
\r
3350 StrCpy(tmp.HubName, sizeof(tmp.HubName), t->HubName);
\r
3351 StrCpy(tmp.Name, sizeof(tmp.Name), t->Name);
\r
3353 if (SiCallGetSessionStatus(s, f, &tmp))
\r
3355 if (StrLen(tmp.HubName) != 0)
\r
3357 // セッション情報の取得に成功した
\r
3358 Copy(t, &tmp, sizeof(RPC_SESSION_STATUS));
\r
3363 FreeRpcSessionStatus(&tmp);
\r
3369 if (i == LIST_NUM(s->FarmMemberList))
\r
3372 ret = ERR_OBJECT_NOT_FOUND;
\r
3375 UnlockList(s->FarmMemberList);
\r
3380 SESSION *s = sess;
\r
3384 StrCpy(t->Username, sizeof(t->Username), s->Username);
\r
3385 StrCpy(t->RealUsername, sizeof(t->RealUsername), s->UserNameReal);
\r
3386 StrCpy(t->GroupName, sizeof(t->GroupName), s->GroupName);
\r
3387 Copy(&t->NodeInfo, &s->NodeInfo, sizeof(NODE_INFO));
\r
3389 if (s->Connection != NULL)
\r
3391 t->ClientIp = IPToUINT(&s->Connection->ClientIp);
\r
3392 if (IsIP6(&s->Connection->ClientIp))
\r
3394 Copy(&t->ClientIp6, &s->Connection->ClientIp.ipv6_addr, sizeof(t->ClientIp6));
\r
3397 StrCpy(t->ClientHostName, sizeof(t->ClientHostName), s->Connection->ClientHostname);
\r
3402 CiGetSessionStatus(&t->Status, s);
\r
3404 ReleaseSession(s);
\r
3413 void SiEnumSessionMain(SERVER *s, RPC_ENUM_SESSION *t)
\r
3415 char hubname[MAX_HUBNAME_LEN + 1];
\r
3416 UINT ret = ERR_NO_ERROR;
\r
3420 if (s == NULL || t == NULL)
\r
3425 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
3427 FreeRpcEnumSession(t);
\r
3428 Zero(t, sizeof(RPC_ENUM_SESSION));
\r
3429 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
3433 SiEnumLocalSession(s, hubname, t);
\r
3435 if (s->ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
3438 LockList(s->FarmMemberList);
\r
3440 for (i = 0;i < LIST_NUM(s->FarmMemberList);i++)
\r
3442 FARM_MEMBER *f = LIST_DATA(s->FarmMemberList, i);
\r
3443 if (f->Me == false)
\r
3445 RPC_ENUM_SESSION tmp;
\r
3447 Zero(&tmp, sizeof(tmp));
\r
3449 SiCallEnumSession(s, f, hubname, &tmp);
\r
3451 AdjoinRpcEnumSession(t, &tmp);
\r
3452 FreeRpcEnumSession(&tmp);
\r
3456 UnlockList(s->FarmMemberList);
\r
3461 UINT StEnumSession(ADMIN *a, RPC_ENUM_SESSION *t)
\r
3463 SERVER *s = a->Server;
\r
3464 CEDAR *c = s->Cedar;
\r
3466 UINT ret = ERR_NO_ERROR;
\r
3472 h = GetHub(c, t->HubName);
\r
3478 return ERR_HUB_NOT_FOUND;
\r
3481 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_enum_session") != 0)
\r
3484 return ERR_NOT_ENOUGH_RIGHT;
\r
3487 SiEnumSessionMain(s, t);
\r
3495 UINT StEnumGroup(ADMIN *a, RPC_ENUM_GROUP *t)
\r
3497 SERVER *s = a->Server;
\r
3498 CEDAR *c = s->Cedar;
\r
3500 UINT ret = ERR_NO_ERROR;
\r
3501 char hubname[MAX_HUBNAME_LEN + 1];
\r
3503 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
3507 NO_SUPPORT_FOR_BRIDGE;
\r
3508 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
3510 return ERR_NOT_SUPPORTED;
\r
3516 h = GetHub(c, t->HubName);
\r
3522 return ERR_HUB_NOT_FOUND;
\r
3529 FreeRpcEnumGroup(t);
\r
3530 Zero(t, sizeof(RPC_ENUM_GROUP));
\r
3531 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
3533 t->NumGroup = LIST_NUM(h->HubDb->GroupList);
\r
3534 t->Groups = ZeroMalloc(sizeof(RPC_ENUM_GROUP_ITEM) * t->NumGroup);
\r
3536 for (i = 0;i < t->NumGroup;i++)
\r
3538 RPC_ENUM_GROUP_ITEM *e = &t->Groups[i];
\r
3539 USERGROUP *g = LIST_DATA(h->HubDb->GroupList, i);
\r
3543 StrCpy(e->Name, sizeof(e->Name), g->Name);
\r
3544 UniStrCpy(e->Realname, sizeof(e->Realname), g->RealName);
\r
3545 UniStrCpy(e->Note, sizeof(e->Note), g->Note);
\r
3546 if (g->Policy != NULL)
\r
3548 if (g->Policy->Access == false)
\r
3550 e->DenyAccess = true;
\r
3559 LockList(h->HubDb->UserList);
\r
3561 for (j = 0;j < LIST_NUM(h->HubDb->UserList);j++)
\r
3563 USER *u = LIST_DATA(h->HubDb->UserList, j);
\r
3567 if (u->Group == g)
\r
3575 UnlockList(h->HubDb->UserList);
\r
3582 return ERR_NO_ERROR;
\r
3586 UINT StDeleteGroup(ADMIN *a, RPC_DELETE_USER *t)
\r
3588 SERVER *s = a->Server;
\r
3589 CEDAR *c = s->Cedar;
\r
3591 UINT ret = ERR_NO_ERROR;
\r
3593 if (IsEmptyStr(t->Name) || IsSafeStr(t->Name) == false)
\r
3595 return ERR_INVALID_PARAMETER;
\r
3600 NO_SUPPORT_FOR_BRIDGE;
\r
3601 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
3603 return ERR_NOT_SUPPORTED;
\r
3608 h = GetHub(c, t->HubName);
\r
3614 return ERR_HUB_NOT_FOUND;
\r
3617 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_groups") != 0)
\r
3620 return ERR_NOT_ENOUGH_RIGHT;
\r
3625 if (AcDeleteGroup(h, t->Name) == false)
\r
3627 ret = ERR_OBJECT_NOT_FOUND;
\r
3632 if (ret == ERR_NO_ERROR)
\r
3634 ALog(a, h, "LA_DELETE_GROUP", t->Name);
\r
3639 IncrementServerConfigRevision(s);
\r
3645 UINT StGetGroup(ADMIN *a, RPC_SET_GROUP *t)
\r
3647 SERVER *s = a->Server;
\r
3648 CEDAR *c = s->Cedar;
\r
3650 UINT ret = ERR_NO_ERROR;
\r
3651 char hubname[MAX_HUBNAME_LEN + 1];
\r
3653 if (IsEmptyStr(t->Name) || IsSafeStr(t->Name) == false)
\r
3655 return ERR_INVALID_PARAMETER;
\r
3659 NO_SUPPORT_FOR_BRIDGE;
\r
3660 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
3662 return ERR_NOT_SUPPORTED;
\r
3665 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
3669 h = GetHub(c, t->HubName);
\r
3675 return ERR_HUB_NOT_FOUND;
\r
3680 USERGROUP *g = AcGetGroup(h, t->Name);
\r
3684 ret = ERR_OBJECT_NOT_FOUND;
\r
3688 FreeRpcSetGroup(t);
\r
3689 Zero(t, sizeof(RPC_SET_GROUP));
\r
3691 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
3695 StrCpy(t->Name, sizeof(t->Name), g->Name);
\r
3696 UniStrCpy(t->Realname, sizeof(t->Realname), g->RealName);
\r
3697 UniStrCpy(t->Note, sizeof(t->Note), g->Note);
\r
3698 Copy(&t->Traffic, g->Traffic, sizeof(TRAFFIC));
\r
3702 t->Policy = GetGroupPolicy(g);
\r
3715 UINT StSetGroup(ADMIN *a, RPC_SET_GROUP *t)
\r
3717 SERVER *s = a->Server;
\r
3718 CEDAR *c = s->Cedar;
\r
3720 UINT ret = ERR_NO_ERROR;
\r
3722 if (IsEmptyStr(t->Name) || IsSafeStr(t->Name) == false)
\r
3724 return ERR_INVALID_PARAMETER;
\r
3728 NO_SUPPORT_FOR_BRIDGE;
\r
3729 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
3731 return ERR_NOT_SUPPORTED;
\r
3736 h = GetHub(c, t->HubName);
\r
3742 return ERR_HUB_NOT_FOUND;
\r
3745 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_groups") != 0)
\r
3748 return ERR_NOT_ENOUGH_RIGHT;
\r
3753 USERGROUP *g = AcGetGroup(h, t->Name);
\r
3756 ret = ERR_OBJECT_NOT_FOUND;
\r
3762 Free(g->RealName);
\r
3764 g->RealName = UniCopyStr(t->Realname);
\r
3765 g->Note = UniCopyStr(t->Note);
\r
3769 SetGroupPolicy(g, t->Policy);
\r
3773 ALog(a, h, "LA_SET_GROUP", t->Name);
\r
3780 IncrementServerConfigRevision(s);
\r
3786 UINT StCreateGroup(ADMIN *a, RPC_SET_GROUP *t)
\r
3788 SERVER *s = a->Server;
\r
3789 CEDAR *c = s->Cedar;
\r
3791 UINT ret = ERR_NO_ERROR;
\r
3793 if (IsEmptyStr(t->Name) || IsSafeStr(t->Name) == false)
\r
3795 return ERR_INVALID_PARAMETER;
\r
3798 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
3800 return ERR_NOT_FARM_CONTROLLER;
\r
3805 NO_SUPPORT_FOR_BRIDGE;
\r
3806 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
3808 return ERR_NOT_SUPPORTED;
\r
3813 h = GetHub(c, t->HubName);
\r
3819 return ERR_HUB_NOT_FOUND;
\r
3822 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_groups") != 0)
\r
3825 return ERR_NOT_ENOUGH_RIGHT;
\r
3830 if (AcIsGroup(h, t->Name))
\r
3832 ret = ERR_GROUP_ALREADY_EXISTS;
\r
3836 USERGROUP *g = NewGroup(t->Name, t->Realname, t->Note);
\r
3837 SetGroupPolicy(g, t->Policy);
\r
3839 if ((LIST_NUM(h->HubDb->GroupList) >= GetServerCapsInt(a->Server, "i_max_users_per_hub")) ||
\r
3840 ((GetHubAdminOption(h, "max_groups") != 0) && (LIST_NUM(h->HubDb->GroupList) >= GetHubAdminOption(h, "max_groups"))))
\r
3842 ret = ERR_TOO_MANY_GROUP;
\r
3851 ALog(a, h, "LA_CREATE_GROUP", t->Name);
\r
3858 IncrementServerConfigRevision(s);
\r
3864 UINT StEnumUser(ADMIN *a, RPC_ENUM_USER *t)
\r
3866 SERVER *s = a->Server;
\r
3867 CEDAR *c = s->Cedar;
\r
3869 UINT ret = ERR_NO_ERROR;
\r
3870 char hubname[MAX_HUBNAME_LEN + 1];
\r
3874 NO_SUPPORT_FOR_BRIDGE;
\r
3875 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
3877 return ERR_NOT_SUPPORTED;
\r
3882 h = GetHub(c, t->HubName);
\r
3888 return ERR_HUB_NOT_FOUND;
\r
3891 FreeRpcEnumUser(t);
\r
3893 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
3895 Zero(t, sizeof(RPC_ENUM_USER));
\r
3896 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
3898 LockList(h->HubDb->UserList);
\r
3900 num = LIST_NUM(h->HubDb->UserList);
\r
3903 t->Users = ZeroMalloc(sizeof(RPC_ENUM_USER_ITEM) * num);
\r
3905 for (i = 0;i < num;i++)
\r
3907 USER *u = LIST_DATA(h->HubDb->UserList, i);
\r
3911 RPC_ENUM_USER_ITEM *e = &t->Users[i];
\r
3913 StrCpy(e->Name, sizeof(e->Name), u->Name);
\r
3914 StrCpy(e->GroupName, sizeof(e->GroupName), u->GroupName);
\r
3915 UniStrCpy(e->Realname, sizeof(e->Realname), u->RealName);
\r
3916 UniStrCpy(e->Note, sizeof(e->Note), u->Note);
\r
3917 e->AuthType = u->AuthType;
\r
3918 e->LastLoginTime = u->LastLoginTime;
\r
3919 e->NumLogin = u->NumLogin;
\r
3921 if (u->Policy != NULL)
\r
3923 e->DenyAccess = u->Policy->Access ? false : true;
\r
3929 UnlockList(h->HubDb->UserList);
\r
3933 IncrementServerConfigRevision(s);
\r
3935 return ERR_NO_ERROR;
\r
3939 UINT StDeleteUser(ADMIN *a, RPC_DELETE_USER *t)
\r
3941 SERVER *s = a->Server;
\r
3942 CEDAR *c = s->Cedar;
\r
3944 UINT ret = ERR_NO_ERROR;
\r
3946 if (IsEmptyStr(t->Name) || IsUserName(t->Name) == false)
\r
3948 return ERR_INVALID_PARAMETER;
\r
3952 NO_SUPPORT_FOR_BRIDGE;
\r
3953 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
3955 return ERR_NOT_SUPPORTED;
\r
3960 h = GetHub(c, t->HubName);
\r
3966 return ERR_HUB_NOT_FOUND;
\r
3969 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_users") != 0)
\r
3972 return ERR_NOT_ENOUGH_RIGHT;
\r
3975 ALog(a, h, "LA_DELETE_USER", t->Name);
\r
3979 if (AcDeleteUser(h, t->Name) == false)
\r
3981 ret = ERR_OBJECT_NOT_FOUND;
\r
3988 IncrementServerConfigRevision(s);
\r
3994 UINT StGetUser(ADMIN *a, RPC_SET_USER *t)
\r
3996 SERVER *s = a->Server;
\r
3997 CEDAR *c = s->Cedar;
\r
3999 UINT ret = ERR_NO_ERROR;
\r
4001 USERGROUP *g = NULL;
\r
4002 char name[MAX_USERNAME_LEN + 1];
\r
4003 char hubname[MAX_HUBNAME_LEN + 1];
\r
4004 StrCpy(name, sizeof(name), t->Name);
\r
4005 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
4007 if (IsEmptyStr(t->Name) || IsUserName(t->Name) == false)
\r
4009 return ERR_INVALID_PARAMETER;
\r
4013 NO_SUPPORT_FOR_BRIDGE;
\r
4014 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
4016 return ERR_NOT_SUPPORTED;
\r
4019 FreeRpcSetUser(t);
\r
4020 Zero(t, sizeof(RPC_SET_USER));
\r
4021 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
4022 StrCpy(t->Name, sizeof(t->Name), name);
\r
4026 h = GetHub(c, hubname);
\r
4032 return ERR_HUB_NOT_FOUND;
\r
4037 u = AcGetUser(h, name);
\r
4040 ret = ERR_OBJECT_NOT_FOUND;
\r
4046 StrCpy(t->GroupName, sizeof(t->GroupName), u->GroupName);
\r
4047 UniStrCpy(t->Realname, sizeof(t->Realname), u->RealName);
\r
4048 UniStrCpy(t->Note, sizeof(t->Note), u->Note);
\r
4049 t->CreatedTime = u->CreatedTime;
\r
4050 t->UpdatedTime = u->UpdatedTime;
\r
4051 t->ExpireTime = u->ExpireTime;
\r
4053 t->AuthType = u->AuthType;
\r
4054 t->AuthData = CopyAuthData(u->AuthData, t->AuthType);
\r
4055 t->NumLogin = u->NumLogin;
\r
4056 Copy(&t->Traffic, u->Traffic, sizeof(TRAFFIC));
\r
4057 if (u->Policy != NULL)
\r
4059 t->Policy = ClonePolicy(u->Policy);
\r
4075 UINT StSetUser(ADMIN *a, RPC_SET_USER *t)
\r
4077 SERVER *s = a->Server;
\r
4078 CEDAR *c = s->Cedar;
\r
4080 UINT ret = ERR_NO_ERROR;
\r
4082 USERGROUP *g = NULL;
\r
4084 if (IsEmptyStr(t->Name) || IsUserName(t->Name) == false)
\r
4086 return ERR_INVALID_PARAMETER;
\r
4089 NO_SUPPORT_FOR_BRIDGE;
\r
4090 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
4092 return ERR_NOT_SUPPORTED;
\r
4097 if (StrCmpi(t->Name, "*") == 0)
\r
4099 if (t->AuthType != AUTHTYPE_RADIUS && t->AuthType != AUTHTYPE_NT)
\r
4101 return ERR_INVALID_PARAMETER;
\r
4105 if (t->AuthType == AUTHTYPE_RADIUS ||
\r
4106 t->AuthType == AUTHTYPE_ROOTCERT ||
\r
4107 t->AuthType == AUTHTYPE_USERCERT ||
\r
4108 t->AuthType == AUTHTYPE_NT)
\r
4110 return ERR_UTVPN_NOT_SUPPORT_THIS_AUTH;
\r
4115 h = GetHub(c, t->HubName);
\r
4121 return ERR_HUB_NOT_FOUND;
\r
4124 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_users") != 0)
\r
4127 return ERR_NOT_ENOUGH_RIGHT;
\r
4132 u = AcGetUser(h, t->Name);
\r
4135 ret = ERR_OBJECT_NOT_FOUND;
\r
4141 if (StrLen(t->GroupName) != 0)
\r
4143 g = AcGetGroup(h, t->GroupName);
\r
4147 JoinUserToGroup(u, g);
\r
4152 ret = ERR_GROUP_NOT_FOUND;
\r
4157 JoinUserToGroup(u, NULL);
\r
4160 if (ret != ERR_GROUP_NOT_FOUND)
\r
4162 Free(u->RealName);
\r
4164 u->RealName = UniCopyStr(t->Realname);
\r
4165 u->Note = UniCopyStr(t->Note);
\r
4166 SetUserAuthData(u, t->AuthType, CopyAuthData(t->AuthData, t->AuthType));
\r
4167 u->ExpireTime = t->ExpireTime;
\r
4168 u->UpdatedTime = SystemTime64();
\r
4170 SetUserPolicy(u, t->Policy);
\r
4175 IncrementServerConfigRevision(s);
\r
4182 if (ret == ERR_NO_ERROR)
\r
4184 ALog(a, h, "LA_SET_USER", t->Name);
\r
4193 UINT StCreateUser(ADMIN *a, RPC_SET_USER *t)
\r
4195 SERVER *s = a->Server;
\r
4196 CEDAR *c = s->Cedar;
\r
4198 UINT ret = ERR_NO_ERROR;
\r
4200 USERGROUP *g = NULL;
\r
4202 if (IsEmptyStr(t->Name) || IsUserName(t->Name) == false)
\r
4204 return ERR_INVALID_PARAMETER;
\r
4207 NO_SUPPORT_FOR_BRIDGE;
\r
4208 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
4210 return ERR_NOT_SUPPORTED;
\r
4215 if (t->AuthType == AUTHTYPE_RADIUS ||
\r
4216 t->AuthType == AUTHTYPE_ROOTCERT ||
\r
4217 t->AuthType == AUTHTYPE_USERCERT ||
\r
4218 t->AuthType == AUTHTYPE_NT)
\r
4220 return ERR_UTVPN_NOT_SUPPORT_THIS_AUTH;
\r
4223 if (IsUserName(t->Name) == false)
\r
4225 return ERR_INVALID_PARAMETER;
\r
4228 if (StrCmpi(t->Name, "*") == 0)
\r
4230 if (t->AuthType != AUTHTYPE_RADIUS && t->AuthType != AUTHTYPE_NT)
\r
4232 return ERR_INVALID_PARAMETER;
\r
4238 h = GetHub(c, t->HubName);
\r
4244 return ERR_HUB_NOT_FOUND;
\r
4247 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_users") != 0)
\r
4250 return ERR_NOT_ENOUGH_RIGHT;
\r
4253 u = NewUser(t->Name, t->Realname, t->Note, t->AuthType, CopyAuthData(t->AuthData, t->AuthType));
\r
4257 return ERR_INTERNAL_ERROR;
\r
4260 u->ExpireTime = t->ExpireTime;
\r
4262 SetUserPolicy(u, t->Policy);
\r
4266 if ((LIST_NUM(h->HubDb->UserList) >= GetServerCapsInt(a->Server, "i_max_users_per_hub")) ||
\r
4267 ((GetHubAdminOption(h, "max_users") != 0) && (LIST_NUM(h->HubDb->UserList) >= GetHubAdminOption(h, "max_users"))))
\r
4269 ret = ERR_TOO_MANY_USER;
\r
4271 else if (SiTooManyUserObjectsInServer(s, false))
\r
4273 ret = ERR_TOO_MANY_USERS_CREATED;
\r
4274 ALog(a, h, "ERR_128");
\r
4276 else if (AcIsUser(h, t->Name))
\r
4278 ret = ERR_USER_ALREADY_EXISTS;
\r
4282 if (StrLen(t->GroupName) != 0)
\r
4284 g = AcGetGroup(h, t->GroupName);
\r
4287 ret = ERR_GROUP_NOT_FOUND;
\r
4291 if (ret != ERR_GROUP_NOT_FOUND)
\r
4295 JoinUserToGroup(u, g);
\r
4300 ALog(a, h, "LA_CREATE_USER", t->Name);
\r
4302 IncrementServerConfigRevision(s);
\r
4316 UINT StEnumAccess(ADMIN *a, RPC_ENUM_ACCESS_LIST *t)
\r
4318 SERVER *s = a->Server;
\r
4319 CEDAR *c = s->Cedar;
\r
4322 char hubname[MAX_HUBNAME_LEN + 1];
\r
4325 NO_SUPPORT_FOR_BRIDGE;
\r
4326 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
4328 return ERR_NOT_SUPPORTED;
\r
4333 h = GetHub(c, t->HubName);
\r
4339 return ERR_HUB_NOT_FOUND;
\r
4342 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
4343 FreeRpcEnumAccessList(t);
\r
4344 Zero(t, sizeof(RPC_ENUM_ACCESS_LIST));
\r
4345 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
4347 LockList(h->AccessList);
\r
4349 t->NumAccess = LIST_NUM(h->AccessList);
\r
4350 t->Accesses = ZeroMalloc(sizeof(ACCESS) * t->NumAccess);
\r
4352 for (i = 0;i < LIST_NUM(h->AccessList);i++)
\r
4354 ACCESS *a = &t->Accesses[i];
\r
4355 Copy(a, LIST_DATA(h->AccessList, i), sizeof(ACCESS));
\r
4358 UnlockList(h->AccessList);
\r
4362 return ERR_NO_ERROR;
\r
4366 UINT StDeleteAccess(ADMIN *a, RPC_DELETE_ACCESS *t)
\r
4368 SERVER *s = a->Server;
\r
4369 CEDAR *c = s->Cedar;
\r
4374 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
4376 return ERR_NOT_FARM_CONTROLLER;
\r
4380 NO_SUPPORT_FOR_BRIDGE;
\r
4384 h = GetHub(c, t->HubName);
\r
4390 return ERR_HUB_NOT_FOUND;
\r
4393 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_access_list") != 0)
\r
4396 return ERR_NOT_ENOUGH_RIGHT;
\r
4401 LockList(h->AccessList);
\r
4403 for (i = 0;i < LIST_NUM(h->AccessList);i++)
\r
4405 ACCESS *access = LIST_DATA(h->AccessList, i);
\r
4407 if (access->Id == t->Id)
\r
4410 Delete(h->AccessList, access);
\r
4417 UnlockList(h->AccessList);
\r
4419 if (exists == false)
\r
4422 return ERR_OBJECT_NOT_FOUND;
\r
4425 ALog(a, h, "LA_DELETE_ACCESS");
\r
4427 IncrementServerConfigRevision(s);
\r
4431 return ERR_NO_ERROR;
\r
4435 UINT StSetAccessList(ADMIN *a, RPC_ENUM_ACCESS_LIST *t)
\r
4437 SERVER *s = a->Server;
\r
4438 CEDAR *c = s->Cedar;
\r
4441 bool no_jitter = false;
\r
4442 UINT ret = ERR_NO_ERROR;
\r
4444 NO_SUPPORT_FOR_BRIDGE;
\r
4445 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
4447 return ERR_NOT_SUPPORTED;
\r
4452 if (t->NumAccess > GetServerCapsInt(a->Server, "i_max_access_lists"))
\r
4454 return ERR_TOO_MANY_ACCESS_LIST;
\r
4459 h = GetHub(c, t->HubName);
\r
4465 return ERR_HUB_NOT_FOUND;
\r
4468 no_jitter = GetHubAdminOption(h, "no_delay_jitter_packet_loss");
\r
4470 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_access_list") != 0)
\r
4473 return ERR_NOT_ENOUGH_RIGHT;
\r
4476 if (a->ServerAdmin == false && GetHubAdminOption(h, "max_accesslists") != 0 &&
\r
4477 t->NumAccess > GetHubAdminOption(h, "max_accesslists"))
\r
4480 return ERR_TOO_MANY_ACCESS_LIST;
\r
4483 LockList(h->AccessList);
\r
4487 // 古いバージョンのクライアントで対応できない形式のアクセスリストがすでに
\r
4488 // 存在しないかどうかチェックする
\r
4489 if (a->ClientBuild < 6560)
\r
4491 for (i = 0;i < LIST_NUM(h->AccessList);i++)
\r
4493 ACCESS *access = LIST_DATA(h->AccessList, i);
\r
4494 if (access->IsIPv6 ||
\r
4495 access->Jitter != 0 || access->Loss != 0 || access->Delay != 0)
\r
4497 ret = ERR_VERSION_INVALID;
\r
4503 if (ret == ERR_NO_ERROR)
\r
4506 for (i = 0;i < LIST_NUM(h->AccessList);i++)
\r
4508 ACCESS *access = LIST_DATA(h->AccessList, i);
\r
4512 DeleteAll(h->AccessList);
\r
4515 UnlockList(h->AccessList);
\r
4517 if (ret == ERR_NO_ERROR)
\r
4519 ALog(a, h, "LA_SET_ACCESS_LIST", t->NumAccess);
\r
4522 for (i = 0;i < t->NumAccess;i++)
\r
4524 ACCESS *a = &t->Accesses[i];
\r
4528 a->Jitter = a->Loss = a->Delay = 0;
\r
4531 AddAccessList(h, a);
\r
4534 IncrementServerConfigRevision(s);
\r
4536 h->CurrentVersion++;
\r
4537 SiHubUpdateProc(h);
\r
4546 UINT StAddAccess(ADMIN *a, RPC_ADD_ACCESS *t)
\r
4548 SERVER *s = a->Server;
\r
4549 CEDAR *c = s->Cedar;
\r
4551 bool no_jitter = false;
\r
4553 NO_SUPPORT_FOR_BRIDGE;
\r
4554 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
4556 return ERR_NOT_SUPPORTED;
\r
4563 h = GetHub(c, t->HubName);
\r
4569 return ERR_HUB_NOT_FOUND;
\r
4572 no_jitter = GetHubAdminOption(h, "no_delay_jitter_packet_loss");
\r
4574 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_access_list") != 0)
\r
4577 return ERR_NOT_ENOUGH_RIGHT;
\r
4580 if ((LIST_NUM(h->AccessList) >= GetServerCapsInt(a->Server, "i_max_access_lists") ||
\r
4581 (GetHubAdminOption(h, "max_accesslists") != 0) && (LIST_NUM(h->AccessList) >= GetHubAdminOption(h, "max_accesslists"))))
\r
4584 return ERR_TOO_MANY_ACCESS_LIST;
\r
4587 ALog(a, h, "LA_ADD_ACCESS");
\r
4591 t->Access.Jitter = t->Access.Delay = t->Access.Loss = 0;
\r
4594 AddAccessList(h, &t->Access);
\r
4596 h->CurrentVersion++;
\r
4597 SiHubUpdateProc(h);
\r
4601 IncrementServerConfigRevision(s);
\r
4603 return ERR_NO_ERROR;
\r
4607 UINT StRenameLink(ADMIN *a, RPC_RENAME_LINK *t)
\r
4610 SERVER *s = a->Server;
\r
4611 CEDAR *c = s->Cedar;
\r
4613 UINT ret = ERR_NO_ERROR;
\r
4615 bool exists = false;
\r
4617 if (UniIsEmptyStr(t->OldAccountName) || UniIsEmptyStr(t->NewAccountName))
\r
4619 return ERR_INVALID_PARAMETER;
\r
4622 if (s->ServerType != SERVER_TYPE_STANDALONE)
\r
4624 return ERR_NOT_SUPPORTED;
\r
4629 if (UniStrCmpi(t->NewAccountName, t->OldAccountName) == 0)
\r
4632 return ERR_NO_ERROR;
\r
4635 h = GetHub(c, t->HubName);
\r
4639 return ERR_HUB_NOT_FOUND;
\r
4642 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_cascade") != 0)
\r
4645 return ERR_NOT_ENOUGH_RIGHT;
\r
4651 LockList(h->LinkList);
\r
4653 for (i = 0;i < LIST_NUM(h->LinkList);i++)
\r
4655 LINK *kk = LIST_DATA(h->LinkList, i);
\r
4658 if (UniStrCmpi(kk->Option->AccountName, t->OldAccountName) == 0)
\r
4676 // 新しい名前がすでに存在しているリンクの名前と重複するかどうか検査
\r
4677 for (i = 0;i < LIST_NUM(h->LinkList);i++)
\r
4679 LINK *kk = LIST_DATA(h->LinkList, i);
\r
4682 if (UniStrCmpi(kk->Option->AccountName, t->NewAccountName) == 0)
\r
4693 // すでに同一の名前が存在している
\r
4694 ret = ERR_LINK_ALREADY_EXISTS;
\r
4699 UniStrCpy(k->Option->AccountName, sizeof(k->Option->AccountName), t->NewAccountName);
\r
4701 ALog(a, h, "LA_RENAME_LINK", t->OldAccountName, t->NewAccountName);
\r
4703 IncrementServerConfigRevision(s);
\r
4707 UnlockList(h->LinkList);
\r
4713 return ERR_OBJECT_NOT_FOUND;
\r
4724 UINT StDeleteLink(ADMIN *a, RPC_LINK *t)
\r
4727 SERVER *s = a->Server;
\r
4728 CEDAR *c = s->Cedar;
\r
4730 UINT ret = ERR_NO_ERROR;
\r
4731 char hubname[MAX_HUBNAME_LEN + 1];
\r
4732 wchar_t accountname[MAX_ACCOUNT_NAME_LEN + 1];
\r
4735 if (UniIsEmptyStr(t->AccountName))
\r
4737 return ERR_INVALID_PARAMETER;
\r
4740 if (s->ServerType != SERVER_TYPE_STANDALONE)
\r
4742 return ERR_NOT_SUPPORTED;
\r
4749 h = GetHub(c, t->HubName);
\r
4755 return ERR_HUB_NOT_FOUND;
\r
4758 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_cascade") != 0)
\r
4761 return ERR_NOT_ENOUGH_RIGHT;
\r
4764 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
4765 UniStrCpy(accountname, sizeof(accountname), t->AccountName);
\r
4769 LockList(h->LinkList);
\r
4771 for (i = 0;i < LIST_NUM(h->LinkList);i++)
\r
4773 LINK *kk = LIST_DATA(h->LinkList, i);
\r
4776 if (UniStrCmpi(kk->Option->AccountName, accountname) == 0)
\r
4790 UnlockList(h->LinkList);
\r
4797 return ERR_OBJECT_NOT_FOUND;
\r
4800 ALog(a, h, "LA_DELETE_LINK", t->AccountName);
\r
4802 SetLinkOffline(k);
\r
4804 IncrementServerConfigRevision(s);
\r
4815 UINT StSetLinkOffline(ADMIN *a, RPC_LINK *t)
\r
4818 SERVER *s = a->Server;
\r
4819 CEDAR *c = s->Cedar;
\r
4821 UINT ret = ERR_NO_ERROR;
\r
4822 char hubname[MAX_HUBNAME_LEN + 1];
\r
4823 wchar_t accountname[MAX_ACCOUNT_NAME_LEN + 1];
\r
4826 if (UniIsEmptyStr(t->AccountName))
\r
4828 return ERR_INVALID_PARAMETER;
\r
4831 if (s->ServerType != SERVER_TYPE_STANDALONE)
\r
4833 return ERR_NOT_SUPPORTED;
\r
4840 h = GetHub(c, t->HubName);
\r
4846 return ERR_HUB_NOT_FOUND;
\r
4849 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_cascade") != 0)
\r
4852 return ERR_NOT_ENOUGH_RIGHT;
\r
4855 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
4856 UniStrCpy(accountname, sizeof(accountname), t->AccountName);
\r
4860 LockList(h->LinkList);
\r
4862 for (i = 0;i < LIST_NUM(h->LinkList);i++)
\r
4864 LINK *kk = LIST_DATA(h->LinkList, i);
\r
4867 if (UniStrCmpi(kk->Option->AccountName, accountname) == 0)
\r
4881 UnlockList(h->LinkList);
\r
4888 return ERR_OBJECT_NOT_FOUND;
\r
4891 ALog(a, h, "LA_SET_LINK_OFFLINE", t->AccountName);
\r
4893 SetLinkOffline(k);
\r
4895 IncrementServerConfigRevision(s);
\r
4904 UINT StSetLinkOnline(ADMIN *a, RPC_LINK *t)
\r
4907 SERVER *s = a->Server;
\r
4908 CEDAR *c = s->Cedar;
\r
4910 UINT ret = ERR_NO_ERROR;
\r
4911 char hubname[MAX_HUBNAME_LEN + 1];
\r
4912 wchar_t accountname[MAX_ACCOUNT_NAME_LEN + 1];
\r
4915 if (UniIsEmptyStr(t->AccountName))
\r
4917 return ERR_INVALID_PARAMETER;
\r
4920 if (s->ServerType != SERVER_TYPE_STANDALONE)
\r
4922 return ERR_NOT_SUPPORTED;
\r
4929 h = GetHub(c, t->HubName);
\r
4935 return ERR_HUB_NOT_FOUND;
\r
4938 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_cascade") != 0)
\r
4941 return ERR_NOT_ENOUGH_RIGHT;
\r
4944 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
4945 UniStrCpy(accountname, sizeof(accountname), t->AccountName);
\r
4949 LockList(h->LinkList);
\r
4951 for (i = 0;i < LIST_NUM(h->LinkList);i++)
\r
4953 LINK *kk = LIST_DATA(h->LinkList, i);
\r
4956 if (UniStrCmpi(kk->Option->AccountName, accountname) == 0)
\r
4970 UnlockList(h->LinkList);
\r
4977 return ERR_OBJECT_NOT_FOUND;
\r
4980 ALog(a, h, "LA_SET_LINK_ONLINE", t->AccountName);
\r
4987 IncrementServerConfigRevision(s);
\r
4993 UINT StGetLinkStatus(ADMIN *a, RPC_LINK_STATUS *t)
\r
4996 SERVER *s = a->Server;
\r
4997 CEDAR *c = s->Cedar;
\r
4999 UINT ret = ERR_NO_ERROR;
\r
5000 char hubname[MAX_HUBNAME_LEN + 1];
\r
5001 wchar_t accountname[MAX_ACCOUNT_NAME_LEN + 1];
\r
5005 if (UniIsEmptyStr(t->AccountName))
\r
5007 return ERR_INVALID_PARAMETER;
\r
5010 if (s->ServerType != SERVER_TYPE_STANDALONE)
\r
5012 return ERR_NOT_SUPPORTED;
\r
5019 h = GetHub(c, t->HubName);
\r
5025 return ERR_HUB_NOT_FOUND;
\r
5028 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
5029 UniStrCpy(accountname, sizeof(accountname), t->AccountName);
\r
5030 FreeRpcLinkStatus(t);
\r
5031 Zero(t, sizeof(RPC_LINK_STATUS));
\r
5032 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
5033 UniStrCpy(t->AccountName, sizeof(t->AccountName), accountname);
\r
5038 LockList(h->LinkList);
\r
5040 for (i = 0;i < LIST_NUM(h->LinkList);i++)
\r
5042 LINK *kk = LIST_DATA(h->LinkList, i);
\r
5045 if (UniStrCmpi(kk->Option->AccountName, accountname) == 0)
\r
5059 UnlockList(h->LinkList);
\r
5066 return ERR_OBJECT_NOT_FOUND;
\r
5069 // セッションからステータス情報を取得する
\r
5072 sess = k->ClientSession;
\r
5075 AddRef(sess->ref);
\r
5080 if (sess != NULL && k->Offline == false)
\r
5082 CiGetSessionStatus(&t->Status, sess);
\r
5086 ret = ERR_LINK_IS_OFFLINE;
\r
5088 ReleaseSession(sess);
\r
5097 UINT StEnumLink(ADMIN *a, RPC_ENUM_LINK *t)
\r
5099 SERVER *s = a->Server;
\r
5100 CEDAR *c = s->Cedar;
\r
5102 char hubname[MAX_HUBNAME_LEN + 1];
\r
5105 if (s->ServerType != SERVER_TYPE_STANDALONE)
\r
5107 return ERR_NOT_SUPPORTED;
\r
5114 h = GetHub(c, t->HubName);
\r
5120 return ERR_HUB_NOT_FOUND;
\r
5123 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
5124 FreeRpcEnumLink(t);
\r
5125 Zero(t, sizeof(RPC_ENUM_LINK));
\r
5126 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
5128 LockList(h->LinkList);
\r
5130 t->NumLink = LIST_NUM(h->LinkList);
\r
5131 t->Links = ZeroMalloc(sizeof(RPC_ENUM_LINK_ITEM) * t->NumLink);
\r
5133 for (i = 0;i < LIST_NUM(h->LinkList);i++)
\r
5135 LINK *k = LIST_DATA(h->LinkList, i);
\r
5136 RPC_ENUM_LINK_ITEM *e = &t->Links[i];
\r
5140 UniStrCpy(e->AccountName, sizeof(e->AccountName), k->Option->AccountName);
\r
5141 StrCpy(e->Hostname, sizeof(e->Hostname), k->Option->Hostname);
\r
5142 StrCpy(e->HubName, sizeof(e->HubName), k->Option->HubName);
\r
5143 e->Online = k->Offline ? false : true;
\r
5147 if (k->ClientSession != NULL)
\r
5149 e->ConnectedTime = TickToTime(k->ClientSession->CurrentConnectionEstablishTime);
\r
5150 e->Connected = (k->ClientSession->ClientStatus == CLIENT_STATUS_ESTABLISHED);
\r
5151 e->LastError = k->ClientSession->Err;
\r
5158 UnlockList(h->LinkList);
\r
5162 return ERR_NO_ERROR;
\r
5166 UINT StGetLink(ADMIN *a, RPC_CREATE_LINK *t)
\r
5168 SERVER *s = a->Server;
\r
5169 CEDAR *c = s->Cedar;
\r
5171 UINT ret = ERR_NO_ERROR;
\r
5173 char hubname[MAX_SIZE];
\r
5176 if (s->ServerType != SERVER_TYPE_STANDALONE)
\r
5178 return ERR_NOT_SUPPORTED;
\r
5183 if (s->ServerType != SERVER_TYPE_STANDALONE)
\r
5185 return ERR_LINK_CANT_CREATE_ON_FARM;
\r
5190 h = GetHub(c, t->HubName);
\r
5196 return ERR_HUB_NOT_FOUND;
\r
5202 LockList(h->LinkList);
\r
5204 for (i = 0;i < LIST_NUM(h->LinkList);i++)
\r
5206 LINK *kk = LIST_DATA(h->LinkList, i);
\r
5209 if (UniStrCmpi(kk->Option->AccountName, t->ClientOption->AccountName) == 0)
\r
5223 UnlockList(h->LinkList);
\r
5229 return ERR_OBJECT_NOT_FOUND;
\r
5232 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
5233 FreeRpcCreateLink(t);
\r
5234 Zero(t, sizeof(t));
\r
5235 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
5240 t->Online = k->Offline ? false : true;
\r
5241 t->ClientOption = ZeroMalloc(sizeof(CLIENT_OPTION));
\r
5242 Copy(t->ClientOption, k->Option, sizeof(CLIENT_OPTION));
\r
5243 t->ClientAuth = CopyClientAuth(k->Auth);
\r
5244 Copy(&t->Policy, k->Policy, sizeof(POLICY));
\r
5246 t->CheckServerCert = k->CheckServerCert;
\r
5247 t->ServerCert = CloneX(k->ServerCert);
\r
5258 UINT StSetLink(ADMIN *a, RPC_CREATE_LINK *t)
\r
5260 SERVER *s = a->Server;
\r
5261 CEDAR *c = s->Cedar;
\r
5263 UINT ret = ERR_NO_ERROR;
\r
5267 if (s->ServerType != SERVER_TYPE_STANDALONE)
\r
5269 return ERR_NOT_SUPPORTED;
\r
5274 if (s->ServerType != SERVER_TYPE_STANDALONE)
\r
5276 return ERR_LINK_CANT_CREATE_ON_FARM;
\r
5281 h = GetHub(c, t->HubName);
\r
5287 return ERR_HUB_NOT_FOUND;
\r
5290 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_cascade") != 0)
\r
5293 return ERR_NOT_ENOUGH_RIGHT;
\r
5299 LockList(h->LinkList);
\r
5301 for (i = 0;i < LIST_NUM(h->LinkList);i++)
\r
5303 LINK *kk = LIST_DATA(h->LinkList, i);
\r
5306 if (UniStrCmpi(kk->Option->AccountName, t->ClientOption->AccountName) == 0)
\r
5320 UnlockList(h->LinkList);
\r
5326 return ERR_OBJECT_NOT_FOUND;
\r
5329 ALog(a, h, "LA_SET_LINK", t->ClientOption->AccountName);
\r
5334 if (k->ServerCert != NULL)
\r
5336 FreeX(k->ServerCert);
\r
5337 k->ServerCert = NULL;
\r
5340 Copy(k->Option, t->ClientOption, sizeof(CLIENT_OPTION));
\r
5341 StrCpy(k->Option->DeviceName, sizeof(k->Option->DeviceName), LINK_DEVICE_NAME);
\r
5342 k->Option->NumRetry = INFINITE;
\r
5343 k->Option->RetryInterval = 10;
\r
5344 k->Option->NoRoutingTracking = true;
\r
5345 CiFreeClientAuth(k->Auth);
\r
5346 k->Auth = CopyClientAuth(t->ClientAuth);
\r
5348 if (t->Policy.Ver3 == false)
\r
5350 Copy(k->Policy, &t->Policy, sizeof(UINT) * NUM_POLICY_ITEM_FOR_VER2);
\r
5354 Copy(k->Policy, &t->Policy, sizeof(POLICY));
\r
5357 k->Option->RequireBridgeRoutingMode = true; // ブリッジ / ルーティングモード有効
\r
5358 k->Option->RequireMonitorMode = false; // モニタモード無効
\r
5360 k->CheckServerCert = t->CheckServerCert;
\r
5361 k->ServerCert = CloneX(t->ServerCert);
\r
5365 IncrementServerConfigRevision(s);
\r
5374 UINT StCreateLink(ADMIN *a, RPC_CREATE_LINK *t)
\r
5376 SERVER *s = a->Server;
\r
5377 CEDAR *c = s->Cedar;
\r
5379 UINT ret = ERR_NO_ERROR;
\r
5385 if (s->ServerType != SERVER_TYPE_STANDALONE)
\r
5387 return ERR_LINK_CANT_CREATE_ON_FARM;
\r
5392 h = GetHub(c, t->HubName);
\r
5398 return ERR_HUB_NOT_FOUND;
\r
5401 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_cascade") != 0)
\r
5404 return ERR_NOT_ENOUGH_RIGHT;
\r
5409 // 既に同じ名前のリンクが存在しないかどうか調べる
\r
5410 LockList(h->LinkList);
\r
5412 for (i = 0;i < LIST_NUM(h->LinkList);i++)
\r
5414 LINK *kk = LIST_DATA(h->LinkList, i);
\r
5417 if (UniStrCmpi(kk->Option->AccountName, t->ClientOption->AccountName) == 0)
\r
5431 UnlockList(h->LinkList);
\r
5435 // すでに同じ名前のリンクが存在する
\r
5438 return ERR_LINK_ALREADY_EXISTS;
\r
5441 ALog(a, h, "LA_CREATE_LINK", t->ClientOption->AccountName);
\r
5444 k = NewLink(c, h, t->ClientOption, t->ClientAuth, &t->Policy);
\r
5449 ret = ERR_INTERNAL_ERROR;
\r
5454 k->CheckServerCert = t->CheckServerCert;
\r
5455 k->ServerCert = CloneX(t->ServerCert);
\r
5458 k->Offline = false;
\r
5459 SetLinkOffline(k);
\r
5462 IncrementServerConfigRevision(s);
\r
5471 UINT StDeleteCa(ADMIN *a, RPC_HUB_DELETE_CA *t)
\r
5473 SERVER *s = a->Server;
\r
5474 CEDAR *c = s->Cedar;
\r
5476 UINT ret = ERR_NO_ERROR;
\r
5478 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
5480 return ERR_NOT_FARM_CONTROLLER;
\r
5483 NO_SUPPORT_FOR_BRIDGE;
\r
5488 h = GetHub(c, t->HubName);
\r
5494 return ERR_HUB_NOT_FOUND;
\r
5497 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_cert_list") != 0)
\r
5500 return ERR_NOT_ENOUGH_RIGHT;
\r
5503 LockList(h->HubDb->RootCertList);
\r
5505 if (IsInListKey(h->HubDb->RootCertList, t->Key))
\r
5507 X *x = ListKeyToPointer(h->HubDb->RootCertList, t->Key);
\r
5508 Delete(h->HubDb->RootCertList, x);
\r
5511 ALog(a, h, "LA_DELETE_CA");
\r
5513 IncrementServerConfigRevision(s);
\r
5517 ret = ERR_OBJECT_NOT_FOUND;
\r
5520 UnlockList(h->HubDb->RootCertList);
\r
5528 UINT StGetCa(ADMIN *a, RPC_HUB_GET_CA *t)
\r
5530 SERVER *s = a->Server;
\r
5531 CEDAR *c = s->Cedar;
\r
5533 UINT ret = ERR_NO_ERROR;
\r
5534 char hubname[MAX_HUBNAME_LEN + 1];
\r
5537 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
5539 return ERR_NOT_FARM_CONTROLLER;
\r
5542 NO_SUPPORT_FOR_BRIDGE;
\r
5544 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
5547 FreeRpcHubGetCa(t);
\r
5548 Zero(t, sizeof(RPC_HUB_GET_CA));
\r
5549 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
5555 h = GetHub(c, t->HubName);
\r
5561 return ERR_HUB_NOT_FOUND;
\r
5564 LockList(h->HubDb->RootCertList);
\r
5566 if (IsInListKey(h->HubDb->RootCertList, key))
\r
5568 X *x = ListKeyToPointer(h->HubDb->RootCertList, key);
\r
5570 t->Cert = CloneX(x);
\r
5574 ret = ERR_OBJECT_NOT_FOUND;
\r
5577 UnlockList(h->HubDb->RootCertList);
\r
5585 UINT StEnumCa(ADMIN *a, RPC_HUB_ENUM_CA *t)
\r
5587 SERVER *s = a->Server;
\r
5588 CEDAR *c = s->Cedar;
\r
5590 char hubname[MAX_HUBNAME_LEN + 1];
\r
5593 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
5595 return ERR_NOT_FARM_CONTROLLER;
\r
5598 NO_SUPPORT_FOR_BRIDGE;
\r
5600 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
5602 FreeRpcHubEnumCa(t);
\r
5603 Zero(t, sizeof(RPC_HUB_ENUM_CA));
\r
5605 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
5610 h = GetHub(c, hubname);
\r
5616 return ERR_HUB_NOT_FOUND;
\r
5619 Zero(t, sizeof(RPC_HUB_ENUM_CA));
\r
5620 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
5622 if (h->HubDb->RootCertList != NULL)
\r
5624 LockList(h->HubDb->RootCertList);
\r
5626 t->NumCa = LIST_NUM(h->HubDb->RootCertList);
\r
5627 t->Ca = ZeroMalloc(sizeof(RPC_HUB_ENUM_CA_ITEM) * t->NumCa);
\r
5629 for (i = 0;i < t->NumCa;i++)
\r
5631 RPC_HUB_ENUM_CA_ITEM *e = &t->Ca[i];
\r
5632 X *x = LIST_DATA(h->HubDb->RootCertList, i);
\r
5634 e->Key = POINTER_TO_KEY(x);
\r
5635 GetAllNameFromNameEx(e->SubjectName, sizeof(e->SubjectName), x->subject_name);
\r
5636 GetAllNameFromNameEx(e->IssuerName, sizeof(e->IssuerName), x->issuer_name);
\r
5637 e->Expires = x->notAfter;
\r
5640 UnlockList(h->HubDb->RootCertList);
\r
5645 return ERR_NO_ERROR;
\r
5649 UINT StAddCa(ADMIN *a, RPC_HUB_ADD_CA *t)
\r
5651 SERVER *s = a->Server;
\r
5652 CEDAR *c = s->Cedar;
\r
5655 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
5657 return ERR_NOT_FARM_CONTROLLER;
\r
5662 return ERR_NOT_SUPPORTED;
\r
5665 if (t->Cert == NULL)
\r
5667 ERR_INVALID_PARAMETER;
\r
5670 if (t->Cert->is_compatible_bit == false)
\r
5672 return ERR_NOT_RSA_1024;
\r
5679 h = GetHub(c, t->HubName);
\r
5685 return ERR_HUB_NOT_FOUND;
\r
5688 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_cert_list") != 0)
\r
5691 return ERR_NOT_ENOUGH_RIGHT;
\r
5694 IncrementServerConfigRevision(s);
\r
5696 ALog(a, h, "LA_ADD_CA");
\r
5698 AddRootCert(h, t->Cert);
\r
5702 return ERR_NO_ERROR;
\r
5706 UINT StGetHubLog(ADMIN *a, RPC_HUB_LOG *t)
\r
5708 SERVER *s = a->Server;
\r
5709 CEDAR *c = s->Cedar;
\r
5716 h = GetHub(c, t->HubName);
\r
5722 return ERR_HUB_NOT_FOUND;
\r
5725 GetHubLogSetting(h, &t->LogSetting);
\r
5729 return ERR_NO_ERROR;
\r
5733 UINT StSetHubLog(ADMIN *a, RPC_HUB_LOG *t)
\r
5735 SERVER *s = a->Server;
\r
5736 CEDAR *c = s->Cedar;
\r
5743 h = GetHub(c, t->HubName);
\r
5749 return ERR_HUB_NOT_FOUND;
\r
5752 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_log_config") != 0)
\r
5755 return ERR_NOT_ENOUGH_RIGHT;
\r
5758 ALog(a, h, "LA_SET_HUB_LOG");
\r
5760 SetHubLogSettingEx(h, &t->LogSetting,
\r
5761 (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_log_switch_type") != 0));
\r
5763 h->CurrentVersion++;
\r
5764 SiHubUpdateProc(h);
\r
5768 IncrementServerConfigRevision(s);
\r
5770 return ERR_NO_ERROR;
\r
5774 UINT StGetHubStatus(ADMIN *a, RPC_HUB_STATUS *t)
\r
5776 SERVER *s = a->Server;
\r
5777 CEDAR *c = s->Cedar;
\r
5784 h = GetHub(c, t->HubName);
\r
5790 return ERR_HUB_NOT_FOUND;
\r
5793 Zero(t, sizeof(RPC_HUB_STATUS));
\r
5797 StrCpy(t->HubName, sizeof(t->HubName), h->Name);
\r
5798 t->HubType = h->Type;
\r
5799 t->Online = h->Offline ? false : true;
\r
5800 t->NumSessions = LIST_NUM(h->SessionList);
\r
5801 t->NumSessionsClient = Count(h->NumSessionsClient);
\r
5802 t->NumSessionsBridge = Count(h->NumSessionsBridge);
\r
5803 t->NumAccessLists = LIST_NUM(h->AccessList);
\r
5805 if (h->HubDb != NULL)
\r
5807 t->NumUsers = LIST_NUM(h->HubDb->UserList);
\r
5808 t->NumGroups = LIST_NUM(h->HubDb->GroupList);
\r
5811 t->NumMacTables = LIST_NUM(h->MacTable);
\r
5812 t->NumIpTables = LIST_NUM(h->IpTable);
\r
5814 Lock(h->TrafficLock);
\r
5816 Copy(&t->Traffic, h->Traffic, sizeof(TRAFFIC));
\r
5818 Unlock(h->TrafficLock);
\r
5820 t->NumLogin = h->NumLogin;
\r
5821 t->LastCommTime = h->LastCommTime;
\r
5822 t->LastLoginTime = h->LastLoginTime;
\r
5823 t->CreatedTime = h->CreatedTime;
\r
5827 if (s->ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
5830 LockList(s->FarmMemberList);
\r
5832 for (i = 0;i < LIST_NUM(s->FarmMemberList);i++)
\r
5835 FARM_MEMBER *f = LIST_DATA(s->FarmMemberList, i);
\r
5837 if (f->Me == false)
\r
5839 LockList(f->HubList);
\r
5841 for (k = 0;k < LIST_NUM(f->HubList);k++)
\r
5843 HUB_LIST *h = LIST_DATA(f->HubList, k);
\r
5845 if (StrCmpi(h->Name, t->HubName) == 0)
\r
5847 t->NumSessions += h->NumSessions;
\r
5848 t->NumSessionsClient += h->NumSessionsClient;
\r
5849 t->NumSessionsBridge += h->NumSessionsBridge;
\r
5850 t->NumMacTables += h->NumMacTables;
\r
5851 t->NumIpTables += h->NumIpTables;
\r
5855 UnlockList(f->HubList);
\r
5859 UnlockList(s->FarmMemberList);
\r
5862 if (h->Type != HUB_TYPE_FARM_STATIC)
\r
5864 t->SecureNATEnabled = h->EnableSecureNAT;
\r
5869 return ERR_NO_ERROR;
\r
5872 // HUB の SecureNAT を有効にする
\r
5873 UINT StEnableSecureNAT(ADMIN *a, RPC_HUB *t)
\r
5875 SERVER *s = a->Server;
\r
5876 CEDAR *c = s->Cedar;
\r
5883 h = GetHub(c, t->HubName);
\r
5889 return ERR_HUB_NOT_FOUND;
\r
5892 if (h->Type == HUB_TYPE_FARM_STATIC || GetServerCapsBool(s, "b_support_securenat") == false)
\r
5895 return ERR_NOT_SUPPORTED;
\r
5897 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
5900 return ERR_NOT_FARM_CONTROLLER;
\r
5903 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_securenat") != 0)
\r
5906 return ERR_NOT_ENOUGH_RIGHT;
\r
5909 ALog(a, h, "LA_ENABLE_SNAT");
\r
5911 EnableSecureNAT(h, true);
\r
5913 h->CurrentVersion++;
\r
5914 SiHubUpdateProc(h);
\r
5916 IncrementServerConfigRevision(s);
\r
5920 return ERR_NO_ERROR;
\r
5923 // HUB の SecureNAT を無効にする
\r
5924 UINT StDisableSecureNAT(ADMIN *a, RPC_HUB *t)
\r
5926 SERVER *s = a->Server;
\r
5927 CEDAR *c = s->Cedar;
\r
5934 h = GetHub(c, t->HubName);
\r
5940 return ERR_HUB_NOT_FOUND;
\r
5943 if (h->Type == HUB_TYPE_FARM_STATIC || GetServerCapsBool(s, "b_support_securenat") == false)
\r
5946 return ERR_NOT_SUPPORTED;
\r
5948 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
5951 return ERR_NOT_FARM_CONTROLLER;
\r
5954 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_securenat") != 0)
\r
5957 return ERR_NOT_ENOUGH_RIGHT;
\r
5960 ALog(a, h, "LA_DISABLE_SNAT");
\r
5962 EnableSecureNAT(h, false);
\r
5964 h->CurrentVersion++;
\r
5965 SiHubUpdateProc(h);
\r
5967 IncrementServerConfigRevision(s);
\r
5971 return ERR_NO_ERROR;
\r
5975 UINT StEnumNAT(ADMIN *a, RPC_ENUM_NAT *t)
\r
5977 SERVER *s = a->Server;
\r
5978 CEDAR *c = s->Cedar;
\r
5980 UINT ret = ERR_NO_ERROR;
\r
5981 char hubname[MAX_HUBNAME_LEN + 1];
\r
5986 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
5990 h = GetHub(c, t->HubName);
\r
5996 return ERR_HUB_NOT_FOUND;
\r
5999 if (h->Type == HUB_TYPE_FARM_STATIC || GetServerCapsBool(s, "b_support_securenat") == false)
\r
6002 return ERR_NOT_SUPPORTED;
\r
6005 Lock(h->lock_online);
\r
6007 if (h->SecureNAT == NULL)
\r
6009 ret = ERR_SNAT_NOT_RUNNING;
\r
6013 NtEnumNatList(h->SecureNAT->Nat, t);
\r
6016 Unlock(h->lock_online);
\r
6018 if (h->Type == HUB_TYPE_FARM_DYNAMIC)
\r
6020 if (ret == ERR_SNAT_NOT_RUNNING)
\r
6022 // リモートの SecureNAT の状態取得
\r
6023 LockList(s->FarmMemberList);
\r
6025 for (i = 0;i < LIST_NUM(s->FarmMemberList);i++)
\r
6027 FARM_MEMBER *f = LIST_DATA(s->FarmMemberList, i);
\r
6028 if (f->Me == false)
\r
6032 Zero(&tmp, sizeof(tmp));
\r
6034 SiCallEnumNat(s, f, hubname, &tmp);
\r
6036 if (tmp.NumItem >= 1)
\r
6038 FreeRpcEnumNat(t);
\r
6039 Copy(t, &tmp, sizeof(RPC_ENUM_NAT));
\r
6040 ret = ERR_NO_ERROR;
\r
6045 FreeRpcEnumNat(&tmp);
\r
6050 UnlockList(s->FarmMemberList);
\r
6056 ret = ERR_NO_ERROR;
\r
6061 // SecureNAT の状態の取得
\r
6062 UINT StGetSecureNATStatus(ADMIN *a, RPC_NAT_STATUS *t)
\r
6064 SERVER *s = a->Server;
\r
6065 CEDAR *c = s->Cedar;
\r
6067 UINT ret = ERR_NO_ERROR;
\r
6068 char hubname[MAX_HUBNAME_LEN + 1];
\r
6073 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
6077 h = GetHub(c, t->HubName);
\r
6083 return ERR_HUB_NOT_FOUND;
\r
6086 if (h->Type == HUB_TYPE_FARM_STATIC || GetServerCapsBool(s, "b_support_securenat") == false)
\r
6089 return ERR_NOT_SUPPORTED;
\r
6092 Lock(h->lock_online);
\r
6094 if (h->SecureNAT == NULL)
\r
6096 ret = ERR_SNAT_NOT_RUNNING;
\r
6100 NtGetStatus(h->SecureNAT->Nat, t);
\r
6103 Unlock(h->lock_online);
\r
6105 if (h->Type == HUB_TYPE_FARM_DYNAMIC)
\r
6107 if (ret == ERR_SNAT_NOT_RUNNING)
\r
6109 // リモートの SecureNAT の状態取得
\r
6110 LockList(s->FarmMemberList);
\r
6112 for (i = 0;i < LIST_NUM(s->FarmMemberList);i++)
\r
6114 FARM_MEMBER *f = LIST_DATA(s->FarmMemberList, i);
\r
6115 if (f->Me == false)
\r
6117 RPC_NAT_STATUS tmp;
\r
6119 Zero(&tmp, sizeof(tmp));
\r
6121 SiCallGetNatStatus(s, f, hubname, &tmp);
\r
6123 if (tmp.NumDhcpClients == 0 && tmp.NumTcpSessions == 0 && tmp.NumUdpSessions == 0)
\r
6128 Copy(t, &tmp, sizeof(RPC_NAT_STATUS));
\r
6129 ret = ERR_NO_ERROR;
\r
6135 UnlockList(s->FarmMemberList);
\r
6141 ret = ERR_NO_ERROR;
\r
6147 UINT StEnumDHCP(ADMIN *a, RPC_ENUM_DHCP *t)
\r
6149 SERVER *s = a->Server;
\r
6150 CEDAR *c = s->Cedar;
\r
6152 UINT ret = ERR_NO_ERROR;
\r
6153 char hubname[MAX_HUBNAME_LEN + 1];
\r
6155 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
6161 h = GetHub(c, t->HubName);
\r
6167 return ERR_HUB_NOT_FOUND;
\r
6170 if (h->Type == HUB_TYPE_FARM_STATIC || GetServerCapsBool(s, "b_support_securenat") == false)
\r
6173 return ERR_NOT_SUPPORTED;
\r
6176 Lock(h->lock_online);
\r
6178 if (h->SecureNAT == NULL)
\r
6180 ret = ERR_SNAT_NOT_RUNNING;
\r
6184 NtEnumDhcpList(h->SecureNAT->Nat, t);
\r
6187 Unlock(h->lock_online);
\r
6189 if (h->Type == HUB_TYPE_FARM_DYNAMIC)
\r
6191 if (ret == ERR_SNAT_NOT_RUNNING)
\r
6193 // リモートの DHCP の状態取得
\r
6194 LockList(s->FarmMemberList);
\r
6196 for (i = 0;i < LIST_NUM(s->FarmMemberList);i++)
\r
6198 FARM_MEMBER *f = LIST_DATA(s->FarmMemberList, i);
\r
6199 if (f->Me == false)
\r
6201 RPC_ENUM_DHCP tmp;
\r
6203 Zero(&tmp, sizeof(tmp));
\r
6205 SiCallEnumDhcp(s, f, hubname, &tmp);
\r
6207 if (tmp.NumItem >= 1)
\r
6209 FreeRpcEnumDhcp(t);
\r
6210 Copy(t, &tmp, sizeof(RPC_ENUM_DHCP));
\r
6211 ret = ERR_NO_ERROR;
\r
6216 FreeRpcEnumDhcp(&tmp);
\r
6221 UnlockList(s->FarmMemberList);
\r
6227 ret = ERR_NO_ERROR;
\r
6232 // SecureNATOption を設定する
\r
6233 UINT StSetSecureNATOption(ADMIN *a, VH_OPTION *t)
\r
6235 SERVER *s = a->Server;
\r
6236 CEDAR *c = s->Cedar;
\r
6239 if (IsZero(t->MacAddress, sizeof(t->MacAddress)) ||
\r
6240 IsHostIPAddress4(&t->Ip) == false ||
\r
6241 IsSubnetMask4(&t->Mask) == false)
\r
6243 return ERR_INVALID_PARAMETER;
\r
6245 if ((IPToUINT(&t->Ip) & (~(IPToUINT(&t->Mask)))) == 0)
\r
6247 return ERR_INVALID_PARAMETER;
\r
6254 h = GetHub(c, t->HubName);
\r
6260 return ERR_HUB_NOT_FOUND;
\r
6263 if (h->Type == HUB_TYPE_FARM_STATIC || GetServerCapsBool(s, "b_support_securenat") == false)
\r
6266 return ERR_NOT_SUPPORTED;
\r
6268 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
6271 return ERR_NOT_FARM_CONTROLLER;
\r
6274 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_securenat") != 0)
\r
6277 return ERR_NOT_ENOUGH_RIGHT;
\r
6280 if (h->SecureNATOption->UseNat == false && t->UseNat)
\r
6282 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_securenat_enablenat") != 0)
\r
6285 return ERR_NOT_ENOUGH_RIGHT;
\r
6289 if (h->SecureNATOption->UseDhcp == false && t->UseDhcp)
\r
6291 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_securenat_enabledhcp") != 0)
\r
6294 return ERR_NOT_ENOUGH_RIGHT;
\r
6298 Copy(h->SecureNATOption, t, sizeof(VH_OPTION));
\r
6300 if (h->Type != HUB_TYPE_STANDALONE && h->Cedar != NULL && h->Cedar->Server != NULL &&
\r
6301 h->Cedar->Server->ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
6303 NiClearUnsupportedVhOptionForDynamicHub(h->SecureNATOption, false);
\r
6306 Lock(h->lock_online);
\r
6308 if (h->SecureNAT != NULL)
\r
6310 SetVirtualHostOption(h->SecureNAT->Nat->Virtual, t);
\r
6313 Unlock(h->lock_online);
\r
6315 ALog(a, h, "LA_SET_SNAT_OPTION");
\r
6317 h->CurrentVersion++;
\r
6318 SiHubUpdateProc(h);
\r
6320 IncrementServerConfigRevision(s);
\r
6324 return ERR_NO_ERROR;
\r
6327 // SecureNATOption を取得する
\r
6328 UINT StGetSecureNATOption(ADMIN *a, VH_OPTION *t)
\r
6330 SERVER *s = a->Server;
\r
6331 CEDAR *c = s->Cedar;
\r
6333 char hubname[MAX_HUBNAME_LEN + 1];
\r
6335 StrCpy(hubname, sizeof(hubname), t->HubName);
\r
6341 h = GetHub(c, t->HubName);
\r
6347 return ERR_HUB_NOT_FOUND;
\r
6350 if (h->Type == HUB_TYPE_FARM_STATIC || GetServerCapsBool(s, "b_support_securenat") == false)
\r
6353 return ERR_NOT_SUPPORTED;
\r
6355 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
6358 return ERR_NOT_FARM_CONTROLLER;
\r
6361 Zero(t, sizeof(VH_OPTION));
\r
6362 StrCpy(t->HubName, sizeof(t->HubName), hubname);
\r
6363 Copy(t, h->SecureNATOption, sizeof(VH_OPTION));
\r
6367 return ERR_NO_ERROR;
\r
6370 // HUB をオンラインまたはオフラインにする
\r
6371 UINT StSetHubOnline(ADMIN *a, RPC_SET_HUB_ONLINE *t)
\r
6373 SERVER *s = a->Server;
\r
6374 CEDAR *c = s->Cedar;
\r
6377 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
6379 return ERR_NOT_FARM_CONTROLLER;
\r
6382 NO_SUPPORT_FOR_BRIDGE;
\r
6388 h = GetHub(c, t->HubName);
\r
6394 return ERR_HUB_NOT_FOUND;
\r
6397 if (a->ServerAdmin == false && t->Online && GetHubAdminOption(h, "no_online") != 0)
\r
6400 return ERR_NOT_ENOUGH_RIGHT;
\r
6403 if (a->ServerAdmin == false && t->Online == false && GetHubAdminOption(h, "no_offline") != 0)
\r
6406 return ERR_NOT_ENOUGH_RIGHT;
\r
6411 ALog(a, h, "LA_SET_HUB_ONLINE");
\r
6416 ALog(a, h, "LA_SET_HUB_OFFLINE");
\r
6420 h->CurrentVersion++;
\r
6421 SiHubUpdateProc(h);
\r
6423 IncrementServerConfigRevision(s);
\r
6427 return ERR_NO_ERROR;
\r
6431 UINT StGetConnectionInfo(ADMIN *a, RPC_CONNECTION_INFO *t)
\r
6433 SERVER *s = a->Server;
\r
6434 CEDAR *c = s->Cedar;
\r
6435 CONNECTION *connection;
\r
6436 char name[MAX_CONNECTION_NAME_LEN + 1];
\r
6438 if (IsEmptyStr(t->Name))
\r
6440 return ERR_INVALID_PARAMETER;
\r
6443 SERVER_ADMIN_ONLY;
\r
6445 LockList(c->ConnectionList);
\r
6448 Zero(&tt, sizeof(tt));
\r
6449 tt.Name = t->Name;
\r
6450 StrCpy(name, sizeof(name), t->Name);
\r
6452 connection = Search(c->ConnectionList, &tt);
\r
6454 if (connection != NULL)
\r
6456 AddRef(connection->ref);
\r
6459 UnlockList(c->ConnectionList);
\r
6461 if (connection == NULL)
\r
6463 return ERR_OBJECT_NOT_FOUND;
\r
6466 Zero(t, sizeof(RPC_CONNECTION_INFO));
\r
6467 StrCpy(t->Name, sizeof(t->Name), name);
\r
6469 Lock(connection->lock);
\r
6471 SOCK *s = connection->FirstSock;
\r
6475 t->Ip = IPToUINT(&s->RemoteIP);
\r
6476 t->Port = s->RemotePort;
\r
6477 StrCpy(t->Hostname, sizeof(t->Hostname), s->RemoteHostname);
\r
6480 StrCpy(t->Name, sizeof(t->Name), connection->Name);
\r
6481 t->ConnectedTime = TickToTime(connection->ConnectedTick);
\r
6482 t->Type = connection->Type;
\r
6484 StrCpy(t->ServerStr, sizeof(t->ServerStr), connection->ServerStr);
\r
6485 StrCpy(t->ClientStr, sizeof(t->ClientStr), connection->ClientStr);
\r
6486 t->ServerVer = connection->ServerVer;
\r
6487 t->ServerBuild = connection->ServerBuild;
\r
6488 t->ClientVer = connection->ClientVer;
\r
6489 t->ClientBuild = connection->ClientBuild;
\r
6491 Unlock(connection->lock);
\r
6493 ReleaseConnection(connection);
\r
6495 return ERR_NO_ERROR;
\r
6499 UINT StDisconnectConnection(ADMIN *a, RPC_DISCONNECT_CONNECTION *t)
\r
6501 SERVER *s = a->Server;
\r
6502 CEDAR *c = s->Cedar;
\r
6503 CONNECTION *connection;
\r
6505 if (IsEmptyStr(t->Name))
\r
6507 return ERR_INVALID_PARAMETER;
\r
6510 SERVER_ADMIN_ONLY;
\r
6512 LockList(c->ConnectionList);
\r
6515 Zero(&tt, sizeof(tt));
\r
6516 tt.Name = t->Name;
\r
6518 connection = Search(c->ConnectionList, &tt);
\r
6519 if (connection != NULL)
\r
6521 AddRef(connection->ref);
\r
6524 UnlockList(c->ConnectionList);
\r
6526 if (connection == NULL)
\r
6528 return ERR_OBJECT_NOT_FOUND;
\r
6531 StopConnection(connection, true);
\r
6533 ReleaseConnection(connection);
\r
6535 ALog(a, NULL, "LA_DISCONNECT_CONN", t->Name);
\r
6537 return ERR_NO_ERROR;
\r
6541 UINT StEnumConnection(ADMIN *a, RPC_ENUM_CONNECTION *t)
\r
6543 SERVER *s = a->Server;
\r
6544 CEDAR *c = s->Cedar;
\r
6546 SERVER_ADMIN_ONLY;
\r
6548 FreeRpcEnumConnetion(t);
\r
6549 Zero(t, sizeof(RPC_ENUM_CONNECTION));
\r
6551 LockList(c->ConnectionList);
\r
6554 t->NumConnection = LIST_NUM(c->ConnectionList);
\r
6555 t->Connections = ZeroMalloc(sizeof(RPC_ENUM_CONNECTION_ITEM) * t->NumConnection);
\r
6557 for (i = 0;i < t->NumConnection;i++)
\r
6559 RPC_ENUM_CONNECTION_ITEM *e = &t->Connections[i];
\r
6560 CONNECTION *connection = LIST_DATA(c->ConnectionList, i);
\r
6562 Lock(connection->lock);
\r
6564 SOCK *s = connection->FirstSock;
\r
6568 e->Ip = IPToUINT(&s->RemoteIP);
\r
6569 e->Port = s->RemotePort;
\r
6570 StrCpy(e->Hostname, sizeof(e->Hostname), s->RemoteHostname);
\r
6573 StrCpy(e->Name, sizeof(e->Name), connection->Name);
\r
6574 e->ConnectedTime = TickToTime(connection->ConnectedTick);
\r
6575 e->Type = connection->Type;
\r
6577 Unlock(connection->lock);
\r
6580 UnlockList(c->ConnectionList);
\r
6582 return ERR_NO_ERROR;
\r
6585 // HUB の Radius オプションの設定
\r
6586 UINT StSetHubRadius(ADMIN *a, RPC_RADIUS *t)
\r
6588 SERVER *s = a->Server;
\r
6589 CEDAR *c = s->Cedar;
\r
6592 NO_SUPPORT_FOR_BRIDGE;
\r
6594 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
6596 return ERR_NOT_SUPPORTED;
\r
6603 h = GetHub(c, t->HubName);
\r
6609 return ERR_HUB_NOT_FOUND;
\r
6612 SetRadiusServerEx(h, t->RadiusServerName, t->RadiusPort, t->RadiusSecret, t->RadiusRetryInterval);
\r
6614 ALog(a, h, "LA_SET_HUB_RADIUS");
\r
6618 IncrementServerConfigRevision(s);
\r
6620 return ERR_NO_ERROR;
\r
6623 // HUB の Radius オプションの取得
\r
6624 UINT StGetHubRadius(ADMIN *a, RPC_RADIUS *t)
\r
6626 SERVER *s = a->Server;
\r
6627 CEDAR *c = s->Cedar;
\r
6632 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
6634 return ERR_NOT_SUPPORTED;
\r
6639 h = GetHub(c, t->HubName);
\r
6645 return ERR_HUB_NOT_FOUND;
\r
6648 Zero(t, sizeof(t));
\r
6649 GetRadiusServerEx(h, t->RadiusServerName, sizeof(t->RadiusServerName),
\r
6650 &t->RadiusPort, t->RadiusSecret, sizeof(t->RadiusSecret), &t->RadiusRetryInterval);
\r
6654 return ERR_NO_ERROR;
\r
6658 UINT StDeleteHub(ADMIN *a, RPC_DELETE_HUB *t)
\r
6660 SERVER *s = a->Server;
\r
6661 CEDAR *c = s->Cedar;
\r
6664 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
6666 return ERR_NOT_FARM_CONTROLLER;
\r
6669 if (IsEmptyStr(t->HubName) || IsSafeStr(t->HubName) == false)
\r
6671 return ERR_INVALID_PARAMETER;
\r
6674 NO_SUPPORT_FOR_BRIDGE;
\r
6676 SERVER_ADMIN_ONLY;
\r
6680 h = GetHub(c, t->HubName);
\r
6686 return ERR_HUB_NOT_FOUND;
\r
6691 IncrementServerConfigRevision(s);
\r
6696 ALog(a, NULL, "LA_DELETE_HUB", t->HubName);
\r
6698 return ERR_NO_ERROR;
\r
6702 UINT StEnumHub(ADMIN *a, RPC_ENUM_HUB *t)
\r
6704 SERVER *s = a->Server;
\r
6705 CEDAR *c = s->Cedar;
\r
6708 FreeRpcEnumHub(t);
\r
6710 Zero(t, sizeof(RPC_ENUM_HUB));
\r
6718 for (i = 0;i < LIST_NUM(c->HubList);i++)
\r
6720 HUB *h = LIST_DATA(c->HubList, i);
\r
6724 if (a->ServerAdmin == false &&
\r
6725 h->Option != NULL &&
\r
6726 StrCmpi(h->Name, a->HubName) != 0)
\r
6739 t->Hubs = ZeroMalloc(sizeof(RPC_ENUM_HUB_ITEM) * num);
\r
6742 for (j = 0;j < LIST_NUM(c->HubList);j++)
\r
6744 HUB *h = LIST_DATA(c->HubList, j);
\r
6746 if (a->ServerAdmin == false &&
\r
6747 h->Option != NULL &&
\r
6748 StrCmpi(h->Name, a->HubName) != 0)
\r
6755 RPC_ENUM_HUB_ITEM *e = &t->Hubs[i++];
\r
6757 StrCpy(e->HubName, sizeof(e->HubName), h->Name);
\r
6758 e->Online = h->Offline ? false : true;
\r
6759 e->HubType = h->Type;
\r
6761 e->NumSessions = LIST_NUM(h->SessionList);
\r
6763 LockList(h->MacTable);
\r
6765 e->NumMacTables = LIST_NUM(h->MacTable);
\r
6767 UnlockList(h->MacTable);
\r
6769 LockList(h->IpTable);
\r
6771 e->NumIpTables = LIST_NUM(h->IpTable);
\r
6773 UnlockList(h->IpTable);
\r
6775 if (h->HubDb != NULL)
\r
6777 LockList(h->HubDb->UserList);
\r
6779 e->NumUsers = LIST_NUM(h->HubDb->UserList);
\r
6781 UnlockList(h->HubDb->UserList);
\r
6783 LockList(h->HubDb->GroupList);
\r
6785 e->NumGroups = LIST_NUM(h->HubDb->GroupList);
\r
6787 UnlockList(h->HubDb->GroupList);
\r
6790 e->LastCommTime = h->LastCommTime;
\r
6791 e->LastLoginTime = h->LastLoginTime;
\r
6792 e->NumLogin = h->NumLogin;
\r
6793 e->CreatedTime = h->CreatedTime;
\r
6801 if (s->ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
6804 LockList(s->FarmMemberList);
\r
6806 for (i = 0;i < LIST_NUM(s->FarmMemberList);i++)
\r
6808 FARM_MEMBER *f = LIST_DATA(s->FarmMemberList, i);
\r
6810 LockList(f->HubList);
\r
6812 if (f->Me == false)
\r
6814 for (j = 0;j < LIST_NUM(f->HubList);j++)
\r
6816 HUB_LIST *o = LIST_DATA(f->HubList, j);
\r
6818 for (k = 0;k < t->NumHub;k++)
\r
6820 RPC_ENUM_HUB_ITEM *e = &t->Hubs[k];
\r
6822 if (StrCmpi(e->HubName, o->Name) == 0)
\r
6824 e->NumIpTables += o->NumIpTables;
\r
6825 e->NumMacTables += o->NumMacTables;
\r
6826 e->NumSessions += o->NumSessions;
\r
6832 UnlockList(f->HubList);
\r
6835 UnlockList(s->FarmMemberList);
\r
6838 return ERR_NO_ERROR;
\r
6842 UINT StGetHub(ADMIN *a, RPC_CREATE_HUB *t)
\r
6844 SERVER *s = a->Server;
\r
6845 CEDAR *c = s->Cedar;
\r
6846 UINT ret = ERR_NO_ERROR;
\r
6849 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
6851 return ERR_NOT_FARM_CONTROLLER;
\r
6854 if (IsEmptyStr(t->HubName) || IsSafeStr(t->HubName) == false)
\r
6856 return ERR_INVALID_PARAMETER;
\r
6859 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
6861 return ERR_NOT_FARM_CONTROLLER;
\r
6864 NO_SUPPORT_FOR_BRIDGE;
\r
6869 h = GetHub(c, t->HubName);
\r
6873 Zero(t, sizeof(RPC_CREATE_HUB));
\r
6877 return ERR_HUB_NOT_FOUND;
\r
6882 StrCpy(t->HubName, sizeof(t->HubName), h->Name);
\r
6883 t->Online = h->Offline ? false : true;
\r
6884 t->HubOption.MaxSession = h->Option->MaxSession;
\r
6885 t->HubOption.NoEnum = h->Option->NoEnum;
\r
6886 t->HubType = h->Type;
\r
6896 UINT StSetHub(ADMIN *a, RPC_CREATE_HUB *t)
\r
6898 SERVER *s = a->Server;
\r
6899 CEDAR *c = s->Cedar;
\r
6901 UINT ret = ERR_NO_ERROR;
\r
6903 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
6905 return ERR_NOT_FARM_CONTROLLER;
\r
6908 if (IsEmptyStr(t->HubName) || IsSafeStr(t->HubName) == false)
\r
6910 return ERR_INVALID_PARAMETER;
\r
6914 NO_SUPPORT_FOR_BRIDGE;
\r
6916 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
6918 return ERR_NOT_FARM_CONTROLLER;
\r
6921 if (s->ServerType == SERVER_TYPE_STANDALONE)
\r
6923 if (t->HubType != HUB_TYPE_STANDALONE)
\r
6925 return ERR_INVALID_PARAMETER;
\r
6929 if (s->ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
6931 if (t->HubType == HUB_TYPE_STANDALONE)
\r
6933 return ERR_INVALID_PARAMETER;
\r
6939 h = GetHub(c, t->HubName);
\r
6945 return ERR_HUB_NOT_FOUND;
\r
6948 if (h->Type != t->HubType)
\r
6951 return ERR_NOT_SUPPORTED;
\r
6954 if (IsZero(t->HashedPassword, sizeof(t->HashedPassword)) == false &&
\r
6955 IsZero(t->SecurePassword, sizeof(t->SecurePassword)) == false)
\r
6957 if (a->ServerAdmin == false && GetHubAdminOption(h, "no_change_admin_password") != 0)
\r
6960 return ERR_NOT_ENOUGH_RIGHT;
\r
6964 // 設定しようとしているパスワードが空白かどうか調べる
\r
6966 UCHAR hash1[SHA1_SIZE], hash2[SHA1_SIZE];
\r
6967 HashPassword(hash1, ADMINISTRATOR_USERNAME, "");
\r
6968 Hash(hash2, "", 0, true);
\r
6970 if (Cmp(t->HashedPassword, hash2, SHA1_SIZE) == 0 || Cmp(t->SecurePassword, hash1, SHA1_SIZE) == 0)
\r
6972 if (a->ServerAdmin == false && a->Rpc->Sock->RemoteIP.addr[0] != 127)
\r
6974 // ローカル以外から仮想 NUB 管理者モードで接続中に
\r
6975 // 仮想 HUB のパスワードを空白に設定しようとすると拒否する
\r
6977 return ERR_INVALID_PARAMETER;
\r
6984 if (a->ServerAdmin == false && h->Type != t->HubType)
\r
6986 ret = ERR_NOT_ENOUGH_RIGHT;
\r
6990 h->Type = t->HubType;
\r
6991 h->Option->MaxSession = t->HubOption.MaxSession;
\r
6992 h->Option->NoEnum = t->HubOption.NoEnum;
\r
6993 if (IsZero(t->HashedPassword, sizeof(t->HashedPassword)) == false &&
\r
6994 IsZero(t->SecurePassword, sizeof(t->SecurePassword)) == false)
\r
6996 Copy(h->HashedPassword, t->HashedPassword, SHA1_SIZE);
\r
6997 Copy(h->SecurePassword, t->SecurePassword, SHA1_SIZE);
\r
7005 if (a->ServerAdmin || GetHubAdminOption(h, "no_online") == 0)
\r
7012 if (a->ServerAdmin || GetHubAdminOption(h, "no_offline") == 0)
\r
7018 if (h->Type == HUB_TYPE_FARM_STATIC)
\r
7020 EnableSecureNAT(h, false);
\r
7023 h->CurrentVersion++;
\r
7024 SiHubUpdateProc(h);
\r
7026 IncrementServerConfigRevision(s);
\r
7028 ALog(a, h, "LA_SET_HUB");
\r
7036 UINT StCreateHub(ADMIN *a, RPC_CREATE_HUB *t)
\r
7038 SERVER *s = a->Server;
\r
7039 CEDAR *c = s->Cedar;
\r
7042 UINT current_hub_num;
\r
7045 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
7047 return ERR_NOT_FARM_CONTROLLER;
\r
7050 if (IsEmptyStr(t->HubName) || IsSafeStr(t->HubName) == false)
\r
7052 return ERR_INVALID_PARAMETER;
\r
7055 NO_SUPPORT_FOR_BRIDGE;
\r
7057 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
7059 return ERR_NOT_FARM_CONTROLLER;
\r
7062 SERVER_ADMIN_ONLY;
\r
7065 if (StrLen(t->HubName) == 0)
\r
7067 return ERR_INVALID_PARAMETER;
\r
7069 if (StartWith(t->HubName, ".") || EndWith(t->HubName, "."))
\r
7071 return ERR_INVALID_PARAMETER;
\r
7074 if (s->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
7076 return ERR_NOT_FARM_CONTROLLER;
\r
7079 if (s->ServerType == SERVER_TYPE_STANDALONE)
\r
7081 if (t->HubType != HUB_TYPE_STANDALONE)
\r
7083 return ERR_INVALID_PARAMETER;
\r
7086 else if (t->HubType != HUB_TYPE_FARM_DYNAMIC && t->HubType != HUB_TYPE_FARM_STATIC)
\r
7088 return ERR_INVALID_PARAMETER;
\r
7092 Zero(&o, sizeof(o));
\r
7093 o.MaxSession = t->HubOption.MaxSession;
\r
7094 o.NoEnum = t->HubOption.NoEnum;
\r
7095 o.ManageOnlyPrivateIP = true;
\r
7096 o.ManageOnlyLocalUnicastIPv6 = true;
\r
7097 o.NoMacAddressLog = true;
\r
7098 o.NoIPv6DefaultRouterInRAWhenIPv6 = true;
\r
7100 LockList(c->HubList);
\r
7102 current_hub_num = LIST_NUM(c->HubList);
\r
7104 UnlockList(c->HubList);
\r
7106 if (current_hub_num > GetServerCapsInt(a->Server, "i_max_hubs"))
\r
7108 return ERR_TOO_MANY_HUBS;
\r
7111 LockList(c->HubList);
\r
7113 b = IsHub(c, t->HubName);
\r
7115 UnlockList(c->HubList);
\r
7119 return ERR_HUB_ALREADY_EXISTS;
\r
7122 ALog(a, NULL, "LA_CREATE_HUB", t->HubName);
\r
7124 h = NewHub(c, t->HubName, &o);
\r
7125 Copy(h->HashedPassword, t->HashedPassword, SHA1_SIZE);
\r
7126 Copy(h->SecurePassword, t->SecurePassword, SHA1_SIZE);
\r
7128 h->Type = t->HubType;
\r
7134 h->Offline = true;
\r
7139 h->Offline = false;
\r
7143 h->CreatedTime = SystemTime64();
\r
7147 IncrementServerConfigRevision(s);
\r
7149 return ERR_NO_ERROR;
\r
7153 UINT StSetServerCipher(ADMIN *a, RPC_STR *t)
\r
7155 SERVER *s = a->Server;
\r
7156 CEDAR *c = s->Cedar;
\r
7158 if (IsEmptyStr(t->String))
\r
7160 return ERR_INVALID_PARAMETER;
\r
7163 SERVER_ADMIN_ONLY;
\r
7165 StrUpper(t->String);
\r
7167 if (CheckCipherListName(t->String) == false)
\r
7169 return ERR_CIPHER_NOT_SUPPORTED;
\r
7173 ALog(a, NULL, "LA_SET_SERVER_CIPHER", t->String);
\r
7178 SetCedarCipherList(c, t->String);
\r
7182 IncrementServerConfigRevision(s);
\r
7184 return ERR_NO_ERROR;
\r
7188 UINT StGetServerCipher(ADMIN *a, RPC_STR *t)
\r
7190 SERVER *s = a->Server;
\r
7191 CEDAR *c = s->Cedar;
\r
7194 Zero(t, sizeof(RPC_STR));
\r
7198 t->String = CopyStr(c->CipherList);
\r
7202 return ERR_NO_ERROR;
\r
7206 UINT StGetServerCert(ADMIN *a, RPC_KEY_PAIR *t)
\r
7209 SERVER *s = a->Server;
\r
7210 CEDAR *c = s->Cedar;
\r
7212 admin = a->ServerAdmin;
\r
7214 FreeRpcKeyPair(t);
\r
7215 Zero(t, sizeof(RPC_KEY_PAIR));
\r
7219 t->Cert = CloneX(c->ServerX);
\r
7222 t->Key = CloneK(c->ServerK);
\r
7227 return ERR_NO_ERROR;
\r
7231 UINT StSetServerCert(ADMIN *a, RPC_KEY_PAIR *t)
\r
7233 SERVER *s = a->Server;
\r
7234 CEDAR *c = s->Cedar;
\r
7236 SERVER_ADMIN_ONLY;
\r
7238 if (t->Cert == NULL || t->Key == NULL)
\r
7240 return ERR_PROTOCOL_ERROR;
\r
7243 if (t->Cert->is_compatible_bit == false)
\r
7245 return ERR_NOT_RSA_1024;
\r
7248 if (CheckXandK(t->Cert, t->Key) == false)
\r
7250 return ERR_PROTOCOL_ERROR;
\r
7253 SetCedarCert(c, t->Cert, t->Key);
\r
7255 ALog(a, NULL, "LA_SET_SERVER_CERT");
\r
7257 IncrementServerConfigRevision(s);
\r
7259 return ERR_NO_ERROR;
\r
7262 // サーバーファームコントローラへの接続状態を取得する
\r
7263 UINT StGetFarmConnectionStatus(ADMIN *a, RPC_FARM_CONNECTION_STATUS *t)
\r
7265 SERVER *s = a->Server;
\r
7266 CEDAR *c = s->Cedar;
\r
7267 FARM_CONTROLLER *fc;
\r
7269 if (s->ServerType != SERVER_TYPE_FARM_MEMBER)
\r
7271 return ERR_NOT_FARM_MEMBER;
\r
7274 Zero(t, sizeof(RPC_FARM_CONNECTION_STATUS));
\r
7276 fc = s->FarmController;
\r
7280 if (fc->Sock != NULL)
\r
7282 t->Ip = IPToUINT(&fc->Sock->RemoteIP);
\r
7283 t->Port = fc->Sock->RemotePort;
\r
7286 t->Online = fc->Online;
\r
7287 t->LastError = ERR_NO_ERROR;
\r
7289 if (t->Online == false)
\r
7291 t->LastError = fc->LastError;
\r
7295 t->CurrentConnectedTime = fc->CurrentConnectedTime;
\r
7298 t->StartedTime = fc->StartedTime;
\r
7299 t->FirstConnectedTime = fc->FirstConnectedTime;
\r
7301 t->NumConnected = fc->NumConnected;
\r
7302 t->NumTry = fc->NumTry;
\r
7303 t->NumFailed = fc->NumFailed;
\r
7307 return ERR_NO_ERROR;
\r
7311 UINT StEnumFarmMember(ADMIN *a, RPC_ENUM_FARM *t)
\r
7313 SERVER *s = a->Server;
\r
7314 CEDAR *c = s->Cedar;
\r
7317 FreeRpcEnumFarm(t);
\r
7318 Zero(t, sizeof(RPC_ENUM_FARM));
\r
7320 if (s->ServerType != SERVER_TYPE_FARM_CONTROLLER)
\r
7322 return ERR_NOT_FARM_CONTROLLER;
\r
7325 Zero(t, sizeof(RPC_ENUM_FARM));
\r
7327 LockList(s->FarmMemberList);
\r
7329 t->NumFarm = LIST_NUM(s->FarmMemberList);
\r
7330 t->Farms = ZeroMalloc(sizeof(RPC_ENUM_FARM_ITEM) * t->NumFarm);
\r
7332 for (i = 0;i < t->NumFarm;i++)
\r
7334 FARM_MEMBER *f = LIST_DATA(s->FarmMemberList, i);
\r
7335 RPC_ENUM_FARM_ITEM *e = &t->Farms[i];
\r
7337 e->Id = POINTER_TO_KEY(f);
\r
7338 e->Controller = f->Me;
\r
7340 if (e->Controller)
\r
7342 e->ConnectedTime = TickToTime(c->CreatedTick);
\r
7343 e->Ip = 0x0100007f;
\r
7344 GetMachineName(e->Hostname, sizeof(e->Hostname));
\r
7345 e->Point = f->Point;
\r
7346 e->NumSessions = Count(c->CurrentSessions);
\r
7347 e->NumTcpConnections = Count(c->CurrentTcpConnections);
\r
7349 e->AssignedBridgeLicense = Count(c->AssignedBridgeLicense);
\r
7350 e->AssignedClientLicense = Count(c->AssignedClientLicense);
\r
7354 e->ConnectedTime = f->ConnectedTime;
\r
7356 StrCpy(e->Hostname, sizeof(e->Hostname), f->hostname);
\r
7357 e->Point = f->Point;
\r
7358 e->NumSessions = f->NumSessions;
\r
7359 e->NumTcpConnections = f->NumTcpConnections;
\r
7361 e->AssignedBridgeLicense = f->AssignedBridgeLicense;
\r
7362 e->AssignedClientLicense = f->AssignedClientLicense;
\r
7364 e->NumHubs = LIST_NUM(f->HubList);
\r
7367 UnlockList(s->FarmMemberList);
\r
7369 return ERR_NO_ERROR;
\r
7372 // サーバーファームメンバ情報の取得
\r
7373 UINT StGetFarmInfo(ADMIN *a, RPC_FARM_INFO *t)
\r
7375 SERVER *s = a->Server;
\r
7378 UINT ret = ERR_NO_ERROR;
\r
7380 FreeRpcFarmInfo(t);
\r
7381 Zero(t, sizeof(RPC_FARM_INFO));
\r
7383 if (s->ServerType != SERVER_TYPE_FARM_CONTROLLER)
\r
7385 return ERR_NOT_FARM_CONTROLLER;
\r
7388 LockList(s->FarmMemberList);
\r
7390 if (IsInListKey(s->FarmMemberList, id))
\r
7392 FARM_MEMBER *f = ListKeyToPointer(s->FarmMemberList, id);
\r
7395 t->Controller = f->Me;
\r
7396 t->Weight = f->Weight;
\r
7398 LockList(f->HubList);
\r
7400 t->NumFarmHub = LIST_NUM(f->HubList);
\r
7401 t->FarmHubs = ZeroMalloc(sizeof(RPC_FARM_HUB) * t->NumFarmHub);
\r
7403 for (i = 0;i < t->NumFarmHub;i++)
\r
7405 RPC_FARM_HUB *h = &t->FarmHubs[i];
\r
7406 HUB_LIST *hh = LIST_DATA(f->HubList, i);
\r
7408 h->DynamicHub = hh->DynamicHub;
\r
7409 StrCpy(h->HubName, sizeof(h->HubName), hh->Name);
\r
7412 UnlockList(f->HubList);
\r
7414 if (t->Controller)
\r
7416 t->ConnectedTime = TickToTime(s->Cedar->CreatedTick);
\r
7417 t->Ip = 0x0100007f;
\r
7418 GetMachineName(t->Hostname, sizeof(t->Hostname));
\r
7419 t->Point = f->Point;
\r
7421 LockList(s->ServerListenerList);
\r
7425 for (i = 0;i < LIST_NUM(s->ServerListenerList);i++)
\r
7427 SERVER_LISTENER *o = LIST_DATA(s->ServerListenerList, i);
\r
7433 t->Ports = ZeroMalloc(sizeof(UINT) * t->NumPort);
\r
7435 for (i = 0;i < LIST_NUM(s->ServerListenerList);i++)
\r
7437 SERVER_LISTENER *o = LIST_DATA(s->ServerListenerList, i);
\r
7440 t->Ports[n++] = o->Port;
\r
7444 UnlockList(s->ServerListenerList);
\r
7446 t->ServerCert = CloneX(s->Cedar->ServerX);
\r
7447 t->NumSessions = Count(s->Cedar->CurrentSessions);
\r
7448 t->NumTcpConnections = Count(s->Cedar->CurrentTcpConnections);
\r
7452 t->ConnectedTime = f->ConnectedTime;
\r
7454 StrCpy(t->Hostname, sizeof(t->Hostname), f->hostname);
\r
7455 t->Point = f->Point;
\r
7456 t->NumPort = f->NumPort;
\r
7457 t->Ports = ZeroMalloc(sizeof(UINT) * t->NumPort);
\r
7458 Copy(t->Ports, f->Ports, sizeof(UINT) * t->NumPort);
\r
7459 t->ServerCert = CloneX(f->ServerCert);
\r
7460 t->NumSessions = f->NumSessions;
\r
7461 t->NumTcpConnections = f->NumTcpConnections;
\r
7466 ret = ERR_OBJECT_NOT_FOUND;
\r
7469 UnlockList(s->FarmMemberList);
\r
7475 UINT StGetFarmSetting(ADMIN *a, RPC_FARM *t)
\r
7479 Zero(t, sizeof(RPC_FARM));
\r
7482 t->ServerType = s->ServerType;
\r
7483 t->ControllerOnly = s->ControllerOnly;
\r
7484 t->Weight = s->Weight;
\r
7486 if (t->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
7488 t->NumPort = s->NumPublicPort;
\r
7489 t->Ports = ZeroMalloc(sizeof(UINT) * t->NumPort);
\r
7490 Copy(t->Ports, s->PublicPorts, sizeof(UINT) * t->NumPort);
\r
7491 t->PublicIp = s->PublicIp;
\r
7492 StrCpy(t->ControllerName, sizeof(t->ControllerName), s->ControllerName);
\r
7493 t->ControllerPort = s->ControllerPort;
\r
7498 t->Ports = ZeroMalloc(0);
\r
7501 return ERR_NO_ERROR;
\r
7505 UINT StSetFarmSetting(ADMIN *a, RPC_FARM *t)
\r
7507 bool cluster_allowed = false;
\r
7509 SERVER_ADMIN_ONLY;
\r
7510 NO_SUPPORT_FOR_BRIDGE;
\r
7512 cluster_allowed = GetServerCapsInt(a->Server, "b_support_cluster");
\r
7514 if (t->ServerType != SERVER_TYPE_STANDALONE && cluster_allowed == false)
\r
7516 // クラスタとして動作が許可されていないのにクラスタ化しようとすると
\r
7518 return ERR_NOT_SUPPORTED;
\r
7521 ALog(a, NULL, "LA_SET_FARM_SETTING");
\r
7523 IncrementServerConfigRevision(a->Server);
\r
7525 SiSetServerType(a->Server, t->ServerType, t->PublicIp, t->NumPort, t->Ports,
\r
7526 t->ControllerName, t->ControllerPort, t->MemberPassword, t->Weight, t->ControllerOnly);
\r
7528 return ERR_NO_ERROR;
\r
7532 UINT StSetServerPassword(ADMIN *a, RPC_SET_PASSWORD *t)
\r
7534 SERVER_ADMIN_ONLY;
\r
7536 Copy(a->Server->HashedPassword, t->HashedPassword, SHA1_SIZE);
\r
7538 ALog(a, NULL, "LA_SET_SERVER_PASSWORD");
\r
7540 IncrementServerConfigRevision(a->Server);
\r
7542 return ERR_NO_ERROR;
\r
7546 UINT StEnableListener(ADMIN *a, RPC_LISTENER *t)
\r
7548 UINT ret = ERR_NO_ERROR;
\r
7550 SERVER_ADMIN_ONLY;
\r
7552 LockList(a->Server->ServerListenerList);
\r
7556 if (SiEnableListener(a->Server, t->Port) == false)
\r
7558 ret = ERR_LISTENER_NOT_FOUND;
\r
7562 ALog(a, NULL, "LA_ENABLE_LISTENER", t->Port);
\r
7567 if (SiDisableListener(a->Server, t->Port) == false)
\r
7569 ret = ERR_LISTENER_NOT_FOUND;
\r
7573 ALog(a, NULL, "LA_DISABLE_LISTENER", t->Port);
\r
7577 UnlockList(a->Server->ServerListenerList);
\r
7579 IncrementServerConfigRevision(a->Server);
\r
7587 UINT StDeleteListener(ADMIN *a, RPC_LISTENER *t)
\r
7589 UINT ret = ERR_NO_ERROR;
\r
7591 SERVER_ADMIN_ONLY;
\r
7593 LockList(a->Server->ServerListenerList);
\r
7595 if (SiDeleteListener(a->Server, t->Port) == false)
\r
7597 ret = ERR_LISTENER_NOT_FOUND;
\r
7601 ALog(a, NULL, "LA_DELETE_LISTENER", t->Port);
\r
7603 IncrementServerConfigRevision(a->Server);
\r
7606 UnlockList(a->Server->ServerListenerList);
\r
7612 UINT StEnumListener(ADMIN *a, RPC_LISTENER_LIST *t)
\r
7614 CEDAR *c = a->Server->Cedar;
\r
7617 FreeRpcListenerList(t);
\r
7618 Zero(t, sizeof(RPC_LISTENER_LIST));
\r
7620 LockList(a->Server->ServerListenerList);
\r
7622 t->NumPort = LIST_NUM(a->Server->ServerListenerList);
\r
7623 t->Ports = ZeroMalloc(sizeof(UINT) * t->NumPort);
\r
7624 t->Enables = ZeroMalloc(sizeof(bool) * t->NumPort);
\r
7625 t->Errors = ZeroMalloc(sizeof(bool) * t->NumPort);
\r
7627 for (i = 0;i < t->NumPort;i++)
\r
7629 SERVER_LISTENER *o = LIST_DATA(a->Server->ServerListenerList, i);
\r
7631 t->Ports[i] = o->Port;
\r
7632 t->Enables[i] = o->Enabled;
\r
7633 if (t->Enables[i])
\r
7635 if (o->Listener->Status == LISTENER_STATUS_TRYING)
\r
7637 t->Errors[i] = true;
\r
7642 UnlockList(a->Server->ServerListenerList);
\r
7644 return ERR_NO_ERROR;
\r
7648 UINT StCreateListener(ADMIN *a, RPC_LISTENER *t)
\r
7650 UINT ret = ERR_NO_ERROR;
\r
7651 CEDAR *c = a->Server->Cedar;
\r
7653 if (t->Port == 0 || t->Port > 65535)
\r
7655 return ERR_INVALID_PARAMETER;
\r
7658 SERVER_ADMIN_ONLY;
\r
7660 LockList(a->Server->ServerListenerList);
\r
7662 if (SiAddListener(a->Server, t->Port, t->Enable) == false)
\r
7664 ret = ERR_LISTENER_ALREADY_EXISTS;
\r
7668 ALog(a, NULL, "LA_CREATE_LISTENER", t->Port);
\r
7670 IncrementServerConfigRevision(a->Server);
\r
7673 UnlockList(a->Server->ServerListenerList);
\r
7681 UINT StGetServerStatus(ADMIN *a, RPC_SERVER_STATUS *t)
\r
7686 c = a->Server->Cedar;
\r
7688 Zero(t, sizeof(RPC_SERVER_STATUS));
\r
7690 Lock(c->TrafficLock);
\r
7692 Copy(&t->Traffic, c->Traffic, sizeof(TRAFFIC));
\r
7694 Unlock(c->TrafficLock);
\r
7696 GetMemInfo(&t->MemInfo);
\r
7698 t->ServerType = a->Server->ServerType;
\r
7699 t->NumTcpConnections = t->NumTcpConnectionsLocal = t->NumTcpConnectionsRemote = 0;
\r
7700 t->NumSessionsTotal = t->NumSessionsLocal = t->NumSessionsRemote = 0;
\r
7702 t->NumTcpConnectionsLocal = Count(c->CurrentTcpConnections);
\r
7704 if (a->Server->ServerType == SERVER_TYPE_FARM_CONTROLLER)
\r
7706 LockList(a->Server->FarmMemberList);
\r
7708 for (i = 0;i < LIST_NUM(a->Server->FarmMemberList);i++)
\r
7710 FARM_MEMBER *f = LIST_DATA(a->Server->FarmMemberList, i);
\r
7712 if (f->Me == false)
\r
7714 t->NumTcpConnectionsRemote += f->NumTcpConnections;
\r
7715 t->NumSessionsRemote += f->NumSessions;
\r
7716 AddTraffic(&t->Traffic, &f->Traffic);
\r
7720 UnlockList(a->Server->FarmMemberList);
\r
7723 t->NumMacTables = t->NumIpTables = t->NumUsers = t->NumGroups = 0;
\r
7726 LockList(c->HubList);
\r
7728 t->NumHubTotal = LIST_NUM(c->HubList);
\r
7730 t->NumHubStandalone = t->NumHubDynamic = t->NumHubStatic = 0;
\r
7732 for (i = 0;i < LIST_NUM(c->HubList);i++)
\r
7734 HUB *h = LIST_DATA(c->HubList, i);
\r
7739 case HUB_TYPE_STANDALONE:
\r
7740 t->NumHubStandalone++;
\r
7743 case HUB_TYPE_FARM_STATIC:
\r
7744 t->NumHubStatic++;
\r
7747 case HUB_TYPE_FARM_DYNAMIC:
\r
7748 t->NumHubDynamic++;
\r
7753 t->NumMacTables += LIST_NUM(h->MacTable);
\r
7754 t->NumIpTables += LIST_NUM(h->IpTable);
\r
7756 if (h->HubDb != NULL)
\r
7758 t->NumUsers += LIST_NUM(h->HubDb->UserList);
\r
7759 t->NumGroups += LIST_NUM(h->HubDb->GroupList);
\r
7765 UnlockList(c->HubList);
\r
7768 t->NumSessionsLocal = Count(c->CurrentSessions);
\r
7769 t->NumSessionsTotal = t->NumSessionsLocal + t->NumSessionsRemote;
\r
7770 t->NumTcpConnections = t->NumTcpConnectionsLocal + t->NumTcpConnectionsRemote;
\r
7772 t->AssignedBridgeLicenses = Count(c->AssignedBridgeLicense);
\r
7773 t->AssignedClientLicenses = Count(c->AssignedClientLicense);
\r
7775 t->AssignedBridgeLicensesTotal = a->Server->CurrentAssignedBridgeLicense;
\r
7776 t->AssignedClientLicensesTotal = a->Server->CurrentAssignedClientLicense;
\r
7778 t->CurrentTick = Tick64();
\r
7779 t->CurrentTime = SystemTime64();
\r
7781 t->StartTime = a->Server->StartTime;
\r
7783 return ERR_NO_ERROR;
\r
7787 UINT StGetServerInfo(ADMIN *a, RPC_SERVER_INFO *t)
\r
7792 if (a == NULL || t == NULL)
\r
7794 return ERR_INTERNAL_ERROR;
\r
7797 FreeRpcServerInfo(t);
\r
7798 Zero(t, sizeof(RPC_SERVER_INFO));
\r
7800 c = a->Server->Cedar;
\r
7802 GetServerProductName(a->Server, t->ServerProductName, sizeof(t->ServerProductName));
\r
7804 StrCpy(t->ServerVersionString, sizeof(t->ServerVersionString), c->VerString);
\r
7805 StrCpy(t->ServerBuildInfoString, sizeof(t->ServerBuildInfoString), c->BuildInfo);
\r
7806 t->ServerVerInt = c->Version;
\r
7807 t->ServerBuildInt = c->Build;
\r
7808 GetMachineName(t->ServerHostName, sizeof(t->ServerHostName));
\r
7809 t->ServerType = c->Server->ServerType;
\r
7811 info = GetOsInfo();
\r
7814 CopyOsInfo(&t->OsInfo, info);
\r
7817 return ERR_NO_ERROR;
\r
7821 void CopyOsInfo(OS_INFO *dst, OS_INFO *info)
\r
7824 if (info == NULL || dst == NULL)
\r
7829 dst->OsType = info->OsType;
\r
7830 dst->OsServicePack = info->OsServicePack;
\r
7831 dst->OsSystemName = CopyStr(info->OsSystemName);
\r
7832 dst->OsProductName = CopyStr(info->OsProductName);
\r
7833 dst->OsVendorName = CopyStr(info->OsVendorName);
\r
7834 dst->OsVersion = CopyStr(info->OsVersion);
\r
7835 dst->KernelName = CopyStr(info->KernelName);
\r
7836 dst->KernelVersion = CopyStr(info->KernelVersion);
\r
7840 void InRpcWinVer(RPC_WINVER *t, PACK *p)
\r
7843 if (t == NULL || p == NULL)
\r
7848 Zero(t, sizeof(RPC_WINVER));
\r
7850 t->IsWindows = PackGetBool(p, "V_IsWindows");
\r
7851 t->IsNT = PackGetBool(p, "V_IsNT");
\r
7852 t->IsServer = PackGetBool(p, "V_IsServer");
\r
7853 t->IsBeta = PackGetBool(p, "V_IsBeta");
\r
7854 t->VerMajor = PackGetInt(p, "V_VerMajor");
\r
7855 t->VerMinor = PackGetInt(p, "V_VerMinor");
\r
7856 t->Build = PackGetInt(p, "V_Build");
\r
7857 t->ServicePack = PackGetInt(p, "V_ServicePack");
\r
7858 PackGetStr(p, "V_Title", t->Title, sizeof(t->Title));
\r
7860 void OutRpcWinVer(PACK *p, RPC_WINVER *t)
\r
7863 if (t == NULL || p == NULL)
\r
7868 PackAddBool(p, "V_IsWindows", t->IsWindows);
\r
7869 PackAddBool(p, "V_IsNT", t->IsNT);
\r
7870 PackAddBool(p, "V_IsServer", t->IsServer);
\r
7871 PackAddBool(p, "V_IsBeta", t->IsBeta);
\r
7872 PackAddInt(p, "V_VerMajor", t->VerMajor);
\r
7873 PackAddInt(p, "V_VerMinor", t->VerMinor);
\r
7874 PackAddInt(p, "V_Build", t->Build);
\r
7875 PackAddInt(p, "V_ServicePack", t->ServicePack);
\r
7876 PackAddStr(p, "V_Title", t->Title);
\r
7880 void InRpcMsg(RPC_MSG *t, PACK *p)
\r
7885 if (t == NULL || p == NULL)
\r
7890 Zero(t, sizeof(RPC_MSG));
\r
7892 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
7893 size = PackGetDataSize(p, "Msg");
\r
7894 utf8 = ZeroMalloc(size + 8);
\r
7895 PackGetData(p, "Msg", utf8);
\r
7896 t->Msg = CopyUtfToUni(utf8);
\r
7899 void OutRpcMsg(PACK *p, RPC_MSG *t)
\r
7904 if (t == NULL || p == NULL)
\r
7909 PackAddStr(p, "HubName", t->HubName);
\r
7910 utf8 = CopyUniToUtf(t->Msg);
\r
7911 size = StrLen(utf8);
\r
7912 PackAddData(p, "Msg", utf8, size);
\r
7915 void FreeRpcMsg(RPC_MSG *t)
\r
7926 // RPC_ENUM_ETH_VLAN
\r
7927 void InRpcEnumEthVLan(RPC_ENUM_ETH_VLAN *t, PACK *p)
\r
7931 if (t == NULL || p == NULL)
\r
7936 Zero(t, sizeof(RPC_ENUM_ETH_VLAN));
\r
7938 t->NumItem = PackGetIndexCount(p, "DeviceName");
\r
7939 t->Items = ZeroMalloc(sizeof(RPC_ENUM_ETH_VLAN_ITEM) * t->NumItem);
\r
7941 for (i = 0;i < t->NumItem;i++)
\r
7943 RPC_ENUM_ETH_VLAN_ITEM *e = &t->Items[i];
\r
7945 PackGetStrEx(p, "DeviceName", e->DeviceName, sizeof(e->DeviceName), i);
\r
7946 PackGetStrEx(p, "Guid", e->Guid, sizeof(e->Guid), i);
\r
7947 PackGetStrEx(p, "DeviceInstanceId", e->DeviceInstanceId, sizeof(e->DeviceInstanceId), i);
\r
7948 PackGetStrEx(p, "DriverName", e->DriverName, sizeof(e->DriverName), i);
\r
7949 PackGetStrEx(p, "DriverType", e->DriverType, sizeof(e->DriverType), i);
\r
7950 e->Support = PackGetBoolEx(p, "Support", i);
\r
7951 e->Enabled = PackGetBoolEx(p, "Enabled", i);
\r
7954 void OutRpcEnumEthVLan(PACK *p, RPC_ENUM_ETH_VLAN *t)
\r
7958 if (t == NULL || p == NULL)
\r
7963 for (i = 0;i < t->NumItem;i++)
\r
7965 RPC_ENUM_ETH_VLAN_ITEM *e = &t->Items[i];
\r
7967 PackAddStrEx(p, "DeviceName", e->DeviceName, i, t->NumItem);
\r
7968 PackAddStrEx(p, "Guid", e->Guid, i, t->NumItem);
\r
7969 PackAddStrEx(p, "DeviceInstanceId", e->DeviceInstanceId, i, t->NumItem);
\r
7970 PackAddStrEx(p, "DriverName", e->DriverName, i, t->NumItem);
\r
7971 PackAddStrEx(p, "DriverType", e->DriverType, i, t->NumItem);
\r
7972 PackAddBoolEx(p, "Support", e->Support, i, t->NumItem);
\r
7973 PackAddBoolEx(p, "Enabled", e->Enabled, i, t->NumItem);
\r
7976 void FreeRpcEnumEthVLan(RPC_ENUM_ETH_VLAN *t)
\r
7987 // RPC_ENUM_LOG_FILE
\r
7988 void InRpcEnumLogFile(RPC_ENUM_LOG_FILE *t, PACK *p)
\r
7992 if (t == NULL || p == NULL)
\r
7997 Zero(t, sizeof(RPC_ENUM_LOG_FILE));
\r
7998 t->NumItem = PackGetInt(p, "NumItem");
\r
7999 t->Items = ZeroMalloc(sizeof(RPC_ENUM_LOG_FILE_ITEM) * t->NumItem);
\r
8001 for (i = 0;i < t->NumItem;i++)
\r
8003 RPC_ENUM_LOG_FILE_ITEM *e = &t->Items[i];
\r
8005 PackGetStrEx(p, "FilePath", e->FilePath, sizeof(e->FilePath), i);
\r
8006 PackGetStrEx(p, "ServerName", e->ServerName, sizeof(e->ServerName), i);
\r
8007 e->FileSize = PackGetIntEx(p, "FileSize", i);
\r
8008 e->UpdatedTime = PackGetInt64Ex(p, "UpdatedTime", i);
\r
8011 void OutRpcEnumLogFile(PACK *p, RPC_ENUM_LOG_FILE *t)
\r
8015 if (t == NULL || p == NULL)
\r
8020 PackAddInt(p, "NumItem", t->NumItem);
\r
8022 for (i = 0;i < t->NumItem;i++)
\r
8024 RPC_ENUM_LOG_FILE_ITEM *e = &t->Items[i];
\r
8026 PackAddStrEx(p, "FilePath", e->FilePath, i, t->NumItem);
\r
8027 PackAddStrEx(p, "ServerName", e->ServerName, i, t->NumItem);
\r
8028 PackAddIntEx(p, "FileSize", e->FileSize, i, t->NumItem);
\r
8029 PackAddInt64Ex(p, "UpdatedTime", e->UpdatedTime, i, t->NumItem);
\r
8032 void FreeRpcEnumLogFile(RPC_ENUM_LOG_FILE *t)
\r
8042 void AdjoinRpcEnumLogFile(RPC_ENUM_LOG_FILE *t, RPC_ENUM_LOG_FILE *src)
\r
8047 if (t == NULL || src == NULL)
\r
8052 o = NewListFast(CmpLogFile);
\r
8054 for (i = 0;i < t->NumItem;i++)
\r
8056 RPC_ENUM_LOG_FILE_ITEM *e = &t->Items[i];
\r
8057 LOG_FILE *f = ZeroMalloc(sizeof(LOG_FILE));
\r
8059 f->FileSize = e->FileSize;
\r
8060 StrCpy(f->Path, sizeof(f->Path), e->FilePath);
\r
8061 StrCpy(f->ServerName, sizeof(f->ServerName), e->ServerName);
\r
8062 f->UpdatedTime = e->UpdatedTime;
\r
8067 for (i = 0;i < src->NumItem;i++)
\r
8069 RPC_ENUM_LOG_FILE_ITEM *e = &src->Items[i];
\r
8070 LOG_FILE *f = ZeroMalloc(sizeof(LOG_FILE));
\r
8072 f->FileSize = e->FileSize;
\r
8073 StrCpy(f->Path, sizeof(f->Path), e->FilePath);
\r
8074 StrCpy(f->ServerName, sizeof(f->ServerName), e->ServerName);
\r
8075 f->UpdatedTime = e->UpdatedTime;
\r
8080 FreeRpcEnumLogFile(t);
\r
8084 Zero(t, sizeof(RPC_ENUM_LOG_FILE));
\r
8085 t->NumItem = LIST_NUM(o);
\r
8086 t->Items = ZeroMalloc(sizeof(RPC_ENUM_LOG_FILE_ITEM) * t->NumItem);
\r
8088 for (i = 0;i < t->NumItem;i++)
\r
8090 LOG_FILE *f = LIST_DATA(o, i);
\r
8091 RPC_ENUM_LOG_FILE_ITEM *e = &t->Items[i];
\r
8093 StrCpy(e->FilePath, sizeof(e->FilePath), f->Path);
\r
8094 StrCpy(e->ServerName, sizeof(e->ServerName), f->ServerName);
\r
8095 e->FileSize = f->FileSize;
\r
8096 e->UpdatedTime = f->UpdatedTime;
\r
8099 FreeEnumLogFile(o);
\r
8102 // RPC_READ_LOG_FILE
\r
8103 void InRpcReadLogFile(RPC_READ_LOG_FILE *t, PACK *p)
\r
8106 if (t == NULL || p == NULL)
\r
8111 Zero(t, sizeof(RPC_READ_LOG_FILE));
\r
8112 PackGetStr(p, "FilePath", t->FilePath, sizeof(t->FilePath));
\r
8113 PackGetStr(p, "ServerName", t->ServerName, sizeof(t->ServerName));
\r
8114 t->Offset = PackGetInt(p, "Offset");
\r
8116 t->Buffer = PackGetBuf(p, "Buffer");
\r
8118 void OutRpcReadLogFile(PACK *p, RPC_READ_LOG_FILE *t)
\r
8121 if (p == NULL || t == NULL)
\r
8126 PackAddStr(p, "FilePath", t->FilePath);
\r
8127 PackAddStr(p, "ServerName", t->ServerName);
\r
8128 PackAddInt(p, "Offset", t->Offset);
\r
8130 if (t->Buffer != NULL)
\r
8132 PackAddBuf(p, "Buffer", t->Buffer);
\r
8135 void FreeRpcReadLogFile(RPC_READ_LOG_FILE *t)
\r
8143 if (t->Buffer != NULL)
\r
8145 FreeBuf(t->Buffer);
\r
8150 void InRpcAcList(RPC_AC_LIST *t, PACK *p)
\r
8156 if (t == NULL || p == NULL)
\r
8161 Zero(t, sizeof(RPC_AC_LIST));
\r
8164 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
8165 num = PackGetInt(p, "NumItem");
\r
8167 for (i = 0;i < num;i++)
\r
8169 AC *ac = ZeroMalloc(sizeof(AC));
\r
8171 ac->Deny = PackGetBoolEx(p, "Deny", i);
\r
8172 PackGetIpEx(p, "IpAddress", &ac->IpAddress, i);
\r
8173 ac->Masked = PackGetBoolEx(p, "Masked", i);
\r
8177 PackGetIpEx(p, "SubnetMask", &ac->SubnetMask, i);
\r
8180 PackGetIntEx(p, "testtest", i);
\r
8182 ac->Priority = PackGetIntEx(p, "Priority", i);
\r
8191 void OutRpcAcList(PACK *p, RPC_AC_LIST *t)
\r
8196 if (t == NULL || p == NULL)
\r
8202 num = LIST_NUM(o);
\r
8204 PackAddInt(p, "NumItem", num);
\r
8206 PackAddStr(p, "HubName", t->HubName);
\r
8208 for (i = 0;i < num;i++)
\r
8210 AC *ac = LIST_DATA(o, i);
\r
8212 PackAddBoolEx(p, "Deny", ac->Deny, i, num);
\r
8213 PackAddIpEx(p, "IpAddress", &ac->IpAddress, i, num);
\r
8214 PackAddBoolEx(p, "Masked", ac->Masked, i, num);
\r
8216 PackAddIpEx(p, "SubnetMask", &ac->SubnetMask, i, num);
\r
8218 PackAddIntEx(p, "Priority", ac->Priority, i, num);
\r
8221 void FreeRpcAcList(RPC_AC_LIST *t)
\r
8233 void InRpcInt(RPC_INT *t, PACK *p)
\r
8236 if (t == NULL || p == NULL)
\r
8241 Zero(t, sizeof(RPC_INT));
\r
8242 t->IntValue = PackGetInt(p, "IntValue");
\r
8244 void OutRpcInt(PACK *p, RPC_INT *t)
\r
8247 if (t == NULL || p == NULL)
\r
8252 PackAddInt(p, "IntValue", t->IntValue);
\r
8256 void InRpcEnumCrl(RPC_ENUM_CRL *t, PACK *p)
\r
8260 if (t == NULL || p == NULL)
\r
8265 Zero(t, sizeof(RPC_ENUM_CRL));
\r
8266 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
8267 t->NumItem = PackGetInt(p, "NumItem");
\r
8269 t->Items = ZeroMalloc(sizeof(RPC_ENUM_CRL_ITEM) * t->NumItem);
\r
8270 for (i = 0;i < t->NumItem;i++)
\r
8272 RPC_ENUM_CRL_ITEM *e = &t->Items[i];
\r
8274 e->Key = PackGetIntEx(p, "Key", i);
\r
8275 PackGetUniStrEx(p, "CrlInfo", e->CrlInfo, sizeof(e->CrlInfo), i);
\r
8278 void OutRpcEnumCrl(PACK *p, RPC_ENUM_CRL *t)
\r
8282 if (t == NULL || p == NULL)
\r
8287 PackAddStr(p, "HubName", t->HubName);
\r
8288 PackAddInt(p, "NumItem", t->NumItem);
\r
8290 for (i = 0;i < t->NumItem;i++)
\r
8292 RPC_ENUM_CRL_ITEM *e = &t->Items[i];
\r
8294 PackAddIntEx(p, "Key", e->Key, i, t->NumItem);
\r
8295 PackAddUniStrEx(p, "CrlInfo", e->CrlInfo, i, t->NumItem);
\r
8298 void FreeRpcEnumCrl(RPC_ENUM_CRL *t)
\r
8310 void InRpcCrl(RPC_CRL *t, PACK *p)
\r
8314 wchar_t tmp[MAX_SIZE];
\r
8316 if (t == NULL || p == NULL)
\r
8321 Zero(t, sizeof(RPC_CRL));
\r
8322 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
8323 t->Key = PackGetInt(p, "Key");
\r
8324 b = PackGetBuf(p, "Serial");
\r
8325 t->Crl = ZeroMalloc(sizeof(CRL));
\r
8328 t->Crl->Serial = NewXSerial(b->Buf, b->Size);
\r
8331 t->Crl->Name = ZeroMalloc(sizeof(NAME));
\r
8333 if (PackGetUniStr(p, "CommonName", tmp, sizeof(tmp)))
\r
8335 n->CommonName = CopyUniStr(tmp);
\r
8337 if (PackGetUniStr(p, "Organization", tmp, sizeof(tmp)))
\r
8339 n->Organization = CopyUniStr(tmp);
\r
8341 if (PackGetUniStr(p, "Unit", tmp, sizeof(tmp)))
\r
8343 n->Unit = CopyUniStr(tmp);
\r
8345 if (PackGetUniStr(p, "Country", tmp, sizeof(tmp)))
\r
8347 n->Country = CopyUniStr(tmp);
\r
8349 if (PackGetUniStr(p, "State", tmp, sizeof(tmp)))
\r
8351 n->State = CopyUniStr(tmp);
\r
8353 if (PackGetUniStr(p, "Local", tmp, sizeof(tmp)))
\r
8355 n->Local = CopyUniStr(tmp);
\r
8357 if (PackGetDataSize(p, "DigestMD5") == MD5_SIZE)
\r
8359 PackGetData(p, "DigestMD5", t->Crl->DigestMD5);
\r
8361 if (PackGetDataSize(p, "DigestSHA1") == SHA1_SIZE)
\r
8363 PackGetData(p, "DigestSHA1", t->Crl->DigestSHA1);
\r
8366 void OutRpcCrl(PACK *p, RPC_CRL *t)
\r
8370 if (p == NULL || t == NULL)
\r
8375 PackAddStr(p, "HubName", t->HubName);
\r
8376 PackAddInt(p, "Key", t->Key);
\r
8378 if (t->Crl == NULL)
\r
8383 if (t->Crl->Serial != NULL)
\r
8385 PackAddData(p, "Serial", t->Crl->Serial->data, t->Crl->Serial->size);
\r
8388 if (n->CommonName != NULL)
\r
8390 PackAddUniStr(p, "CommonName", n->CommonName);
\r
8392 if (n->Organization != NULL)
\r
8394 PackAddUniStr(p, "Organization", n->Organization);
\r
8396 if (n->Unit != NULL)
\r
8398 PackAddUniStr(p, "Unit", n->Unit);
\r
8400 if (n->Country != NULL)
\r
8402 PackAddUniStr(p, "Country", n->Country);
\r
8404 if (n->State != NULL)
\r
8406 PackAddUniStr(p, "State", n->State);
\r
8408 if (n->Local != NULL)
\r
8410 PackAddUniStr(p, "Local", n->Local);
\r
8412 if (IsZero(t->Crl->DigestMD5, MD5_SIZE) == false)
\r
8414 PackAddData(p, "DigestMD5", t->Crl->DigestMD5, MD5_SIZE);
\r
8416 if (IsZero(t->Crl->DigestSHA1, SHA1_SIZE) == false)
\r
8418 PackAddData(p, "DigestSHA1", t->Crl->DigestSHA1, SHA1_SIZE);
\r
8421 void FreeRpcCrl(RPC_CRL *t)
\r
8432 // RPC_ENUM_L3TABLE
\r
8433 void InRpcEnumL3Table(RPC_ENUM_L3TABLE *t, PACK *p)
\r
8437 if (t == NULL || p == NULL)
\r
8442 Zero(t, sizeof(RPC_ENUM_L3TABLE));
\r
8443 t->NumItem = PackGetInt(p, "NumItem");
\r
8444 PackGetStr(p, "Name", t->Name, sizeof(t->Name));
\r
8445 t->Items = ZeroMalloc(sizeof(RPC_L3TABLE) * t->NumItem);
\r
8447 for (i = 0;i < t->NumItem;i++)
\r
8449 RPC_L3TABLE *e = &t->Items[i];
\r
8451 e->NetworkAddress = PackGetIp32Ex(p, "NetworkAddress", i);
\r
8452 e->SubnetMask = PackGetIp32Ex(p, "SubnetMask", i);
\r
8453 e->GatewayAddress = PackGetIp32Ex(p, "GatewayAddress", i);
\r
8454 e->Metric = PackGetIntEx(p, "Metric", i);
\r
8457 void OutRpcEnumL3Table(PACK *p, RPC_ENUM_L3TABLE *t)
\r
8461 if (p == NULL || t == NULL)
\r
8466 PackAddInt(p, "NumItem", t->NumItem);
\r
8467 PackAddStr(p, "Name", t->Name);
\r
8469 for (i = 0;i < t->NumItem;i++)
\r
8471 RPC_L3TABLE *e = &t->Items[i];
\r
8473 PackAddIp32Ex(p, "NetworkAddress", e->NetworkAddress, i, t->NumItem);
\r
8474 PackAddIp32Ex(p, "SubnetMask", e->SubnetMask, i, t->NumItem);
\r
8475 PackAddIp32Ex(p, "GatewayAddress", e->GatewayAddress, i, t->NumItem);
\r
8476 PackAddIntEx(p, "Metric", e->Metric, i, t->NumItem);
\r
8479 void FreeRpcEnumL3Table(RPC_ENUM_L3TABLE *t)
\r
8485 void InRpcL3Table(RPC_L3TABLE *t, PACK *p)
\r
8488 if (t == NULL || p == NULL)
\r
8493 Zero(t, sizeof(RPC_L3TABLE));
\r
8494 PackGetStr(p, "Name", t->Name, sizeof(t->Name));
\r
8495 t->NetworkAddress = PackGetIp32(p, "NetworkAddress");
\r
8496 t->SubnetMask = PackGetIp32(p, "SubnetMask");
\r
8497 t->GatewayAddress = PackGetIp32(p, "GatewayAddress");
\r
8498 t->Metric = PackGetInt(p, "Metric");
\r
8500 void OutRpcL3Table(PACK *p, RPC_L3TABLE *t)
\r
8503 if (p == NULL || t == NULL)
\r
8508 PackAddStr(p, "Name", t->Name);
\r
8509 PackAddIp32(p, "NetworkAddress", t->NetworkAddress);
\r
8510 PackAddIp32(p, "SubnetMask", t->SubnetMask);
\r
8511 PackAddIp32(p, "GatewayAddress", t->GatewayAddress);
\r
8512 PackAddInt(p, "Metric", t->Metric);
\r
8516 void InRpcEnumL3If(RPC_ENUM_L3IF *t, PACK *p)
\r
8520 if (t == NULL || p == NULL)
\r
8525 Zero(t, sizeof(RPC_ENUM_L3IF));
\r
8526 t->NumItem = PackGetInt(p, "NumItem");
\r
8527 PackGetStr(p, "Name", t->Name, sizeof(t->Name));
\r
8528 t->Items = ZeroMalloc(sizeof(RPC_L3IF) * t->NumItem);
\r
8530 for (i = 0;i < t->NumItem;i++)
\r
8532 RPC_L3IF *f = &t->Items[i];
\r
8534 PackGetStrEx(p, "HubName", f->HubName, sizeof(f->HubName), i);
\r
8535 f->IpAddress = PackGetIp32Ex(p, "IpAddress", i);
\r
8536 f->SubnetMask = PackGetIp32Ex(p, "SubnetMask", i);
\r
8539 void OutRpcEnumL3If(PACK *p, RPC_ENUM_L3IF *t)
\r
8543 if (p == NULL || t == NULL)
\r
8548 PackAddInt(p, "NumItem", t->NumItem);
\r
8549 PackAddStr(p, "Name", t->Name);
\r
8551 for (i = 0;i < t->NumItem;i++)
\r
8553 RPC_L3IF *f = &t->Items[i];
\r
8555 PackAddStrEx(p, "HubName", f->HubName, i, t->NumItem);
\r
8556 PackAddIp32Ex(p, "IpAddress", f->IpAddress, i, t->NumItem);
\r
8557 PackAddIp32Ex(p, "SubnetMask", f->SubnetMask, i, t->NumItem);
\r
8560 void FreeRpcEnumL3If(RPC_ENUM_L3IF *t)
\r
8572 void InRpcL3If(RPC_L3IF *t, PACK *p)
\r
8575 if (t == NULL || p == NULL)
\r
8580 Zero(t, sizeof(RPC_L3IF));
\r
8581 PackGetStr(p, "Name", t->Name, sizeof(t->Name));
\r
8582 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
8583 t->IpAddress = PackGetIp32(p, "IpAddress");
\r
8584 t->SubnetMask = PackGetIp32(p, "SubnetMask");
\r
8586 void OutRpcL3If(PACK *p, RPC_L3IF *t)
\r
8589 if (p == NULL || t == NULL)
\r
8594 PackAddStr(p, "Name", t->Name);
\r
8595 PackAddStr(p, "HubName", t->HubName);
\r
8596 PackAddIp32(p, "IpAddress", t->IpAddress);
\r
8597 PackAddIp32(p, "SubnetMask", t->SubnetMask);
\r
8601 void InRpcL3Sw(RPC_L3SW *t, PACK *p)
\r
8604 if (t == NULL || p == NULL)
\r
8609 Zero(t, sizeof(RPC_L3SW));
\r
8610 PackGetStr(p, "Name", t->Name, sizeof(t->Name));
\r
8612 void OutRpcL3Sw(PACK *p, RPC_L3SW *t)
\r
8615 if (p == NULL || t == NULL)
\r
8620 PackAddStr(p, "Name", t->Name);
\r
8624 void InRpcEnumL3Sw(RPC_ENUM_L3SW *t, PACK *p)
\r
8628 if (t == NULL || p == NULL)
\r
8633 Zero(t, sizeof(RPC_ENUM_L3SW));
\r
8634 t->NumItem = PackGetInt(p, "NumItem");
\r
8635 t->Items = ZeroMalloc(sizeof(RPC_ENUM_L3SW_ITEM) * t->NumItem);
\r
8637 for (i = 0;i < t->NumItem;i++)
\r
8639 RPC_ENUM_L3SW_ITEM *s = &t->Items[i];
\r
8641 PackGetStrEx(p, "Name", s->Name, sizeof(s->Name), i);
\r
8642 s->NumInterfaces = PackGetIntEx(p, "NumInterfaces", i);
\r
8643 s->NumTables = PackGetIntEx(p, "NumTables", i);
\r
8644 s->Active = PackGetBoolEx(p, "Active", i);
\r
8645 s->Online = PackGetBoolEx(p, "Online", i);
\r
8648 void OutRpcEnumL3Sw(PACK *p, RPC_ENUM_L3SW *t)
\r
8652 if (p == NULL || t == NULL)
\r
8657 PackAddInt(p, "NumItem", t->NumItem);
\r
8659 for (i = 0;i < t->NumItem;i++)
\r
8661 RPC_ENUM_L3SW_ITEM *s = &t->Items[i];
\r
8663 PackAddStrEx(p, "Name", s->Name, i, t->NumItem);
\r
8664 PackAddIntEx(p, "NumInterfaces", s->NumInterfaces, i, t->NumItem);
\r
8665 PackAddIntEx(p, "NumTables", s->NumTables, i, t->NumItem);
\r
8666 PackAddBoolEx(p, "Active", s->Active, i, t->NumItem);
\r
8667 PackAddBoolEx(p, "Online", s->Online, i, t->NumItem);
\r
8670 void FreeRpcEnumL3Sw(RPC_ENUM_L3SW *t)
\r
8682 void InRpcEnumEth(RPC_ENUM_ETH *t, PACK *p)
\r
8686 if (t == NULL || p == NULL)
\r
8691 Zero(t, sizeof(RPC_ENUM_ETH));
\r
8692 t->NumItem = PackGetInt(p, "NumItem");
\r
8693 t->Items = ZeroMalloc(sizeof(RPC_ENUM_ETH_ITEM) * t->NumItem);
\r
8695 for (i = 0;i < t->NumItem;i++)
\r
8697 RPC_ENUM_ETH_ITEM *e = &t->Items[i];
\r
8698 PackGetStrEx(p, "DeviceName", e->DeviceName, sizeof(e->DeviceName), i);
\r
8699 PackGetUniStrEx(p, "NetworkConnectionName", e->NetworkConnectionName, sizeof(e->NetworkConnectionName), i);
\r
8702 void OutRpcEnumEth(PACK *p, RPC_ENUM_ETH *t)
\r
8706 if (p == NULL || t == NULL)
\r
8711 PackAddInt(p, "NumItem", t->NumItem);
\r
8713 for (i = 0;i < t->NumItem;i++)
\r
8715 RPC_ENUM_ETH_ITEM *e = &t->Items[i];
\r
8716 PackAddStrEx(p, "DeviceName", e->DeviceName, i, t->NumItem);
\r
8717 PackAddUniStrEx(p, "NetworkConnectionName", e->NetworkConnectionName, i, t->NumItem);
\r
8720 void FreeRpcEnumEth(RPC_ENUM_ETH *t)
\r
8731 // RPC_LOCALBRIDGE
\r
8732 void InRpcLocalBridge(RPC_LOCALBRIDGE *t, PACK *p)
\r
8735 if (t == NULL || p == NULL)
\r
8740 Zero(t, sizeof(RPC_LOCALBRIDGE));
\r
8741 PackGetStr(p, "DeviceName", t->DeviceName, sizeof(t->DeviceName));
\r
8742 PackGetStr(p, "HubNameLB", t->HubName, sizeof(t->HubName));
\r
8743 t->TapMode = PackGetBool(p, "TapMode");
\r
8745 void OutRpcLocalBridge(PACK *p, RPC_LOCALBRIDGE *t)
\r
8748 if (t == NULL || p == NULL)
\r
8753 PackAddStr(p, "DeviceName", t->DeviceName);
\r
8754 PackAddStr(p, "HubNameLB", t->HubName);
\r
8755 PackAddBool(p, "TapMode", t->TapMode);
\r
8758 // RPC_ENUM_LOCALBRIDGE
\r
8759 void InRpcEnumLocalBridge(RPC_ENUM_LOCALBRIDGE *t, PACK *p)
\r
8763 if (t == NULL || p == NULL)
\r
8768 Zero(t, sizeof(RPC_ENUM_LOCALBRIDGE));
\r
8769 t->NumItem = PackGetInt(p, "NumItem");
\r
8770 t->Items = ZeroMalloc(sizeof(RPC_LOCALBRIDGE) * t->NumItem);
\r
8772 for (i = 0;i < t->NumItem;i++)
\r
8774 RPC_LOCALBRIDGE *e = &t->Items[i];
\r
8776 PackGetStrEx(p, "DeviceName", e->DeviceName, sizeof(e->DeviceName), i);
\r
8777 PackGetStrEx(p, "HubNameLB", e->HubName, sizeof(e->HubName), i);
\r
8778 e->Online = PackGetBoolEx(p, "Online", i);
\r
8779 e->Active = PackGetBoolEx(p, "Active", i);
\r
8780 e->TapMode = PackGetBoolEx(p, "TapMode", i);
\r
8783 void OutRpcEnumLocalBridge(PACK *p, RPC_ENUM_LOCALBRIDGE *t)
\r
8787 if (t == NULL || p == NULL)
\r
8792 PackAddInt(p, "NumItem", t->NumItem);
\r
8794 for (i = 0;i < t->NumItem;i++)
\r
8796 RPC_LOCALBRIDGE *e = &t->Items[i];
\r
8798 PackAddStrEx(p, "DeviceName", e->DeviceName, i, t->NumItem);
\r
8799 PackAddStrEx(p, "HubNameLB", e->HubName, i, t->NumItem);
\r
8800 PackAddBoolEx(p, "Online", e->Online, i, t->NumItem);
\r
8801 PackAddBoolEx(p, "Active", e->Active, i, t->NumItem);
\r
8802 PackAddBoolEx(p, "TapMode", e->TapMode, i, t->NumItem);
\r
8805 void FreeRpcEnumLocalBridge(RPC_ENUM_LOCALBRIDGE *t)
\r
8816 void InRpcMemInfo(MEMINFO *t, PACK *p)
\r
8819 if (t == NULL || p == NULL)
\r
8824 Zero(t, sizeof(MEMINFO));
\r
8825 t->TotalMemory = PackGetInt64(p, "TotalMemory");
\r
8826 t->UsedMemory = PackGetInt64(p, "UsedMemory");
\r
8827 t->FreeMemory = PackGetInt64(p, "FreeMemory");
\r
8828 t->TotalPhys = PackGetInt64(p, "TotalPhys");
\r
8829 t->UsedPhys = PackGetInt64(p, "UsedPhys");
\r
8830 t->FreePhys = PackGetInt64(p, "FreePhys");
\r
8832 void OutRpcMemInfo(PACK *p, MEMINFO *t)
\r
8835 if (t == NULL || p == NULL)
\r
8840 PackAddInt64(p, "TotalMemory", t->TotalMemory);
\r
8841 PackAddInt64(p, "UsedMemory", t->UsedMemory);
\r
8842 PackAddInt64(p, "FreeMemory", t->FreeMemory);
\r
8843 PackAddInt64(p, "TotalPhys", t->TotalPhys);
\r
8844 PackAddInt64(p, "UsedPhys", t->UsedPhys);
\r
8845 PackAddInt64(p, "FreePhys", t->FreePhys);
\r
8849 void InRpcOsInfo(OS_INFO *t, PACK *p)
\r
8851 char tmp[MAX_SIZE];
\r
8853 if (t == NULL || p == NULL)
\r
8858 Zero(t, sizeof(OS_INFO));
\r
8859 t->OsType = PackGetInt(p, "OsType");
\r
8860 t->OsServicePack = PackGetInt(p, "OsServicePack");
\r
8861 if (PackGetStr(p, "OsSystemName", tmp, sizeof(tmp)))
\r
8863 t->OsSystemName = CopyStr(tmp);
\r
8865 if (PackGetStr(p, "OsProductName", tmp, sizeof(tmp)))
\r
8867 t->OsProductName = CopyStr(tmp);
\r
8869 if (PackGetStr(p, "OsVendorName", tmp, sizeof(tmp)))
\r
8871 t->OsVendorName = CopyStr(tmp);
\r
8873 if (PackGetStr(p, "OsVersion", tmp, sizeof(tmp)))
\r
8875 t->OsVersion = CopyStr(tmp);
\r
8877 if (PackGetStr(p, "KernelName", tmp, sizeof(tmp)))
\r
8879 t->KernelName = CopyStr(tmp);
\r
8881 if (PackGetStr(p, "KernelVersion", tmp, sizeof(tmp)))
\r
8883 t->KernelVersion = CopyStr(tmp);
\r
8886 void OutRpcOsInfo(PACK *p, OS_INFO *t)
\r
8889 if (t == NULL || p == NULL)
\r
8894 PackAddInt(p, "OsType", t->OsType);
\r
8895 PackAddInt(p, "OsServicePack", t->OsServicePack);
\r
8896 PackAddStr(p, "OsSystemName", t->OsSystemName);
\r
8897 PackAddStr(p, "OsProductName", t->OsProductName);
\r
8898 PackAddStr(p, "OsVendorName", t->OsVendorName);
\r
8899 PackAddStr(p, "OsVersion", t->OsVersion);
\r
8900 PackAddStr(p, "KernelName", t->KernelName);
\r
8901 PackAddStr(p, "KernelVersion", t->KernelVersion);
\r
8903 void FreeRpcOsInfo(OS_INFO *t)
\r
8911 Free(t->OsSystemName);
\r
8912 Free(t->OsProductName);
\r
8913 Free(t->OsVendorName);
\r
8914 Free(t->OsVersion);
\r
8915 Free(t->KernelName);
\r
8916 Free(t->KernelVersion);
\r
8919 // ローカルのログファイルを読み込む
\r
8920 void SiReadLocalLogFile(SERVER *s, char *filepath, UINT offset, RPC_READ_LOG_FILE *t)
\r
8922 char exe_dir[MAX_PATH], full_path[MAX_PATH];
\r
8925 if (s == NULL || t == NULL || filepath == NULL)
\r
8930 Zero(t, sizeof(RPC_READ_LOG_FILE));
\r
8932 GetExeDir(exe_dir, sizeof(exe_dir));
\r
8933 Format(full_path, sizeof(full_path), "%s/%s", exe_dir, filepath);
\r
8936 o = FileOpenEx(full_path, false, false);
\r
8939 UINT filesize = FileSize(o);
\r
8941 if (offset < filesize)
\r
8943 UINT readsize = MIN(filesize - offset, FTP_BLOCK_SIZE);
\r
8944 void *buf = ZeroMalloc(readsize);
\r
8946 FileSeek(o, FILE_BEGIN, offset);
\r
8947 FileRead(o, buf, readsize);
\r
8949 t->Buffer = NewBuf();
\r
8950 WriteBuf(t->Buffer, buf, readsize);
\r
8958 // ローカルのログファイルを列挙する
\r
8959 void SiEnumLocalLogFileList(SERVER *s, char *hubname, RPC_ENUM_LOG_FILE *t)
\r
8964 if (s == NULL || t == NULL)
\r
8969 Zero(t, sizeof(RPC_ENUM_LOG_FILE));
\r
8971 o = EnumLogFile(hubname);
\r
8973 t->NumItem = LIST_NUM(o);
\r
8974 t->Items = ZeroMalloc(sizeof(RPC_ENUM_LOG_FILE_ITEM) * t->NumItem);
\r
8976 for (i = 0;i < LIST_NUM(o);i++)
\r
8978 LOG_FILE *f = LIST_DATA(o, i);
\r
8979 RPC_ENUM_LOG_FILE_ITEM *e = &t->Items[i];
\r
8981 StrCpy(e->FilePath, sizeof(e->FilePath), f->Path);
\r
8982 StrCpy(e->ServerName, sizeof(e->ServerName), f->ServerName);
\r
8983 e->FileSize = f->FileSize;
\r
8984 e->UpdatedTime = f->UpdatedTime;
\r
8987 FreeEnumLogFile(o);
\r
8990 // ローカルのセッションを列挙する
\r
8991 void SiEnumLocalSession(SERVER *s, char *hubname, RPC_ENUM_SESSION *t)
\r
8995 if (s == NULL || hubname == NULL || t == NULL)
\r
9000 LockHubList(s->Cedar);
\r
9001 h = GetHub(s->Cedar, hubname);
\r
9002 UnlockHubList(s->Cedar);
\r
9006 t->NumSession = 0;
\r
9007 t->Sessions = ZeroMalloc(0);
\r
9011 LockList(h->SessionList);
\r
9014 t->NumSession = LIST_NUM(h->SessionList);
\r
9015 t->Sessions = ZeroMalloc(sizeof(RPC_ENUM_SESSION_ITEM) * t->NumSession);
\r
9017 for (i = 0;i < t->NumSession;i++)
\r
9019 SESSION *s = LIST_DATA(h->SessionList, i);
\r
9020 RPC_ENUM_SESSION_ITEM *e = &t->Sessions[i];
\r
9023 StrCpy(e->Name, sizeof(e->Name), s->Name);
\r
9024 StrCpy(e->Username, sizeof(e->Username), s->Username);
\r
9025 e->Ip = IPToUINT(&s->Connection->ClientIp);
\r
9026 StrCpy(e->Hostname, sizeof(e->Hostname), s->Connection->ClientHostname);
\r
9027 e->MaxNumTcp = s->MaxConnection;
\r
9028 e->LinkMode = s->LinkModeServer;
\r
9029 e->SecureNATMode = s->SecureNATMode;
\r
9030 e->BridgeMode = s->BridgeMode;
\r
9031 e->Layer3Mode = s->L3SwitchMode;
\r
9032 e->VLanId = s->VLanId;
\r
9033 LockList(s->Connection->Tcp->TcpSockList);
\r
9035 e->CurrentNumTcp = s->Connection->Tcp->TcpSockList->num_item;
\r
9037 UnlockList(s->Connection->Tcp->TcpSockList);
\r
9038 Lock(s->TrafficLock);
\r
9040 e->PacketSize = GetTrafficPacketSize(s->Traffic);
\r
9041 e->PacketNum = GetTrafficPacketNum(s->Traffic);
\r
9043 Unlock(s->TrafficLock);
\r
9044 e->Client_BridgeMode = s->IsBridgeMode;
\r
9045 e->Client_MonitorMode = s->IsMonitorMode;
\r
9046 Copy(e->UniqueId, s->NodeInfo.UniqueId, 16);
\r
9049 GetMachineName(e->RemoteHostname, sizeof(e->RemoteHostname));
\r
9052 UnlockList(h->SessionList);
\r
9057 // RPC_ENUM_LICENSE_KEY
\r
9058 void InRpcEnumLicenseKey(RPC_ENUM_LICENSE_KEY *t, PACK *p)
\r
9062 if (t == NULL || p == NULL)
\r
9067 Zero(t, sizeof(RPC_ENUM_LICENSE_KEY));
\r
9068 t->NumItem = PackGetInt(p, "NumItem");
\r
9069 t->Items = ZeroMalloc(sizeof(RPC_ENUM_LICENSE_KEY_ITEM) * t->NumItem);
\r
9070 for (i = 0;i < t->NumItem;i++)
\r
9072 RPC_ENUM_LICENSE_KEY_ITEM *e = &t->Items[i];
\r
9074 e->Id = PackGetIntEx(p, "Id", i);
\r
9075 PackGetStrEx(p, "LicenseKey", e->LicenseKey, sizeof(e->LicenseKey), i);
\r
9076 PackGetStrEx(p, "LicenseId", e->LicenseId, sizeof(e->LicenseId), i);
\r
9077 PackGetStrEx(p, "LicenseName", e->LicenseName, sizeof(e->LicenseName), i);
\r
9078 e->Expires = PackGetInt64Ex(p, "Expires", i);
\r
9079 e->Status = PackGetIntEx(p, "Status", i);
\r
9080 e->ProductId = PackGetIntEx(p, "ProductId", i);
\r
9081 e->SystemId = PackGetInt64Ex(p, "SystemId", i);
\r
9082 e->SerialId = PackGetIntEx(p, "SerialId", i);
\r
9085 void OutRpcEnumLicenseKey(PACK *p, RPC_ENUM_LICENSE_KEY *t)
\r
9089 if (t == NULL || p == NULL)
\r
9094 PackAddInt(p, "NumItem", t->NumItem);
\r
9095 for (i = 0;i < t->NumItem;i++)
\r
9097 RPC_ENUM_LICENSE_KEY_ITEM *e = &t->Items[i];
\r
9099 PackAddIntEx(p, "Id", e->Id, i, t->NumItem);
\r
9100 PackAddStrEx(p, "LicenseKey", e->LicenseKey, i, t->NumItem);
\r
9101 PackAddStrEx(p, "LicenseId", e->LicenseId, i, t->NumItem);
\r
9102 PackAddStrEx(p, "LicenseName", e->LicenseName, i, t->NumItem);
\r
9103 PackAddInt64Ex(p, "Expires", e->Expires, i, t->NumItem);
\r
9104 PackAddIntEx(p, "Status", e->Status, i, t->NumItem);
\r
9105 PackAddIntEx(p, "ProductId", e->ProductId, i, t->NumItem);
\r
9106 PackAddInt64Ex(p, "SystemId", e->SystemId, i, t->NumItem);
\r
9107 PackAddIntEx(p, "SerialId", e->SerialId, i, t->NumItem);
\r
9110 void FreeRpcEnumLicenseKey(RPC_ENUM_LICENSE_KEY *t)
\r
9121 // RPC_LICENSE_STATUS
\r
9122 void InRpcLicenseStatus(RPC_LICENSE_STATUS *t, PACK *p)
\r
9125 if (t == NULL || p == NULL)
\r
9130 Zero(t, sizeof(RPC_LICENSE_STATUS));
\r
9132 t->EditionId = PackGetInt(p, "EditionId");
\r
9133 PackGetStr(p, "EditionStr", t->EditionStr, sizeof(t->EditionStr) );
\r
9134 t->SystemId = PackGetInt64(p, "SystemId");
\r
9135 t->SystemExpires = PackGetInt64(p, "SystemExpires");
\r
9136 t->NumClientConnectLicense = PackGetInt(p, "NumClientConnectLicense");
\r
9137 t->NumBridgeConnectLicense = PackGetInt(p, "NumBridgeConnectLicense");
\r
9140 t->NeedSubscription = PackGetBool(p, "NeedSubscription");
\r
9141 t->AllowEnterpriseFunction = PackGetBool(p, "AllowEnterpriseFunction");
\r
9142 t->SubscriptionExpires = PackGetInt64(p, "SubscriptionExpires");
\r
9143 t->IsSubscriptionExpired = PackGetBool(p, "IsSubscriptionExpired");
\r
9144 t->NumUserCreationLicense = PackGetInt(p, "NumUserCreationLicense");
\r
9145 t->ReleaseDate = PackGetInt64(p, "ReleaseDate");
\r
9147 void OutRpcLicenseStatus(PACK *p, RPC_LICENSE_STATUS *t)
\r
9150 if (t == NULL || p == NULL)
\r
9155 PackAddInt(p, "EditionId", t->EditionId);
\r
9156 PackAddStr(p, "EditionStr", t->EditionStr);
\r
9157 PackAddInt64(p, "SystemId", t->SystemId);
\r
9158 PackAddInt64(p, "SystemExpires", t->SystemExpires);
\r
9159 PackAddInt(p, "NumClientConnectLicense", t->NumClientConnectLicense);
\r
9160 PackAddInt(p, "NumBridgeConnectLicense", t->NumBridgeConnectLicense);
\r
9163 PackAddBool(p, "NeedSubscription", t->NeedSubscription);
\r
9164 PackAddBool(p, "AllowEnterpriseFunction", t->AllowEnterpriseFunction);
\r
9165 PackAddInt64(p, "SubscriptionExpires", t->SubscriptionExpires);
\r
9166 PackAddBool(p, "IsSubscriptionExpired", t->IsSubscriptionExpired);
\r
9167 PackAddInt(p, "NumUserCreationLicense", t->NumUserCreationLicense);
\r
9168 PackAddInt64(p, "ReleaseDate", t->ReleaseDate);
\r
9171 // RPC_ADMIN_OPTION
\r
9172 void InRpcAdminOption(RPC_ADMIN_OPTION *t, PACK *p)
\r
9176 if (t == NULL || p == NULL)
\r
9181 Zero(t, sizeof(RPC_ADMIN_OPTION));
\r
9182 t->NumItem = PackGetInt(p, "NumItem");
\r
9183 t->Items = ZeroMalloc(sizeof(ADMIN_OPTION) * t->NumItem);
\r
9185 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
9187 for (i = 0;i < t->NumItem;i++)
\r
9189 ADMIN_OPTION *o = &t->Items[i];
\r
9191 PackGetStrEx(p, "Name", o->Name, sizeof(o->Name), i);
\r
9192 o->Value = PackGetIntEx(p, "Value", i);
\r
9195 void OutRpcAdminOption(PACK *p, RPC_ADMIN_OPTION *t)
\r
9199 if (t == NULL || p == NULL)
\r
9204 PackAddInt(p, "NumItem", t->NumItem);
\r
9206 PackAddStr(p, "HubName", t->HubName);
\r
9208 for (i = 0;i < t->NumItem;i++)
\r
9210 ADMIN_OPTION *o = &t->Items[i];
\r
9212 PackAddStrEx(p, "Name", o->Name, i, t->NumItem);
\r
9213 PackAddIntEx(p, "Value", o->Value, i, t->NumItem);
\r
9216 void FreeRpcAdminOption(RPC_ADMIN_OPTION *t)
\r
9228 void InRpcConfig(RPC_CONFIG *t, PACK *p)
\r
9232 if (t == NULL || p == NULL)
\r
9237 Zero(t, sizeof(RPC_CONFIG));
\r
9238 PackGetStr(p, "FileName", t->FileName, sizeof(t->FileName));
\r
9239 size = PackGetDataSize(p, "FileData");
\r
9240 t->FileData = ZeroMalloc(size + 1);
\r
9241 PackGetData(p, "FileData", t->FileData);
\r
9243 void OutRpcConfig(PACK *p, RPC_CONFIG *t)
\r
9246 if (t == NULL || p == NULL)
\r
9251 PackAddStr(p, "FileName", t->FileName);
\r
9252 PackAddData(p, "FileData", t->FileData, StrLen(t->FileData));
\r
9254 void FreeRpcConfig(RPC_CONFIG *t)
\r
9262 Free(t->FileData);
\r
9265 // RPC_BRIDGE_SUPPORT
\r
9266 void InRpcBridgeSupport(RPC_BRIDGE_SUPPORT *t, PACK *p)
\r
9269 if (t == NULL || p == NULL)
\r
9274 Zero(t, sizeof(RPC_BRIDGE_SUPPORT));
\r
9276 t->IsBridgeSupportedOs = PackGetBool(p, "IsBridgeSupportedOs");
\r
9277 t->IsWinPcapNeeded = PackGetBool(p, "IsWinPcapNeeded");
\r
9279 void OutRpcBridgeSupport(PACK *p, RPC_BRIDGE_SUPPORT *t)
\r
9282 if (p == NULL || t == NULL)
\r
9287 PackAddBool(p, "IsBridgeSupportedOs", t->IsBridgeSupportedOs);
\r
9288 PackAddBool(p, "IsWinPcapNeeded",t->IsWinPcapNeeded);
\r
9292 void InRpcAddAccess(RPC_ADD_ACCESS *t, PACK *p)
\r
9295 if (t == NULL || p == NULL)
\r
9300 Zero(t, sizeof(RPC_ADD_ACCESS));
\r
9302 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
9303 InRpcAccess(&t->Access, p);
\r
9305 void OutRpcAddAccess(PACK *p, RPC_ADD_ACCESS *t)
\r
9308 if (t == NULL || p == NULL)
\r
9313 PackAddStr(p, "HubName", t->HubName);
\r
9314 OutRpcAccess(p, &t->Access);
\r
9317 // RPC_DELETE_ACCESS
\r
9318 void InRpcDeleteAccess(RPC_DELETE_ACCESS *t, PACK *p)
\r
9321 if (t == NULL || p == NULL)
\r
9326 Zero(t, sizeof(RPC_DELETE_ACCESS));
\r
9328 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
9329 t->Id = PackGetInt(p, "Id");
\r
9331 void OutRpcDeleteAccess(PACK *p, RPC_DELETE_ACCESS *t)
\r
9334 if (t == NULL || p == NULL)
\r
9339 PackAddStr(p, "HubName", t->HubName);
\r
9340 PackAddInt(p, "Id", t->Id);
\r
9344 // RPC_SERVER_INFO
\r
9345 void InRpcServerInfo(RPC_SERVER_INFO *t, PACK *p)
\r
9348 if (t == NULL || p == NULL)
\r
9353 Zero(t, sizeof(RPC_SERVER_INFO));
\r
9355 PackGetStr(p, "ServerProductName", t->ServerProductName, sizeof(t->ServerProductName));
\r
9356 PackGetStr(p, "ServerVersionString", t->ServerVersionString, sizeof(t->ServerVersionString));
\r
9357 PackGetStr(p, "ServerBuildInfoString", t->ServerBuildInfoString, sizeof(t->ServerBuildInfoString));
\r
9358 t->ServerVerInt = PackGetInt(p, "ServerVerInt");
\r
9359 t->ServerBuildInt = PackGetInt(p, "ServerBuildInt");
\r
9360 PackGetStr(p, "ServerHostName", t->ServerHostName, sizeof(t->ServerHostName));
\r
9361 t->ServerType = PackGetInt(p, "ServerType");
\r
9362 InRpcOsInfo(&t->OsInfo, p);
\r
9364 void OutRpcServerInfo(PACK *p, RPC_SERVER_INFO *t)
\r
9367 if (t == NULL || p == NULL)
\r
9372 PackAddStr(p, "ServerProductName", t->ServerProductName);
\r
9373 PackAddStr(p, "ServerVersionString", t->ServerVersionString);
\r
9374 PackAddStr(p, "ServerBuildInfoString", t->ServerBuildInfoString);
\r
9375 PackAddInt(p, "ServerVerInt", t->ServerVerInt);
\r
9376 PackAddInt(p, "ServerBuildInt", t->ServerBuildInt);
\r
9377 PackAddStr(p, "ServerHostName", t->ServerHostName);
\r
9378 PackAddInt(p, "ServerType", t->ServerType);
\r
9379 OutRpcOsInfo(p, &t->OsInfo);
\r
9381 void FreeRpcServerInfo(RPC_SERVER_INFO *t)
\r
9389 FreeRpcOsInfo(&t->OsInfo);
\r
9392 // RPC_SERVER_STATUS
\r
9393 void InRpcServerStatus(RPC_SERVER_STATUS *t, PACK *p)
\r
9396 if (t == NULL || p == NULL)
\r
9401 Zero(t, sizeof(RPC_SERVER_STATUS));
\r
9402 t->ServerType = PackGetInt(p, "ServerType");
\r
9403 t->NumTcpConnections = PackGetInt(p, "NumTcpConnections");
\r
9404 t->NumTcpConnectionsLocal = PackGetInt(p, "NumTcpConnectionsLocal");
\r
9405 t->NumTcpConnectionsRemote = PackGetInt(p, "NumTcpConnectionsRemote");
\r
9406 t->NumHubTotal = PackGetInt(p, "NumHubTotal");
\r
9407 t->NumHubStandalone = PackGetInt(p, "NumHubStandalone");
\r
9408 t->NumHubStatic = PackGetInt(p, "NumHubStatic");
\r
9409 t->NumHubDynamic = PackGetInt(p, "NumHubDynamic");
\r
9410 t->NumSessionsTotal = PackGetInt(p, "NumSessionsTotal");
\r
9411 t->NumSessionsLocal = PackGetInt(p, "NumSessionsLocal");
\r
9412 t->NumSessionsRemote = PackGetInt(p, "NumSessionsRemote");
\r
9413 t->NumMacTables = PackGetInt(p, "NumMacTables");
\r
9414 t->NumIpTables = PackGetInt(p, "NumIpTables");
\r
9415 t->NumUsers = PackGetInt(p, "NumUsers");
\r
9416 t->NumGroups = PackGetInt(p, "NumGroups");
\r
9417 t->CurrentTime = PackGetInt64(p, "CurrentTime");
\r
9418 t->CurrentTick = PackGetInt64(p, "CurrentTick");
\r
9419 t->AssignedBridgeLicenses = PackGetInt(p, "AssignedBridgeLicenses");
\r
9420 t->AssignedClientLicenses = PackGetInt(p, "AssignedClientLicenses");
\r
9421 t->AssignedBridgeLicensesTotal = PackGetInt(p, "AssignedBridgeLicensesTotal");
\r
9422 t->AssignedClientLicensesTotal = PackGetInt(p, "AssignedClientLicensesTotal");
\r
9423 t->StartTime = PackGetInt64(p, "StartTime");
\r
9425 InRpcTraffic(&t->Traffic, p);
\r
9427 InRpcMemInfo(&t->MemInfo, p);
\r
9429 void OutRpcServerStatus(PACK *p, RPC_SERVER_STATUS *t)
\r
9432 if (t == NULL || p == NULL)
\r
9437 PackAddInt(p, "ServerType", t->ServerType);
\r
9438 PackAddInt(p, "NumTcpConnections", t->NumTcpConnections);
\r
9439 PackAddInt(p, "NumHubTotal", t->NumHubTotal);
\r
9440 PackAddInt(p, "NumHubStandalone", t->NumHubStandalone);
\r
9441 PackAddInt(p, "NumHubStatic", t->NumHubStatic);
\r
9442 PackAddInt(p, "NumHubDynamic", t->NumHubDynamic);
\r
9443 PackAddInt(p, "NumSessionsTotal", t->NumSessionsTotal);
\r
9444 PackAddInt(p, "NumSessionsLocal", t->NumSessionsLocal);
\r
9445 PackAddInt(p, "NumSessionsRemote", t->NumSessionsRemote);
\r
9446 PackAddInt(p, "NumTcpConnections", t->NumTcpConnections);
\r
9447 PackAddInt(p, "NumTcpConnectionsLocal", t->NumTcpConnectionsLocal);
\r
9448 PackAddInt(p, "NumTcpConnectionsRemote", t->NumTcpConnectionsRemote);
\r
9449 PackAddInt(p, "NumMacTables", t->NumMacTables);
\r
9450 PackAddInt(p, "NumIpTables", t->NumIpTables);
\r
9451 PackAddInt(p, "NumUsers", t->NumUsers);
\r
9452 PackAddInt(p, "NumGroups", t->NumGroups);
\r
9453 PackAddInt64(p, "CurrentTime", t->CurrentTime);
\r
9454 PackAddInt64(p, "CurrentTick", t->CurrentTick);
\r
9455 PackAddInt(p, "AssignedBridgeLicenses", t->AssignedBridgeLicenses);
\r
9456 PackAddInt(p, "AssignedClientLicenses", t->AssignedClientLicenses);
\r
9457 PackAddInt(p, "AssignedBridgeLicensesTotal", t->AssignedBridgeLicensesTotal);
\r
9458 PackAddInt(p, "AssignedClientLicensesTotal", t->AssignedClientLicensesTotal);
\r
9459 PackAddInt64(p, "StartTime", t->StartTime);
\r
9461 OutRpcTraffic(p, &t->Traffic);
\r
9463 OutRpcMemInfo(p, &t->MemInfo);
\r
9467 void InRpcListener(RPC_LISTENER *t, PACK *p)
\r
9470 if (t == NULL || p == NULL)
\r
9475 Zero(t, sizeof(RPC_LISTENER));
\r
9476 t->Port = PackGetInt(p, "Port");
\r
9477 t->Enable = PackGetBool(p, "Enable");
\r
9479 void OutRpcListener(PACK *p, RPC_LISTENER *t)
\r
9482 if (t == NULL || p == NULL)
\r
9487 PackAddInt(p, "Port", t->Port);
\r
9488 PackAddBool(p, "Enable", t->Enable);
\r
9491 // RPC_LISTENER_LIST
\r
9492 void InRpcListenerList(RPC_LISTENER_LIST *t, PACK *p)
\r
9496 if (t == NULL || p == NULL)
\r
9501 Zero(t, sizeof(RPC_LISTENER_LIST));
\r
9502 t->NumPort = PackGetIndexCount(p, "Ports");
\r
9503 t->Ports = ZeroMalloc(sizeof(UINT) * t->NumPort);
\r
9504 t->Enables = ZeroMalloc(sizeof(UINT) * t->NumPort);
\r
9505 t->Errors = ZeroMalloc(sizeof(UINT) * t->NumPort);
\r
9506 for (i = 0;i < t->NumPort;i++)
\r
9508 t->Ports[i] = PackGetIntEx(p, "Ports", i);
\r
9509 t->Enables[i] = PackGetBoolEx(p, "Enables", i);
\r
9510 t->Errors[i] = PackGetBoolEx(p, "Errors", i);
\r
9513 void OutRpcListenerList(PACK *p, RPC_LISTENER_LIST *t)
\r
9517 if (t == NULL || p == NULL)
\r
9522 for (i = 0;i < t->NumPort;i++)
\r
9524 PackAddIntEx(p, "Ports", t->Ports[i], i, t->NumPort);
\r
9525 PackAddBoolEx(p, "Enables", t->Enables[i], i, t->NumPort);
\r
9526 PackAddBoolEx(p, "Errors", t->Errors[i], i, t->NumPort);
\r
9529 void FreeRpcListenerList(RPC_LISTENER_LIST *t)
\r
9543 void InRpcStr(RPC_STR *t, PACK *p)
\r
9545 UINT size = 65536;
\r
9546 char *tmp = Malloc(size);
\r
9548 if (t == NULL || p == NULL)
\r
9553 Zero(t, sizeof(RPC_STR));
\r
9554 if (PackGetStr(p, "String", tmp, size) == false)
\r
9556 t->String = CopyStr("");
\r
9560 t->String = CopyStr(tmp);
\r
9564 void OutRpcStr(PACK *p, RPC_STR *t)
\r
9567 if (t == NULL || p == NULL)
\r
9572 PackAddStr(p, "String", t->String);
\r
9574 void FreeRpcStr(RPC_STR *t)
\r
9585 // RPC_SET_PASSWORD
\r
9586 void InRpcSetPassword(RPC_SET_PASSWORD *t, PACK *p)
\r
9589 if (t == NULL || p == NULL)
\r
9594 Zero(t, sizeof(RPC_SET_PASSWORD));
\r
9595 PackGetData2(p, "HashedPassword", t->HashedPassword, sizeof(t->HashedPassword));
\r
9597 void OutRpcSetPassword(PACK *p, RPC_SET_PASSWORD *t)
\r
9600 if (t == NULL || p == NULL)
\r
9605 PackAddData(p, "HashedPassword", t->HashedPassword, sizeof(t->HashedPassword));
\r
9609 void InRpcFarm(RPC_FARM *t, PACK *p)
\r
9613 if (t == NULL || p == NULL)
\r
9618 Zero(t, sizeof(RPC_FARM));
\r
9619 t->ServerType = PackGetInt(p, "ServerType");
\r
9620 t->NumPort = PackGetIndexCount(p, "Ports");
\r
9621 t->Ports = ZeroMalloc(sizeof(UINT) * t->NumPort);
\r
9622 for (i = 0;i < t->NumPort;i++)
\r
9624 t->Ports[i] = PackGetIntEx(p, "Ports", i);
\r
9626 t->PublicIp = PackGetIp32(p, "PublicIp");
\r
9627 PackGetStr(p, "ControllerName", t->ControllerName, sizeof(t->ControllerName));
\r
9628 t->ControllerPort = PackGetInt(p, "ControllerPort");
\r
9629 PackGetData2(p, "MemberPassword", t->MemberPassword, sizeof(t->MemberPassword));
\r
9630 t->Weight = PackGetInt(p, "Weight");
\r
9631 t->ControllerOnly = PackGetBool(p, "ControllerOnly");
\r
9633 void OutRpcFarm(PACK *p, RPC_FARM *t)
\r
9637 if (t == NULL || p == NULL)
\r
9642 PackAddInt(p, "ServerType", t->ServerType);
\r
9643 for (i = 0;i < t->NumPort;i++)
\r
9645 PackAddIntEx(p, "Ports", t->Ports[i], i, t->NumPort);
\r
9647 PackAddIp32(p, "PublicIp", t->PublicIp);
\r
9648 PackAddStr(p, "ControllerName", t->ControllerName);
\r
9649 PackAddInt(p, "ControllerPort", t->ControllerPort);
\r
9650 PackAddData(p, "MemberPassword", t->MemberPassword, sizeof(t->MemberPassword));
\r
9651 PackAddInt(p, "Weight", t->Weight);
\r
9652 PackAddBool(p, "ControllerOnly", t->ControllerOnly);
\r
9654 void FreeRpcFarm(RPC_FARM *t)
\r
9666 void InRpcFarmHub(RPC_FARM_HUB *t, PACK *p)
\r
9669 if (t == NULL || p == NULL)
\r
9674 Zero(t, sizeof(RPC_FARM_HUB));
\r
9675 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
9676 t->DynamicHub = PackGetBool(p, "DynamicHub");
\r
9678 void OutRpcFarmHub(PACK *p, RPC_FARM_HUB *t)
\r
9681 if (t == NULL || p == NULL)
\r
9686 PackAddStr(p, "HubName", t->HubName);
\r
9687 PackAddBool(p, "DynamicHub", t->DynamicHub);
\r
9691 void InRpcFarmInfo(RPC_FARM_INFO *t, PACK *p)
\r
9700 Zero(t, sizeof(RPC_FARM_INFO));
\r
9701 t->Id = PackGetInt(p, "Id");
\r
9702 t->Controller = PackGetBool(p, "Controller");
\r
9703 t->ConnectedTime = PackGetInt64(p, "ConnectedTime");
\r
9704 t->Ip = PackGetIp32(p, "Ip");
\r
9705 PackGetStr(p, "Hostname", t->Hostname, sizeof(t->Hostname));
\r
9706 t->Point = PackGetInt(p, "Point");
\r
9707 t->NumPort = PackGetIndexCount(p, "Ports");
\r
9708 t->Ports = ZeroMalloc(sizeof(UINT) * t->NumPort);
\r
9709 for (i = 0;i < t->NumPort;i++)
\r
9711 t->Ports[i] = PackGetIntEx(p, "Ports", i);
\r
9713 t->ServerCert = PackGetX(p, "ServerCert");
\r
9714 t->NumFarmHub = PackGetIndexCount(p, "HubName");
\r
9715 t->FarmHubs = ZeroMalloc(sizeof(RPC_FARM_HUB) * t->NumFarmHub);
\r
9716 for (i = 0;i < t->NumFarmHub;i++)
\r
9718 PackGetStrEx(p, "HubName", t->FarmHubs[i].HubName, sizeof(t->FarmHubs[i].HubName), i);
\r
9719 t->FarmHubs[i].DynamicHub = PackGetBoolEx(p, "DynamicHub", i);
\r
9721 t->NumSessions = PackGetInt(p, "NumSessions");
\r
9722 t->NumTcpConnections = PackGetInt(p, "NumTcpConnections");
\r
9723 t->Weight = PackGetInt(p, "Weight");
\r
9725 void OutRpcFarmInfo(PACK *p, RPC_FARM_INFO *t)
\r
9729 if (t == NULL || p == NULL)
\r
9734 PackAddInt(p, "Id", t->Id);
\r
9735 PackAddBool(p, "Controller", t->Controller);
\r
9736 PackAddInt64(p, "ConnectedTime", t->ConnectedTime);
\r
9737 PackAddIp32(p, "Ip", t->Ip);
\r
9738 PackAddStr(p, "Hostname", t->Hostname);
\r
9739 PackAddInt(p, "Point", t->Point);
\r
9740 for (i = 0;i < t->NumPort;i++)
\r
9742 PackAddIntEx(p, "Ports", t->Ports[i], i, t->NumPort);
\r
9744 PackAddX(p, "ServerCert", t->ServerCert);
\r
9745 for (i = 0;i < t->NumFarmHub;i++)
\r
9747 PackAddStrEx(p, "HubName", t->FarmHubs[i].HubName, i, t->NumFarmHub);
\r
9748 PackAddBoolEx(p, "DynamicHub", t->FarmHubs[i].DynamicHub, i, t->NumFarmHub);
\r
9750 PackAddInt(p, "NumSessions", t->NumSessions);
\r
9751 PackAddInt(p, "NumTcpConnections", t->NumTcpConnections);
\r
9752 PackAddInt(p, "Weight", t->Weight);
\r
9754 void FreeRpcFarmInfo(RPC_FARM_INFO *t)
\r
9763 Free(t->FarmHubs);
\r
9764 FreeX(t->ServerCert);
\r
9767 void InRpcEnumFarm(RPC_ENUM_FARM *t, PACK *p)
\r
9771 if (t == NULL || p == NULL)
\r
9776 Zero(t, sizeof(RPC_ENUM_FARM));
\r
9777 t->NumFarm = PackGetIndexCount(p, "Id");
\r
9778 t->Farms = ZeroMalloc(sizeof(RPC_ENUM_FARM_ITEM) * t->NumFarm);
\r
9780 for (i = 0;i < t->NumFarm;i++)
\r
9782 RPC_ENUM_FARM_ITEM *e = &t->Farms[i];
\r
9784 e->Id = PackGetIntEx(p, "Id", i);
\r
9785 e->Controller = PackGetBoolEx(p, "Controller", i);
\r
9786 e->ConnectedTime = PackGetInt64Ex(p, "ConnectedTime", i);
\r
9787 e->Ip = PackGetIp32Ex(p, "Ip", i);
\r
9788 PackGetStrEx(p, "Hostname", e->Hostname, sizeof(e->Hostname), i);
\r
9789 e->Point = PackGetIntEx(p, "Point", i);
\r
9790 e->NumSessions = PackGetIntEx(p, "NumSessions", i);
\r
9791 e->NumTcpConnections = PackGetIntEx(p, "NumTcpConnections", i);
\r
9792 e->NumHubs = PackGetIntEx(p, "NumHubs", i);
\r
9793 e->AssignedClientLicense = PackGetIntEx(p, "AssignedClientLicense", i);
\r
9794 e->AssignedBridgeLicense = PackGetIntEx(p, "AssignedBridgeLicense", i);
\r
9797 void OutRpcEnumFarm(PACK *p, RPC_ENUM_FARM *t)
\r
9801 if (t == NULL || p == NULL)
\r
9806 for (i = 0;i < t->NumFarm;i++)
\r
9808 RPC_ENUM_FARM_ITEM *e = &t->Farms[i];
\r
9810 PackAddIntEx(p, "Id", e->Id, i, t->NumFarm);
\r
9811 PackAddBoolEx(p, "Controller", e->Controller, i, t->NumFarm);
\r
9812 PackAddInt64Ex(p, "ConnectedTime", e->ConnectedTime, i, t->NumFarm);
\r
9813 PackAddIp32Ex(p, "Ip", e->Ip, i, t->NumFarm);
\r
9814 PackAddStrEx(p, "Hostname", e->Hostname, i, t->NumFarm);
\r
9815 PackAddIntEx(p, "Point", e->Point, i, t->NumFarm);
\r
9816 PackAddIntEx(p, "NumSessions", e->NumSessions, i, t->NumFarm);
\r
9817 PackAddIntEx(p, "NumTcpConnections", e->NumTcpConnections, i, t->NumFarm);
\r
9818 PackAddIntEx(p, "NumHubs", e->NumHubs, i, t->NumFarm);
\r
9819 PackAddIntEx(p, "AssignedClientLicense", e->AssignedClientLicense, i, t->NumFarm);
\r
9820 PackAddIntEx(p, "AssignedBridgeLicense", e->AssignedBridgeLicense, i, t->NumFarm);
\r
9823 void FreeRpcEnumFarm(RPC_ENUM_FARM *t)
\r
9834 // RPC_FARM_CONNECTION_STATUS
\r
9835 void InRpcFarmConnectionStatus(RPC_FARM_CONNECTION_STATUS *t, PACK *p)
\r
9837 Zero(t, sizeof(RPC_FARM_CONNECTION_STATUS));
\r
9839 if (t == NULL || p == NULL)
\r
9844 t->Ip = PackGetIp32(p, "Ip");
\r
9845 t->Port = PackGetInt(p, "Port");
\r
9846 t->Online = PackGetBool(p, "Online");
\r
9847 t->LastError = PackGetInt(p, "LastError");
\r
9848 t->StartedTime = PackGetInt64(p, "StartedTime");
\r
9849 t->CurrentConnectedTime = PackGetInt64(p, "CurrentConnectedTime");
\r
9850 t->FirstConnectedTime = PackGetInt64(p, "FirstConnectedTime");
\r
9851 t->NumConnected = PackGetInt(p, "NumConnected");
\r
9852 t->NumTry = PackGetInt(p, "NumTry");
\r
9853 t->NumFailed = PackGetInt(p, "NumFailed");
\r
9855 void OutRpcFarmConnectionStatus(PACK *p, RPC_FARM_CONNECTION_STATUS *t)
\r
9858 if (t == NULL || p == NULL)
\r
9863 PackAddIp32(p, "Ip", t->Ip);
\r
9864 PackAddInt(p, "Port", t->Port);
\r
9865 PackAddBool(p, "Online", t->Online);
\r
9866 PackAddInt(p, "LastError", t->LastError);
\r
9867 PackAddInt64(p, "StartedTime", t->StartedTime);
\r
9868 PackAddInt64(p, "CurrentConnectedTime", t->CurrentConnectedTime);
\r
9869 PackAddInt64(p, "FirstConnectedTime", t->FirstConnectedTime);
\r
9870 PackAddInt(p, "NumConnected", t->NumConnected);
\r
9871 PackAddInt(p, "NumTry", t->NumTry);
\r
9872 PackAddInt(p, "NumFailed", t->NumFailed);
\r
9876 void InRpcHubOption(RPC_HUB_OPTION *t, PACK *p)
\r
9879 if (t == NULL || p == NULL)
\r
9884 Zero(t, sizeof(RPC_HUB_OPTION));
\r
9885 t->MaxSession = PackGetInt(p, "MaxSession");
\r
9886 t->NoEnum = PackGetBool(p, "NoEnum");
\r
9888 void OutRpcHubOption(PACK *p, RPC_HUB_OPTION *t)
\r
9891 if (t == NULL || p == NULL)
\r
9896 PackAddInt(p, "MaxSession", t->MaxSession);
\r
9897 PackAddBool(p, "NoEnum", t->NoEnum);
\r
9901 void InRpcRadius(RPC_RADIUS *t, PACK *p)
\r
9904 if (t == NULL || p == NULL)
\r
9909 Zero(t, sizeof(RPC_RADIUS));
\r
9910 PackGetStr(p, "RadiusServerName", t->RadiusServerName, sizeof(t->RadiusServerName));
\r
9911 t->RadiusPort = PackGetInt(p, "RadiusPort");
\r
9912 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
9913 PackGetStr(p, "RadiusSecret", t->RadiusSecret, sizeof(t->RadiusSecret));
\r
9914 t->RadiusRetryInterval = PackGetInt(p, "RadiusRetryInterval");
\r
9916 void OutRpcRadius(PACK *p, RPC_RADIUS *t)
\r
9919 if (t == NULL || p == NULL)
\r
9924 PackAddStr(p, "RadiusServerName", t->RadiusServerName);
\r
9925 PackAddInt(p, "RadiusPort", t->RadiusPort);
\r
9926 PackAddStr(p, "HubName", t->HubName);
\r
9927 PackAddStr(p, "RadiusSecret", t->RadiusSecret);
\r
9928 PackAddInt(p, "RadiusRetryInterval", t->RadiusRetryInterval);
\r
9932 void InRpcHub(RPC_HUB *t, PACK *p)
\r
9935 if (t == NULL || p == NULL)
\r
9940 Zero(t, sizeof(RPC_HUB));
\r
9941 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
9943 void OutRpcHub(PACK *p, RPC_HUB *t)
\r
9946 if (t == NULL || p == NULL)
\r
9951 PackAddStr(p, "HubName", t->HubName);
\r
9955 void InRpcCreateHub(RPC_CREATE_HUB *t, PACK *p)
\r
9958 if (t == NULL || p == NULL)
\r
9963 Zero(t, sizeof(RPC_CREATE_HUB));
\r
9964 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
9965 PackGetData2(p, "HashedPassword", t->HashedPassword, sizeof(t->HashedPassword));
\r
9966 PackGetData2(p, "SecurePassword", t->SecurePassword, sizeof(t->SecurePassword));
\r
9967 t->Online = PackGetBool(p, "Online");
\r
9968 InRpcHubOption(&t->HubOption, p);
\r
9969 t->HubType = PackGetInt(p, "HubType");
\r
9971 void OutRpcCreateHub(PACK *p, RPC_CREATE_HUB *t)
\r
9974 if (t == NULL || p == NULL)
\r
9979 PackAddStr(p, "HubName", t->HubName);
\r
9980 PackAddData(p, "HashedPassword", t->HashedPassword, sizeof(t->HashedPassword));
\r
9981 PackAddData(p, "SecurePassword", t->SecurePassword, sizeof(t->SecurePassword));
\r
9982 PackAddBool(p, "Online", t->Online);
\r
9983 OutRpcHubOption(p, &t->HubOption);
\r
9984 PackAddInt(p, "HubType", t->HubType);
\r
9988 void InRpcEnumHub(RPC_ENUM_HUB *t, PACK *p)
\r
9992 if (t == NULL || p == NULL)
\r
9997 Zero(t, sizeof(RPC_ENUM_HUB));
\r
9998 t->NumHub = PackGetIndexCount(p, "HubName");
\r
9999 t->Hubs = ZeroMalloc(sizeof(RPC_ENUM_HUB_ITEM) * t->NumHub);
\r
10001 for (i = 0;i < t->NumHub;i++)
\r
10003 RPC_ENUM_HUB_ITEM *e = &t->Hubs[i];
\r
10005 PackGetStrEx(p, "HubName", e->HubName, sizeof(e->HubName), i);
\r
10006 e->Online = PackGetBoolEx(p, "Online", i);
\r
10007 e->HubType = PackGetIntEx(p, "HubType", i);
\r
10008 e->NumSessions = PackGetIntEx(p, "NumSessions", i);
\r
10009 e->NumUsers = PackGetIntEx(p, "NumUsers", i);
\r
10010 e->NumGroups = PackGetIntEx(p, "NumGroups", i);
\r
10011 e->NumMacTables = PackGetIntEx(p, "NumMacTables", i);
\r
10012 e->NumIpTables = PackGetIntEx(p, "NumIpTables", i);
\r
10013 e->LastCommTime = PackGetInt64Ex(p, "LastCommTime", i);
\r
10014 e->CreatedTime = PackGetInt64Ex(p, "CreatedTime", i);
\r
10015 e->LastLoginTime = PackGetInt64Ex(p, "LastLoginTime", i);
\r
10016 e->NumLogin = PackGetIntEx(p, "NumLogin", i);
\r
10019 void OutRpcEnumHub(PACK *p, RPC_ENUM_HUB *t)
\r
10023 if (t == NULL || p == NULL)
\r
10028 for (i = 0;i < t->NumHub;i++)
\r
10030 RPC_ENUM_HUB_ITEM *e = &t->Hubs[i];
\r
10032 PackAddStrEx(p, "HubName", e->HubName, i, t->NumHub);
\r
10033 PackAddBoolEx(p, "Online", e->Online, i, t->NumHub);
\r
10034 PackAddIntEx(p, "HubType", e->HubType, i, t->NumHub);
\r
10035 PackAddIntEx(p, "NumSessions", e->NumSessions, i, t->NumHub);
\r
10036 PackAddIntEx(p, "NumUsers", e->NumUsers, i, t->NumHub);
\r
10037 PackAddIntEx(p, "NumGroups", e->NumGroups, i, t->NumHub);
\r
10038 PackAddIntEx(p, "NumMacTables", e->NumMacTables, i, t->NumHub);
\r
10039 PackAddIntEx(p, "NumIpTables", e->NumIpTables, i, t->NumHub);
\r
10040 PackAddInt64Ex(p, "LastCommTime", e->LastCommTime, i, t->NumHub);
\r
10041 PackAddInt64Ex(p, "CreatedTime", e->CreatedTime, i, t->NumHub);
\r
10042 PackAddInt64Ex(p, "LastLoginTime", e->LastLoginTime, i, t->NumHub);
\r
10043 PackAddIntEx(p, "NumLogin", e->NumLogin, i, t->NumHub);
\r
10046 void FreeRpcEnumHub(RPC_ENUM_HUB *t)
\r
10057 // RPC_DELETE_HUB
\r
10058 void InRpcDeleteHub(RPC_DELETE_HUB *t, PACK *p)
\r
10061 if (t == NULL || p == NULL)
\r
10066 Zero(t, sizeof(RPC_DELETE_HUB));
\r
10067 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
10069 void OutRpcDeleteHub(PACK *p, RPC_DELETE_HUB *t)
\r
10072 if (t == NULL || p == NULL)
\r
10077 PackAddStr(p, "HubName", t->HubName);
\r
10080 // RPC_ENUM_CONNECTION
\r
10081 void InRpcEnumConnection(RPC_ENUM_CONNECTION *t, PACK *p)
\r
10085 if (t == NULL || p == NULL)
\r
10090 Zero(t, sizeof(RPC_ENUM_CONNECTION));
\r
10091 t->NumConnection = PackGetIndexCount(p, "Name");
\r
10092 t->Connections = ZeroMalloc(sizeof(RPC_ENUM_CONNECTION_ITEM) * t->NumConnection);
\r
10094 for (i = 0;i < t->NumConnection;i++)
\r
10096 RPC_ENUM_CONNECTION_ITEM *e = &t->Connections[i];
\r
10098 e->Ip = PackGetIp32Ex(p, "Ip", i);
\r
10099 e->Port = PackGetIntEx(p, "Port", i);
\r
10100 PackGetStrEx(p, "Name", e->Name, sizeof(e->Name), i);
\r
10101 PackGetStrEx(p, "Hostname", e->Hostname, sizeof(e->Hostname), i);
\r
10102 e->ConnectedTime = PackGetInt64Ex(p, "ConnectedTime", i);
\r
10103 e->Type = PackGetIntEx(p, "Type", i);
\r
10106 void OutRpcEnumConnection(PACK *p, RPC_ENUM_CONNECTION *t)
\r
10110 if (t == NULL || p == NULL)
\r
10115 for (i = 0;i < t->NumConnection;i++)
\r
10117 RPC_ENUM_CONNECTION_ITEM *e = &t->Connections[i];
\r
10119 PackAddIp32Ex(p, "Ip", e->Ip, i, t->NumConnection);
\r
10120 PackAddIntEx(p, "Port", e->Port, i, t->NumConnection);
\r
10121 PackAddStrEx(p, "Name", e->Name, i, t->NumConnection);
\r
10122 PackAddStrEx(p, "Hostname", e->Hostname, i, t->NumConnection);
\r
10123 PackAddInt64Ex(p, "ConnectedTime", e->ConnectedTime, i, t->NumConnection);
\r
10124 PackAddIntEx(p, "Type", e->Type, i, t->NumConnection);
\r
10127 void FreeRpcEnumConnetion(RPC_ENUM_CONNECTION *t)
\r
10135 Free(t->Connections);
\r
10138 // RPC_DISCONNECT_CONNECTION
\r
10139 void InRpcDisconnectConnection(RPC_DISCONNECT_CONNECTION *t, PACK *p)
\r
10142 if (t == NULL || p == NULL)
\r
10147 Zero(t, sizeof(RPC_DISCONNECT_CONNECTION));
\r
10148 PackGetStr(p, "Name", t->Name, sizeof(t->Name));
\r
10150 void OutRpcDisconnectConnection(PACK *p, RPC_DISCONNECT_CONNECTION *t)
\r
10153 if (t == NULL || p == NULL)
\r
10158 PackAddStr(p, "Name", t->Name);
\r
10161 // RPC_CONNECTION_INFO
\r
10162 void InRpcConnectionInfo(RPC_CONNECTION_INFO *t, PACK *p)
\r
10165 if (t == NULL || p == NULL)
\r
10170 Zero(t, sizeof(RPC_CONNECTION_INFO));
\r
10171 PackGetStr(p, "Name", t->Name, sizeof(t->Name));
\r
10172 t->Ip = PackGetIp32(p, "Ip");
\r
10173 t->Port = PackGetInt(p, "Port");
\r
10174 t->ConnectedTime = PackGetInt64(p, "ConnectedTime");
\r
10175 PackGetStr(p, "Hostname", t->Hostname, sizeof(t->Hostname));
\r
10176 PackGetStr(p, "ServerStr", t->ServerStr, sizeof(t->ServerStr));
\r
10177 PackGetStr(p, "ClientStr", t->ClientStr, sizeof(t->ClientStr));
\r
10178 t->ServerVer = PackGetInt(p, "ServerVer");
\r
10179 t->ServerBuild = PackGetInt(p, "ServerBuild");
\r
10180 t->ClientVer = PackGetInt(p, "ClientVer");
\r
10181 t->ClientBuild = PackGetInt(p, "ClientBuild");
\r
10182 t->Type = PackGetInt(p, "Type");
\r
10184 void OutRpcConnectionInfo(PACK *p, RPC_CONNECTION_INFO *t)
\r
10187 if (t == NULL || p == NULL)
\r
10192 PackAddStr(p, "Name", t->Name);
\r
10193 PackAddIp32(p, "Ip", t->Ip);
\r
10194 PackAddInt(p, "Port", t->Port);
\r
10195 PackAddInt64(p, "ConnectedTime", t->ConnectedTime);
\r
10196 PackAddStr(p, "Hostname", t->Hostname);
\r
10197 PackAddStr(p, "ServerStr", t->ServerStr);
\r
10198 PackAddStr(p, "ClientStr", t->ClientStr);
\r
10199 PackAddInt(p, "ServerVer", t->ServerVer);
\r
10200 PackAddInt(p, "ServerBuild", t->ServerBuild);
\r
10201 PackAddInt(p, "ClientVer", t->ClientVer);
\r
10202 PackAddInt(p, "ClientBuild", t->ClientBuild);
\r
10203 PackAddInt(p, "Type", t->Type);
\r
10206 // RPC_SET_HUB_ONLINE
\r
10207 void InRpcSetHubOnline(RPC_SET_HUB_ONLINE *t, PACK *p)
\r
10210 if (t == NULL || p == NULL)
\r
10215 Zero(t, sizeof(RPC_SET_HUB_ONLINE));
\r
10216 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
10217 t->Online = PackGetBool(p, "Online");
\r
10219 void OutRpcSetHubOnline(PACK *p, RPC_SET_HUB_ONLINE *t)
\r
10222 if (t == NULL || p == NULL)
\r
10227 PackAddStr(p, "HubName", t->HubName);
\r
10228 PackAddBool(p, "Online", t->Online);
\r
10231 // RPC_HUB_STATUS
\r
10232 void InRpcHubStatus(RPC_HUB_STATUS *t, PACK *p)
\r
10234 Zero(t, sizeof(RPC_HUB_STATUS));
\r
10236 if (t == NULL || p == NULL)
\r
10241 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
10242 t->Online = PackGetBool(p, "Online");
\r
10243 t->HubType = PackGetInt(p, "HubType");
\r
10244 t->NumSessions = PackGetInt(p, "NumSessions");
\r
10245 t->NumSessionsClient = PackGetInt(p, "NumSessionsClient");
\r
10246 t->NumSessionsBridge = PackGetInt(p, "NumSessionsBridge");
\r
10247 t->NumAccessLists = PackGetInt(p, "NumAccessLists");
\r
10248 t->NumUsers = PackGetInt(p, "NumUsers");
\r
10249 t->NumGroups = PackGetInt(p, "NumGroups");
\r
10250 t->NumMacTables = PackGetInt(p, "NumMacTables");
\r
10251 t->NumIpTables = PackGetInt(p, "NumIpTables");
\r
10252 t->SecureNATEnabled = PackGetBool(p, "SecureNATEnabled");
\r
10253 InRpcTraffic(&t->Traffic, p);
\r
10254 t->LastCommTime = PackGetInt64(p, "LastCommTime");
\r
10255 t->CreatedTime = PackGetInt64(p, "CreatedTime");
\r
10256 t->LastLoginTime = PackGetInt64(p, "LastLoginTime");
\r
10257 t->NumLogin = PackGetInt(p, "NumLogin");
\r
10259 void OutRpcHubStatus(PACK *p, RPC_HUB_STATUS *t)
\r
10262 if (t == NULL || p == NULL)
\r
10267 PackAddStr(p, "HubName", t->HubName);
\r
10268 PackAddBool(p, "Online", t->Online);
\r
10269 PackAddInt(p, "HubType", t->HubType);
\r
10270 PackAddInt(p, "NumSessions", t->NumSessions);
\r
10271 PackAddInt(p, "NumSessionsClient", t->NumSessionsClient);
\r
10272 PackAddInt(p, "NumSessionsBridge", t->NumSessionsBridge);
\r
10273 PackAddInt(p, "NumAccessLists", t->NumAccessLists);
\r
10274 PackAddInt(p, "NumUsers", t->NumUsers);
\r
10275 PackAddInt(p, "NumGroups", t->NumGroups);
\r
10276 PackAddInt(p, "NumMacTables", t->NumMacTables);
\r
10277 PackAddInt(p, "NumIpTables", t->NumIpTables);
\r
10278 PackAddBool(p, "SecureNATEnabled", t->SecureNATEnabled);
\r
10279 OutRpcTraffic(p, &t->Traffic);
\r
10280 PackAddInt64(p, "LastCommTime", t->LastCommTime);
\r
10281 PackAddInt64(p, "CreatedTime", t->CreatedTime);
\r
10282 PackAddInt64(p, "LastLoginTime", t->LastLoginTime);
\r
10283 PackAddInt(p, "NumLogin", t->NumLogin);
\r
10287 void InRpcHubLog(RPC_HUB_LOG *t, PACK *p)
\r
10291 if (t == NULL || p == NULL)
\r
10296 Zero(t, sizeof(RPC_HUB_LOG));
\r
10297 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
10298 t->LogSetting.SaveSecurityLog = PackGetBool(p, "SaveSecurityLog");
\r
10299 t->LogSetting.SecurityLogSwitchType = PackGetInt(p, "SecurityLogSwitchType");
\r
10300 t->LogSetting.SavePacketLog = PackGetBool(p, "SavePacketLog");
\r
10301 t->LogSetting.PacketLogSwitchType = PackGetInt(p, "PacketLogSwitchType");
\r
10302 for (i = 0;i < NUM_PACKET_LOG;i++)
\r
10304 t->LogSetting.PacketLogConfig[i] = PackGetIntEx(p, "PacketLogConfig", i);
\r
10307 void OutRpcHubLog(PACK *p, RPC_HUB_LOG *t)
\r
10311 if (t == NULL || p == NULL)
\r
10316 PackAddStr(p, "HubName", t->HubName);
\r
10317 PackAddBool(p, "SaveSecurityLog", t->LogSetting.SaveSecurityLog);
\r
10318 PackAddInt(p, "SecurityLogSwitchType", t->LogSetting.SecurityLogSwitchType);
\r
10319 PackAddBool(p, "SavePacketLog", t->LogSetting.SavePacketLog);
\r
10320 PackAddInt(p, "PacketLogSwitchType", t->LogSetting.PacketLogSwitchType);
\r
10321 for (i = 0;i < NUM_PACKET_LOG;i++)
\r
10323 PackAddIntEx(p, "PacketLogConfig", t->LogSetting.PacketLogConfig[i], i, NUM_PACKET_LOG);
\r
10327 // RPC_HUB_ADD_CA
\r
10328 void InRpcHubAddCa(RPC_HUB_ADD_CA *t, PACK *p)
\r
10331 if (t == NULL || p == NULL)
\r
10336 Zero(t, sizeof(RPC_HUB_ADD_CA));
\r
10337 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
10338 t->Cert = PackGetX(p, "Cert");
\r
10340 void OutRpcHubAddCa(PACK *p, RPC_HUB_ADD_CA *t)
\r
10343 if (t == NULL || p == NULL)
\r
10348 PackAddStr(p, "HubName", t->HubName);
\r
10349 PackAddX(p, "Cert", t->Cert);
\r
10351 void FreeRpcHubAddCa(RPC_HUB_ADD_CA *t)
\r
10362 // RPC_HUB_ENUM_CA
\r
10363 void InRpcHubEnumCa(RPC_HUB_ENUM_CA *t, PACK *p)
\r
10367 if (t == NULL || p == NULL)
\r
10372 Zero(t, sizeof(RPC_HUB_ENUM_CA));
\r
10373 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
10374 t->NumCa = PackGetIndexCount(p, "Key");
\r
10375 t->Ca = ZeroMalloc(sizeof(RPC_HUB_ENUM_CA_ITEM) * t->NumCa);
\r
10377 for (i = 0;i < t->NumCa;i++)
\r
10379 RPC_HUB_ENUM_CA_ITEM *e = &t->Ca[i];
\r
10381 e->Key = PackGetIntEx(p, "Key", i);
\r
10382 PackGetUniStrEx(p, "SubjectName", e->SubjectName, sizeof(e->SubjectName), i);
\r
10383 PackGetUniStrEx(p, "IssuerName", e->IssuerName, sizeof(e->IssuerName), i);
\r
10384 e->Expires = PackGetInt64Ex(p, "Expires", i);
\r
10387 void OutRpcHubEnumCa(PACK *p, RPC_HUB_ENUM_CA *t)
\r
10390 PackAddStr(p, "HubName", t->HubName);
\r
10392 if (t == NULL || p == NULL)
\r
10397 for (i = 0;i < t->NumCa;i++)
\r
10399 RPC_HUB_ENUM_CA_ITEM *e = &t->Ca[i];
\r
10401 PackAddIntEx(p, "Key", e->Key, i, t->NumCa);
\r
10402 PackAddUniStrEx(p, "SubjectName", e->SubjectName, i, t->NumCa);
\r
10403 PackAddUniStrEx(p, "IssuerName", e->IssuerName, i, t->NumCa);
\r
10404 PackAddInt64Ex(p, "Expires", e->Expires, i, t->NumCa);
\r
10407 void FreeRpcHubEnumCa(RPC_HUB_ENUM_CA *t)
\r
10418 // RPC_HUB_GET_CA
\r
10419 void InRpcHubGetCa(RPC_HUB_GET_CA *t, PACK *p)
\r
10422 if (t == NULL || p == NULL)
\r
10427 Zero(t, sizeof(RPC_HUB_GET_CA));
\r
10428 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
10429 t->Key = PackGetInt(p, "Key");
\r
10430 t->Cert = PackGetX(p, "Cert");
\r
10432 void OutRpcHubGetCa(PACK *p, RPC_HUB_GET_CA *t)
\r
10435 if (t == NULL || p == NULL)
\r
10440 PackAddStr(p, "HubName", t->HubName);
\r
10441 PackAddInt(p, "Key", t->Key);
\r
10442 PackAddX(p, "Cert", t->Cert);
\r
10444 void FreeRpcHubGetCa(RPC_HUB_GET_CA *t)
\r
10455 // RPC_HUB_DELETE_CA
\r
10456 void InRpcHubDeleteCa(RPC_HUB_DELETE_CA *t, PACK *p)
\r
10459 if (t == NULL || p == NULL)
\r
10464 Zero(t, sizeof(RPC_HUB_DELETE_CA));
\r
10465 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
10466 t->Key = PackGetInt(p, "Key");
\r
10468 void OutRpcHubDeleteCa(PACK *p, RPC_HUB_DELETE_CA *t)
\r
10471 if (t == NULL || p == NULL)
\r
10476 PackAddStr(p, "HubName", t->HubName);
\r
10477 PackAddInt(p, "Key", t->Key);
\r
10480 // RPC_CREATE_LINK
\r
10481 void InRpcCreateLink(RPC_CREATE_LINK *t, PACK *p)
\r
10485 if (t == NULL || p == NULL)
\r
10490 Zero(t, sizeof(RPC_CREATE_LINK));
\r
10491 PackGetStr(p, "HubName_Ex", t->HubName, sizeof(t->HubName));
\r
10492 t->Online = PackGetBool(p, "Online");
\r
10493 t->ClientOption = ZeroMalloc(sizeof(CLIENT_OPTION));
\r
10494 InRpcClientOption(t->ClientOption, p);
\r
10495 t->ClientAuth = ZeroMalloc(sizeof(CLIENT_AUTH));
\r
10496 InRpcClientAuth(t->ClientAuth, p);
\r
10497 InRpcPolicy(&t->Policy, p);
\r
10499 t->CheckServerCert = PackGetBool(p, "CheckServerCert");
\r
10500 b = PackGetBuf(p, "ServerCert");
\r
10503 t->ServerCert = BufToX(b, false);
\r
10507 void OutRpcCreateLink(PACK *p, RPC_CREATE_LINK *t)
\r
10510 if (t == NULL || p == NULL)
\r
10515 PackAddStr(p, "HubName_Ex",t->HubName);
\r
10516 PackAddBool(p, "Online", t->Online);
\r
10517 OutRpcClientOption(p, t->ClientOption);
\r
10518 OutRpcClientAuth(p, t->ClientAuth);
\r
10519 OutRpcPolicy(p, &t->Policy);
\r
10521 PackAddBool(p, "CheckServerCert", t->CheckServerCert);
\r
10522 if (t->ServerCert != NULL)
\r
10525 b = XToBuf(t->ServerCert, false);
\r
10526 PackAddBuf(p, "ServerCert", b);
\r
10530 void FreeRpcCreateLink(RPC_CREATE_LINK *t)
\r
10538 if (t->ServerCert != NULL)
\r
10540 FreeX(t->ServerCert);
\r
10542 Free(t->ClientOption);
\r
10543 CiFreeClientAuth(t->ClientAuth);
\r
10547 void InRpcEnumLink(RPC_ENUM_LINK *t, PACK *p)
\r
10551 if (t == NULL || p == NULL)
\r
10556 Zero(t, sizeof(RPC_ENUM_LINK));
\r
10557 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
10558 t->NumLink = PackGetIndexCount(p, "AccountName");
\r
10559 t->Links = ZeroMalloc(sizeof(RPC_ENUM_LINK_ITEM) * t->NumLink);
\r
10561 for (i = 0;i < t->NumLink;i++)
\r
10563 RPC_ENUM_LINK_ITEM *e = &t->Links[i];
\r
10565 PackGetUniStrEx(p, "AccountName", e->AccountName, sizeof(e->AccountName), i);
\r
10566 PackGetStrEx(p, "Hostname", e->Hostname, sizeof(e->Hostname), i);
\r
10567 PackGetStrEx(p, "ConnectedHubName", e->HubName, sizeof(e->HubName), i);
\r
10568 e->Online = PackGetBoolEx(p, "Online", i);
\r
10569 e->ConnectedTime = PackGetInt64Ex(p, "ConnectedTime", i);
\r
10570 e->Connected = PackGetBoolEx(p, "Connected", i);
\r
10571 e->LastError = PackGetIntEx(p, "LastError", i);
\r
10574 void OutRpcEnumLink(PACK *p, RPC_ENUM_LINK *t)
\r
10578 if (t == NULL || p == NULL)
\r
10583 PackAddStr(p, "HubName", t->HubName);
\r
10585 for (i = 0;i < t->NumLink;i++)
\r
10587 RPC_ENUM_LINK_ITEM *e = &t->Links[i];
\r
10589 PackAddUniStrEx(p, "AccountName", e->AccountName, i, t->NumLink);
\r
10590 PackAddStrEx(p, "ConnectedHubName", e->HubName, i, t->NumLink);
\r
10591 PackAddStrEx(p, "Hostname", e->Hostname, i, t->NumLink);
\r
10592 PackAddBoolEx(p, "Online", e->Online, i, t->NumLink);
\r
10593 PackAddInt64Ex(p, "ConnectedTime", e->ConnectedTime, i, t->NumLink);
\r
10594 PackAddBoolEx(p, "Connected", e->Connected, i, t->NumLink);
\r
10595 PackAddIntEx(p, "LastError", e->LastError, i, t->NumLink);
\r
10598 void FreeRpcEnumLink(RPC_ENUM_LINK *t)
\r
10609 // RPC_LINK_STATUS
\r
10610 void InRpcLinkStatus(RPC_LINK_STATUS *t, PACK *p)
\r
10613 if (t == NULL || p == NULL)
\r
10618 Zero(t, sizeof(RPC_LINK_STATUS));
\r
10619 PackGetStr(p, "HubName_Ex", t->HubName, sizeof(t->HubName));
\r
10620 PackGetUniStr(p, "AccountName", t->AccountName, sizeof(t->AccountName));
\r
10621 InRpcClientGetConnectionStatus(&t->Status, p);
\r
10623 void OutRpcLinkStatus(PACK *p, RPC_LINK_STATUS *t)
\r
10626 if (t == NULL || p == NULL)
\r
10631 PackAddStr(p, "HubName_Ex", t->HubName);
\r
10632 PackAddUniStr(p, "AccountName", t->AccountName);
\r
10633 OutRpcClientGetConnectionStatus(p, &t->Status);
\r
10635 void FreeRpcLinkStatus(RPC_LINK_STATUS *t)
\r
10643 CiFreeClientGetConnectionStatus(&t->Status);
\r
10647 void InRpcLink(RPC_LINK *t, PACK *p)
\r
10650 if (t == NULL || p == NULL)
\r
10655 Zero(t, sizeof(RPC_LINK));
\r
10656 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
10657 PackGetUniStr(p, "AccountName", t->AccountName, sizeof(t->AccountName));
\r
10659 void OutRpcLink(PACK *p, RPC_LINK *t)
\r
10667 PackAddStr(p, "HubName", t->HubName);
\r
10668 PackAddUniStr(p, "AccountName", t->AccountName);
\r
10671 // RPC_RENAME_LINK
\r
10672 void InRpcRenameLink(RPC_RENAME_LINK *t, PACK *p)
\r
10675 if (t == NULL || p == NULL)
\r
10680 Zero(t, sizeof(RPC_RENAME_LINK));
\r
10681 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
10682 PackGetUniStr(p, "OldAccountName", t->OldAccountName, sizeof(t->OldAccountName));
\r
10683 PackGetUniStr(p, "NewAccountName", t->NewAccountName, sizeof(t->NewAccountName));
\r
10685 void OutRpcRenameLink(PACK *p, RPC_RENAME_LINK *t)
\r
10688 if (p == NULL || t == NULL)
\r
10693 PackAddStr(p, "HubName", t->HubName);
\r
10694 PackAddUniStr(p, "OldAccountName", t->OldAccountName);
\r
10695 PackAddUniStr(p, "NewAccountName", t->NewAccountName);
\r
10699 void InRpcAccessEx(ACCESS *a, PACK *p, UINT index)
\r
10702 if (a == NULL || p == NULL)
\r
10707 Zero(a, sizeof(ACCESS));
\r
10708 a->Id = PackGetIntEx(p, "Id", index);
\r
10709 PackGetUniStrEx(p, "Note", a->Note, sizeof(a->Note), index);
\r
10710 a->Active = PackGetBoolEx(p, "Active", index);
\r
10711 a->Priority = PackGetIntEx(p, "Priority", index);
\r
10712 a->Discard = PackGetBoolEx(p, "Discard", index);
\r
10713 a->SrcIpAddress = PackGetIp32Ex(p, "SrcIpAddress", index);
\r
10714 a->SrcSubnetMask = PackGetIp32Ex(p, "SrcSubnetMask", index);
\r
10715 a->DestIpAddress = PackGetIp32Ex(p, "DestIpAddress", index);
\r
10716 a->DestSubnetMask = PackGetIp32Ex(p, "DestSubnetMask", index);
\r
10717 a->Protocol = PackGetIntEx(p, "Protocol", index);
\r
10718 a->SrcPortStart = PackGetIntEx(p, "SrcPortStart", index);
\r
10719 a->SrcPortEnd = PackGetIntEx(p, "SrcPortEnd", index);
\r
10720 a->DestPortStart = PackGetIntEx(p, "DestPortStart", index);
\r
10721 a->DestPortEnd = PackGetIntEx(p, "DestPortEnd", index);
\r
10722 a->SrcUsernameHash = PackGetIntEx(p, "SrcUsernameHash", index);
\r
10723 PackGetStrEx(p, "SrcUsername", a->SrcUsername, sizeof(a->SrcUsername), index);
\r
10724 a->DestUsernameHash = PackGetIntEx(p, "DestUsernameHash", index);
\r
10725 PackGetStrEx(p, "DestUsername", a->DestUsername, sizeof(a->DestUsername), index);
\r
10726 a->CheckSrcMac = PackGetBoolEx(p, "CheckSrcMac", index);
\r
10727 PackGetDataEx2(p, "SrcMacAddress", a->SrcMacAddress, sizeof(a->SrcMacAddress), index);
\r
10728 PackGetDataEx2(p, "SrcMacMask", a->SrcMacMask, sizeof(a->SrcMacMask), index);
\r
10729 a->CheckDstMac = PackGetBoolEx(p, "CheckDstMac", index);
\r
10730 PackGetDataEx2(p, "DstMacAddress", a->DstMacAddress, sizeof(a->DstMacAddress), index);
\r
10731 PackGetDataEx2(p, "DstMacMask", a->DstMacMask, sizeof(a->DstMacMask), index);
\r
10732 a->CheckTcpState = PackGetBoolEx(p, "CheckTcpState", index);
\r
10733 a->Established = PackGetBoolEx(p, "Established", index);
\r
10734 a->Delay = PackGetIntEx(p, "Delay", index);
\r
10735 a->Jitter = PackGetIntEx(p, "Jitter", index);
\r
10736 a->Loss = PackGetIntEx(p, "Loss", index);
\r
10737 a->IsIPv6 = PackGetBoolEx(p, "IsIPv6", index);
\r
10740 PackGetIp6AddrEx(p, "SrcIpAddress6", &a->SrcIpAddress6, index);
\r
10741 PackGetIp6AddrEx(p, "SrcSubnetMask6", &a->SrcSubnetMask6, index);
\r
10742 PackGetIp6AddrEx(p, "DestIpAddress6", &a->DestIpAddress6, index);
\r
10743 PackGetIp6AddrEx(p, "DestSubnetMask6", &a->DestSubnetMask6, index);
\r
10746 void InRpcAccess(ACCESS *a, PACK *p)
\r
10749 if (a == NULL || p == NULL)
\r
10754 InRpcAccessEx(a, p, 0);
\r
10756 void OutRpcAccessEx(PACK *p, ACCESS *a, UINT index, UINT total)
\r
10759 if (a == NULL || p == NULL)
\r
10764 PackAddIntEx(p, "Id", a->Id, index, total);
\r
10765 PackAddUniStrEx(p, "Note", a->Note, index, total);
\r
10766 PackAddBoolEx(p, "Active", a->Active, index, total);
\r
10767 PackAddIntEx(p, "Priority", a->Priority, index, total);
\r
10768 PackAddBoolEx(p, "Discard", a->Discard, index, total);
\r
10771 PackAddIp32Ex(p, "SrcIpAddress", 0xFDFFFFDF, index, total);
\r
10772 PackAddIp32Ex(p, "SrcSubnetMask", 0xFFFFFFFF, index, total);
\r
10773 PackAddIp32Ex(p, "DestIpAddress", 0xFDFFFFDF, index, total);
\r
10774 PackAddIp32Ex(p, "DestSubnetMask", 0xFFFFFFFF, index, total);
\r
10778 PackAddIp32Ex(p, "SrcIpAddress", a->SrcIpAddress, index, total);
\r
10779 PackAddIp32Ex(p, "SrcSubnetMask", a->SrcSubnetMask, index, total);
\r
10780 PackAddIp32Ex(p, "DestIpAddress", a->DestIpAddress, index, total);
\r
10781 PackAddIp32Ex(p, "DestSubnetMask", a->DestSubnetMask, index, total);
\r
10783 PackAddIntEx(p, "Protocol", a->Protocol, index, total);
\r
10784 PackAddIntEx(p, "SrcPortStart", a->SrcPortStart, index, total);
\r
10785 PackAddIntEx(p, "SrcPortEnd", a->SrcPortEnd, index, total);
\r
10786 PackAddIntEx(p, "DestPortStart", a->DestPortStart, index, total);
\r
10787 PackAddIntEx(p, "DestPortEnd", a->DestPortEnd, index, total);
\r
10788 PackAddIntEx(p, "SrcUsernameHash", a->SrcUsernameHash, index, total);
\r
10789 PackAddStrEx(p, "SrcUsername", a->SrcUsername, index, total);
\r
10790 PackAddIntEx(p, "DestUsernameHash", a->DestUsernameHash, index, total);
\r
10791 PackAddStrEx(p, "DestUsername", a->DestUsername, index, total);
\r
10792 PackAddBoolEx(p, "CheckSrcMac", a->CheckSrcMac, index, total);
\r
10793 PackAddDataEx(p, "SrcMacAddress", a->SrcMacAddress, sizeof(a->SrcMacAddress), index, total);
\r
10794 PackAddDataEx(p, "SrcMacMask", a->SrcMacMask, sizeof(a->SrcMacMask), index, total);
\r
10795 PackAddBoolEx(p, "CheckDstMac", a->CheckDstMac, index, total);
\r
10796 PackAddDataEx(p, "DstMacAddress", a->DstMacAddress, sizeof(a->DstMacAddress), index, total);
\r
10797 PackAddDataEx(p, "DstMacMask", a->DstMacMask, sizeof(a->DstMacMask), index, total);
\r
10798 PackAddBoolEx(p, "CheckTcpState", a->CheckTcpState, index, total);
\r
10799 PackAddBoolEx(p, "Established", a->Established, index, total);
\r
10800 PackAddIntEx(p, "Delay", a->Delay, index, total);
\r
10801 PackAddIntEx(p, "Jitter", a->Jitter, index, total);
\r
10802 PackAddIntEx(p, "Loss", a->Loss, index, total);
\r
10803 PackAddBoolEx(p, "IsIPv6", a->IsIPv6, index, total);
\r
10806 PackAddIp6AddrEx(p, "SrcIpAddress6", &a->SrcIpAddress6, index, total);
\r
10807 PackAddIp6AddrEx(p, "SrcSubnetMask6", &a->SrcSubnetMask6, index, total);
\r
10808 PackAddIp6AddrEx(p, "DestIpAddress6", &a->DestIpAddress6, index, total);
\r
10809 PackAddIp6AddrEx(p, "DestSubnetMask6", &a->DestSubnetMask6, index, total);
\r
10815 Zero(&zero, sizeof(zero));
\r
10817 PackAddIp6AddrEx(p, "SrcIpAddress6", &zero, index, total);
\r
10818 PackAddIp6AddrEx(p, "SrcSubnetMask6", &zero, index, total);
\r
10819 PackAddIp6AddrEx(p, "DestIpAddress6", &zero, index, total);
\r
10820 PackAddIp6AddrEx(p, "DestSubnetMask6", &zero, index, total);
\r
10823 void OutRpcAccess(PACK *p, ACCESS *a)
\r
10826 if (a == NULL || p == NULL)
\r
10831 OutRpcAccessEx(p, a, 0, 1);
\r
10834 // RPC_ENUM_ACCESS_LIST
\r
10835 void InRpcEnumAccessList(RPC_ENUM_ACCESS_LIST *a, PACK *p)
\r
10839 if (a == NULL || p == NULL)
\r
10844 Zero(a, sizeof(RPC_ENUM_ACCESS_LIST));
\r
10845 PackGetStr(p, "HubName", a->HubName, sizeof(a->HubName));
\r
10846 a->NumAccess = PackGetIndexCount(p, "Protocol");
\r
10847 a->Accesses = ZeroMalloc(sizeof(ACCESS) * a->NumAccess);
\r
10849 for (i = 0;i < a->NumAccess;i++)
\r
10851 ACCESS *e = &a->Accesses[i];
\r
10853 InRpcAccessEx(e, p, i);
\r
10856 void OutRpcEnumAccessList(PACK *p, RPC_ENUM_ACCESS_LIST *a)
\r
10859 PackAddStr(p, "HubName", a->HubName);
\r
10861 if (a == NULL || p == NULL)
\r
10866 for (i = 0;i < a->NumAccess;i++)
\r
10868 ACCESS *e = &a->Accesses[i];
\r
10870 OutRpcAccessEx(p, e, i, a->NumAccess);
\r
10873 void FreeRpcEnumAccessList(RPC_ENUM_ACCESS_LIST *a)
\r
10881 Free(a->Accesses);
\r
10885 void *InRpcAuthData(PACK *p, UINT *authtype)
\r
10887 wchar_t tmp[MAX_SIZE];
\r
10888 AUTHPASSWORD *pw;
\r
10889 AUTHUSERCERT *usercert;
\r
10890 AUTHROOTCERT *rootcert;
\r
10891 AUTHRADIUS *radius;
\r
10899 if (authtype == NULL)
\r
10904 *authtype = PackGetInt(p, "AuthType");
\r
10906 switch (*authtype)
\r
10908 case AUTHTYPE_PASSWORD:
\r
10909 pw = ZeroMalloc(sizeof(AUTHPASSWORD));
\r
10910 PackGetData2(p, "HashedKey", pw->HashedKey, sizeof(pw->HashedKey));
\r
10913 case AUTHTYPE_USERCERT:
\r
10914 usercert = ZeroMalloc(sizeof(AUTHUSERCERT));
\r
10915 usercert->UserX = PackGetX(p, "UserX");
\r
10918 case AUTHTYPE_ROOTCERT:
\r
10919 rootcert = ZeroMalloc(sizeof(AUTHROOTCERT));
\r
10920 b = PackGetBuf(p, "Serial");
\r
10923 rootcert->Serial = NewXSerial(b->Buf, b->Size);
\r
10926 if (PackGetUniStr(p, "CommonName", tmp, sizeof(tmp)))
\r
10928 rootcert->CommonName = CopyUniStr(tmp);
\r
10932 case AUTHTYPE_RADIUS:
\r
10933 radius = ZeroMalloc(sizeof(AUTHRADIUS));
\r
10934 if (PackGetUniStr(p, "RadiusUsername", tmp, sizeof(tmp)))
\r
10936 radius->RadiusUsername = CopyUniStr(tmp);
\r
10940 radius->RadiusUsername = CopyUniStr(L"");
\r
10944 case AUTHTYPE_NT:
\r
10945 nt = ZeroMalloc(sizeof(AUTHNT));
\r
10946 if (PackGetUniStr(p, "NtUsername", tmp, sizeof(tmp)))
\r
10948 nt->NtUsername = CopyUniStr(tmp);
\r
10952 nt->NtUsername = CopyUniStr(L"");
\r
10959 void OutRpcAuthData(PACK *p, void *authdata, UINT authtype)
\r
10961 AUTHPASSWORD *pw = authdata;
\r
10962 AUTHUSERCERT *usercert = authdata;
\r
10963 AUTHROOTCERT *rootcert = authdata;
\r
10964 AUTHRADIUS *radius = authdata;
\r
10965 AUTHNT *nt = authdata;
\r
10972 PackAddInt(p, "AuthType", authtype);
\r
10974 switch (authtype)
\r
10976 case AUTHTYPE_PASSWORD:
\r
10977 PackAddData(p, "HashedKey", pw->HashedKey, sizeof(pw->HashedKey));
\r
10980 case AUTHTYPE_USERCERT:
\r
10981 PackAddX(p, "UserX", usercert->UserX);
\r
10984 case AUTHTYPE_ROOTCERT:
\r
10985 if (rootcert->Serial != NULL)
\r
10987 PackAddData(p, "Serial", rootcert->Serial->data, rootcert->Serial->size);
\r
10989 if (rootcert->CommonName != NULL)
\r
10991 PackAddUniStr(p, "CommonName", rootcert->CommonName);
\r
10995 case AUTHTYPE_RADIUS:
\r
10996 PackAddUniStr(p, "RadiusUsername", radius->RadiusUsername);
\r
10999 case AUTHTYPE_NT:
\r
11000 PackAddUniStr(p, "NtUsername", nt->NtUsername);
\r
11004 void FreeRpcAuthData(void *authdata, UINT authtype)
\r
11006 FreeAuthData(authtype, authdata);
\r
11010 void InRpcSetUser(RPC_SET_USER *t, PACK *p)
\r
11013 if (t == NULL || p == NULL)
\r
11018 Zero(t, sizeof(RPC_SET_USER));
\r
11019 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
11020 PackGetStr(p, "Name", t->Name, sizeof(t->Name));
\r
11021 PackGetStr(p, "GroupName", t->GroupName, sizeof(t->GroupName));
\r
11022 PackGetUniStr(p, "Realname", t->Realname, sizeof(t->Realname));
\r
11023 PackGetUniStr(p, "Note", t->Note, sizeof(t->Note));
\r
11024 t->CreatedTime = PackGetInt64(p, "CreatedTime");
\r
11025 t->UpdatedTime = PackGetInt64(p, "UpdatedTime");
\r
11026 t->ExpireTime = PackGetInt64(p, "ExpireTime");
\r
11027 t->AuthData = InRpcAuthData(p, &t->AuthType);
\r
11028 t->NumLogin = PackGetInt(p, "NumLogin");
\r
11029 InRpcTraffic(&t->Traffic, p);
\r
11031 if (PackGetBool(p, "UsePolicy"))
\r
11033 t->Policy = ZeroMalloc(sizeof(POLICY));
\r
11034 InRpcPolicy(t->Policy, p);
\r
11038 void OutRpcSetUser(PACK *p, RPC_SET_USER *t)
\r
11041 if (t == NULL || p == NULL)
\r
11046 PackAddStr(p, "HubName", t->HubName);
\r
11047 PackAddStr(p, "Name", t->Name);
\r
11048 PackAddStr(p, "GroupName", t->GroupName);
\r
11049 PackAddUniStr(p, "Realname", t->Realname);
\r
11050 PackAddUniStr(p, "Note", t->Note);
\r
11051 PackAddInt64(p, "CreatedTime", t->CreatedTime);
\r
11052 PackAddInt64(p, "UpdatedTime", t->UpdatedTime);
\r
11053 PackAddInt64(p, "ExpireTime", t->ExpireTime);
\r
11054 OutRpcAuthData(p, t->AuthData, t->AuthType);
\r
11055 PackAddInt(p, "NumLogin", t->NumLogin);
\r
11056 OutRpcTraffic(p, &t->Traffic);
\r
11058 if (t->Policy != NULL)
\r
11060 PackAddBool(p, "UsePolicy", true);
\r
11061 OutRpcPolicy(p, t->Policy);
\r
11064 void FreeRpcSetUser(RPC_SET_USER *t)
\r
11072 FreeRpcAuthData(t->AuthData, t->AuthType);
\r
11080 void InRpcEnumUser(RPC_ENUM_USER *t, PACK *p)
\r
11084 if (t == NULL || p == NULL)
\r
11089 Zero(t, sizeof(RPC_ENUM_USER));
\r
11090 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
11091 t->NumUser = PackGetIndexCount(p, "Name");
\r
11092 t->Users = ZeroMalloc(sizeof(RPC_ENUM_USER_ITEM) * t->NumUser);
\r
11094 for (i = 0;i < t->NumUser;i++)
\r
11096 RPC_ENUM_USER_ITEM *e = &t->Users[i];
\r
11098 PackGetStrEx(p, "Name", e->Name, sizeof(e->Name), i);
\r
11099 PackGetStrEx(p, "GroupName", e->GroupName, sizeof(e->GroupName), i);
\r
11100 PackGetUniStrEx(p, "Realname", e->Realname, sizeof(e->Realname), i);
\r
11101 PackGetUniStrEx(p, "Note", e->Note, sizeof(e->Note), i);
\r
11102 e->AuthType = PackGetIntEx(p, "AuthType", i);
\r
11103 e->LastLoginTime = PackGetInt64Ex(p, "LastLoginTime", i);
\r
11104 e->NumLogin = PackGetIntEx(p, "NumLogin", i);
\r
11105 e->DenyAccess = PackGetBoolEx(p, "DenyAccess", i);
\r
11108 void OutRpcEnumUser(PACK *p, RPC_ENUM_USER *t)
\r
11111 PackAddStr(p, "HubName", t->HubName);
\r
11113 if (t == NULL || p == NULL)
\r
11118 for (i = 0;i < t->NumUser;i++)
\r
11120 RPC_ENUM_USER_ITEM *e = &t->Users[i];
\r
11122 PackAddStrEx(p, "Name", e->Name, i, t->NumUser);
\r
11123 PackAddStrEx(p, "GroupName", e->GroupName, i, t->NumUser);
\r
11124 PackAddUniStrEx(p, "Realname", e->Realname, i, t->NumUser);
\r
11125 PackAddUniStrEx(p, "Note", e->Note, i, t->NumUser);
\r
11126 PackAddIntEx(p, "AuthType", e->AuthType, i, t->NumUser);
\r
11127 PackAddInt64Ex(p, "LastLoginTime", e->LastLoginTime, i, t->NumUser);
\r
11128 PackAddIntEx(p, "NumLogin", e->NumLogin, i, t->NumUser);
\r
11129 PackAddBoolEx(p, "DenyAccess", e->DenyAccess, i, t->NumUser);
\r
11132 void FreeRpcEnumUser(RPC_ENUM_USER *t)
\r
11144 void InRpcSetGroup(RPC_SET_GROUP *t, PACK *p)
\r
11147 if (t == NULL || p == NULL)
\r
11152 Zero(t, sizeof(RPC_SET_GROUP));
\r
11153 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
11154 PackGetStr(p, "Name", t->Name, sizeof(t->Name));
\r
11155 PackGetUniStr(p, "Realname", t->Realname, sizeof(t->Realname));
\r
11156 PackGetUniStr(p, "Note", t->Note, sizeof(t->Note));
\r
11157 InRpcTraffic(&t->Traffic, p);
\r
11159 if (PackGetBool(p, "UsePolicy"))
\r
11161 t->Policy = ZeroMalloc(sizeof(POLICY));
\r
11162 InRpcPolicy(t->Policy, p);
\r
11165 void OutRpcSetGroup(PACK *p, RPC_SET_GROUP *t)
\r
11168 if (t == NULL || p == NULL)
\r
11173 PackAddStr(p, "HubName", t->HubName);
\r
11174 PackAddStr(p, "Name", t->Name);
\r
11175 PackAddUniStr(p, "Realname", t->Realname);
\r
11176 PackAddUniStr(p, "Note", t->Note);
\r
11177 OutRpcTraffic(p, &t->Traffic);
\r
11179 if (t->Policy != NULL)
\r
11181 PackAddBool(p, "UsePolicy", true);
\r
11182 OutRpcPolicy(p, t->Policy);
\r
11185 void FreeRpcSetGroup(RPC_SET_GROUP *t)
\r
11190 // RPC_ENUM_GROUP
\r
11191 void InRpcEnumGroup(RPC_ENUM_GROUP *t, PACK *p)
\r
11195 if (t == NULL || p == NULL)
\r
11200 Zero(t, sizeof(RPC_ENUM_GROUP));
\r
11201 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
11202 t->NumGroup = PackGetIndexCount(p, "Name");
\r
11203 t->Groups = ZeroMalloc(sizeof(RPC_ENUM_GROUP_ITEM) * t->NumGroup);
\r
11205 for (i = 0;i < t->NumGroup;i++)
\r
11207 RPC_ENUM_GROUP_ITEM *e = &t->Groups[i];
\r
11209 PackGetStrEx(p, "Name", e->Name, sizeof(e->Name), i);
\r
11210 PackGetUniStrEx(p, "Realname", e->Realname, sizeof(e->Realname), i);
\r
11211 PackGetUniStrEx(p, "Note", e->Note, sizeof(e->Note), i);
\r
11212 e->NumUsers = PackGetIntEx(p, "NumUsers", i);
\r
11213 e->DenyAccess = PackGetBoolEx(p, "DenyAccess", i);
\r
11216 void OutRpcEnumGroup(PACK *p, RPC_ENUM_GROUP *t)
\r
11220 if (t == NULL || p == NULL)
\r
11225 PackAddStr(p, "HubName", t->HubName);
\r
11227 for (i = 0;i < t->NumGroup;i++)
\r
11229 RPC_ENUM_GROUP_ITEM *e = &t->Groups[i];
\r
11231 PackAddStrEx(p, "Name", e->Name, i, t->NumGroup);
\r
11232 PackAddUniStrEx(p, "Realname", e->Realname, i, t->NumGroup);
\r
11233 PackAddUniStrEx(p, "Note", e->Note, i, t->NumGroup);
\r
11234 PackAddIntEx(p, "NumUsers", e->NumUsers, i, t->NumGroup);
\r
11235 PackAddBoolEx(p, "DenyAccess", e->DenyAccess, i, t->NumGroup);
\r
11238 void FreeRpcEnumGroup(RPC_ENUM_GROUP *t)
\r
11249 // RPC_DELETE_USER
\r
11250 void InRpcDeleteUser(RPC_DELETE_USER *t, PACK *p)
\r
11253 if (t == NULL || p == NULL)
\r
11258 Zero(t, sizeof(RPC_DELETE_USER));
\r
11259 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
11260 PackGetStr(p, "Name", t->Name, sizeof(t->Name));
\r
11262 void OutRpcDeleteUser(PACK *p, RPC_DELETE_USER *t)
\r
11265 if (t == NULL || p == NULL)
\r
11270 PackAddStr(p, "HubName", t->HubName);
\r
11271 PackAddStr(p, "Name", t->Name);
\r
11274 // RPC_ENUM_SESSION
\r
11275 void InRpcEnumSession(RPC_ENUM_SESSION *t, PACK *p)
\r
11279 if (t == NULL || p == NULL)
\r
11284 Zero(t, sizeof(RPC_ENUM_SESSION));
\r
11285 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
11286 t->NumSession = PackGetIndexCount(p, "Name");
\r
11287 t->Sessions = ZeroMalloc(sizeof(RPC_ENUM_SESSION_ITEM) * t->NumSession);
\r
11289 for (i = 0;i < t->NumSession;i++)
\r
11291 RPC_ENUM_SESSION_ITEM *e = &t->Sessions[i];
\r
11293 PackGetStrEx(p, "Name", e->Name, sizeof(e->Name), i);
\r
11294 PackGetStrEx(p, "Username", e->Username, sizeof(e->Username), i);
\r
11295 e->Ip = PackGetIntEx(p, "Ip", i);
\r
11296 PackGetStrEx(p, "Hostname", e->Hostname, sizeof(e->Hostname), i);
\r
11297 e->MaxNumTcp = PackGetIntEx(p, "MaxNumTcp", i);
\r
11298 e->CurrentNumTcp = PackGetIntEx(p, "CurrentNumTcp", i);
\r
11299 e->PacketSize = PackGetInt64Ex(p, "PacketSize", i);
\r
11300 e->PacketNum = PackGetInt64Ex(p, "PacketNum", i);
\r
11301 e->RemoteSession = PackGetBoolEx(p, "RemoteSession", i);
\r
11302 e->LinkMode = PackGetBoolEx(p, "LinkMode", i);
\r
11303 e->SecureNATMode = PackGetBoolEx(p, "SecureNATMode", i);
\r
11304 e->BridgeMode = PackGetBoolEx(p, "BridgeMode", i);
\r
11305 e->Layer3Mode = PackGetBoolEx(p, "Layer3Mode", i);
\r
11306 e->Client_BridgeMode = PackGetBoolEx(p, "Client_BridgeMode", i);
\r
11307 e->Client_MonitorMode = PackGetBoolEx(p, "Client_MonitorMode", i);
\r
11308 PackGetStrEx(p, "RemoteHostname", e->RemoteHostname, sizeof(e->RemoteHostname), i);
\r
11309 e->VLanId = PackGetIntEx(p, "VLanId", i);
\r
11310 PackGetDataEx2(p, "UniqueId", e->UniqueId, sizeof(e->UniqueId), i);
\r
11313 void OutRpcEnumSession(PACK *p, RPC_ENUM_SESSION *t)
\r
11316 PackAddStr(p, "HubName", t->HubName);
\r
11318 if (t == NULL || p == NULL)
\r
11323 for (i = 0;i < t->NumSession;i++)
\r
11325 RPC_ENUM_SESSION_ITEM *e = &t->Sessions[i];
\r
11327 PackAddStrEx(p, "Name", e->Name, i, t->NumSession);
\r
11328 PackAddStrEx(p, "Username", e->Username, i, t->NumSession);
\r
11329 PackAddIp32Ex(p, "Ip", e->Ip, i, t->NumSession);
\r
11330 PackAddStrEx(p, "Hostname", e->Hostname, i, t->NumSession);
\r
11331 PackAddIntEx(p, "MaxNumTcp", e->MaxNumTcp, i, t->NumSession);
\r
11332 PackAddIntEx(p, "CurrentNumTcp", e->CurrentNumTcp, i, t->NumSession);
\r
11333 PackAddInt64Ex(p, "PacketSize", e->PacketSize, i, t->NumSession);
\r
11334 PackAddInt64Ex(p, "PacketNum", e->PacketNum, i, t->NumSession);
\r
11335 PackAddBoolEx(p, "RemoteSession", e->RemoteSession, i, t->NumSession);
\r
11336 PackAddStrEx(p, "RemoteHostname", e->RemoteHostname, i, t->NumSession);
\r
11337 PackAddBoolEx(p, "LinkMode", e->LinkMode, i, t->NumSession);
\r
11338 PackAddBoolEx(p, "SecureNATMode", e->SecureNATMode, i, t->NumSession);
\r
11339 PackAddBoolEx(p, "BridgeMode", e->BridgeMode, i, t->NumSession);
\r
11340 PackAddBoolEx(p, "Layer3Mode", e->Layer3Mode, i, t->NumSession);
\r
11341 PackAddBoolEx(p, "Client_BridgeMode", e->Client_BridgeMode, i, t->NumSession);
\r
11342 PackAddBoolEx(p, "Client_MonitorMode", e->Client_MonitorMode, i, t->NumSession);
\r
11343 PackAddIntEx(p, "VLanId", e->VLanId, i, t->NumSession);
\r
11344 PackAddDataEx(p, "UniqueId", e->UniqueId, sizeof(e->UniqueId), i, t->NumSession);
\r
11347 void FreeRpcEnumSession(RPC_ENUM_SESSION *t)
\r
11355 Free(t->Sessions);
\r
11359 void InRpcKeyPair(RPC_KEY_PAIR *t, PACK *p)
\r
11362 if (t == NULL || p == NULL)
\r
11367 t->Cert = PackGetX(p, "Cert");
\r
11368 t->Key = PackGetK(p, "Key");
\r
11370 void OutRpcKeyPair(PACK *p, RPC_KEY_PAIR *t)
\r
11373 if (p == NULL || t == NULL)
\r
11378 PackAddX(p, "Cert", t->Cert);
\r
11379 PackAddK(p, "Key", t->Key);
\r
11381 void FreeRpcKeyPair(RPC_KEY_PAIR *t)
\r
11388 void InRpcNodeInfo(NODE_INFO *t, PACK *p)
\r
11391 if (t == NULL || p == NULL)
\r
11396 Zero(t, sizeof(NODE_INFO));
\r
11397 PackGetStr(p, "ClientProductName", t->ClientProductName, sizeof(t->ClientProductName));
\r
11398 PackGetStr(p, "ServerProductName", t->ServerProductName, sizeof(t->ServerProductName));
\r
11399 PackGetStr(p, "ClientOsName", t->ClientOsName, sizeof(t->ClientOsName));
\r
11400 PackGetStr(p, "ClientOsVer", t->ClientOsVer, sizeof(t->ClientOsVer));
\r
11401 PackGetStr(p, "ClientOsProductId", t->ClientOsProductId, sizeof(t->ClientOsProductId));
\r
11402 PackGetStr(p, "ClientHostname", t->ClientHostname, sizeof(t->ClientHostname));
\r
11403 PackGetStr(p, "ServerHostname", t->ServerHostname, sizeof(t->ServerHostname));
\r
11404 PackGetStr(p, "ProxyHostname", t->ProxyHostname, sizeof(t->ProxyHostname));
\r
11405 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
11406 PackGetData2(p, "UniqueId", t->UniqueId, sizeof(t->UniqueId));
\r
11408 t->ClientProductVer = PackGetInt(p, "ClientProductVer");
\r
11409 t->ClientProductBuild = PackGetInt(p, "ClientProductBuild");
\r
11410 t->ServerProductVer = PackGetInt(p, "ServerProductVer");
\r
11411 t->ServerProductBuild = PackGetInt(p, "ServerProductBuild");
\r
11412 t->ClientIpAddress = PackGetIp32(p, "ClientIpAddress");
\r
11413 PackGetData2(p, "ClientIpAddress6", t->ClientIpAddress6, sizeof(t->ClientIpAddress6));
\r
11414 t->ClientPort = PackGetInt(p, "ClientPort");
\r
11415 t->ServerIpAddress = PackGetIp32(p, "ServerIpAddress");
\r
11416 PackGetData2(p, "ServerIpAddress6", t->ServerIpAddress6, sizeof(t->ServerIpAddress6));
\r
11417 t->ServerPort = PackGetInt(p, "ServerPort2");
\r
11418 t->ProxyIpAddress = PackGetIp32(p, "ProxyIpAddress");
\r
11419 PackGetData2(p, "ProxyIpAddress6", t->ProxyIpAddress6, sizeof(t->ProxyIpAddress6));
\r
11420 t->ProxyPort = PackGetInt(p, "ProxyPort");
\r
11422 void OutRpcNodeInfo(PACK *p, NODE_INFO *t)
\r
11425 if (t == NULL || p == NULL)
\r
11430 PackAddStr(p, "ClientProductName", t->ClientProductName);
\r
11431 PackAddStr(p, "ServerProductName", t->ServerProductName);
\r
11432 PackAddStr(p, "ClientOsName", t->ClientOsName);
\r
11433 PackAddStr(p, "ClientOsVer", t->ClientOsVer);
\r
11434 PackAddStr(p, "ClientOsProductId", t->ClientOsProductId);
\r
11435 PackAddStr(p, "ClientHostname", t->ClientHostname);
\r
11436 PackAddStr(p, "ServerHostname", t->ServerHostname);
\r
11437 PackAddStr(p, "ProxyHostname", t->ProxyHostname);
\r
11438 PackAddStr(p, "HubName", t->HubName);
\r
11439 PackAddData(p, "UniqueId", t->UniqueId, sizeof(t->UniqueId));
\r
11441 PackAddInt(p, "ClientProductVer", t->ClientProductVer);
\r
11442 PackAddInt(p, "ClientProductBuild", t->ClientProductBuild);
\r
11443 PackAddInt(p, "ServerProductVer", t->ServerProductVer);
\r
11444 PackAddInt(p, "ServerProductBuild", t->ServerProductBuild);
\r
11445 PackAddIp32(p, "ClientIpAddress", t->ClientIpAddress);
\r
11446 PackAddData(p, "ClientIpAddress6", t->ClientIpAddress6, sizeof(t->ClientIpAddress6));
\r
11447 PackAddInt(p, "ClientPort", t->ClientPort);
\r
11448 PackAddIp32(p, "ServerIpAddress", t->ServerIpAddress);
\r
11449 PackAddData(p, "ServerIpAddress6", t->ServerIpAddress6, sizeof(t->ServerIpAddress6));
\r
11450 PackAddInt(p, "ServerPort2", t->ServerPort);
\r
11451 PackAddIp32(p, "ProxyIpAddress", t->ProxyIpAddress);
\r
11452 PackAddData(p, "ProxyIpAddress6", t->ProxyIpAddress6, sizeof(t->ProxyIpAddress6));
\r
11453 PackAddInt(p, "ProxyPort", t->ProxyPort);
\r
11456 // RPC_SESSION_STATUS
\r
11457 void InRpcSessionStatus(RPC_SESSION_STATUS *t, PACK *p)
\r
11460 if (t == NULL || p == NULL)
\r
11465 Zero(t, sizeof(RPC_SESSION_STATUS));
\r
11466 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
11467 PackGetStr(p, "Name", t->Name, sizeof(t->Name));
\r
11468 PackGetStr(p, "Username", t->Username, sizeof(t->Username));
\r
11469 PackGetStr(p, "GroupName", t->GroupName, sizeof(t->GroupName));
\r
11470 PackGetStr(p, "RealUsername", t->RealUsername, sizeof(t->RealUsername));
\r
11471 t->ClientIp = PackGetIp32(p, "SessionStatus_ClientIp");
\r
11472 PackGetData2(p, "SessionStatus_ClientIp6", t->ClientIp6, sizeof(t->ClientIp6));
\r
11473 PackGetStr(p, "SessionStatus_ClientHostName", t->ClientHostName, sizeof(t->ClientHostName));
\r
11475 InRpcClientGetConnectionStatus(&t->Status, p);
\r
11476 InRpcNodeInfo(&t->NodeInfo, p);
\r
11478 void OutRpcSessionStatus(PACK *p, RPC_SESSION_STATUS *t)
\r
11481 if (t == NULL || p == NULL)
\r
11486 PackAddStr(p, "HubName", t->HubName);
\r
11487 PackAddStr(p, "Name", t->Name);
\r
11488 PackAddStr(p, "Username", t->Username);
\r
11489 PackAddStr(p, "GroupName", t->GroupName);
\r
11490 PackAddStr(p, "RealUsername", t->RealUsername);
\r
11491 PackAddIp32(p, "SessionStatus_ClientIp", t->ClientIp);
\r
11492 PackAddData(p, "SessionStatus_ClientIp6", t->ClientIp6, sizeof(t->ClientIp6));
\r
11493 PackAddStr(p, "SessionStatus_ClientHostName", t->ClientHostName);
\r
11495 OutRpcClientGetConnectionStatus(p, &t->Status);
\r
11496 OutRpcNodeInfo(p, &t->NodeInfo);
\r
11498 void FreeRpcSessionStatus(RPC_SESSION_STATUS *t)
\r
11506 CiFreeClientGetConnectionStatus(&t->Status);
\r
11509 // RPC_DELETE_SESSION
\r
11510 void InRpcDeleteSession(RPC_DELETE_SESSION *t, PACK *p)
\r
11513 if (t == NULL || p == NULL)
\r
11518 Zero(t, sizeof(RPC_DELETE_SESSION));
\r
11519 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
11520 PackGetStr(p, "Name", t->Name, sizeof(t->Name));
\r
11522 void OutRpcDeleteSession(PACK *p, RPC_DELETE_SESSION *t)
\r
11525 if (t == NULL || p == NULL)
\r
11530 PackAddStr(p, "HubName", t->HubName);
\r
11531 PackAddStr(p, "Name", t->Name);
\r
11534 // RPC_ENUM_MAC_TABLE
\r
11535 void InRpcEnumMacTable(RPC_ENUM_MAC_TABLE *t, PACK *p)
\r
11539 if (t == NULL || p == NULL)
\r
11544 Zero(t, sizeof(RPC_ENUM_MAC_TABLE));
\r
11545 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
11546 t->NumMacTable = PackGetIndexCount(p, "SessionName");
\r
11547 t->MacTables = ZeroMalloc(sizeof(RPC_ENUM_MAC_TABLE_ITEM) * t->NumMacTable);
\r
11549 for (i = 0;i < t->NumMacTable;i++)
\r
11551 RPC_ENUM_MAC_TABLE_ITEM *e = &t->MacTables[i];
\r
11553 e->Key = PackGetIntEx(p, "Key", i);
\r
11554 PackGetStrEx(p, "SessionName", e->SessionName, sizeof(e->SessionName), i);
\r
11555 PackGetDataEx2(p, "MacAddress", e->MacAddress, sizeof(e->MacAddress), i);
\r
11556 e->VlanId = PackGetIntEx(p, "VlanId", i);
\r
11557 e->CreatedTime = PackGetInt64Ex(p, "CreatedTime", i);
\r
11558 e->UpdatedTime = PackGetInt64Ex(p, "UpdatedTime", i);
\r
11559 e->RemoteItem = PackGetBoolEx(p, "RemoteItem", i);
\r
11560 PackGetStrEx(p, "RemoteHostname", e->RemoteHostname, sizeof(e->RemoteHostname), i);
\r
11563 void OutRpcEnumMacTable(PACK *p, RPC_ENUM_MAC_TABLE *t)
\r
11567 if (t == NULL || p == NULL)
\r
11572 PackAddStr(p, "HubName", t->HubName);
\r
11574 for (i = 0;i < t->NumMacTable;i++)
\r
11576 RPC_ENUM_MAC_TABLE_ITEM *e = &t->MacTables[i];
\r
11578 PackAddIntEx(p, "Key", e->Key, i, t->NumMacTable);
\r
11579 PackAddStrEx(p, "SessionName", e->SessionName, i, t->NumMacTable);
\r
11580 PackAddDataEx(p, "MacAddress", e->MacAddress, sizeof(e->MacAddress), i, t->NumMacTable);
\r
11581 PackAddIntEx(p, "VlanId", e->VlanId, i, t->NumMacTable);
\r
11582 PackAddInt64Ex(p, "CreatedTime", e->CreatedTime, i, t->NumMacTable);
\r
11583 PackAddInt64Ex(p, "UpdatedTime", e->UpdatedTime, i, t->NumMacTable);
\r
11584 PackAddBoolEx(p, "RemoteItem", e->RemoteItem, i, t->NumMacTable);
\r
11585 PackAddStrEx(p, "RemoteHostname", e->RemoteHostname, i, t->NumMacTable);
\r
11588 void FreeRpcEnumMacTable(RPC_ENUM_MAC_TABLE *t)
\r
11596 Free(t->MacTables);
\r
11599 // RPC_ENUM_IP_TABLE
\r
11600 void InRpcEnumIpTable(RPC_ENUM_IP_TABLE *t, PACK *p)
\r
11604 if (t == NULL || p == NULL)
\r
11609 Zero(t, sizeof(RPC_ENUM_IP_TABLE));
\r
11610 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
11611 t->NumIpTable = PackGetIndexCount(p, "SessionName");
\r
11612 t->IpTables = ZeroMalloc(sizeof(RPC_ENUM_IP_TABLE_ITEM) * t->NumIpTable);
\r
11614 for (i = 0;i < t->NumIpTable;i++)
\r
11616 RPC_ENUM_IP_TABLE_ITEM *e = &t->IpTables[i];
\r
11618 e->Key = PackGetIntEx(p, "Key", i);
\r
11619 PackGetStrEx(p, "SessionName", e->SessionName, sizeof(e->SessionName), i);
\r
11620 e->Ip = PackGetIp32Ex(p, "Ip", i);
\r
11621 if (PackGetIpEx(p, "IpV6", &e->IpV6, i) == false)
\r
11623 UINTToIP(&e->IpV6, e->Ip);
\r
11625 e->DhcpAllocated = PackGetBoolEx(p, "DhcpAllocated", i);
\r
11626 e->CreatedTime = PackGetInt64Ex(p, "CreatedTime", i);
\r
11627 e->UpdatedTime = PackGetInt64Ex(p, "UpdatedTime", i);
\r
11628 e->RemoteItem = PackGetBoolEx(p, "RemoteItem", i);
\r
11629 PackGetStrEx(p, "RemoteHostname", e->RemoteHostname, sizeof(e->RemoteHostname), i);
\r
11632 void OutRpcEnumIpTable(PACK *p, RPC_ENUM_IP_TABLE *t)
\r
11636 if (t == NULL || p == NULL)
\r
11641 PackAddStr(p, "HubName", t->HubName);
\r
11643 for (i = 0;i < t->NumIpTable;i++)
\r
11645 RPC_ENUM_IP_TABLE_ITEM *e = &t->IpTables[i];
\r
11647 PackAddIntEx(p, "Key", e->Key, i, t->NumIpTable);
\r
11648 PackAddStrEx(p, "SessionName", e->SessionName, i, t->NumIpTable);
\r
11649 PackAddIp32Ex(p, "Ip", e->Ip, i, t->NumIpTable);
\r
11650 PackAddIpEx(p, "IpV6", &e->IpV6, i, t->NumIpTable);
\r
11651 PackAddBoolEx(p, "DhcpAllocated", e->DhcpAllocated, i, t->NumIpTable);
\r
11652 PackAddInt64Ex(p, "CreatedTime", e->CreatedTime, i, t->NumIpTable);
\r
11653 PackAddInt64Ex(p, "UpdatedTime", e->UpdatedTime, i, t->NumIpTable);
\r
11654 PackAddBoolEx(p, "RemoteItem", e->RemoteItem, i, t->NumIpTable);
\r
11655 PackAddStrEx(p, "RemoteHostname", e->RemoteHostname, i, t->NumIpTable);
\r
11658 void FreeRpcEnumIpTable(RPC_ENUM_IP_TABLE *t)
\r
11666 Free(t->IpTables);
\r
11669 // RPC_DELETE_TABLE
\r
11670 void InRpcDeleteTable(RPC_DELETE_TABLE *t, PACK *p)
\r
11673 if (t == NULL || p == NULL)
\r
11678 Zero(t, sizeof(RPC_DELETE_TABLE));
\r
11679 PackGetStr(p, "HubName", t->HubName, sizeof(t->HubName));
\r
11680 t->Key = PackGetInt(p, "Key");
\r
11682 void OutRpcDeleteTable(PACK *p, RPC_DELETE_TABLE *t)
\r
11685 if (t == NULL || p == NULL)
\r
11690 PackAddStr(p, "HubName", t->HubName);
\r
11691 PackAddInt(p, "Key", t->Key);
\r
11694 // RPC_ENUM_IP_TABLE の結合
\r
11695 void AdjoinRpcEnumIpTable(RPC_ENUM_IP_TABLE *dest, RPC_ENUM_IP_TABLE *src)
\r
11699 if (dest == NULL || src == NULL)
\r
11704 if (src->NumIpTable == 0)
\r
11709 old_num = dest->NumIpTable;
\r
11710 dest->NumIpTable += src->NumIpTable;
\r
11711 dest->IpTables = ReAlloc(dest->IpTables, sizeof(RPC_ENUM_IP_TABLE_ITEM) * dest->NumIpTable);
\r
11714 for (i = old_num;i < dest->NumIpTable;i++)
\r
11716 Copy(&dest->IpTables[i], &src->IpTables[n++], sizeof(RPC_ENUM_IP_TABLE_ITEM));
\r
11720 // RPC_ENUM_MAC_TABLE の結合
\r
11721 void AdjoinRpcEnumMacTable(RPC_ENUM_MAC_TABLE *dest, RPC_ENUM_MAC_TABLE *src)
\r
11725 if (dest == NULL || src == NULL)
\r
11730 if (src->NumMacTable == 0)
\r
11735 old_num = dest->NumMacTable;
\r
11736 dest->NumMacTable += src->NumMacTable;
\r
11737 dest->MacTables = ReAlloc(dest->MacTables, sizeof(RPC_ENUM_MAC_TABLE_ITEM) * dest->NumMacTable);
\r
11740 for (i = old_num;i < dest->NumMacTable;i++)
\r
11742 Copy(&dest->MacTables[i], &src->MacTables[n++], sizeof(RPC_ENUM_MAC_TABLE_ITEM));
\r
11746 // RPC_ENUM_SESSION の結合
\r
11747 void AdjoinRpcEnumSession(RPC_ENUM_SESSION *dest, RPC_ENUM_SESSION *src)
\r
11751 if (dest == NULL || src == NULL)
\r
11756 if (src->NumSession == 0)
\r
11761 old_num = dest->NumSession;
\r
11762 dest->NumSession += src->NumSession;
\r
11763 dest->Sessions = ReAlloc(dest->Sessions, sizeof(RPC_ENUM_SESSION_ITEM) * dest->NumSession);
\r
11766 for (i = old_num;i < dest->NumSession;i++)
\r
11768 Copy(&dest->Sessions[i], &src->Sessions[n++], sizeof(RPC_ENUM_SESSION_ITEM));
\r
11773 void InRpcKeep(RPC_KEEP *t, PACK *p)
\r
11776 if (t == NULL || p == NULL)
\r
11781 Zero(t, sizeof(RPC_KEEP));
\r
11782 t->UseKeepConnect = PackGetBool(p, "UseKeepConnect");
\r
11783 PackGetStr(p, "KeepConnectHost", t->KeepConnectHost, sizeof(t->KeepConnectHost));
\r
11784 t->KeepConnectPort = PackGetInt(p, "KeepConnectPort");
\r
11785 t->KeepConnectProtocol = PackGetInt(p, "KeepConnectProtocol");
\r
11786 t->KeepConnectInterval = PackGetInt(p, "KeepConnectInterval");
\r
11788 void OutRpcKeep(PACK *p, RPC_KEEP *t)
\r
11791 if (t == NULL || p == NULL)
\r
11796 PackAddBool(p, "UseKeepConnect", t->UseKeepConnect);
\r
11797 PackAddStr(p, "KeepConnectHost", t->KeepConnectHost);
\r
11798 PackAddInt(p, "KeepConnectPort", t->KeepConnectPort);
\r
11799 PackAddInt(p, "KeepConnectProtocol", t->KeepConnectProtocol);
\r
11800 PackAddInt(p, "KeepConnectInterval", t->KeepConnectInterval);
\r
11804 UINT StTest(ADMIN *a, RPC_TEST *t)
\r
11806 Format(t->StrValue, sizeof(t->StrValue), "%u", t->IntValue);
\r
11808 return ERR_NO_ERROR;
\r
11812 void InRpcTest(RPC_TEST *t, PACK *p)
\r
11814 Zero(t, sizeof(RPC_TEST));
\r
11815 t->IntValue = PackGetInt(p, "IntValue");
\r
11816 PackGetStr(p, "StrValue", t->StrValue, sizeof(t->StrValue));
\r
11818 void OutRpcTest(PACK *p, RPC_TEST *t)
\r
11820 PackAddInt(p, "IntValue", t->IntValue);
\r
11821 PackAddStr(p, "StrValue", t->StrValue);
\r
11823 void FreeRpcTest(RPC_TEST *t)
\r
11828 PACK *AdminCall(RPC *rpc, char *function_name, PACK *p)
\r
11831 if (rpc == NULL || function_name == NULL)
\r
11840 return RpcCall(rpc, function_name, p);
\r
11843 // 管理用コネクションのソースアドレスが許可されているかどうか調べる
\r
11844 bool CheckAdminSourceAddress(SOCK *sock, char *hubname)
\r
11850 if (sock == NULL)
\r
11855 b = ReadDump(ADMINIP_TXT);
\r
11866 s = CfgReadNextLine(b);
\r
11875 i = SearchStrEx(s, "//", 0, false);
\r
11876 if (i != INFINITE)
\r
11881 i = SearchStrEx(s, "#", 0, false);
\r
11882 if (i != INFINITE)
\r
11889 t = ParseToken(s, " \t");
\r
11892 if (t->NumTokens >= 1)
\r
11894 if (t->NumTokens == 1 || StrCmpi(hubname, t->Token[1]) == 0)
\r
11896 if (StrToIP(&ip, t->Token[0]))
\r
11898 if (CmpIpAddr(&sock->RemoteIP, &ip) == 0)
\r
11904 if (StrCmpi(t->Token[0], "*") == 0)
\r
11923 UINT AdminAccept(CONNECTION *c, PACK *p)
\r
11926 UCHAR secure_password[SHA1_SIZE];
\r
11927 UCHAR null_password[SHA1_SIZE];
\r
11928 UCHAR secure_null_password[SHA1_SIZE];
\r
11929 char hubname[MAX_HUBNAME_LEN + 1];
\r
11936 if (c == NULL || p == NULL)
\r
11938 return ERR_INTERNAL_ERROR;
\r
11941 cedar = c->Cedar;
\r
11942 sock = c->FirstSock;
\r
11945 InRpcWinVer(&ver, p);
\r
11948 if (PackGetStr(p, "hubname", hubname, sizeof(hubname)) == false)
\r
11951 StrCpy(hubname, sizeof(hubname), "");
\r
11954 // IP アドレスを見て許可するかどうか決める
\r
11955 if (CheckAdminSourceAddress(sock, hubname) == false)
\r
11957 SLog(c->Cedar, "LA_IP_DENIED", c->Name);
\r
11958 return ERR_IP_ADDRESS_DENIED;
\r
11962 if (PackGetDataSize(p, "secure_password") != SHA1_SIZE)
\r
11965 return ERR_PROTOCOL_ERROR;
\r
11967 PackGetData(p, "secure_password", secure_password);
\r
11969 if (StrLen(hubname) == 0)
\r
11972 SLog(c->Cedar, "LA_CONNECTED_1", c->Name);
\r
11976 // 仮想 HUB 管理モード接続
\r
11977 if (cedar->Server != NULL && cedar->Server->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
11979 // クラスタ メンバには仮想 HUB 管理モードで接続することはできない
\r
11980 return ERR_NOT_ENOUGH_RIGHT;
\r
11982 SLog(c->Cedar, "LA_CONNECTED_2", c->Name, hubname);
\r
11986 err = AdminCheckPassword(cedar, c->Random, secure_password,
\r
11987 StrLen(hubname) != 0 ? hubname : NULL);
\r
11989 if (err != ERR_NO_ERROR)
\r
11992 SLog(c->Cedar, "LA_ERROR", c->Name, GetUniErrorStr(err), err);
\r
11996 SLog(c->Cedar, "LA_OK", c->Name);
\r
11998 HashAdminPassword(null_password, "");
\r
11999 SecurePassword(secure_null_password, null_password, c->Random);
\r
12001 if (Cmp(secure_null_password, secure_password, SHA1_SIZE) == 0)
\r
12003 if (sock->RemoteIP.addr[0] != 127)
\r
12005 // パスワードが空であるがリモート接続しようとした
\r
12006 // (仮想 HUB 管理モードのみ)
\r
12007 if (StrLen(hubname) != 0)
\r
12009 return ERR_NULL_PASSWORD_LOCAL_ONLY;
\r
12016 HttpServerSend(sock, p);
\r
12020 a = ZeroMalloc(sizeof(ADMIN));
\r
12021 a->ServerAdmin = ((StrLen(hubname) == 0) ? true : false);
\r
12022 a->HubName = (StrLen(hubname) != 0 ? hubname : NULL);
\r
12023 a->Server = c->Cedar->Server;
\r
12024 a->ClientBuild = c->ClientBuild;
\r
12026 Copy(&a->ClientWinVer, &ver, sizeof(RPC_WINVER));
\r
12029 SetTimeout(sock, INFINITE);
\r
12032 rpc = StartRpcServer(sock, AdminDispatch, a);
\r
12036 SLog(c->Cedar, "LA_RPC_START", c->Name, rpc->Name);
\r
12041 if (a->LogFileList != NULL)
\r
12043 // キャッシュされたログファイル列挙リストがあれば解放する
\r
12044 FreeEnumLogFile(a->LogFileList);
\r
12050 return ERR_NO_ERROR;
\r
12054 UINT AdminCheckPassword(CEDAR *c, void *random, void *secure_password, char *hubname)
\r
12056 UCHAR check[SHA1_SIZE];
\r
12058 if (c == NULL || random == NULL || secure_password == NULL)
\r
12060 return ERR_INTERNAL_ERROR;
\r
12063 if (hubname == NULL || StrLen(hubname) == 0)
\r
12068 SecurePassword(check, c->Server->HashedPassword, random);
\r
12072 if (Cmp(check, secure_password, SHA1_SIZE) != 0)
\r
12075 return ERR_ACCESS_DENIED;
\r
12083 if (c->Server->ServerType == SERVER_TYPE_FARM_MEMBER)
\r
12085 // ファームメンバの場合は HUB 管理モードで接続できない
\r
12086 return ERR_FARM_MEMBER_HUB_ADMIN;
\r
12093 h = GetHub(c, hubname);
\r
12095 UnlockHubList(c);
\r
12100 return ERR_HUB_NOT_FOUND;
\r
12105 SecurePassword(check, h->HashedPassword, random);
\r
12111 if (Cmp(check, secure_password, SHA1_SIZE) != 0)
\r
12114 return ERR_ACCESS_DENIED;
\r
12118 return ERR_NO_ERROR;
\r
12122 void HashAdminPassword(void *hash, char *password)
\r
12125 if (hash == NULL || password == NULL)
\r
12130 Hash(hash, password, StrLen(password), true);
\r
12134 void AdminDisconnect(RPC *rpc)
\r
12144 s = (SESSION *)rpc->Param;
\r
12145 sock = rpc->Sock;
\r
12149 Disconnect(sock);
\r
12150 ReleaseSession(s);
\r
12154 SESSION *AdminConnectMain(CEDAR *cedar, CLIENT_OPTION *o, char *hubname, void *hashed_password, UINT *err, char *client_name, void *hWnd)
\r
12156 UCHAR secure_password[SHA1_SIZE];
\r
12162 s = NewRpcSessionEx2(cedar, o, err, client_name, hWnd);
\r
12169 sock = s->Connection->FirstSock;
\r
12174 PackAddClientVersion(p, s->Connection);
\r
12176 PackAddStr(p, "method", "admin");
\r
12178 // クライアント Windows バージョン
\r
12180 OutRpcWinVer(p, &ver);
\r
12183 SecurePassword(secure_password, hashed_password, s->Connection->Random);
\r
12185 PackAddData(p, "secure_password", secure_password, sizeof(secure_password));
\r
12188 if (hubname != NULL)
\r
12190 PackAddStr(p, "hubname", hubname);
\r
12193 if (HttpClientSend(sock, p) == false)
\r
12197 ReleaseSession(s);
\r
12198 *err = ERR_DISCONNECTED;
\r
12204 p = HttpClientRecv(sock);
\r
12208 ReleaseSession(s);
\r
12209 *err = ERR_DISCONNECTED;
\r
12213 if (GetErrorFromPack(p) != 0)
\r
12216 ReleaseSession(s);
\r
12217 *err = GetErrorFromPack(p);
\r
12228 RPC *AdminConnect(CEDAR *cedar, CLIENT_OPTION *o, char *hubname, void *hashed_password, UINT *err)
\r
12230 return AdminConnectEx(cedar, o, hubname, hashed_password, err, NULL);
\r
12232 RPC *AdminConnectEx(CEDAR *cedar, CLIENT_OPTION *o, char *hubname, void *hashed_password, UINT *err, char *client_name)
\r
12234 return AdminConnectEx2(cedar, o, hubname, hashed_password, err, client_name, NULL);
\r
12236 RPC *AdminConnectEx2(CEDAR *cedar, CLIENT_OPTION *o, char *hubname, void *hashed_password, UINT *err, char *client_name, void *hWnd)
\r
12242 if (cedar == NULL || o == NULL || hashed_password == NULL || err == NULL)
\r
12247 if (client_name == NULL)
\r
12249 client_name = CEDAR_MANAGER_STR;
\r
12252 s = AdminConnectMain(cedar, o, hubname, hashed_password, err, client_name, hWnd);
\r
12259 sock = s->Connection->FirstSock;
\r
12262 rpc = StartRpcClient(sock, s);
\r
12264 rpc->IsVpnServer = true;
\r
12265 Copy(&rpc->VpnServerClientOption, o, sizeof(CLIENT_OPTION));
\r
12266 StrCpy(rpc->VpnServerHubName, sizeof(rpc->VpnServerHubName), hubname);
\r
12267 Copy(rpc->VpnServerHashedPassword, hashed_password, SHA1_SIZE);
\r
12268 StrCpy(rpc->VpnServerClientName, sizeof(rpc->VpnServerClientName), client_name);
\r
12271 SetTimeout(sock, INFINITE);
\r
12277 UINT AdminReconnect(RPC *rpc)
\r
12284 if (rpc == NULL || rpc->IsVpnServer == false)
\r
12286 return ERR_INTERNAL_ERROR;
\r
12289 s = (SESSION *)rpc->Param;
\r
12290 cedar = s->Cedar;
\r
12291 AddRef(cedar->ref);
\r
12293 sock = rpc->Sock;
\r
12294 Disconnect(sock);
\r
12295 ReleaseSock(sock);
\r
12296 ReleaseSession(s);
\r
12297 rpc->Param = NULL;
\r
12299 rpc->Sock = NULL;
\r
12301 s = AdminConnectMain(cedar, &rpc->VpnServerClientOption,
\r
12302 rpc->VpnServerHubName,
\r
12303 rpc->VpnServerHashedPassword,
\r
12305 rpc->VpnServerClientName, NULL);
\r
12307 ReleaseCedar(cedar);
\r
12315 rpc->Sock = s->Connection->FirstSock;
\r
12316 AddRef(rpc->Sock->ref);
\r
12318 return ERR_NO_ERROR;
\r