diff options
author | erdgeist <> | 2007-10-19 21:56:59 +0000 |
---|---|---|
committer | erdgeist <> | 2007-10-19 21:56:59 +0000 |
commit | 41019c79d802e9bc6c1d70e573b6f31f50765ad7 (patch) | |
tree | a3a2bf78c07705ea7e0f1fa5f9214b415a43c013 /trackerlogic.c | |
parent | d5876ebb6b7f238411fc6dcab8d9637650c8727f (diff) |
Introducing multiscrape
Diffstat (limited to 'trackerlogic.c')
-rw-r--r-- | trackerlogic.c | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/trackerlogic.c b/trackerlogic.c index 765a845..00aec1f 100644 --- a/trackerlogic.c +++ b/trackerlogic.c | |||
@@ -411,23 +411,30 @@ size_t return_udp_scrape_for_torrent( ot_hash *hash, char *reply ) { | |||
411 | } | 411 | } |
412 | 412 | ||
413 | /* Fetches scrape info for a specific torrent */ | 413 | /* Fetches scrape info for a specific torrent */ |
414 | size_t return_tcp_scrape_for_torrent( ot_hash *hash, char *reply ) { | 414 | size_t return_tcp_scrape_for_torrent( ot_hash *hash_list, int amount, char *reply ) { |
415 | char *r = reply; | 415 | char *r = reply; |
416 | int exactmatch, i; | 416 | int exactmatch, i, j; |
417 | size_t peers = 0, seeds = 0; | ||
418 | ot_vector *torrents_list = &all_torrents[*hash[0]]; | ||
419 | ot_torrent *torrent = binary_search( hash, torrents_list->data, torrents_list->size, sizeof( ot_torrent ), OT_HASH_COMPARE_SIZE, &exactmatch ); | ||
420 | 417 | ||
421 | if( !exactmatch ) return sprintf( r, "d5:filesdee" ); | 418 | r += sprintf( r, "d5:filesd" ); |
422 | 419 | ||
423 | for( i=0; i<OT_POOLS_COUNT; ++i ) { | 420 | for( i=0; i<amount; ++i ) { |
424 | peers += torrent->peer_list->peers[i].size; | 421 | ot_hash *hash = hash_list + i; |
425 | seeds += torrent->peer_list->seed_count[i]; | 422 | ot_vector *torrents_list = &all_torrents[*hash[0]]; |
426 | } | 423 | ot_torrent *torrent = binary_search( hash, torrents_list->data, torrents_list->size, sizeof( ot_torrent ), OT_HASH_COMPARE_SIZE, &exactmatch ); |
424 | size_t peers = 0, seeds = 0; | ||
427 | 425 | ||
428 | memmove( r, "d5:filesd20:", 12 ); memmove( r+12, hash, 20 ); | 426 | if( !exactmatch ) continue; |
429 | r += sprintf( r+32, "d8:completei%zde10:downloadedi%zde10:incompletei%zdeeee", seeds, torrent->peer_list->downloaded, peers-seeds ) + 32; | 427 | |
428 | for( j=0; j<OT_POOLS_COUNT; ++j ) { | ||
429 | peers += torrent->peer_list->peers[j].size; | ||
430 | seeds += torrent->peer_list->seed_count[j]; | ||
431 | } | ||
432 | |||
433 | memmove( r, "20:", 3 ); memmove( r+3, hash, 20 ); | ||
434 | r += sprintf( r+23, "d8:completei%zde10:downloadedi%zde10:incompletei%zdee", seeds, torrent->peer_list->downloaded, peers-seeds ) + 23; | ||
435 | } | ||
430 | 436 | ||
437 | *r++ = 'e'; *r++ = 'e'; | ||
431 | return r - reply; | 438 | return r - reply; |
432 | } | 439 | } |
433 | 440 | ||