diff options
author | erdgeist <> | 2007-03-27 12:07:29 +0000 |
---|---|---|
committer | erdgeist <> | 2007-03-27 12:07:29 +0000 |
commit | b38104b9862a57271567c3dcb7e004addbe70ffc (patch) | |
tree | 1c44255dbd89d50619be75914680e79eb5f17e24 /opentracker.c | |
parent | 1d2d3c9d957a9fe5ed81b016af11d434752d92eb (diff) |
Added outbound part of sync Proposed format: d4:syncd20:<info_hash>8*N:(xxxxyy)*Nee, therefore had to refactor torrent cleanup now that it will hit all torrents once every OT_POOL_TIMEOUT units.
Diffstat (limited to 'opentracker.c')
-rw-r--r-- | opentracker.c | 41 |
1 files changed, 12 insertions, 29 deletions
diff --git a/opentracker.c b/opentracker.c index b8c90d2..7be1421 100644 --- a/opentracker.c +++ b/opentracker.c | |||
@@ -200,31 +200,9 @@ static void httpresponse( const int64 s, char *data ) { | |||
200 | switch( scan_urlencoded_query( &c, data = c, SCAN_PATH ) ) { | 200 | switch( scan_urlencoded_query( &c, data = c, SCAN_PATH ) ) { |
201 | case 4: /* sync ? */ | 201 | case 4: /* sync ? */ |
202 | if( byte_diff( data, 4, "sync") ) HTTPERROR_404; | 202 | if( byte_diff( data, 4, "sync") ) HTTPERROR_404; |
203 | scanon = 1; | 203 | if( !( reply_size = return_changeset_for_tracker( &reply ) ) ) HTTPERROR_500; |
204 | |||
205 | while( scanon ) { | ||
206 | switch( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_PARAM ) ) { | ||
207 | case -2: scanon = 0; break; /* TERMINATOR */ | ||
208 | case -1: HTTPERROR_400_PARAM; /* PARSE ERROR */ | ||
209 | case 9: | ||
210 | if(byte_diff(data,9,"info_hash")) { | ||
211 | scan_urlencoded_query( &c, NULL, SCAN_SEARCHPATH_VALUE ); | ||
212 | continue; | ||
213 | } | ||
214 | /* ignore this, when we have less than 20 bytes */ | ||
215 | if( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_VALUE ) != 20 ) HTTPERROR_400_PARAM; | ||
216 | hash = (ot_hash*)data; /* Fall through intended */ | ||
217 | break; | ||
218 | default: | ||
219 | scan_urlencoded_query( &c, NULL, SCAN_SEARCHPATH_VALUE ); | ||
220 | break; | ||
221 | } | ||
222 | } | ||
223 | |||
224 | if( !hash ) HTTPERROR_400_PARAM; | ||
225 | if( !( reply_size = return_sync_for_torrent( hash, &reply ) ) ) HTTPERROR_500; | ||
226 | |||
227 | return sendmallocdata( s, reply, reply_size ); | 204 | return sendmallocdata( s, reply, reply_size ); |
205 | |||
228 | case 5: /* stats ? */ | 206 | case 5: /* stats ? */ |
229 | if( byte_diff(data,5,"stats")) HTTPERROR_404; | 207 | if( byte_diff(data,5,"stats")) HTTPERROR_404; |
230 | scanon = 1; | 208 | scanon = 1; |
@@ -523,11 +501,13 @@ static void handle_read( const int64 clientsocket ) { | |||
523 | array_catb( &h->request, static_inbuf, l ); | 501 | array_catb( &h->request, static_inbuf, l ); |
524 | 502 | ||
525 | if( array_failed( &h->request ) ) | 503 | if( array_failed( &h->request ) ) |
526 | httperror( clientsocket, "500 Server Error", "Request too long."); | 504 | return httperror( clientsocket, "500 Server Error", "Request too long."); |
527 | else if( array_bytes( &h->request ) > 8192 ) | 505 | |
528 | httperror( clientsocket, "500 request too long", "You sent too much headers"); | 506 | if( array_bytes( &h->request ) > 8192 ) |
529 | else if( memchr( array_start( &h->request ), '\n', array_length( &h->request, 1 ) ) ) | 507 | return httperror( clientsocket, "500 request too long", "You sent too much headers"); |
530 | httpresponse( clientsocket, array_start( &h->request ) ); | 508 | |
509 | if( memchr( array_start( &h->request ), '\n', array_length( &h->request, 1 ) ) ) | ||
510 | return httpresponse( clientsocket, array_start( &h->request ) ); | ||
531 | } | 511 | } |
532 | 512 | ||
533 | static void handle_write( const int64 clientsocket ) { | 513 | static void handle_write( const int64 clientsocket ) { |
@@ -701,6 +681,9 @@ static void server_mainloop( ) { | |||
701 | taia_now( &next_timeout_check ); | 681 | taia_now( &next_timeout_check ); |
702 | taia_addsec( &next_timeout_check, &next_timeout_check, OT_CLIENT_TIMEOUT_CHECKINTERVAL); | 682 | taia_addsec( &next_timeout_check, &next_timeout_check, OT_CLIENT_TIMEOUT_CHECKINTERVAL); |
703 | } | 683 | } |
684 | |||
685 | /* See if we need to move our pools */ | ||
686 | clean_all_torrents(); | ||
704 | } | 687 | } |
705 | } | 688 | } |
706 | 689 | ||