Line data Source code
1 : #include "source/common/upstream/default_local_address_selector.h" 2 : 3 : #include <string> 4 : 5 : namespace Envoy { 6 : namespace Upstream { 7 : 8 : DefaultUpstreamLocalAddressSelector::DefaultUpstreamLocalAddressSelector( 9 : std::vector<::Envoy::Upstream::UpstreamLocalAddress>&& upstream_local_addresses) 10 159 : : upstream_local_addresses_(std::move(upstream_local_addresses)) { 11 : // If bind config is not provided, we insert at least one 12 : // ``UpstreamLocalAddress`` with null address. 13 159 : ASSERT(!upstream_local_addresses_.empty()); 14 159 : } 15 : 16 : UpstreamLocalAddress DefaultUpstreamLocalAddressSelector::getUpstreamLocalAddressImpl( 17 173 : const Network::Address::InstanceConstSharedPtr& endpoint_address) const { 18 173 : for (auto& local_address : upstream_local_addresses_) { 19 173 : if (local_address.address_ == nullptr) { 20 173 : continue; 21 173 : } 22 : 23 : // Invalid addresses should have been rejected while parsing the bind 24 : // config. 25 0 : ASSERT(local_address.address_->ip() != nullptr); 26 0 : if (endpoint_address->ip() != nullptr && 27 0 : local_address.address_->ip()->version() == endpoint_address->ip()->version()) { 28 0 : return local_address; 29 0 : } 30 0 : } 31 : 32 173 : return upstream_local_addresses_[0]; 33 173 : } 34 : 35 : } // namespace Upstream 36 : } // namespace Envoy