Index: net/http2/http2_constants.cc |
diff --git a/net/http2/http2_constants.cc b/net/http2/http2_constants.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ca28f15eb50cea8fd352cd95106c362c3d6ae803 |
--- /dev/null |
+++ b/net/http2/http2_constants.cc |
@@ -0,0 +1,161 @@ |
+// 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.h" |
+ |
+#include <ios> |
+#include <sstream> |
+ |
+#include "base/logging.h" |
+#include "base/strings/string_piece.h" |
+#include "base/strings/stringprintf.h" |
+ |
+using base::StringPrintf; |
+using std::string; |
+ |
+namespace net { |
+ |
+string Http2FrameTypeToString(Http2FrameType v) { |
+ switch (v) { |
+ case Http2FrameType::DATA: |
+ return "DATA"; |
+ case Http2FrameType::HEADERS: |
+ return "HEADERS"; |
+ case Http2FrameType::PRIORITY: |
+ return "PRIORITY"; |
+ case Http2FrameType::RST_STREAM: |
+ return "RST_STREAM"; |
+ case Http2FrameType::SETTINGS: |
+ return "SETTINGS"; |
+ case Http2FrameType::PUSH_PROMISE: |
+ return "PUSH_PROMISE"; |
+ case Http2FrameType::PING: |
+ return "PING"; |
+ case Http2FrameType::GOAWAY: |
+ return "GOAWAY"; |
+ case Http2FrameType::WINDOW_UPDATE: |
+ return "WINDOW_UPDATE"; |
+ case Http2FrameType::CONTINUATION: |
+ return "CONTINUATION"; |
+ case Http2FrameType::ALTSVC: |
+ return "ALTSVC"; |
+ } |
+ std::stringstream ss; |
+ ss << "UnknownFrameType(" << static_cast<int>(v) << ")"; |
+ return ss.str(); |
+} |
+string Http2FrameTypeToString(uint8_t v) { |
+ return Http2FrameTypeToString(static_cast<Http2FrameType>(v)); |
+} |
+ |
+string Http2FrameFlagsToString(Http2FrameType type, uint8_t flags) { |
+ string s; |
+ // Closure to append flag name |v| to the string |s|, and to clear |
+ // |bit| from |flags|. |
+ auto append_and_clear = [&s, &flags](base::StringPiece v, uint8_t bit) { |
+ if (!s.empty()) { |
+ s.push_back('|'); |
+ } |
+ v.AppendToString(&s); |
+ flags ^= bit; |
+ }; |
+ if (flags & 0x01) { |
+ if (type == Http2FrameType::DATA || type == Http2FrameType::HEADERS) { |
+ append_and_clear("END_STREAM", Http2FrameFlag::FLAG_END_STREAM); |
+ } else if (type == Http2FrameType::SETTINGS || |
+ type == Http2FrameType::PING) { |
+ append_and_clear("ACK", Http2FrameFlag::FLAG_ACK); |
+ } |
+ } |
+ if (flags & 0x04) { |
+ if (type == Http2FrameType::HEADERS || |
+ type == Http2FrameType::PUSH_PROMISE || |
+ type == Http2FrameType::CONTINUATION) { |
+ append_and_clear("END_HEADERS", Http2FrameFlag::FLAG_END_HEADERS); |
+ } |
+ } |
+ if (flags & 0x08) { |
+ if (type == Http2FrameType::DATA || type == Http2FrameType::HEADERS || |
+ type == Http2FrameType::PUSH_PROMISE) { |
+ append_and_clear("PADDED", Http2FrameFlag::FLAG_PADDED); |
+ } |
+ } |
+ if (flags & 0x20) { |
+ if (type == Http2FrameType::HEADERS) { |
+ append_and_clear("PRIORITY", Http2FrameFlag::FLAG_PRIORITY); |
+ } |
+ } |
+ if (flags != 0) { |
+ append_and_clear(StringPrintf("0x%02x", flags), flags); |
+ } |
+ DCHECK_EQ(0, flags); |
+ return s; |
+} |
+string Http2FrameFlagsToString(uint8_t type, uint8_t flags) { |
+ return Http2FrameFlagsToString(static_cast<Http2FrameType>(type), flags); |
+} |
+ |
+string Http2ErrorCodeToString(uint32_t v) { |
+ switch (v) { |
+ case 0x0: |
+ return "NO_ERROR"; |
+ case 0x1: |
+ return "PROTOCOL_ERROR"; |
+ case 0x2: |
+ return "INTERNAL_ERROR"; |
+ case 0x3: |
+ return "FLOW_CONTROL_ERROR"; |
+ case 0x4: |
+ return "SETTINGS_TIMEOUT"; |
+ case 0x5: |
+ return "STREAM_CLOSED"; |
+ case 0x6: |
+ return "FRAME_SIZE_ERROR"; |
+ case 0x7: |
+ return "REFUSED_STREAM"; |
+ case 0x8: |
+ return "CANCEL"; |
+ case 0x9: |
+ return "COMPRESSION_ERROR"; |
+ case 0xa: |
+ return "CONNECT_ERROR"; |
+ case 0xb: |
+ return "ENHANCE_YOUR_CALM"; |
+ case 0xc: |
+ return "INADEQUATE_SECURITY"; |
+ case 0xd: |
+ return "HTTP_1_1_REQUIRED"; |
+ } |
+ std::stringstream ss; |
+ ss << "UnknownErrorCode(0x" << std::hex << v << ")"; |
+ return ss.str(); |
+} |
+string Http2ErrorCodeToString(Http2ErrorCode v) { |
+ return Http2ErrorCodeToString(static_cast<uint32_t>(v)); |
+} |
+ |
+string Http2SettingsParameterToString(uint32_t v) { |
+ switch (v) { |
+ case 0x1: |
+ return "HEADER_TABLE_SIZE"; |
+ case 0x2: |
+ return "ENABLE_PUSH"; |
+ case 0x3: |
+ return "MAX_CONCURRENT_STREAMS"; |
+ case 0x4: |
+ return "INITIAL_WINDOW_SIZE"; |
+ case 0x5: |
+ return "MAX_FRAME_SIZE"; |
+ case 0x6: |
+ return "MAX_HEADER_LIST_SIZE"; |
+ } |
+ std::stringstream ss; |
+ ss << "UnknownSettingsParameter(0x" << std::hex << v << ")"; |
+ return ss.str(); |
+} |
+string Http2SettingsParameterToString(Http2SettingsParameter v) { |
+ return Http2SettingsParameterToString(static_cast<uint32_t>(v)); |
+} |
+ |
+} // namespace net |