// Matrix Construct // // Copyright (C) Matrix Construct Developers, Authors & Contributors // Copyright (C) 2016-2019 Jason Volk // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above // copyright notice and this permission notice is present in all copies. The // full license for this software is available in the LICENSE file. #pragma once #define HAVE_IRCD_HTTP2_ERROR_H namespace ircd::http2 { struct error; } struct ircd::http2::error :ircd::error { enum code :uint32_t; enum code code; error(); error(const enum code &); explicit error(const enum code &, const string_view &fmt, va_rtti &&ap); template error(const enum code &, const string_view &fmt, args&&...); template error(const string_view &fmt, args&&...); }; namespace ircd::http2 { string_view reflect(const enum error::code &); } enum ircd::http2::error::code :uint32_t { NO_ERROR = 0x0, PROTOCOL_ERROR = 0x1, INTERNAL_ERROR = 0x2, FLOW_CONTROL_ERROR = 0x3, SETTINGS_TIMEOUT = 0x4, STREAM_CLOSED = 0x5, FRAME_SIZE_ERROR = 0x6, REFUSED_STREAM = 0x7, CANCEL = 0x8, COMPRESSION_ERROR = 0x9, CONNECT_ERROR = 0xa, ENHANCE_YOUR_CALM = 0xb, INADEQUATE_SECURITY = 0xc, HTTP_1_1_REQUIRED = 0xd, }; template ircd::http2::error::error(const string_view &fmt, args&&... a) :error { code::INTERNAL_ERROR, fmt, va_rtti{std::forward(a)...} } {} template ircd::http2::error::error(const enum code &code, const string_view &fmt, args&&... a) :error { code, fmt, va_rtti{std::forward(a)...} } {}