again no need to iter headers. Get the values we need the first time

This commit is contained in:
benoitc 2010-08-11 19:18:25 +02:00
parent 08fe410fb3
commit 2b0f37b6b1

View File

@ -20,6 +20,8 @@ class Message(object):
self.unreader = unreader self.unreader = unreader
self.version = None self.version = None
self.connection_hdr = None self.connection_hdr = None
self.chunked = False
self.clength = None
self.headers = [] self.headers = []
self.trailers = [] self.trailers = []
self.body = None self.body = None
@ -59,31 +61,24 @@ class Message(object):
if name == "CONNECTION": if name == "CONNECTION":
self.connection_hdr = value 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)) headers.append((name, value))
return headers return headers
def set_body_reader(self): def set_body_reader(self):
chunked = False if self.chunked:
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:
self.body = Body(ChunkedReader(self, self.unreader)) self.body = Body(ChunkedReader(self, self.unreader))
elif clength is not None: elif self.clength is not None:
self.body = Body(LengthReader(self.unreader, clength)) self.body = Body(LengthReader(self.unreader, self.clength))
else: else:
self.body = Body(EOFReader(self.unreader)) self.body = Body(EOFReader(self.unreader))