* copy vendor drop to trunk
[lab.git] / Dev / utvpn / utvpn-unix-v101-7101-public / src / Cedar / Command.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 // Command.h\r
79 // Command.c のヘッダ\r
80 \r
81 #ifndef COMMAND_H\r
82 #define COMMAND_H\r
83 \r
84 // 定数\r
85 #define TRAFFIC_DEFAULT_PORT            9821\r
86 #define TRAFFIC_NUMTCP_MAX                      32\r
87 #define TRAFFIC_NUMTCP_DEFAULT          32\r
88 #define TRAFFIC_SPAN_DEFAULT            15\r
89 #define TRAFFIC_TYPE_DOWNLOAD           1\r
90 #define TRAFFIC_TYPE_UPLOAD                     2\r
91 #define TRAFFIC_TYPE_FULL                       0\r
92 #define TRAFFIC_BUF_SIZE                        65535\r
93 #define TRAFFIC_VER_STR_SIZE            16\r
94 #define TRAFFIC_VER_STR                         "TrafficServer\r\n"\r
95 \r
96 // Win32 用定数\r
97 #define VPNCMD_BOOTSTRAP_REG_KEYNAME    "Software\\SoftEther Corporation\\UT-VPN Command Line Utility"\r
98 #define VPNCMD_BOOTSTRAP_REG_VALUENAME_VER      "InstalledVersion"\r
99 #define VPNCMD_BOOTSTRAP_REG_VALUENAME_PATH     "InstalledPath"\r
100 #define VPNCMD_BOOTSTRAP_FILENAME               "|utvpncmdsys.exe"\r
101 #define VPNCMD_BOOTSTRAP_FILENAME_X64   "|utvpncmdsys_x64.exe"\r
102 #define VPNCMD_BOOTSTRAP_FILENAME_IA64  "|utvpncmdsys_ia64.exe"\r
103 \r
104 \r
105 // トラフィックテスト結果\r
106 struct TT_RESULT\r
107 {\r
108         bool Raw;                                       // 生データかどうか\r
109         bool Double;                            // 2 倍にしているかどうか\r
110         UINT64 NumBytesUpload;          // アップロードしたサイズ\r
111         UINT64 NumBytesDownload;        // ダウンロードしたサイズ\r
112         UINT64 NumBytesTotal;           // 合計サイズ\r
113         UINT64 Span;                            // 期間 (ミリ秒)\r
114         UINT64 BpsUpload;                       // アップロードスループット\r
115         UINT64 BpsDownload;                     // ダウンロードスループット\r
116         UINT64 BpsTotal;                        // 合計スループット\r
117 };\r
118 \r
119 // 文字表示関数\r
120 typedef void (TT_PRINT_PROC)(void *param, wchar_t *str);\r
121 \r
122 // クライアント側ソケット\r
123 struct TTC_SOCK\r
124 {\r
125         SOCK *Sock;                             // ソケット\r
126         UINT State;                             // ステート\r
127         UINT64 NumBytes;                // 伝送したバイト数\r
128         bool Download;                  // ダウンロードソケット\r
129         bool ServerUploadReportReceived;        // サーバーからのアップロード量レポートの受信完了\r
130         UINT64 NextSendRequestReportTick;       // 次にレポートをリクエストする時刻\r
131         UINT Id;\r
132 };\r
133 \r
134 // トラフィックテストクライアント\r
135 struct TTC\r
136 {\r
137         TT_PRINT_PROC *Print;   // 文字表示関数\r
138         void *Param;                    // 任意のパラメータ\r
139         bool Double;                    // 2 倍モード\r
140         bool Raw;                               // 生データモード\r
141         UINT Port;                              // ポート番号\r
142         char Host[MAX_HOST_NAME_LEN + 1];       // ホスト名\r
143         UINT NumTcp;                    // TCP コネクション数\r
144         UINT Type;                              // 種類\r
145         UINT64 Span;                    // 期間\r
146         UINT64 RealSpan;                // 実際の期間\r
147         THREAD *Thread;                 // スレッド\r
148         volatile bool Halt;             // 停止フラグ\r
149         SOCK_EVENT *SockEvent;  // ソケットイベント\r
150         LIST *ItcSockList;              // クライアントソケットリスト\r
151         TT_RESULT Result;               // 結果\r
152         UINT ErrorCode;                 // エラーコード\r
153         bool AbnormalTerminated;        // 異常終了\r
154         EVENT *StartEvent;              // 開始イベント\r
155         EVENT *InitedEvent;             // 初期化完了通知イベント\r
156 };\r
157 \r
158 // サーバー側ソケット\r
159 struct TTS_SOCK\r
160 {\r
161         SOCK *Sock;                             // ソケット\r
162         UINT State;                             // ステート\r
163         UINT64 NumBytes;                // 伝送したバイト数\r
164         bool SockJoined;                // イベントに追加されたかどうか\r
165         UINT Id;                                // ID\r
166         UINT64 LastWaitTick;    // クライアントにサイズ情報を通知するための再試行待機時間\r
167 };\r
168 \r
169 // トラフィックテストサーバー\r
170 struct TTS\r
171 {\r
172         TT_PRINT_PROC *Print;   // 文字表示関数\r
173         void *Param;                    // 任意のパラメータ\r
174         volatile bool Halt;             // 停止フラグ\r
175         UINT Port;                              // ポート番号\r
176         THREAD *Thread;                 // スレッド\r
177         THREAD *WorkThread;             // ワーカースレッド\r
178         THREAD *IPv6AcceptThread;       // IPv6 Accept スレッド\r
179         SOCK *ListenSocket;             // 待機するソケット\r
180         SOCK *ListenSocketV6;   // 待機するソケット (IPv6)\r
181         UINT ErrorCode;                 // エラーコード\r
182         SOCK_EVENT *SockEvent;  // ソケットイベント\r
183         LIST *TtsSockList;              // サーバーソケットリスト\r
184         bool NewSocketArrived;  // 新しいソケットが到着している\r
185         UINT IdSeed;                    // ID 値\r
186 };\r
187 \r
188 // VPN Tools コンテキスト\r
189 struct PT\r
190 {\r
191         CONSOLE *Console;       // コンソール\r
192         UINT LastError;         // 最後のエラー\r
193         wchar_t *CmdLine;       // 実行するコマンドライン\r
194 };\r
195 \r
196 // サーバー管理コンテキスト\r
197 struct PS\r
198 {\r
199         bool ConsoleForServer;  // サーバーのためのコンソール (常に true)\r
200         CONSOLE *Console;       // コンソール\r
201         RPC *Rpc;                       // RPC\r
202         char *ServerName;       // サーバー名\r
203         UINT ServerPort;        // ポート番号\r
204         char *HubName;          // 現在管理対象にある仮想 HUB 名\r
205         UINT LastError;         // 最後のエラー\r
206         char *AdminHub;         // デフォルトで管理する仮想 HUB\r
207         wchar_t *CmdLine;       // 実行するコマンドライン\r
208         CAPSLIST *CapsList;     // Caps リスト\r
209 };\r
210 \r
211 // クライアント管理コンテキスト\r
212 struct PC\r
213 {\r
214         bool ConsoleForServer;  // サーバーのためのコンソール (常に false)\r
215         CONSOLE *Console;       // コンソール\r
216         REMOTE_CLIENT *RemoteClient;    // リモートクライアント\r
217         char *ServerName;       // サーバー名\r
218         UINT LastError;         // 最後のエラー\r
219         wchar_t *CmdLine;       // コマンドライン\r
220 };\r
221 \r
222 // テーブルのカラム\r
223 struct CTC\r
224 {\r
225         wchar_t *String;        // 文字列\r
226         bool Right;                     // 右寄せ\r
227 };\r
228 \r
229 // テーブルの行\r
230 struct CTR\r
231 {\r
232         wchar_t **Strings;      // 文字列リスト\r
233 };\r
234 \r
235 // コンソール用テーブル\r
236 struct CT\r
237 {\r
238         LIST *Columns;          // カラム一覧\r
239         LIST *Rows;                     // 行一覧\r
240 };\r
241 \r
242 UINT CommandMain(wchar_t *command_line);\r
243 UINT VpnCmdProc(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
244 bool ParseHostPort(char *src, char **host, UINT *port, UINT default_port);\r
245 bool ParseHostPortAtmark(char *src, char **host, UINT *port, UINT default_port);\r
246 CT *CtNew();\r
247 void CtFree(CT *ct, CONSOLE *c);\r
248 void CtFreeEx(CT *ct, CONSOLE *c, bool standard_view);\r
249 void CtInsertColumn(CT *ct, wchar_t *str, bool right);\r
250 CT *CtNewStandard();\r
251 CT *CtNewStandardEx();\r
252 void CtInsert(CT *ct, ...);\r
253 void CtPrint(CT *ct, CONSOLE *c);\r
254 void CtPrintStandard(CT *ct, CONSOLE *c);\r
255 void CtPrintRow(CONSOLE *c, UINT num, UINT *widths, wchar_t **strings, bool *rights, char separate_char);\r
256 void VpnCmdInitBootPath();\r
257 void OutRpcTtResult(PACK *p, TT_RESULT *t);\r
258 void InRpcTtResult(PACK *p, TT_RESULT *t);\r
259 \r
260 void CmdPrintError(CONSOLE *c, UINT err);\r
261 void CmdPrintAbout(CONSOLE *c);\r
262 void CmdPrintRow(CONSOLE *c, wchar_t *title, wchar_t *tag, ...);\r
263 wchar_t *CmdPromptPort(CONSOLE *c, void *param);\r
264 wchar_t *CmdPromptChoosePassword(CONSOLE *c, void *param);\r
265 bool CmdEvalPort(CONSOLE *c, wchar_t *str, void *param);\r
266 void CmdInsertTrafficInfo(CT *ct, TRAFFIC *t);\r
267 wchar_t *GetHubTypeStr(UINT type);\r
268 wchar_t *GetServerTypeStr(UINT type);\r
269 char *CmdPasswordPrompt(CONSOLE *c);\r
270 bool CmdEvalIp(CONSOLE *c, wchar_t *str, void *param);\r
271 wchar_t *PsClusterSettingMemberPromptIp(CONSOLE *c, void *param);\r
272 bool CmdEvalHostAndPort(CONSOLE *c, wchar_t *str, void *param);\r
273 LIST *StrToPortList(char *str);\r
274 bool CmdEvalPortList(CONSOLE *c, wchar_t *str, void *param);\r
275 wchar_t *PsClusterSettingMemberPromptPorts(CONSOLE *c, void *param);\r
276 K *CmdLoadKey(CONSOLE *c, char *filename);\r
277 bool CmdLoadCertAndKey(CONSOLE *c, X **xx, K **kk, char *cert_filename, char *key_filename);\r
278 bool CmdEvalTcpOrUdp(CONSOLE *c, wchar_t *str, void *param);\r
279 wchar_t *GetConnectionTypeStr(UINT type);\r
280 bool CmdEvalHostAndSubnetMask4(CONSOLE *c, wchar_t *str, void *param);\r
281 bool CmdEvalNetworkAndSubnetMask4(CONSOLE *c, wchar_t *str, void *param);\r
282 bool CmdEvalNetworkAndSubnetMask6(CONSOLE *c, wchar_t *str, void *param);\r
283 bool CmdEvalNetworkAndSubnetMask46(CONSOLE *c, wchar_t *str, void *param);\r
284 bool CmdEvalIpAndMask4(CONSOLE *c, wchar_t *str, void *param);\r
285 bool CmdEvalIpAndMask6(CONSOLE *c, wchar_t *str, void *param);\r
286 bool CmdEvalIpAndMask46(CONSOLE *c, wchar_t *str, void *param);\r
287 wchar_t *GetLogSwitchStr(UINT i);\r
288 wchar_t *GetPacketLogNameStr(UINT i);\r
289 UINT StrToLogSwitchType(char *str);\r
290 UINT StrToPacketLogType(char *str);\r
291 UINT StrToPacketLogSaveInfoType(char *str);\r
292 wchar_t *GetProxyTypeStr(UINT i);\r
293 wchar_t *GetClientAuthTypeStr(UINT i);\r
294 void PrintPolicyList(CONSOLE *c, char *name);\r
295 void PrintPolicy(CONSOLE *c, POLICY *pol, bool cascade_mode);\r
296 bool EditPolicy(CONSOLE *c, POLICY *pol, char *name, char *value, bool cascade_mode);\r
297 void CmdPrintStatusToListView(CT *ct, RPC_CLIENT_GET_CONNECTION_STATUS *s);\r
298 void CmdPrintStatusToListViewEx(CT *ct, RPC_CLIENT_GET_CONNECTION_STATUS *s, bool server_mode);\r
299 bool CmdEvalPassOrDiscard(CONSOLE *c, wchar_t *str, void *param);\r
300 bool StrToPassOrDiscard(char *str);\r
301 bool CmdEvalProtocol(CONSOLE *c, wchar_t *str, void *param);\r
302 UINT StrToProtocol(char *str);\r
303 bool CmdEvalPortRange(CONSOLE *c, wchar_t *str, void *param);\r
304 bool ParsePortRange(char *str, UINT *start, UINT *end);\r
305 wchar_t *GetAuthTypeStr(UINT id);\r
306 UINT64 StrToDateTime64(char *str);\r
307 bool CmdEvalDateTime(CONSOLE *c, wchar_t *str, void *param);\r
308 void CmdPrintNodeInfo(CT *ct, NODE_INFO *info);\r
309 wchar_t *GetProtocolName(UINT n);\r
310 void CmdGenerateImportName(REMOTE_CLIENT *r, wchar_t *name, UINT size, wchar_t *old_name);\r
311 bool CmdIsAccountName(REMOTE_CLIENT *r, wchar_t *name);\r
312 wchar_t *GetSyslogSettingName(UINT n);\r
313 \r
314 \r
315 void TtPrint(void *param, TT_PRINT_PROC *print_proc, wchar_t *str);\r
316 void TtGenerateRandomData(UCHAR **buf, UINT *size);\r
317 void TtsWorkerThread(THREAD *thread, void *param);\r
318 void TtsListenThread(THREAD *thread, void *param);\r
319 void TtsAcceptProc(TTS *tts, SOCK *listen_socket);\r
320 void TtsIPv6AcceptThread(THREAD *thread, void *param);\r
321 wchar_t *GetTtcTypeStr(UINT type);\r
322 void TtcPrintSummary(TTC *ttc);\r
323 void StopTtc(TTC *ttc);\r
324 void TtcGenerateResult(TTC *ttc);\r
325 void TtcThread(THREAD *thread, void *param);\r
326 TTC *NewTtcEx(char *host, UINT port, UINT numtcp, UINT type, UINT64 span, bool dbl, bool raw, TT_PRINT_PROC *print_proc, void *param, EVENT *start_event);\r
327 TTC *NewTtc(char *host, UINT port, UINT numtcp, UINT type, UINT64 span, bool dbl, bool raw, TT_PRINT_PROC *print_proc, void *param);\r
328 UINT FreeTtc(TTC *ttc, TT_RESULT *result);\r
329 TTS *NewTts(UINT port, void *param, TT_PRINT_PROC *print_proc);\r
330 UINT FreeTts(TTS *tts);\r
331 void PtTrafficPrintProc(void *param, wchar_t *str);\r
332 void TtcPrintResult(CONSOLE *c, TT_RESULT *res);\r
333 \r
334 \r
335 bool SystemCheck();\r
336 bool CheckKernel();\r
337 bool CheckMemory();\r
338 bool CheckStrings();\r
339 bool CheckFileSystem();\r
340 bool CheckThread();\r
341 bool CheckNetwork();\r
342 void InputToNull(void *p);\r
343 UINT RetZero();\r
344 \r
345 \r
346 \r
347 UINT PtConnect(CONSOLE *c, wchar_t *cmdline);\r
348 PT *NewPt(CONSOLE *c, wchar_t *cmdline);\r
349 void FreePt(PT *pt);\r
350 void PtMain(PT *pt);\r
351 UINT PtMakeCert(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
352 UINT PtTrafficClient(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
353 UINT PtTrafficServer(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
354 UINT PtCheck(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
355 \r
356 \r
357 UINT PcConnect(CONSOLE *c, char *target, wchar_t *cmdline, char *password);\r
358 PC *NewPc(CONSOLE *c, REMOTE_CLIENT *remote_client, char *servername, wchar_t *cmdline);\r
359 void FreePc(PC *pc);\r
360 void PcMain(PC *pc);\r
361 UINT PcAbout(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
362 UINT PcVersionGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
363 UINT PcPasswordSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
364 UINT PcPasswordGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
365 UINT PcCertList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
366 UINT PcCertAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
367 UINT PcCertDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
368 UINT PcCertGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
369 UINT PcSecureList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
370 UINT PcSecureSelect(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
371 UINT PcSecureGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
372 UINT PcNicCreate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
373 UINT PcNicDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
374 UINT PcNicUpgrade(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
375 UINT PcNicGetSetting(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
376 UINT PcNicSetSetting(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
377 UINT PcNicEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
378 UINT PcNicDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
379 UINT PcNicList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
380 UINT PcAccountList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
381 UINT PcAccountCreate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
382 UINT PcAccountSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
383 UINT PcAccountGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
384 UINT PcAccountDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
385 UINT PcAccountUsernameSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
386 UINT PcAccountAnonymousSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
387 UINT PcAccountPasswordSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
388 UINT PcAccountCertSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
389 UINT PcAccountCertGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
390 UINT PcAccountEncryptDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
391 UINT PcAccountEncryptEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
392 UINT PcAccountCompressEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
393 UINT PcAccountCompressDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
394 UINT PcAccountProxyNone(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
395 UINT PcAccountProxyHttp(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
396 UINT PcAccountProxySocks(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
397 UINT PcAccountServerCertEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
398 UINT PcAccountServerCertDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
399 UINT PcAccountServerCertSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
400 UINT PcAccountServerCertDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
401 UINT PcAccountServerCertGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
402 UINT PcAccountDetailSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
403 UINT PcAccountRename(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
404 UINT PcAccountConnect(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
405 UINT PcAccountDisconnect(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
406 UINT PcAccountStatusGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
407 UINT PcAccountNicSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
408 UINT PcAccountStatusShow(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
409 UINT PcAccountStatusHide(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
410 UINT PcAccountSecureCertSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
411 UINT PcAccountRetrySet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
412 UINT PcAccountStartupSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
413 UINT PcAccountStartupRemove(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
414 UINT PcAccountExport(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
415 UINT PcAccountImport(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
416 UINT PcRemoteEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
417 UINT PcRemoteDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
418 UINT PcKeepEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
419 UINT PcKeepDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
420 UINT PcKeepSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
421 UINT PcKeepGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
422 \r
423 \r
424 PS *NewPs(CONSOLE *c, RPC *rpc, char *servername, UINT serverport, char *hubname, char *adminhub, wchar_t *cmdline);\r
425 void FreePs(PS *ps);\r
426 UINT PsConnect(CONSOLE *c, char *host, UINT port, char *hub, char *adminhub, wchar_t *cmdline, char *password);\r
427 void PsMain(PS *ps);\r
428 UINT PsAbout(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
429 UINT PsServerInfoGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
430 UINT PsServerStatusGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
431 UINT PsListenerCreate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
432 UINT PsListenerDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
433 UINT PsListenerList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
434 UINT PsListenerEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
435 UINT PsListenerDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
436 UINT PsServerPasswordSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
437 UINT PsClusterSettingGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
438 UINT PsClusterSettingStandalone(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
439 UINT PsClusterSettingController(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
440 UINT PsClusterSettingMember(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
441 UINT PsClusterMemberList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
442 UINT PsClusterMemberInfoGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
443 UINT PsClusterMemberCertGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
444 UINT PsClusterConnectionStatusGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
445 UINT PsCrash(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
446 UINT PsFlush(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
447 UINT PsDebug(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
448 UINT PsServerCertGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
449 UINT PsServerKeyGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
450 UINT PsServerCertSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
451 UINT PsServerCipherGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
452 UINT PsServerCipherSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
453 UINT PsKeepEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
454 UINT PsKeepDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
455 UINT PsKeepSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
456 UINT PsKeepGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
457 UINT PsSyslogGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
458 UINT PsSyslogDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
459 UINT PsSyslogEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
460 UINT PsConnectionList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
461 UINT PsConnectionGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
462 UINT PsConnectionDisconnect(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
463 UINT PsBridgeDeviceList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
464 UINT PsBridgeList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
465 UINT PsBridgeCreate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
466 UINT PsBridgeDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
467 UINT PsCaps(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
468 UINT PsReboot(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
469 UINT PsConfigGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
470 UINT PsConfigSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
471 UINT PsRouterList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
472 UINT PsRouterAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
473 UINT PsRouterDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
474 UINT PsRouterStart(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
475 UINT PsRouterStop(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
476 UINT PsRouterIfList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
477 UINT PsRouterIfAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
478 UINT PsRouterIfDel(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
479 UINT PsRouterTableList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
480 UINT PsRouterTableAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
481 UINT PsRouterTableDel(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
482 UINT PsLogFileList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
483 UINT PsLogFileGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
484 UINT PsHubCreate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
485 UINT PsHubCreateDynamic(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
486 UINT PsHubCreateStatic(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
487 UINT PsHubDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
488 UINT PsHubSetStatic(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
489 UINT PsHubSetDynamic(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
490 UINT PsHubList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
491 UINT PsHub(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
492 UINT PsOnline(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
493 UINT PsOffline(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
494 UINT PsSetMaxSession(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
495 UINT PsSetHubPassword(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
496 UINT PsSetEnumAllow(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
497 UINT PsSetEnumDeny(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
498 UINT PsOptionsGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
499 UINT PsRadiusServerSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
500 UINT PsRadiusServerDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
501 UINT PsRadiusServerGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
502 UINT PsStatusGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
503 UINT PsLogGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
504 UINT PsLogEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
505 UINT PsLogDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
506 UINT PsLogSwitchSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
507 UINT PsLogPacketSaveType(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
508 UINT PsCAList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
509 UINT PsCAAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
510 UINT PsCADelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
511 UINT PsCAGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
512 UINT PsCascadeList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
513 UINT PsCascadeCreate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
514 UINT PsCascadeSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
515 UINT PsCascadeGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
516 UINT PsCascadeDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
517 UINT PsCascadeUsernameSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
518 UINT PsCascadeAnonymousSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
519 UINT PsCascadePasswordSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
520 UINT PsCascadeCertSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
521 UINT PsCascadeCertGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
522 UINT PsCascadeEncryptEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
523 UINT PsCascadeEncryptDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
524 UINT PsCascadeCompressEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
525 UINT PsCascadeCompressDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
526 UINT PsCascadeProxyNone(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
527 UINT PsCascadeProxyHttp(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
528 UINT PsCascadeProxySocks(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
529 UINT PsCascadeServerCertEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
530 UINT PsCascadeServerCertDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
531 UINT PsCascadeServerCertSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
532 UINT PsCascadeServerCertDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
533 UINT PsCascadeServerCertGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
534 UINT PsCascadeDetailSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
535 UINT PsCascadePolicyRemove(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
536 UINT PsCascadePolicySet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
537 UINT PsPolicyList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
538 UINT PsCascadeStatusGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
539 UINT PsCascadeRename(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
540 UINT PsCascadeOnline(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
541 UINT PsCascadeOffline(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
542 UINT PsAccessAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
543 UINT PsAccessAddEx(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
544 UINT PsAccessAdd6(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
545 UINT PsAccessAddEx6(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
546 UINT PsAccessList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
547 UINT PsAccessDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
548 UINT PsAccessEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
549 UINT PsAccessDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
550 UINT PsUserList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
551 UINT PsUserCreate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
552 UINT PsUserSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
553 UINT PsUserDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
554 UINT PsUserGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
555 UINT PsUserAnonymousSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
556 UINT PsUserPasswordSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
557 UINT PsUserCertSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
558 UINT PsUserCertGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
559 UINT PsUserSignedSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
560 UINT PsUserRadiusSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
561 UINT PsUserNTLMSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
562 UINT PsUserPolicyRemove(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
563 UINT PsUserPolicySet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
564 UINT PsUserExpiresSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
565 UINT PsGroupList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
566 UINT PsGroupCreate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
567 UINT PsGroupSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
568 UINT PsGroupDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
569 UINT PsGroupGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
570 UINT PsGroupJoin(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
571 UINT PsGroupUnjoin(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
572 UINT PsGroupPolicyRemove(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
573 UINT PsGroupPolicySet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
574 UINT PsSessionList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
575 UINT PsSessionGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
576 UINT PsSessionDisconnect(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
577 UINT PsMacTable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
578 UINT PsMacDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
579 UINT PsIpTable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
580 UINT PsIpDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
581 UINT PsSecureNatEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
582 UINT PsSecureNatDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
583 UINT PsSecureNatStatusGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
584 UINT PsSecureNatHostGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
585 UINT PsSecureNatHostSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
586 UINT PsNatGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
587 UINT PsNatEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
588 UINT PsNatDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
589 UINT PsNatSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
590 UINT PsNatTable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
591 UINT PsDhcpGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
592 UINT PsDhcpEnable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
593 UINT PsDhcpDisable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
594 UINT PsDhcpSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
595 UINT PsDhcpTable(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
596 UINT PsAdminOptionList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
597 UINT PsAdminOptionSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
598 UINT PsExtOptionList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
599 UINT PsExtOptionSet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
600 UINT PsCrlList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
601 UINT PsCrlAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
602 UINT PsCrlDel(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
603 UINT PsCrlGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
604 UINT PsAcList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
605 UINT PsAcAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
606 UINT PsAcAdd6(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
607 UINT PsAcGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
608 UINT PsAcDel(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
609 UINT PsLicenseAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
610 UINT PsLicenseDel(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
611 UINT PsLicenseList(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
612 UINT PsLicenseStatus(CONSOLE *c, char *cmd_name, wchar_t *str, void *param);\r
613 \r
614 \r
615 #endif  // COMMAND_H\r
616 \r
617 \r