// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "net/http2/http2_constants_test_util.h" namespace net { namespace test { std::vector AllHttp2FrameTypes() { // clang-format off return { Http2FrameType::DATA, Http2FrameType::HEADERS, Http2FrameType::PRIORITY, Http2FrameType::RST_STREAM, Http2FrameType::SETTINGS, Http2FrameType::PUSH_PROMISE, Http2FrameType::PING, Http2FrameType::GOAWAY, Http2FrameType::WINDOW_UPDATE, Http2FrameType::CONTINUATION, Http2FrameType::ALTSVC, }; // clang-format on } std::vector AllHttp2FrameFlagsForFrameType( Http2FrameType type) { // clang-format off switch (type) { case Http2FrameType::DATA: return { Http2FrameFlag::END_STREAM, Http2FrameFlag::PADDED, }; case Http2FrameType::HEADERS: return { Http2FrameFlag::END_STREAM, Http2FrameFlag::END_HEADERS, Http2FrameFlag::PADDED, Http2FrameFlag::PRIORITY, }; case Http2FrameType::SETTINGS: return { Http2FrameFlag::ACK, }; case Http2FrameType::PUSH_PROMISE: return { Http2FrameFlag::END_HEADERS, Http2FrameFlag::PADDED, }; case Http2FrameType::PING: return { Http2FrameFlag::ACK, }; case Http2FrameType::CONTINUATION: return { Http2FrameFlag::END_HEADERS, }; default: return std::vector{}; } // clang-format on } std::vector AllHttp2ErrorCodes() { // clang-format off return { Http2ErrorCode::HTTP2_NO_ERROR, Http2ErrorCode::PROTOCOL_ERROR, Http2ErrorCode::INTERNAL_ERROR, Http2ErrorCode::FLOW_CONTROL_ERROR, Http2ErrorCode::SETTINGS_TIMEOUT, Http2ErrorCode::STREAM_CLOSED, Http2ErrorCode::FRAME_SIZE_ERROR, Http2ErrorCode::REFUSED_STREAM, Http2ErrorCode::CANCEL, Http2ErrorCode::COMPRESSION_ERROR, Http2ErrorCode::CONNECT_ERROR, Http2ErrorCode::ENHANCE_YOUR_CALM, Http2ErrorCode::INADEQUATE_SECURITY, Http2ErrorCode::HTTP_1_1_REQUIRED, }; // clang-format on } std::vector AllHttp2SettingsParameters() { // clang-format off return { Http2SettingsParameter::HEADER_TABLE_SIZE, Http2SettingsParameter::ENABLE_PUSH, Http2SettingsParameter::MAX_CONCURRENT_STREAMS, Http2SettingsParameter::INITIAL_WINDOW_SIZE, Http2SettingsParameter::MAX_FRAME_SIZE, Http2SettingsParameter::MAX_HEADER_LIST_SIZE, }; // clang-format on } // Returns a mask of flags supported for the specified frame type. Returns // zero for unknown frame types. uint8_t KnownFlagsMaskForFrameType(Http2FrameType type) { switch (type) { case Http2FrameType::DATA: return Http2FrameFlag::END_STREAM | Http2FrameFlag::PADDED; case Http2FrameType::HEADERS: return Http2FrameFlag::END_STREAM | Http2FrameFlag::END_HEADERS | Http2FrameFlag::PADDED | Http2FrameFlag::PRIORITY; case Http2FrameType::PRIORITY: return 0x00; case Http2FrameType::RST_STREAM: return 0x00; case Http2FrameType::SETTINGS: return Http2FrameFlag::ACK; case Http2FrameType::PUSH_PROMISE: return Http2FrameFlag::END_HEADERS | Http2FrameFlag::PADDED; case Http2FrameType::PING: return Http2FrameFlag::ACK; case Http2FrameType::GOAWAY: return 0x00; case Http2FrameType::WINDOW_UPDATE: return 0x00; case Http2FrameType::CONTINUATION: return Http2FrameFlag::END_HEADERS; case Http2FrameType::ALTSVC: return 0x00; default: return 0x00; } } uint8_t InvalidFlagMaskForFrameType(Http2FrameType type) { if (IsSupportedHttp2FrameType(type)) { return ~KnownFlagsMaskForFrameType(type); } return 0x00; } } // namespace test } // namespace net