1 /* 2 * Copyright 2017 The Netty Project 3 * 4 * The Netty Project licenses this file to you under the Apache License, 5 * version 2.0 (the "License"); you may not use this file except in compliance 6 * with the License. You may obtain a copy of the License at: 7 * 8 * https://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations 14 * under the License. 15 */ 16 package io.netty5.resolver.dns; 17 18 import java.util.List; 19 20 /** 21 * A {@link DnsServerAddressStreamProvider} which iterates through a collection of 22 * {@link DnsServerAddressStreamProvider} until the first non-{@code null} result is found. 23 */ 24 public final class MultiDnsServerAddressStreamProvider implements DnsServerAddressStreamProvider { 25 private final DnsServerAddressStreamProvider[] providers; 26 27 /** 28 * Create a new instance. 29 * @param providers The providers to use for DNS resolution. They will be queried in order. 30 */ 31 public MultiDnsServerAddressStreamProvider(List<DnsServerAddressStreamProvider> providers) { 32 this.providers = providers.toArray(new DnsServerAddressStreamProvider[0]); 33 } 34 35 /** 36 * Create a new instance. 37 * @param providers The providers to use for DNS resolution. They will be queried in order. 38 */ 39 public MultiDnsServerAddressStreamProvider(DnsServerAddressStreamProvider... providers) { 40 this.providers = providers.clone(); 41 } 42 43 @Override 44 public DnsServerAddressStream nameServerAddressStream(String hostname) { 45 for (DnsServerAddressStreamProvider provider : providers) { 46 DnsServerAddressStream stream = provider.nameServerAddressStream(hostname); 47 if (stream != null) { 48 return stream; 49 } 50 } 51 return null; 52 } 53 }