1 // SoftEther UT-VPN SourceCode
\r
3 // Copyright (C) 2004-2010 SoftEther Corporation.
\r
4 // Copyright (C) 2004-2010 University of Tsukuba, Japan.
\r
5 // Copyright (C) 2003-2010 Daiyuu Nobori.
\r
6 // All Rights Reserved.
\r
8 // http://utvpn.tsukuba.ac.jp/
\r
10 // This program is free software; you can redistribute it and/or
\r
11 // modify it under the terms of the GNU General Public License
\r
12 // version 2 as published by the Free Software Foundation.
\r
14 // This program is distributed in the hope that it will be useful,
\r
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
17 // GNU General Public License for more details.
\r
19 // You should have received a copy of the GNU General Public License version 2
\r
20 // along with this program; if not, write to the Free Software
\r
21 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
\r
23 // このファイルは GPL バージョン 2 ライセンスで公開されています。
\r
24 // 誰でもこのファイルの内容を複製、改変したり、改変したバージョンを再配布
\r
25 // することができます。ただし、原著作物を改変した場合は、原著作物の著作権表示
\r
26 // を除去することはできません。改変した著作物を配布する場合は、改変実施者の
\r
27 // 著作権表示を原著作物の著作権表示に付随して記載するようにしてください。
\r
29 // この SoftEther UT-VPN オープンソース・プロジェクトは、日本国の
\r
30 // ソフトイーサ株式会社 (SoftEther Corporation, http://www.softether.co.jp/ )
\r
31 // および筑波大学 (University of Tsukuba, http://www.tsukuba.ac.jp/ ) によって
\r
33 // 本プログラムの配布者は、本プログラムを、業としての利用以外のため、
\r
34 // および、試験または研究のために利用が行われることを想定して配布
\r
36 // SoftEther UT-VPN プロジェクトの Web サイトは http://utvpn.tsukuba.ac.jp/ に
\r
38 // 本ソフトウェアの不具合の修正、機能改良、セキュリティホールの修復などのコード
\r
39 // の改変を行った場合で、その成果物を SoftEther UT-VPN プロジェクトに提出して
\r
40 // いただける場合は、 http://utvpn.tsukuba.ac.jp/ までソースコードを送付して
\r
41 // ください。SoftEther UT-VPN プロジェクトの本体リリースまたはブランチリリース
\r
44 // GPL に基づいて原著作物が提供される本ソフトウェアの改良版を配布、販売する
\r
45 // 場合は、そのソースコードを GPL に基づいて誰にでも開示する義務が生じます。
\r
47 // 本ソフトウェアに関連する著作権、特許権、商標権はソフトイーサ株式会社
\r
48 // (SoftEther Corporation) およびその他の著作権保持者が保有しています。
\r
49 // ソフトイーサ株式会社等はこれらの権利を放棄していません。本ソフトウェアの
\r
50 // 二次著作物を配布、販売する場合は、これらの権利を侵害しないようにご注意
\r
53 // お願い: どのような通信ソフトウェアにも通常は必ず未発見の
\r
54 // セキュリティホールが潜んでいます。本ソースコードをご覧いただいた結果、
\r
55 // UT-VPN にセキュリティホールを発見された場合は、当該セキュリティホールの
\r
56 // 情報を不特定多数に開示される前に、必ず、ソフトイーサ株式会社
\r
57 // および脆弱性情報の届出を受け付ける公的機関まで通報いただき、
\r
58 // 公益保護にご協力いただきますようお願い申し上げます。
\r
60 // ソフトイーサ株式会社は、当該セキュリティホールについて迅速に対処を
\r
61 // 行い、UT-VPN および UT-VPN に関連するソフトウェアのユーザー・顧客
\r
64 // ソフトイーサへの届出先: http://www.softether.co.jp/jp/contact/
\r
65 // 日本国内の脆弱性情報届出受付公的機関:
\r
67 // http://www.ipa.go.jp/security/vuln/report/
\r
69 // 上記各事項について不明な点は、ソフトイーサ株式会社までご連絡ください。
\r
70 // 連絡先: http://www.softether.co.jp/jp/contact/
\r
72 // -----------------------------------------------
\r
75 // 新規リリース by SoftEther
\r
76 // -----------------------------------------------
\r
84 extern char *SERVER_CONFIG_FILE_NAME;
\r
85 #define SERVER_DEFAULT_CIPHER_NAME "RC4-MD5"
\r
86 #define SERVER_DEFAULT_CERT_DAYS (365 * 10)
\r
87 #define SERVER_DEFAULT_HUB_NAME "DEFAULT"
\r
88 #define SERVER_DEFAULT_BRIDGE_NAME "BRIDGE"
\r
89 #define SERVER_CONTROL_TCP_TIMEOUT (60 * 1000)
\r
90 #define SERVER_FARM_CONTROL_INTERVAL (10 * 1000)
\r
92 #define SERVER_FILE_SAVE_INTERVAL_DEFAULT (5 * 60 * 1000)
\r
93 #define SERVER_FILE_SAVE_INTERVAL_MIN (5 * 1000)
\r
94 #define SERVER_FILE_SAVE_INTERVAL_MAX (3600 * 1000)
\r
96 #define SERVER_LICENSE_VIOLATION_SPAN (SERVER_FARM_CONTROL_INTERVAL * 2)
\r
99 #define SERVER_DEADLOCK_CHECK_SPAN (2 * 60 * 1000)
\r
100 #define SERVER_DEADLOCK_CHECK_TIMEOUT (3 * 60 * 1000)
\r
103 #define RETRY_CONNECT_TO_CONTROLLER_INTERVAL (1 * 1000)
\r
105 #define MAX_PUBLIC_PORT_NUM 128
\r
107 // 各ファームメンバによってホストされている仮想 HUB リスト
\r
110 struct FARM_MEMBER *FarmMember; // ファームメンバ
\r
111 bool DynamicHub; // ダイナミック HUB
\r
112 char Name[MAX_HUBNAME_LEN + 1]; // HUB 名
\r
113 UINT NumSessions; // セッション数
\r
114 UINT NumSessionsClient; // クライアントセッション数
\r
115 UINT NumSessionsBridge; // ブリッジセッション数
\r
116 UINT NumMacTables; // MAC テーブル数
\r
117 UINT NumIpTables; // IP テーブル数
\r
123 EVENT *CompleteEvent; // 完了通知
\r
124 PACK *Request; // 要求
\r
125 PACK *Response; // 応答
\r
131 CEDAR *Cedar; // Cedar
\r
132 UINT64 ConnectedTime; // 接続日時
\r
134 UINT Ip; // IP アドレス
\r
135 UINT NumPort; // ポート番号数
\r
136 UINT *Ports; // ポート番号
\r
137 char hostname[MAX_HOST_NAME_LEN + 1]; // ホスト名
\r
138 X *ServerCert; // サーバー証明書
\r
139 LIST *HubList; // 仮想 HUB リスト
\r
140 QUEUE *TaskQueue; // タスクキュー
\r
141 EVENT *TaskPostEvent; // タスク投入イベント
\r
143 volatile bool Halting; // 停止中
\r
144 UINT NumSessions; // セッション数
\r
145 UINT MaxSessions; // 最大セッション数
\r
146 UINT NumTcpConnections; // TCP コネクション数
\r
147 TRAFFIC Traffic; // トラフィック情報
\r
148 UINT AssignedClientLicense; // 割り当て済みクライアントライセンス数
\r
149 UINT AssignedBridgeLicense; // 割り当て済みブリッジライセンス数
\r
150 UINT Weight; // 性能基準比
\r
151 UCHAR RandomKey[SHA1_SIZE]; // 乱数キー (ライセンスチェック)
\r
152 UINT64 SystemId; // システム ID (ライセンスチェック)
\r
156 struct FARM_CONTROLLER
\r
159 struct SERVER *Server; // サーバー
\r
160 THREAD *Thread; // スレッド
\r
161 SOCK *Sock; // ソケット
\r
162 SESSION *Session; // セッション
\r
163 volatile bool Halt; // 停止フラグ
\r
164 EVENT *HaltEvent; // 停止イベント
\r
165 UINT LastError; // 最終エラー
\r
166 bool Online; // オンライン フラグ
\r
167 UINT64 StartedTime; // 接続開始時刻
\r
168 UINT64 CurrentConnectedTime; // 今回の接続時刻
\r
169 UINT64 FirstConnectedTime; // 最初の接続時刻
\r
170 UINT NumConnected; // 接続回数
\r
171 UINT NumTry; // 試行回数
\r
172 UINT NumFailed; // 接続失敗回数
\r
176 struct SERVER_LISTENER
\r
178 UINT Port; // ポート番号
\r
179 bool Enabled; // 有効フラグ
\r
180 LISTENER *Listener; // リスナーオブジェクト
\r
184 struct SYSLOG_SETTING
\r
186 UINT SaveType; // 保存種類
\r
187 char Hostname[MAX_HOST_NAME_LEN + 1]; // ホスト名
\r
188 UINT Port; // ポート番号
\r
194 UINT ServerType; // サーバーの種類
\r
195 UINT UpdatedServerType; // 更新されたサーバーの種類
\r
196 LIST *ServerListenerList; // サーバーリスナーリスト
\r
197 UCHAR HashedPassword[SHA1_SIZE]; // パスワード
\r
198 char ControllerName[MAX_HOST_NAME_LEN + 1]; // コントローラ名
\r
199 UINT ControllerPort; // コントローラポート
\r
200 UINT Weight; // 性能基準比
\r
201 bool ControllerOnly; // コントローラ機能のみ
\r
202 UCHAR MemberPassword[SHA1_SIZE]; // ファームメンバ用パスワード
\r
203 UINT PublicIp; // 公開 IP
\r
204 UINT NumPublicPort; // 公開ポート数
\r
205 UINT *PublicPorts; // 公開ポート配列
\r
206 UINT64 StartTime; // 起動時刻
\r
207 UINT AutoSaveConfigSpan; // 自動保存間隔
\r
208 UINT ConfigRevision; // 設定ファイルリビジョン
\r
209 UCHAR MyRandomKey[SHA1_SIZE]; // 自分のランダムキー
\r
210 bool FarmControllerInited; // ファームコントローラの初期化が完了した
\r
211 bool DisableDeadLockCheck; // デッドロックチェックを無効化する
\r
212 bool NoSendSignature; // クライアントにシグネチャを送信させない
\r
213 bool SaveDebugLog; // デバッグログを保存する
\r
214 bool NoLinuxArpFilter; // Linux における arp_filter を設定しない
\r
215 bool NoHighPriorityProcess; // プロセスの優先順位を上げない
\r
216 bool NoDebugDump; // デバッグダンプを出力しない
\r
218 volatile bool Halt; // 停止フラグ
\r
220 REF *ref; // 参照カウンタ
\r
221 CEDAR *Cedar; // Cedar
\r
222 CFG_RW *CfgRw; // 設定ファイル R/W
\r
223 LOCK *SaveCfgLock; // 設定保存ロック
\r
224 EVENT *SaveHaltEvent; // 保存スレッド停止イベント
\r
225 THREAD *SaveThread; // 設定保存スレッド
\r
226 FARM_CONTROLLER *FarmController; // ファームコントローラ
\r
227 LOCK *TasksFromFarmControllerLock; // ファームコントローラからのタスクを処理中にかけるロック
\r
228 LIST *FarmMemberList; // ファームメンバーリスト
\r
229 FARM_MEMBER *Me; // 自分自身のファームメンバ登録
\r
230 THREAD *FarmControlThread; // ファームコントロールスレッド
\r
231 EVENT *FarmControlThreadHaltEvent; // ファームコントロールスレッド停止イベント
\r
232 LIST *HubCreateHistoryList; // 仮想 HUB 作成履歴リスト
\r
234 KEEP *Keep; // コネクション維持
\r
235 LOG *Logger; // サーバー ロガー
\r
236 ERASER *Eraser; // 自動ファイル削除器
\r
238 UINT CurrentTotalNumSessionsOnFarm; // サーバー ファーム全体での合計のセッション数
\r
239 UINT CurrentAssignedClientLicense; // 現在のクライアントライセンス割り当て数
\r
240 UINT CurrentAssignedBridgeLicense; // 現在のブリッジライセンス割り当て数
\r
241 LICENSE_SYSTEM *LicenseSystem; // ライセンスシステム
\r
243 LOCK *CapsCacheLock; // Caps キャッシュ用ロック
\r
244 CAPSLIST *CapsListCache; // Caps キャッシュ
\r
245 UINT LicenseHash; // ライセンスリストのハッシュ値
\r
247 bool SnapshotInited;
\r
248 EVENT *SnapshotHaltEvent; // スナップショット停止イベント
\r
249 volatile bool HaltSnapshot; // スナップショット停止フラグ
\r
250 THREAD *SnapshotThread; // スナップショットスレッド
\r
251 LOG *SnapshotLogger; // スナップショットロガー
\r
252 UINT64 LastSnapshotTime; // 最後にスナップショットを作成した時刻
\r
254 THREAD *DeadLockCheckThread; // デッドロックチェックスレッド
\r
255 volatile bool HaltDeadLockThread; // 停止フラグ
\r
256 EVENT *DeadLockWaitEvent; // 待機イベント
\r
258 TINY_LOG *DebugLog; // デバッグログ
\r
263 struct RPC_ENUM_SESSION
\r
265 char HubName[MAX_HUBNAME_LEN + 1]; // HUB 名
\r
266 UINT NumSession; // セッション数
\r
267 struct RPC_ENUM_SESSION_ITEM *Sessions; // セッションリスト
\r
271 struct RPC_SESSION_STATUS
\r
273 char HubName[MAX_HUBNAME_LEN + 1]; // HUB 名
\r
274 char Name[MAX_SESSION_NAME_LEN + 1]; // セッション名
\r
275 char Username[MAX_USERNAME_LEN + 1]; // ユーザー名
\r
276 char RealUsername[MAX_USERNAME_LEN + 1]; // 本当のユーザー名
\r
277 char GroupName[MAX_USERNAME_LEN + 1]; // グループ名
\r
278 bool LinkMode; // リンクモード
\r
279 RPC_CLIENT_GET_CONNECTION_STATUS Status; // ステータス
\r
280 UINT ClientIp; // クライアント IP アドレス
\r
281 UCHAR ClientIp6[16]; // クライアント IPv6 アドレス
\r
282 char ClientHostName[MAX_HOST_NAME_LEN + 1]; // クライアントホスト名
\r
283 NODE_INFO NodeInfo; // ノード情報
\r
288 #define SERVER_TYPE_STANDALONE 0 // スタンドアロン サーバー
\r
289 #define SERVER_TYPE_FARM_CONTROLLER 1 // ファームコントローラ サーバー
\r
290 #define SERVER_TYPE_FARM_MEMBER 2 // ファームメンバ サーバー
\r
301 LIST *CapsList; // Caps リスト
\r
307 char Path[MAX_PATH]; // パス名
\r
308 char ServerName[MAX_HOST_NAME_LEN + 1]; // サーバー名
\r
309 UINT FileSize; // ファイルサイズ
\r
310 UINT64 UpdatedTime; // 更新日時
\r
313 // 仮想 HUB のスナップショット
\r
314 struct HUB_SNAPSHOT
\r
316 char HubName[MAX_HUBNAME_LEN + 1];
\r
318 UINT HubMaxSessionsClient;
\r
319 UINT HubMaxSessionsBridge;
\r
322 // Server のスナップショット
\r
323 struct SERVER_SNAPSHOT
\r
327 char ServerHostname[MAX_HOST_NAME_LEN + 1];
\r
328 char ServerProduct[MAX_SIZE];
\r
329 char ServerVersion[MAX_SIZE];
\r
330 char ServerBuild[MAX_SIZE];
\r
331 char ServerOs[MAX_SIZE];
\r
332 UINT64 ServerLicenseId;
\r
333 UINT64 ServerLicenseExpires;
\r
335 UINT64 ServerStartupDatetime;
\r
336 UINT NumClusterNodes;
\r
341 struct SERVER_HUB_CREATE_HISTORY
\r
343 char HubName[MAX_HUBNAME_LEN + 1];
\r
344 UINT64 CreatedTime;
\r
348 SERVER *SiNewServer(bool bridge);
\r
349 void SiReleaseServer(SERVER *s);
\r
350 void SiCleanupServer(SERVER *s);
\r
351 void StStartServer(bool bridge);
\r
352 void StStopServer();
\r
353 void SiInitConfiguration(SERVER *s);
\r
354 void SiFreeConfiguration(SERVER *s);
\r
355 UINT SiWriteConfigurationFile(SERVER *s);
\r
356 void SiLoadInitialConfiguration(SERVER *s);
\r
357 bool SiLoadConfigurationFile(SERVER *s);
\r
358 bool SiLoadConfigurationFileMain(SERVER *s, FOLDER *root);
\r
359 void SiInitDefaultServerCert(SERVER *s);
\r
360 void SiInitCipherName(SERVER *s);
\r
361 void SiGenerateDefualtCert(X **server_x, K **server_k);
\r
362 void SiInitListenerList(SERVER *s);
\r
363 void SiLockListenerList(SERVER *s);
\r
364 void SiUnlockListenerList(SERVER *s);
\r
365 bool SiAddListener(SERVER *s, UINT port, bool enabled);
\r
366 bool SiEnableListener(SERVER *s, UINT port);
\r
367 bool SiDisableListener(SERVER *s, UINT port);
\r
368 bool SiDeleteListener(SERVER *s, UINT port);
\r
369 SERVER_LISTENER *SiGetListener(SERVER *s, UINT port);
\r
370 int CompareServerListener(void *p1, void *p2);
\r
371 void SiStopAllListener(SERVER *s);
\r
372 void SiInitDefaultHubList(SERVER *s);
\r
373 void SiInitBridge(SERVER *s);
\r
374 void SiTest(SERVER *s);
\r
375 FOLDER *SiWriteConfigurationToCfg(SERVER *s);
\r
376 bool SiLoadConfigurationCfg(SERVER *s, FOLDER *root);
\r
377 void SiWriteLocalBridges(FOLDER *f, SERVER *s);
\r
378 void SiLoadLocalBridges(SERVER *s, FOLDER *f);
\r
379 void SiWriteLocalBridgeCfg(FOLDER *f, LOCALBRIDGE *br);
\r
380 void SiLoadLocalBridgeCfg(SERVER *s, FOLDER *f);
\r
381 void SiWriteListeners(FOLDER *f, SERVER *s);
\r
382 void SiLoadListeners(SERVER *s, FOLDER *f);
\r
383 void SiWriteListenerCfg(FOLDER *f, SERVER_LISTENER *r);
\r
384 void SiLoadListenerCfg(SERVER *s, FOLDER *f);
\r
385 void SiWriteServerCfg(FOLDER *f, SERVER *s);
\r
386 void SiLoadServerCfg(SERVER *s, FOLDER *f);
\r
387 void SiWriteTraffic(FOLDER *parent, char *name, TRAFFIC *t);
\r
388 void SiWriteTrafficInner(FOLDER *parent, char *name, TRAFFIC_ENTRY *e);
\r
389 void SiLoadTrafficInner(FOLDER *parent, char *name, TRAFFIC_ENTRY *e);
\r
390 void SiLoadTraffic(FOLDER *parent, char *name, TRAFFIC *t);
\r
391 void SiSaverThread(THREAD *thread, void *param);
\r
392 void SiLoadLicenseManager(SERVER *s, FOLDER *f);
\r
393 void SiWriteLicenseManager(FOLDER *f, SERVER *s);
\r
394 void SiLoadL3Switchs(SERVER *s, FOLDER *f);
\r
395 void SiLoadL3SwitchCfg(L3SW *sw, FOLDER *f);
\r
396 void SiWriteL3Switchs(FOLDER *f, SERVER *s);
\r
397 void SiWriteL3SwitchCfg(FOLDER *f, L3SW *sw);
\r
398 void SiWriteHubs(FOLDER *f, SERVER *s);
\r
399 void SiLoadHubs(SERVER *s, FOLDER *f);
\r
400 void SiWriteHubCfg(FOLDER *f, HUB *h);
\r
401 void SiLoadHubCfg(SERVER *s, FOLDER *f, char *name);
\r
402 void SiLoadHubLogCfg(HUB_LOG *g, FOLDER *f);
\r
403 void SiWriteHubOptionCfg(FOLDER *f, HUB_OPTION *o);
\r
404 void SiWriteHubLogCfg(FOLDER *f, HUB_LOG *g);
\r
405 void SiWriteHubLogCfgEx(FOLDER *f, HUB_LOG *g, bool el_mode);
\r
406 void SiLoadHubOptionCfg(FOLDER *f, HUB_OPTION *o);
\r
407 void SiWriteHubLinks(FOLDER *f, HUB *h);
\r
408 void SiLoadHubLinks(HUB *h, FOLDER *f);
\r
409 void SiWriteHubAdminOptions(FOLDER *f, HUB *h);
\r
410 void SiLoadHubAdminOptions(HUB *h, FOLDER *f);
\r
411 void SiWriteHubLinkCfg(FOLDER *f, LINK *k);
\r
412 void SiLoadHubLinkCfg(FOLDER *f, HUB *h);
\r
413 void SiWriteHubAccessLists(FOLDER *f, HUB *h);
\r
414 void SiLoadHubAccessLists(HUB *h, FOLDER *f);
\r
415 void SiWriteHubAccessCfg(FOLDER *f, ACCESS *a);
\r
416 void SiLoadHubAccessCfg(HUB *h, FOLDER *f);
\r
417 void SiWriteHubDb(FOLDER *f, HUBDB *db);
\r
418 void SiLoadHubDb(HUB *h, FOLDER *f);
\r
419 void SiWriteUserList(FOLDER *f, LIST *o);
\r
420 void SiLoadUserList(HUB *h, FOLDER *f);
\r
421 void SiWriteUserCfg(FOLDER *f, USER *u);
\r
422 void SiLoadUserCfg(HUB *h, FOLDER *f);
\r
423 void SiWriteGroupList(FOLDER *f, LIST *o);
\r
424 void SiLoadGroupList(HUB *h, FOLDER *f);
\r
425 void SiWriteGroupCfg(FOLDER *f, USERGROUP *g);
\r
426 void SiLoadGroupCfg(HUB *h, FOLDER *f);
\r
427 void SiWriteCertList(FOLDER *f, LIST *o);
\r
428 void SiLoadCertList(LIST *o, FOLDER *f);
\r
429 void SiWriteCrlList(FOLDER *f, LIST *o);
\r
430 void SiLoadCrlList(LIST *o, FOLDER *f);
\r
431 void SiWritePolicyCfg(FOLDER *f, POLICY *p, bool cascade_mode);
\r
432 void SiLoadPolicyCfg(POLICY *p, FOLDER *f);
\r
433 void SiLoadSecureNAT(HUB *h, FOLDER *f);
\r
434 void SiWriteSecureNAT(HUB *h, FOLDER *f);
\r
435 void SiRebootServerEx(bool bridge, bool reset_setting);
\r
436 void SiRebootServer(bool bridge);
\r
437 void SiRebootServerThread(THREAD *thread, void *param);
\r
440 SERVER *StGetServer();
\r
441 void SiSetServerType(SERVER *s, UINT type,
\r
442 UINT ip, UINT num_port, UINT *ports,
\r
443 char *controller_name, UINT controller_port, UCHAR *password, UINT weight, bool controller_only);
\r
444 FARM_CONTROLLER *SiStartConnectToController(SERVER *s);
\r
445 void SiStopConnectToController(FARM_CONTROLLER *f);
\r
446 void SiFarmServ(SERVER *server, SOCK *sock, X *cert, UINT ip, UINT num_port, UINT *ports, char *hostname, UINT point, UINT weight, UINT max_sessions);
\r
447 int CompareHubList(void *p1, void *p2);
\r
448 void SiFarmServMain(SERVER *server, SOCK *sock, FARM_MEMBER *f);
\r
449 FARM_TASK *SiFarmServPostTask(FARM_MEMBER *f, PACK *request);
\r
450 PACK *SiFarmServWaitTask(FARM_TASK *t);
\r
451 PACK *SiExecTask(FARM_MEMBER *f, PACK *p);
\r
452 PACK *SiCallTask(FARM_MEMBER *f, PACK *p, char *taskname);
\r
453 void SiAcceptTasksFromController(FARM_CONTROLLER *f, SOCK *sock);
\r
454 void SiAcceptTasksFromControllerMain(FARM_CONTROLLER *f, SOCK *sock);
\r
455 PACK *SiCalledTask(FARM_CONTROLLER *f, PACK *p, char *taskname);
\r
456 void SiHubOnlineProc(HUB *h);
\r
457 void SiHubOfflineProc(HUB *h);
\r
458 FARM_MEMBER *SiGetNextFarmMember(SERVER *s);
\r
459 void SiCallCreateHub(SERVER *s, FARM_MEMBER *f, HUB *h);
\r
460 void SiCallUpdateHub(SERVER *s, FARM_MEMBER *f, HUB *h);
\r
461 void SiCallDeleteHub(SERVER *s, FARM_MEMBER *f, HUB *h);
\r
462 void SiCallEnumSession(SERVER *s, FARM_MEMBER *f, char *hubname, RPC_ENUM_SESSION *t);
\r
463 void SiCallEnumNat(SERVER *s, FARM_MEMBER *f, char *hubname, RPC_ENUM_NAT *t);
\r
464 void SiCallEnumDhcp(SERVER *s, FARM_MEMBER *f, char *hubname, RPC_ENUM_DHCP *t);
\r
465 void SiCallGetNatStatus(SERVER *s, FARM_MEMBER *f, char *hubname, RPC_NAT_STATUS *t);
\r
466 void SiCallEnumMacTable(SERVER *s, FARM_MEMBER *f, char *hubname, RPC_ENUM_MAC_TABLE *t);
\r
467 void SiCallEnumIpTable(SERVER *s, FARM_MEMBER *f, char *hubname, RPC_ENUM_IP_TABLE *t);
\r
468 void SiCallDeleteSession(SERVER *s, FARM_MEMBER *f, char *hubname, char *session_name);
\r
469 void SiCallCreateTicket(SERVER *s, FARM_MEMBER *f, char *hubname, char *username, char *realusername, POLICY *policy, UCHAR *ticket, UINT counter, char *groupname);
\r
470 void SiCallDeleteMacTable(SERVER *s, FARM_MEMBER *f, char *hubname, UINT key);
\r
471 void SiCallDeleteIpTable(SERVER *s, FARM_MEMBER *f, char *hubname, UINT key);
\r
472 void SiCalledCreateHub(SERVER *s, PACK *p);
\r
473 void SiCalledUpdateHub(SERVER *s, PACK *p);
\r
474 void SiCalledDeleteHub(SERVER *s, PACK *p);
\r
475 void SiCalledDeleteSession(SERVER *s, PACK *p);
\r
476 void SiCalledDeleteMacTable(SERVER *s, PACK *p);
\r
477 void SiCalledDeleteIpTable(SERVER *s, PACK *p);
\r
478 PACK *SiCalledCreateTicket(SERVER *s, PACK *p);
\r
479 PACK *SiCalledEnumSession(SERVER *s, PACK *p);
\r
480 PACK *SiCalledEnumNat(SERVER *s, PACK *p);
\r
481 PACK *SiCalledEnumDhcp(SERVER *s, PACK *p);
\r
482 PACK *SiCalledGetNatStatus(SERVER *s, PACK *p);
\r
483 PACK *SiCalledEnumMacTable(SERVER *s, PACK *p);
\r
484 PACK *SiCalledEnumIpTable(SERVER *s, PACK *p);
\r
485 void SiCalledEnumHub(SERVER *s, PACK *p, PACK *req);
\r
486 void SiPackAddCreateHub(PACK *p, HUB *h);
\r
487 FARM_MEMBER *SiGetHubHostingMember(SERVER *s, HUB *h, bool admin_mode);
\r
488 void SiCallEnumHub(SERVER *s, FARM_MEMBER *f);
\r
489 void SiStartFarmControl(SERVER *s);
\r
490 void SiStopFarmControl(SERVER *s);
\r
491 void SiFarmControlThread(THREAD *thread, void *param);
\r
492 void SiAccessListToPack(PACK *p, LIST *o);
\r
493 void SiAccessToPack(PACK *p, ACCESS *a, UINT i, UINT total);
\r
494 ACCESS *SiPackToAccess(PACK *p, UINT i);
\r
495 UINT SiNumAccessFromPack(PACK *p);
\r
496 void SiHubUpdateProc(HUB *h);
\r
497 bool SiCheckTicket(HUB *h, UCHAR *ticket, char *username, UINT username_size, char *usernamereal, UINT usernamereal_size, POLICY *policy, char *sessionname, UINT sessionname_size, char *groupname, UINT groupname_size);
\r
498 UINT SiGetPoint(SERVER *s);
\r
499 UINT SiCalcPoint(SERVER *s, UINT num, UINT weight);
\r
500 bool SiCallGetSessionStatus(SERVER *s, FARM_MEMBER *f, RPC_SESSION_STATUS *t);
\r
501 PACK *SiCalledGetSessionStatus(SERVER *s, PACK *p);
\r
502 bool SiCallEnumLogFileList(SERVER *s, FARM_MEMBER *f, RPC_ENUM_LOG_FILE *t, char *hubname);
\r
503 PACK *SiCalledEnumLogFileList(SERVER *s, PACK *p);
\r
504 bool SiCallReadLogFile(SERVER *s, FARM_MEMBER *f, RPC_READ_LOG_FILE *t);
\r
505 PACK *SiCalledReadLogFile(SERVER *s, PACK *p);
\r
506 int CmpLogFile(void *p1, void *p2);
\r
507 LIST *EnumLogFile(char *hubname);
\r
508 void EnumLogFileDir(LIST *o, char *dirname);
\r
509 void FreeEnumLogFile(LIST *o);
\r
510 bool CheckLogFileNameFromEnumList(LIST *o, char *name, char *server_name);
\r
511 void AdjoinEnumLogFile(LIST *o, LIST *src);
\r
512 void IncrementServerConfigRevision(SERVER *s);
\r
513 void GetServerProductName(SERVER *s, char *name, UINT size);
\r
514 void GetServerProductNameInternal(SERVER *s, char *name, UINT size);
\r
515 void SiGetServerLicenseStatus(SERVER *s, LICENSE_STATUS *st);
\r
516 void SiInitDeadLockCheck(SERVER *s);
\r
517 void SiFreeDeadLockCheck(SERVER *s);
\r
518 void SiDeadLockCheckThread(THREAD *t, void *param);
\r
519 void SiCheckDeadLockMain(SERVER *s, UINT timeout);
\r
520 void SiDebugLog(SERVER *s, char *msg);
\r
521 UINT SiDebug(SERVER *s, RPC_TEST *ret, UINT i, char *str);
\r
522 UINT SiDebugProcHelloWorld(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size);
\r
523 UINT SiDebugProcExit(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size);
\r
524 UINT SiDebugProcDump(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size);
\r
525 UINT SiDebugProcRestorePriority(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size);
\r
526 UINT SiDebugProcSetHighPriority(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size);
\r
527 UINT SiDebugProcGetExeFileName(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size);
\r
528 UINT SiDebugProcCrash(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size);
\r
530 typedef UINT (SI_DEBUG_PROC)(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size);
\r
532 CAPS *NewCaps(char *name, UINT value);
\r
533 void FreeCaps(CAPS *c);
\r
534 CAPSLIST *NewCapsList();
\r
535 int CompareCaps(void *p1, void *p2);
\r
536 void AddCaps(CAPSLIST *caps, CAPS *c);
\r
537 CAPS *GetCaps(CAPSLIST *caps, char *name);
\r
538 void FreeCapsList(CAPSLIST *caps);
\r
539 bool GetCapsBool(CAPSLIST *caps, char *name);
\r
540 UINT GetCapsInt(CAPSLIST *caps, char *name);
\r
541 void AddCapsBool(CAPSLIST *caps, char *name, bool b);
\r
542 void AddCapsInt(CAPSLIST *caps, char *name, UINT i);
\r
543 void InRpcCapsList(CAPSLIST *t, PACK *p);
\r
544 void OutRpcCapsList(PACK *p, CAPSLIST *t);
\r
545 void FreeRpcCapsList(CAPSLIST *t);
\r
546 void InitCapsList(CAPSLIST *t);
\r
547 void InRpcSysLogSetting(SYSLOG_SETTING *t, PACK *p);
\r
548 void OutRpcSysLogSetting(PACK *p, SYSLOG_SETTING *t);
\r
550 void GetServerCaps(SERVER *s, CAPSLIST *t);
\r
551 bool GetServerCapsBool(SERVER *s, char *name);
\r
552 UINT GetServerCapsInt(SERVER *s, char *name);
\r
553 void GetServerCapsMain(SERVER *s, CAPSLIST *t);
\r
554 void InitServerCapsCache(SERVER *s);
\r
555 void FreeServerCapsCache(SERVER *s);
\r
556 void DestroyServerCapsCache(SERVER *s);
\r
558 bool MakeServerSnapshot(SERVER *s, UINT64 now, SERVER_SNAPSHOT *t);
\r
559 void FreeSnapshot(SERVER_SNAPSHOT *t);
\r
560 void InitServerSnapshot(SERVER *s);
\r
561 void FreeServerSnapshot(SERVER *s);
\r
562 void ServerSnapshotThread(THREAD *t, void *param);
\r
563 void WriteServerSnapshotLog(SERVER *s, SERVER_SNAPSHOT *t);
\r
564 BUF *ServerSnapshotToBuf(SERVER_SNAPSHOT *t);
\r
565 bool IsAdminPackSupportedServerProduct(char *name);
\r
567 void SiInitHubCreateHistory(SERVER *s);
\r
568 void SiFreeHubCreateHistory(SERVER *s);
\r
569 void SiDeleteOldHubCreateHistory(SERVER *s);
\r
570 void SiAddHubCreateHistory(SERVER *s, char *name);
\r
571 void SiDelHubCreateHistory(SERVER *s, char *name);
\r
572 bool SiIsHubRegistedOnCreateHistory(SERVER *s, char *name);
\r
574 UINT SiGetServerNumUserObjects(SERVER *s);
\r
575 bool SiTooManyUserObjectsInServer(SERVER *s, bool oneMore);
\r