Fixed DNS to work with changes from netty 4.1.13
This commit is contained in:
parent
f091b7d604
commit
3461d511f9
@ -19,6 +19,7 @@ import java.net.IDN;
|
|||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.security.AccessControlException;
|
import java.security.AccessControlException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -45,7 +46,6 @@ import dorkbox.util.OS;
|
|||||||
import dorkbox.util.Property;
|
import dorkbox.util.Property;
|
||||||
import dorkbox.util.Version;
|
import dorkbox.util.Version;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.buffer.ByteBufHolder;
|
|
||||||
import io.netty.channel.AddressedEnvelope;
|
import io.netty.channel.AddressedEnvelope;
|
||||||
import io.netty.channel.EventLoopGroup;
|
import io.netty.channel.EventLoopGroup;
|
||||||
import io.netty.channel.ReflectiveChannelFactory;
|
import io.netty.channel.ReflectiveChannelFactory;
|
||||||
@ -54,18 +54,22 @@ import io.netty.channel.epoll.EpollEventLoopGroup;
|
|||||||
import io.netty.channel.nio.NioEventLoopGroup;
|
import io.netty.channel.nio.NioEventLoopGroup;
|
||||||
import io.netty.channel.oio.OioEventLoopGroup;
|
import io.netty.channel.oio.OioEventLoopGroup;
|
||||||
import io.netty.channel.socket.DatagramChannel;
|
import io.netty.channel.socket.DatagramChannel;
|
||||||
import io.netty.channel.socket.InternetProtocolFamily;
|
|
||||||
import io.netty.channel.socket.nio.NioDatagramChannel;
|
import io.netty.channel.socket.nio.NioDatagramChannel;
|
||||||
import io.netty.channel.socket.oio.OioDatagramChannel;
|
import io.netty.channel.socket.oio.OioDatagramChannel;
|
||||||
import io.netty.handler.codec.dns.DefaultDnsQuestion;
|
import io.netty.handler.codec.dns.DefaultDnsQuestion;
|
||||||
|
import io.netty.handler.codec.dns.DnsPtrRecord;
|
||||||
|
import io.netty.handler.codec.dns.DnsRawRecord;
|
||||||
import io.netty.handler.codec.dns.DnsRecord;
|
import io.netty.handler.codec.dns.DnsRecord;
|
||||||
import io.netty.handler.codec.dns.DnsRecordType;
|
import io.netty.handler.codec.dns.DnsRecordType;
|
||||||
import io.netty.handler.codec.dns.DnsResponse;
|
import io.netty.handler.codec.dns.DnsResponse;
|
||||||
import io.netty.handler.codec.dns.DnsResponseCode;
|
import io.netty.handler.codec.dns.DnsResponseCode;
|
||||||
import io.netty.handler.codec.dns.DnsSection;
|
import io.netty.handler.codec.dns.DnsSection;
|
||||||
|
import io.netty.resolver.ResolvedAddressTypes;
|
||||||
|
import io.netty.resolver.dns.DefaultDnsServerAddressStreamProvider;
|
||||||
import io.netty.resolver.dns.DnsNameResolver;
|
import io.netty.resolver.dns.DnsNameResolver;
|
||||||
import io.netty.resolver.dns.DnsNameResolverBuilder;
|
import io.netty.resolver.dns.DnsNameResolverBuilder;
|
||||||
import io.netty.resolver.dns.DnsServerAddresses;
|
import io.netty.resolver.dns.DnsServerAddressStreamProvider;
|
||||||
|
import io.netty.resolver.dns.SequentialDnsServerAddressStreamProvider;
|
||||||
import io.netty.util.concurrent.Future;
|
import io.netty.util.concurrent.Future;
|
||||||
import io.netty.util.internal.PlatformDependent;
|
import io.netty.util.internal.PlatformDependent;
|
||||||
|
|
||||||
@ -96,6 +100,9 @@ class DnsClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a list of all of the public DNS servers to query, when submitting DNS queries
|
||||||
|
*/
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
@Property
|
@Property
|
||||||
public static List<InetSocketAddress> DNS_SERVER_LIST = Arrays.asList(
|
public static List<InetSocketAddress> DNS_SERVER_LIST = Arrays.asList(
|
||||||
@ -108,6 +115,10 @@ class DnsClient {
|
|||||||
);
|
);
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a list of all of the BOX default DNS servers to query, when submitting DNS queries.
|
||||||
|
*/
|
||||||
|
public final static List<InetSocketAddress> DEFAULT_DNS_SERVER_LIST = DefaultDnsServerAddressStreamProvider.defaultAddressList();
|
||||||
|
|
||||||
private static final String ptrSuffix = ".in-addr.arpa";
|
private static final String ptrSuffix = ".in-addr.arpa";
|
||||||
|
|
||||||
@ -215,15 +226,19 @@ class DnsClient {
|
|||||||
channelType = NioDatagramChannel.class;
|
channelType = NioDatagramChannel.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
List<DnsServerAddressStreamProvider> list = new ArrayList<DnsServerAddressStreamProvider>(nameServerAddresses.size());
|
||||||
|
|
||||||
DnsNameResolverBuilder builder = new DnsNameResolverBuilder(eventLoopGroup.next());
|
DnsNameResolverBuilder builder = new DnsNameResolverBuilder(eventLoopGroup.next());
|
||||||
builder.channelFactory(new ReflectiveChannelFactory<DatagramChannel>(channelType))
|
builder.channelFactory(new ReflectiveChannelFactory<DatagramChannel>(channelType))
|
||||||
.channelType(channelType)
|
.channelType(channelType)
|
||||||
.ttl(minTtl, maxTtl)
|
.ttl(minTtl, maxTtl)
|
||||||
.resolvedAddressTypes(InternetProtocolFamily.IPv4) // for now, we only support ipv4
|
.resolvedAddressTypes(ResolvedAddressTypes.IPV4_ONLY) // for now, we only support ipv4
|
||||||
.nameServerAddresses(DnsServerAddresses.sequential(nameServerAddresses));
|
.nameServerProvider(new SequentialDnsServerAddressStreamProvider(nameServerAddresses));
|
||||||
|
|
||||||
resolver = builder.build();
|
resolver = builder.build();
|
||||||
|
|
||||||
|
|
||||||
// A/AAAA use the built-in decoder
|
// A/AAAA use the built-in decoder
|
||||||
|
|
||||||
customDecoders.put(DnsRecordType.MX, new MailExchangerDecoder());
|
customDecoders.put(DnsRecordType.MX, new MailExchangerDecoder());
|
||||||
@ -244,8 +259,7 @@ class DnsClient {
|
|||||||
*/
|
*/
|
||||||
public
|
public
|
||||||
String resolve(String hostname) {
|
String resolve(String hostname) {
|
||||||
if (resolver.resolvedAddressTypes()
|
if (resolver.resolvedAddressTypes() == ResolvedAddressTypes.IPV4_ONLY) {
|
||||||
.get(0) == InternetProtocolFamily.IPv4) {
|
|
||||||
return resolve(hostname, DnsRecordType.A);
|
return resolve(hostname, DnsRecordType.A);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -313,8 +327,13 @@ class DnsClient {
|
|||||||
for (int i = 0; i < answerCount; i++) {
|
for (int i = 0; i < answerCount; i++) {
|
||||||
final DnsRecord r = response.recordAt(DnsSection.ANSWER, i);
|
final DnsRecord r = response.recordAt(DnsSection.ANSWER, i);
|
||||||
if (r.type() == type) {
|
if (r.type() == type) {
|
||||||
ByteBuf recordContent = ((ByteBufHolder) r).content();
|
// can be either RAW or it will be a PTR record
|
||||||
return (T) decoder.decode(r, recordContent);
|
if (r instanceof DnsRawRecord) {
|
||||||
|
ByteBuf recordContent = ((DnsRawRecord) r).content();
|
||||||
|
return (T) decoder.decode(r, recordContent);
|
||||||
|
} else if (r instanceof DnsPtrRecord) {
|
||||||
|
return (T) ((DnsPtrRecord)r).hostname();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user