Coverage Report

Created: 2024-09-19 09:45

/proc/self/cwd/source/extensions/upstreams/http/config.h
Line
Count
Source
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
  static absl::StatusOr<std::shared_ptr<ProtocolOptionsConfigImpl>> createProtocolOptionsConfig(
30
      const envoy::extensions::upstreams::http::v3::HttpProtocolOptions& options,
31
      Server::Configuration::ServerFactoryContext& server_context);
32
  static absl::StatusOr<std::shared_ptr<ProtocolOptionsConfigImpl>> createProtocolOptionsConfig(
33
      const envoy::config::core::v3::Http1ProtocolOptions& http1_settings,
34
      const envoy::config::core::v3::Http2ProtocolOptions& http2_options,
35
      const envoy::config::core::v3::HttpProtocolOptions& common_options,
36
      const absl::optional<envoy::config::core::v3::UpstreamHttpProtocolOptions> upstream_options,
37
      bool use_downstream_protocol, bool use_http2,
38
      ProtobufMessage::ValidationVisitor& validation_visitor);
39
40
  // Given the supplied cluster config, and protocol options configuration,
41
  // returns a unit64_t representing the enabled Upstream::ClusterInfo::Features.
42
  static uint64_t parseFeatures(const envoy::config::cluster::v3::Cluster& config,
43
                                const ProtocolOptionsConfigImpl& options);
44
45
  const Envoy::Http::Http1Settings http1_settings_;
46
  const envoy::config::core::v3::Http2ProtocolOptions http2_options_;
47
  const envoy::config::core::v3::Http3ProtocolOptions http3_options_{};
48
  const envoy::config::core::v3::HttpProtocolOptions common_http_protocol_options_;
49
  const absl::optional<envoy::config::core::v3::UpstreamHttpProtocolOptions>
50
      upstream_http_protocol_options_;
51
52
  using FiltersList = Protobuf::RepeatedPtrField<
53
      envoy::extensions::filters::network::http_connection_manager::v3::HttpFilter>;
54
  const FiltersList http_filters_;
55
  const absl::optional<const envoy::config::core::v3::AlternateProtocolsCacheOptions>
56
      alternate_protocol_cache_options_;
57
  const Envoy::Http::HeaderValidatorFactoryPtr header_validator_factory_;
58
  const bool use_downstream_protocol_{};
59
  const bool use_http2_{};
60
  const bool use_http3_{};
61
  const bool use_alpn_{};
62
63
private:
64
  ProtocolOptionsConfigImpl(
65
      const envoy::extensions::upstreams::http::v3::HttpProtocolOptions& options,
66
      envoy::config::core::v3::Http2ProtocolOptions validated_h2_options,
67
      Envoy::Http::HeaderValidatorFactoryPtr&& header_validator_factory,
68
      absl::optional<const envoy::config::core::v3::AlternateProtocolsCacheOptions> cache_options,
69
      Server::Configuration::ServerFactoryContext& server_context);
70
  // Constructor for legacy (deprecated) config.
71
  ProtocolOptionsConfigImpl(
72
      const envoy::config::core::v3::Http1ProtocolOptions& http1_settings,
73
      const envoy::config::core::v3::Http2ProtocolOptions& validated_http2_options,
74
      const envoy::config::core::v3::HttpProtocolOptions& common_options,
75
      const absl::optional<envoy::config::core::v3::UpstreamHttpProtocolOptions> upstream_options,
76
      bool use_downstream_protocol, bool use_http2,
77
      ProtobufMessage::ValidationVisitor& validation_visitor);
78
};
79
80
class ProtocolOptionsConfigFactory : public Server::Configuration::ProtocolOptionsFactory {
81
public:
82
  absl::StatusOr<Upstream::ProtocolOptionsConfigConstSharedPtr> createProtocolOptionsConfig(
83
      const Protobuf::Message& config,
84
1.54k
      Server::Configuration::ProtocolOptionsFactoryContext& context) override {
85
1.54k
    const auto& typed_config = MessageUtil::downcastAndValidate<
86
1.54k
        const envoy::extensions::upstreams::http::v3::HttpProtocolOptions&>(
87
1.54k
        config, context.messageValidationVisitor());
88
1.54k
    return ProtocolOptionsConfigImpl::createProtocolOptionsConfig(typed_config,
89
1.54k
                                                                  context.serverFactoryContext());
90
1.54k
  }
91
92
236
  std::string category() const override { return "envoy.upstream_options"; }
93
4.82k
  std::string name() const override {
94
4.82k
    return "envoy.extensions.upstreams.http.v3.HttpProtocolOptions";
95
4.82k
  }
96
24
  ProtobufTypes::MessagePtr createEmptyConfigProto() override {
97
24
    return std::make_unique<envoy::extensions::upstreams::http::v3::HttpProtocolOptions>();
98
24
  }
99
1.54k
  ProtobufTypes::MessagePtr createEmptyProtocolOptionsProto() override {
100
1.54k
    return std::make_unique<envoy::extensions::upstreams::http::v3::HttpProtocolOptions>();
101
1.54k
  }
102
};
103
104
DECLARE_FACTORY(ProtocolOptionsConfigFactory);
105
106
} // namespace Http
107
} // namespace Upstreams
108
} // namespace Extensions
109
} // namespace Envoy