1 // SoftEther UT-VPN SourceCode
\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
8 // http://utvpn.tsukuba.ac.jp/
\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
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
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
23 // このファイルは GPL バージョン 2 ライセンスで公開されています。
\r
24 // 誰でもこのファイルの内容を複製、改変したり、改変したバージョンを再配布
\r
25 // することができます。ただし、原著作物を改変した場合は、原著作物の著作権表示
\r
26 // を除去することはできません。改変した著作物を配布する場合は、改変実施者の
\r
27 // 著作権表示を原著作物の著作権表示に付随して記載するようにしてください。
\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
33 // 本プログラムの配布者は、本プログラムを、業としての利用以外のため、
\r
34 // および、試験または研究のために利用が行われることを想定して配布
\r
36 // SoftEther UT-VPN プロジェクトの Web サイトは http://utvpn.tsukuba.ac.jp/ に
\r
38 // 本ソフトウェアの不具合の修正、機能改良、セキュリティホールの修復などのコード
\r
39 // の改変を行った場合で、その成果物を SoftEther UT-VPN プロジェクトに提出して
\r
40 // いただける場合は、 http://utvpn.tsukuba.ac.jp/ までソースコードを送付して
\r
41 // ください。SoftEther UT-VPN プロジェクトの本体リリースまたはブランチリリース
\r
44 // GPL に基づいて原著作物が提供される本ソフトウェアの改良版を配布、販売する
\r
45 // 場合は、そのソースコードを GPL に基づいて誰にでも開示する義務が生じます。
\r
47 // 本ソフトウェアに関連する著作権、特許権、商標権はソフトイーサ株式会社
\r
48 // (SoftEther Corporation) およびその他の著作権保持者が保有しています。
\r
49 // ソフトイーサ株式会社等はこれらの権利を放棄していません。本ソフトウェアの
\r
50 // 二次著作物を配布、販売する場合は、これらの権利を侵害しないようにご注意
\r
53 // お願い: どのような通信ソフトウェアにも通常は必ず未発見の
\r
54 // セキュリティホールが潜んでいます。本ソースコードをご覧いただいた結果、
\r
55 // UT-VPN にセキュリティホールを発見された場合は、当該セキュリティホールの
\r
56 // 情報を不特定多数に開示される前に、必ず、ソフトイーサ株式会社
\r
57 // および脆弱性情報の届出を受け付ける公的機関まで通報いただき、
\r
58 // 公益保護にご協力いただきますようお願い申し上げます。
\r
60 // ソフトイーサ株式会社は、当該セキュリティホールについて迅速に対処を
\r
61 // 行い、UT-VPN および UT-VPN に関連するソフトウェアのユーザー・顧客
\r
64 // ソフトイーサへの届出先: http://www.softether.co.jp/jp/contact/
\r
65 // 日本国内の脆弱性情報届出受付公的機関:
\r
67 // http://www.ipa.go.jp/security/vuln/report/
\r
69 // 上記各事項について不明な点は、ソフトイーサ株式会社までご連絡ください。
\r
70 // 連絡先: http://www.softether.co.jp/jp/contact/
\r
72 // -----------------------------------------------
\r
75 // 新規リリース by SoftEther
\r
76 // -----------------------------------------------
\r
85 #define MAX_LOG_SIZE 1073741823ULL
\r
87 typedef char *(RECORD_PARSE_PROC)(RECORD *rec);
\r
94 char *SrcSessionName;
\r
95 char *DestSessionName;
\r
96 bool PurePacket; // クローンしていないパケット
\r
97 bool PurePacketNoPayload; // クローンしていないパケット (ペイロード無し)
\r
98 SESSION *SrcSession;
\r
99 bool NoLog; // ログを書かない
\r
105 bool SaveSecurityLog; // セキュリティログの保存
\r
106 UINT SecurityLogSwitchType; // セキュリティログの切り替え種類
\r
107 bool SavePacketLog; // パケットログの保存
\r
108 UINT PacketLogSwitchType; // パケットログの切り替え種類
\r
109 UINT PacketLogConfig[NUM_PACKET_LOG]; // パケットログ設定
\r
116 RECORD_PARSE_PROC *ParseProc; // パース用プロシージャ
\r
124 THREAD *Thread; // スレッド
\r
125 char *DirName; // 保存先ディレクトリ名
\r
126 char *Prefix; // ファイル名
\r
127 UINT SwitchType; // ログファイルの切り替え種類
\r
128 QUEUE *RecordQueue; // レコードキュー
\r
129 volatile bool Halt; // 停止フラグ
\r
130 EVENT *Event; // ログ用イベント
\r
131 EVENT *FlushEvent; // フラッシュ完了イベント
\r
134 UINT LastSwitchType;
\r
135 char LastStr[MAX_SIZE];
\r
136 UINT64 CurrentFilePointer; // 現在のファイルポインタ
\r
137 UINT64 MaxLogFileSize; // 最大ログファイルサイズ
\r
138 UINT CurrentLogNumber; // 現在のログファイル番号
\r
139 bool log_number_incremented;
\r
146 UINT64 MinFreeSpace; // ファイルの削除を開始するディスク空き容量
\r
147 char *DirName; // ディレクトリ名
\r
148 volatile bool Halt; // 停止フラグ
\r
149 THREAD *Thread; // スレッド
\r
150 bool LastFailed; // 最後にファイル削除に失敗したかどうか
\r
151 EVENT *HaltEvent; // 停止イベント
\r
155 typedef struct ERASE_FILE
\r
157 char *FullPath; // フルパス
\r
158 UINT64 UpdateTime; // 更新日時
\r
165 SOCK *Udp; // UDP ソケット
\r
166 IP DestIp; // 宛先 IP アドレス
\r
167 UINT DestPort; // 宛先ポート番号
\r
168 char HostName[MAX_HOST_NAME_LEN + 1]; // ホスト名
\r
169 UINT64 NextPollIp; // 最後に IP アドレスを調べた日時
\r
173 LOG *NewLog(char *dir, char *prefix, UINT switch_type);
\r
174 void FreeLog(LOG *g);
\r
175 void LogThread(THREAD *thread, void *param);
\r
176 void WaitLogFlush(LOG *g);
\r
177 void LockLog(LOG *g);
\r
178 void UnlockLog(LOG *g);
\r
179 void InsertRecord(LOG *g, void *data, RECORD_PARSE_PROC *proc);
\r
180 void InsertStringRecord(LOG *g, char *str);
\r
181 void InsertUnicodeRecord(LOG *g, wchar_t *unistr);
\r
182 char *StringRecordParseProc(RECORD *rec);
\r
183 bool MakeLogFileName(LOG *g, char *name, UINT size, char *dir, char *prefix, UINT64 tick, UINT switch_type, UINT num, char *old_datestr);
\r
184 void MakeLogFileNameStringFromTick(LOG *g, char *str, UINT size, UINT64 tick, UINT switch_type);
\r
185 void WriteRecordToBuffer(BUF *b, RECORD *r);
\r
186 void SetLogDirName(LOG *g, char *dir);
\r
187 void SetLogPrefix(LOG *g, char *prefix);
\r
188 void SetLogSwitchType(LOG *g, UINT switch_type);
\r
189 void PacketLog(HUB *hub, SESSION *src_session, SESSION *dest_session, PKT *packet);
\r
190 char *PacketLogParseProc(RECORD *rec);
\r
191 UINT CalcPacketLoggingLevel(HUB *hub, PKT *packet);
\r
192 UINT CalcPacketLoggingLevelEx(HUB_LOG *g, PKT *packet);
\r
193 char *GenCsvLine(TOKEN_LIST *t);
\r
194 void ReplaceForCsv(char *str);
\r
195 char *PortStr(CEDAR *cedar, UINT port, bool udp);
\r
196 char *TcpFlagStr(UCHAR flag);
\r
197 void WriteSecurityLog(HUB *h, char *str);
\r
198 void SecLog(HUB *h, char *fmt, ...);
\r
199 void SiSetDefaultLogSetting(HUB_LOG *g);
\r
200 void DebugLog(CEDAR *c, char *fmt, ...);
\r
201 void HubLog(HUB *h, wchar_t *fmt, ...);
\r
202 void ServerLog(CEDAR *c, wchar_t *fmt, ...);
\r
203 void SLog(CEDAR *c, char *name, ...);
\r
204 void WriteHubLog(HUB *h, wchar_t *str);
\r
205 void HLog(HUB *h, char *name, ...);
\r
206 void NLog(VH *v, char *name, ...);
\r
207 void WriteServerLog(CEDAR *c, wchar_t *str);
\r
208 void ALog(ADMIN *a, HUB *h, char *name, ...);
\r
209 void CLog(CLIENT *c, char *name, ...);
\r
210 void WriteClientLog(CLIENT *c, wchar_t *str);
\r
211 ERASER *NewEraser(LOG *log, UINT64 min_size);
\r
212 void FreeEraser(ERASER *e);
\r
213 void ELog(ERASER *e, char *name, ...);
\r
214 void EraserThread(THREAD *t, void *p);
\r
215 void EraserMain(ERASER *e);
\r
216 bool CheckEraserDiskFreeSpace(ERASER *e);
\r
217 int CompareEraseFile(void *p1, void *p2);
\r
218 LIST *GenerateEraseFileList(ERASER *e);
\r
219 void FreeEraseFileList(LIST *o);
\r
220 void PrintEraseFileList(LIST *o);
\r
221 void EnumEraseFile(LIST *o, char *dirname);
\r
222 SLOG *NewSysLog(char *hostname, UINT port);
\r
223 void SetSysLog(SLOG *g, char *hostname, UINT port);
\r
224 void FreeSysLog(SLOG *g);
\r
225 void SendSysLog(SLOG *g, wchar_t *str);
\r
226 void WriteMultiLineLog(LOG *g, BUF *b);
\r
228 #endif // LOGGING_G
\r