From 2b0f37b6b1c060cf110c3f476864d0a6034f8162 Mon Sep 17 00:00:00 2001 From: benoitc Date: Wed, 11 Aug 2010 19:18:25 +0200 Subject: [PATCH] again no need to iter headers. Get the values we need the first time --- gunicorn/http/message.py | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/gunicorn/http/message.py b/gunicorn/http/message.py index fdcd7e37..984fdf32 100644 --- a/gunicorn/http/message.py +++ b/gunicorn/http/message.py @@ -20,6 +20,8 @@ class Message(object): self.unreader = unreader self.version = None self.connection_hdr = None + self.chunked = False + self.clength = None self.headers = [] self.trailers = [] self.body = None @@ -59,31 +61,24 @@ class Message(object): if name == "CONNECTION": self.connection_hdr = value + elif name == "CONTENT-LENGTH": + try: + self.clength = int(value) + except ValueError: + pass + elif name == "TRANSFER-ENCODING": + self.chunked = value.lower() == "chunked" + elif name == "SEC-WEBSOCKET-KEY1": + self.clength = 8 headers.append((name, value)) return headers def set_body_reader(self): - chunked = False - clength = None - for (name, value) in self.headers: - if name == "CONTENT-LENGTH": - try: - clength = int(value) - except ValueError: - clength = None - elif name == "TRANSFER-ENCODING": - chunked = value.lower() == "chunked" - elif name == "SEC-WEBSOCKET-KEY1": - clength = 8 - - if clength is not None or chunked: - break - - if chunked: + if self.chunked: self.body = Body(ChunkedReader(self, self.unreader)) - elif clength is not None: - self.body = Body(LengthReader(self.unreader, clength)) + elif self.clength is not None: + self.body = Body(LengthReader(self.unreader, self.clength)) else: self.body = Body(EOFReader(self.unreader))