* tar xzf utvpn-src-unix-v101-7101-public-2010.06.27.tar.gz
[lab.git] / utvpn / utvpn-unix-v101-7101-public / src / Mayaqua / Kernel.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 #ifndef KERNEL_H\r
79 #define KERNEL_H\r
80 \r
81 // メモリ使用情報\r
82 struct MEMINFO\r
83 {\r
84         UINT64 TotalMemory;\r
85         UINT64 UsedMemory;\r
86         UINT64 FreeMemory;\r
87         UINT64 TotalPhys;\r
88         UINT64 UsedPhys;\r
89         UINT64 FreePhys;\r
90 };\r
91 \r
92 // ロケール情報\r
93 struct LOCALE\r
94 {\r
95         wchar_t YearStr[16], MonthStr[16], DayStr[16];\r
96         wchar_t HourStr[16], MinuteStr[16], SecondStr[16];\r
97         wchar_t DayOfWeek[7][16];\r
98         wchar_t SpanDay[16], SpanHour[16], SpanMinute[16], SpanSecond[16];\r
99         wchar_t Unknown[32];\r
100 };\r
101 \r
102 \r
103 // スレッドプロシージャ\r
104 typedef void (THREAD_PROC)(THREAD *thread, void *param);\r
105 \r
106 // スレッド\r
107 struct THREAD\r
108 {\r
109         REF *ref;\r
110         THREAD_PROC *thread_proc;\r
111         void *param;\r
112         void *pData;\r
113         EVENT *init_finished_event;\r
114         void *AppData1, *AppData2, *AppData3;\r
115         UINT AppInt1, AppInt2, AppInt3;\r
116         UINT ThreadId;\r
117         bool PoolThread;\r
118         THREAD *PoolHostThread;\r
119         LIST *PoolWaitList;                                             // スレッド停止待機リスト\r
120         volatile bool PoolHalting;                              // スレッド停止中\r
121         EVENT *release_event;\r
122 };\r
123 \r
124 // スレッドプールデータ\r
125 struct THREAD_POOL_DATA\r
126 {\r
127         EVENT *Event;                                           // 待機イベント\r
128         EVENT *InitFinishEvent;                         // 初期化完了イベント\r
129         THREAD *Thread;                                         // 現在割り当てられているスレッド\r
130         THREAD_PROC *ThreadProc;                        // 現在割り当てられているスレッドプロシージャ\r
131 };\r
132 \r
133 // インスタンス\r
134 struct INSTANCE\r
135 {\r
136         char *Name;                                                     // 名前\r
137         void *pData;                                            // データ\r
138 };\r
139 \r
140 // 関数プロトタイプ\r
141 void SleepThread(UINT time);\r
142 THREAD *NewThreadInternal(THREAD_PROC *thread_proc, void *param);\r
143 void ReleaseThreadInternal(THREAD *t);\r
144 void CleanupThreadInternal(THREAD *t);\r
145 void NoticeThreadInitInternal(THREAD *t);\r
146 void WaitThreadInitInternal(THREAD *t);\r
147 bool WaitThreadInternal(THREAD *t);\r
148 THREAD *NewThread(THREAD_PROC *thread_proc, void *param);\r
149 void ReleaseThread(THREAD *t);\r
150 void CleanupThread(THREAD *t);\r
151 void NoticeThreadInit(THREAD *t);\r
152 void WaitThreadInit(THREAD *t);\r
153 bool WaitThread(THREAD *t, UINT timeout);\r
154 void InitThreading();\r
155 void FreeThreading();\r
156 void ThreadPoolProc(THREAD *t, void *param);\r
157 \r
158 time_t c_mkgmtime(struct tm *tm);\r
159 void TmToSystem(SYSTEMTIME *st, struct tm *t);\r
160 void SystemToTm(struct tm *t, SYSTEMTIME *st);\r
161 void TimeToSystem(SYSTEMTIME *st, time_t t);\r
162 time_t SystemToTime(SYSTEMTIME *st);\r
163 time_t TmToTime(struct tm *t);\r
164 void TimeToTm(struct tm *t, time_t time);\r
165 void NormalizeTm(struct tm *t);\r
166 void NormalizeSystem(SYSTEMTIME *st);\r
167 void LocalToSystem(SYSTEMTIME *system, SYSTEMTIME *local);\r
168 void SystemToLocal(SYSTEMTIME *local, SYSTEMTIME *system);\r
169 INT64 GetTimeDiffEx(SYSTEMTIME *basetime, bool local_time);\r
170 void UINT64ToSystem(SYSTEMTIME *st, UINT64 sec64);\r
171 UINT64 SystemToUINT64(SYSTEMTIME *st);\r
172 UINT64 LocalTime64();\r
173 UINT64 SystemTime64();\r
174 void LocalTime(SYSTEMTIME *st);\r
175 void SystemTime(SYSTEMTIME *st);\r
176 void SetLocale(wchar_t *str);\r
177 bool LoadLocale(LOCALE *locale, wchar_t *str);\r
178 void GetCurrentLocale(LOCALE *locale);\r
179 void GetDateTimeStr(char *str, UINT size, SYSTEMTIME *st);\r
180 void GetDateTimeStrMilli(char *str, UINT size, SYSTEMTIME *st);\r
181 void GetDateStr(char *str, UINT size, SYSTEMTIME *st);\r
182 void GetDateTimeStrEx(wchar_t *str, UINT size, SYSTEMTIME *st, LOCALE *locale);\r
183 void GetTimeStrEx(wchar_t *str, UINT size, SYSTEMTIME *st, LOCALE *locale);\r
184 void GetDateStrEx(wchar_t *str, UINT size, SYSTEMTIME *st, LOCALE *locale);\r
185 void GetTimeStrMilli(char *str, UINT size, SYSTEMTIME *st);\r
186 void GetTimeStr(char *str, UINT size, SYSTEMTIME *st);\r
187 UINT Tick();\r
188 UINT TickRealtime();\r
189 UINT TickRealtimeManual();\r
190 UINT64 TickGetRealtimeTickValue64();\r
191 UINT64 SystemToLocal64(UINT64 t);\r
192 UINT64 LocalToSystem64(UINT64 t);\r
193 UINT ThreadId();\r
194 void GetDateTimeStr64(char *str, UINT size, UINT64 sec64);\r
195 void GetDateTimeStr64Uni(wchar_t *str, UINT size, UINT64 sec64);\r
196 void GetDateTimeStrMilli64(char *str, UINT size, UINT64 sec64);\r
197 void GetDateStr64(char *str, UINT size, UINT64 sec64);\r
198 void GetDateTimeStrEx64(wchar_t *str, UINT size, UINT64 sec64, LOCALE *locale);\r
199 void GetTimeStrEx64(wchar_t *str, UINT size, UINT64 sec64, LOCALE *locale);\r
200 void GetDateStrEx64(wchar_t *str, UINT size, UINT64 sec64, LOCALE *locale);\r
201 void GetTimeStrMilli64(char *str, UINT size, UINT64 sec64);\r
202 void GetTimeStr64(char *str, UINT size, UINT64 sec64);\r
203 UINT64 SafeTime64(UINT64 sec64);\r
204 bool Run(char *filename, char *arg, bool hide, bool wait);\r
205 bool RunW(wchar_t *filename, wchar_t *arg, bool hide, bool wait);\r
206 void HashInstanceName(char *name, UINT size, char *instance_name);\r
207 void HashInstanceNameLocal(char *name, UINT size, char *instance_name);\r
208 INSTANCE *NewSingleInstance(char *instance_name);\r
209 INSTANCE *NewSingleInstanceEx(char *instance_name, bool user_local);\r
210 void FreeSingleInstance(INSTANCE *inst);\r
211 void GetSpanStr(char *str, UINT size, UINT64 sec64);\r
212 void GetSpanStrEx(wchar_t *str, UINT size, UINT64 sec64, LOCALE *locale);\r
213 void GetSpanStrMilli(char *str, UINT size, UINT64 sec64);\r
214 void GetMemInfo(MEMINFO *info);\r
215 bool GetEnv(char *name, char *data, UINT size);\r
216 bool GetEnvW(wchar_t *name, wchar_t *data, UINT size);\r
217 bool GetEnvW_ForWin32(wchar_t *name, wchar_t *data, UINT size);\r
218 bool GetEnvW_ForUnix(wchar_t *name, wchar_t *data, UINT size);\r
219 void GetHomeDir(char *path, UINT size);\r
220 void GetHomeDirW(wchar_t *path, UINT size);\r
221 void AbortExit();\r
222 void AbortExitEx(char *msg);\r
223 void YieldCpu();\r
224 UINT DoNothing();\r
225 \r
226 #endif  // KERNEL_H\r
227 \r