Line data Source code
1 : #pragma once 2 : 3 : #include "envoy/extensions/transport_sockets/internal_upstream/v3/internal_upstream.pb.h" 4 : #include "envoy/server/transport_socket_config.h" 5 : #include "envoy/stats/stats_macros.h" 6 : 7 : #include "source/common/common/logger.h" 8 : #include "source/extensions/io_socket/user_space/io_handle.h" 9 : #include "source/extensions/transport_sockets/common/passthrough.h" 10 : 11 : namespace Envoy { 12 : namespace Extensions { 13 : namespace TransportSockets { 14 : namespace InternalUpstream { 15 : 16 : #define ALL_INTERNAL_UPSTREAM_STATS(COUNTER) COUNTER(no_metadata) 17 : 18 : /** 19 : * Struct definition for all internal transport socket stats. @see stats_macros.h 20 : */ 21 : struct InternalUpstreamStats { 22 : ALL_INTERNAL_UPSTREAM_STATS(GENERATE_COUNTER_STRUCT) 23 : }; 24 : 25 : class Config : public Logger::Loggable<Logger::Id::upstream> { 26 : public: 27 : Config( 28 : const envoy::extensions::transport_sockets::internal_upstream::v3::InternalUpstreamTransport& 29 : config_proto, 30 : Stats::Scope& scope); 31 : std::unique_ptr<envoy::config::core::v3::Metadata> 32 : extractMetadata(const Upstream::HostDescriptionConstSharedPtr& host) const; 33 : 34 : private: 35 : enum class MetadataKind { Host, Cluster }; 36 : struct MetadataSource { 37 0 : MetadataSource(MetadataKind kind, const std::string& name) : kind_(kind), name_(name) {} 38 : const MetadataKind kind_; 39 : const std::string name_; 40 : }; 41 : InternalUpstreamStats stats_; 42 : std::vector<MetadataSource> metadata_sources_; 43 : }; 44 : 45 : class InternalSocketFactory : public PassthroughFactory { 46 : public: 47 : InternalSocketFactory( 48 : Server::Configuration::TransportSocketFactoryContext& context, 49 : const envoy::extensions::transport_sockets::internal_upstream::v3::InternalUpstreamTransport& 50 : config_proto, 51 : Network::UpstreamTransportSocketFactoryPtr&& inner_factory); 52 : 53 : Network::TransportSocketPtr 54 : createTransportSocket(Network::TransportSocketOptionsConstSharedPtr options, 55 : Upstream::HostDescriptionConstSharedPtr host) const override; 56 : 57 : private: 58 : const Config config_; 59 : }; 60 : 61 : } // namespace InternalUpstream 62 : } // namespace TransportSockets 63 : } // namespace Extensions 64 : } // namespace Envoy