* copy vendor drop to trunk
[lab.git] / Dev / utvpn / utvpn-unix-v101-7101-public / src / Mayaqua / MayaType.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 // MayaType.h\r
79 // Mayaqua Kernel 型宣言ヘッダファイル\r
80 \r
81 #ifndef MAYATYPE_H\r
82 #define MAYATYPE_H\r
83 \r
84 // windows.h ヘッダが include されているかどうかをチェック\r
85 #ifndef WINDOWS_H\r
86 #ifdef  _WINDOWS_\r
87 #define WINDOWS_H\r
88 #endif  // _WINDOWS_\r
89 #endif  // WINDOWS_H\r
90 \r
91 \r
92 #if     !defined(ENCRYPT_C) && !defined(HAM_C)\r
93 // OpenSSL が使用する構造体\r
94 typedef struct x509_st X509;\r
95 typedef struct evp_pkey_st EVP_PKEY;\r
96 typedef struct bio_st BIO;\r
97 typedef struct ssl_st SSL;\r
98 typedef struct ssl_ctx_st SSL_CTX;\r
99 typedef struct X509_req_st X509_REQ;\r
100 typedef struct PKCS12 PKCS12;\r
101 typedef struct bignum_st BIGNUM;\r
102 typedef struct x509_crl_st X509_CRL;\r
103 #endif  // ENCRYPT_C\r
104 \r
105 // \r
106 // 定数\r
107 // \r
108 \r
109 // 標準のバッファサイズ\r
110 #define STD_SIZE                        512\r
111 #define MAX_SIZE                        512\r
112 #define BUF_SIZE                        512\r
113 \r
114 // 対応 Windows OS 一覧\r
115 #define SUPPORTED_WINDOWS_LIST          "Windows 98 / 98 SE / ME / NT 4.0 SP6a / 2000 SP4 / XP SP2, SP3 / Server 2003 SP2 / SBS 2003 SP2 / Storage Server 2003 SP2 / Vista SP1, SP2 / Server 2008 SP1, SP2 / Storage Server 2008 SP1, SP2 / Home Server / 7 / Server 2008 R2"\r
116 \r
117 // 無限\r
118 #ifndef WINDOWS_H\r
119 #define INFINITE                        (0xFFFFFFFF)\r
120 #endif\r
121 \r
122 \r
123 #define SRC_NAME                        __FILE__        // ソースコードのファイル名\r
124 #define SRC_LINE                        __LINE__        // ソースコード中の行番号\r
125 \r
126 // 最大パスサイズ\r
127 #ifndef WINDOWS_H\r
128 #define MAX_PATH                        260\r
129 #endif  // WINDOWS_H\r
130 \r
131 // シークの種類\r
132 #ifndef FILE_BEGIN\r
133 #define FILE_BEGIN      SEEK_SET\r
134 #endif  // FILE_BEGIN\r
135 #ifndef FILE_END\r
136 #define FILE_END        SEEK_END\r
137 #endif  // FILE_END\r
138 #ifndef FILE_CURRENT\r
139 #define FILE_CURRENT    SEEK_CUR\r
140 #endif  // FILE_CURRENT\r
141 \r
142 #ifndef INVALID_SOCKET\r
143 #define INVALID_SOCKET          (-1)\r
144 #endif  // INVALID_SOCKET\r
145 \r
146 #ifndef SOCKET_ERROR\r
147 #define SOCKET_ERROR            (-1)\r
148 #endif  //SOCKET_ERROR\r
149 \r
150 // 比較関数\r
151 typedef int (COMPARE)(void *p1, void *p2);\r
152 \r
153 // \r
154 // マクロ\r
155 \r
156 \r
157 #ifdef  MAX\r
158 #undef  MAX\r
159 #endif  // MAX\r
160 \r
161 #ifdef  MIN\r
162 #undef  MIN\r
163 #endif  // MIN\r
164 \r
165 // a と b の最小値を求める\r
166 #define MIN(a, b)                       ((a) >= (b) ? (b) : (a))\r
167 // a と b の最大値を求める\r
168 #define MAX(a, b)                       ((a) >= (b) ? (a) : (b))\r
169 \r
170 // int を bool にする\r
171 #define INT_TO_BOOL(i)          (((i) == 0) ? false : true)\r
172 #define MAKEBOOL(i)                     INT_TO_BOOL(i)\r
173 #define BOOL_TO_INT(i)          (((i) == false) ? 0 : 1)\r
174 \r
175 // max_value よりも小さい a を返す\r
176 #define LESS(a, max_value)      ((a) <= (max_value) ? (a) : (max_value))\r
177 // min_value よりも大きい a を返す\r
178 #define MORE(a, min_value)      ((a) >= (min_value) ? (a) : (min_value))\r
179 // a が b と c の内部にある値かどうか調べる\r
180 #define INNER(a, b, c)          (((b) <= (c) && (a) >= (b) && (a) <= (c)) || ((b) >= (c) && (a) >= (c) && (a) <= (b)))\r
181 // a が b と c の外部にある値かどうか調べる\r
182 #define OUTER(a, b, c)          (!INNER((a), (b), (c)))\r
183 // a を b と c の間にある値となるように調整する\r
184 #define MAKESURE(a, b, c)               (((b) <= (c)) ? (MORE(LESS((a), (c)), (b))) : (MORE(LESS((a), (b)), (c))))\r
185 \r
186 // ポインタを UINT にする\r
187 #define POINTER_TO_KEY(p)               ((sizeof(void *) == sizeof(UINT)) ? (UINT)(p) : HashPtrToUINT(p))\r
188 // UINT とポインタを比較する\r
189 #define COMPARE_POINTER_AND_KEY(p, i)   (POINTER_TO_KEY(p) == (i))\r
190 // ポインタを UINT64 にする\r
191 #define POINTER_TO_UINT64(p)    (((sizeof(void *) == sizeof(UINT64)) ? (UINT64)(p) : (UINT64)((UINT)(p))))\r
192 // UINT64 をポインタにする\r
193 #define UINT64_TO_POINTER(i)    ((sizeof(void *) == sizeof(UINT64)) ? (void *)(i) : (void *)((UINT)(i)))\r
194 \r
195 // \r
196 // 型宣言\r
197 // \r
198 \r
199 // BOOL 型\r
200 #ifndef WINDOWS_H\r
201 typedef unsigned int            BOOL;\r
202 #define TRUE                            1\r
203 #define FALSE                           0\r
204 #endif  // WINDOWS_H\r
205 \r
206 // bool 型\r
207 #ifndef WIN32HTML_CPP\r
208 typedef unsigned int            bool;\r
209 #define true                            1\r
210 #define false                           0\r
211 #endif  // WIN32HTML_CPP\r
212 \r
213 // 32bit 整数型\r
214 #ifndef WINDOWS_H\r
215 typedef unsigned int            UINT;\r
216 typedef unsigned int            UINT32;\r
217 typedef unsigned int            DWORD;\r
218 typedef signed int                      INT;\r
219 typedef signed int                      INT32;\r
220 \r
221 typedef int                                     UINT_PTR;\r
222 typedef long                            LONG_PTR;\r
223 \r
224 #endif\r
225 \r
226 // 16bit 整数型\r
227 typedef unsigned short          WORD;\r
228 typedef unsigned short          USHORT;\r
229 typedef signed short            SHORT;\r
230 \r
231 // 8bit 整数型\r
232 typedef unsigned char           BYTE;\r
233 typedef unsigned char           UCHAR;\r
234 \r
235 #ifndef WIN32HTML_CPP\r
236 typedef signed char                     CHAR;\r
237 #endif  // WIN32HTML_CPP\r
238 \r
239 \r
240 // 64bit 整数型\r
241 typedef unsigned long long      UINT64;\r
242 typedef signed long long        INT64;\r
243 \r
244 #ifdef  OS_UNIX\r
245 // コンパイルエラーの回避\r
246 #define __cdecl\r
247 #define __declspec(x)\r
248 // socket 型\r
249 typedef int SOCKET;\r
250 #else   // OS_UNIX\r
251 #ifndef _WINSOCK2API_\r
252 typedef UINT_PTR SOCKET;\r
253 #endif  // _WINSOCK2API_\r
254 #endif  // OS_UNIX\r
255 \r
256 // OS の種類\r
257 #define OSTYPE_WINDOWS_95                                               1100    // Windows 95\r
258 #define OSTYPE_WINDOWS_98                                               1200    // Windows 98\r
259 #define OSTYPE_WINDOWS_ME                                               1300    // Windows Me\r
260 #define OSTYPE_WINDOWS_UNKNOWN                                  1400    // Windows (不明)\r
261 #define OSTYPE_WINDOWS_NT_4_WORKSTATION                 2100    // Windows NT 4.0 Workstation\r
262 #define OSTYPE_WINDOWS_NT_4_SERVER                              2110    // Windows NT 4.0 Server\r
263 #define OSTYPE_WINDOWS_NT_4_SERVER_ENTERPRISE   2111    // Windows NT 4.0 Server, Enterprise Edition\r
264 #define OSTYPE_WINDOWS_NT_4_TERMINAL_SERVER             2112    // Windows NT 4.0 Terminal Server\r
265 #define OSTYPE_WINDOWS_NT_4_BACKOFFICE                  2113    // BackOffice Server 4.5\r
266 #define OSTYPE_WINDOWS_NT_4_SMS                                 2114    // Small Business Server 4.5\r
267 #define OSTYPE_WINDOWS_2000_PROFESSIONAL                2200    // Windows 2000 Professional\r
268 #define OSTYPE_WINDOWS_2000_SERVER                              2211    // Windows 2000 Server\r
269 #define OSTYPE_WINDOWS_2000_ADVANCED_SERVER             2212    // Windows 2000 Advanced Server\r
270 #define OSTYPE_WINDOWS_2000_DATACENTER_SERVER   2213    // Windows 2000 Datacenter Server\r
271 #define OSTYPE_WINDOWS_2000_BACKOFFICE                  2214    // BackOffice Server 2000\r
272 #define OSTYPE_WINDOWS_2000_SBS                                 2215    // Small Business Server 2000\r
273 #define OSTYPE_WINDOWS_XP_HOME                                  2300    // Windows XP Home Edition\r
274 #define OSTYPE_WINDOWS_XP_PROFESSIONAL                  2301    // Windows XP Professional\r
275 #define OSTYPE_WINDOWS_2003_WEB                                 2410    // Windows Server 2003 Web Edition\r
276 #define OSTYPE_WINDOWS_2003_STANDARD                    2411    // Windows Server 2003 Standard Edition\r
277 #define OSTYPE_WINDOWS_2003_ENTERPRISE                  2412    // Windows Server 2003 Enterprise Edition\r
278 #define OSTYPE_WINDOWS_2003_DATACENTER                  2413    // Windows Server 2003 DataCenter Edition\r
279 #define OSTYPE_WINDOWS_2003_BACKOFFICE                  2414    // BackOffice Server 2003\r
280 #define OSTYPE_WINDOWS_2003_SBS                                 2415    // Small Business Server 2003\r
281 #define OSTYPE_WINDOWS_LONGHORN_PROFESSIONAL    2500    // Windows Vista\r
282 #define OSTYPE_WINDOWS_LONGHORN_SERVER                  2510    // Windows Server 2008\r
283 #define OSTYPE_WINDOWS_7                                                2600    // Windows 7\r
284 #define OSTYPE_WINDOWS_SERVER_2008_R2                   2610    // Windows Server 2008 R2\r
285 #define OSTYPE_WINDOWS_8                                                2700    // Windows 8\r
286 #define OSTYPE_WINDOWS_SERVER_8                                 2710    // Windows Server 8\r
287 #define OSTYPE_UNIX_UNKNOWN                                             3000    // 不明な UNIX\r
288 #define OSTYPE_LINUX                                                    3100    // Linux\r
289 #define OSTYPE_SOLARIS                                                  3200    // Solaris\r
290 #define OSTYPE_CYGWIN                                                   3300    // Cygwin\r
291 #define OSTYPE_BSD                                                              3400    // BSD\r
292 #define OSTYPE_MACOS_X                                                  3500    // MacOS X\r
293 \r
294 \r
295 // OS 判別用マクロ\r
296 #define GET_KETA(t, i)                  (((t) % (i * 10)) / i)\r
297 #define OS_IS_WINDOWS_9X(t)             (GET_KETA(t, 1000) == 1)\r
298 #define OS_IS_WINDOWS_NT(t)             (GET_KETA(t, 1000) == 2)\r
299 #define OS_IS_WINDOWS(t)                (OS_IS_WINDOWS_9X(t) || OS_IS_WINDOWS_NT(t))\r
300 #define OS_IS_SERVER(t)                 (OS_IS_WINDOWS_NT(t) && GET_KETA(t, 10))\r
301 #define OS_IS_WORKSTATION(t)    ((OS_IS_WINDOWS_NT(t) && (!(GET_KETA(t, 10)))) || OS_IS_WINDOWS_9X(t))\r
302 #define OS_IS_UNIX(t)                   (GET_KETA(t, 1000) == 3)\r
303 \r
304 \r
305 // OS 情報\r
306 typedef struct OS_INFO\r
307 {\r
308         UINT OsType;                                                            // OS の種類\r
309         UINT OsServicePack;                                                     // サービスパック番号\r
310         char *OsSystemName;                                                     // OS システム名\r
311         char *OsProductName;                                            // OS 製品名\r
312         char *OsVendorName;                                                     // OS ベンダ名\r
313         char *OsVersion;                                                        // OS バージョン\r
314         char *KernelName;                                                       // カーネル名\r
315         char *KernelVersion;                                            // カーネルバージョン\r
316 } OS_INFO;\r
317 \r
318 // 時刻型\r
319 #ifndef WINDOWS_H\r
320 typedef struct SYSTEMTIME\r
321 {\r
322         WORD wYear;\r
323         WORD wMonth;\r
324         WORD wDayOfWeek;\r
325         WORD wDay;\r
326         WORD wHour;\r
327         WORD wMinute;\r
328         WORD wSecond;\r
329         WORD wMilliseconds;\r
330 } SYSTEMTIME;\r
331 #endif  // WINDOWS_H\r
332 \r
333 \r
334 // Object.h\r
335 typedef struct LOCK LOCK;\r
336 typedef struct COUNTER COUNTER;\r
337 typedef struct REF REF;\r
338 typedef struct EVENT EVENT;\r
339 typedef struct DEADCHECK DEADCHECK;\r
340 \r
341 // Tracking.h\r
342 typedef struct CALLSTACK_DATA CALLSTACK_DATA;\r
343 typedef struct TRACKING_OBJECT TRACKING_OBJECT;\r
344 typedef struct MEMORY_STATUS MEMORY_STATUS;\r
345 typedef struct TRACKING_LIST TRACKING_LIST;\r
346 \r
347 // FileIO.h\r
348 typedef struct IO IO;\r
349 \r
350 // Memory.h\r
351 typedef struct MEMTAG MEMTAG;\r
352 typedef struct BUF BUF;\r
353 typedef struct FIFO FIFO;\r
354 typedef struct LIST LIST;\r
355 typedef struct QUEUE QUEUE;\r
356 typedef struct SK SK;\r
357 typedef struct CANDIDATE CANDIDATE;\r
358 typedef struct STRMAP_ENTRY STRMAP_ENTRY;\r
359 \r
360 // Str.h\r
361 typedef struct TOKEN_LIST TOKEN_LIST;\r
362 typedef struct INI_ENTRY INI_ENTRY;\r
363 \r
364 // Internat.h\r
365 typedef struct UNI_TOKEN_LIST UNI_TOKEN_LIST;\r
366 \r
367 // Encrypt.h\r
368 typedef struct CRYPT CRYPT;\r
369 typedef struct NAME NAME;\r
370 typedef struct X_SERIAL X_SERIAL;\r
371 typedef struct X X;\r
372 typedef struct K K;\r
373 typedef struct P12 P12;\r
374 typedef struct X_CRL X_CRL;\r
375 \r
376 // Secure.h\r
377 typedef struct SECURE_DEVICE SECURE_DEVICE;\r
378 typedef struct SEC_INFO SEC_INFO;\r
379 typedef struct SECURE SECURE;\r
380 typedef struct SEC_OBJ SEC_OBJ;\r
381 \r
382 // Kernel.h\r
383 typedef struct MEMINFO MEMINFO;\r
384 typedef struct LOCALE LOCALE;\r
385 typedef struct THREAD THREAD;\r
386 typedef struct THREAD_POOL_DATA THREAD_POOL_DATA;\r
387 typedef struct INSTANCE INSTANCE;\r
388 \r
389 // Pack.h\r
390 typedef struct VALUE VALUE;\r
391 typedef struct ELEMENT ELEMENT;\r
392 typedef struct PACK PACK;\r
393 \r
394 // Cfg.h\r
395 typedef struct FOLDER FOLDER;\r
396 typedef struct ITEM ITEM;\r
397 typedef struct CFG_RW CFG_RW;\r
398 typedef struct CFG_ENUM_PARAM CFG_ENUM_PARAM;\r
399 \r
400 // Table.h\r
401 typedef struct TABLE TABLE;\r
402 \r
403 // Network.h\r
404 typedef struct IP IP;\r
405 typedef struct DNSCACHE DNSCACHE;\r
406 typedef struct SOCK_EVENT SOCK_EVENT;\r
407 typedef struct SOCK SOCK;\r
408 typedef struct SOCKSET SOCKSET;\r
409 typedef struct CANCEL CANCEL;\r
410 typedef struct ROUTE_ENTRY ROUTE_ENTRY;\r
411 typedef struct ROUTE_TABLE ROUTE_TABLE;\r
412 //typedef struct SOCKLIST SOCKLIST;\r
413 typedef struct IP_CLIENT IP_CLIENT;\r
414 typedef struct ROUTE_CHANGE ROUTE_CHANGE;\r
415 typedef struct ROUTE_CHANGE_DATA ROUTE_CHANGE_DATA;\r
416 typedef struct GETIP_THREAD_PARAM GETIP_THREAD_PARAM;\r
417 typedef struct WIN32_RELEASEADDRESS_THREAD_PARAM WIN32_RELEASEADDRESS_THREAD_PARAM;\r
418 typedef struct IPV6_ADDR IPV6_ADDR;\r
419 \r
420 // Tick64.h\r
421 typedef struct ADJUST_TIME ADJUST_TIME;\r
422 typedef struct TICK64 TICK64;\r
423 \r
424 // FileIO.h\r
425 typedef struct DIRENT DIRENT;\r
426 typedef struct DIRLIST DIRLIST;\r
427 \r
428 \r
429 \r
430 \r
431 #endif  // MAYATYPE_H\r
432 \r