diff --git a/contrib/network/connection_balance/dlb/source/BUILD b/contrib/network/connection_balance/dlb/source/BUILD index a811971c30549..4dbf6c997a271 100644 --- a/contrib/network/connection_balance/dlb/source/BUILD +++ b/contrib/network/connection_balance/dlb/source/BUILD @@ -44,7 +44,7 @@ envoy_cc_contrib_extension( "//source/common/common:logger_lib", "//source/common/network:connection_balancer_lib", "//source/common/protobuf:utility_lib", - "//source/server:active_tcp_listener", + "//source/extensions/listener_managers/listener_manager:active_tcp_listener", "@envoy_api//contrib/envoy/extensions/network/connection_balance/dlb/v3alpha:pkg_cc_proto", ] + select({ "//bazel:linux_x86_64": [ diff --git a/contrib/network/connection_balance/dlb/source/connection_balancer_impl.h b/contrib/network/connection_balance/dlb/source/connection_balancer_impl.h index 2e4590cc70432..adeb440b65f96 100644 --- a/contrib/network/connection_balance/dlb/source/connection_balancer_impl.h +++ b/contrib/network/connection_balance/dlb/source/connection_balancer_impl.h @@ -10,7 +10,7 @@ #include "source/common/api/os_sys_calls_impl.h" #include "source/common/network/connection_balancer_impl.h" #include "source/common/protobuf/protobuf.h" -#include "source/server/active_tcp_listener.h" +#include "source/extensions/listener_managers/listener_manager/active_tcp_listener.h" #include "contrib/envoy/extensions/network/connection_balance/dlb/v3alpha/dlb.pb.h" #include "contrib/envoy/extensions/network/connection_balance/dlb/v3alpha/dlb.pb.validate.h" diff --git a/source/common/quic/active_quic_listener.h b/source/common/quic/active_quic_listener.h index a79315081378f..3ea921280ae6c 100644 --- a/source/common/quic/active_quic_listener.h +++ b/source/common/quic/active_quic_listener.h @@ -12,7 +12,6 @@ #include "source/common/quic/envoy_quic_proof_source_factory_interface.h" #include "source/common/runtime/runtime_protos.h" #include "source/server/active_udp_listener.h" -#include "source/server/connection_handler_impl.h" #include "quiche/quic/load_balancer/load_balancer_encoder.h" diff --git a/source/extensions/bootstrap/internal_listener/BUILD b/source/extensions/bootstrap/internal_listener/BUILD index 30f003f9e72b3..b5d4d9d6535bf 100644 --- a/source/extensions/bootstrap/internal_listener/BUILD +++ b/source/extensions/bootstrap/internal_listener/BUILD @@ -98,7 +98,7 @@ envoy_cc_library( "//source/common/stats:timespan_lib", "//source/common/stream_info:stream_info_lib", "//source/extensions/io_socket/user_space:config", - "//source/server:active_stream_listener_base", - "//source/server:active_tcp_listener", + "//source/extensions/listener_managers/listener_manager:active_stream_listener_base", + "//source/extensions/listener_managers/listener_manager:active_tcp_listener", ], ) diff --git a/source/extensions/bootstrap/internal_listener/active_internal_listener.cc b/source/extensions/bootstrap/internal_listener/active_internal_listener.cc index 9080807c89db1..7d71d246be792 100644 --- a/source/extensions/bootstrap/internal_listener/active_internal_listener.cc +++ b/source/extensions/bootstrap/internal_listener/active_internal_listener.cc @@ -6,7 +6,7 @@ #include "source/common/network/address_impl.h" #include "source/common/stats/timespan_impl.h" #include "source/extensions/io_socket/user_space/io_handle.h" -#include "source/server/active_stream_listener_base.h" +#include "source/extensions/listener_managers/listener_manager/active_stream_listener_base.h" namespace Envoy { namespace Extensions { diff --git a/source/extensions/bootstrap/internal_listener/active_internal_listener.h b/source/extensions/bootstrap/internal_listener/active_internal_listener.h index 85c37e3670f4a..8daf183639d07 100644 --- a/source/extensions/bootstrap/internal_listener/active_internal_listener.h +++ b/source/extensions/bootstrap/internal_listener/active_internal_listener.h @@ -18,7 +18,7 @@ #include "source/common/common/linked_object.h" #include "source/common/common/non_copyable.h" #include "source/common/stream_info/stream_info_impl.h" -#include "source/server/active_stream_listener_base.h" +#include "source/extensions/listener_managers/listener_manager/active_stream_listener_base.h" #include "spdlog/spdlog.h" diff --git a/source/extensions/listener_managers/listener_manager/BUILD b/source/extensions/listener_managers/listener_manager/BUILD index 64ce24108874a..e5dcae1193ceb 100644 --- a/source/extensions/listener_managers/listener_manager/BUILD +++ b/source/extensions/listener_managers/listener_manager/BUILD @@ -28,6 +28,7 @@ envoy_cc_extension( "//test:__subpackages__", ], deps = [ + ":connection_handler_lib", "//source/server:listener_manager_factory_lib", "//source/server:api_listener_lib", ":active_raw_udp_listener_config", @@ -91,8 +92,8 @@ envoy_cc_library( "//test:__subpackages__", ], deps = [ + ":connection_handler_lib", "//envoy/registry", - "//source/server:connection_handler_lib", ], ) @@ -153,3 +154,139 @@ envoy_cc_library( "@envoy_api//envoy/service/discovery/v3:pkg_cc_proto", ], ) + +envoy_cc_extension( + name = "connection_handler_lib", + srcs = ["connection_handler_impl.cc"], + hdrs = [ + "connection_handler_impl.h", + ], + # core code. + extra_visibility = [ + "//test:__subpackages__", + ], + deps = [ + "active_tcp_listener", + "//envoy/common:time_interface", + "//envoy/event:deferred_deletable", + "//envoy/event:dispatcher_interface", + "//envoy/network:client_connection_factory", + "//envoy/network:connection_handler_interface", + "//envoy/network:connection_interface", + "//envoy/network:filter_interface", + "//envoy/network:listen_socket_interface", + "//envoy/network:listener_interface", + "//envoy/runtime:runtime_interface", + "//envoy/server:listener_manager_interface", + "//envoy/stats:timespan_interface", + "//source/common/common:linked_object", + "//source/common/common:non_copyable", + "//source/common/event:deferred_task", + "//source/common/network:address_lib", + "//source/common/network:connection_lib", + "//source/common/stream_info:stream_info_lib", + "//source/server:active_udp_listener", + "//source/server:listener_manager_factory_lib", + ], +) + +envoy_cc_library( + name = "active_tcp_listener", + srcs = ["active_tcp_listener.cc"], + hdrs = [ + "active_tcp_listener.h", + ], + deps = [ + ":active_stream_listener_base", + ":active_tcp_socket", + "//envoy/common:time_interface", + "//envoy/event:deferred_deletable", + "//envoy/event:dispatcher_interface", + "//envoy/network:connection_handler_interface", + "//envoy/network:connection_interface", + "//envoy/network:listen_socket_interface", + "//envoy/network:listener_interface", + "//envoy/server:listener_manager_interface", + "//source/common/common:assert_lib", + "//source/common/common:linked_object", + "//source/common/network:connection_lib", + "//source/common/stats:timespan_lib", + "//source/server:active_listener_base", + ], +) + +envoy_cc_library( + name = "active_tcp_listener_headers", + hdrs = [ + "active_stream_listener_base.h", + "active_tcp_listener.h", + "active_tcp_socket.h", + ], + deps = [ + "//envoy/common:time_interface", + "//envoy/event:deferred_deletable", + "//envoy/event:dispatcher_interface", + "//envoy/event:timer_interface", + "//envoy/network:connection_handler_interface", + "//envoy/network:connection_interface", + "//envoy/network:filter_interface", + "//envoy/network:listen_socket_interface", + "//envoy/network:listener_interface", + "//envoy/server:listener_manager_interface", + "//source/common/common:assert_lib", + "//source/common/common:linked_object", + "//source/common/network:connection_lib", + "//source/common/stats:timespan_lib", + "//source/server:active_listener_base", + ], +) + +envoy_cc_library( + name = "active_tcp_socket", + srcs = ["active_tcp_socket.cc"], + hdrs = [ + "active_tcp_socket.h", + ], + deps = [ + ":active_tcp_listener_headers", + "//envoy/common:time_interface", + "//envoy/event:deferred_deletable", + "//envoy/event:dispatcher_interface", + "//envoy/event:timer_interface", + "//envoy/network:connection_handler_interface", + "//envoy/network:connection_interface", + "//envoy/network:filter_interface", + "//envoy/network:listen_socket_interface", + "//envoy/network:listener_interface", + "//source/common/common:linked_object", + "//source/common/network:connection_lib", + "//source/common/network:listener_filter_buffer_lib", + "//source/common/stream_info:stream_info_lib", + "//source/server:active_listener_base", + ], +) + +envoy_cc_library( + name = "active_stream_listener_base", + srcs = ["active_stream_listener_base.cc"], + hdrs = [ + "active_stream_listener_base.h", + ], + deps = [ + ":active_tcp_listener_headers", + "//envoy/common:time_interface", + "//envoy/event:deferred_deletable", + "//envoy/event:dispatcher_interface", + "//envoy/event:timer_interface", + "//envoy/network:connection_handler_interface", + "//envoy/network:connection_interface", + "//envoy/network:filter_interface", + "//envoy/network:listen_socket_interface", + "//envoy/network:listener_interface", + "//envoy/stream_info:stream_info_interface", + "//source/common/common:linked_object", + "//source/common/network:connection_lib", + "//source/common/network:listener_filter_buffer_lib", + "//source/server:active_listener_base", + ], +) diff --git a/source/extensions/listener_managers/listener_manager/active_raw_udp_listener_config.cc b/source/extensions/listener_managers/listener_manager/active_raw_udp_listener_config.cc index 265926b9228f2..d14559914ad9f 100644 --- a/source/extensions/listener_managers/listener_manager/active_raw_udp_listener_config.cc +++ b/source/extensions/listener_managers/listener_manager/active_raw_udp_listener_config.cc @@ -3,8 +3,8 @@ #include #include +#include "source/extensions/listener_managers/listener_manager/connection_handler_impl.h" #include "source/server/active_udp_listener.h" -#include "source/server/connection_handler_impl.h" namespace Envoy { namespace Server { diff --git a/source/server/active_stream_listener_base.cc b/source/extensions/listener_managers/listener_manager/active_stream_listener_base.cc similarity index 98% rename from source/server/active_stream_listener_base.cc rename to source/extensions/listener_managers/listener_manager/active_stream_listener_base.cc index a33a3e9bde179..e07eb5d74c7e7 100644 --- a/source/server/active_stream_listener_base.cc +++ b/source/extensions/listener_managers/listener_manager/active_stream_listener_base.cc @@ -1,4 +1,4 @@ -#include "source/server/active_stream_listener_base.h" +#include "source/extensions/listener_managers/listener_manager/active_stream_listener_base.h" #include "envoy/network/filter.h" diff --git a/source/server/active_stream_listener_base.h b/source/extensions/listener_managers/listener_manager/active_stream_listener_base.h similarity index 99% rename from source/server/active_stream_listener_base.h rename to source/extensions/listener_managers/listener_manager/active_stream_listener_base.h index b88b0adb6e757..7ec1c509d5755 100644 --- a/source/server/active_stream_listener_base.h +++ b/source/extensions/listener_managers/listener_manager/active_stream_listener_base.h @@ -14,8 +14,8 @@ #include "envoy/stream_info/stream_info.h" #include "source/common/common/linked_object.h" +#include "source/extensions/listener_managers/listener_manager/active_tcp_socket.h" #include "source/server/active_listener_base.h" -#include "source/server/active_tcp_socket.h" namespace Envoy { namespace Server { diff --git a/source/server/active_tcp_listener.cc b/source/extensions/listener_managers/listener_manager/active_tcp_listener.cc similarity index 98% rename from source/server/active_tcp_listener.cc rename to source/extensions/listener_managers/listener_manager/active_tcp_listener.cc index 66a5f604bd106..6e8a9f4e03a52 100644 --- a/source/server/active_tcp_listener.cc +++ b/source/extensions/listener_managers/listener_manager/active_tcp_listener.cc @@ -1,4 +1,4 @@ -#include "source/server/active_tcp_listener.h" +#include "source/extensions/listener_managers/listener_manager/active_tcp_listener.h" #include diff --git a/source/server/active_tcp_listener.h b/source/extensions/listener_managers/listener_manager/active_tcp_listener.h similarity index 95% rename from source/server/active_tcp_listener.h rename to source/extensions/listener_managers/listener_manager/active_tcp_listener.h index 23dfe3a3228fc..518801744ff4a 100644 --- a/source/server/active_tcp_listener.h +++ b/source/extensions/listener_managers/listener_manager/active_tcp_listener.h @@ -5,9 +5,9 @@ #include "envoy/stream_info/stream_info.h" #include "source/common/common/linked_object.h" +#include "source/extensions/listener_managers/listener_manager/active_stream_listener_base.h" +#include "source/extensions/listener_managers/listener_manager/active_tcp_socket.h" #include "source/server/active_listener_base.h" -#include "source/server/active_stream_listener_base.h" -#include "source/server/active_tcp_socket.h" namespace Envoy { namespace Server { diff --git a/source/server/active_tcp_socket.cc b/source/extensions/listener_managers/listener_manager/active_tcp_socket.cc similarity index 97% rename from source/server/active_tcp_socket.cc rename to source/extensions/listener_managers/listener_manager/active_tcp_socket.cc index c6804531cafee..c159b7292d7b5 100644 --- a/source/server/active_tcp_socket.cc +++ b/source/extensions/listener_managers/listener_manager/active_tcp_socket.cc @@ -1,9 +1,9 @@ -#include "source/server/active_tcp_socket.h" +#include "source/extensions/listener_managers/listener_manager/active_tcp_socket.h" #include "envoy/network/filter.h" #include "source/common/stream_info/stream_info_impl.h" -#include "source/server/active_stream_listener_base.h" +#include "source/extensions/listener_managers/listener_manager/active_stream_listener_base.h" namespace Envoy { namespace Server { diff --git a/source/server/active_tcp_socket.h b/source/extensions/listener_managers/listener_manager/active_tcp_socket.h similarity index 100% rename from source/server/active_tcp_socket.h rename to source/extensions/listener_managers/listener_manager/active_tcp_socket.h diff --git a/source/server/connection_handler_impl.cc b/source/extensions/listener_managers/listener_manager/connection_handler_impl.cc similarity index 98% rename from source/server/connection_handler_impl.cc rename to source/extensions/listener_managers/listener_manager/connection_handler_impl.cc index 31aa11eb7a20f..1ed9642d9db10 100644 --- a/source/server/connection_handler_impl.cc +++ b/source/extensions/listener_managers/listener_manager/connection_handler_impl.cc @@ -1,4 +1,4 @@ -#include "source/server/connection_handler_impl.h" +#include "source/extensions/listener_managers/listener_manager/connection_handler_impl.h" #include @@ -10,7 +10,8 @@ #include "source/common/network/address_impl.h" #include "source/common/network/utility.h" #include "source/common/runtime/runtime_features.h" -#include "source/server/active_tcp_listener.h" +#include "source/extensions/listener_managers/listener_manager/active_tcp_listener.h" +#include "source/server/listener_manager_factory.h" namespace Envoy { namespace Server { @@ -374,5 +375,7 @@ ConnectionHandlerImpl::getBalancedHandlerByAddress(const Network::Address::Insta : absl::nullopt; } +REGISTER_FACTORY(ConnectionHandlerFactoryImpl, ConnectionHandlerFactory); + } // namespace Server } // namespace Envoy diff --git a/source/server/connection_handler_impl.h b/source/extensions/listener_managers/listener_manager/connection_handler_impl.h similarity index 91% rename from source/server/connection_handler_impl.h rename to source/extensions/listener_managers/listener_manager/connection_handler_impl.h index 735023b4a869f..a8460fe53b05e 100644 --- a/source/server/connection_handler_impl.h +++ b/source/extensions/listener_managers/listener_manager/connection_handler_impl.h @@ -13,6 +13,7 @@ #include "envoy/stats/scope.h" #include "source/common/common/non_copyable.h" +#include "source/server/listener_manager_factory.h" #include "spdlog/spdlog.h" @@ -27,9 +28,7 @@ class ActiveInternalListener; * Server side connection handler. This is used both by workers as well as the * main thread for non-threaded listeners. */ -class ConnectionHandlerImpl : public Network::TcpConnectionHandler, - public Network::UdpConnectionHandler, - public Network::InternalListenerManager, +class ConnectionHandlerImpl : public ConnectionHandler, NonCopyable, Logger::Loggable { public: @@ -154,5 +153,18 @@ class ConnectionHandlerImpl : public Network::TcpConnectionHandler, UnitFloat listener_reject_fraction_{UnitFloat::min()}; }; +class ConnectionHandlerFactoryImpl : public ConnectionHandlerFactory { +public: + std::unique_ptr + createConnectionHandler(Event::Dispatcher& dispatcher, + absl::optional worker_index) override { + return std::make_unique(dispatcher, worker_index); + } + + std::string name() const override { return "envoy.connection_handler.default"; } +}; + +DECLARE_FACTORY(ConnectionHandlerFactoryImpl); + } // namespace Server } // namespace Envoy diff --git a/source/server/BUILD b/source/server/BUILD index 942adf83697ff..5c085701b5edf 100644 --- a/source/server/BUILD +++ b/source/server/BUILD @@ -61,44 +61,6 @@ envoy_cc_library( ], ) -envoy_cc_library( - name = "connection_handler_lib", - deps = [ - ":active_tcp_listener", - ":active_udp_listener", - ":connection_handler_impl", - "//envoy/network:client_connection_factory", - "//source/common/network:address_lib", - ], -) - -envoy_cc_library( - name = "connection_handler_impl", - srcs = ["connection_handler_impl.cc"], - hdrs = [ - "connection_handler_impl.h", - ], - deps = [ - ":active_tcp_listener", - "//envoy/common:time_interface", - "//envoy/event:deferred_deletable", - "//envoy/event:dispatcher_interface", - "//envoy/network:connection_handler_interface", - "//envoy/network:connection_interface", - "//envoy/network:filter_interface", - "//envoy/network:listen_socket_interface", - "//envoy/network:listener_interface", - "//envoy/runtime:runtime_interface", - "//envoy/server:listener_manager_interface", - "//envoy/stats:timespan_interface", - "//source/common/common:linked_object", - "//source/common/common:non_copyable", - "//source/common/event:deferred_task", - "//source/common/network:connection_lib", - "//source/common/stream_info:stream_info_lib", - ], -) - envoy_cc_library( name = "listener_stats", hdrs = [ @@ -123,31 +85,6 @@ envoy_cc_library( ], ) -envoy_cc_library( - name = "active_tcp_listener", - srcs = ["active_tcp_listener.cc"], - hdrs = [ - "active_tcp_listener.h", - ], - deps = [ - ":active_stream_listener_base", - ":active_tcp_socket", - "//envoy/common:time_interface", - "//envoy/event:deferred_deletable", - "//envoy/event:dispatcher_interface", - "//envoy/network:connection_handler_interface", - "//envoy/network:connection_interface", - "//envoy/network:listen_socket_interface", - "//envoy/network:listener_interface", - "//envoy/server:listener_manager_interface", - "//source/common/common:assert_lib", - "//source/common/common:linked_object", - "//source/common/network:connection_lib", - "//source/common/stats:timespan_lib", - "//source/server:active_listener_base", - ], -) - envoy_cc_library( name = "active_udp_listener", srcs = ["active_udp_listener.cc"], @@ -162,83 +99,8 @@ envoy_cc_library( "//envoy/network:listen_socket_interface", "//envoy/network:listener_interface", "//envoy/server:listener_manager_interface", - "//source/server:connection_handler_impl", - ], -) - -envoy_cc_library( - name = "active_tcp_listener_headers", - hdrs = [ - "active_stream_listener_base.h", - "active_tcp_listener.h", - "active_tcp_socket.h", - ], - deps = [ - ":active_listener_base", - "//envoy/common:time_interface", - "//envoy/event:deferred_deletable", - "//envoy/event:dispatcher_interface", - "//envoy/event:timer_interface", - "//envoy/network:connection_handler_interface", - "//envoy/network:connection_interface", - "//envoy/network:filter_interface", - "//envoy/network:listen_socket_interface", - "//envoy/network:listener_interface", - "//envoy/server:listener_manager_interface", - "//source/common/common:assert_lib", - "//source/common/common:linked_object", - "//source/common/network:connection_lib", - "//source/common/stats:timespan_lib", - ], -) - -envoy_cc_library( - name = "active_tcp_socket", - srcs = ["active_tcp_socket.cc"], - hdrs = [ - "active_tcp_socket.h", - ], - deps = [ - ":active_listener_base", - ":active_tcp_listener_headers", - "//envoy/common:time_interface", - "//envoy/event:deferred_deletable", - "//envoy/event:dispatcher_interface", - "//envoy/event:timer_interface", - "//envoy/network:connection_handler_interface", - "//envoy/network:connection_interface", - "//envoy/network:filter_interface", - "//envoy/network:listen_socket_interface", - "//envoy/network:listener_interface", - "//source/common/common:linked_object", - "//source/common/network:connection_lib", - "//source/common/network:listener_filter_buffer_lib", - "//source/common/stream_info:stream_info_lib", - ], -) - -envoy_cc_library( - name = "active_stream_listener_base", - srcs = ["active_stream_listener_base.cc"], - hdrs = [ - "active_stream_listener_base.h", - ], - deps = [ - ":active_listener_base", - ":active_tcp_listener_headers", - "//envoy/common:time_interface", - "//envoy/event:deferred_deletable", - "//envoy/event:dispatcher_interface", - "//envoy/event:timer_interface", - "//envoy/network:connection_handler_interface", - "//envoy/network:connection_interface", - "//envoy/network:filter_interface", - "//envoy/network:listen_socket_interface", - "//envoy/network:listener_interface", - "//envoy/stream_info:stream_info_interface", - "//source/common/common:linked_object", - "//source/common/network:connection_lib", - "//source/common/network:listener_filter_buffer_lib", + "//source/common/network:utility_lib", + "//source/server:active_listener_base", ], ) @@ -505,9 +367,9 @@ envoy_cc_library( name = "listener_manager_factory_lib", hdrs = ["listener_manager_factory.h"], deps = [ - ":worker_lib", "//envoy/server:factory_context_interface", "//envoy/server:listener_manager_interface", + "//envoy/server:worker_interface", "//source/common/quic:quic_stat_names_lib", ], ) @@ -523,7 +385,6 @@ envoy_cc_library( deps = [ ":api_listener_lib", ":configuration_lib", - ":connection_handler_lib", ":guarddog_lib", ":listener_hooks_lib", ":listener_manager_factory_lib", @@ -615,8 +476,8 @@ envoy_cc_library( srcs = ["worker_impl.cc"], hdrs = ["worker_impl.h"], deps = [ - ":connection_handler_lib", ":listener_hooks_lib", + ":listener_manager_factory_lib", "//envoy/api:api_interface", "//envoy/event:dispatcher_interface", "//envoy/event:timer_interface", @@ -627,6 +488,7 @@ envoy_cc_library( "//envoy/server:worker_interface", "//envoy/thread:thread_interface", "//envoy/thread_local:thread_local_interface", + "//source/common/config:utility_lib", ], ) diff --git a/source/server/listener_manager_factory.h b/source/server/listener_manager_factory.h index fb773e9936efc..c5e2805742a14 100644 --- a/source/server/listener_manager_factory.h +++ b/source/server/listener_manager_factory.h @@ -20,5 +20,18 @@ class ListenerManagerFactory : public Config::UntypedFactory { std::string category() const override { return "envoy.listener_manager_impl"; } }; +class ConnectionHandler : public Network::TcpConnectionHandler, + public Network::UdpConnectionHandler, + public Network::InternalListenerManager {}; + +class ConnectionHandlerFactory : public Config::UntypedFactory { +public: + virtual std::unique_ptr + createConnectionHandler(Event::Dispatcher& dispatcher, + absl::optional worker_index) PURE; + + std::string category() const override { return "envoy.connection_handler"; } +}; + } // namespace Server } // namespace Envoy diff --git a/source/server/server.cc b/source/server/server.cc index 60323126163db..8d864aedc5c8b 100644 --- a/source/server/server.cc +++ b/source/server/server.cc @@ -54,7 +54,6 @@ #include "source/common/upstream/cluster_manager_impl.h" #include "source/common/version/version.h" #include "source/server/configuration_impl.h" -#include "source/server/connection_handler_impl.h" #include "source/server/guarddog_impl.h" #include "source/server/listener_hooks.h" #include "source/server/listener_manager_factory.h" @@ -64,6 +63,19 @@ namespace Envoy { namespace Server { +namespace { +std::unique_ptr getHandler(Event::Dispatcher& dispatcher) { + + auto* factory = Config::Utility::getFactoryByName( + "envoy.connection_handler.default"); + if (factory) { + return factory->createConnectionHandler(dispatcher, absl::nullopt); + } + ENVOY_LOG_MISC(debug, "Unable to find envoy.connection_handler.default factory"); + return nullptr; +} + +} // namespace InstanceImpl::InstanceImpl( Init::Manager& init_manager, const Options& options, Event::TimeSystem& time_system, @@ -88,8 +100,8 @@ InstanceImpl::InstanceImpl( access_log_manager_(options.fileFlushIntervalMsec(), *api_, *dispatcher_, access_log_lock, store), singleton_manager_(new Singleton::ManagerImpl(api_->threadFactory())), - handler_(new ConnectionHandlerImpl(*dispatcher_, absl::nullopt)), - worker_factory_(thread_local_, *api_, hooks), terminated_(false), + handler_(getHandler(*dispatcher_)), worker_factory_(thread_local_, *api_, hooks), + terminated_(false), mutex_tracer_(options.mutexTracingEnabled() ? &Envoy::MutexTracerImpl::getOrCreateTracer() : nullptr), grpc_context_(store.symbolTable()), http_context_(store.symbolTable()), diff --git a/source/server/worker_impl.cc b/source/server/worker_impl.cc index 573fa1250d9f8..a25f1cfdfb9e0 100644 --- a/source/server/worker_impl.cc +++ b/source/server/worker_impl.cc @@ -9,16 +9,28 @@ #include "envoy/server/configuration.h" #include "envoy/thread_local/thread_local.h" -#include "source/server/connection_handler_impl.h" +#include "source/common/config/utility.h" +#include "source/server/listener_manager_factory.h" namespace Envoy { namespace Server { +std::unique_ptr getHandler(Event::Dispatcher& dispatcher, uint32_t index) { + + auto* factory = Config::Utility::getFactoryByName( + "envoy.connection_handler.default"); + if (factory) { + return factory->createConnectionHandler(dispatcher, index); + } + ENVOY_LOG_MISC(debug, "Unable to find envoy.connection_handler.default factory"); + return nullptr; +} + WorkerPtr ProdWorkerFactory::createWorker(uint32_t index, OverloadManager& overload_manager, const std::string& worker_name) { Event::DispatcherPtr dispatcher( api_.allocateDispatcher(worker_name, overload_manager.scaledTimerFactory())); - auto conn_handler = std::make_unique(*dispatcher, index); + auto conn_handler = getHandler(*dispatcher, index); return std::make_unique(tls_, hooks_, std::move(dispatcher), std::move(conn_handler), overload_manager, api_, stat_names_); } diff --git a/test/common/quic/BUILD b/test/common/quic/BUILD index 39c009c74aa13..4662a4aecc8ef 100644 --- a/test/common/quic/BUILD +++ b/test/common/quic/BUILD @@ -214,6 +214,7 @@ envoy_cc_test( "//source/common/quic:active_quic_listener_lib", "//source/common/quic:envoy_quic_utils_lib", "//source/common/quic:udp_gso_batch_writer_lib", + "//source/extensions/listener_managers/listener_manager:connection_handler_lib", "//source/extensions/quic/crypto_stream:envoy_quic_crypto_server_stream_lib", "//source/extensions/quic/proof_source:envoy_quic_proof_source_factory_impl_lib", "//source/server:configuration_lib", @@ -240,9 +241,9 @@ envoy_cc_test( "//source/common/quic:envoy_quic_dispatcher_lib", "//source/common/quic:envoy_quic_proof_source_lib", "//source/common/quic:envoy_quic_server_session_lib", + "//source/extensions/listener_managers/listener_manager:connection_handler_lib", "//source/extensions/quic/crypto_stream:envoy_quic_crypto_server_stream_lib", "//source/server:configuration_lib", - "//source/server:connection_handler_lib", "//test/mocks/event:event_mocks", "//test/mocks/http:http_mocks", "//test/mocks/network:network_mocks", diff --git a/test/common/quic/active_quic_listener_test.cc b/test/common/quic/active_quic_listener_test.cc index b234e28e5525a..e2d1056f5f92d 100644 --- a/test/common/quic/active_quic_listener_test.cc +++ b/test/common/quic/active_quic_listener_test.cc @@ -14,6 +14,7 @@ #include "source/common/quic/envoy_quic_utils.h" #include "source/common/quic/udp_gso_batch_writer.h" #include "source/common/runtime/runtime_impl.h" +#include "source/extensions/listener_managers/listener_manager/connection_handler_impl.h" #include "source/extensions/quic/crypto_stream/envoy_quic_crypto_server_stream.h" #include "source/extensions/quic/proof_source/envoy_quic_proof_source_factory_impl.h" #include "source/server/configuration_impl.h" diff --git a/test/common/quic/envoy_quic_dispatcher_test.cc b/test/common/quic/envoy_quic_dispatcher_test.cc index 348d488753c09..e2c8d7d905e29 100644 --- a/test/common/quic/envoy_quic_dispatcher_test.cc +++ b/test/common/quic/envoy_quic_dispatcher_test.cc @@ -10,9 +10,9 @@ #include "source/common/quic/envoy_quic_server_session.h" #include "source/common/quic/envoy_quic_utils.h" #include "source/common/quic/quic_transport_socket_factory.h" +#include "source/extensions/listener_managers/listener_manager/connection_handler_impl.h" #include "source/extensions/quic/crypto_stream/envoy_quic_crypto_server_stream.h" #include "source/server/configuration_impl.h" -#include "source/server/connection_handler_impl.h" #include "test/common/quic/test_proof_source.h" #include "test/common/quic/test_utils.h" diff --git a/test/extensions/bootstrap/internal_listener/BUILD b/test/extensions/bootstrap/internal_listener/BUILD index 79ac5bdf32661..205626b828542 100644 --- a/test/extensions/bootstrap/internal_listener/BUILD +++ b/test/extensions/bootstrap/internal_listener/BUILD @@ -76,8 +76,8 @@ envoy_extension_cc_test( "//source/common/stats:stats_lib", "//source/extensions/bootstrap/internal_listener:active_internal_listener", "//source/extensions/bootstrap/internal_listener:thread_local_registry", + "//source/extensions/listener_managers/listener_manager:connection_handler_lib", "//source/extensions/transport_sockets/raw_buffer:config", - "//source/server:connection_handler_lib", "//test/mocks/access_log:access_log_mocks", "//test/mocks/network:network_mocks", "//test/server:utility_lib", diff --git a/test/extensions/bootstrap/internal_listener/active_internal_listener_test.cc b/test/extensions/bootstrap/internal_listener/active_internal_listener_test.cc index 06aa3a2453b7b..5a8b1b71fb89b 100644 --- a/test/extensions/bootstrap/internal_listener/active_internal_listener_test.cc +++ b/test/extensions/bootstrap/internal_listener/active_internal_listener_test.cc @@ -10,7 +10,7 @@ #include "source/common/network/raw_buffer_socket.h" #include "source/extensions/bootstrap/internal_listener/active_internal_listener.h" #include "source/extensions/bootstrap/internal_listener/thread_local_registry.h" -#include "source/server/connection_handler_impl.h" +#include "source/extensions/listener_managers/listener_manager/connection_handler_impl.h" #include "test/mocks/access_log/mocks.h" #include "test/mocks/common.h" diff --git a/test/extensions/common/proxy_protocol/BUILD b/test/extensions/common/proxy_protocol/BUILD index 9acf8a7fd819a..33b8ac48892be 100644 --- a/test/extensions/common/proxy_protocol/BUILD +++ b/test/extensions/common/proxy_protocol/BUILD @@ -30,7 +30,7 @@ envoy_cc_test( "//source/common/network:listener_lib", "//source/extensions/common/proxy_protocol:proxy_protocol_header_lib", "//source/extensions/filters/listener/proxy_protocol:proxy_protocol_lib", - "//source/server:connection_handler_lib", + "//source/extensions/listener_managers/listener_manager:connection_handler_lib", "//test/mocks/buffer:buffer_mocks", "//test/mocks/network:network_mocks", "//test/test_common:environment_lib", diff --git a/test/extensions/common/proxy_protocol/proxy_protocol_regression_test.cc b/test/extensions/common/proxy_protocol/proxy_protocol_regression_test.cc index df975d003fc0c..4acd80e3317d2 100644 --- a/test/extensions/common/proxy_protocol/proxy_protocol_regression_test.cc +++ b/test/extensions/common/proxy_protocol/proxy_protocol_regression_test.cc @@ -7,7 +7,7 @@ #include "source/common/network/listen_socket_impl.h" #include "source/extensions/common/proxy_protocol/proxy_protocol_header.h" #include "source/extensions/filters/listener/proxy_protocol/proxy_protocol.h" -#include "source/server/connection_handler_impl.h" +#include "source/extensions/listener_managers/listener_manager/connection_handler_impl.h" #include "test/mocks/buffer/mocks.h" #include "test/mocks/network/mocks.h" diff --git a/test/extensions/filters/listener/common/fuzz/BUILD b/test/extensions/filters/listener/common/fuzz/BUILD index fdf01989250f7..3e21c9b2600d7 100644 --- a/test/extensions/filters/listener/common/fuzz/BUILD +++ b/test/extensions/filters/listener/common/fuzz/BUILD @@ -23,7 +23,7 @@ envoy_cc_test_library( ":listener_filter_fuzzer_proto_cc_proto", "//envoy/network:filter_interface", "//source/common/network:connection_balancer_lib", - "//source/server:connection_handler_lib", + "//source/extensions/listener_managers/listener_manager:connection_handler_lib", "//test/mocks/network:network_mocks", "//test/test_common:network_utility_lib", "//test/test_common:threadsafe_singleton_injector_lib", diff --git a/test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.h b/test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.h index 55f6cd66e93be..270d926c8b7d2 100644 --- a/test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.h +++ b/test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.h @@ -3,7 +3,7 @@ #include "envoy/network/filter.h" #include "source/common/network/connection_balancer_impl.h" -#include "source/server/connection_handler_impl.h" +#include "source/extensions/listener_managers/listener_manager/connection_handler_impl.h" #include "test/extensions/filters/listener/common/fuzz/listener_filter_fakes.h" #include "test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.pb.validate.h" diff --git a/test/extensions/filters/listener/proxy_protocol/BUILD b/test/extensions/filters/listener/proxy_protocol/BUILD index 2fb71747be6d7..5b91f073aca02 100644 --- a/test/extensions/filters/listener/proxy_protocol/BUILD +++ b/test/extensions/filters/listener/proxy_protocol/BUILD @@ -27,7 +27,7 @@ envoy_extension_cc_test( "//source/common/stats:stats_lib", "//source/extensions/filters/listener/proxy_protocol:config", "//source/extensions/filters/listener/proxy_protocol:proxy_protocol_lib", - "//source/server:connection_handler_lib", + "//source/extensions/listener_managers/listener_manager:connection_handler_lib", "//test/mocks/api:api_mocks", "//test/mocks/buffer:buffer_mocks", "//test/mocks/network:network_mocks", diff --git a/test/extensions/filters/listener/proxy_protocol/proxy_protocol_test.cc b/test/extensions/filters/listener/proxy_protocol/proxy_protocol_test.cc index e9e0cbe5be80b..facb23375b765 100644 --- a/test/extensions/filters/listener/proxy_protocol/proxy_protocol_test.cc +++ b/test/extensions/filters/listener/proxy_protocol/proxy_protocol_test.cc @@ -15,7 +15,7 @@ #include "source/common/network/tcp_listener_impl.h" #include "source/common/network/utility.h" #include "source/extensions/filters/listener/proxy_protocol/proxy_protocol.h" -#include "source/server/connection_handler_impl.h" +#include "source/extensions/listener_managers/listener_manager/connection_handler_impl.h" #include "test/mocks/api/mocks.h" #include "test/mocks/buffer/mocks.h" diff --git a/test/integration/BUILD b/test/integration/BUILD index 993cdc87960d8..2fccdfb1f8d9b 100644 --- a/test/integration/BUILD +++ b/test/integration/BUILD @@ -874,7 +874,7 @@ envoy_cc_test_library( "//source/common/network:utility_lib", "//source/common/stats:isolated_store_lib", "//source/extensions/listener_managers/listener_manager:active_raw_udp_listener_config", - "//source/server:connection_handler_lib", + "//source/extensions/listener_managers/listener_manager:connection_handler_lib", "//test/test_common:network_utility_lib", "//test/test_common:test_time_system_interface", "//test/test_common:utility_lib", @@ -1064,8 +1064,8 @@ envoy_cc_test_library( "//source/common/upstream:upstream_lib", "//source/extensions/access_loggers/file:config", "//source/extensions/access_loggers/stream:config", + "//source/extensions/listener_managers/listener_manager:connection_handler_lib", "//source/extensions/transport_sockets/raw_buffer:config", - "//source/server:connection_handler_lib", "//source/server:drain_manager_lib", "//source/server:hot_restart_nop_lib", "//source/server:listener_hooks_lib", diff --git a/test/integration/fake_upstream.cc b/test/integration/fake_upstream.cc index f17942f032221..783439df3d2a7 100644 --- a/test/integration/fake_upstream.cc +++ b/test/integration/fake_upstream.cc @@ -21,7 +21,7 @@ #include "quiche/quic/test_tools/quic_session_peer.h" #endif -#include "source/server/connection_handler_impl.h" +#include "source/extensions/listener_managers/listener_manager/connection_handler_impl.h" #include "test/test_common/network_utility.h" #include "test/test_common/utility.h" diff --git a/test/server/BUILD b/test/server/BUILD index 43a632743111d..5d68815ddbeb7 100644 --- a/test/server/BUILD +++ b/test/server/BUILD @@ -83,7 +83,7 @@ envoy_cc_test( "//source/common/network:udp_packet_writer_handler_lib", "//source/common/stats:stats_lib", "//source/extensions/listener_managers/listener_manager:active_raw_udp_listener_config", - "//source/server:connection_handler_lib", + "//source/extensions/listener_managers/listener_manager:connection_handler_lib", "//test/mocks/access_log:access_log_mocks", "//test/mocks/api:api_mocks", "//test/mocks/network:network_mocks", @@ -104,7 +104,7 @@ envoy_cc_test( "//source/common/network:address_lib", "//source/common/network:connection_balancer_lib", "//source/common/stats:stats_lib", - "//source/server:connection_handler_lib", + "//source/extensions/listener_managers/listener_manager:connection_handler_lib", "//test/mocks/network:io_handle_mocks", "//test/mocks/network:network_mocks", "//test/test_common:network_utility_lib", diff --git a/test/server/active_tcp_listener_test.cc b/test/server/active_tcp_listener_test.cc index 69a71454b75d5..7e2fc67c91351 100644 --- a/test/server/active_tcp_listener_test.cc +++ b/test/server/active_tcp_listener_test.cc @@ -8,7 +8,7 @@ #include "source/common/network/connection_balancer_impl.h" #include "source/common/network/raw_buffer_socket.h" #include "source/common/network/utility.h" -#include "source/server/active_tcp_listener.h" +#include "source/extensions/listener_managers/listener_manager/active_tcp_listener.h" #include "test/mocks/common.h" #include "test/mocks/network/io_handle.h" diff --git a/test/server/connection_handler_test.cc b/test/server/connection_handler_test.cc index f2378e1b0c568..f5d7c096c9e00 100644 --- a/test/server/connection_handler_test.cc +++ b/test/server/connection_handler_test.cc @@ -21,7 +21,7 @@ #include "source/common/network/udp_packet_writer_handler_impl.h" #include "source/common/network/utility.h" #include "source/extensions/listener_managers/listener_manager/active_raw_udp_listener_config.h" -#include "source/server/connection_handler_impl.h" +#include "source/extensions/listener_managers/listener_manager/connection_handler_impl.h" #include "test/mocks/access_log/mocks.h" #include "test/mocks/api/mocks.h"