source: lab.git/Dev/utvpn/utvpn-unix-v101-7101-public/src/Cedar/Server.h @ a1bae3e

trunk
Last change on this file since a1bae3e was a1bae3e, checked in by mitty <mitty@…>, 12 years ago
  • copy vendor drop to trunk

git-svn-id: https://lab.mitty.jp/svn/lab/trunk@147 7d2118f6-f56c-43e7-95a2-4bb3031d96e7

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