From 419e65cc2a7a4740670a54cc02549f112f081285 Mon Sep 17 00:00:00 2001 From: erdgeist <> Date: Fri, 8 Dec 2006 21:00:56 +0000 Subject: Further compact code --- opentracker.c | 79 ++++++++++++++++++++++++++++------------------------------- 1 file changed, 37 insertions(+), 42 deletions(-) (limited to 'opentracker.c') diff --git a/opentracker.c b/opentracker.c index 65ea024..8313d90 100644 --- a/opentracker.c +++ b/opentracker.c @@ -104,6 +104,9 @@ const char* http_header(struct http_data* r,const char* h) void httpresponse(struct http_data* h,int64 s) { char *c, *d, *data; + struct ot_peer peer; + ot_hash *hash = NULL; + array_cat0(&h->r); c = array_start(&h->r); @@ -124,8 +127,7 @@ e400: if (c[0]!='/') goto e404; while (c[1]=='/') ++c; - data = c; - switch( scan_urlencoded_query( &c, data, SCAN_PATH ) ) { + switch( scan_urlencoded_query( &c, data = c, SCAN_PATH ) ) { case 0: e404: httperror(h,"404 Not Found","No such file or directory."); @@ -134,49 +136,42 @@ e404: if (!byte_diff(c,6,"scrape")) goto e404; break; - case 9: + case 8: if( !byte_diff(c,8,"announce")) goto e404; - else { - // info_hash, left, port, numwant, compact - struct ot_peer peer; - ot_hash *hash = NULL; - byte_copy( peer.ip, 4, h->ip ); - peer.port = 6881; - - while( 1 ) { - data = c; - switch( scan_urlencoded_query( &c, data, SCAN_SEARCHPATH_PARAM ) ) { - case -1: /* error */ - goto e404; - case 4: - if(!byte_diff(c,4,"port")) - /* scan int */ c; - else if(!byte_diff(c,4,"left")) - /* scan int */ c; - break; - case 7: - if(!byte_diff(c,7,"numwant")) - /* scan int */ c; - else if(!byte_diff(c,7,"compact")) - /* scan flag */ c; - break; - case 9: /* info_hash= */ - if(!byte_diff(c,9,"info_hash")) { - data = c; - /* ignore this, when we have less than 20 bytes */ - switch( scan_urlencoded_query( &c, data, SCAN_SEARCHPATH_VALUE ) ) - case -1: - httperror(h,"404 Not Found","No such file or directory."); - goto bailout; - case 20: - hash = (ot_hash*)data; - break; - default: - continue; - } - break; + + byte_copy( peer.ip, 4, h->ip ); + peer.port = 6881; + + while( 1 ) { + switch( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_PARAM ) ) { + case -1: /* error */ + goto e404; + case 4: + if(!byte_diff(c,4,"port")) + /* scan int */ c; + else if(!byte_diff(c,4,"left")) + /* scan int */ c; + break; + case 7: + if(!byte_diff(c,7,"numwant")) + /* scan int */ c; + else if(!byte_diff(c,7,"compact")) + /* scan flag */ c; + break; + case 9: /* info_hash= */ + if(!byte_diff(c,9,"info_hash")) { + /* ignore this, when we have less than 20 bytes */ + switch( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_VALUE ) ) + case -1: + httperror(h,"404 Not Found","No such file or directory."); + goto bailout; + case 20: + hash = (ot_hash*)data; /* Fall through intended */ + default: + continue; } + break; } } break; -- cgit v1.2.3