0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-11-09 11:31:11 +01:00
construct/include/ircd/http2/settings.h
2019-06-21 16:54:22 -07:00

66 lines
1.5 KiB
C++

// 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();
};