diff options
Diffstat (limited to 'ot_fullscrape.c')
| -rw-r--r-- | ot_fullscrape.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/ot_fullscrape.c b/ot_fullscrape.c index 5d115dc..d7d3518 100644 --- a/ot_fullscrape.c +++ b/ot_fullscrape.c | |||
| @@ -82,7 +82,11 @@ void fullscrape_deliver( int64 sock, ot_tasktype tasktype ) { | |||
| 82 | mutex_workqueue_pushtask( sock, tasktype ); | 82 | mutex_workqueue_pushtask( sock, tasktype ); |
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | static char * fullscrape_write_one( ot_tasktype mode, char *r, ot_peerlist *peer_list, ot_hash *hash ) { | 85 | static char * fullscrape_write_one( ot_tasktype mode, char *r, ot_torrent *torrent, ot_hash *hash ) { |
| 86 | size_t seed_count = torrent->peer_list6->seed_count + torrent->peer_list4->seed_count; | ||
| 87 | size_t peer_count = torrent->peer_list6->peer_count + torrent->peer_list4->peer_count; | ||
| 88 | size_t down_count = torrent->peer_list6->down_count + torrent->peer_list4->down_count; | ||
| 89 | |||
| 86 | switch( mode & TASK_TASK_MASK ) { | 90 | switch( mode & TASK_TASK_MASK ) { |
| 87 | case TASK_FULLSCRAPE: | 91 | case TASK_FULLSCRAPE: |
| 88 | default: | 92 | default: |
| @@ -90,30 +94,30 @@ static char * fullscrape_write_one( ot_tasktype mode, char *r, ot_peerlist *peer | |||
| 90 | *r++='2'; *r++='0'; *r++=':'; | 94 | *r++='2'; *r++='0'; *r++=':'; |
| 91 | memcpy( r, hash, sizeof(ot_hash) ); r += sizeof(ot_hash); | 95 | memcpy( r, hash, sizeof(ot_hash) ); r += sizeof(ot_hash); |
| 92 | /* push rest of the scrape string */ | 96 | /* push rest of the scrape string */ |
| 93 | r += sprintf( r, "d8:completei%zde10:downloadedi%zde10:incompletei%zdee", peer_list->seed_count, peer_list->down_count, peer_list->peer_count-peer_list->seed_count ); | 97 | r += sprintf( r, "d8:completei%zde10:downloadedi%zde10:incompletei%zdee", seed_count, down_count, peer_count-seed_count ); |
| 94 | 98 | ||
| 95 | break; | 99 | break; |
| 96 | case TASK_FULLSCRAPE_TPB_ASCII: | 100 | case TASK_FULLSCRAPE_TPB_ASCII: |
| 97 | to_hex( r, *hash ); r+= 2 * sizeof(ot_hash); | 101 | to_hex( r, *hash ); r+= 2 * sizeof(ot_hash); |
| 98 | r += sprintf( r, ":%zd:%zd\n", peer_list->seed_count, peer_list->peer_count-peer_list->seed_count ); | 102 | r += sprintf( r, ":%zd:%zd\n", seed_count, peer_count-seed_count ); |
| 99 | break; | 103 | break; |
| 100 | case TASK_FULLSCRAPE_TPB_ASCII_PLUS: | 104 | case TASK_FULLSCRAPE_TPB_ASCII_PLUS: |
| 101 | to_hex( r, *hash ); r+= 2 * sizeof(ot_hash); | 105 | to_hex( r, *hash ); r+= 2 * sizeof(ot_hash); |
| 102 | r += sprintf( r, ":%zd:%zd:%zd\n", peer_list->seed_count, peer_list->peer_count-peer_list->seed_count, peer_list->down_count ); | 106 | r += sprintf( r, ":%zd:%zd:%zd\n", seed_count, peer_count-seed_count, down_count ); |
| 103 | break; | 107 | break; |
| 104 | case TASK_FULLSCRAPE_TPB_BINARY: | 108 | case TASK_FULLSCRAPE_TPB_BINARY: |
| 105 | memcpy( r, *hash, sizeof(ot_hash) ); r += sizeof(ot_hash); | 109 | memcpy( r, *hash, sizeof(ot_hash) ); r += sizeof(ot_hash); |
| 106 | *(uint32_t*)(r+0) = htonl( (uint32_t) peer_list->seed_count ); | 110 | *(uint32_t*)(r+0) = htonl( (uint32_t) seed_count ); |
| 107 | *(uint32_t*)(r+4) = htonl( (uint32_t)( peer_list->peer_count-peer_list->seed_count) ); | 111 | *(uint32_t*)(r+4) = htonl( (uint32_t)( peer_count-seed_count) ); |
| 108 | r+=8; | 112 | r+=8; |
| 109 | break; | 113 | break; |
| 110 | case TASK_FULLSCRAPE_TPB_URLENCODED: | 114 | case TASK_FULLSCRAPE_TPB_URLENCODED: |
| 111 | r += fmt_urlencoded( r, (char *)*hash, 20 ); | 115 | r += fmt_urlencoded( r, (char *)*hash, 20 ); |
| 112 | r += sprintf( r, ":%zd:%zd\n", peer_list->seed_count, peer_list->peer_count-peer_list->seed_count ); | 116 | r += sprintf( r, ":%zd:%zd\n", seed_count, peer_count-seed_count ); |
| 113 | break; | 117 | break; |
| 114 | case TASK_FULLSCRAPE_TRACKERSTATE: | 118 | case TASK_FULLSCRAPE_TRACKERSTATE: |
| 115 | to_hex( r, *hash ); r+= 2 * sizeof(ot_hash); | 119 | to_hex( r, *hash ); r+= 2 * sizeof(ot_hash); |
| 116 | r += sprintf( r, ":%zd:%zd\n", peer_list->base, peer_list->down_count ); | 120 | r += sprintf( r, ":%zd:%zd\n", torrent->peer_list6->base, down_count ); |
| 117 | break; | 121 | break; |
| 118 | } | 122 | } |
| 119 | return r; | 123 | return r; |
| @@ -145,7 +149,7 @@ static void fullscrape_make( int *iovec_entries, struct iovec **iovector, ot_tas | |||
| 145 | 149 | ||
| 146 | /* For each torrent in this bucket.. */ | 150 | /* For each torrent in this bucket.. */ |
| 147 | for( i=0; i<torrents_list->size; ++i ) { | 151 | for( i=0; i<torrents_list->size; ++i ) { |
| 148 | r = fullscrape_write_one( mode, r, torrents[i].peer_list, &torrents[i].hash ); | 152 | r = fullscrape_write_one( mode, r, torrents+i, &torrents[i].hash ); |
| 149 | 153 | ||
| 150 | if( r > re) { | 154 | if( r > re) { |
| 151 | /* Allocate a fresh output buffer at the end of our buffers list */ | 155 | /* Allocate a fresh output buffer at the end of our buffers list */ |
| @@ -210,7 +214,7 @@ static void fullscrape_make_gzip( int *iovec_entries, struct iovec **iovector, o | |||
| 210 | /* For each torrent in this bucket.. */ | 214 | /* For each torrent in this bucket.. */ |
| 211 | for( i=0; i<torrents_list->size; ++i ) { | 215 | for( i=0; i<torrents_list->size; ++i ) { |
| 212 | char compress_buffer[OT_SCRAPE_MAXENTRYLEN]; | 216 | char compress_buffer[OT_SCRAPE_MAXENTRYLEN]; |
| 213 | r = fullscrape_write_one( mode, compress_buffer, torrents[i].peer_list, &torrents[i].hash ); | 217 | r = fullscrape_write_one( mode, compress_buffer, torrents+i, &torrents[i].hash ); |
| 214 | strm.next_in = (uint8_t*)compress_buffer; | 218 | strm.next_in = (uint8_t*)compress_buffer; |
| 215 | strm.avail_in = r - compress_buffer; | 219 | strm.avail_in = r - compress_buffer; |
| 216 | zres = deflate( &strm, Z_NO_FLUSH ); | 220 | zres = deflate( &strm, Z_NO_FLUSH ); |
