123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- # -*- 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):
- self.cfg = cfg
- if hasattr(source, "recv"):
- self.unreader = SocketUnreader(source)
- else:
- self.unreader = IterUnreader(source)
- self.mesg = None
-
- # 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.req_count)
- if not self.mesg:
- raise StopIteration()
- return self.mesg
-
- next = __next__
-
-
- class RequestParser(Parser):
-
- mesg_class = Request
|