91 lines
2.5 KiB
C++
91 lines
2.5 KiB
C++
|
|
// Copyright 2020 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/base/transport_info.h"
|
||
|
|
|
||
|
|
#include <ostream>
|
||
|
|
#include <utility>
|
||
|
|
|
||
|
|
#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 "<invalid transport type>";
|
||
|
|
}
|
||
|
|
|
||
|
|
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
|