Line data Source code
1 : #pragma once 2 : 3 : #include <chrono> 4 : #include <cstdint> 5 : #include <functional> 6 : #include <list> 7 : #include <map> 8 : #include <string> 9 : 10 : #include "envoy/config/core/v3/extension.pb.h" 11 : #include "envoy/config/core/v3/protocol.pb.h" 12 : #include "envoy/extensions/upstreams/http/v3/http_protocol_options.pb.h" 13 : #include "envoy/extensions/upstreams/http/v3/http_protocol_options.pb.validate.h" 14 : #include "envoy/http/filter.h" 15 : #include "envoy/http/header_validator.h" 16 : #include "envoy/server/filter_config.h" 17 : #include "envoy/server/transport_socket_config.h" 18 : 19 : #include "source/common/common/logger.h" 20 : #include "source/common/protobuf/message_validator_impl.h" 21 : 22 : namespace Envoy { 23 : namespace Extensions { 24 : namespace Upstreams { 25 : namespace Http { 26 : 27 : class ProtocolOptionsConfigImpl : public Upstream::ProtocolOptionsConfig { 28 : public: 29 : ProtocolOptionsConfigImpl( 30 : const envoy::extensions::upstreams::http::v3::HttpProtocolOptions& options, 31 : Server::Configuration::ServerFactoryContext& server_context); 32 : // Constructor for legacy (deprecated) config. 33 : ProtocolOptionsConfigImpl( 34 : const envoy::config::core::v3::Http1ProtocolOptions& http1_settings, 35 : const envoy::config::core::v3::Http2ProtocolOptions& http2_options, 36 : const envoy::config::core::v3::HttpProtocolOptions& common_options, 37 : const absl::optional<envoy::config::core::v3::UpstreamHttpProtocolOptions> upstream_options, 38 : bool use_downstream_protocol, bool use_http2, 39 : ProtobufMessage::ValidationVisitor& validation_visitor); 40 : 41 : // Given the supplied cluster config, and protocol options configuration, 42 : // returns a unit64_t representing the enabled Upstream::ClusterInfo::Features. 43 : static uint64_t parseFeatures(const envoy::config::cluster::v3::Cluster& config, 44 : const ProtocolOptionsConfigImpl& options); 45 : 46 : const Envoy::Http::Http1Settings http1_settings_; 47 : const envoy::config::core::v3::Http2ProtocolOptions http2_options_; 48 : const envoy::config::core::v3::Http3ProtocolOptions http3_options_{}; 49 : const envoy::config::core::v3::HttpProtocolOptions common_http_protocol_options_; 50 : const absl::optional<envoy::config::core::v3::UpstreamHttpProtocolOptions> 51 : upstream_http_protocol_options_; 52 : 53 : using FiltersList = Protobuf::RepeatedPtrField< 54 : envoy::extensions::filters::network::http_connection_manager::v3::HttpFilter>; 55 : const FiltersList http_filters_; 56 : const absl::optional<const envoy::config::core::v3::AlternateProtocolsCacheOptions> 57 : alternate_protocol_cache_options_; 58 : const Envoy::Http::HeaderValidatorFactoryPtr header_validator_factory_; 59 : const bool use_downstream_protocol_{}; 60 : const bool use_http2_{}; 61 : const bool use_http3_{}; 62 : const bool use_alpn_{}; 63 : }; 64 : 65 : class ProtocolOptionsConfigFactory : public Server::Configuration::ProtocolOptionsFactory { 66 : public: 67 : Upstream::ProtocolOptionsConfigConstSharedPtr createProtocolOptionsConfig( 68 : const Protobuf::Message& config, 69 119 : Server::Configuration::ProtocolOptionsFactoryContext& context) override { 70 119 : const auto& typed_config = MessageUtil::downcastAndValidate< 71 119 : const envoy::extensions::upstreams::http::v3::HttpProtocolOptions&>( 72 119 : config, context.messageValidationVisitor()); 73 119 : return std::make_shared<ProtocolOptionsConfigImpl>(typed_config, 74 119 : context.serverFactoryContext()); 75 119 : } 76 56 : std::string category() const override { return "envoy.upstream_options"; } 77 302 : std::string name() const override { 78 302 : return "envoy.extensions.upstreams.http.v3.HttpProtocolOptions"; 79 302 : } 80 24 : ProtobufTypes::MessagePtr createEmptyConfigProto() override { 81 24 : return std::make_unique<envoy::extensions::upstreams::http::v3::HttpProtocolOptions>(); 82 24 : } 83 119 : ProtobufTypes::MessagePtr createEmptyProtocolOptionsProto() override { 84 119 : return std::make_unique<envoy::extensions::upstreams::http::v3::HttpProtocolOptions>(); 85 119 : } 86 : }; 87 : 88 : DECLARE_FACTORY(ProtocolOptionsConfigFactory); 89 : 90 : } // namespace Http 91 : } // namespace Upstreams 92 : } // namespace Extensions 93 : } // namespace Envoy