diff --git a/libtransmission/announcer-http.c b/libtransmission/announcer-http.c index 549bae95a..1a687b843 100644 --- a/libtransmission/announcer-http.c +++ b/libtransmission/announcer-http.c @@ -291,6 +291,9 @@ tr_tracker_http_announce( tr_session * session, const char * url = (const char *) evbuffer_pullup( buf, -1 ); d = tr_new0( struct announce_data, 1 ); + d->response.seeders = -1; + d->response.leechers = -1; + d->response.downloads = -1; d->response_func = response_func; d->response_func_user_data = response_func_user_data; memcpy( d->response.info_hash, request->info_hash, SHA_DIGEST_LENGTH ); @@ -463,7 +466,12 @@ tr_tracker_http_scrape( tr_session * session, d->response_func_user_data = response_func_user_data; d->response.row_count = request->info_hash_count; for( i=0; iresponse.row_count; ++i ) + { memcpy( d->response.rows[i].info_hash, request->info_hash[i], SHA_DIGEST_LENGTH ); + d->response.rows[i].seeders = -1; + d->response.rows[i].leechers = -1; + d->response.rows[i].downloads = -1; + } tr_strlcpy( d->log_name, request->log_name, sizeof( d->log_name ) ); dbgmsg( request->log_name, "Sending scrape to libcurl: \"%s\"", url ); diff --git a/libtransmission/announcer-udp.c b/libtransmission/announcer-udp.c index 36a255dbd..97ca78c88 100644 --- a/libtransmission/announcer-udp.c +++ b/libtransmission/announcer-udp.c @@ -183,8 +183,13 @@ tau_scrape_request_new( const tr_scrape_request * in, req->payload_len = evbuffer_get_length( buf ); req->payload = tr_memdup( evbuffer_pullup( buf, -1 ), req->payload_len ); for( i=0; iresponse.row_count; ++i ) + { + req->response.rows[i].seeders = -1; + req->response.rows[i].leechers = -1; + req->response.rows[i].downloads = -1; memcpy( req->response.rows[i].info_hash, in->info_hash[i], SHA_DIGEST_LENGTH ); + } /* cleanup */ evbuffer_free( buf ); @@ -334,6 +339,9 @@ tau_announce_request_new( const tr_announce_request * in, req->user_data = user_data; req->payload_len = evbuffer_get_length( buf ); req->payload = tr_memdup( evbuffer_pullup( buf, -1 ), req->payload_len ); + req->response.seeders = -1; + req->response.leechers = -1; + req->response.downloads = -1; memcpy( req->response.info_hash, in->info_hash, SHA_DIGEST_LENGTH ); evbuffer_free( buf ); diff --git a/libtransmission/announcer.c b/libtransmission/announcer.c index 4c43d1813..cd7285f6a 100644 --- a/libtransmission/announcer.c +++ b/libtransmission/announcer.c @@ -1073,6 +1073,9 @@ on_announce_done( const tr_announce_response * response, int i; const char * str; int scrape_fields = 0; + int seeders = 0; + int leechers = 0; + int downloads = 0; const bool isStopped = event == TR_ANNOUNCE_EVENT_STOPPED; publishErrorClear( tier ); @@ -1083,18 +1086,18 @@ on_announce_done( const tr_announce_response * response, if( response->seeders >= 0 ) { - tracker->seederCount = response->seeders; + tracker->seederCount = seeders = response->seeders; ++scrape_fields; } if( response->leechers >= 0 ) { - tracker->leecherCount = response->leechers; + tracker->leecherCount = leechers = response->leechers; ++scrape_fields; } if( response->downloads >= 0 ) { - tracker->downloadCount = response->downloads; + tracker->downloadCount = downloads = response->downloads; ++scrape_fields; } @@ -1125,11 +1128,11 @@ on_announce_done( const tr_announce_response * response, tier->announceIntervalSec = i; if( response->pex_count > 0 ) - publishPeersPex( tier, response->seeders, response->leechers, + publishPeersPex( tier, seeders, leechers, response->pex, response->pex_count ); if( response->pex6_count > 0 ) - publishPeersPex( tier, response->seeders, response->leechers, + publishPeersPex( tier, seeders, leechers, response->pex6, response->pex6_count ); tier->isRunning = data->isRunningOnSuccess; @@ -1346,9 +1349,12 @@ on_scrape_done( const tr_scrape_response * response, void * vsession ) if(( tracker = tier->currentTracker )) { - tracker->seederCount = row->seeders; - tracker->leecherCount = row->leechers; - tracker->downloadCount = row->downloads; + if( row->seeders >= 0 ) + tracker->seederCount = row->seeders; + if( row->leechers >= 0 ) + tracker->leecherCount = row->leechers; + if( row->downloads >= 0 ) + tracker->downloadCount = row->downloads; tracker->downloaderCount = row->downloaders; tracker->consecutiveFailures = 0; }