blob: ad15b69da90df9404ee55f5effa0b2d9f41a6d1d [file] [log] [blame]
QUICHE teamfd50a402018-12-07 22:54:05 -05001// Copyright 2016 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "net/third_party/quiche/src/http2/http2_constants.h"
6
QUICHE team61940b42019-03-07 23:32:27 -05007#include "net/third_party/quiche/src/http2/platform/api/http2_logging.h"
QUICHE teamfd50a402018-12-07 22:54:05 -05008#include "net/third_party/quiche/src/http2/platform/api/http2_string_piece.h"
9#include "net/third_party/quiche/src/http2/platform/api/http2_string_utils.h"
10
11namespace http2 {
12
13Http2String Http2FrameTypeToString(Http2FrameType v) {
14 switch (v) {
15 case Http2FrameType::DATA:
16 return "DATA";
17 case Http2FrameType::HEADERS:
18 return "HEADERS";
19 case Http2FrameType::PRIORITY:
20 return "PRIORITY";
21 case Http2FrameType::RST_STREAM:
22 return "RST_STREAM";
23 case Http2FrameType::SETTINGS:
24 return "SETTINGS";
25 case Http2FrameType::PUSH_PROMISE:
26 return "PUSH_PROMISE";
27 case Http2FrameType::PING:
28 return "PING";
29 case Http2FrameType::GOAWAY:
30 return "GOAWAY";
31 case Http2FrameType::WINDOW_UPDATE:
32 return "WINDOW_UPDATE";
33 case Http2FrameType::CONTINUATION:
34 return "CONTINUATION";
35 case Http2FrameType::ALTSVC:
36 return "ALTSVC";
37 }
38 return Http2StrCat("UnknownFrameType(", static_cast<int>(v), ")");
39}
40
41Http2String Http2FrameTypeToString(uint8_t v) {
42 return Http2FrameTypeToString(static_cast<Http2FrameType>(v));
43}
44
45Http2String Http2FrameFlagsToString(Http2FrameType type, uint8_t flags) {
46 Http2String s;
47 // Closure to append flag name |v| to the Http2String |s|,
48 // and to clear |bit| from |flags|.
49 auto append_and_clear = [&s, &flags](Http2StringPiece v, uint8_t bit) {
50 if (!s.empty()) {
51 s.push_back('|');
52 }
53 Http2StrAppend(&s, v);
54 flags ^= bit;
55 };
56 if (flags & 0x01) {
57 if (type == Http2FrameType::DATA || type == Http2FrameType::HEADERS) {
58 append_and_clear("END_STREAM", Http2FrameFlag::END_STREAM);
59 } else if (type == Http2FrameType::SETTINGS ||
60 type == Http2FrameType::PING) {
61 append_and_clear("ACK", Http2FrameFlag::ACK);
62 }
63 }
64 if (flags & 0x04) {
65 if (type == Http2FrameType::HEADERS ||
66 type == Http2FrameType::PUSH_PROMISE ||
67 type == Http2FrameType::CONTINUATION) {
68 append_and_clear("END_HEADERS", Http2FrameFlag::END_HEADERS);
69 }
70 }
71 if (flags & 0x08) {
72 if (type == Http2FrameType::DATA || type == Http2FrameType::HEADERS ||
73 type == Http2FrameType::PUSH_PROMISE) {
74 append_and_clear("PADDED", Http2FrameFlag::PADDED);
75 }
76 }
77 if (flags & 0x20) {
78 if (type == Http2FrameType::HEADERS) {
79 append_and_clear("PRIORITY", Http2FrameFlag::PRIORITY);
80 }
81 }
82 if (flags != 0) {
83 append_and_clear(Http2StringPrintf("0x%02x", flags), flags);
84 }
85 DCHECK_EQ(0, flags);
86 return s;
87}
88Http2String Http2FrameFlagsToString(uint8_t type, uint8_t flags) {
89 return Http2FrameFlagsToString(static_cast<Http2FrameType>(type), flags);
90}
91
92Http2String Http2ErrorCodeToString(uint32_t v) {
93 switch (v) {
94 case 0x0:
95 return "NO_ERROR";
96 case 0x1:
97 return "PROTOCOL_ERROR";
98 case 0x2:
99 return "INTERNAL_ERROR";
100 case 0x3:
101 return "FLOW_CONTROL_ERROR";
102 case 0x4:
103 return "SETTINGS_TIMEOUT";
104 case 0x5:
105 return "STREAM_CLOSED";
106 case 0x6:
107 return "FRAME_SIZE_ERROR";
108 case 0x7:
109 return "REFUSED_STREAM";
110 case 0x8:
111 return "CANCEL";
112 case 0x9:
113 return "COMPRESSION_ERROR";
114 case 0xa:
115 return "CONNECT_ERROR";
116 case 0xb:
117 return "ENHANCE_YOUR_CALM";
118 case 0xc:
119 return "INADEQUATE_SECURITY";
120 case 0xd:
121 return "HTTP_1_1_REQUIRED";
122 }
123 return Http2StrCat("UnknownErrorCode(0x", Http2Hex(v), ")");
124}
125Http2String Http2ErrorCodeToString(Http2ErrorCode v) {
126 return Http2ErrorCodeToString(static_cast<uint32_t>(v));
127}
128
129Http2String Http2SettingsParameterToString(uint32_t v) {
130 switch (v) {
131 case 0x1:
132 return "HEADER_TABLE_SIZE";
133 case 0x2:
134 return "ENABLE_PUSH";
135 case 0x3:
136 return "MAX_CONCURRENT_STREAMS";
137 case 0x4:
138 return "INITIAL_WINDOW_SIZE";
139 case 0x5:
140 return "MAX_FRAME_SIZE";
141 case 0x6:
142 return "MAX_HEADER_LIST_SIZE";
143 }
144 return Http2StrCat("UnknownSettingsParameter(0x", Http2Hex(v), ")");
145}
146Http2String Http2SettingsParameterToString(Http2SettingsParameter v) {
147 return Http2SettingsParameterToString(static_cast<uint32_t>(v));
148}
149
150} // namespace http2