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.
		
		
		
		
			
				
					121 lines
				
				2.8 KiB
			
		
		
			
		
	
	
					121 lines
				
				2.8 KiB
			| 
											8 years ago
										 | # -*- coding: utf-8 -
 | ||
|  | #
 | ||
|  | # This file is part of gunicorn released under the MIT license.
 | ||
|  | # See the NOTICE for more information.
 | ||
|  | 
 | ||
|  | # We don't need to call super() in __init__ methods of our
 | ||
|  | # BaseException and Exception classes because we also define
 | ||
|  | # our own __str__ methods so there is no need to pass 'message'
 | ||
|  | # to the base class to get a meaningful output from 'str(exc)'.
 | ||
|  | # pylint: disable=super-init-not-called
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class ParseException(Exception):
 | ||
|  |     pass
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class NoMoreData(IOError):
 | ||
|  |     def __init__(self, buf=None):
 | ||
|  |         self.buf = buf
 | ||
|  | 
 | ||
|  |     def __str__(self):
 | ||
|  |         return "No more data after: %r" % self.buf
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class InvalidRequestLine(ParseException):
 | ||
|  |     def __init__(self, req):
 | ||
|  |         self.req = req
 | ||
|  |         self.code = 400
 | ||
|  | 
 | ||
|  |     def __str__(self):
 | ||
|  |         return "Invalid HTTP request line: %r" % self.req
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class InvalidRequestMethod(ParseException):
 | ||
|  |     def __init__(self, method):
 | ||
|  |         self.method = method
 | ||
|  | 
 | ||
|  |     def __str__(self):
 | ||
|  |         return "Invalid HTTP method: %r" % self.method
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class InvalidHTTPVersion(ParseException):
 | ||
|  |     def __init__(self, version):
 | ||
|  |         self.version = version
 | ||
|  | 
 | ||
|  |     def __str__(self):
 | ||
|  |         return "Invalid HTTP Version: %r" % self.version
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class InvalidHeader(ParseException):
 | ||
|  |     def __init__(self, hdr, req=None):
 | ||
|  |         self.hdr = hdr
 | ||
|  |         self.req = req
 | ||
|  | 
 | ||
|  |     def __str__(self):
 | ||
|  |         return "Invalid HTTP Header: %r" % self.hdr
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class InvalidHeaderName(ParseException):
 | ||
|  |     def __init__(self, hdr):
 | ||
|  |         self.hdr = hdr
 | ||
|  | 
 | ||
|  |     def __str__(self):
 | ||
|  |         return "Invalid HTTP header name: %r" % self.hdr
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class InvalidChunkSize(IOError):
 | ||
|  |     def __init__(self, data):
 | ||
|  |         self.data = data
 | ||
|  | 
 | ||
|  |     def __str__(self):
 | ||
|  |         return "Invalid chunk size: %r" % self.data
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class ChunkMissingTerminator(IOError):
 | ||
|  |     def __init__(self, term):
 | ||
|  |         self.term = term
 | ||
|  | 
 | ||
|  |     def __str__(self):
 | ||
|  |         return "Invalid chunk terminator is not '\\r\\n': %r" % self.term
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class LimitRequestLine(ParseException):
 | ||
|  |     def __init__(self, size, max_size):
 | ||
|  |         self.size = size
 | ||
|  |         self.max_size = max_size
 | ||
|  | 
 | ||
|  |     def __str__(self):
 | ||
|  |         return "Request Line is too large (%s > %s)" % (self.size, self.max_size)
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class LimitRequestHeaders(ParseException):
 | ||
|  |     def __init__(self, msg):
 | ||
|  |         self.msg = msg
 | ||
|  | 
 | ||
|  |     def __str__(self):
 | ||
|  |         return self.msg
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class InvalidProxyLine(ParseException):
 | ||
|  |     def __init__(self, line):
 | ||
|  |         self.line = line
 | ||
|  |         self.code = 400
 | ||
|  | 
 | ||
|  |     def __str__(self):
 | ||
|  |         return "Invalid PROXY line: %r" % self.line
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class ForbiddenProxyRequest(ParseException):
 | ||
|  |     def __init__(self, host):
 | ||
|  |         self.host = host
 | ||
|  |         self.code = 403
 | ||
|  | 
 | ||
|  |     def __str__(self):
 | ||
|  |         return "Proxy request from %r not allowed" % self.host
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class InvalidSchemeHeaders(ParseException):
 | ||
|  |     def __str__(self):
 | ||
|  |         return "Contradictory scheme headers"
 |