diff --git a/btpd/tracker_req.c b/btpd/tracker_req.c index 5325a3d..74b16ee 100644 --- a/btpd/tracker_req.c +++ b/btpd/tracker_req.c @@ -130,8 +130,9 @@ http_cb(struct http *req, struct http_res *res, void *arg) struct tracker *tr = tp->tr; assert(tr->ttype == TIMER_TIMEOUT); tr->req = NULL; - if ((http_succeeded(res) && - parse_reply(tp, res->content, res->length) == 0)) { + if (res->res == HRES_OK && + (tr->event == TR_EV_STOPPED + || parse_reply(tp, res->content, res->length) == 0)) { tr->nerrors = 0; tr->ttype = TIMER_INTERVAL; event_add(&tr->timer, (& (struct timeval) { tr->interval, 0 })); @@ -249,3 +250,9 @@ tr_stop(struct torrent *tp) { tr_send(tp, TR_EV_STOPPED); } + +unsigned +tr_errors(struct torrent *tp) +{ + return tp->tr->nerrors; +} diff --git a/btpd/tracker_req.h b/btpd/tracker_req.h index 95cc170..6106ef7 100644 --- a/btpd/tracker_req.h +++ b/btpd/tracker_req.h @@ -6,5 +6,6 @@ void tr_stop(struct torrent *tp); void tr_refresh(struct torrent *tp); void tr_complete(struct torrent *tp); void tr_destroy(struct torrent *tp); +unsigned tr_errors(struct torrent *tp); #endif