1*6777b538SAndroid Build Coastguard Worker // Copyright 2021 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef NET_BASE_CONNECTION_ENDPOINT_METADATA_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_BASE_CONNECTION_ENDPOINT_METADATA_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include <optional> 11*6777b538SAndroid Build Coastguard Worker #include <string> 12*6777b538SAndroid Build Coastguard Worker #include <tuple> 13*6777b538SAndroid Build Coastguard Worker #include <vector> 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker #include "base/values.h" 16*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker namespace net { 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker // Metadata used to create UDP/TCP/TLS/etc connections or information about such 21*6777b538SAndroid Build Coastguard Worker // a connection. 22*6777b538SAndroid Build Coastguard Worker struct NET_EXPORT_PRIVATE ConnectionEndpointMetadata { 23*6777b538SAndroid Build Coastguard Worker // Expected to be parsed/consumed only by BoringSSL code and thus passed 24*6777b538SAndroid Build Coastguard Worker // around here only as a raw byte array. 25*6777b538SAndroid Build Coastguard Worker using EchConfigList = std::vector<uint8_t>; 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker ConnectionEndpointMetadata(); 28*6777b538SAndroid Build Coastguard Worker ConnectionEndpointMetadata(std::vector<std::string> supported_protocol_alpns, 29*6777b538SAndroid Build Coastguard Worker EchConfigList ech_config_list, 30*6777b538SAndroid Build Coastguard Worker std::string target_name); 31*6777b538SAndroid Build Coastguard Worker ~ConnectionEndpointMetadata(); 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker ConnectionEndpointMetadata(const ConnectionEndpointMetadata&); 34*6777b538SAndroid Build Coastguard Worker ConnectionEndpointMetadata& operator=(const ConnectionEndpointMetadata&) = 35*6777b538SAndroid Build Coastguard Worker default; 36*6777b538SAndroid Build Coastguard Worker ConnectionEndpointMetadata(ConnectionEndpointMetadata&&); 37*6777b538SAndroid Build Coastguard Worker ConnectionEndpointMetadata& operator=(ConnectionEndpointMetadata&&) = default; 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker bool operator==(const ConnectionEndpointMetadata& other) const { 40*6777b538SAndroid Build Coastguard Worker return std::tie(supported_protocol_alpns, ech_config_list, target_name) == 41*6777b538SAndroid Build Coastguard Worker std::tie(other.supported_protocol_alpns, other.ech_config_list, 42*6777b538SAndroid Build Coastguard Worker target_name); 43*6777b538SAndroid Build Coastguard Worker } 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker base::Value ToValue() const; 46*6777b538SAndroid Build Coastguard Worker static std::optional<ConnectionEndpointMetadata> FromValue( 47*6777b538SAndroid Build Coastguard Worker const base::Value& value); 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker // ALPN strings for protocols supported by the endpoint. Empty for default 50*6777b538SAndroid Build Coastguard Worker // non-protocol endpoint. 51*6777b538SAndroid Build Coastguard Worker std::vector<std::string> supported_protocol_alpns; 52*6777b538SAndroid Build Coastguard Worker 53*6777b538SAndroid Build Coastguard Worker // If not empty, TLS Encrypted Client Hello config for the service. 54*6777b538SAndroid Build Coastguard Worker EchConfigList ech_config_list; 55*6777b538SAndroid Build Coastguard Worker 56*6777b538SAndroid Build Coastguard Worker // The target domain name of this metadata. 57*6777b538SAndroid Build Coastguard Worker std::string target_name; 58*6777b538SAndroid Build Coastguard Worker }; 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Worker } // namespace net 61*6777b538SAndroid Build Coastguard Worker 62*6777b538SAndroid Build Coastguard Worker #endif // NET_BASE_CONNECTION_ENDPOINT_METADATA_H_ 63