75 lines
2.5 KiB
C++
75 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.
|
|
|
|
#ifndef NET_BASE_TRANSPORT_INFO_H_
|
|
#define NET_BASE_TRANSPORT_INFO_H_
|
|
|
|
#include <iosfwd>
|
|
#include <string>
|
|
|
|
#include "base/strings/string_piece.h"
|
|
#include "net/base/ip_endpoint.h"
|
|
#include "net/base/net_export.h"
|
|
|
|
namespace net {
|
|
|
|
// Specifies the type of a network transport over which a resource is loaded.
|
|
enum class TransportType {
|
|
// The transport was established directly to a peer.
|
|
kDirect,
|
|
// The transport was established to a proxy of some kind.
|
|
kProxied,
|
|
// The transport was "established" to a cache entry.
|
|
kCached,
|
|
// Same as `kCached`, but the resource was initially loaded through a proxy.
|
|
kCachedFromProxy,
|
|
};
|
|
|
|
// Returns a string representation of the given transport type.
|
|
// The returned StringPiece is static, has no lifetime restrictions.
|
|
NET_EXPORT base::StringPiece TransportTypeToString(TransportType type);
|
|
|
|
// Describes a network transport.
|
|
struct NET_EXPORT TransportInfo {
|
|
TransportInfo();
|
|
TransportInfo(TransportType type_arg,
|
|
IPEndPoint endpoint_arg,
|
|
std::string accept_ch_frame_arg);
|
|
TransportInfo(const TransportInfo&);
|
|
~TransportInfo();
|
|
|
|
// Instances of this type are comparable for equality.
|
|
bool operator==(const TransportInfo& other) const;
|
|
bool operator!=(const TransportInfo& other) const;
|
|
|
|
// Returns a string representation of this struct, suitable for debugging.
|
|
std::string ToString() const;
|
|
|
|
// The type of the transport.
|
|
TransportType type = TransportType::kDirect;
|
|
|
|
// If `type` is `kDirect`, then this identifies the peer endpoint.
|
|
// If `type` is `kProxied`, then this identifies the proxy endpoint.
|
|
// If `type` is `kCached`, then this identifies the peer endpoint from which
|
|
// the resource was originally loaded.
|
|
// If `type` is `kCachedFromProxy`, then this identifies the proxy endpoint
|
|
// from which the resource was originally loaded.
|
|
IPEndPoint endpoint;
|
|
|
|
// The value of the ACCEPT_CH HTTP2/3 frame, as pulled in through ALPS.
|
|
//
|
|
// Invariant: if `type` is `kCached` or `kCachedFromProxy`, then this is
|
|
// empty.
|
|
std::string accept_ch_frame;
|
|
};
|
|
|
|
// Instances of these types are streamable for easier debugging.
|
|
NET_EXPORT std::ostream& operator<<(std::ostream& out, TransportType type);
|
|
NET_EXPORT std::ostream& operator<<(std::ostream& out,
|
|
const TransportInfo& info);
|
|
|
|
} // namespace net
|
|
|
|
#endif // NET_BASE_TRANSPORT_INFO_H_
|