source: lab.git/Dev/utvpn/utvpn-unix-v101-7101-public/src/Cedar/Client.h @ 072e48b

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