1 #include "quiche/http2/adapter/http2_protocol.h" 2 3 #include "absl/strings/str_cat.h" 4 #include "absl/strings/string_view.h" 5 6 namespace http2 { 7 namespace adapter { 8 9 ABSL_CONST_INIT const char kHttp2MethodPseudoHeader[] = ":method"; 10 ABSL_CONST_INIT const char kHttp2SchemePseudoHeader[] = ":scheme"; 11 ABSL_CONST_INIT const char kHttp2AuthorityPseudoHeader[] = ":authority"; 12 ABSL_CONST_INIT const char kHttp2PathPseudoHeader[] = ":path"; 13 ABSL_CONST_INIT const char kHttp2StatusPseudoHeader[] = ":status"; 14 15 ABSL_CONST_INIT const uint8_t kMetadataFrameType = 0x4d; 16 ABSL_CONST_INIT const uint8_t kMetadataEndFlag = 0x04; 17 ABSL_CONST_INIT const uint16_t kMetadataExtensionId = 0x4d44; 18 GetStringView(const HeaderRep & rep)19std::pair<absl::string_view, bool> GetStringView(const HeaderRep& rep) { 20 if (absl::holds_alternative<absl::string_view>(rep)) { 21 return std::make_pair(absl::get<absl::string_view>(rep), true); 22 } else { 23 absl::string_view view = absl::get<std::string>(rep); 24 return std::make_pair(view, false); 25 } 26 } 27 operator ==(const Http2Setting & a,const Http2Setting & b)28bool operator==(const Http2Setting& a, const Http2Setting& b) { 29 return a.id == b.id && a.value == b.value; 30 } 31 Http2SettingsIdToString(uint16_t id)32absl::string_view Http2SettingsIdToString(uint16_t id) { 33 switch (id) { 34 case Http2KnownSettingsId::HEADER_TABLE_SIZE: 35 return "SETTINGS_HEADER_TABLE_SIZE"; 36 case Http2KnownSettingsId::ENABLE_PUSH: 37 return "SETTINGS_ENABLE_PUSH"; 38 case Http2KnownSettingsId::MAX_CONCURRENT_STREAMS: 39 return "SETTINGS_MAX_CONCURRENT_STREAMS"; 40 case Http2KnownSettingsId::INITIAL_WINDOW_SIZE: 41 return "SETTINGS_INITIAL_WINDOW_SIZE"; 42 case Http2KnownSettingsId::MAX_FRAME_SIZE: 43 return "SETTINGS_MAX_FRAME_SIZE"; 44 case Http2KnownSettingsId::MAX_HEADER_LIST_SIZE: 45 return "SETTINGS_MAX_HEADER_LIST_SIZE"; 46 } 47 return "SETTINGS_UNKNOWN"; 48 } 49 Http2ErrorCodeToString(Http2ErrorCode error_code)50absl::string_view Http2ErrorCodeToString(Http2ErrorCode error_code) { 51 switch (error_code) { 52 case Http2ErrorCode::HTTP2_NO_ERROR: 53 return "HTTP2_NO_ERROR"; 54 case Http2ErrorCode::PROTOCOL_ERROR: 55 return "PROTOCOL_ERROR"; 56 case Http2ErrorCode::INTERNAL_ERROR: 57 return "INTERNAL_ERROR"; 58 case Http2ErrorCode::FLOW_CONTROL_ERROR: 59 return "FLOW_CONTROL_ERROR"; 60 case Http2ErrorCode::SETTINGS_TIMEOUT: 61 return "SETTINGS_TIMEOUT"; 62 case Http2ErrorCode::STREAM_CLOSED: 63 return "STREAM_CLOSED"; 64 case Http2ErrorCode::FRAME_SIZE_ERROR: 65 return "FRAME_SIZE_ERROR"; 66 case Http2ErrorCode::REFUSED_STREAM: 67 return "REFUSED_STREAM"; 68 case Http2ErrorCode::CANCEL: 69 return "CANCEL"; 70 case Http2ErrorCode::COMPRESSION_ERROR: 71 return "COMPRESSION_ERROR"; 72 case Http2ErrorCode::CONNECT_ERROR: 73 return "CONNECT_ERROR"; 74 case Http2ErrorCode::ENHANCE_YOUR_CALM: 75 return "ENHANCE_YOUR_CALM"; 76 case Http2ErrorCode::INADEQUATE_SECURITY: 77 return "INADEQUATE_SECURITY"; 78 case Http2ErrorCode::HTTP_1_1_REQUIRED: 79 return "HTTP_1_1_REQUIRED"; 80 } 81 return "UNKNOWN_ERROR"; 82 } 83 84 } // namespace adapter 85 } // namespace http2 86