// 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_SETTINGS_H namespace ircd::http2 { struct settings; } struct ircd::http2::frame::settings { enum code :uint16_t; enum flag :decltype(frame::header::flags); struct param; vector_view param; }; struct ircd::http2::frame::settings::param { uint16_t id {0}; uint32_t value {0}; } __attribute__((packed)); namespace ircd::http2 { string_view reflect(const frame::settings::code &); } enum ircd::http2::frame::settings::code :uint16_t { HEADER_TABLE_SIZE = 0x1, ENABLE_PUSH = 0x2, MAX_CONCURRENT_STREAMS = 0x3, INITIAL_WINDOW_SIZE = 0x4, MAX_FRAME_SIZE = 0x5, MAX_HEADER_LIST_SIZE = 0x6, _NUM_ }; enum ircd::http2::frame::settings::flag :std::underlying_type::type { ACK = (1 << 0), }; struct ircd::http2::settings :std::array()> { using code = frame::settings::code; using array_type = std::array()>; settings(); };