// Matrix Construct // // Copyright (C) Matrix Construct Developers, Authors & Contributors // Copyright (C) 2016-2019 Jason Volk <jason@zemos.net> // // 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<const struct param> 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<ircd::http2::frame::settings::flag>::type { ACK = (1 << 0), }; struct ircd::http2::settings :std::array<uint32_t, num_of<frame::settings::code>()> { using code = frame::settings::code; using array_type = std::array<uint32_t, num_of<code>()>; settings(); };