Fix some errors in the new twisted HTTP client's connectionLost() methods.
authorCameron Dale <camrdale@gmail.com>
Thu, 24 Apr 2008 23:17:54 +0000 (16:17 -0700)
committerCameron Dale <camrdale@gmail.com>
Thu, 24 Apr 2008 23:17:54 +0000 (16:17 -0700)
See http://twistedmatrix.com/trac/ticket/3207 for more info.

apt_p2p/HTTPDownloader.py

index 2952f48cab295ab36381b26983f1c41a58984d2e..35847f701a433f0f3ea6a505b4ef396d75d3a2ce 100644 (file)
@@ -18,6 +18,9 @@ from zope.interface import implements
 
 from apt_p2p_conf import version
 
+class PipelineError(Exception):
+    """An error has occurred in pipelining requests."""
+    
 class LoggingHTTPClientProtocol(HTTPClientProtocol):
     """A modified client protocol that logs the number of bytes received."""
     
@@ -36,6 +39,15 @@ class LoggingHTTPClientProtocol(HTTPClientProtocol):
             self.stats.receivedBytes(len(data), self.mirror)
         HTTPClientProtocol.rawDataReceived(self, data)
 
+    def setReadPersistent(self, persist):
+        self.readPersistent = persist
+        if not persist:
+            # Tell all requests but first to abort.
+            lostRequests = self.inRequests[1:]
+            del self.inRequests[1:]
+            for request in lostRequests:
+                request.connectionLost(PipelineError('The pipelined connection was lost'))
+
 class Peer(ClientFactory):
     """A manager for all HTTP requests to a single peer.