# -*- coding: utf-8 -*- | |
""" | |
h2/errors | |
~~~~~~~~~ | |
Global error code registry containing the established HTTP/2 error codes. | |
The current registry is available at: | |
https://tools.ietf.org/html/rfc7540#section-11.4 | |
""" | |
import enum | |
class ErrorCodes(enum.IntEnum): | |
""" | |
All known HTTP/2 error codes. | |
.. versionadded:: 2.5.0 | |
""" | |
#: Graceful shutdown. | |
NO_ERROR = 0x0 | |
#: Protocol error detected. | |
PROTOCOL_ERROR = 0x1 | |
#: Implementation fault. | |
INTERNAL_ERROR = 0x2 | |
#: Flow-control limits exceeded. | |
FLOW_CONTROL_ERROR = 0x3 | |
#: Settings not acknowledged. | |
SETTINGS_TIMEOUT = 0x4 | |
#: Frame received for closed stream. | |
STREAM_CLOSED = 0x5 | |
#: Frame size incorrect. | |
FRAME_SIZE_ERROR = 0x6 | |
#: Stream not processed. | |
REFUSED_STREAM = 0x7 | |
#: Stream cancelled. | |
CANCEL = 0x8 | |
#: Compression state not updated. | |
COMPRESSION_ERROR = 0x9 | |
#: TCP connection error for CONNECT method. | |
CONNECT_ERROR = 0xa | |
#: Processing capacity exceeded. | |
ENHANCE_YOUR_CALM = 0xb | |
#: Negotiated TLS parameters not acceptable. | |
INADEQUATE_SECURITY = 0xc | |
#: Use HTTP/1.1 for the request. | |
HTTP_1_1_REQUIRED = 0xd | |
def _error_code_from_int(code): | |
""" | |
Given an integer error code, returns either one of :class:`ErrorCodes | |
<h2.errors.ErrorCodes>` or, if not present in the known set of codes, | |
returns the integer directly. | |
""" | |
try: | |
return ErrorCodes(code) | |
except ValueError: | |
return code | |
__all__ = ['ErrorCodes'] | |