* tar xzf utvpn-src-unix-v101-7101-public-2010.06.27.tar.gz
[lab.git] / utvpn / utvpn-unix-v101-7101-public / src / Cedar / Cedar.h
diff --git a/utvpn/utvpn-unix-v101-7101-public/src/Cedar/Cedar.h b/utvpn/utvpn-unix-v101-7101-public/src/Cedar/Cedar.h
new file mode 100644 (file)
index 0000000..b7aab5a
--- /dev/null
@@ -0,0 +1,1139 @@
+// SoftEther UT-VPN SourceCode\r
+// \r
+// Copyright (C) 2004-2010 SoftEther Corporation.\r
+// Copyright (C) 2004-2010 University of Tsukuba, Japan.\r
+// Copyright (C) 2003-2010 Daiyuu Nobori.\r
+// All Rights Reserved.\r
+// \r
+// http://utvpn.tsukuba.ac.jp/\r
+// \r
+// This program is free software; you can redistribute it and/or\r
+// modify it under the terms of the GNU General Public License\r
+// version 2 as published by the Free Software Foundation.\r
+// \r
+// This program is distributed in the hope that it will be useful,\r
+// but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+// GNU General Public License for more details.\r
+// \r
+// You should have received a copy of the GNU General Public License version 2\r
+// along with this program; if not, write to the Free Software\r
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+// \r
+// このファイルは GPL バージョン 2 ライセンスで公開されています。\r
+// 誰でもこのファイルの内容を複製、改変したり、改変したバージョンを再配布\r
+// することができます。ただし、原著作物を改変した場合は、原著作物の著作権表示\r
+// を除去することはできません。改変した著作物を配布する場合は、改変実施者の\r
+// 著作権表示を原著作物の著作権表示に付随して記載するようにしてください。\r
+// \r
+// この SoftEther UT-VPN オープンソース・プロジェクトは、日本国の\r
+// ソフトイーサ株式会社 (SoftEther Corporation, http://www.softether.co.jp/ )\r
+// および筑波大学 (University of Tsukuba, http://www.tsukuba.ac.jp/ ) によって\r
+// ホストされています。\r
+// 本プログラムの配布者は、本プログラムを、業としての利用以外のため、\r
+// および、試験または研究のために利用が行われることを想定して配布\r
+// しています。\r
+// SoftEther UT-VPN プロジェクトの Web サイトは http://utvpn.tsukuba.ac.jp/ に\r
+// あります。\r
+// 本ソフトウェアの不具合の修正、機能改良、セキュリティホールの修復などのコード\r
+// の改変を行った場合で、その成果物を SoftEther UT-VPN プロジェクトに提出して\r
+// いただける場合は、 http://utvpn.tsukuba.ac.jp/ までソースコードを送付して\r
+// ください。SoftEther UT-VPN プロジェクトの本体リリースまたはブランチリリース\r
+// に組み込みさせていただきます。\r
+// \r
+// GPL に基づいて原著作物が提供される本ソフトウェアの改良版を配布、販売する\r
+// 場合は、そのソースコードを GPL に基づいて誰にでも開示する義務が生じます。\r
+// \r
+// 本ソフトウェアに関連する著作権、特許権、商標権はソフトイーサ株式会社\r
+// (SoftEther Corporation) およびその他の著作権保持者が保有しています。\r
+// ソフトイーサ株式会社等はこれらの権利を放棄していません。本ソフトウェアの\r
+// 二次著作物を配布、販売する場合は、これらの権利を侵害しないようにご注意\r
+// ください。\r
+// \r
+// お願い: どのような通信ソフトウェアにも通常は必ず未発見の\r
+// セキュリティホールが潜んでいます。本ソースコードをご覧いただいた結果、\r
+// UT-VPN にセキュリティホールを発見された場合は、当該セキュリティホールの\r
+// 情報を不特定多数に開示される前に、必ず、ソフトイーサ株式会社\r
+// および脆弱性情報の届出を受け付ける公的機関まで通報いただき、\r
+// 公益保護にご協力いただきますようお願い申し上げます。\r
+// \r
+// ソフトイーサ株式会社は、当該セキュリティホールについて迅速に対処を\r
+// 行い、UT-VPN および UT-VPN に関連するソフトウェアのユーザー・顧客\r
+// を保護するための努力を行います。\r
+// \r
+// ソフトイーサへの届出先: http://www.softether.co.jp/jp/contact/\r
+// 日本国内の脆弱性情報届出受付公的機関:\r
+//         独立行政法人 情報処理推進機構\r
+//         http://www.ipa.go.jp/security/vuln/report/\r
+// \r
+// 上記各事項について不明な点は、ソフトイーサ株式会社までご連絡ください。\r
+// 連絡先: http://www.softether.co.jp/jp/contact/\r
+\r
+// -----------------------------------------------\r
+// [ChangeLog]\r
+// 2010.05.20\r
+//  新規リリース by SoftEther\r
+// -----------------------------------------------\r
+\r
+// Cedar.h\r
+// Cedar.c のヘッダ\r
+\r
+#ifndef        CEDAR_H\r
+#define        CEDAR_H\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// 製品情報関連定数\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#define        bool    UINT\r
+#define        BOOL    UINT\r
+\r
+// バージョン番号\r
+#define        CEDAR_VER                                       101\r
+\r
+// ビルド番号\r
+#define        CEDAR_BUILD                                     7101\r
+\r
+// ベータ番号\r
+//#define      BETA_NUMBER                                     2\r
+\r
+// ビルド担当者の名前を指定\r
+#ifndef        BUILDER_NAME\r
+#define        BUILDER_NAME            "yagi"\r
+#endif // BUILDER_NAME\r
+\r
+// ビルドした場所を指定\r
+#ifndef        BUILD_PLACE\r
+#define        BUILD_PLACE                     "pc25"\r
+#endif // BUILD_PLACE\r
+\r
+// ビルド日時を指定\r
+#define        BUILD_DATE_Y            2010\r
+#define        BUILD_DATE_M            6\r
+#define        BUILD_DATE_D            27\r
+#define        BUILD_DATE_HO           18\r
+#define        BUILD_DATE_MI           40\r
+#define        BUILD_DATE_SE           28\r
+\r
+// 許容する時差\r
+#define        ALLOW_TIMESTAMP_DIFF            (UINT64)(3 * 24 * 60 * 60 * 1000)\r
+\r
+// SoftEther UT-VPN シリーズ製品名\r
+#define        CEDAR_PRODUCT_STR                       "UT-VPN"\r
+\r
+// Server 製品名\r
+#define        CEDAR_SERVER_STR                        "UT-VPN Server"\r
+\r
+// Bridge 製品名\r
+#define        CEDAR_BRIDGE_STR                        "UT-VPN Bridge"\r
+\r
+// Server 製品名 (ベータ)\r
+#define        CEDAR_BETA_SERVER                       "UT-VPN Server Pre Release"\r
+\r
+// VPN Server Manager 製品名\r
+#define        CEDAR_MANAGER_STR                       "UT-VPN Server Manager"\r
+\r
+// VPN Command-Line Admin Tool 製品名\r
+#define        CEDAR_CUI_STR                           "UT-VPN Command-Line Admin Tool"\r
+\r
+// VPN User-mode Router 製品名\r
+#define        CEDAR_ROUTER_STR                        "UT-VPN User-mode Router"\r
+\r
+// VPN Client 製品名\r
+#define        CEDAR_CLIENT_STR                        "UT-VPN Client"\r
+\r
+// VPN Client Manager 製品名\r
+#define CEDAR_CLIENT_MANAGER_STR       "UT-VPN Client Connection Manager"\r
+\r
+// VPN Server のカスケード接続時の製品名\r
+#define        CEDAR_SERVER_LINK_STR           "UT-VPN Server (Cascade Mode)"\r
+\r
+// VPN Server のサーバーファーム RPC 接続時の製品名\r
+#define        CEDAR_SERVER_FARM_STR           "UT-VPN Server (Cluster RPC Mode)"\r
+\r
+\r
+// IDS 検出用シグネチャの指定\r
+#define        CEDAR_SIGNATURE_STR                     "SE-UTVPN-PROTOCOL"\r
+\r
+// スマートカードのデフォルトの RSA 証明書名\r
+#define        SECURE_DEFAULT_CERT_NAME        "VPN_RSA_CERT"\r
+\r
+// スマートカードのデフォルトの RSA 秘密鍵名\r
+#define        SECURE_DEFAULT_KEY_NAME         "VPN_RSA_KEY"\r
+\r
+// 8 文字の非表示パスワード文字列\r
+#define        HIDDEN_PASSWORD                         "********"\r
+\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// 各種文字列の最大長の定義\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#define        MAX_ACCOUNT_NAME_LEN            255             // 最大アカウント名長\r
+#define        MAX_USERNAME_LEN                        255             // ユーザー名最大長\r
+#define        MAX_PASSWORD_LEN                        255             // パスワード名最大長\r
+#define        MAX_HOST_NAME_LEN                       255             // ホスト名最大長\r
+#define        MAX_PROXY_USERNAME_LEN          255             // プロキシユーザー名最大長\r
+#define        MAX_PROXY_PASSWORD_LEN          255             // プロキシパスワード最大長\r
+#define        MAX_SERVER_STR_LEN                      255             // サーバー文字列最大長\r
+#define        MAX_CLIENT_STR_LEN                      255             // クライアント文字列最大長\r
+#define        MAX_HUBNAME_LEN                         255             // HUB 名最大長\r
+#define        MAX_SESSION_NAME_LEN            255             // セッション名最大長\r
+#define        MAX_CONNECTION_NAME_LEN         255             // コネクション名最大長\r
+#define        MAX_DEVICE_NAME_LEN                     31              // デバイス名最大長\r
+#define        MAX_DEVICE_NAME_LEN_9X          4               // Win9x での仮想 LAN カード名最大長\r
+#define        MAX_ACCESSLIST_NOTE_LEN         255             // アクセスリストのメモ最大長\r
+#define        MAX_SECURE_DEVICE_FILE_LEN      255             // セキュアデバイス内ファイル名最大長\r
+#define        MAX_ADMIN_OPTION_NAME_LEN       63              // 管理オプション名\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// サーバーおよびセッション管理関連定数\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#define        SERVER_MAX_SESSIONS                     4096    // サーバーがサポートする最大セッション数\r
+#define SERVER_MAX_SESSIONS_FOR_64BIT  100000  // サーバーがサポートする最大セッション数 (64 bit)\r
+#define        NAT_MAX_SESSIONS                        4096    // NAT がサポートする最大セッション数\r
+#define        MAX_HUBS                                        4096    // 仮想 HUB の最大数 (32 bit)\r
+#define MAX_HUBS_FOR_64BIT                     100000  // 仮想 HUB の最大数 (64 bit)\r
+#define        MAX_ACCESSLISTS                         4096    // アクセスリストの最大数\r
+#define        MAX_USERS                                       10000   // 最大ユーザー数\r
+#define        MAX_GROUPS                                      10000   // 最大グループ数\r
+#define        MAX_MAC_TABLES                          65536   // 最大 MAC アドレステーブル数\r
+#define        MAX_IP_TABLES                           65536   // 最大 IP アドレステーブル数\r
+#define        MAX_HUB_CERTS                           4096    // 登録できるルート CA 最大数\r
+#define        MAX_HUB_CRLS                            4096    // 登録できる CRL 最大数\r
+#define        MAX_HUB_ACS                                     4096    // 登録できる AC 最大数\r
+#define        MAX_HUB_LINKS                           128             // 登録できるカスケード接続最大数\r
+#define        MAX_HUB_ADMIN_OPTIONS           4096    // 登録できる仮想 HUB 管理オプション最大数\r
+\r
+#define        MAX_PACKET_SIZE                         1560    // 最大パケットサイズ\r
+#define        UDP_BUF_SIZE                            (32 * 1024) // UDP パケットサイズの目安\r
+\r
+#define        MAX_SEND_SOCKET_QUEUE_SIZE      (1600 * 1600 * 1)       // 最大送信キューサイズ\r
+#define        MIN_SEND_SOCKET_QUEUE_SIZE      (1600 * 200 * 1)\r
+#define        MAX_SEND_SOCKET_QUEUE_NUM       128             // 最大送信キュー数\r
+#define        MAX_TCP_CONNECTION                      32              // 最大 TCP コネクション数\r
+#define        SELECT_TIME                                     256\r
+#define        SELECT_TIME_FOR_NAT                     30\r
+#define        SELECT_TIME_FOR_DELAYED_PKT     1               // 遅延パケットがある場合\r
+#define        MAX_STORED_QUEUE_NUM            1024            // セッションごとにストアできるキューの数\r
+#define        MAX_BUFFERING_PACKET_SIZE       (1600 * 1600)   // バッファリング可能なパケットサイズの最大値\r
+\r
+#define        TIMEOUT_MIN                                     (5 * 1000)      // 最小タイムアウト秒数\r
+#define        TIMEOUT_MAX                                     (60 * 1000)     // 最大タイムアウト秒数\r
+#define        TIMEOUT_DEFAULT                         (30 * 1000) // デフォルトのタイムアウト秒数\r
+#define        CONNECTING_TIMEOUT                      (15 * 1000)     // 接続中のタイムアウト秒数\r
+#define        CONNECTING_TIMEOUT_PROXY        (4 * 1000)      // 接続中のタイムアウト秒数 (Proxy)\r
+#define        CONNECTING_POOLING_SPAN         (3 * 1000) // 接続中のポーリング間隔\r
+#define        MIN_RETRY_INTERVAL                      (5 * 1000)              // 最小リトライ間隔\r
+#define        MAX_RETRY_INTERVAL                      (300 * 1000)    // 最大リトライ間隔\r
+#define        RETRY_INTERVAL_SPECIAL          (60 * 1000)             // 特別な場合の再接続間隔\r
+\r
+#define        MAC_MIN_LIMIT_COUNT                     3               // 最小 MAC アドレス数制限値\r
+#define        IP_MIN_LIMIT_COUNT                      4               // 最小 IPv4 アドレス数制限値\r
+#define        IP_MIN_LIMIT_COUNT_V6           5               // 最小 IPv6 アドレス数制限値\r
+#define        IP_LIMIT_WHEN_NO_ROUTING_V6     15              // NoRouting ポリシーが有効な場合の IPv6 アドレス数制限値\r
+\r
+#define        MAC_TABLE_EXCLUSIVE_TIME        (13 * 1000)                     // MAC アドレスを占有することができる期間\r
+#define        IP_TABLE_EXCLUSIVE_TIME         (13 * 1000)                     // IP アドレスを占有することができる期間\r
+#define        MAC_TABLE_EXPIRE_TIME           (600 * 1000)                    // MAC アドレステーブル有効期限\r
+#define        IP_TABLE_EXPIRE_TIME            (60 * 1000)                     // IP アドレステーブル有効期限\r
+#define        IP_TABLE_EXPIRE_TIME_DHCP       (5 * 60 * 1000)         // IP アドレステーブル有効期限 (DHCP の場合)\r
+#define        HUB_ARP_SEND_INTERVAL           (5 * 1000)                      // ARP パケット送信間隔 (生存チェック)\r
+\r
+#define        LIMITER_SAMPLING_SPAN           1000    // トラフィック制限装置のサンプリング間隔\r
+\r
+#define        STORM_CHECK_SPAN                        500             // ブロードキャストストームチェック間隔\r
+#define        STORM_DISCARD_VALUE_START       3               // ブロードキャストパケット破棄値開始値\r
+#define        STORM_DISCARD_VALUE_END         1024    // ブロードキャストパケット破棄値終了値\r
+\r
+#define        KEEP_INTERVAL_MIN                       5               // パケット送出間隔最小値\r
+#define        KEEP_INTERVAL_DEFAULT           50              // パケット送出間隔デフォルト値\r
+#define        KEEP_INTERVAL_MAX                       600             // パケット送出間隔最大値\r
+#define KEEP_TCP_TIMEOUT                       1000    // TCP タイムアウト値\r
+\r
+#define        TICKET_EXPIRES                          (60 * 1000)     // チケットの有効期限\r
+\r
+\r
+#define        FARM_BASE_POINT                         100000          // クラスタ得点の基準値\r
+#define        FARM_DEFAULT_WEIGHT                     100                     // 標準の性能基準比\r
+\r
+\r
+// HTTPS サーバー / クライアント関連文字列定数\r
+#define        DEFAULT_USER_AGENT      "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"\r
+#define        DEFAULT_ACCEPT          "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-powerpoint, application/vnd.ms-excel, */*"\r
+#define        DEFAULT_ENCODING        "gzip, deflate"\r
+#define        HTTP_CONTENT_TYPE       "text/html; charset=iso-8859-1"\r
+#define        HTTP_CONTENT_TYPE2      "application/octet-stream"\r
+#define        HTTP_CONTENT_TYPE3      "image/jpeg"\r
+#define        HTTP_CONTENT_TYPE4      "text/html"\r
+#define        HTTP_CONTENT_TYPE5      "message/rfc822"\r
+#define        HTTP_KEEP_ALIVE         "timeout=15; max=19"\r
+#define        HTTP_VPN_TARGET         "/vpnsvc/vpn.cgi"\r
+#define        HTTP_VPN_TARGET2        "/vpnsvc/connect.cgi"\r
+#define HTTP_VPN_TARGET_POSTDATA       "VPNCONNECT"\r
+#define        HTTP_SAITAMA            "/saitama.jpg"\r
+#define        HTTP_PICTURES           "/picture"\r
+\r
+#define        SE_UDP_SIGN                     "SE2P"          // 未使用 (旧 UDP モードのみ)\r
+\r
+// トラフィック情報更新間隔\r
+#define        INCREMENT_TRAFFIC_INTERVAL              (10 * 1000)\r
+\r
+// クライアント セッションの状態\r
+#define        CLIENT_STATUS_CONNECTING        0               // 接続中\r
+#define        CLIENT_STATUS_NEGOTIATION       1               // ネゴシエーション中\r
+#define        CLIENT_STATUS_AUTH                      2               // ユーザー認証中\r
+#define        CLIENT_STATUS_ESTABLISHED       3               // 接続完了\r
+#define        CLIENT_STATUS_RETRY                     4               // リトライまで待機中\r
+#define        CLIENT_STATUS_IDLE                      5               // アイドル状態\r
+\r
+// ファイル転送時に一度に転送するブロック\r
+#define        FTP_BLOCK_SIZE                          (640 * 1024)\r
+\r
+// syslog 設定\r
+#define SYSLOG_NONE                                                    0               // syslog を使わない\r
+#define SYSLOG_SERVER_LOG                                      1               // サーバーログのみ\r
+#define SYSLOG_SERVER_AND_HUB_SECURITY_LOG     2               // サーバーと仮想 HUB セキュリティログ\r
+#define SYSLOG_SERVER_AND_HUB_ALL_LOG          3               // サーバー、仮想 HUB セキュリティおよびパケットログ\r
+\r
+#define SYSLOG_PORT                                    514                     // syslog ポート番号\r
+#define SYSLOG_POLL_IP_INTERVAL                (UINT64)(3600 * 1000)   // IP アドレスを調べる間隔\r
+#define        SYSLOG_POLL_IP_INTERVAL_NG      (UINT64)(60 * 1000)     // IP アドレスを調べる間隔 (前回失敗時)\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// コネクション関連の定数\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+// インターネット接続維持機能 (KeepAlive)\r
+\r
+#define        KEEP_RETRY_INTERVAL             (60 * 1000)                     // 接続失敗時の再接続間隔\r
+#define        KEEP_MIN_PACKET_SIZE    1                                       // 最小パケットサイズ\r
+#define        KEEP_MAX_PACKET_SIZE    128                                     // 最大パケットサイズ\r
+#define        KEEP_POLLING_INTERVAL   250                                     // KEEP ポーリング間隔\r
+\r
+// 定数\r
+#define        RECV_BUF_SIZE                           65536                   // 一度に受信するバッファサイズ\r
+\r
+// プロキシの種類\r
+#define        PROXY_DIRECT                    0       // 直接 TCP 接続\r
+#define        PROXY_HTTP                              1       // HTTP プロキシサーバー経由接続\r
+#define        PROXY_SOCKS                             2       // SOCKS プロキシサーバー経由接続\r
+\r
+// データの流れる方向\r
+#define        TCP_BOTH                                0       // 双方向\r
+#define        TCP_SERVER_TO_CLIENT    1       // サーバー -> クライアント方向のみ\r
+#define        TCP_CLIENT_TO_SERVER    2       // クライアント -> サーバー方向のみ\r
+\r
+// コネクションの種類\r
+#define        CONNECTION_TYPE_CLIENT                  0       // クライアント\r
+#define        CONNECTION_TYPE_INIT                    1       // 初期化中\r
+#define        CONNECTION_TYPE_LOGIN                   2       // ログインコネクション\r
+#define        CONNECTION_TYPE_ADDITIONAL              3       // 追加接続コネクション\r
+#define        CONNECTION_TYPE_FARM_RPC                4       // サーバーファーム用 RPC\r
+#define        CONNECTION_TYPE_ADMIN_RPC               5       // 管理用 RPC\r
+#define        CONNECTION_TYPE_ENUM_HUB                6       // HUB 列挙\r
+#define        CONNECTION_TYPE_PASSWORD                7       // パスワード変更\r
+\r
+// プロトコル\r
+#define        CONNECTION_TCP                                  0       // TCP プロトコル\r
+#define        CONNECTION_UDP                                  1       // UDP プロトコル\r
+#define        CONNECTION_HUB_LAYER3                   6       // Layer-3 スイッチ セッション\r
+#define        CONNECTION_HUB_BRIDGE                   7       // Bridge セッション\r
+#define        CONNECTION_HUB_SECURE_NAT               8       // Secure NAT セッション\r
+#define        CONNECTION_HUB_LINK_SERVER              9       // HUB リンクセッション\r
+\r
+\r
+// 状態\r
+#define        CONNECTION_STATUS_ACCEPTED              0       // 接続を受け付けた (クライアント側)\r
+#define        CONNECTION_STATUS_NEGOTIATION   1       // ネゴシエーション中\r
+#define        CONNECTION_STATUS_USERAUTH              2       // ユーザー認証中\r
+#define        CONNECTION_STATUS_ESTABLISHED   3       // コネクション確立済み\r
+#define        CONNECTION_STATUS_CONNECTING    0       // 接続中 (クライアント側)\r
+\r
+// KeepAlive パケットのマジックナンバー\r
+#define        KEEP_ALIVE_MAGIC                                0xffffffff\r
+#define        MAX_KEEPALIVE_SIZE                              512\r
+\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// 仮想 HUB 関連の定数\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#define        SE_HUB_MAC_ADDR_SIGN                            0xAE                                    // 仮想 HUB MAC アドレスのサイン\r
+\r
+// トラフィック差分値\r
+#define        TRAFFIC_DIFF_USER               0               // ユーザー\r
+#define        TRAFFIC_DIFF_HUB                1               // 仮想 HUB\r
+#define        MAX_TRAFFIC_DIFF                30000   // 最大件数\r
+\r
+// HUB の種類\r
+#define        HUB_TYPE_STANDALONE                     0       // スタンドアロン HUB\r
+#define        HUB_TYPE_FARM_STATIC            1       // スタティック HUB\r
+#define        HUB_TYPE_FARM_DYNAMIC           2       // ダイナミック HUB\r
+\r
+// アクセスリストにおける遅延、ジッタ、パケットロス関係\r
+#define        HUB_ACCESSLIST_DELAY_MAX        10000           // 最大遅延\r
+#define        HUB_ACCESSLIST_JITTER_MAX       100                     // 最大ジッタ\r
+#define        HUB_ACCESSLIST_LOSS_MAX         100                     // 最大パケットロス\r
+\r
+// メッセージ関係\r
+#define        HUB_MAXMSG_LEN                          20000           // 最大メッセージ文字数\r
+\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// ユーザー認証の種類\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+// サーバー側における定数\r
+#define        AUTHTYPE_ANONYMOUS                              0                       // 匿名認証\r
+#define        AUTHTYPE_PASSWORD                               1                       // パスワード認証\r
+#define        AUTHTYPE_USERCERT                               2                       // ユーザー証明書認証\r
+#define        AUTHTYPE_ROOTCERT                               3                       // 信頼するルート証明期間が発行する証明書\r
+#define        AUTHTYPE_RADIUS                                 4                       // Radius 認証\r
+#define        AUTHTYPE_NT                                             5                       // Windows NT 認証\r
+#define        AUTHTYPE_TICKET                                 99                      // チケット認証\r
+\r
+// クライアント側における定数\r
+#define        CLIENT_AUTHTYPE_ANONYMOUS               0                       // 匿名認証\r
+#define        CLIENT_AUTHTYPE_PASSWORD                1                       // パスワード認証\r
+#define        CLIENT_AUTHTYPE_PLAIN_PASSWORD  2                       // プレーンパスワード認証\r
+#define        CLIENT_AUTHTYPE_CERT                    3                       // 証明書認証\r
+#define        CLIENT_AUTHTYPE_SECURE                  4                       // セキュアデバイス認証\r
+\r
+// Radius 関係\r
+#define        RADIUS_DEFAULT_PORT             1812                    // デフォルトのポート番号\r
+#define        RADIUS_RETRY_INTERVAL   500                             // 再送間隔\r
+#define        RADIUS_RETRY_TIMEOUT    (10 * 1000)             // タイムアウト時間\r
+\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// TCP リスナー関係の定数\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+// Listen に失敗した場合の再試行回数\r
+#define        LISTEN_RETRY_TIME                       (2 * 1000)              // 普通に Listen に失敗した場合\r
+#define LISTEN_RETRY_TIME_NOIPV6       (60 * 1000)             // IPv6 サポートが無効な場合\r
+\r
+\r
+// リスナーの使用するプロトコル\r
+#define        LISTENER_TCP                            0               // TCP/IP\r
+#define        LISTENER_UDP                            1               // UDP/IP\r
+\r
+// リスナーの状態\r
+#define        LISTENER_STATUS_TRYING          0               // 試行中\r
+#define        LISTENER_STATUS_LISTENING       1               // Listen 中\r
+\r
+// 最大の UDP パケットサイズ\r
+#define        UDP_PACKET_SIZE                         65536\r
+\r
+// 標準の IP アドレスごとのコネクション数\r
+#define DEFAULT_MAX_CONNECTIONS_PER_IP 256\r
+#define MIN_MAX_CONNECTIONS_PER_IP     10              // 最小値\r
+\r
+// 許容される未処理のコネクション数\r
+#define        DEFAULT_MAX_UNESTABLISHED_CONNECTIONS   1000\r
+#define        MIN_MAX_UNESTABLISHED_CONNECTIONS       30      // 最小値\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// ログ関係の定数\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#define        LOG_ENGINE_SAVE_START_CACHE_COUNT       100000          // 強制的に保存を開始する数\r
+#define        LOG_ENGINE_BUFFER_CACHE_SIZE_MAX        (10 * 1024 * 1024)      // 書き込みキャッシュサイズ\r
+\r
+// ファイル名などの定数\r
+#define        SERVER_LOG_DIR_NAME                     "@server_log"\r
+#define        BRIDGE_LOG_DIR_NAME                     SERVER_LOG_DIR_NAME\r
+#define        SERVER_LOG_PERFIX                       "vpn"\r
+\r
+#define        HUB_SECURITY_LOG_DIR_NAME       "@security_log"\r
+#define        HUB_SECURITY_LOG_FILE_NAME      "@security_log/%s"\r
+#define        HUB_SECURITY_LOG_PREFIX         "sec"\r
+#define        HUB_PACKET_LOG_DIR_NAME         "@packet_log"\r
+#define        HUB_PACKET_LOG_FILE_NAME        "@packet_log/%s"\r
+#define        HUB_PACKET_LOG_PREFIX           "pkt"\r
+\r
+#define        NAT_LOG_DIR_NAME                        "@secure_nat_log"\r
+#define        NAT_LOG_FILE_NAME                       "@secure_nat_log/%s"\r
+#define        NAT_LOG_PREFIX                          "snat"\r
+\r
+#define        CLIENT_LOG_DIR_NAME                     "@client_log"\r
+#define        CLIENT_LOG_PREFIX                       "client"\r
+\r
+// パケットログ設定\r
+#define        NUM_PACKET_LOG                          16\r
+#define        PACKET_LOG_TCP_CONN                     0               // TCP コネクションログ\r
+#define        PACKET_LOG_TCP                          1               // TCP パケットログ\r
+#define        PACKET_LOG_DHCP                         2               // DHCP ログ\r
+#define        PACKET_LOG_UDP                          3               // UDP ログ\r
+#define        PACKET_LOG_ICMP                         4               // ICMP ログ\r
+#define        PACKET_LOG_IP                           5               // IP ログ\r
+#define        PACKET_LOG_ARP                          6               // ARP ログ\r
+#define        PACKET_LOG_ETHERNET                     7               // Ethernet ログ\r
+\r
+#define        PACKET_LOG_NONE                         0               // 保存しない\r
+#define        PACKET_LOG_HEADER                       1               // ヘッダのみ\r
+#define        PACKET_LOG_ALL                          2               // データも保存する\r
+\r
+// ログ切り替えのタイミング\r
+#define        LOG_SWITCH_NO                           0               // 切り替え無し\r
+#define        LOG_SWITCH_SECOND                       1               // 1 秒単位\r
+#define        LOG_SWITCH_MINUTE                       2               // 1 分単位\r
+#define        LOG_SWITCH_HOUR                         3               // 1 時間単位\r
+#define        LOG_SWITCH_DAY                          4               // 1 日単位\r
+#define        LOG_SWITCH_MONTH                        5               // 1 ヶ月単位\r
+\r
+// ディスクの空き容量の最小サイズ\r
+#define        DISK_FREE_SPACE_MIN                     1048576 // 1 MBytes\r
+#define        DISK_FREE_SPACE_DEFAULT         (DISK_FREE_SPACE_MIN * 100)     // 100 Mbytes\r
+\r
+// 空き容量をチェックする間隔\r
+#define        DISK_FREE_CHECK_INTERVAL        (5 * 60 * 1000)\r
+\r
+// 簡易ログ\r
+#define TINY_LOG_DIRNAME                       "@tiny_log"\r
+#define TINY_LOG_FILENAME                      "@tiny_log/%04u%02u%02u_%02u%02u%02u.log"\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// Carrier Edition 関係の定数\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#define CE_SNAPSHOT_INTERVAL           ((UINT64)(3600 * 1000))\r
+//#define CE_SNAPSHOT_INTERVAL         ((UINT64)(3000))\r
+#define CE_SNAPSHOT_POLLING_INTERVAL   (1 * 1000)\r
+#define CE_SNAPSHOT_POLLING_INTERVAL_LICENSE   (30 * 1000)\r
+#define CE_SNAPSHOT_DIR_NAME           "@carrier_log"\r
+#define CE_SNAPSHOT_PREFIX                     "carrier"\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// 通信プロトコル関係の定数\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+// 管理者ユーザー名\r
+#define        ADMINISTRATOR_USERNAME          "administrator"\r
+// HTTP ヘッダの 1 行のサイズの最大値\r
+#define        HTTP_HEADER_LINE_MAX_SIZE       4096\r
+// PACK に含める乱数サイズの最大値\r
+#define        HTTP_PACK_RAND_SIZE_MAX         1000\r
+// ランダムサイズの最大値\r
+#define        RAND_SIZE_MAX                           4096\r
+// ランダムサイズキャッシュの有効期限\r
+#define        RAND_SIZE_CACHE_EXPIRE          (24 * 60 * 60 * 1000)\r
+// 管理許可 IP アドレスリストファイル名\r
+#define        ADMINIP_TXT                                     "@adminip.txt"\r
+\r
+#define NON_SSL_MIN_COUNT                      60\r
+#define NON_SSL_ENTRY_EXPIRES          (60 * 60 * 1000)\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// カスケード接続関係の定数\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#define        LINK_DEVICE_NAME                "_SEHUBLINKCLI_"\r
+#define        LINK_USER_NAME                  "link"\r
+#define        LINK_USER_NAME_PRINT    "Cascade"\r
+\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// SecureNAT 接続関係の定数\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#define        SNAT_DEVICE_NAME                "_SEHUBSECURENAT_"\r
+#define        SNAT_USER_NAME                  "securenat"\r
+#define        SNAT_USER_NAME_PRINT    "SecureNAT"\r
+\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// Bridge 接続関係の定数\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#define        BRIDGE_DEVICE_NAME                              "_SEHUBBRIDGE_"\r
+#define        BRIDGE_USER_NAME                                "localbridge"\r
+#define        BRIDGE_USER_NAME_PRINT                  "Local Bridge"\r
+#define        BRIDGE_TRY_SPAN                                 1000\r
+#define        BRIDGE_NUM_DEVICE_CHECK_SPAN    (5 * 60 * 1000)\r
+#define BRIDGE_NETWORK_CONNECTION_STR  L"%s [%S]"\r
+\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// EtherLogger 関係の定数\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#define        EL_ADMIN_PORT                   22888\r
+#define        EL_CONFIG_FILENAME              "@etherlogger.config"\r
+#define        EL_PACKET_LOG_DIR_NAME  "@etherlogger_log"\r
+#define        EL_PACKET_LOG_FILE_NAME "@etherlogger_log/%s"\r
+#define        EL_PACKET_LOG_PREFIX    "pkt"\r
+#define        EL_LICENSE_CHECK_SPAN   (10 * 1000)\r
+\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// Layer-3 Switch 関係の定数\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#define        MAX_NUM_L3_SWITCH               4096\r
+#define        MAX_NUM_L3_IF                   4096\r
+#define        MAX_NUM_L3_TABLE                4096\r
+\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// User-mode Router 関係の定数\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#define        ARP_ENTRY_EXPIRES                       (30 * 1000)             // ARP テーブル有効期限\r
+#define        ARP_ENTRY_POLLING_TIME          (1 * 1000)              // ARP テーブル清掃タイマ\r
+#define        ARP_REQUEST_TIMEOUT                     (200)                   // ARP リクエストタイムアウト時間\r
+#define        ARP_REQUEST_GIVEUP                      (5 * 1000)              // ARP リクエストの送信を諦める時刻\r
+#define        IP_WAIT_FOR_ARP_TIMEOUT         (5 * 1000)              // IP パケットが ARP テーブルを待つ合計時間\r
+#define        IP_COMBINE_TIMEOUT                      (10 * 1000)             // IP パケットの結合タイムアウト\r
+#define        NAT_TCP_MAX_TIMEOUT                     (2000000 * 1000)        // 最大 TCP セッションタイムアウト秒数\r
+#define        NAT_UDP_MAX_TIMEOUT                     (2000000 * 1000)        // 最大 UDP セッションタイムアウト秒数\r
+#define        NAT_TCP_MIN_TIMEOUT                     (5 * 60 * 1000)         // 最小 TCP セッションタイムアウト秒数\r
+#define        NAT_UDP_MIN_TIMEOUT                     (10 * 1000)                     // 最小 UDP セッションタイムアウト秒数\r
+#define        NAT_TCP_RECV_WINDOW_SIZE        64512                           // TCP 受信ウインドウサイズ\r
+#define        NAT_TCP_SYNACK_SEND_TIMEOUT     250                                     // TCP SYN+ACK 送信間隔\r
+#define        NAT_SEND_BUF_SIZE                       (64 * 1024)                     // TCP 送信バッファサイズ\r
+#define        NAT_RECV_BUF_SIZE                       (64 * 1024)                     // TCP 受信バッファサイズ\r
+#define        NAT_TMPBUF_SIZE                         (128 * 1024)            // TCP 一時メモリ領域サイズ\r
+#define        NAT_ACK_KEEPALIVE_SPAN          (5 * 1000)                      // TCP キープアライブ用 ACK 送信間隔\r
+#define        NAT_INITIAL_RTT_VALUE           500                                     // 初期 RTT 値\r
+#define        NAT_FIN_SEND_INTERVAL           1000                            // FIN 送信間隔\r
+#define        NAT_FIN_SEND_MAX_COUNT          5                                       // 合計 FIN 送信数\r
+#define        NAT_DNS_PROXY_PORT                      53                                      // DNS プロキシポート番号\r
+#define        NAT_DNS_RESPONSE_TTL            (20 * 60)                       // DNS 応答の TTL\r
+#define        NAT_DHCP_SERVER_PORT            67                                      // DHCP サーバーポート番号\r
+#define        DHCP_MIN_EXPIRE_TIMESPAN        (15 * 1000)                     // DHCP 最小有効期限\r
+#define        DHCP_POLLING_INTERVAL           1000                            // DHCP ポーリング間隔\r
+#define        X32                                                     ((UINT64)4294967296ULL) // 32bit + 1\r
+#define        NAT_DNS_QUERY_TIMEOUT           (512)                           // DNS クエリのタイムアウト値\r
+\r
+// ビーコン送信間隔\r
+#define        BEACON_SEND_INTERVAL            (5 * 1000)\r
+\r
+// IP パケットの結合用のキューで許容される合計サイズ クォータ\r
+#define        IP_COMBINE_WAIT_QUEUE_SIZE_QUOTA        (50 * 1024 * 1024)\r
+\r
+// ヘッダサイズ定数\r
+#define        MAC_HEADER_SIZE                         (sizeof(MAC_HEADER))\r
+#define        ARP_HEADER_SIZE                         (sizeof(ARPV4_HEADER))\r
+#define        IP_HEADER_SIZE                          (sizeof(IPV4_HEADER))\r
+#define        TCP_HEADER_SIZE                         (sizeof(TCP_HEADER))\r
+#define        UDP_HEADER_SIZE                         (sizeof(UDP_HEADER))\r
+\r
+// データ最大サイズ定数\r
+#define        MAX_L3_DATA_SIZE                        (1500)\r
+#define        MAX_IP_DATA_SIZE                        (MAX_L3_DATA_SIZE - IP_HEADER_SIZE)\r
+#define        MAX_TCP_DATA_SIZE                       (MAX_IP_DATA_SIZE - TCP_HEADER_SIZE)\r
+#define        MAX_UDP_DATA_SIZE                       (MAX_IP_DATA_SIZE - UDP_HEADER_SIZE)\r
+#define        MAX_IP_DATA_SIZE_TOTAL          (65535)\r
+\r
+// IP パケットオプション定数\r
+#define        DEFAULT_IP_TOS                          0                               // IP ヘッダの TOS\r
+#define        DEFAULT_IP_TTL                          128                             // IP ヘッダの TTL\r
+\r
+// NAT セッションの種類\r
+#define        NAT_TCP                                         0               // TCP NAT\r
+#define        NAT_UDP                                         1               // UDP NAT\r
+#define        NAT_DNS                                         2               // DNS NAT\r
+\r
+// NAT セッションの状態\r
+#define        NAT_TCP_CONNECTING                      0               // 接続中\r
+#define        NAT_TCP_SEND_RESET                      1               // RST を送信する (接続失敗または切断)\r
+#define        NAT_TCP_CONNECTED                       2               // 接続完了\r
+#define        NAT_TCP_ESTABLISHED                     3               // 接続確立済み\r
+#define        NAT_TCP_WAIT_DISCONNECT         4               // ソケット切断を待機\r
+\r
+// DHCP クライアント動作\r
+#define        DHCP_DISCOVER           1\r
+#define        DHCP_REQUEST            3\r
+\r
+// DHCP サーバー動作\r
+#define        DHCP_OFFER                      2\r
+#define        DHCP_ACK                        5\r
+#define        DHCP_NACK                       6\r
+\r
+// DHCP 関係の定数\r
+#define        DHCP_ID_MESSAGE_TYPE            0x35\r
+#define        DHCP_ID_REQUEST_IP_ADDRESS      0x32\r
+#define        DHCP_ID_HOST_NAME                       0x0c\r
+#define        DHCP_ID_SERVER_ADDRESS          0x36\r
+#define        DHCP_ID_LEASE_TIME                      0x33\r
+#define        DHCP_ID_DOMAIN_NAME                     0x0f\r
+#define        DHCP_ID_SUBNET_MASK                     0x01\r
+#define        DHCP_ID_GATEWAY_ADDR            0x03\r
+#define        DHCP_ID_DNS_ADDR                        0x06\r
+\r
+\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// UNIX 用仮想 LAN カード関係定数\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#define        TAP_FILENAME_1                          "/dev/net/tun"\r
+#define        TAP_FILENAME_2                          "/dev/tun"\r
+#define        TAP_MACOS_FILENAME                      "/dev/tap0"\r
+\r
+\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// ライセンスデータベース関係\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#define        LICENSE_MAX_PRODUCT_NAME_LEN    255                             // ライセンス製品名の最大長\r
+#define        LICENSE_KEYSTR_LEN                              41                              // ライセンスキーの長さ\r
+#define        LICENSE_LICENSEID_STR_LEN               33                              // ライセンス ID の長さ\r
+\r
+\r
+// ライセンスされている製品エディション\r
+#define        LICENSE_EDITION_VPN3_NO_LICENSE                                 0               // ライセンス無し\r
+#define        LICENSE_EDITION_UTVPN_GPL                                               201             // UT-VPN (GPL)\r
+\r
+// ライセンスステータス\r
+#define        LICENSE_STATUS_OK                               0               // 有効\r
+#define        LICENSE_STATUS_EXPIRED                  1               // 無効 (有効期限切れ)\r
+#define        LICENSE_STATUS_ID_DIFF                  2               // 無効 (システム ID 不一致)\r
+#define        LICENSE_STATUS_DUP                              3               // 無効 (重複)\r
+#define        LICENSE_STATUS_INSUFFICIENT             4               // 無効 (必要な他のライセンスが不足)\r
+#define        LICENSE_STATUS_COMPETITION              5               // 無効 (他のライセンスと競合)\r
+#define        LICENSE_STATUS_NONSENSE                 6               // 無効 (現在のエディションでは無意味)\r
+#define        LICENSE_STATUS_CPU                              7               // 無効 (CPU の種類が不一致)\r
+\r
+\r
+#define        BIT_TO_BYTE(x)                                  (((x) + 7) / 8)\r
+#define        BYTE_TO_BIT(x)                                  ((x) * 8)\r
+\r
+\r
+//////////////////////////////////////////////////////////////////////\r
+// \r
+// エラーコード\r
+// \r
+//////////////////////////////////////////////////////////////////////\r
+\r
+#define        ERR_NO_ERROR                                    0       // エラー無し\r
+#define        ERR_CONNECT_FAILED                              1       // サーバーへの接続が失敗した\r
+#define        ERR_SERVER_IS_NOT_VPN                   2       // 接続先サーバーは VPN サーバーではない\r
+#define        ERR_DISCONNECTED                                3       // 接続が切断された\r
+#define        ERR_PROTOCOL_ERROR                              4       // プロトコルエラー\r
+#define        ERR_CLIENT_IS_NOT_VPN                   5       // 接続元クライアントは VPN クライアントではない\r
+#define        ERR_USER_CANCEL                                 6       // ユーザーキャンセル\r
+#define        ERR_AUTHTYPE_NOT_SUPPORTED              7       // 指定された認証方法はサポートされていない\r
+#define        ERR_HUB_NOT_FOUND                               8       // HUB が存在しない\r
+#define        ERR_AUTH_FAILED                                 9       // 認証失敗\r
+#define        ERR_HUB_STOPPING                                10      // HUB が停止中\r
+#define        ERR_SESSION_REMOVED                             11      // セッションが削除された\r
+#define        ERR_ACCESS_DENIED                               12      // アクセス拒否\r
+#define        ERR_SESSION_TIMEOUT                             13      // セッションがタイムアウトした\r
+#define        ERR_INVALID_PROTOCOL                    14      // プロトコルが不正\r
+#define        ERR_TOO_MANY_CONNECTION                 15      // コネクション数が多すぎる\r
+#define        ERR_HUB_IS_BUSY                                 16      // HUB のセッション数が多すぎる\r
+#define        ERR_PROXY_CONNECT_FAILED                17      // プロキシサーバーへの接続が失敗した\r
+#define        ERR_PROXY_ERROR                                 18      // プロキシエラーが発生\r
+#define        ERR_PROXY_AUTH_FAILED                   19      // プロキシサーバーでの認証に失敗\r
+#define        ERR_TOO_MANY_USER_SESSION               20      // 同一ユーザーのセッション数が多すぎる\r
+#define        ERR_LICENSE_ERROR                               21      // ライセンスエラー\r
+#define        ERR_DEVICE_DRIVER_ERROR                 22      // デバイスドライバエラー\r
+#define        ERR_INTERNAL_ERROR                              23      // 内部エラー\r
+#define        ERR_SECURE_DEVICE_OPEN_FAILED   24      // セキュアデバイスを開けなかった\r
+#define        ERR_SECURE_PIN_LOGIN_FAILED             25      // PIN コードが違う\r
+#define        ERR_SECURE_NO_CERT                              26      // 指定された証明書が格納されていない\r
+#define        ERR_SECURE_NO_PRIVATE_KEY               27      // 指定された秘密鍵が格納されていない\r
+#define        ERR_SECURE_CANT_WRITE                   28      // 書き込み失敗\r
+#define        ERR_OBJECT_NOT_FOUND                    29      // 指定されたオブジェクトが見つからない\r
+#define        ERR_VLAN_ALREADY_EXISTS                 30      // 指定された名前の仮想 LAN カードは存在する\r
+#define        ERR_VLAN_INSTALL_ERROR                  31      // 指定された仮想 LAN カードを生成できない\r
+#define        ERR_VLAN_INVALID_NAME                   32      // 指定された仮想 LAN カードの名前は不正\r
+#define        ERR_NOT_SUPPORTED                               33      // サポートされていない\r
+#define        ERR_ACCOUNT_ALREADY_EXISTS              34      // アカウントはすでに存在する\r
+#define        ERR_ACCOUNT_ACTIVE                              35      // アカウントは動作中\r
+#define        ERR_ACCOUNT_NOT_FOUND                   36      // 指定されたアカウントは無い\r
+#define        ERR_ACCOUNT_INACTIVE                    37      // アカウントは停止中\r
+#define        ERR_INVALID_PARAMETER                   38      // パラメータが不正\r
+#define        ERR_SECURE_DEVICE_ERROR                 39      // セキュアデバイスの操作でエラーが発生した\r
+#define        ERR_NO_SECURE_DEVICE_SPECIFIED  40      // セキュアデバイスが指定されていない\r
+#define        ERR_VLAN_IS_USED                                41      // 仮想 LAN カードはアカウントによって使用中\r
+#define        ERR_VLAN_FOR_ACCOUNT_NOT_FOUND  42      // アカウントの仮想 LAN カードが見つからない\r
+#define        ERR_VLAN_FOR_ACCOUNT_USED               43      // アカウントの仮想 LAN カードはすでに使用中\r
+#define        ERR_VLAN_FOR_ACCOUNT_DISABLED   44      // アカウントの仮想 LAN カードは無効化されている\r
+#define        ERR_INVALID_VALUE                               45      // 値が不正\r
+#define        ERR_NOT_FARM_CONTROLLER                 46      // ファームコントローラではない\r
+#define        ERR_TRYING_TO_CONNECT                   47      // 接続を試行中\r
+#define        ERR_CONNECT_TO_FARM_CONTROLLER  48      // ファームコントローラへの接続に失敗\r
+#define        ERR_COULD_NOT_HOST_HUB_ON_FARM  49      // ファーム上に仮想 HUB を作成できなかった\r
+#define        ERR_FARM_MEMBER_HUB_ADMIN               50      // ファームメンバで HUB を管理することはできない\r
+#define        ERR_NULL_PASSWORD_LOCAL_ONLY    51      // 空文字のパスワードのためローカル接続のみ受付中\r
+#define        ERR_NOT_ENOUGH_RIGHT                    52      // 権利が不足している\r
+#define        ERR_LISTENER_NOT_FOUND                  53      // リスナーが見つからない\r
+#define        ERR_LISTENER_ALREADY_EXISTS             54      // すでにリスナーが存在している\r
+#define        ERR_NOT_FARM_MEMBER                             55      // ファームメンバではない\r
+#define        ERR_CIPHER_NOT_SUPPORTED                56      // 暗号化アルゴリズムがサポートされていない\r
+#define        ERR_HUB_ALREADY_EXISTS                  57      // HUB はすでに存在する\r
+#define        ERR_TOO_MANY_HUBS                               58      // HUB が多すぎる\r
+#define        ERR_LINK_ALREADY_EXISTS                 59      // リンクはすでに存在する\r
+#define        ERR_LINK_CANT_CREATE_ON_FARM    60      // リンクはサーバーファーム上に作成できない\r
+#define        ERR_LINK_IS_OFFLINE                             61      // リンクはオフラインである\r
+#define        ERR_TOO_MANY_ACCESS_LIST                62      // アクセスリストが多すぎる\r
+#define        ERR_TOO_MANY_USER                               63      // ユーザーが多すぎる\r
+#define        ERR_TOO_MANY_GROUP                              64      // グループが多すぎる\r
+#define        ERR_GROUP_NOT_FOUND                             65      // グループが見つからない\r
+#define        ERR_USER_ALREADY_EXISTS                 66      // ユーザーがすでに存在する\r
+#define        ERR_GROUP_ALREADY_EXISTS                67      // グループがすでに存在する\r
+#define        ERR_USER_AUTHTYPE_NOT_PASSWORD  68      // ユーザーの認証方法はパスワード認証ではない\r
+#define        ERR_OLD_PASSWORD_WRONG                  69      // 古いパスワードが間違っているかユーザーが存在しない\r
+#define        ERR_LINK_CANT_DISCONNECT                73      // カスケード セッションは切断できない\r
+#define        ERR_ACCOUNT_NOT_PRESENT                 74      // VPN サーバーへの接続設定が未完了である\r
+#define        ERR_ALREADY_ONLINE                              75      // すでにオンラインである\r
+#define        ERR_OFFLINE                                             76      // オフラインである\r
+#define        ERR_NOT_RSA_1024                                77      // RSA 1024bit 以外の証明書である\r
+#define        ERR_SNAT_CANT_DISCONNECT                78      // SecureNAT セッションは切断できない\r
+#define        ERR_SNAT_NEED_STANDALONE                79      // SecureNAT はスタンドアロン HUB でしか動作しない\r
+#define        ERR_SNAT_NOT_RUNNING                    80      // SecureNAT 機能が動作していない\r
+#define        ERR_SE_VPN_BLOCK                                81      // システム管理者向けブロックツールで停止された (廃止)\r
+#define        ERR_BRIDGE_CANT_DISCONNECT              82      // Bridge セッションは切断できない\r
+#define        ERR_LOCAL_BRIDGE_STOPPING               83      // Bridge 機能は停止している\r
+#define        ERR_LOCAL_BRIDGE_UNSUPPORTED    84      // Bridge 機能がサポートされていない\r
+#define        ERR_CERT_NOT_TRUSTED                    85      // 接続先サーバーの証明書が信頼できない\r
+#define        ERR_PRODUCT_CODE_INVALID                86      // 製品コードが違う\r
+#define        ERR_VERSION_INVALID                             87      // バージョンが違う\r
+#define        ERR_CAPTURE_DEVICE_ADD_ERROR    88      // キャプチャデバイス追加失敗\r
+#define        ERR_VPN_CODE_INVALID                    89      // VPN コードが違う\r
+#define        ERR_CAPTURE_NOT_FOUND                   90      // キャプチャデバイスが見つからない\r
+#define        ERR_LAYER3_CANT_DISCONNECT              91      // Layer-3 セッションは切断できない\r
+#define        ERR_LAYER3_SW_EXISTS                    92      // すでに同一の L3 スイッチが存在する\r
+#define        ERR_LAYER3_SW_NOT_FOUND                 93      // Layer-3 スイッチが見つからない\r
+#define        ERR_INVALID_NAME                                94      // 名前が不正\r
+#define        ERR_LAYER3_IF_ADD_FAILED                95      // インターフェイスの追加に失敗した\r
+#define        ERR_LAYER3_IF_DEL_FAILED                96      // インターフェイスの削除に失敗した\r
+#define        ERR_LAYER3_IF_EXISTS                    97      // 指定したインターフェイスはすでに存在する\r
+#define        ERR_LAYER3_TABLE_ADD_FAILED             98      // ルーティングテーブルの追加に失敗した\r
+#define        ERR_LAYER3_TABLE_DEL_FAILED             99      // ルーティングテーブルの削除に失敗した\r
+#define        ERR_LAYER3_TABLE_EXISTS                 100     // 指定したルーティングテーブルはすでに存在する\r
+#define        ERR_BAD_CLOCK                                   101     // 時刻がおかしい\r
+#define        ERR_LAYER3_CANT_START_SWITCH    102     // 仮想レイヤ 3 スイッチを開始できない\r
+#define        ERR_CLIENT_LICENSE_NOT_ENOUGH   103     // クライアント接続ライセンス数不足\r
+#define        ERR_BRIDGE_LICENSE_NOT_ENOUGH   104 // ブリッジ接続ライセンス数不足\r
+#define        ERR_SERVER_CANT_ACCEPT                  105     // 技術的な問題で Accept していない\r
+#define        ERR_SERVER_CERT_EXPIRES                 106     // 接続先 VPN サーバーの有効期限が切れている\r
+#define        ERR_MONITOR_MODE_DENIED                 107     // モニタポートモードは拒否された\r
+#define        ERR_BRIDGE_MODE_DENIED                  108     // ブリッジまたはルーティングモードは拒否された\r
+#define        ERR_IP_ADDRESS_DENIED                   109     // クライアント IP アドレスが拒否された\r
+#define        ERR_TOO_MANT_ITEMS                              110     // 項目数が多すぎる\r
+#define        ERR_MEMORY_NOT_ENOUGH                   111     // メモリ不足\r
+#define        ERR_OBJECT_EXISTS                               112     // オブジェクトはすでに存在している\r
+#define        ERR_FATAL                                               113     // 致命的なエラーが発生した\r
+#define        ERR_SERVER_LICENSE_FAILED               114     // サーバー側でライセンス違反が発生した\r
+#define        ERR_SERVER_INTERNET_FAILED              115     // サーバー側がインターネットに接続されていない\r
+#define        ERR_CLIENT_LICENSE_FAILED               116     // クライアント側でライセンス違反が発生した\r
+#define        ERR_BAD_COMMAND_OR_PARAM                117     // コマンドまたはパラメータが不正\r
+#define        ERR_INVALID_LICENSE_KEY                 118     // ライセンスキー不正\r
+#define        ERR_NO_VPN_SERVER_LICENSE               119     // VPN Server の有効なライセンスが無い\r
+#define        ERR_NO_VPN_CLUSTER_LICENSE              120     // クラスタライセンスが無い\r
+#define ERR_NOT_ADMINPACK_SERVER               121     // Administrator Pack ライセンスを持ったサーバーに接続しようとしていない\r
+#define ERR_NOT_ADMINPACK_SERVER_NET   122     // Administrator Pack ライセンスを持ったサーバーに接続しようとしていない (.NET 用)\r
+#define ERR_BETA_EXPIRES                               123     // 接続先 VPN Server のベータ版の有効期限が切れている\r
+#define ERR_BRANDED_C_TO_S                             124 // 接続制限用のブランド化文字列が異なる(サーバ側での認証用)\r
+#define ERR_BRANDED_C_FROM_S                   125     // 接続制限用のブランド化文字列が異なる(クライアント側での認証用)\r
+#define        ERR_AUTO_DISCONNECTED                   126     // 一定時間が経過したため VPN セッションが切断された\r
+#define        ERR_CLIENT_ID_REQUIRED                  127     // クライアント ID が一致していない\r
+#define        ERR_TOO_MANY_USERS_CREATED              128     // 作成されているユーザー数が多すぎる\r
+#define        ERR_SUBSCRIPTION_IS_OLDER               129     // サブスクリプションの期限が VPN Server のビルド日時よりも前である\r
+#define        ERR_UTVPN_NOT_SUPPORT_THIS_AUTH 130     // UT-VPN はこの認証方法を実装していない\r
+#define        ERR_UTVPN_NOT_SUPPORT_THIS_FUNC 131     // UT-VPN はこの機能を実装していない\r
+\r
+\r
+////////////////////////////\r
+// 全般的に使用される構造体\r
+\r
+// ネットワーク サービス\r
+typedef struct NETSVC\r
+{\r
+       bool Udp;                                               // false=TCP, true=UDP\r
+       UINT Port;                                              // ポート番号\r
+       char *Name;                                             // 名称\r
+} NETSVC;\r
+\r
+// トラフィックデータエントリ\r
+typedef struct TRAFFIC_ENTRY\r
+{\r
+       UINT64 BroadcastCount;                  // ブロードキャストパケット数\r
+       UINT64 BroadcastBytes;                  // ブロードキャストバイト数\r
+       UINT64 UnicastCount;                    // ユニキャストカウント数\r
+       UINT64 UnicastBytes;                    // ユニキャストバイト数\r
+} TRAFFIC_ENTRY;\r
+\r
+// トラフィックデータ\r
+typedef struct TRAFFIC\r
+{\r
+       TRAFFIC_ENTRY Send;                             // 送信データ\r
+       TRAFFIC_ENTRY Recv;                             // 受信データ\r
+} TRAFFIC;\r
+\r
+// 非 SSL 接続元\r
+typedef struct NON_SSL\r
+{\r
+       IP IpAddress;                                   // IP アドレス\r
+       UINT64 EntryExpires;                    // エントリの有効期限\r
+       UINT Count;                                             // 接続回数\r
+} NON_SSL;\r
+\r
+// 簡易ログ保存\r
+typedef struct TINY_LOG\r
+{\r
+       char FileName[MAX_PATH];                // ファイル名\r
+       IO *io;                                                 // ファイル\r
+       LOCK *Lock;                                             // ロック\r
+} TINY_LOG;\r
+\r
+// CEDAR 構造体\r
+typedef struct CEDAR\r
+{\r
+       LOCK *lock;                                             // ロック\r
+       REF *ref;                                               // 参照カウンタ\r
+       COUNTER *AcceptingSockets;              // Accept 中のソケット数\r
+       UINT Type;                                              // 種類\r
+       LIST *ListenerList;                             // リスナーリスト\r
+       LIST *HubList;                                  // HUB リスト\r
+       LIST *ConnectionList;                   // ネゴシエーション中のコネクションリスト\r
+       LIST *CaList;                                   // CA のリスト\r
+       volatile bool Halt;                             // 停止フラグ\r
+       COUNTER *ConnectionIncrement;   // コネクションインクリメントカウンタ\r
+       X *ServerX;                                             // サーバー証明書\r
+       K *ServerK;                                             // サーバー証明書の秘密鍵\r
+       char *CipherList;                               // 暗号化アルゴリズムのリスト\r
+       UINT Version;                                   // バージョン情報\r
+       UINT Build;                                             // ビルド番号\r
+       char *ServerStr;                                // サーバー文字列\r
+       char *MachineName;                              // コンピュータ名\r
+       char *HttpUserAgent;                    // HTTP ユーザーエージェント\r
+       char *HttpAccept;                               // HTTP Accept\r
+       char *HttpAcceptLanguage;               // HTTP Accept Language\r
+       char *HttpAcceptEncoding;               // HTTP Accept Encoding\r
+       TRAFFIC *Traffic;                               // トラフィック情報\r
+       LOCK *TrafficLock;                              // トラフィック情報ロック\r
+       LIST *UDPEntryList;                             // UDP エントリリスト\r
+       COUNTER *CurrentSessions;               // 現在のセッション数\r
+       COUNTER *CurrentTcpConnections; // 現在の TCP コネクション数\r
+       LIST *NetSvcList;                               // ネットワークサービスリスト\r
+       char *VerString;                                // バージョン文字列\r
+       char *BuildInfo;                                // ビルド情報\r
+       struct CLIENT *Client;                  // クライアント\r
+       struct SERVER *Server;                  // サーバー\r
+       UINT64 CreatedTick;                             // 生成日時\r
+       bool CheckExpires;                              // 有効期限をチェックする\r
+       LIST *TrafficDiffList;                  // トラフィック差分リスト\r
+       struct LOG *DebugLog;                   // デバッグログ\r
+       UCHAR UniqueId[16];                             // ユニーク ID\r
+       LIST *LocalBridgeList;                  // ローカルブリッジリスト\r
+       bool Bridge;                                    // ブリッジ版\r
+       LIST *L3SwList;                                 // Layer-3 スイッチリスト\r
+       COUNTER *AssignedClientLicense; // 割り当て済みクライアントライセンス数\r
+       COUNTER *AssignedBridgeLicense; // 割り当て済みブリッジライセンス数\r
+       UINT64 LicenseViolationTick;    // ライセンス違反発生\r
+       LIST *NonSslList;                               // 非 SSL 接続リスト\r
+       struct WEBUI *WebUI;                    // WebUI サービス用データ\r
+       UINT Beta;                                              // ベータ番号\r
+       LOCK *CedarSuperLock;                   // シーダー スーパー ロック!\r
+       bool DisableIPv6Listener;               // IPv6 リスナーを無効にする\r
+       UINT ClientId;                                  // クライアント ID\r
+       UINT64 BuiltDate;                               // ビルドされた日付\r
+} CEDAR;\r
+\r
+// CEDAR の種類\r
+#define        CEDAR_CLIENT                            0       // クライアント\r
+#define        CEDAR_STANDALONE_SERVER         1       // スタンドアロンサーバー\r
+#define        CEDAR_FARM_CONTROLLER           2       // サーバーファーム コントローラ\r
+#define        CEDAR_FARM_MEMBER                       3       // サーバーファーム メンバー\r
+\r
+\r
+////////////////////////////\r
+// ヘッダファイルの読み込み\r
+\r
+// 型\r
+#include <Cedar/CedarType.h>\r
+// アカウントマネージャ\r
+#include <Cedar/Account.h>\r
+// リスナー モジュール\r
+#include <Cedar/Listener.h>\r
+// TCP/IP\r
+#include <Cedar/TcpIp.h>\r
+// ログ保存モジュール\r
+#include <Cedar/Logging.h>\r
+// コネクション管理\r
+#include <Cedar/Connection.h>\r
+// セッション管理\r
+#include <Cedar/Session.h>\r
+// RPC\r
+#include <Cedar/Remote.h>\r
+// HUB 管理\r
+#include <Cedar/Hub.h>\r
+// セキュリティアカウントマネージャ\r
+#include <Cedar/Sam.h>\r
+// プロトコル\r
+#include <Cedar/Protocol.h>\r
+// HUB 間リンク\r
+#include <Cedar/Link.h>\r
+// ユーザーモード仮想ホスト\r
+#include <Cedar/Virtual.h>\r
+// SecureNAT\r
+#include <Cedar/SecureNAT.h>\r
+// コンソール サービス\r
+#include <Cedar/Console.h>\r
+// vpncmd ユーティリティ\r
+#include <Cedar/Command.h>\r
+\r
+#ifdef OS_WIN32\r
+// Sen デバイスドライバ\r
+#include <Sen/Sen.h>\r
+#endif // OS_WIN32\r
+\r
+// Sen デバイスドライバ操作用ライブラリ\r
+#include <Cedar/VLan.h>\r
+// ブリッジ\r
+#include <Cedar/Bridge.h>\r
+// Layer-3 スイッチ\r
+#include <Cedar/Layer3.h>\r
+// テスト用仮想 LAN カード\r
+#include <Cedar/NullLan.h>\r
+// クライアント\r
+#include <Cedar/Client.h>\r
+/// サーバー\r
+#include <Cedar/Server.h>\r
+// ライセンスデータベース\r
+#include <Cedar/Database.h>\r
+// 管理 RPC\r
+#include <Cedar/Admin.h>\r
+// User-mode Router\r
+#include <Cedar/Nat.h>\r
+\r
+#ifdef OS_WIN32\r
+\r
+// Win32 ユーザーインターフェイス\r
+#include <Cedar/WinUi.h>\r
+// Win32 クライアント接続マネージャ\r
+#include <Cedar/CM.h>\r
+// Win32 Server Manager\r
+#include <Cedar/SM.h>\r
+// Win32 User-mode Router Manager\r
+#include <Cedar/NM.h>\r
+// Win32 Network Utility\r
+#include <Cedar/UT.h>\r
+// Win32 HTML 表示モジュール\r
+#include <Cedar/Win32Html.h>\r
+\r
+#endif\r
+\r
+\r
+\r
+\r
+////////////////////////////\r
+// 関数プロトタイプ\r
+\r
+TRAFFIC *NewTraffic();\r
+void FreeTraffic(TRAFFIC *t);\r
+CEDAR *NewCedar(X *server_x, K *server_k);\r
+void SetCedarVpnBridge(CEDAR *c);\r
+void SetCedarCert(CEDAR *c, X *server_x, K *server_k);\r
+void ReleaseCedar(CEDAR *c);\r
+void CleanupCedar(CEDAR *c);\r
+void StopCedar(CEDAR *c);\r
+void AddListener(CEDAR *c, LISTENER *r);\r
+void StopAllListener(CEDAR *c);\r
+void AddTraffic(TRAFFIC *dst, TRAFFIC *diff);\r
+void AddHub(CEDAR *c, HUB *h);\r
+void DelHub(CEDAR *c, HUB *h);\r
+void DelHubEx(CEDAR *c, HUB *h, bool no_lock);\r
+void StopAllHub(CEDAR *c);\r
+void StopAllConnection(CEDAR *c);\r
+void AddConnection(CEDAR *cedar, CONNECTION *c);\r
+UINT GetUnestablishedConnections(CEDAR *cedar);\r
+void DelConnection(CEDAR *cedar, CONNECTION *c);\r
+void SetCedarCipherList(CEDAR *cedar, char *name);\r
+void InitCedar();\r
+void FreeCedar();\r
+void AddCa(CEDAR *cedar, X *x);\r
+bool DeleteCa(CEDAR *cedar, UINT ptr);\r
+bool CheckSignatureByCa(CEDAR *cedar, X *x);\r
+bool CheckSignatureByCaLinkMode(SESSION *s, X *x);\r
+X *FindCaSignedX(LIST *o, X *x);\r
+void InitNetSvcList(CEDAR *cedar);\r
+void FreeNetSvcList(CEDAR *cedar);\r
+int CompareNetSvc(void *p1, void *p2);\r
+char *GetSvcName(CEDAR *cedar, bool udp, UINT port);\r
+void InitHiddenPassword(char *str, UINT size);\r
+bool IsHiddenPasswordChanged(char *str);\r
+UINT64 GetTrafficPacketSize(TRAFFIC *t);\r
+UINT64 GetTrafficPacketNum(TRAFFIC *t);\r
+void EnableDebugLog(CEDAR *c);\r
+void StartCedarLog();\r
+void StopCedarLog();\r
+void CedarLog(char *str);\r
+int CompareNoSslList(void *p1, void *p2);\r
+void InitNoSslList(CEDAR *c);\r
+void FreeNoSslList(CEDAR *c);\r
+bool AddNoSsl(CEDAR *c, IP *ip);\r
+void DecrementNoSsl(CEDAR *c, IP *ip, UINT num_dec);\r
+void DeleteOldNoSsl(CEDAR *c);\r
+NON_SSL *SearchNoSslList(CEDAR *c, IP *ip);\r
+bool IsInNoSsl(CEDAR *c, IP *ip);\r
+void FreeTinyLog(TINY_LOG *t);\r
+void WriteTinyLog(TINY_LOG *t, char *str);\r
+TINY_LOG *NewTinyLog();\r
+void GetWinVer(RPC_WINVER *v);\r
+bool IsSupportedWinVer(RPC_WINVER *v);\r
+bool IsLaterBuild(CEDAR *c, UINT64 t);\r
+\r
+\r
+#endif // CEDAR_H\r
+\r