blob: f65f5b72cdc5b662d0db93c0e17cd08fdaa3cf3d [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/http/http_connection_info.h"
#include "base/notreached.h"
namespace net {
std::string_view HttpConnectionInfoToString(
HttpConnectionInfo connection_info) {
switch (connection_info) {
case HttpConnectionInfo::kUNKNOWN:
return "unknown";
case HttpConnectionInfo::kHTTP1_1:
return "http/1.1";
case HttpConnectionInfo::kDEPRECATED_SPDY2:
NOTREACHED();
return "";
case HttpConnectionInfo::kDEPRECATED_SPDY3:
return "spdy/3";
// Since ConnectionInfo is persisted to disk, deprecated values have to be
// handled. Note that h2-14 and h2-15 are essentially wire compatible with
// h2.
// Intentional fallthrough.
case HttpConnectionInfo::kDEPRECATED_HTTP2_14:
case HttpConnectionInfo::kDEPRECATED_HTTP2_15:
case HttpConnectionInfo::kHTTP2:
return "h2";
case HttpConnectionInfo::kQUIC_UNKNOWN_VERSION:
return "http/2+quic";
case HttpConnectionInfo::kQUIC_32:
return "http/2+quic/32";
case HttpConnectionInfo::kQUIC_33:
return "http/2+quic/33";
case HttpConnectionInfo::kQUIC_34:
return "http/2+quic/34";
case HttpConnectionInfo::kQUIC_35:
return "http/2+quic/35";
case HttpConnectionInfo::kQUIC_36:
return "http/2+quic/36";
case HttpConnectionInfo::kQUIC_37:
return "http/2+quic/37";
case HttpConnectionInfo::kQUIC_38:
return "http/2+quic/38";
case HttpConnectionInfo::kQUIC_39:
return "http/2+quic/39";
case HttpConnectionInfo::kQUIC_40:
return "http/2+quic/40";
case HttpConnectionInfo::kQUIC_41:
return "http/2+quic/41";
case HttpConnectionInfo::kQUIC_42:
return "http/2+quic/42";
case HttpConnectionInfo::kQUIC_43:
return "http/2+quic/43";
case HttpConnectionInfo::kQUIC_44:
return "http/2+quic/44";
case HttpConnectionInfo::kQUIC_45:
return "http/2+quic/45";
case HttpConnectionInfo::kQUIC_46:
return "http/2+quic/46";
case HttpConnectionInfo::kQUIC_47:
return "http/2+quic/47";
case HttpConnectionInfo::kQUIC_Q048:
return "h3-Q048";
case HttpConnectionInfo::kQUIC_T048:
return "h3-T048";
case HttpConnectionInfo::kQUIC_Q049:
return "h3-Q049";
case HttpConnectionInfo::kQUIC_T049:
return "h3-T049";
case HttpConnectionInfo::kQUIC_Q050:
return "h3-Q050";
case HttpConnectionInfo::kQUIC_T050:
return "h3-T050";
case HttpConnectionInfo::kQUIC_Q099:
return "h3-Q099";
case HttpConnectionInfo::kQUIC_DRAFT_25:
return "h3-25";
case HttpConnectionInfo::kQUIC_DRAFT_27:
return "h3-27";
case HttpConnectionInfo::kQUIC_DRAFT_28:
return "h3-28";
case HttpConnectionInfo::kQUIC_DRAFT_29:
return "h3-29";
case HttpConnectionInfo::kQUIC_T099:
return "h3-T099";
case HttpConnectionInfo::kHTTP0_9:
return "http/0.9";
case HttpConnectionInfo::kHTTP1_0:
return "http/1.0";
case HttpConnectionInfo::kQUIC_999:
return "http2+quic/999";
case HttpConnectionInfo::kQUIC_T051:
return "h3-T051";
case HttpConnectionInfo::kQUIC_RFC_V1:
return "h3";
case HttpConnectionInfo::kDEPRECATED_QUIC_2_DRAFT_1:
return "h3/quic2draft01";
case HttpConnectionInfo::kQUIC_2_DRAFT_8:
return "h3/quic2draft08";
}
}
std::string_view HttpConnectionInfoCoarseToString(
HttpConnectionInfoCoarse connection_info_coarse) {
switch (connection_info_coarse) {
case HttpConnectionInfoCoarse::kHTTP1:
return "Http1";
case HttpConnectionInfoCoarse::kHTTP2:
return "Http2";
case HttpConnectionInfoCoarse::kQUIC:
return "Http3";
case HttpConnectionInfoCoarse::kOTHER:
return "Other";
}
}
// Returns a more coarse-grained description of the protocol used to fetch the
// response.
HttpConnectionInfoCoarse HttpConnectionInfoToCoarse(HttpConnectionInfo info) {
switch (info) {
case HttpConnectionInfo::kHTTP0_9:
case HttpConnectionInfo::kHTTP1_0:
case HttpConnectionInfo::kHTTP1_1:
return HttpConnectionInfoCoarse::kHTTP1;
case HttpConnectionInfo::kHTTP2:
case HttpConnectionInfo::kDEPRECATED_SPDY2:
case HttpConnectionInfo::kDEPRECATED_SPDY3:
case HttpConnectionInfo::kDEPRECATED_HTTP2_14:
case HttpConnectionInfo::kDEPRECATED_HTTP2_15:
return HttpConnectionInfoCoarse::kHTTP2;
case HttpConnectionInfo::kQUIC_UNKNOWN_VERSION:
case HttpConnectionInfo::kQUIC_32:
case HttpConnectionInfo::kQUIC_33:
case HttpConnectionInfo::kQUIC_34:
case HttpConnectionInfo::kQUIC_35:
case HttpConnectionInfo::kQUIC_36:
case HttpConnectionInfo::kQUIC_37:
case HttpConnectionInfo::kQUIC_38:
case HttpConnectionInfo::kQUIC_39:
case HttpConnectionInfo::kQUIC_40:
case HttpConnectionInfo::kQUIC_41:
case HttpConnectionInfo::kQUIC_42:
case HttpConnectionInfo::kQUIC_43:
case HttpConnectionInfo::kQUIC_44:
case HttpConnectionInfo::kQUIC_45:
case HttpConnectionInfo::kQUIC_46:
case HttpConnectionInfo::kQUIC_47:
case HttpConnectionInfo::kQUIC_Q048:
case HttpConnectionInfo::kQUIC_T048:
case HttpConnectionInfo::kQUIC_Q049:
case HttpConnectionInfo::kQUIC_T049:
case HttpConnectionInfo::kQUIC_Q050:
case HttpConnectionInfo::kQUIC_T050:
case HttpConnectionInfo::kQUIC_Q099:
case HttpConnectionInfo::kQUIC_T099:
case HttpConnectionInfo::kQUIC_999:
case HttpConnectionInfo::kQUIC_DRAFT_25:
case HttpConnectionInfo::kQUIC_DRAFT_27:
case HttpConnectionInfo::kQUIC_DRAFT_28:
case HttpConnectionInfo::kQUIC_DRAFT_29:
case HttpConnectionInfo::kQUIC_T051:
case HttpConnectionInfo::kQUIC_RFC_V1:
case HttpConnectionInfo::kDEPRECATED_QUIC_2_DRAFT_1:
case HttpConnectionInfo::kQUIC_2_DRAFT_8:
return HttpConnectionInfoCoarse::kQUIC;
case HttpConnectionInfo::kUNKNOWN:
return HttpConnectionInfoCoarse::kOTHER;
}
}
} // namespace net