Updated init script.
[dtbartle/bnbt.git] / bnbt.h
1 //\r
2 // Copyright (C) 2003-2004 Trevor Hogan\r
3 //\r
4 \r
5 #ifndef BNBT_H\r
6  #define BNBT_H\r
7 \r
8 #include <stdio.h>\r
9 #include <time.h>\r
10 \r
11 #ifdef WIN32\r
12  #define WIN32_LEAN_AND_MEAN\r
13 #endif\r
14 \r
15 //\r
16 // SOLARIS USERS - IF YOUR SYSTEM IS LITTLE ENDIAN, REMOVE THE NEXT 3 LINES\r
17 //  also see sha1.h\r
18 //\r
19 \r
20 #if defined( __APPLE__ ) || defined( __SOLARIS__ )\r
21  #define BNBT_BIG_ENDIAN\r
22 #endif\r
23 \r
24 #include <iostream>\r
25 \r
26 // large integers\r
27 \r
28 #ifdef WIN32\r
29  typedef __int64 int64;\r
30  typedef unsigned __int64 uint64;\r
31 #else\r
32  typedef long long int64;\r
33  typedef unsigned long long uint64;\r
34 #endif\r
35 \r
36 // stl\r
37 \r
38 #ifdef WIN32\r
39  #pragma warning( disable : 4786 )\r
40 #endif\r
41 \r
42 #include <algorithm>\r
43 #include <map>\r
44 #include <string>\r
45 #include <vector>\r
46 #include <utility>\r
47 \r
48 using namespace std;\r
49 \r
50 // path seperator\r
51 \r
52 #ifdef WIN32\r
53  #define PATH_SEP '\\'\r
54 #else\r
55  #define PATH_SEP '/'\r
56 #endif\r
57 \r
58 // this fixes MSVC loop scoping issues\r
59 \r
60 /*\r
61 \r
62 #ifdef WIN32\r
63  #define for if( 0 ) { } else for\r
64 #endif\r
65 \r
66 */\r
67 \r
68 // time stuff\r
69 \r
70 unsigned long GetTime( );\r
71 unsigned long GetRealTime( );\r
72 \r
73 #ifdef WIN32\r
74  #define MILLISLEEP( x ) Sleep( x )\r
75 #else\r
76  #define MILLISLEEP( x ) usleep( ( x ) * 1000 )\r
77 #endif\r
78 \r
79 // mutex\r
80 \r
81 #ifdef WIN32\r
82  #include <windows.h>\r
83  #include <process.h>\r
84 #else\r
85  #include <pthread.h>\r
86 #endif\r
87 \r
88 class CMutex\r
89 {\r
90 public:\r
91 #ifdef WIN32\r
92         void Initialize( ) { InitializeCriticalSection( &cs ); }\r
93         void Destroy( ) { DeleteCriticalSection( &cs ); }\r
94         void Claim( ) { EnterCriticalSection( &cs ); }\r
95         void Release( ) { LeaveCriticalSection( &cs ); }\r
96 \r
97         CRITICAL_SECTION cs;\r
98 #else\r
99         void Initialize( ) { pthread_mutex_init( &mtx, NULL ); }\r
100         void Destroy( ) { pthread_mutex_destroy( &mtx ); }\r
101         void Claim( ) { pthread_mutex_lock( &mtx ); }\r
102         void Release( ) { pthread_mutex_unlock( &mtx ); }\r
103 \r
104         pthread_mutex_t mtx;\r
105 #endif\r
106 };\r
107 \r
108 // network\r
109 \r
110 #ifdef WIN32\r
111  #include <winsock2.h>\r
112 \r
113  #define ECONNRESET WSAECONNRESET\r
114 #else\r
115  #include <arpa/inet.h>\r
116  #include <netdb.h>\r
117  #include <netinet/in.h>\r
118  #include <sys/ioctl.h>\r
119  #include <sys/socket.h>\r
120  #include <sys/types.h>\r
121  #include <unistd.h>\r
122 \r
123  #include <errno.h>\r
124 \r
125  typedef int SOCKET;\r
126 \r
127  #define INVALID_SOCKET -1\r
128  #define SOCKET_ERROR -1\r
129  #define TCP_NODELAY 1\r
130 \r
131  #define closesocket close\r
132 \r
133  extern int GetLastError( );\r
134 #endif\r
135 \r
136 #ifdef __APPLE__\r
137  typedef int socklen_t;\r
138  typedef int sockopt_len_t;\r
139 #endif\r
140 \r
141 /*\r
142 \r
143 #ifdef FreeBSD\r
144  #include <sys/stat.h>\r
145 #endif\r
146 \r
147 */\r
148 \r
149 #ifndef INADDR_NONE\r
150  #define INADDR_NONE -1\r
151 #endif\r
152 \r
153 #ifndef MSG_NOSIGNAL\r
154  #define MSG_NOSIGNAL 0\r
155 #endif\r
156 \r
157 class CAtom;\r
158 class CAtomInt;\r
159 class CAtomLong;\r
160 class CAtomString;\r
161 class CAtomList;\r
162 class CAtomDicti;\r
163 \r
164 class CServer;\r
165 class CTracker;\r
166 class CClient;\r
167 \r
168 class CLink;\r
169 class CLinkServer;\r
170 \r
171 struct request_t\r
172 {\r
173         struct sockaddr_in sin;\r
174         string strMethod;\r
175         string strURL;\r
176         bool hasQuery;\r
177         multimap<string, string> multiParams;\r
178         map<string, string> mapParams;\r
179         map<string, string> mapHeaders;\r
180         map<string, string> mapCookies;\r
181 };\r
182 \r
183 struct response_t\r
184 {\r
185         string strCode;\r
186         multimap<string, string> mapHeaders;\r
187         string strContent;\r
188         bool bCompressOK;\r
189 };\r
190 \r
191 // current version\r
192 \r
193 #define BNBT_VER "CBTT 8.0 Core - February 2007 SVN"\r
194 \r
195 /*\r
196 #ifdef WIN32\r
197  #define BNBT_SERVICE_NAME "BNBT Service"\r
198 #endif\r
199 */\r
200 \r
201 extern CServer *gpServer;\r
202 extern CLink *gpLink;\r
203 extern CLinkServer *gpLinkServer;\r
204 extern CMutex gmtxOutput;\r
205 extern string gstrErrorLogDir;\r
206 extern string gstrErrorLogFile;\r
207 extern string gstrErrorLogFilePattern;\r
208 extern FILE *gpErrorLog;\r
209 extern string gstrAccessLogDir;\r
210 extern string gstrAccessLogFile;\r
211 extern string gstrAccessLogFilePattern;\r
212 extern FILE *gpAccessLog;\r
213 extern unsigned long giErrorLogCount;\r
214 extern unsigned long giAccessLogCount;\r
215 extern int giFlushInterval;\r
216 extern bool gbDebug;\r
217 extern unsigned int giMaxConns;\r
218 extern unsigned int giMaxRecvSize;\r
219 extern string gstrStyle;\r
220 extern string gstrCharSet;\r
221 extern string gstrRealm;\r
222 \r
223 // TCP window size\r
224 extern int giSO_RECBUF;\r
225 extern int giSO_SNDBUF;\r
226 \r
227 // this is basically the old main( ), but it's here to make the NT Service code neater\r
228 \r
229 extern int bnbtmain( );\r
230 \r
231 #endif\r