Updated init script.
[dtbartle/bnbt.git] / tracker_file.cpp
1 /***\r
2 *\r
3 * BNBT Beta 8.0 - A C++ BitTorrent Tracker\r
4 * Copyright (C) 2003-2004 Trevor Hogan\r
5 *\r
6 * CBTT variations (C) 2003-2005 Harold Feit\r
7 *\r
8 * This library is free software; you can redistribute it and/or\r
9 * modify it under the terms of the GNU Lesser General Public\r
10 * License as published by the Free Software Foundation; either\r
11 * version 2.1 of the License, or (at your option) any later version.\r
12 *\r
13 * This library is distributed in the hope that it will be useful,\r
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
16 * Lesser General Public License for more details.\r
17 *\r
18 * You should have received a copy of the GNU Lesser General Public\r
19 * License along with this library; if not, write to the Free Software\r
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
21 *\r
22 ***/\r
23 \r
24 #include "bnbt.h"\r
25 #include "atom.h"\r
26 #include "tracker.h"\r
27 #include "util.h"\r
28 \r
29 void CTracker :: serverResponseFile( struct request_t *pRequest, struct response_t *pResponse, user_t user )\r
30 {\r
31         string strFile = UTIL_EscapedToString( pRequest->strURL.substr( 7 ) );\r
32 \r
33         if( m_strFileDir.empty( ) || strFile.find( "..\\" ) != string :: npos || strFile.find( "../" ) != string :: npos || strFile.find( ":\\" ) != string :: npos || strFile.find( ":/" ) != string :: npos )\r
34         {\r
35                 pResponse->strCode = "403 Forbidden";\r
36 \r
37                 return;\r
38         }\r
39 \r
40         string :: size_type iExt = strFile.rfind( "." );\r
41 \r
42         string strExt;\r
43 \r
44         if( iExt != string :: npos )\r
45                 strExt = strFile.substr( iExt );\r
46 \r
47         string strPath = m_strFileDir + strFile;\r
48 \r
49         if( UTIL_CheckFile( strPath.c_str( ) ) )\r
50         {\r
51                 pResponse->strCode = "200 OK";\r
52 \r
53                 pResponse->mapHeaders.insert( pair<string, string>( "Content-Type", gmapMime[strExt] ) );\r
54 \r
55                 // cache for awhile\r
56 \r
57                 time_t tNow = time( NULL ) + m_iFileExpires * 60;\r
58                 char *szTime = asctime( gmtime( &tNow ) );\r
59                 szTime[strlen( szTime ) - 1] = '\0';\r
60 \r
61                 pResponse->mapHeaders.insert( pair<string, string>( "Expires", string( szTime ) + " GMT" ) );\r
62 \r
63                 pResponse->strContent = UTIL_ReadFile( strPath.c_str( ) );\r
64         }\r
65         else\r
66                 pResponse->strCode = "404 Not Found";\r
67 }\r