Updated init script.
[dtbartle/bnbt.git] / tracker.h
1 //\r
2 // Copyright (C) 2003-2004 Trevor Hogan\r
3 //\r
4 \r
5 #ifndef TRACKER_H\r
6  #define TRACKER_H\r
7 \r
8 struct announce_t\r
9 {\r
10         string strInfoHash;\r
11         string strIP;\r
12         string strEvent;\r
13         unsigned int iPort;\r
14         int64 iUploaded;\r
15         int64 iDownloaded;\r
16         int64 iLeft;\r
17         string strPeerID;\r
18         string strKey;\r
19         bool bAbusive;\r
20         bool bIncrement;\r
21 };\r
22 \r
23 struct torrent_t\r
24 {\r
25         string strInfoHash;\r
26         string strName;\r
27         string strLowerName;\r
28         int iComplete;\r
29         int iDL;\r
30         string strFileName;\r
31         string strAdded;\r
32         int64 iSize;\r
33         int iFiles;\r
34         int iComments;\r
35         int64 iAverageLeft;\r
36         int iAverageLeftPercent;\r
37         int64 iMinLeft;\r
38         int64 iMaxiLeft;\r
39         string strTag;\r
40         int iCompleted;\r
41         int64 iTransferred;\r
42         string strUploader;\r
43         string strInfoLink;\r
44 };\r
45 \r
46 struct peer_t\r
47 {\r
48         string strIP;\r
49         string strKey;\r
50         int64 iUpped;\r
51         int64 iDowned;\r
52         int64 iLeft;\r
53         unsigned long iConnected;\r
54         float flShareRatio;\r
55 };\r
56 \r
57 // user access levels\r
58 \r
59 #define ACCESS_VIEW                             ( 1 << 0 )              // 1\r
60 #define ACCESS_DL                               ( 1 << 1 )              // 2\r
61 #define ACCESS_COMMENTS                 ( 1 << 2 )              // 4\r
62 #define ACCESS_UPLOAD                   ( 1 << 3 )              // 8\r
63 #define ACCESS_EDIT                             ( 1 << 4 )              // 16\r
64 #define ACCESS_ADMIN                    ( 1 << 5 )              // 32\r
65 #define ACCESS_SIGNUP                   ( 1 << 6 )              // 64\r
66 \r
67 struct user_t\r
68 {\r
69         string strLogin;\r
70         string strLowerLogin;\r
71         string strMD5;\r
72         string strMail;\r
73         string strLowerMail;\r
74         string strCreated;\r
75         int iAccess;\r
76 };\r
77 \r
78 /*\r
79 \r
80 #define ALW_FILENAME            0               // string\r
81 #define ALW_NAME                        1               // string\r
82 #define ALW_ADDED                       2               // string\r
83 #define ALW_SIZE                        3               // long\r
84 #define ALW_FILES                       4               // int\r
85 #define ALW_FILECOMMENT         5               // string\r
86 \r
87 */\r
88 \r
89 #define MAX_FILENAME_LEN        128             // user specified filename on upload\r
90 #define MAX_INFOLINK_LEN        128             // user specified info link on upload\r
91 \r
92 extern map<string, string> gmapMime;\r
93 \r
94 class CTracker\r
95 {\r
96 public:\r
97         CTracker( );\r
98         virtual ~CTracker( );\r
99 \r
100         void saveDFile( );\r
101         void saveScrapeFile( );\r
102         void saveComments( );\r
103         void saveTags( );\r
104         void saveUsers( );\r
105         void saveXML( );\r
106         //addition by labarks\r
107         void saveRSS( string strChannelTag = "" );\r
108         void runSaveRSS( );\r
109         //end addition\r
110         void expireDownloaders( );\r
111         void parseTorrents( const char *szDir );\r
112         void parseTorrent( const char *szFile );\r
113         bool checkTag( string &strTag );\r
114         void addTag( string strInfoHash, string strTag, string strName, string strUploader, string strInfoLink );\r
115         void deleteTag( string strInfoHash );\r
116         user_t checkUser( string strLogin, string strMD5 );\r
117         void addUser( string strLogin, string strPass, int iAccess, string strMail );\r
118         void deleteUser( string strLogin );\r
119         void CountUniquePeers( );\r
120         void AddUniquePeer( string strIP );\r
121         void RemoveUniquePeer( string strIP );\r
122         void QueueAnnounce( struct announce_t ann );\r
123         void Announce( struct announce_t ann );\r
124 \r
125         void RefreshFastCache( );\r
126 \r
127         // Client Ban List\r
128         int isClientBanList( string strPeerID , bool isUserAgent = false );\r
129         void parseClientBanList( void );\r
130         // IP Ban List\r
131         int isIPBanList( string strPeerIP );\r
132         void parseIPBanList( void );\r
133 \r
134         void serverResponseGET( struct request_t *pRequest, struct response_t *pResponse, user_t user );\r
135         void serverResponsePOST( struct request_t *pRequest, struct response_t *pResponse, CAtomList *pPost, user_t user );\r
136         void serverResponseIndex( struct request_t *pRequest, struct response_t *pResponse, user_t user );\r
137         void serverResponseAnnounce( struct request_t *pRequest, struct response_t *pResponse, user_t user );\r
138         void serverResponseScrape( struct request_t *pRequest, struct response_t *pResponse, user_t user );\r
139         void serverResponseStats( struct request_t *pRequest, struct response_t *pResponse, user_t user );\r
140         void serverResponseTorrent( struct request_t *pRequest, struct response_t *pResponse, user_t user );\r
141         void serverResponseFile( struct request_t *pRequest, struct response_t *pResponse, user_t user );\r
142         void serverResponseRobots( struct request_t *pRequest, struct response_t *pResponse, user_t user );\r
143         void serverResponseIcon( struct request_t *pRequest, struct response_t *pResponse, user_t user );\r
144         void serverResponseLogin( struct request_t *pRequest, struct response_t *pResponse, user_t user );\r
145         void serverResponseSignup( struct request_t *pRequest, struct response_t *pResponse, user_t user );\r
146         void serverResponseUploadGET( struct request_t *pRequest, struct response_t *pResponse, user_t user );\r
147         void serverResponseUploadPOST( struct request_t *pRequest, struct response_t *pResponse, CAtomList *pPost, user_t user );\r
148         void serverResponseInfo( struct request_t *pRequest, struct response_t *pResponse, user_t user );\r
149         void serverResponseBencodeInfo( struct request_t *pRequest, struct response_t *pResponse, user_t user );\r
150         void serverResponseAdmin( struct request_t *pRequest, struct response_t *pResponse, user_t user );\r
151         void serverResponseUsers( struct request_t *pRequest, struct response_t *pResponse, user_t user );\r
152         void serverResponseComments( struct request_t *pRequest, struct response_t *pResponse, user_t user );\r
153 \r
154         void Update( );\r
155 \r
156 private:\r
157         string m_strAllowedDir;\r
158         string m_strUploadDir;\r
159         string m_strExternalTorrentDir;\r
160         string m_strArchiveDir;\r
161         string m_strFileDir;\r
162         string m_strDFile;\r
163         // Scrape Stats\r
164         string m_strSCFile;\r
165         string m_strCommentsFile;\r
166         string m_strTagFile;\r
167         string m_strUsersFile;\r
168         string m_strStaticHeaderFile;\r
169         string m_strStaticHeader;\r
170         string m_strStaticFooterFile;\r
171         string m_strStaticFooter;\r
172         string m_strRobotsFile;\r
173         string m_strRobots;\r
174         string m_strDumpXMLFile;\r
175         //RSS Support - code by labarks\r
176         string m_strDumpRSSFile;\r
177         string m_strDumpRSSFileDir;\r
178         string m_strDumpRSSFileURL;\r
179         int m_iDumpRSSFileMode;\r
180         string m_strDumpRSSTitle;\r
181         string m_strDumpRSSLink;\r
182         string m_strDumpRSSDescription;\r
183         int m_iDumpRSS_TTL;\r
184         string m_strDumpRSSLanguage;\r
185         string m_strDumpRSSImageURL;\r
186         int m_iDumpRSSImageWidth;\r
187         int m_iDumpRSSImageHeight;\r
188         string m_strDumpRSSCopyright;\r
189         int m_iDumpRSSLimit;\r
190         int m_iDumpRSSInterval;\r
191         unsigned long m_iDumpRSSNext;\r
192         //end addition\r
193 \r
194         string m_strImageBarFill;\r
195         string m_strImageBarTrans;\r
196         string m_strForceAnnounceURL;\r
197         bool m_bForceAnnounceOnDL;\r
198         bool m_bDumpXMLPeers;\r
199         int m_iParseAllowedInterval;\r
200         int m_iSaveDFileInterval;\r
201         int m_iSaveScrapeInterval;\r
202         int m_iDownloaderTimeOutInterval;\r
203         int m_iRefreshStaticInterval;\r
204         int m_iDumpXMLInterval;\r
205         int m_iMySQLRefreshAllowedInterval;\r
206         int m_iMySQLRefreshStatsInterval;\r
207         unsigned long m_iParseAllowedNext;\r
208         unsigned long m_iSaveDFileNext;\r
209         unsigned long m_iSaveScrapeNext;\r
210         unsigned long m_iPrevTime;\r
211         unsigned long m_iDownloaderTimeOutNext;\r
212         unsigned long m_iRefreshStaticNext;\r
213         unsigned long m_iDumpXMLNext;\r
214         unsigned long m_iMySQLRefreshAllowedNext;\r
215         unsigned long m_iMySQLRefreshStatsNext;\r
216         int m_iAnnounceInterval;\r
217         int m_iMinRequestInterval;\r
218         int m_iResponseSize;\r
219         int m_iMaxGive;\r
220         bool m_bKeepDead;\r
221         bool m_bAllowScrape;\r
222         bool m_bCountUniquePeers;\r
223         bool m_bDeleteInvalid;\r
224         bool m_bParseOnUpload;\r
225         int m_iMaxTorrents;\r
226         bool m_bShowInfoHash;\r
227         bool m_bShowNames;\r
228         bool m_bShowStats;\r
229         bool m_bAllowTorrentDownloads;\r
230         bool m_bAllowComments;\r
231         bool m_bShowAdded;\r
232         bool m_bShowSize;\r
233         bool m_bShowNumFiles;\r
234         bool m_bShowCompleted;\r
235         bool m_bShowTransferred;\r
236         bool m_bShowMinLeft;\r
237         bool m_bShowAverageLeft;\r
238         bool m_bShowMaxiLeft;\r
239         bool m_bShowLeftAsProgress;\r
240         bool m_bShowUploader;\r
241         bool m_bAllowInfoLink;\r
242         bool m_bSearch;\r
243         bool m_bSort;\r
244         bool m_bShowFileComment;\r
245         bool m_bShowFileContents;\r
246         bool m_bShowShareRatios;\r
247         bool m_bShowAvgDLRate;\r
248         bool m_bShowAvgULRate;\r
249         bool m_bDeleteOwnTorrents;\r
250         bool m_bGen;\r
251         bool m_bMySQLOverrideDState;\r
252         int m_iPerPage;\r
253         int m_iUsersPerPage;\r
254         int m_iMaxPeersDisplay;\r
255         int m_iGuestAccess;\r
256         int m_iMemberAccess;\r
257         int m_iFileExpires;\r
258         int m_iNameLength;\r
259         int m_iCommentLength;\r
260 \r
261         string m_strClientBanFile;\r
262         int i_intBanMode;\r
263         int i_intPeerSpoofRestrict;\r
264         int m_iDontCompressTorrent;\r
265         string strOverFlowLimit;\r
266         int m_iRestrictOverflow;\r
267         int m_iIPBanMode;\r
268         string m_strIPBanFile;\r
269         int m_iBlockNATedIP;\r
270         int m_iLocalOnly;\r
271         int m_iTorrentTraderCompatibility;\r
272         int m_iBlacklistP2PPorts;\r
273         int m_iBlackListServicePorts;\r
274         int m_iPrivateTracker;\r
275         bool m_bSwapTorrentLink;\r
276         string m_strDownloadLinkImage;\r
277         string m_strStatsLinkImage;\r
278         bool m_bAllowGlobalScrape;\r
279         // Announce 'key' support\r
280         bool m_bAnnounceKeySupport;\r
281         bool m_bRequireKeySupport;\r
282         // Abusive Announce Code\r
283         bool m_bEnableAbuseBlock;\r
284         int m_iMinAnnounceInterval;\r
285         int m_iGlobalAbuseHammer;\r
286         int m_iGlobalAbuseLimit;\r
287 \r
288         bool m_bRequireNoPeerID;\r
289         bool m_bRequireCompact;\r
290 \r
291         string m_strECommand;\r
292         int m_iECommandCycle;\r
293         unsigned long m_iNextCommandCycle;\r
294         bool m_bEnableExternal;\r
295         bool m_bDisableLogon;\r
296 \r
297         unsigned int m_iPageRange;\r
298 \r
299         int m_iRefreshFastCacheInterval;\r
300         unsigned long m_iRefreshFastCacheNext;\r
301 \r
302 \r
303         bool m_bDisableHTML;\r
304 \r
305         string gstrTrackerTitle;\r
306 \r
307         string m_strIconFile;\r
308         string m_strFavicon;\r
309 \r
310         vector< pair<string, string> > m_vecTags;\r
311 \r
312         // queued announces\r
313 \r
314         CMutex m_mtxQueued;\r
315 \r
316         vector<struct announce_t> m_vecQueued;\r
317 \r
318         CAtomDicti *m_pAllowed;         // self.allowed\r
319         CAtomDicti *m_pState;           // self.state\r
320         CAtomDicti *m_pDFile;           // self.downloads\r
321         CAtomDicti *m_pCompleted;       // self.completed\r
322         CAtomDicti *m_pAbuse;   // self.abuse - Abuse Log\r
323         CAtomDicti *m_pTimeDicti;       // self.times\r
324         CAtomDicti *m_pCached;          // self.cached\r
325         CAtomDicti *m_pComments;\r
326         CAtomDicti *m_pTags;\r
327         CAtomDicti *m_pUsers;\r
328         CAtomDicti *m_pIPs;\r
329         CAtomDicti *m_pFastCache;       // FastCache for per-torrent Totals\r
330 \r
331         CAtomList *m_pClientBannedList;   // banned Clients\r
332         CAtomList *m_pIPBannedList;   // banned IPs\r
333 };\r
334 \r
335 #endif\r