You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					52 lines
				
				1.3 KiB
			
		
		
			
		
	
	
					52 lines
				
				1.3 KiB
			| 
											8 years ago
										 | # -*- 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
 |