* tar xzf utvpn-src-unix-v101-7101-public-2010.06.27.tar.gz
[lab.git] / utvpn / utvpn-unix-v101-7101-public / src / Cedar / Client.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 // Client.h\r
79 // Client.c のヘッダ\r
80 \r
81 #ifndef CLIENT_H\r
82 #define CLIENT_H\r
83 \r
84 #define CLIENT_CONFIG_PORT                                      9930            // クライアントポート番号\r
85 #define CLIENT_NOTIFY_PORT                                      9983            // クライアント通知ポート番号\r
86 #define CLIENT_WAIT_CN_READY_TIMEOUT            (10 * 1000)     // クライアント通知サービスが起動するまでの待機時間\r
87 \r
88 \r
89 // クライアントが指定された OS_TYPE で稼動するかどうかチェック\r
90 #define IS_CLIENT_SUPPORTED_OS(t)                       \\r
91         ((OS_IS_WINDOWS_NT(t) && GET_KETA(t, 100) >= 2) || (OS_IS_WINDOWS_9X(t)))\r
92 \r
93 \r
94 // 定数\r
95 #define CLIENT_CONFIG_FILE_NAME                         "@vpn_client.config"\r
96 #define CLIENT_DEFAULT_KEEPALIVE_HOST           "keepalive.utvpn.tsukuba.ac.jp"\r
97 #define CLIENT_DEFAULT_KEEPALIVE_PORT           80\r
98 #define CLIENT_DEFAULT_KEEPALIVE_INTERVAL       KEEP_INTERVAL_DEFAULT\r
99 \r
100 #define CLIENT_RPC_MODE_NOTIFY                          0\r
101 #define CLIENT_RPC_MODE_MANAGEMENT                      1\r
102 #define CLIENT_RPC_MODE_SHORTCUT                        2\r
103 #define CLIENT_RPC_MODE_SHORTCUT_DISCONNECT     3\r
104 \r
105 #define CLIENT_MACOS_TAP_NAME                           "tap0"\r
106 \r
107 #define CLIENT_SAVER_INTERVAL                           (30 * 1000)\r
108 \r
109 #define CLIENT_NOTIFY_SERVICE_INSTANCENAME      "utvpnclient_uihelper"\r
110 \r
111 #define CLIENT_WIN32_EXE_FILENAME                       "utvpnclient.exe"\r
112 #define CLIENT_WIN32_EXE_FILENAME_X64           "utvpnclient_x64.exe"\r
113 #define CLIENT_WIN32_EXE_FILENAME_IA64          "utvpnclient_ia64.exe"\r
114 \r
115 #define CLIENT_CUSTOM_INI_FILENAME                      "@custom.ini"\r
116 \r
117 \r
118 // UNIX における仮想 LAN カードの一覧\r
119 struct UNIX_VLAN\r
120 {\r
121         bool Enabled;                                                   // 有効フラグ\r
122         char Name[MAX_SIZE];                                    // 名前\r
123         UCHAR MacAddress[6];                                    // MAC アドレス\r
124         UCHAR Padding[2];\r
125 };\r
126 \r
127 // アカウント\r
128 struct ACCOUNT\r
129 {\r
130         // 静的データ\r
131         CLIENT_OPTION *ClientOption;                    // クライアント オプション\r
132         CLIENT_AUTH *ClientAuth;                                // クライアント認証データ\r
133         bool CheckServerCert;                                   // サーバー証明書をチェックする\r
134         X *ServerCert;                                                  // サーバー証明書\r
135         bool StartupAccount;                                    // スタートアップアカウントにする\r
136         UCHAR ShortcutKey[SHA1_SIZE];                   // キー\r
137         UINT64 CreateDateTime;                                  // 作成日時\r
138         UINT64 UpdateDateTime;                                  // 更新日時\r
139         UINT64 LastConnectDateTime;                             // 最終接続日時\r
140 \r
141         // 動的データ\r
142         LOCK *lock;                                                             // ロック\r
143         SESSION *ClientSession;                                 // クライアントセッション\r
144         CLIENT_STATUS_PRINTER *StatusPrinter;   // ステータス表示器\r
145 \r
146         SOCK *StatusWindow;                                             // ステータスウインドウ\r
147 };\r
148 \r
149 // クライアント設定\r
150 struct CLIENT_CONFIG\r
151 {\r
152         bool AllowRemoteConfig;                                 // リモート設定を許可する\r
153         bool UseKeepConnect;                                    // インターネットへの接続を維持\r
154         char KeepConnectHost[MAX_HOST_NAME_LEN + 1];    // ホスト名\r
155         UINT KeepConnectPort;                                   // ポート番号\r
156         UINT KeepConnectProtocol;                               // プロトコル\r
157         UINT KeepConnectInterval;                               // 間隔\r
158 };\r
159 \r
160 // バージョン取得\r
161 struct RPC_CLIENT_VERSION\r
162 {\r
163         char ClientProductName[128];            // クライアント製品名\r
164         char ClientVersionString[128];          // クライアントバージョン文字列\r
165         char ClientBuildInfoString[128];        // クライアントビルド情報文字列\r
166         UINT ClientVerInt;                                      // クライアントバージョン整数値\r
167         UINT ClientBuildInt;                            // クライアントビルド番号整数値\r
168         UINT ProcessId;                                         // プロセス ID\r
169         UINT OsType;                                            // OS の種類\r
170 };\r
171 \r
172 // パスワード設定\r
173 struct RPC_CLIENT_PASSWORD\r
174 {\r
175         char Password[MAX_PASSWORD_LEN + 1];    // パスワード\r
176         bool PasswordRemoteOnly;                                // パスワードはリモートのみ必要\r
177 };\r
178 \r
179 // パスワード設定の取得\r
180 struct RPC_CLIENT_PASSWORD_SETTING\r
181 {\r
182         bool IsPasswordPresented;                               // パスワードが存在する\r
183         bool PasswordRemoteOnly;                                // パスワードはリモートのみ必要\r
184 };\r
185 \r
186 // 証明書列挙項目\r
187 struct RPC_CLIENT_ENUM_CA_ITEM\r
188 {\r
189         UINT Key;                                                               // 証明書キー\r
190         wchar_t SubjectName[MAX_SIZE];                  // 発行先\r
191         wchar_t IssuerName[MAX_SIZE];                   // 発行者\r
192         UINT64 Expires;                                                 // 有効期限\r
193 };\r
194 \r
195 // 証明書列挙\r
196 struct RPC_CLIENT_ENUM_CA\r
197 {\r
198         UINT NumItem;                                                   // 項目数\r
199         RPC_CLIENT_ENUM_CA_ITEM **Items;                // 項目\r
200 };\r
201 \r
202 // 証明書項目\r
203 struct RPC_CERT\r
204 {\r
205         X *x;                                                                   // 証明書\r
206 };\r
207 \r
208 // 証明書削除\r
209 struct RPC_CLIENT_DELETE_CA\r
210 {\r
211         UINT Key;                                                               // 証明書キー\r
212 };\r
213 \r
214 // 証明書の取得\r
215 struct RPC_GET_CA\r
216 {\r
217         UINT Key;                                                               // 証明書キー\r
218         X *x;                                                                   // 証明書\r
219 };\r
220 \r
221 // 署名者の取得\r
222 struct RPC_GET_ISSUER\r
223 {\r
224         X *x;                                                                   // 証明書\r
225         X *issuer_x;                                                    // 署名者\r
226 };\r
227 \r
228 // セキュアデバイス列挙項目\r
229 struct RPC_CLIENT_ENUM_SECURE_ITEM\r
230 {\r
231         UINT DeviceId;                                                  // デバイス ID\r
232         UINT Type;                                                              // 種別\r
233         char DeviceName[MAX_SIZE];                              // デバイス名\r
234         char Manufacturer[MAX_SIZE];                    // 製造元\r
235 };\r
236 \r
237 // セキュアデバイスの列挙\r
238 struct RPC_CLIENT_ENUM_SECURE\r
239 {\r
240         UINT NumItem;                                                   // 項目数\r
241         RPC_CLIENT_ENUM_SECURE_ITEM **Items;    // 項目\r
242 };\r
243 \r
244 // セキュアデバイス指定\r
245 struct RPC_USE_SECURE\r
246 {\r
247         UINT DeviceId;                                                  // デバイス ID\r
248 };\r
249 \r
250 // セキュアデバイス内オブジェクト列挙\r
251 struct RPC_ENUM_OBJECT_IN_SECURE\r
252 {\r
253         UINT hWnd;                                                              // ウインドウハンドル\r
254         UINT NumItem;                                                   // 項目数\r
255         char **ItemName;                                                // 項目名\r
256         bool *ItemType;                                                 // 種類 (true=秘密鍵, false=公開鍵)\r
257 };\r
258 \r
259 // 仮想 LAN の作成\r
260 struct RPC_CLIENT_CREATE_VLAN\r
261 {\r
262         char DeviceName[MAX_SIZE];                              // デバイス名\r
263 };\r
264 \r
265 // 仮想 LAN 情報の取得\r
266 struct RPC_CLIENT_GET_VLAN\r
267 {\r
268         char DeviceName[MAX_SIZE];                              // デバイス名\r
269         bool Enabled;                                                   // 動作しているかどうかのフラグ\r
270         char MacAddress[MAX_SIZE];                              // MAC アドレス\r
271         char Version[MAX_SIZE];                                 // バージョン\r
272         char FileName[MAX_SIZE];                                // ドライバファイル名\r
273         char Guid[MAX_SIZE];                                    // GUID\r
274 };\r
275 \r
276 // 仮想 LAN 情報の設定\r
277 struct RPC_CLIENT_SET_VLAN\r
278 {\r
279         char DeviceName[MAX_SIZE];                              // デバイス名\r
280         char MacAddress[MAX_SIZE];                              // MAC アドレス\r
281 };\r
282 \r
283 // 仮想 LAN 列挙アイテム\r
284 struct RPC_CLIENT_ENUM_VLAN_ITEM\r
285 {\r
286         char DeviceName[MAX_SIZE];                              // デバイス名\r
287         bool Enabled;                                                   // 動作フラグ\r
288         char MacAddress[MAX_SIZE];                              // MAC アドレス\r
289         char Version[MAX_SIZE];                                 // バージョン\r
290 };\r
291 \r
292 // 仮想 LAN の列挙\r
293 struct RPC_CLIENT_ENUM_VLAN\r
294 {\r
295         UINT NumItem;                                                   // アイテム数\r
296         RPC_CLIENT_ENUM_VLAN_ITEM **Items;              // アイテム\r
297 };\r
298 \r
299 // アカウントの作成\r
300 struct RPC_CLIENT_CREATE_ACCOUNT\r
301 {\r
302         CLIENT_OPTION *ClientOption;                    // クライアント オプション\r
303         CLIENT_AUTH *ClientAuth;                                // クライアント認証データ\r
304         bool StartupAccount;                                    // スタートアップアカウント\r
305         bool CheckServerCert;                                   // サーバー証明書をチェックする\r
306         X *ServerCert;                                                  // サーバー証明書\r
307         UCHAR ShortcutKey[SHA1_SIZE];                   // ショートカットキー\r
308 };\r
309 \r
310 // アカウントの列挙アイテム\r
311 struct RPC_CLIENT_ENUM_ACCOUNT_ITEM\r
312 {\r
313         wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1];  // アカウント名\r
314         char UserName[MAX_USERNAME_LEN + 1];    //  ユーザー名\r
315         char ServerName[MAX_HOST_NAME_LEN + 1]; // サーバー名\r
316         char DeviceName[MAX_DEVICE_NAME_LEN + 1];       // デバイス名\r
317         UINT ProxyType;                                                 // プロキシ接続の種類\r
318         char ProxyName[MAX_HOST_NAME_LEN + 1];  // ホスト名\r
319         bool Active;                                                    // 動作フラグ\r
320         bool Connected;                                                 // 接続完了フラグ\r
321         bool StartupAccount;                                    // スタートアップアカウント\r
322         UINT Port;                                                              // ポート番号 (Ver 3.0 以降)\r
323         char HubName[MAX_HUBNAME_LEN + 1];              // 仮想 HUB 名 (Ver 3.0 以降)\r
324         UINT64 CreateDateTime;                                  // 作成日時 (Ver 3.0 以降)\r
325         UINT64 UpdateDateTime;                                  // 更新日時 (Ver 3.0 以降)\r
326         UINT64 LastConnectDateTime;                             // 最終接続日時 (Ver 3.0 以降)\r
327         UINT tmp1;                                                              // 一時データ\r
328 };\r
329 \r
330 // アカウントの列挙\r
331 struct RPC_CLIENT_ENUM_ACCOUNT\r
332 {\r
333         UINT NumItem;                                                   // アイテム数\r
334         RPC_CLIENT_ENUM_ACCOUNT_ITEM **Items;   // アイテム\r
335 };\r
336 \r
337 // アカウントの削除\r
338 struct RPC_CLIENT_DELETE_ACCOUNT\r
339 {\r
340         wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1];  // アカウント名\r
341 };\r
342 \r
343 // アカウント名の変更\r
344 struct RPC_RENAME_ACCOUNT\r
345 {\r
346         wchar_t OldName[MAX_ACCOUNT_NAME_LEN + 1];              // 古い名前\r
347         wchar_t NewName[MAX_ACCOUNT_NAME_LEN + 1];              // 新しい名前\r
348 };\r
349 \r
350 // アカウントの取得\r
351 struct RPC_CLIENT_GET_ACCOUNT\r
352 {\r
353         wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1];  // アカウント名\r
354         CLIENT_OPTION *ClientOption;                    // クライアント オプション\r
355         CLIENT_AUTH *ClientAuth;                                // クライアント認証データ\r
356         bool StartupAccount;                                    // スタートアップアカウント\r
357         bool CheckServerCert;                                   // サーバー証明書をチェックする\r
358         X *ServerCert;                                                  // サーバー証明書\r
359         UCHAR ShortcutKey[SHA1_SIZE];                   // ショートカットキー\r
360         UINT64 CreateDateTime;                                  // 作成日時 (Ver 3.0 以降)\r
361         UINT64 UpdateDateTime;                                  // 更新日時 (Ver 3.0 以降)\r
362         UINT64 LastConnectDateTime;                             // 最終接続日時 (Ver 3.0 以降)\r
363 };\r
364 \r
365 // 接続\r
366 struct RPC_CLIENT_CONNECT\r
367 {\r
368         wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1];  // アカウント名\r
369 };\r
370 \r
371 // コネクション状況の取得\r
372 struct RPC_CLIENT_GET_CONNECTION_STATUS\r
373 {\r
374         wchar_t AccountName[MAX_ACCOUNT_NAME_LEN + 1];  // アカウント名\r
375         bool Active;                                                    // 動作フラグ\r
376         bool Connected;                                                 // 接続済みフラグ\r
377         UINT SessionStatus;                                             // セッションステータス\r
378         char ServerName[MAX_HOST_NAME_LEN + 1]; // サーバー名\r
379         UINT ServerPort;                                                // サーバーのポート番号\r
380         char ServerProductName[MAX_SIZE];               // サーバー製品名\r
381         UINT ServerProductVer;                                  // サーバー製品バージョン\r
382         UINT ServerProductBuild;                                // サーバー製品ビルド番号\r
383         X *ServerX;                                                             // サーバーの証明書\r
384         X *ClientX;                                                             // クライアントの証明書\r
385         UINT64 StartTime;                                               // 接続開始時刻\r
386         UINT64 FirstConnectionEstablisiedTime;  // 最初のコネクションの接続完了時刻\r
387         UINT64 CurrentConnectionEstablishTime;  // このコネクションの接続完了時刻\r
388         UINT NumConnectionsEatablished;                 // これまでに確立したコネクション数\r
389         bool HalfConnection;                                    // ハーフコネクション\r
390         bool QoS;                                                               // VoIP / QoS\r
391         UINT MaxTcpConnections;                                 // 最大の TCP コネクション数\r
392         UINT NumTcpConnections;                                 // 現在の TCP コネクション数\r
393         UINT NumTcpConnectionsUpload;                   // 上りコネクション数\r
394         UINT NumTcpConnectionsDownload;                 // 下りコネクション数\r
395         bool UseEncrypt;                                                // 暗号化の使用\r
396         char CipherName[32];                                    // 暗号化アルゴリズム名\r
397         bool UseCompress;                                               // 圧縮の使用\r
398         char SessionName[MAX_SESSION_NAME_LEN + 1];     // セッション名\r
399         char ConnectionName[MAX_CONNECTION_NAME_LEN + 1];       // コネクション名\r
400         UCHAR SessionKey[SHA1_SIZE];                    // セッションキー\r
401         POLICY Policy;                                                  // ポリシー\r
402         UINT64 TotalSendSize;                                   // 合計送信データサイズ\r
403         UINT64 TotalRecvSize;                                   // 合計受信データサイズ\r
404         UINT64 TotalSendSizeReal;                               // 合計送信データサイズ (無圧縮)\r
405         UINT64 TotalRecvSizeReal;                               // 合計受信データサイズ (無圧縮)\r
406         TRAFFIC Traffic;                                                // トラフィックデータ\r
407         bool IsBridgeMode;                                              // ブリッジモード\r
408         bool IsMonitorMode;                                             // モニタモード\r
409         UINT VLanId;                                                    // VLAN ID\r
410 };\r
411 \r
412 \r
413 // RPC コネクション\r
414 struct CLIENT_RPC_CONNECTION\r
415 {\r
416         struct CLIENT *Client;                                  // クライアント\r
417         bool RpcMode;                                                   // true: RPC モード, false: 通知モード\r
418         THREAD *Thread;                                                 // 処理スレッド\r
419         SOCK *Sock;                                                             // ソケット\r
420 };\r
421 \r
422 // クライアント オブジェクト\r
423 struct CLIENT\r
424 {\r
425         LOCK *lock;                                                             // ロック\r
426         LOCK *lockForConnect;                                   // CtConnect 内部で使用するロック\r
427         REF *ref;                                                               // 参照カウンタ\r
428         CEDAR *Cedar;                                                   // Cedar\r
429         volatile bool Halt;                                             // 停止フラグ\r
430         UINT Err;                                                               // エラーコード\r
431         CFG_RW *CfgRw;                                                  // 設定ファイル R/W\r
432         LIST *AccountList;                                              // アカウントリスト\r
433         UCHAR EncryptedPassword[SHA1_SIZE];             // パスワード\r
434         bool PasswordRemoteOnly;                                // パスワードはリモート接続のみ必要とする\r
435         UINT UseSecureDeviceId;                                 // 使用するセキュアデバイス ID\r
436         CLIENT_CONFIG Config;                                   // クライアント設定\r
437         LIST *RpcConnectionList;                                // RPC コネクションリスト\r
438         SOCK *RpcListener;                                              // RPC リスナ\r
439         THREAD *RpcThread;                                              // RPC スレッド\r
440         LOCK *HelperLock;                                               // 補助ロック\r
441         THREAD *SaverThread;                                    // 設定データ自動保存スレッド\r
442         EVENT *SaverHalter;                                             // 設定データ自動保存スレッド停止用イベント\r
443         LIST *NotifyCancelList;                                 // 通知イベントリスト\r
444         KEEP *Keep;                                                             // Keep Connection\r
445         LIST *UnixVLanList;                                             // UNIX における仮想 LAN カードのリスト\r
446         LOG *Logger;                                                    // ロガー\r
447         bool DontSavePassword;                                  // パスワードを保存しないフラグ\r
448         ERASER *Eraser;                                                 // 自動ファイル削除器\r
449         SOCKLIST *SockList;                                             // ソケットリスト\r
450         CM_SETTING *CmSetting;                                  // CM 設定\r
451         bool NoSaveLog;                                                 // ログ保存をしない\r
452         bool NoSaveConfig;                                              // 設定を保存しない\r
453 };\r
454 \r
455 // リモートクライアントへの通知\r
456 struct RPC_CLIENT_NOTIFY\r
457 {\r
458         UINT NotifyCode;                                                // コード\r
459 };\r
460 \r
461 // 通知の種類\r
462 #define CLIENT_NOTIFY_ACCOUNT_CHANGED   1       // アカウント変化通知\r
463 #define CLIENT_NOTIFY_VLAN_CHANGED              2       // 仮想 LAN カード変化通知\r
464 \r
465 // リモートクライアント\r
466 struct REMOTE_CLIENT\r
467 {\r
468         RPC *Rpc;\r
469         UINT OsType;\r
470         bool Unix;\r
471         bool Win9x;\r
472         UINT ProcessId;\r
473         UINT ClientBuildInt;\r
474 };\r
475 \r
476 // 通知クライアント\r
477 struct NOTIFY_CLIENT\r
478 {\r
479         SOCK *Sock;\r
480 };\r
481 \r
482 // CM 設定\r
483 struct CM_SETTING\r
484 {\r
485         bool EasyMode;                                                  // 簡易モード\r
486         bool LockMode;                                                  // 設定ロックモード\r
487         UCHAR HashedPassword[SHA1_SIZE];                // パスワード\r
488 };\r
489 \r
490 \r
491 \r
492 \r
493 // 関数プロトタイプ\r
494 REMOTE_CLIENT *CcConnectRpc(char *server_name, char *password, bool *bad_pass, bool *no_remote, UINT wait_retry);\r
495 REMOTE_CLIENT *CcConnectRpcEx(char *server_name, char *password, bool *bad_pass, bool *no_remote, UCHAR *key, UINT *key_error_code, bool shortcut_disconnect, UINT wait_retry);\r
496 UINT CcShortcut(UCHAR *key);\r
497 UINT CcShortcutDisconnect(UCHAR *key);\r
498 void CcDisconnectRpc(REMOTE_CLIENT *rc);\r
499 NOTIFY_CLIENT *CcConnectNotify(REMOTE_CLIENT *rc);\r
500 void CcDisconnectNotify(NOTIFY_CLIENT *n);\r
501 void CcStopNotify(NOTIFY_CLIENT *n);\r
502 bool CcWaitNotify(NOTIFY_CLIENT *n);\r
503 UINT CcGetClientVersion(REMOTE_CLIENT *r, RPC_CLIENT_VERSION *a);\r
504 UINT CcSetCmSetting(REMOTE_CLIENT *r, CM_SETTING *a);\r
505 UINT CcGetCmSetting(REMOTE_CLIENT *r, CM_SETTING *a);\r
506 UINT CcSetPassword(REMOTE_CLIENT *r, RPC_CLIENT_PASSWORD *pass);\r
507 UINT CcGetPasswordSetting(REMOTE_CLIENT *r, RPC_CLIENT_PASSWORD_SETTING *a);\r
508 UINT CcEnumCa(REMOTE_CLIENT *r, RPC_CLIENT_ENUM_CA *e);\r
509 UINT CcAddCa(REMOTE_CLIENT *r, RPC_CERT *cert);\r
510 UINT CcDeleteCa(REMOTE_CLIENT *r, RPC_CLIENT_DELETE_CA *p);\r
511 UINT CcGetCa(REMOTE_CLIENT *r, RPC_GET_CA *get);\r
512 UINT CcEnumSecure(REMOTE_CLIENT *r, RPC_CLIENT_ENUM_SECURE *e);\r
513 UINT CcUseSecure(REMOTE_CLIENT *r, RPC_USE_SECURE *sec);\r
514 UINT CcGetUseSecure(REMOTE_CLIENT *r, RPC_USE_SECURE *sec);\r
515 UINT CcEnumObjectInSecure(REMOTE_CLIENT *r, RPC_ENUM_OBJECT_IN_SECURE *e);\r
516 UINT CcCreateVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *create);\r
517 UINT CcUpgradeVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *create);\r
518 UINT CcGetVLan(REMOTE_CLIENT *r, RPC_CLIENT_GET_VLAN *get);\r
519 UINT CcSetVLan(REMOTE_CLIENT *r, RPC_CLIENT_SET_VLAN *set);\r
520 UINT CcEnumVLan(REMOTE_CLIENT *r, RPC_CLIENT_ENUM_VLAN *e);\r
521 UINT CcDeleteVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *d);\r
522 UINT CcEnableVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *vlan);\r
523 UINT CcDisableVLan(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_VLAN *vlan);\r
524 UINT CcCreateAccount(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_ACCOUNT *a);\r
525 UINT CcEnumAccount(REMOTE_CLIENT *r, RPC_CLIENT_ENUM_ACCOUNT *e);\r
526 UINT CcDeleteAccount(REMOTE_CLIENT *r, RPC_CLIENT_DELETE_ACCOUNT *a);\r
527 UINT CcSetAccount(REMOTE_CLIENT *r, RPC_CLIENT_CREATE_ACCOUNT *a);\r
528 UINT CcGetAccount(REMOTE_CLIENT *r, RPC_CLIENT_GET_ACCOUNT *a);\r
529 UINT CcRenameAccount(REMOTE_CLIENT *r, RPC_RENAME_ACCOUNT *rename);\r
530 UINT CcSetClientConfig(REMOTE_CLIENT *r, CLIENT_CONFIG *o);\r
531 UINT CcGetClientConfig(REMOTE_CLIENT *r, CLIENT_CONFIG *o);\r
532 UINT CcConnect(REMOTE_CLIENT *r, RPC_CLIENT_CONNECT *connect);\r
533 UINT CcDisconnect(REMOTE_CLIENT *r, RPC_CLIENT_CONNECT *connect);\r
534 UINT CcGetAccountStatus(REMOTE_CLIENT *r, RPC_CLIENT_GET_CONNECTION_STATUS *st);\r
535 UINT CcSetStartupAccount(REMOTE_CLIENT *r, RPC_CLIENT_DELETE_ACCOUNT *a);\r
536 UINT CcRemoveStartupAccount(REMOTE_CLIENT *r, RPC_CLIENT_DELETE_ACCOUNT *a);\r
537 UINT CcGetIssuer(REMOTE_CLIENT *r, RPC_GET_ISSUER *a);\r
538 void CcSetServiceToForegroundProcess(REMOTE_CLIENT *r);\r
539 char *CiGetFirstVLan(CLIENT *c);\r
540 void CiNormalizeAccountVLan(CLIENT *c);\r
541 \r
542 \r
543 void CnStart();\r
544 void CnListenerProc(THREAD *thread, void *param);\r
545 \r
546 void CnReleaseSocket(SOCK *s, PACK *p);\r
547 \r
548 void CnStatusPrinter(SOCK *s, PACK *p);\r
549 void Win32CnStatusPrinter(SOCK *s, PACK *p);\r
550 \r
551 void CnConnectErrorDlg(SOCK *s, PACK *p);\r
552 void Win32CnConnectErrorDlg(SOCK *s, PACK *p);\r
553 void Win32CnConnectErrorDlgThreadProc(THREAD *thread, void *param);\r
554 \r
555 void CnPasswordDlg(SOCK *s, PACK *p);\r
556 void Win32CnPasswordDlg(SOCK *s, PACK *p);\r
557 void Win32CnPasswordDlgThreadProc(THREAD *thread, void *param);\r
558 \r
559 void CnMsgDlg(SOCK *s, PACK *p);\r
560 void Win32CnMsgDlg(SOCK *s, PACK *p);\r
561 void Win32CnMsgDlgThreadProc(THREAD *thread, void *param);\r
562 \r
563 void CnNicInfo(SOCK *s, PACK *p);\r
564 void Win32CnNicInfo(SOCK *s, PACK *p);\r
565 void Win32CnNicInfoThreadProc(THREAD *thread, void *param);\r
566 \r
567 void CnCheckCert(SOCK *s, PACK *p);\r
568 void Win32CnCheckCert(SOCK *s, PACK *p);\r
569 void Win32CnCheckCertThreadProc(THREAD *thread, void *param);\r
570 \r
571 void CnExecDriverInstaller(SOCK *s, PACK *p);\r
572 void Win32CnExecDriverInstaller(SOCK *s, PACK *p);\r
573 \r
574 bool CnCheckAlreadyExists(bool lock);\r
575 bool CnIsCnServiceReady();\r
576 void CnWaitForCnServiceReady();\r
577 \r
578 void CnSecureSign(SOCK *s, PACK *p);\r
579 \r
580 SOCK *CncConnect();\r
581 SOCK *CncConnectEx(UINT timeout);\r
582 void CncReleaseSocket();\r
583 void CncExit();\r
584 UINT CncGetSessionId();\r
585 bool CncExecDriverInstaller(char *arg);\r
586 SOCK *CncStatusPrinterWindowStart(SESSION *s);\r
587 void CncStatusPrinterWindowPrint(SOCK *s, wchar_t *str);\r
588 void CncStatusPrinterWindowStop(SOCK *s);\r
589 void CncStatusPrinterWindowThreadProc(THREAD *thread, void *param);\r
590 bool CncConnectErrorDlg(SESSION *session, UI_CONNECTERROR_DLG *dlg);\r
591 void CncConnectErrorDlgHaltThread(THREAD *thread, void *param);\r
592 bool CncPasswordDlg(SESSION *session, UI_PASSWORD_DLG *dlg);\r
593 void CncPasswordDlgHaltThread(THREAD *thread, void *param);\r
594 void CncCheckCert(SESSION *session, UI_CHECKCERT *dlg);\r
595 void CncCheckCertHaltThread(THREAD *thread, void *param);\r
596 bool CncSecureSignDlg(SECURE_SIGN *sign);\r
597 SOCK *CncMsgDlg(UI_MSG_DLG *dlg);\r
598 void CndMsgDlgFree(SOCK *s);\r
599 SOCK *CncNicInfo(UI_NICINFO *info);\r
600 void CncNicInfoFree(SOCK *s);\r
601 \r
602 void CtStartClient();\r
603 void CtStopClient();\r
604 CLIENT *CtGetClient();\r
605 void CtReleaseClient(CLIENT *c);\r
606 bool CtGetClientVersion(CLIENT *c, RPC_CLIENT_VERSION *ver);\r
607 bool CtGetCmSetting(CLIENT *c, CM_SETTING *s);\r
608 bool CtSetCmSetting(CLIENT *c, CM_SETTING *s);\r
609 bool CtSetPassword(CLIENT *c, RPC_CLIENT_PASSWORD *pass);\r
610 bool CtGetPasswordSetting(CLIENT *c, RPC_CLIENT_PASSWORD_SETTING *a);\r
611 bool CtEnumCa(CLIENT *c, RPC_CLIENT_ENUM_CA *e);\r
612 bool CtAddCa(CLIENT *c, RPC_CERT *cert);\r
613 bool CtDeleteCa(CLIENT *c, RPC_CLIENT_DELETE_CA *p);\r
614 bool CtGetCa(CLIENT *c, RPC_GET_CA *get);\r
615 bool CtEnumSecure(CLIENT *c, RPC_CLIENT_ENUM_SECURE *e);\r
616 bool CtUseSecure(CLIENT *c, RPC_USE_SECURE *sec);\r
617 bool CtGetUseSecure(CLIENT *c, RPC_USE_SECURE *sec);\r
618 bool CtEnumObjectInSecure(CLIENT *c, RPC_ENUM_OBJECT_IN_SECURE *e);\r
619 bool CtCreateVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *create);\r
620 bool CtUpgradeVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *create);\r
621 bool CtGetVLan(CLIENT *c, RPC_CLIENT_GET_VLAN *get);\r
622 bool CtSetVLan(CLIENT *c, RPC_CLIENT_SET_VLAN *set);\r
623 bool CtEnumVLan(CLIENT *c, RPC_CLIENT_ENUM_VLAN *e);\r
624 bool CtDeleteVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *d);\r
625 bool CtEnableVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *vlan);\r
626 bool CtDisableVLan(CLIENT *c, RPC_CLIENT_CREATE_VLAN *vlan);\r
627 bool CtCreateAccount(CLIENT *c, RPC_CLIENT_CREATE_ACCOUNT *a);\r
628 bool CtEnumAccount(CLIENT *c, RPC_CLIENT_ENUM_ACCOUNT *e);\r
629 bool CtDeleteAccount(CLIENT *c, RPC_CLIENT_DELETE_ACCOUNT *a);\r
630 bool CtSetAccount(CLIENT *c, RPC_CLIENT_CREATE_ACCOUNT *a);\r
631 bool CtGetAccount(CLIENT *c, RPC_CLIENT_GET_ACCOUNT *a);\r
632 bool CtRenameAccount(CLIENT *c, RPC_RENAME_ACCOUNT *rename);\r
633 bool CtSetClientConfig(CLIENT *c, CLIENT_CONFIG *o);\r
634 bool CtGetClientConfig(CLIENT *c, CLIENT_CONFIG *o);\r
635 bool CtConnect(CLIENT *c, RPC_CLIENT_CONNECT *connect);\r
636 bool CtDisconnect(CLIENT *c, RPC_CLIENT_CONNECT *connect);\r
637 bool CtGetAccountStatus(CLIENT *c, RPC_CLIENT_GET_CONNECTION_STATUS *st);\r
638 bool CtSetStartupAccount(CLIENT *c, RPC_CLIENT_DELETE_ACCOUNT *a);\r
639 bool CtRemoveStartupAccount(CLIENT *c, RPC_CLIENT_DELETE_ACCOUNT *a);\r
640 bool CtGetIssuer(CLIENT *c, RPC_GET_ISSUER *a);\r
641 \r
642 \r
643 \r
644 \r
645 \r
646 // 内部関数プロトタイプ\r
647 char *CiGetVpnClientExeFileName();\r
648 void CiServerThread(THREAD *t, void *param);\r
649 void CiInitSaver(CLIENT *c);\r
650 void CiFreeSaver(CLIENT *c);\r
651 void CiGetSessionStatus(RPC_CLIENT_GET_CONNECTION_STATUS *st, SESSION *s);\r
652 PACK *CiRpcDispatch(RPC *rpc, char *name, PACK *p);\r
653 void CiRpcAccepted(CLIENT *c, SOCK *s);\r
654 void CiNotifyMain(CLIENT *c, SOCK *s);\r
655 void CiRpcAcceptThread(THREAD *thread, void *param);\r
656 void CiRpcServerThread(THREAD *thread, void *param);\r
657 void CiStartRpcServer(CLIENT *c);\r
658 void CiStopRpcServer(CLIENT *c);\r
659 CLIENT_OPTION *CiLoadClientOption(FOLDER *f);\r
660 CLIENT_AUTH *CiLoadClientAuth(FOLDER *f);\r
661 ACCOUNT *CiLoadClientAccount(FOLDER *f);\r
662 void CiLoadClientConfig(CLIENT_CONFIG *c, FOLDER *f);\r
663 void CiLoadAccountDatabase(CLIENT *c, FOLDER *f);\r
664 void CiLoadCAList(CLIENT *c, FOLDER *f);\r
665 void CiLoadCACert(CLIENT *c, FOLDER *f);\r
666 void CiLoadVLanList(CLIENT *c, FOLDER *f);\r
667 void CiLoadVLan(CLIENT *c, FOLDER *f);\r
668 bool CiReadSettingFromCfg(CLIENT *c, FOLDER *root);\r
669 void CiWriteAccountDatabase(CLIENT *c, FOLDER *f);\r
670 void CiWriteAccountData(FOLDER *f, ACCOUNT *a);\r
671 void CiWriteClientOption(FOLDER *f, CLIENT_OPTION *o);\r
672 void CiWriteClientAuth(FOLDER *f, CLIENT_AUTH *a);\r
673 void CiWriteClientConfig(FOLDER *cc, CLIENT_CONFIG *config);\r
674 void CiWriteSettingToCfg(CLIENT *c, FOLDER *root);\r
675 void CiWriteCAList(CLIENT *c, FOLDER *f);\r
676 void CiWriteCACert(CLIENT *c, FOLDER *f, X *x);\r
677 void CiWriteVLanList(CLIENT *c, FOLDER *f);\r
678 void CiWriteVLan(CLIENT *c, FOLDER *f, UNIX_VLAN *v);\r
679 void CiFreeClientGetConnectionStatus(RPC_CLIENT_GET_CONNECTION_STATUS *st);\r
680 bool CiCheckCertProc(SESSION *s, CONNECTION *c, X *server_x, bool *expired);\r
681 bool CiSecureSignProc(SESSION *s, CONNECTION *c, SECURE_SIGN *sign);\r
682 bool Win32CiSecureSign(SECURE_SIGN *sign);\r
683 void CiFreeClientAuth(CLIENT_AUTH *auth);\r
684 void CiFreeClientCreateAccount(RPC_CLIENT_CREATE_ACCOUNT *a);\r
685 void CiFreeClientGetAccount(RPC_CLIENT_GET_ACCOUNT *a);\r
686 void CiFreeClientEnumVLan(RPC_CLIENT_ENUM_VLAN *e);\r
687 void CiFreeClientEnumSecure(RPC_CLIENT_ENUM_SECURE *e);\r
688 void CiFreeClientEnumCa(RPC_CLIENT_ENUM_CA *e);\r
689 void CiFreeEnumObjectInSecure(RPC_ENUM_OBJECT_IN_SECURE *a);\r
690 void CiFreeGetCa(RPC_GET_CA *a);\r
691 void CiFreeGetIssuer(RPC_GET_ISSUER *a);\r
692 void CiFreeClientEnumAccount(RPC_CLIENT_ENUM_ACCOUNT *a);\r
693 void CiSetError(CLIENT *c, UINT err);\r
694 void CiCheckOs();\r
695 CLIENT *CiNewClient();\r
696 void CiCleanupClient(CLIENT *c);\r
697 bool CiLoadConfigurationFile(CLIENT *c);\r
698 void CiSaveConfigurationFile(CLIENT *c);\r
699 void CiInitConfiguration(CLIENT *c);\r
700 void CiSetVLanToDefault(CLIENT *c);\r
701 bool CiIsVLan(CLIENT *c, char *name);\r
702 void CiFreeConfiguration(CLIENT *c);\r
703 int CiCompareAccount(void *p1, void *p2);\r
704 void CiFreeAccount(ACCOUNT *a);\r
705 void CiNotify(CLIENT *c);\r
706 void CiClientStatusPrinter(SESSION *s, wchar_t *status);\r
707 void CiInitKeep(CLIENT *c);\r
708 void CiFreeKeep(CLIENT *c);\r
709 int CiCompareUnixVLan(void *p1, void *p2);\r
710 BUF *CiAccountToCfg(RPC_CLIENT_CREATE_ACCOUNT *t);\r
711 RPC_CLIENT_CREATE_ACCOUNT *CiCfgToAccount(BUF *b);\r
712 void CiChangeAllVLanMacAddress(CLIENT *c);\r
713 void CiChangeAllVLanMacAddressIfMachineChanged(CLIENT *c);\r
714 bool CiReadLastMachineHash(void *data);\r
715 bool CiWriteLastMachineHash(void *data);\r
716 void CiGetCurrentMachineHash(void *data);\r
717 void CiGetCurrentMachineHashOld(void *data);\r
718 int CiCompareClientAccountEnumItemByLastConnectDateTime(void *p1, void *p2);\r
719 \r
720 BUF *EncryptPassword(char *password);\r
721 char *DecryptPassword(BUF *b);\r
722 \r
723 void InRpcGetIssuer(RPC_GET_ISSUER *c, PACK *p);\r
724 void OutRpcGetIssuer(PACK *p, RPC_GET_ISSUER *c);\r
725 void InRpcClientVersion(RPC_CLIENT_VERSION *ver, PACK *p);\r
726 void OutRpcClientVersion(PACK *p, RPC_CLIENT_VERSION *ver);\r
727 void InRpcClientPassword(RPC_CLIENT_PASSWORD *pw, PACK *p);\r
728 void OutRpcClientPassword(PACK *p, RPC_CLIENT_PASSWORD *pw);\r
729 void InRpcClientEnumCa(RPC_CLIENT_ENUM_CA *e, PACK *p);\r
730 void OutRpcClientEnumCa(PACK *p, RPC_CLIENT_ENUM_CA *e);\r
731 void InRpcCert(RPC_CERT *c, PACK *p);\r
732 void OutRpcCert(PACK *p, RPC_CERT *c);\r
733 void InRpcClientDeleteCa(RPC_CLIENT_DELETE_CA *c, PACK *p);\r
734 void OutRpcClientDeleteCa(PACK *p, RPC_CLIENT_DELETE_CA *c);\r
735 void InRpcGetCa(RPC_GET_CA *c, PACK *p);\r
736 void OutRpcGetCa(PACK *p, RPC_GET_CA *c);\r
737 void InRpcClientEnumSecure(RPC_CLIENT_ENUM_SECURE *e, PACK *p);\r
738 void OutRpcClientEnumSecure(PACK *p, RPC_CLIENT_ENUM_SECURE *e);\r
739 void InRpcUseSecure(RPC_USE_SECURE *u, PACK *p);\r
740 void OutRpcUseSecure(PACK *p, RPC_USE_SECURE *u);\r
741 void InRpcEnumObjectInSecure(RPC_ENUM_OBJECT_IN_SECURE *e, PACK *p);\r
742 void OutRpcEnumObjectInSecure(PACK *p, RPC_ENUM_OBJECT_IN_SECURE *e);\r
743 void InRpcCreateVLan(RPC_CLIENT_CREATE_VLAN *v, PACK *p);\r
744 void OutRpcCreateVLan(PACK *p, RPC_CLIENT_CREATE_VLAN *v);\r
745 void InRpcClientGetVLan(RPC_CLIENT_GET_VLAN *v, PACK *p);\r
746 void OutRpcClientGetVLan(PACK *p, RPC_CLIENT_GET_VLAN *v);\r
747 void InRpcClientSetVLan(RPC_CLIENT_SET_VLAN *v, PACK *p);\r
748 void OutRpcClientSetVLan(PACK *p, RPC_CLIENT_SET_VLAN *v);\r
749 void InRpcClientEnumVLan(RPC_CLIENT_ENUM_VLAN *v, PACK *p);\r
750 void OutRpcClientEnumVLan(PACK *p, RPC_CLIENT_ENUM_VLAN *v);\r
751 void InRpcClientOption(CLIENT_OPTION *c, PACK *p);\r
752 void OutRpcClientOption(PACK *p, CLIENT_OPTION *c);\r
753 void InRpcClientAuth(CLIENT_AUTH *c, PACK *p);\r
754 void OutRpcClientAuth(PACK *p, CLIENT_AUTH *c);\r
755 void InRpcClientCreateAccount(RPC_CLIENT_CREATE_ACCOUNT *c, PACK *p);\r
756 void OutRpcClientCreateAccount(PACK *p, RPC_CLIENT_CREATE_ACCOUNT *c);\r
757 void InRpcClientEnumAccount(RPC_CLIENT_ENUM_ACCOUNT *e, PACK *p);\r
758 void OutRpcClientEnumAccount(PACK *p, RPC_CLIENT_ENUM_ACCOUNT *e);\r
759 void InRpcClientDeleteAccount(RPC_CLIENT_DELETE_ACCOUNT *a, PACK *p);\r
760 void OutRpcClientDeleteAccount(PACK *p, RPC_CLIENT_DELETE_ACCOUNT *a);\r
761 void InRpcRenameAccount(RPC_RENAME_ACCOUNT *a, PACK *p);\r
762 void OutRpcRenameAccount(PACK *p, RPC_RENAME_ACCOUNT *a);\r
763 void InRpcClientGetAccount(RPC_CLIENT_GET_ACCOUNT *c, PACK *p);\r
764 void OutRpcClientGetAccount(PACK *p, RPC_CLIENT_GET_ACCOUNT *c);\r
765 void InRpcClientConnect(RPC_CLIENT_CONNECT *c, PACK *p);\r
766 void OutRpcClientConnect(PACK *p, RPC_CLIENT_CONNECT *c);\r
767 void InRpcPolicy(POLICY *o, PACK *p);\r
768 void OutRpcPolicy(PACK *p, POLICY *o);\r
769 void InRpcClientGetConnectionStatus(RPC_CLIENT_GET_CONNECTION_STATUS *s, PACK *p);\r
770 void OutRpcClientGetConnectionStatus(PACK *p, RPC_CLIENT_GET_CONNECTION_STATUS *c);\r
771 void InRpcClientNotify(RPC_CLIENT_NOTIFY *n, PACK *p);\r
772 void OutRpcClientNotify(PACK *p, RPC_CLIENT_NOTIFY *n);\r
773 void InRpcClientConfig(CLIENT_CONFIG *c, PACK *p);\r
774 void OutRpcClientConfig(PACK *p, CLIENT_CONFIG *c);\r
775 void InRpcClientPasswordSetting(RPC_CLIENT_PASSWORD_SETTING *a, PACK *p);\r
776 void OutRpcClientPasswordSetting(PACK *p, RPC_CLIENT_PASSWORD_SETTING *a);\r
777 void InRpcTraffic(TRAFFIC *t, PACK *p);\r
778 void OutRpcTraffic(PACK *p, TRAFFIC *t);\r
779 void InRpcTrafficEx(TRAFFIC *t, PACK *p, UINT i);\r
780 void OutRpcTrafficEx(TRAFFIC *t, PACK *p, UINT i, UINT num);\r
781 void OutRpcCmSetting(PACK *p, CM_SETTING *c);\r
782 void InRpcCmSetting(CM_SETTING *c, PACK *p);\r
783 \r
784 \r
785 #endif  // CLIENT_H\r
786 \r
787 \r