Browse Source

announce.php and scrape.php are now being handled

dynamic-accesslists
erdgeist 18 years ago
parent
commit
9c0248ae92
  1. 16
      opentracker.c

16
opentracker.c

@ -176,7 +176,7 @@ static void httpresponse( const int64 s, struct http_data *h) {
int numwant, tmp, scanon, mode; int numwant, tmp, scanon, mode;
unsigned short port = htons(6881); unsigned short port = htons(6881);
time_t t; time_t t;
size_t reply_size = 0; size_t reply_size = 0, reply_off;
array_cat0( &h->request ); array_cat0( &h->request );
c = array_start( &h->request ); c = array_start( &h->request );
@ -255,8 +255,10 @@ static void httpresponse( const int64 s, struct http_data *h) {
break; break;
case 6: /* scrape ? */ case 6: /* scrape ? */
if( byte_diff( data, 6, "scrape") ) HTTPERROR_404; if( byte_diff( data, 6, "scrape") ) HTTPERROR_404;
scanon = 1;
SCRAPE_WORKAROUND:
scanon = 1;
while( scanon ) { while( scanon ) {
switch( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_PARAM ) ) { switch( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_PARAM ) ) {
case -2: scanon = 0; break; /* TERMINATOR */ case -2: scanon = 0; break; /* TERMINATOR */
@ -286,6 +288,8 @@ static void httpresponse( const int64 s, struct http_data *h) {
case 8: case 8:
if( byte_diff(data,8,"announce")) HTTPERROR_404; if( byte_diff(data,8,"announce")) HTTPERROR_404;
ANNOUNCE_WORKAROUND:
OT_SETIP( &peer, h->ip); OT_SETIP( &peer, h->ip);
OT_SETPORT( &peer, &port ); OT_SETPORT( &peer, &port );
OT_FLAG( &peer ) = 0; OT_FLAG( &peer ) = 0;
@ -372,6 +376,9 @@ static void httpresponse( const int64 s, struct http_data *h) {
} }
ot_overall_successfulannounces++; ot_overall_successfulannounces++;
break; break;
case 10:
if( byte_diff(data,10,"scrape.php")) HTTPERROR_404;
goto SCRAPE_WORKAROUND;
case 11: case 11:
if( byte_diff(data,11,"mrtg_scrape")) HTTPERROR_404; if( byte_diff(data,11,"mrtg_scrape")) HTTPERROR_404;
@ -380,6 +387,9 @@ static void httpresponse( const int64 s, struct http_data *h) {
"%i\n%i\nUp: %i seconds (%i hours)\nPretuned by german engineers, currently handling %i connections per second.", "%i\n%i\nUp: %i seconds (%i hours)\nPretuned by german engineers, currently handling %i connections per second.",
ot_overall_connections, ot_overall_successfulannounces, (int)t, (int)(t / 3600), (int)ot_overall_connections / ( (int)t ? (int)t : 1 ) ); ot_overall_connections, ot_overall_successfulannounces, (int)t, (int)(t / 3600), (int)ot_overall_connections / ( (int)t ? (int)t : 1 ) );
break; break;
case 12:
if( byte_diff(data,12,"announce.php")) HTTPERROR_404;
goto ANNOUNCE_WORKAROUND;
default: /* neither *scrape nor announce */ default: /* neither *scrape nor announce */
HTTPERROR_404; HTTPERROR_404;
} }
@ -393,7 +403,7 @@ static void httpresponse( const int64 s, struct http_data *h) {
plus dynamic space needed to expand our Content-Length value. We reserve SUCCESS_HTTP_SIZE_OFF for it expansion and calculate plus dynamic space needed to expand our Content-Length value. We reserve SUCCESS_HTTP_SIZE_OFF for it expansion and calculate
the space NOT needed to expand in reply_off the space NOT needed to expand in reply_off
*/ */
size_t reply_off = SUCCESS_HTTP_SIZE_OFF - snprintf( static_scratch, 0, "%zd", reply_size ); reply_off = SUCCESS_HTTP_SIZE_OFF - snprintf( static_scratch, 0, "%zd", reply_size );
/* 2. Now we sprintf our header so that sprintf writes its terminating '\0' exactly one byte before content starts. Complete /* 2. Now we sprintf our header so that sprintf writes its terminating '\0' exactly one byte before content starts. Complete
packet size is increased by size of header plus one byte '\n', we will copy over '\0' in next step */ packet size is increased by size of header plus one byte '\n', we will copy over '\0' in next step */

Loading…
Cancel
Save