From: Cameron Dale Date: Thu, 24 Apr 2008 23:17:54 +0000 (-0700) Subject: Fix some errors in the new twisted HTTP client's connectionLost() methods. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=c5ae5c9ad8eb68a8ec01cfa1b19d81cbad49617a;p=quix0rs-apt-p2p.git Fix some errors in the new twisted HTTP client's connectionLost() methods. See http://twistedmatrix.com/trac/ticket/3207 for more info. --- diff --git a/apt_p2p/HTTPDownloader.py b/apt_p2p/HTTPDownloader.py index 2952f48..35847f7 100644 --- a/apt_p2p/HTTPDownloader.py +++ b/apt_p2p/HTTPDownloader.py @@ -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.