1
#pragma once
2

            
3
#include <string>
4
#include <vector>
5

            
6
#include "envoy/upstream/upstream.h"
7

            
8
#include "absl/types/optional.h"
9

            
10
namespace Envoy {
11
namespace Upstream {
12

            
13
/**
14
 * Default implementation of UpstreamLocalAddressSelector.
15
 *
16
 * See :ref:`DefaultLocalAddressSelector
17
 * <envoy_v3_api_msg_config.upstream.local_address_selector.v3.DefaultLocalAddressSelector>`
18
 * for a description of the behavior of this implementation.
19
 */
20
class DefaultUpstreamLocalAddressSelector : public UpstreamLocalAddressSelectorBase {
21
public:
22
  DefaultUpstreamLocalAddressSelector(
23
      std::vector<::Envoy::Upstream::UpstreamLocalAddress>&& upstream_local_addresses);
24

            
25
private:
26
  // UpstreamLocalAddressSelectorBase
27
  UpstreamLocalAddress getUpstreamLocalAddressImpl(
28
      const Network::Address::InstanceConstSharedPtr& endpoint_address,
29
      OptRef<const Network::TransportSocketOptions> transport_socket_options) const override;
30

            
31
  std::vector<UpstreamLocalAddress> upstream_local_addresses_;
32
};
33

            
34
} // namespace Upstream
35
} // namespace Envoy