summaryrefslogtreecommitdiff
path: root/ot_http.c
diff options
context:
space:
mode:
authorerdgeist <>2009-01-02 08:57:53 +0000
committererdgeist <>2009-01-02 08:57:53 +0000
commit2df09905f5540fee096d48a92cb0c42558498a12 (patch)
tree68eab61d29719400972485de395dd0465467aea6 /ot_http.c
parent548e2b8338b5ee8d24fa928e833f345bb5cb6f0e (diff)
* opentracker now drops permissions in correct order and really chroots() if ran as root
* lock passing between add_peer_to_torrent and return_peers_for_torrent is now avoided by providing a more general add_peer_to_torrent_and_return_peers function that can be used with NULL parameters to not return any peers (in sync case) * in order to keep a fast overview how many torrents opentracker maintains, every mutex_bucket_unlock operation expects an additional integer parameter that tells ot_mutex.c how many torrents have been added or removed. A function mutex_get_torrent_count has been introduced.
Diffstat (limited to 'ot_http.c')
-rw-r--r--ot_http.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/ot_http.c b/ot_http.c
index d66fc80..4111d6b 100644
--- a/ot_http.c
+++ b/ot_http.c
@@ -385,7 +385,6 @@ static ssize_t http_handle_announce( const int64 client_socket, char *data ) {
385 char *c = data; 385 char *c = data;
386 int numwant, tmp, scanon; 386 int numwant, tmp, scanon;
387 ot_peer peer; 387 ot_peer peer;
388 ot_torrent *torrent;
389 ot_hash *hash = NULL; 388 ot_hash *hash = NULL;
390 unsigned short port = htons(6881); 389 unsigned short port = htons(6881);
391 ssize_t len; 390 ssize_t len;
@@ -403,6 +402,10 @@ static ssize_t http_handle_announce( const int64 client_socket, char *data ) {
403 numwant = 50; 402 numwant = 50;
404 scanon = 1; 403 scanon = 1;
405 404
405#ifdef _DEBUG_PEERID
406 g_this_peerid_data = NULL;
407#endif
408
406 while( scanon ) { 409 while( scanon ) {
407 switch( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_PARAM ) ) { 410 switch( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_PARAM ) ) {
408 case -2: scanon = 0; break; /* TERMINATOR */ 411 case -2: scanon = 0; break; /* TERMINATOR */
@@ -483,10 +486,11 @@ static ssize_t http_handle_announce( const int64 client_socket, char *data ) {
483 486
484 if( OT_PEERFLAG( &peer ) & PEER_FLAG_STOPPED ) 487 if( OT_PEERFLAG( &peer ) & PEER_FLAG_STOPPED )
485 len = remove_peer_from_torrent( hash, &peer, SUCCESS_HTTP_HEADER_LENGTH + static_outbuf, FLAG_TCP ); 488 len = remove_peer_from_torrent( hash, &peer, SUCCESS_HTTP_HEADER_LENGTH + static_outbuf, FLAG_TCP );
486 else { 489 else
487 torrent = add_peer_to_torrent( hash, &peer WANT_SYNC_PARAM( 0 ) ); 490 len = add_peer_to_torrent_and_return_peers(hash, &peer, FLAG_TCP, numwant, SUCCESS_HTTP_HEADER_LENGTH + static_outbuf);
488 if( !torrent || !( len = return_peers_for_torrent( torrent, numwant, SUCCESS_HTTP_HEADER_LENGTH + static_outbuf, FLAG_TCP ) ) ) HTTPERROR_500; 491
489 } 492 if( !len ) HTTPERROR_500;
493
490 stats_issue_event( EVENT_ANNOUNCE, FLAG_TCP, len); 494 stats_issue_event( EVENT_ANNOUNCE, FLAG_TCP, len);
491 return len; 495 return len;
492} 496}