* tar xzf utvpn-src-unix-v101-7101-public-2010.06.27.tar.gz
[lab.git] / utvpn / utvpn-unix-v101-7101-public / src / Cedar / Server.h
1 // SoftEther UT-VPN SourceCode\r
2 // \r
3 // Copyright (C) 2004-2010 SoftEther Corporation.\r
4 // Copyright (C) 2004-2010 University of Tsukuba, Japan.\r
5 // Copyright (C) 2003-2010 Daiyuu Nobori.\r
6 // All Rights Reserved.\r
7 // \r
8 // http://utvpn.tsukuba.ac.jp/\r
9 // \r
10 // This program is free software; you can redistribute it and/or\r
11 // modify it under the terms of the GNU General Public License\r
12 // version 2 as published by the Free Software Foundation.\r
13 // \r
14 // This program is distributed in the hope that it will be useful,\r
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
17 // GNU General Public License for more details.\r
18 // \r
19 // You should have received a copy of the GNU General Public License version 2\r
20 // along with this program; if not, write to the Free Software\r
21 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
22 // \r
23 // このファイルは GPL バージョン 2 ライセンスで公開されています。\r
24 // 誰でもこのファイルの内容を複製、改変したり、改変したバージョンを再配布\r
25 // することができます。ただし、原著作物を改変した場合は、原著作物の著作権表示\r
26 // を除去することはできません。改変した著作物を配布する場合は、改変実施者の\r
27 // 著作権表示を原著作物の著作権表示に付随して記載するようにしてください。\r
28 // \r
29 // この SoftEther UT-VPN オープンソース・プロジェクトは、日本国の\r
30 // ソフトイーサ株式会社 (SoftEther Corporation, http://www.softether.co.jp/ )\r
31 // および筑波大学 (University of Tsukuba, http://www.tsukuba.ac.jp/ ) によって\r
32 // ホストされています。\r
33 // 本プログラムの配布者は、本プログラムを、業としての利用以外のため、\r
34 // および、試験または研究のために利用が行われることを想定して配布\r
35 // しています。\r
36 // SoftEther UT-VPN プロジェクトの Web サイトは http://utvpn.tsukuba.ac.jp/ に\r
37 // あります。\r
38 // 本ソフトウェアの不具合の修正、機能改良、セキュリティホールの修復などのコード\r
39 // の改変を行った場合で、その成果物を SoftEther UT-VPN プロジェクトに提出して\r
40 // いただける場合は、 http://utvpn.tsukuba.ac.jp/ までソースコードを送付して\r
41 // ください。SoftEther UT-VPN プロジェクトの本体リリースまたはブランチリリース\r
42 // に組み込みさせていただきます。\r
43 // \r
44 // GPL に基づいて原著作物が提供される本ソフトウェアの改良版を配布、販売する\r
45 // 場合は、そのソースコードを GPL に基づいて誰にでも開示する義務が生じます。\r
46 // \r
47 // 本ソフトウェアに関連する著作権、特許権、商標権はソフトイーサ株式会社\r
48 // (SoftEther Corporation) およびその他の著作権保持者が保有しています。\r
49 // ソフトイーサ株式会社等はこれらの権利を放棄していません。本ソフトウェアの\r
50 // 二次著作物を配布、販売する場合は、これらの権利を侵害しないようにご注意\r
51 // ください。\r
52 // \r
53 // お願い: どのような通信ソフトウェアにも通常は必ず未発見の\r
54 // セキュリティホールが潜んでいます。本ソースコードをご覧いただいた結果、\r
55 // UT-VPN にセキュリティホールを発見された場合は、当該セキュリティホールの\r
56 // 情報を不特定多数に開示される前に、必ず、ソフトイーサ株式会社\r
57 // および脆弱性情報の届出を受け付ける公的機関まで通報いただき、\r
58 // 公益保護にご協力いただきますようお願い申し上げます。\r
59 // \r
60 // ソフトイーサ株式会社は、当該セキュリティホールについて迅速に対処を\r
61 // 行い、UT-VPN および UT-VPN に関連するソフトウェアのユーザー・顧客\r
62 // を保護するための努力を行います。\r
63 // \r
64 // ソフトイーサへの届出先: http://www.softether.co.jp/jp/contact/\r
65 // 日本国内の脆弱性情報届出受付公的機関:\r
66 //         独立行政法人 情報処理推進機構\r
67 //         http://www.ipa.go.jp/security/vuln/report/\r
68 // \r
69 // 上記各事項について不明な点は、ソフトイーサ株式会社までご連絡ください。\r
70 // 連絡先: http://www.softether.co.jp/jp/contact/\r
71 \r
72 // -----------------------------------------------\r
73 // [ChangeLog]\r
74 // 2010.05.20\r
75 //  新規リリース by SoftEther\r
76 // -----------------------------------------------\r
77 \r
78 // Server.h\r
79 // Server.c のヘッダ\r
80 \r
81 #ifndef SERVER_H\r
82 #define SERVER_H\r
83 \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
91 \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
95 \r
96 #define SERVER_LICENSE_VIOLATION_SPAN   (SERVER_FARM_CONTROL_INTERVAL * 2)\r
97 \r
98 \r
99 #define SERVER_DEADLOCK_CHECK_SPAN              (2 * 60 * 1000)\r
100 #define SERVER_DEADLOCK_CHECK_TIMEOUT   (3 * 60 * 1000)\r
101 \r
102 \r
103 #define RETRY_CONNECT_TO_CONTROLLER_INTERVAL    (1 * 1000)\r
104 \r
105 #define MAX_PUBLIC_PORT_NUM                             128\r
106 \r
107 // 各ファームメンバによってホストされている仮想 HUB リスト\r
108 struct HUB_LIST\r
109 {\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
118 };\r
119 \r
120 // タスク\r
121 struct FARM_TASK\r
122 {\r
123         EVENT *CompleteEvent;                           // 完了通知\r
124         PACK *Request;                                          // 要求\r
125         PACK *Response;                                         // 応答\r
126 };\r
127 \r
128 // ファームメンバ\r
129 struct FARM_MEMBER\r
130 {\r
131         CEDAR *Cedar;                                           // Cedar\r
132         UINT64 ConnectedTime;                           // 接続日時\r
133         UINT Me;                                                        // 自分自身\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
142         UINT Point;                                                     // 点数\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
153 };\r
154 \r
155 // ファームコントローラへの接続\r
156 struct FARM_CONTROLLER\r
157 {\r
158         LOCK *lock;                                                     // ロック\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
173 };\r
174 \r
175 // サーバーリスナー\r
176 struct SERVER_LISTENER\r
177 {\r
178         UINT Port;                                                      // ポート番号\r
179         bool Enabled;                                           // 有効フラグ\r
180         LISTENER *Listener;                                     // リスナーオブジェクト\r
181 };\r
182 \r
183 // syslog 設定\r
184 struct SYSLOG_SETTING\r
185 {\r
186         UINT SaveType;                                                  // 保存種類\r
187         char Hostname[MAX_HOST_NAME_LEN + 1];   // ホスト名\r
188         UINT Port;                                                              // ポート番号\r
189 };\r
190 \r
191 // サーバー オブジェクト\r
192 struct SERVER\r
193 {\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
217 \r
218         volatile bool Halt;                                     // 停止フラグ\r
219         LOCK *lock;                                                     // ロック\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
233 \r
234         KEEP *Keep;                                                     // コネクション維持\r
235         LOG *Logger;                                            // サーバー ロガー\r
236         ERASER *Eraser;                                         // 自動ファイル削除器\r
237 \r
238         UINT CurrentTotalNumSessionsOnFarm;     // サーバー ファーム全体での合計のセッション数\r
239         UINT CurrentAssignedClientLicense;      // 現在のクライアントライセンス割り当て数\r
240         UINT CurrentAssignedBridgeLicense;      // 現在のブリッジライセンス割り当て数\r
241         LICENSE_SYSTEM *LicenseSystem;          // ライセンスシステム\r
242 \r
243         LOCK *CapsCacheLock;                            // Caps キャッシュ用ロック\r
244         CAPSLIST *CapsListCache;                        // Caps キャッシュ\r
245         UINT LicenseHash;                                       // ライセンスリストのハッシュ値\r
246 \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
253 \r
254         THREAD *DeadLockCheckThread;            // デッドロックチェックスレッド\r
255         volatile bool HaltDeadLockThread;       // 停止フラグ\r
256         EVENT *DeadLockWaitEvent;                       // 待機イベント\r
257 \r
258         TINY_LOG *DebugLog;                                     // デバッグログ\r
259 };\r
260 \r
261 \r
262 // セッションの列挙*\r
263 struct RPC_ENUM_SESSION\r
264 {\r
265         char HubName[MAX_HUBNAME_LEN + 1];                              // HUB 名\r
266         UINT NumSession;                                                                // セッション数\r
267         struct RPC_ENUM_SESSION_ITEM *Sessions;                 // セッションリスト\r
268 };\r
269 \r
270 // セッション状態*\r
271 struct RPC_SESSION_STATUS\r
272 {\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
284 };\r
285 \r
286 \r
287 // サーバーの種類\r
288 #define SERVER_TYPE_STANDALONE                  0               // スタンドアロン サーバー\r
289 #define SERVER_TYPE_FARM_CONTROLLER             1               // ファームコントローラ サーバー\r
290 #define SERVER_TYPE_FARM_MEMBER                 2               // ファームメンバ サーバー\r
291 \r
292 \r
293 // Caps 関係\r
294 struct CAPS\r
295 {\r
296         char *Name;                                                     // 名前\r
297         UINT Value;                                                     // 値\r
298 };\r
299 struct CAPSLIST\r
300 {\r
301         LIST *CapsList;                                         // Caps リスト\r
302 };\r
303 \r
304 // ログファイル\r
305 struct LOG_FILE\r
306 {\r
307         char Path[MAX_PATH];                            // パス名\r
308         char ServerName[MAX_HOST_NAME_LEN + 1]; // サーバー名\r
309         UINT FileSize;                                          // ファイルサイズ\r
310         UINT64 UpdatedTime;                                     // 更新日時\r
311 };\r
312 \r
313 // 仮想 HUB のスナップショット\r
314 struct HUB_SNAPSHOT\r
315 {\r
316         char HubName[MAX_HUBNAME_LEN + 1];\r
317         bool HubStatus;\r
318         UINT HubMaxSessionsClient;\r
319         UINT HubMaxSessionsBridge;\r
320 };\r
321 \r
322 // Server のスナップショット\r
323 struct SERVER_SNAPSHOT\r
324 {\r
325         UINT64 DateTime;\r
326         IP ServerIp;\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
334         UINT ServerType;\r
335         UINT64 ServerStartupDatetime;\r
336         UINT NumClusterNodes;\r
337         LIST *HubList;\r
338 };\r
339 \r
340 // 仮想 HUB 作成履歴\r
341 struct SERVER_HUB_CREATE_HISTORY\r
342 {\r
343         char HubName[MAX_HUBNAME_LEN + 1];\r
344         UINT64 CreatedTime;\r
345 };\r
346 \r
347 // 関数プロトタイプ宣言\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
438 void StInit();\r
439 void StFree();\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
529 \r
530 typedef UINT (SI_DEBUG_PROC)(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size);\r
531 \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
549 \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
557 \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
566 \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
573 \r
574 UINT SiGetServerNumUserObjects(SERVER *s);\r
575 bool SiTooManyUserObjectsInServer(SERVER *s, bool oneMore);\r
576 \r
577 #endif  // SERVER_H\r
578 \r
579 \r
580 \r