summaryrefslogtreecommitdiff
path: root/opentracker.c
diff options
context:
space:
mode:
Diffstat (limited to 'opentracker.c')
-rw-r--r--opentracker.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/opentracker.c b/opentracker.c
index 9121103..f69ae70 100644
--- a/opentracker.c
+++ b/opentracker.c
@@ -176,7 +176,7 @@ static void httpresponse( const int64 s, struct http_data *h) {
176 int numwant, tmp, scanon, mode; 176 int numwant, tmp, scanon, mode;
177 unsigned short port = htons(6881); 177 unsigned short port = htons(6881);
178 time_t t; 178 time_t t;
179 size_t reply_size = 0; 179 size_t reply_size = 0, reply_off;
180 180
181 array_cat0( &h->request ); 181 array_cat0( &h->request );
182 c = array_start( &h->request ); 182 c = array_start( &h->request );
@@ -255,8 +255,10 @@ static void httpresponse( const int64 s, struct http_data *h) {
255 break; 255 break;
256 case 6: /* scrape ? */ 256 case 6: /* scrape ? */
257 if( byte_diff( data, 6, "scrape") ) HTTPERROR_404; 257 if( byte_diff( data, 6, "scrape") ) HTTPERROR_404;
258 scanon = 1;
259 258
259SCRAPE_WORKAROUND:
260
261 scanon = 1;
260 while( scanon ) { 262 while( scanon ) {
261 switch( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_PARAM ) ) { 263 switch( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_PARAM ) ) {
262 case -2: scanon = 0; break; /* TERMINATOR */ 264 case -2: scanon = 0; break; /* TERMINATOR */
@@ -286,6 +288,8 @@ static void httpresponse( const int64 s, struct http_data *h) {
286 case 8: 288 case 8:
287 if( byte_diff(data,8,"announce")) HTTPERROR_404; 289 if( byte_diff(data,8,"announce")) HTTPERROR_404;
288 290
291ANNOUNCE_WORKAROUND:
292
289 OT_SETIP( &peer, h->ip); 293 OT_SETIP( &peer, h->ip);
290 OT_SETPORT( &peer, &port ); 294 OT_SETPORT( &peer, &port );
291 OT_FLAG( &peer ) = 0; 295 OT_FLAG( &peer ) = 0;
@@ -372,6 +376,9 @@ static void httpresponse( const int64 s, struct http_data *h) {
372 } 376 }
373 ot_overall_successfulannounces++; 377 ot_overall_successfulannounces++;
374 break; 378 break;
379 case 10:
380 if( byte_diff(data,10,"scrape.php")) HTTPERROR_404;
381 goto SCRAPE_WORKAROUND;
375 case 11: 382 case 11:
376 if( byte_diff(data,11,"mrtg_scrape")) HTTPERROR_404; 383 if( byte_diff(data,11,"mrtg_scrape")) HTTPERROR_404;
377 384
@@ -380,6 +387,9 @@ static void httpresponse( const int64 s, struct http_data *h) {
380 "%i\n%i\nUp: %i seconds (%i hours)\nPretuned by german engineers, currently handling %i connections per second.", 387 "%i\n%i\nUp: %i seconds (%i hours)\nPretuned by german engineers, currently handling %i connections per second.",
381 ot_overall_connections, ot_overall_successfulannounces, (int)t, (int)(t / 3600), (int)ot_overall_connections / ( (int)t ? (int)t : 1 ) ); 388 ot_overall_connections, ot_overall_successfulannounces, (int)t, (int)(t / 3600), (int)ot_overall_connections / ( (int)t ? (int)t : 1 ) );
382 break; 389 break;
390 case 12:
391 if( byte_diff(data,12,"announce.php")) HTTPERROR_404;
392 goto ANNOUNCE_WORKAROUND;
383 default: /* neither *scrape nor announce */ 393 default: /* neither *scrape nor announce */
384 HTTPERROR_404; 394 HTTPERROR_404;
385 } 395 }
@@ -393,7 +403,7 @@ static void httpresponse( const int64 s, struct http_data *h) {
393 plus dynamic space needed to expand our Content-Length value. We reserve SUCCESS_HTTP_SIZE_OFF for it expansion and calculate 403 plus dynamic space needed to expand our Content-Length value. We reserve SUCCESS_HTTP_SIZE_OFF for it expansion and calculate
394 the space NOT needed to expand in reply_off 404 the space NOT needed to expand in reply_off
395 */ 405 */
396 size_t reply_off = SUCCESS_HTTP_SIZE_OFF - snprintf( static_scratch, 0, "%zd", reply_size ); 406 reply_off = SUCCESS_HTTP_SIZE_OFF - snprintf( static_scratch, 0, "%zd", reply_size );
397 407
398 /* 2. Now we sprintf our header so that sprintf writes its terminating '\0' exactly one byte before content starts. Complete 408 /* 2. Now we sprintf our header so that sprintf writes its terminating '\0' exactly one byte before content starts. Complete
399 packet size is increased by size of header plus one byte '\n', we will copy over '\0' in next step */ 409 packet size is increased by size of header plus one byte '\n', we will copy over '\0' in next step */