better error reporting in the new tracker code

This commit is contained in:
Charles Kerr 2007-08-18 06:06:53 +00:00
parent af833c7593
commit 9cb2dcb63d
1 changed files with 23 additions and 19 deletions

View File

@ -397,16 +397,20 @@ parseBencResponse( struct evhttp_request * req, benc_val_t * setme )
return ret; return ret;
} }
static int static char*
updateAddresses( Tracker * t, const struct evhttp_request * req ) updateAddresses( Tracker * t, const struct evhttp_request * req )
{ {
int ret = TR_OK; char * ret = NULL;
int used = 0, max = 0;
int moveToNextAddress = FALSE; int moveToNextAddress = FALSE;
if( !req ) if( !req )
{ {
tr_inf( "Connecting to %s got a NULL response", tr_sprintf( &ret, &used, &max,
"Connecting to %s got a NULL response",
t->addresses[t->addressIndex].announce ); t->addresses[t->addressIndex].announce );
tr_inf( ret );
moveToNextAddress = TRUE; moveToNextAddress = TRUE;
} }
else if( req->response_code == HTTP_OK ) else if( req->response_code == HTTP_OK )
@ -450,20 +454,17 @@ updateAddresses( Tracker * t, const struct evhttp_request * req )
} }
else else
{ {
tr_inf( "Connecting to %s gave error [%s]", tr_sprintf( &ret, &used, &max,
"Error connecting: %s",
t->addresses[t->addressIndex].announce, t->addresses[t->addressIndex].announce,
req->response_code_line ); req->response_code_line );
moveToNextAddress = TRUE; moveToNextAddress = TRUE;
} }
if( moveToNextAddress ) if( moveToNextAddress )
{
if ( ++t->addressIndex >= t->addressCount ) if ( ++t->addressIndex >= t->addressCount )
{
t->addressIndex = 0; t->addressIndex = 0;
ret = TR_ERROR;
}
}
return ret; return ret;
} }
@ -509,6 +510,7 @@ onTorrentScrapeNow( void * vtor )
static void static void
onScrapeResponse( struct evhttp_request * req, void * vt ) onScrapeResponse( struct evhttp_request * req, void * vt )
{ {
char * errmsg;
Tracker * t = (Tracker*) vt; Tracker * t = (Tracker*) vt;
tr_inf( "scrape response from '%s': %s", tr_inf( "scrape response from '%s': %s",
@ -596,7 +598,10 @@ onScrapeResponse( struct evhttp_request * req, void * vt )
t->multiscrapeMax = numResponses; t->multiscrapeMax = numResponses;
} }
updateAddresses( t, req ); if (( errmsg = updateAddresses( t, req ) )) {
tr_err( errmsg );
tr_free( errmsg );
}
if( !tr_ptrArrayEmpty( t->scraping ) ) if( !tr_ptrArrayEmpty( t->scraping ) )
{ {
@ -785,6 +790,7 @@ setAnnounceInterval( Tracker * t,
static void static void
onTrackerResponse( struct evhttp_request * req, void * vtor ) onTrackerResponse( struct evhttp_request * req, void * vtor )
{ {
char * errmsg;
Torrent * tor = (Torrent *) vtor; Torrent * tor = (Torrent *) vtor;
const int isStopped = !torrentIsRunning( tor ); const int isStopped = !torrentIsRunning( tor );
int reannounceInterval; int reannounceInterval;
@ -863,12 +869,10 @@ onTrackerResponse( struct evhttp_request * req, void * vtor )
reannounceInterval = 30 * 1000; reannounceInterval = 30 * 1000;
} }
if( updateAddresses( tor->tracker, req ) ) if (( errmsg = updateAddresses( tor->tracker, req ) )) {
{ publishErrorMessage( tor, errmsg );
char buf[1024]; tr_err( errmsg );
snprintf( buf, sizeof(buf), "Unable to connect to \"%s\"", tr_free( errmsg );
tor->tracker->primaryAddress );
publishErrorMessage( tor, buf );
} }
tor->httpReq = NULL; tor->httpReq = NULL;