Skip to content

Commit

Permalink
Reimplement DnsClient with DnsNameResolver
Browse files Browse the repository at this point in the history
  • Loading branch information
vietj committed Nov 6, 2023
1 parent 9e02ae0 commit 0b798d5
Show file tree
Hide file tree
Showing 13 changed files with 470 additions and 371 deletions.
38 changes: 37 additions & 1 deletion src/main/java/io/vertx/core/dns/DnsClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,13 @@
import io.vertx.core.Future;
import io.vertx.codegen.annotations.VertxGen;

import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.List;

import static io.vertx.core.dns.impl.DnsClientImpl.HEX_TABLE;

/**
* Provides a way to asynchronously lookup information from DNS servers.
* <p>
Expand Down Expand Up @@ -139,7 +144,38 @@ public interface DnsClient {
* @return a future notified with the resolved {@link String} if a record was found. If none was found it will
* get notified with {@code null}. If an error occurs it will get failed.
*/
Future<@Nullable String> reverseLookup(String ipaddress);
default Future<@Nullable String> reverseLookup(String ipaddress) {
try {
InetAddress inetAddress = InetAddress.getByName(ipaddress);
byte[] addr = inetAddress.getAddress();

StringBuilder reverseName = new StringBuilder(64);
if (inetAddress instanceof Inet4Address) {
// reverse ipv4 address
reverseName.append(addr[3] & 0xff).append(".")
.append(addr[2]& 0xff).append(".")
.append(addr[1]& 0xff).append(".")
.append(addr[0]& 0xff);
} else {
// It is an ipv 6 address time to reverse it
for (int i = 0; i < 16; i++) {
reverseName.append(HEX_TABLE[(addr[15 - i] & 0xf)]);
reverseName.append(".");
reverseName.append(HEX_TABLE[(addr[15 - i] >> 4) & 0xf]);
if (i != 15) {
reverseName.append(".");
}
}
}
reverseName.append(".in-addr.arpa");

return resolvePTR(reverseName.toString());
} catch (UnknownHostException e) {
// Should never happen as we work with ip addresses as input
// anyway just in case notify the handler
return Future.failedFuture(e);
}
}

/**
* Close the client.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public static DnsAddressResolverProvider create(VertxInternal vertx, AddressReso

private final VertxInternal vertx;
private final List<ResolverRegistration> resolvers = Collections.synchronizedList(new ArrayList<>());
private final DnsNameResolverBuilder dnsNameResolverBuilder;
private AddressResolverGroup<InetSocketAddress> resolverGroup;
private final List<InetSocketAddress> serverList = new ArrayList<>();
private final String hostsPath;
Expand Down Expand Up @@ -113,6 +114,9 @@ private DnsAddressResolverProvider(VertxInternal vertx, AddressResolverOptions o
builder.queryTimeoutMillis(options.getQueryTimeout());
builder.maxQueriesPerResolve(options.getMaxQueries());
builder.recursionDesired(options.getRdFlag());
builder.completeOncePreferredResolved(true);
builder.consolidateCacheSize(1024);
builder.ndots(1);
if (options.getSearchDomains() != null) {
builder.searchDomains(options.getSearchDomains());
int ndots = options.getNdots();
Expand All @@ -122,6 +126,7 @@ private DnsAddressResolverProvider(VertxInternal vertx, AddressResolverOptions o
builder.ndots(ndots);
}

this.dnsNameResolverBuilder = builder;
this.resolverGroup = new DnsAddressResolverGroup(builder) {
@Override
protected io.netty.resolver.AddressResolver<InetSocketAddress> newAddressResolver(EventLoop eventLoop, NameResolver<InetAddress> resolver) throws Exception {
Expand Down Expand Up @@ -168,6 +173,10 @@ InetAddress lookup(String inetHost, ResolvedAddressTypes resolvedAddressTypes) {
}
}

public DnsNameResolverBuilder getDnsNameResolverBuilder() {
return dnsNameResolverBuilder;
}

/**
* @return a list of DNS servers available to use
*/
Expand Down
Loading

0 comments on commit 0b798d5

Please sign in to comment.