// Copyright 2020 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/base/transport_info.h" #include #include #include "base/check.h" #include "base/notreached.h" #include "base/strings/strcat.h" namespace net { base::StringPiece TransportTypeToString(TransportType type) { switch (type) { case TransportType::kDirect: return "TransportType::kDirect"; case TransportType::kProxied: return "TransportType::kProxied"; case TransportType::kCached: return "TransportType::kCached"; case TransportType::kCachedFromProxy: return "TransportType::kCachedFromProxy"; } // We define this here instead of as a `default` clause above so as to force // a compiler error if a new value is added to the enum and this method is // not updated to reflect it. NOTREACHED(); return ""; } TransportInfo::TransportInfo() = default; TransportInfo::TransportInfo(TransportType type_arg, IPEndPoint endpoint_arg, std::string accept_ch_frame_arg) : type(type_arg), endpoint(std::move(endpoint_arg)), accept_ch_frame(std::move(accept_ch_frame_arg)) { switch (type) { case TransportType::kCached: case TransportType::kCachedFromProxy: DCHECK_EQ(accept_ch_frame, ""); break; case TransportType::kDirect: case TransportType::kProxied: // `accept_ch_frame` can be empty or not. We use an exhaustive switch // statement to force this check to account for changes in the definition // of `TransportType`. break; } } TransportInfo::TransportInfo(const TransportInfo&) = default; TransportInfo::~TransportInfo() = default; bool TransportInfo::operator==(const TransportInfo& other) const { return type == other.type && endpoint == other.endpoint && accept_ch_frame == other.accept_ch_frame; } bool TransportInfo::operator!=(const TransportInfo& other) const { return !(*this == other); } std::string TransportInfo::ToString() const { return base::StrCat({ "TransportInfo{ type = ", TransportTypeToString(type), ", endpoint = ", endpoint.ToString(), ", accept_ch_frame = ", accept_ch_frame, " }", }); } std::ostream& operator<<(std::ostream& out, TransportType type) { return out << TransportTypeToString(type); } std::ostream& operator<<(std::ostream& out, const TransportInfo& info) { return out << info.ToString(); } } // namespace net