]> granicus.if.org Git - transmission/commitdiff
Announce INT64_MAX as size left if the value is unknown
authorMike Gelfand <mikedld@mikedld.com>
Mon, 1 May 2017 09:31:01 +0000 (12:31 +0300)
committerMike Gelfand <mikedld@mikedld.com>
Mon, 1 May 2017 09:33:55 +0000 (12:33 +0300)
This helps with trakers like Amazon S3 where signed type is used but
negative values aren't accepted.

Fixes: #250
libtransmission/announcer-http.c
libtransmission/announcer.c

index cabc0c3eed2d72da69480601662f53eb4731c1d7..97f12e5541a84b0a10c1250e5d4bb4ec24a99fef 100644 (file)
@@ -74,6 +74,7 @@ static char* announce_url_new(tr_session const* session, tr_announce_request con
         "&port=%d"
         "&uploaded=%" PRIu64
         "&downloaded=%" PRIu64
+        "&left=%" PRIu64
         "&numwant=%d"
         "&key=%x"
         "&compact=1"
@@ -85,19 +86,10 @@ static char* announce_url_new(tr_session const* session, tr_announce_request con
         req->port,
         req->up,
         req->down,
+        req->leftUntilComplete,
         req->numwant,
         req->key);
 
-    if (req->leftUntilComplete != ~(uint64_t)0)
-    {
-        evbuffer_add_printf(buf, "&left=%" PRIu64, req->leftUntilComplete);
-    }
-    else
-    {
-        // Support trackers which don't react to huge numbers well (e.g. Amazon S3)
-        evbuffer_add_printf(buf, "&left=-1");
-    }
-
     if (session->encryptionMode == TR_ENCRYPTION_REQUIRED)
     {
         evbuffer_add_printf(buf, "&requirecrypto=1");
index bb88ab9a4b4f1a4d1fef2601869ef5bb322d4bc5..5444e125fe7e994c0dbc5b1af9738636941bf36a 100644 (file)
@@ -945,7 +945,7 @@ static tr_announce_request* announce_request_new(tr_announcer const* announcer,
     req->up = tier->byteCounts[TR_ANN_UP];
     req->down = tier->byteCounts[TR_ANN_DOWN];
     req->corrupt = tier->byteCounts[TR_ANN_CORRUPT];
-    req->leftUntilComplete = tr_torrentHasMetadata(tor) ? tor->info.totalSize - tr_torrentHaveTotal(tor) : ~(uint64_t)0;
+    req->leftUntilComplete = tr_torrentHasMetadata(tor) ? tor->info.totalSize - tr_torrentHaveTotal(tor) : INT64_MAX;
     req->event = event;
     req->numwant = event == TR_ANNOUNCE_EVENT_STOPPED ? 0 : NUMWANT;
     req->key = announcer->key;