Line data Source code
1 : #pragma once 2 : 3 : #include <functional> 4 : #include <memory> 5 : #include <string> 6 : 7 : #include "envoy/common/pure.h" 8 : #include "envoy/config/typed_config.h" 9 : #include "envoy/router/router.h" 10 : #include "envoy/server/factory_context.h" 11 : 12 : namespace Envoy { 13 : namespace Router { 14 : 15 : /** 16 : * Interface class for creating cluster specifier plugin from related route entry. 17 : */ 18 : class ClusterSpecifierPlugin { 19 : public: 20 0 : virtual ~ClusterSpecifierPlugin() = default; 21 : 22 : /** 23 : * Create route from related route entry and request headers. 24 : * 25 : * @param parent related route. 26 : * @param header request headers. 27 : * @return RouteConstSharedPtr final route with specific cluster. 28 : */ 29 : virtual RouteConstSharedPtr route(RouteConstSharedPtr parent, 30 : const Http::RequestHeaderMap& header) const PURE; 31 : }; 32 : 33 : using ClusterSpecifierPluginSharedPtr = std::shared_ptr<ClusterSpecifierPlugin>; 34 : 35 : /* 36 : * Extension configuration for cluster specifier plugin factory. 37 : */ 38 : class ClusterSpecifierPluginFactoryConfig : public Envoy::Config::TypedFactory { 39 : public: 40 : /** 41 : * Creates a particular cluster specifier plugin factory implementation. 42 : * 43 : * @param config supplies the configuration for the cluster specifier plugin factory extension. 44 : * @return ClusterSpecifierPluginSharedPtr cluster specifier plugin use to create final route from 45 : * request headers. 46 : */ 47 : virtual ClusterSpecifierPluginSharedPtr 48 : createClusterSpecifierPlugin(const Protobuf::Message& config, 49 : Server::Configuration::CommonFactoryContext& context) PURE; 50 : 51 4 : std::string category() const override { return "envoy.router.cluster_specifier_plugin"; } 52 : }; 53 : 54 : using ClusterSpecifierPluginFactoryConfigPtr = std::unique_ptr<ClusterSpecifierPluginFactoryConfig>; 55 : 56 : } // namespace Router 57 : } // namespace Envoy