12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- # -*- coding: utf-8 -
- #
- # This file is part of gunicorn released under the MIT license.
- # See the NOTICE for more information.
- from gunicorn.http.message import Request
- from gunicorn.http.unreader import SocketUnreader, IterUnreader
- class Parser(object):
- mesg_class = None
- def __init__(self, cfg, source, source_addr):
- self.cfg = cfg
- if hasattr(source, "recv"):
- self.unreader = SocketUnreader(source)
- else:
- self.unreader = IterUnreader(source)
- self.mesg = None
- self.source_addr = source_addr
- # request counter (for keepalive connetions)
- self.req_count = 0
- def __iter__(self):
- return self
- def __next__(self):
- # Stop if HTTP dictates a stop.
- if self.mesg and self.mesg.should_close():
- raise StopIteration()
- # Discard any unread body of the previous message
- if self.mesg:
- data = self.mesg.body.read(8192)
- while data:
- data = self.mesg.body.read(8192)
- # Parse the next request
- self.req_count += 1
- self.mesg = self.mesg_class(self.cfg, self.unreader, self.source_addr, self.req_count)
- if not self.mesg:
- raise StopIteration()
- return self.mesg
- next = __next__
- class RequestParser(Parser):
- mesg_class = Request
|