mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
rever for now optimisations done when collecting headers. It doens't
give good results
This commit is contained in:
parent
cf8a31264e
commit
d7d6fa382b
@ -20,16 +20,11 @@ class Message(object):
|
|||||||
self.unreader = unreader
|
self.unreader = unreader
|
||||||
self.version = None
|
self.version = None
|
||||||
self.headers = []
|
self.headers = []
|
||||||
self.connection = None
|
|
||||||
self.chunked = False
|
|
||||||
self.clength = None
|
|
||||||
|
|
||||||
self.length = []
|
|
||||||
|
|
||||||
self.trailers = []
|
self.trailers = []
|
||||||
self.body = None
|
self.body = None
|
||||||
|
|
||||||
self.hdrre = re.compile("[\x00-\x1F\x7F()<>@,;:\[\]={} \t\\\\\"]")
|
self.hdrre = re.compile("[\x00-\x1F\x7F()<>@,;:\[\]={} \t\\\\\"]")
|
||||||
|
|
||||||
unused = self.parse(self.unreader)
|
unused = self.parse(self.unreader)
|
||||||
self.unreader.unread(unused)
|
self.unreader.unread(unused)
|
||||||
self.set_body_reader()
|
self.set_body_reader()
|
||||||
@ -41,7 +36,7 @@ class Message(object):
|
|||||||
headers = []
|
headers = []
|
||||||
|
|
||||||
# Split lines on \r\n keeping the \r\n on each line
|
# Split lines on \r\n keeping the \r\n on each line
|
||||||
lines = data.splitlines(True)
|
lines = [line + "\r\n" for line in data.split("\r\n")]
|
||||||
|
|
||||||
# Parse headers into key/value pairs paying attention
|
# Parse headers into key/value pairs paying attention
|
||||||
# to continuation lines.
|
# to continuation lines.
|
||||||
@ -50,9 +45,7 @@ class Message(object):
|
|||||||
curr = lines.pop(0)
|
curr = lines.pop(0)
|
||||||
if curr.find(":") < 0:
|
if curr.find(":") < 0:
|
||||||
raise InvalidHeader(curr.strip())
|
raise InvalidHeader(curr.strip())
|
||||||
|
|
||||||
name, value = curr.split(":", 1)
|
name, value = curr.split(":", 1)
|
||||||
|
|
||||||
name = name.rstrip(" \t").upper()
|
name = name.rstrip(" \t").upper()
|
||||||
if self.hdrre.search(name):
|
if self.hdrre.search(name):
|
||||||
raise InvalidHeaderName(name)
|
raise InvalidHeaderName(name)
|
||||||
@ -64,42 +57,41 @@ class Message(object):
|
|||||||
value = ''.join(value).rstrip()
|
value = ''.join(value).rstrip()
|
||||||
|
|
||||||
headers.append((name, value))
|
headers.append((name, value))
|
||||||
|
|
||||||
if name == "CONNECTION":
|
|
||||||
self.connection = value.lower().strip()
|
|
||||||
|
|
||||||
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":
|
|
||||||
if not self.clength:
|
|
||||||
self.clength = 8
|
|
||||||
|
|
||||||
return headers
|
return headers
|
||||||
|
|
||||||
|
|
||||||
def set_body_reader(self):
|
def set_body_reader(self):
|
||||||
clength = None
|
|
||||||
chunked = False
|
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 self.chunked:
|
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 self.clength is not None:
|
elif clength is not None:
|
||||||
self.body = Body(LengthReader(self.unreader, self.clength))
|
self.body = Body(LengthReader(self.unreader, clength))
|
||||||
else:
|
else:
|
||||||
self.body = Body(EOFReader(self.unreader))
|
self.body = Body(EOFReader(self.unreader))
|
||||||
|
|
||||||
def should_close(self):
|
def should_close(self):
|
||||||
if self.connection == "close":
|
for (h, v) in self.headers:
|
||||||
return True
|
if h == "CONNECTION":
|
||||||
elif self.connection == "keep-alive":
|
v = v.lower().strip()
|
||||||
return False
|
if v == "close":
|
||||||
|
return True
|
||||||
|
elif v == "keep-alive":
|
||||||
|
return False
|
||||||
|
break
|
||||||
return self.version <= (1, 0)
|
return self.version <= (1, 0)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user