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
7 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"
|