Skip to content
2 changes: 1 addition & 1 deletion envoy/network/filter.h
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,7 @@ class FilterChain {
* @return const TransportSocketFactory& a transport socket factory to be used by the new
* connection.
*/
virtual const TransportSocketFactory& transportSocketFactory() const PURE;
virtual const DownstreamTransportSocketFactory& transportSocketFactory() const PURE;

/**
* @return std::chrono::milliseconds the amount of time to wait for the transport socket to report
Expand Down
35 changes: 28 additions & 7 deletions envoy/network/transport_socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
namespace Envoy {
namespace Network {

class TransportSocketFactory;
class Connection;
enum class ConnectionEvent;

Expand Down Expand Up @@ -239,20 +238,28 @@ class TransportSocketOptions {
using TransportSocketOptionsConstSharedPtr = std::shared_ptr<const TransportSocketOptions>;

/**
* A factory for creating transport socket. It will be associated to filter chains and clusters.
*/
class TransportSocketFactory {
* A factory for creating transport sockets.
**/
class TransportSocketFactoryBase {
public:
virtual ~TransportSocketFactory() = default;
virtual ~TransportSocketFactoryBase() = default;

/**
* @return bool whether the transport socket implements secure transport.
*/
virtual bool implementsSecureTransport() const PURE;
};

/**
* A factory for creating upstream transport sockets. It will be associated to clusters.
*/
class UpstreamTransportSocketFactory : public virtual TransportSocketFactoryBase {
public:
~UpstreamTransportSocketFactory() override = default;

/**
* @param options for creating the transport socket
* @return Network::TransportSocketPtr a transport socket to be passed to connection.
* @return Network::TransportSocketPtr a transport socket to be passed to client connection.
*/
virtual TransportSocketPtr
createTransportSocket(TransportSocketOptionsConstSharedPtr options) const PURE;
Expand Down Expand Up @@ -280,7 +287,21 @@ class TransportSocketFactory {
TransportSocketOptionsConstSharedPtr options) const PURE;
};

using TransportSocketFactoryPtr = std::unique_ptr<TransportSocketFactory>;
/**
* A factory for creating downstream transport sockets. It will be associated to listeners.
*/
class DownstreamTransportSocketFactory : public virtual TransportSocketFactoryBase {
public:
~DownstreamTransportSocketFactory() override = default;

/**
* @return Network::TransportSocketPtr a transport socket to be passed to server connection.
*/
virtual TransportSocketPtr createDownstreamTransportSocket() const PURE;
};

using UpstreamTransportSocketFactoryPtr = std::unique_ptr<UpstreamTransportSocketFactory>;
using DownstreamTransportSocketFactoryPtr = std::unique_ptr<DownstreamTransportSocketFactory>;

} // namespace Network
} // namespace Envoy
12 changes: 6 additions & 6 deletions envoy/server/transport_socket_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -124,13 +124,13 @@ class UpstreamTransportSocketConfigFactory : public virtual TransportSocketConfi
* @param config const Protobuf::Message& supplies the config message for the transport socket
* implementation.
* @param context TransportSocketFactoryContext& supplies the transport socket's context.
* @return Network::TransportSocketFactoryPtr the transport socket factory instance. The returned
* TransportSocketFactoryPtr should not be nullptr.
* @return Network::UpstreamTransportSocketFactoryPtr the transport socket factory instance. The
* returned TransportSocketFactoryPtr should not be nullptr.
*
* @throw EnvoyException if the implementation is unable to produce a factory with the provided
* parameters.
*/
virtual Network::TransportSocketFactoryPtr
virtual Network::UpstreamTransportSocketFactoryPtr
createTransportSocketFactory(const Protobuf::Message& config,
TransportSocketFactoryContext& context) PURE;

Expand All @@ -150,13 +150,13 @@ class DownstreamTransportSocketConfigFactory : public virtual TransportSocketCon
* @param config const Protobuf::Message& supplies the config message for the transport socket
* implementation.
* @param context TransportSocketFactoryContext& supplies the transport socket's context.
* @return Network::TransportSocketFactoryPtr the transport socket factory instance. The returned
* TransportSocketFactoryPtr should not be nullptr.
* @return Network::DownstreamTransportSocketFactoryPtr the transport socket factory instance. The
* returned TransportSocketFactoryPtr should not be nullptr.
*
* @throw EnvoyException if the implementation is unable to produce a factory with the provided
* parameters.
*/
virtual Network::TransportSocketFactoryPtr
virtual Network::DownstreamTransportSocketFactoryPtr
createTransportSocketFactory(const Protobuf::Message& config,
TransportSocketFactoryContext& context,
const std::vector<std::string>& server_names) PURE;
Expand Down
6 changes: 3 additions & 3 deletions envoy/upstream/host_description.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ class HostDescription {
/**
* @return the transport socket factory responsible for this host.
*/
virtual Network::TransportSocketFactory& transportSocketFactory() const PURE;
virtual Network::UpstreamTransportSocketFactory& transportSocketFactory() const PURE;

/**
* @return the address used to connect to the host.
Expand Down Expand Up @@ -220,10 +220,10 @@ struct TransportSocketMatchStats {
class TransportSocketMatcher {
public:
struct MatchData {
MatchData(Network::TransportSocketFactory& factory, TransportSocketMatchStats& stats,
MatchData(Network::UpstreamTransportSocketFactory& factory, TransportSocketMatchStats& stats,
std::string name)
: factory_(factory), stats_(stats), name_(std::move(name)) {}
Network::TransportSocketFactory& factory_;
Network::UpstreamTransportSocketFactory& factory_;
TransportSocketMatchStats& stats_;
std::string name_;
};
Expand Down
2 changes: 1 addition & 1 deletion source/common/http/conn_pool_grid.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ absl::string_view describePool(const ConnectionPool::Instance& pool) {
static constexpr uint32_t kDefaultTimeoutMs = 300;

std::string getSni(const Network::TransportSocketOptionsConstSharedPtr& options,
Network::TransportSocketFactory& transport_socket_factory) {
Network::UpstreamTransportSocketFactory& transport_socket_factory) {
if (options && options->serverNameOverride().has_value()) {
return options->serverNameOverride().value();
}
Expand Down
2 changes: 1 addition & 1 deletion source/common/http/http3/conn_pool.cc
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ uint32_t getMaxStreams(const Upstream::ClusterInfo& cluster) {
}

const Envoy::Ssl::ClientContextConfig&
getConfig(Network::TransportSocketFactory& transport_socket_factory) {
getConfig(Network::UpstreamTransportSocketFactory& transport_socket_factory) {
return dynamic_cast<Quic::QuicClientTransportSocketFactory&>(transport_socket_factory)
.clientContextConfig();
}
Expand Down
2 changes: 1 addition & 1 deletion source/common/network/happy_eyeballs_connection_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace Network {

HappyEyeballsConnectionImpl::HappyEyeballsConnectionImpl(
Event::Dispatcher& dispatcher, const std::vector<Address::InstanceConstSharedPtr>& address_list,
Address::InstanceConstSharedPtr source_address, TransportSocketFactory& socket_factory,
Address::InstanceConstSharedPtr source_address, UpstreamTransportSocketFactory& socket_factory,
TransportSocketOptionsConstSharedPtr transport_socket_options,
const ConnectionSocket::OptionsSharedPtr options)
: id_(ConnectionImpl::next_global_id_++), dispatcher_(dispatcher),
Expand Down
4 changes: 2 additions & 2 deletions source/common/network/happy_eyeballs_connection_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class HappyEyeballsConnectionImpl : public ClientConnection,
HappyEyeballsConnectionImpl(Event::Dispatcher& dispatcher,
const std::vector<Address::InstanceConstSharedPtr>& address_list,
Address::InstanceConstSharedPtr source_address,
TransportSocketFactory& socket_factory,
UpstreamTransportSocketFactory& socket_factory,
TransportSocketOptionsConstSharedPtr transport_socket_options,
const ConnectionSocket::OptionsSharedPtr options);

Expand Down Expand Up @@ -197,7 +197,7 @@ class HappyEyeballsConnectionImpl : public ClientConnection,
// State which is needed to construct a new connection.
struct ConnectionConstructionState {
Address::InstanceConstSharedPtr source_address_;
TransportSocketFactory& socket_factory_;
UpstreamTransportSocketFactory& socket_factory_;
TransportSocketOptionsConstSharedPtr transport_socket_options_;
const ConnectionSocket::OptionsSharedPtr options_;
};
Expand Down
4 changes: 4 additions & 0 deletions source/common/network/raw_buffer_socket.cc
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ RawBufferSocketFactory::createTransportSocket(TransportSocketOptionsConstSharedP
return std::make_unique<RawBufferSocket>();
}

TransportSocketPtr RawBufferSocketFactory::createDownstreamTransportSocket() const {
return std::make_unique<RawBufferSocket>();
}

bool RawBufferSocketFactory::implementsSecureTransport() const { return false; }

} // namespace Network
Expand Down
7 changes: 5 additions & 2 deletions source/common/network/raw_buffer_socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,16 @@ class RawBufferSocket : public TransportSocket, protected Logger::Loggable<Logge
TransportSocketCallbacks* callbacks_{};
};

class RawBufferSocketFactory : public CommonTransportSocketFactory {
class RawBufferSocketFactory : public DownstreamTransportSocketFactory,
public CommonUpstreamTransportSocketFactory {
public:
// Network::TransportSocketFactory
// Network::UpstreamTransportSocketFactory
TransportSocketPtr
createTransportSocket(TransportSocketOptionsConstSharedPtr options) const override;
bool implementsSecureTransport() const override;
absl::string_view defaultServerNameIndication() const override { return ""; }
// Network::DownstreamTransportSocketFactory
TransportSocketPtr createDownstreamTransportSocket() const override;
};

} // namespace Network
Expand Down
4 changes: 2 additions & 2 deletions source/common/network/transport_socket_options_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
namespace Envoy {
namespace Network {

void CommonTransportSocketFactory::hashKey(std::vector<uint8_t>& key,
TransportSocketOptionsConstSharedPtr options) const {
void CommonUpstreamTransportSocketFactory::hashKey(
std::vector<uint8_t>& key, TransportSocketOptionsConstSharedPtr options) const {
if (!options) {
return;
}
Expand Down
2 changes: 1 addition & 1 deletion source/common/network/transport_socket_options_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ class TransportSocketOptionsUtility {
fromFilterState(const StreamInfo::FilterStateSharedPtr& stream_info);
};

class CommonTransportSocketFactory : public TransportSocketFactory {
class CommonUpstreamTransportSocketFactory : public UpstreamTransportSocketFactory {
public:
/**
* Compute the generic hash key from the transport socket options.
Expand Down
2 changes: 1 addition & 1 deletion source/common/quic/envoy_quic_crypto_stream_factory.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class EnvoyQuicCryptoServerStreamFactoryInterface : public Config::TypedFactory
const quic::QuicCryptoServerConfig* crypto_config,
quic::QuicCompressedCertsCache* compressed_certs_cache, quic::QuicSession* session,
quic::QuicCryptoServerStreamBase::Helper* helper,
OptRef<const Network::TransportSocketFactory> transport_socket_factory,
OptRef<const Network::DownstreamTransportSocketFactory> transport_socket_factory,
Event::Dispatcher& dispatcher) PURE;
};

Expand Down
4 changes: 2 additions & 2 deletions source/common/quic/quic_transport_socket_factory.cc
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
namespace Envoy {
namespace Quic {

Network::TransportSocketFactoryPtr
Network::DownstreamTransportSocketFactoryPtr
QuicServerTransportSocketConfigFactory::createTransportSocketFactory(
const Protobuf::Message& config, Server::Configuration::TransportSocketFactoryContext& context,
const std::vector<std::string>& /*server_names*/) {
Expand All @@ -33,7 +33,7 @@ ProtobufTypes::MessagePtr QuicServerTransportSocketConfigFactory::createEmptyCon
envoy::extensions::transport_sockets::quic::v3::QuicDownstreamTransport>();
}

Network::TransportSocketFactoryPtr
Network::UpstreamTransportSocketFactoryPtr
QuicClientTransportSocketConfigFactory::createTransportSocketFactory(
const Protobuf::Message& config,
Server::Configuration::TransportSocketFactoryContext& context) {
Expand Down
32 changes: 17 additions & 15 deletions source/common/quic/quic_transport_socket_factory.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,37 +37,37 @@ QuicTransportSocketFactoryStats generateStats(Stats::Scope& store, const std::st
// socket for QUIC in current implementation. This factory doesn't provides a
// transport socket, instead, its derived class provides TLS context config for
// server and client.
class QuicTransportSocketFactoryBase : public Network::CommonTransportSocketFactory,
protected Logger::Loggable<Logger::Id::quic> {
class QuicTransportSocketFactoryBase : protected Logger::Loggable<Logger::Id::quic> {
public:
QuicTransportSocketFactoryBase(Stats::Scope& store, const std::string& perspective)
: stats_(generateStats(store, perspective)) {}

virtual ~QuicTransportSocketFactoryBase() = default;

// To be called right after construction.
virtual void initialize() PURE;

// Network::TransportSocketFactory
Network::TransportSocketPtr
createTransportSocket(Network::TransportSocketOptionsConstSharedPtr /*options*/) const override {
PANIC("not implemented");
}
bool implementsSecureTransport() const override { return true; }
bool supportsAlpn() const override { return true; }

protected:
virtual void onSecretUpdated() PURE;
QuicTransportSocketFactoryStats stats_;
};

// TODO(danzh): when implement ProofSource, examine of it's necessary to
// differentiate server and client side context config.
class QuicServerTransportSocketFactory : public QuicTransportSocketFactoryBase {
class QuicServerTransportSocketFactory : public Network::DownstreamTransportSocketFactory,
public QuicTransportSocketFactoryBase {
public:
QuicServerTransportSocketFactory(bool enable_early_data, Stats::Scope& store,
Ssl::ServerContextConfigPtr config)
: QuicTransportSocketFactoryBase(store, "server"), config_(std::move(config)),
enable_early_data_(enable_early_data) {}

// Network::DownstreamTransportSocketFactory
Network::TransportSocketPtr createDownstreamTransportSocket() const override {
PANIC("not implemented");
}
bool implementsSecureTransport() const override { return true; }

void initialize() override {
config_->setSecretUpdateCallback([this]() {
// The callback also updates config_ with the new secret.
Expand All @@ -87,7 +87,6 @@ class QuicServerTransportSocketFactory : public QuicTransportSocketFactoryBase {
}

bool earlyDataEnabled() const { return enable_early_data_; }
absl::string_view defaultServerNameIndication() const override { return ""; }

protected:
void onSecretUpdated() override { stats_.context_config_update_by_sds_.inc(); }
Expand All @@ -97,13 +96,16 @@ class QuicServerTransportSocketFactory : public QuicTransportSocketFactoryBase {
bool enable_early_data_;
};

class QuicClientTransportSocketFactory : public QuicTransportSocketFactoryBase {
class QuicClientTransportSocketFactory : public Network::CommonUpstreamTransportSocketFactory,
public QuicTransportSocketFactoryBase {
public:
QuicClientTransportSocketFactory(
Ssl::ClientContextConfigPtr config,
Server::Configuration::TransportSocketFactoryContext& factory_context);

void initialize() override {}
bool implementsSecureTransport() const override { return true; }
bool supportsAlpn() const override { return true; }
absl::string_view defaultServerNameIndication() const override {
return clientContextConfig().serverNameIndication();
}
Expand Down Expand Up @@ -157,7 +159,7 @@ class QuicServerTransportSocketConfigFactory
public Server::Configuration::DownstreamTransportSocketConfigFactory {
public:
// Server::Configuration::DownstreamTransportSocketConfigFactory
Network::TransportSocketFactoryPtr
Network::DownstreamTransportSocketFactoryPtr
createTransportSocketFactory(const Protobuf::Message& config,
Server::Configuration::TransportSocketFactoryContext& context,
const std::vector<std::string>& server_names) override;
Expand All @@ -173,7 +175,7 @@ class QuicClientTransportSocketConfigFactory
public Server::Configuration::UpstreamTransportSocketConfigFactory {
public:
// Server::Configuration::UpstreamTransportSocketConfigFactory
Network::TransportSocketFactoryPtr createTransportSocketFactory(
Network::UpstreamTransportSocketFactoryPtr createTransportSocketFactory(
const Protobuf::Message& config,
Server::Configuration::TransportSocketFactoryContext& context) override;

Expand Down
2 changes: 1 addition & 1 deletion source/common/upstream/health_discovery_service.cc
Original file line number Diff line number Diff line change
Expand Up @@ -532,7 +532,7 @@ ProdClusterInfoFactory::createClusterInfo(const CreateClusterInfoParams& params)
params.validation_visitor_, params.api_, params.options_, params.access_log_manager_);

// TODO(JimmyCYJ): Support SDS for HDS cluster.
Network::TransportSocketFactoryPtr socket_factory =
Network::UpstreamTransportSocketFactoryPtr socket_factory =
Upstream::createTransportSocketFactory(params.cluster_, factory_context);
auto socket_matcher = std::make_unique<TransportSocketMatcherImpl>(
params.cluster_.transport_socket_matches(), factory_context, socket_factory, *scope);
Expand Down
2 changes: 1 addition & 1 deletion source/common/upstream/logical_host.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ class RealHostDescription : public HostDescription {
MetadataConstSharedPtr metadata() const override { return logical_host_->metadata(); }
void metadata(MetadataConstSharedPtr) override {}

Network::TransportSocketFactory& transportSocketFactory() const override {
Network::UpstreamTransportSocketFactory& transportSocketFactory() const override {
return logical_host_->transportSocketFactory();
}
const ClusterInfo& cluster() const override { return logical_host_->cluster(); }
Expand Down
2 changes: 1 addition & 1 deletion source/common/upstream/transport_socket_match_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ TransportSocketMatcherImpl::TransportSocketMatcherImpl(
const Protobuf::RepeatedPtrField<envoy::config::cluster::v3::Cluster::TransportSocketMatch>&
socket_matches,
Server::Configuration::TransportSocketFactoryContext& factory_context,
Network::TransportSocketFactoryPtr& default_factory, Stats::Scope& stats_scope)
Network::UpstreamTransportSocketFactoryPtr& default_factory, Stats::Scope& stats_scope)
: stats_scope_(stats_scope),
default_match_("default", std::move(default_factory), generateStats("default")) {
for (const auto& socket_match : socket_matches) {
Expand Down
6 changes: 3 additions & 3 deletions source/common/upstream/transport_socket_match_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ class TransportSocketMatcherImpl : public Logger::Loggable<Logger::Id::upstream>
public TransportSocketMatcher {
public:
struct FactoryMatch {
FactoryMatch(std::string match_name, Network::TransportSocketFactoryPtr socket_factory,
FactoryMatch(std::string match_name, Network::UpstreamTransportSocketFactoryPtr socket_factory,
TransportSocketMatchStats match_stats)
: name(std::move(match_name)), factory(std::move(socket_factory)), stats(match_stats) {}
const std::string name;
Network::TransportSocketFactoryPtr factory;
Network::UpstreamTransportSocketFactoryPtr factory;
Config::Metadata::LabelSet label_set;
mutable TransportSocketMatchStats stats;
};
Expand All @@ -36,7 +36,7 @@ class TransportSocketMatcherImpl : public Logger::Loggable<Logger::Id::upstream>
const Protobuf::RepeatedPtrField<envoy::config::cluster::v3::Cluster::TransportSocketMatch>&
socket_matches,
Server::Configuration::TransportSocketFactoryContext& factory_context,
Network::TransportSocketFactoryPtr& default_factory, Stats::Scope& stats_scope);
Network::UpstreamTransportSocketFactoryPtr& default_factory, Stats::Scope& stats_scope);

MatchData resolve(const envoy::config::core::v3::Metadata* metadata) const override;

Expand Down
Loading