# HG changeset patch # User Eric Hopper # Date 1151392177 25200 # Node ID ab460a3f0e3a5690964263d2b9854acea7b6b021 # Parent 7e01da2bc7f3da50e2e2d44a6fc03574e1ee9d36 Put support for persistent connections back in. diff -r 7e01da2bc7f3 -r ab460a3f0e3a mercurial/hgweb/server.py --- a/mercurial/hgweb/server.py Tue Jun 27 00:09:35 2006 -0700 +++ b/mercurial/hgweb/server.py Tue Jun 27 00:09:37 2006 -0700 @@ -109,6 +109,7 @@ self.saved_status = None self.saved_headers = [] self.sent_headers = False + self.length = None req = self.server.reqmaker(env, self._start_response) for data in req: if data: @@ -120,8 +121,15 @@ saved_status = self.saved_status.split(None, 1) saved_status[0] = int(saved_status[0]) self.send_response(*saved_status) + should_close = True for h in self.saved_headers: self.send_header(*h) + if h[0].lower() == 'content-length': + should_close = False + self.length = int(h[1]) + if should_close: + self.send_header('Connection', 'close') + self.close_connection = should_close self.end_headers() self.sent_headers = True @@ -129,7 +137,9 @@ code, msg = http_status.split(None, 1) code = int(code) self.saved_status = http_status - self.saved_headers = headers + bad_headers = ('connection', 'transfer-encoding') + self.saved_headers = [ h for h in headers \ + if h[0].lower() not in bad_headers ] return self._write def _write(self, data): @@ -137,6 +147,10 @@ raise AssertionError("data written before start_response() called") elif not self.sent_headers: self.send_headers() + if self.length is not None: + if len(data) > self.length: + raise AssertionError("Content-length header sent, but more bytes than specified are being written.") + self.length = self.length - len(data) self.wfile.write(data) self.wfile.flush()