]> granicus.if.org Git - transmission/commitdiff
(trunk libT) r11448 seems to have been a red herring, so undo that commit.
authorCharles Kerr <charles@transmissionbt.com>
Fri, 3 Dec 2010 23:10:24 +0000 (23:10 +0000)
committerCharles Kerr <charles@transmissionbt.com>
Fri, 3 Dec 2010 23:10:24 +0000 (23:10 +0000)
libtransmission/announcer.c

index 43d0fdcd5c2d0fd8e9d23ac9dc9df3c6d522ca87..e21026fe6c11b6d2a9a76d3d918140cf3c183ec4 100644 (file)
@@ -604,6 +604,14 @@ publishErrorClear( tr_tier * tier )
     publishMessage( tier, NULL, TR_TRACKER_ERROR_CLEAR );
 }
 
+static void 
+publishErrorMessageAndStop( tr_tier * tier, const char * msg ) 
+{ 
+    tier->isRunning = FALSE; 
+
+    publishMessage( tier, msg, TR_TRACKER_ERROR ); 
+} 
+
 static void
 publishWarning( tr_tier * tier, const char * msg )
 {
@@ -1445,7 +1453,7 @@ onAnnounceDone( tr_session   * session,
             tierAddAnnounce( tier, announceEvent, now + interval );
             tier->manualAnnounceAllowedAt = now + tier->announceMinIntervalSec;
         }
-        else if( 400 <= responseCode && responseCode <= 599 )
+        else if( ( responseCode == 404 ) || ( 500 <= responseCode && responseCode <= 599 ) ) 
         {
             /* 404: The requested resource could not be found but may be
              * available again in the future.  Subsequent requests by
@@ -1455,16 +1463,20 @@ onAnnounceDone( tr_session   * session,
              * has erred or is incapable of performing the request.
              * So we pause a bit and try again. */
 
-            /* 4xx: The request could not be understood by the server due to
-             * malformed syntax. The client SHOULD NOT repeat the
-             * request without modifications... however, some trackers spit
-             * out 4xx messages too freely, so we can't disable reannounces
-             * altogether.  Use the same sliding scale that 404 and 5xx use. */
-             
             const int interval = getRetryInterval( tier->currentTracker->host );
             tier->manualAnnounceAllowedAt = ~(time_t)0;
             tierAddAnnounce( tier, announceEvent, now + interval );
         }
+        else if( 400 <= responseCode && responseCode <= 499 ) 
+        { 
+            /* The request could not be understood by the server due to 
+             * malformed syntax. The client SHOULD NOT repeat the 
+             * request without modifications. */ 
+            if( tr_torrentIsPrivate( tier->tor ) || ( tier->tor->info.trackerCount < 2 ) ) 
+                publishErrorMessageAndStop( tier, _( "Tracker returned a 4xx message" ) ); 
+            tier->announceAt = 0; 
+            tier->manualAnnounceAllowedAt = ~(time_t)0; 
+        } 
         else
         {
             /* WTF did we get?? */