@@ -134,6 +134,7 @@ public class DnsNameResolver extends InetNameResolver {
134
134
* Cache for {@link #doResolve(String, Promise)} and {@link #doResolveAll(String, Promise)}.
135
135
*/
136
136
private final DnsCache resolveCache ;
137
+ private final DnsCache authoritativeDnsServerCache ;
137
138
138
139
private final FastThreadLocal <DnsServerAddressStream > nameServerAddrStream =
139
140
new FastThreadLocal <DnsServerAddressStream >() {
@@ -153,8 +154,8 @@ protected DnsServerAddressStream initialValue() throws Exception {
153
154
private final HostsFileEntriesResolver hostsFileEntriesResolver ;
154
155
private final String [] searchDomains ;
155
156
private final int ndots ;
156
- private final boolean cnameFollowARecords ;
157
- private final boolean cnameFollowAAAARecords ;
157
+ private final boolean supportsAAAARecords ;
158
+ private final boolean supportsARecords ;
158
159
private final InternetProtocolFamily2 preferredAddressType ;
159
160
private final DnsRecordType [] resolveRecordTypes ;
160
161
private final boolean decodeIdn ;
@@ -178,9 +179,9 @@ protected DnsServerAddressStream initialValue() throws Exception {
178
179
* @param hostsFileEntriesResolver the {@link HostsFileEntriesResolver} used to check for local aliases
179
180
* @param searchDomains the list of search domain
180
181
* @param ndots the ndots value
181
- * @deprecated use {@link #DnsNameResolver(EventLoop, ChannelFactory, DnsServerAddresses, DnsCache, long ,
182
- * InternetProtocolFamily2[], boolean, int, boolean, int,
183
- * boolean, HostsFileEntriesResolver, String[], int, boolean)}
182
+ * @deprecated use {@link DnsNameResolver #DnsNameResolver(EventLoop, ChannelFactory, DnsServerAddresses, DnsCache,
183
+ * DnsCache, long, InternetProtocolFamily2[], boolean, int, boolean, int, boolean ,
184
+ * HostsFileEntriesResolver, String[], int, boolean)}
184
185
*/
185
186
@ Deprecated
186
187
public DnsNameResolver (
@@ -198,11 +199,10 @@ public DnsNameResolver(
198
199
HostsFileEntriesResolver hostsFileEntriesResolver ,
199
200
String [] searchDomains ,
200
201
int ndots ) {
201
- this (eventLoop , channelFactory , nameServerAddresses , resolveCache , queryTimeoutMillis , resolvedAddressTypes ,
202
- recursionDesired , maxQueriesPerResolve , traceEnabled , maxPayloadSize , optResourceEnabled ,
203
- hostsFileEntriesResolver , searchDomains , ndots , true );
202
+ this (eventLoop , channelFactory , nameServerAddresses , resolveCache , NoopDnsCache . INSTANCE , queryTimeoutMillis ,
203
+ resolvedAddressTypes , recursionDesired , maxQueriesPerResolve , traceEnabled , maxPayloadSize ,
204
+ optResourceEnabled , hostsFileEntriesResolver , searchDomains , ndots , true );
204
205
}
205
-
206
206
/**
207
207
* Creates a new DNS-based name resolver that communicates with the specified list of DNS servers.
208
208
*
@@ -212,6 +212,7 @@ public DnsNameResolver(
212
212
* this to determine which DNS server should be contacted for the next retry in case
213
213
* of failure.
214
214
* @param resolveCache the DNS resolved entries cache
215
+ * @param authoritativeDnsServerCache the cache used to find the authoritative DNS server for a domain
215
216
* @param queryTimeoutMillis timeout of each DNS query in millis
216
217
* @param resolvedAddressTypes list of the protocol families
217
218
* @param recursionDesired if recursion desired flag must be set
@@ -230,6 +231,7 @@ public DnsNameResolver(
230
231
ChannelFactory <? extends DatagramChannel > channelFactory ,
231
232
DnsServerAddresses nameServerAddresses ,
232
233
final DnsCache resolveCache ,
234
+ DnsCache authoritativeDnsServerCache ,
233
235
long queryTimeoutMillis ,
234
236
InternetProtocolFamily2 [] resolvedAddressTypes ,
235
237
boolean recursionDesired ,
@@ -241,7 +243,6 @@ public DnsNameResolver(
241
243
String [] searchDomains ,
242
244
int ndots ,
243
245
boolean decodeIdn ) {
244
-
245
246
super (eventLoop );
246
247
checkNotNull (channelFactory , "channelFactory" );
247
248
this .nameServerAddresses = checkNotNull (nameServerAddresses , "nameServerAddresses" );
@@ -254,22 +255,23 @@ public DnsNameResolver(
254
255
this .optResourceEnabled = optResourceEnabled ;
255
256
this .hostsFileEntriesResolver = checkNotNull (hostsFileEntriesResolver , "hostsFileEntriesResolver" );
256
257
this .resolveCache = checkNotNull (resolveCache , "resolveCache" );
258
+ this .authoritativeDnsServerCache = checkNotNull (authoritativeDnsServerCache , "authoritativeDnsServerCache" );
257
259
this .searchDomains = checkNotNull (searchDomains , "searchDomains" ).clone ();
258
260
this .ndots = checkPositiveOrZero (ndots , "ndots" );
259
261
this .decodeIdn = decodeIdn ;
260
262
261
- boolean cnameFollowARecords = false ;
262
- boolean cnameFollowAAAARecords = false ;
263
+ boolean supportsARecords = false ;
264
+ boolean supportsAAAARecords = false ;
263
265
// Use LinkedHashSet to maintain correct ordering.
264
266
Set <DnsRecordType > recordTypes = new LinkedHashSet <DnsRecordType >(resolvedAddressTypes .length );
265
267
for (InternetProtocolFamily2 family : resolvedAddressTypes ) {
266
268
switch (family ) {
267
269
case IPv4 :
268
- cnameFollowARecords = true ;
270
+ supportsARecords = true ;
269
271
recordTypes .add (DnsRecordType .A );
270
272
break ;
271
273
case IPv6 :
272
- cnameFollowAAAARecords = true ;
274
+ supportsAAAARecords = true ;
273
275
recordTypes .add (DnsRecordType .AAAA );
274
276
break ;
275
277
default :
@@ -278,9 +280,9 @@ public DnsNameResolver(
278
280
}
279
281
280
282
// One of both must be always true.
281
- assert cnameFollowARecords || cnameFollowAAAARecords ;
282
- this .cnameFollowAAAARecords = cnameFollowAAAARecords ;
283
- this .cnameFollowARecords = cnameFollowARecords ;
283
+ assert supportsARecords || supportsAAAARecords ;
284
+ this .supportsAAAARecords = supportsAAAARecords ;
285
+ this .supportsARecords = supportsARecords ;
284
286
resolveRecordTypes = recordTypes .toArray (new DnsRecordType [recordTypes .size ()]);
285
287
preferredAddressType = resolvedAddressTypes [0 ];
286
288
@@ -308,13 +310,25 @@ public void operationComplete(ChannelFuture future) throws Exception {
308
310
});
309
311
}
310
312
313
+ // Only here to override in unit tests.
314
+ int dnsRedirectPort (@ SuppressWarnings ("unused" ) InetAddress server ) {
315
+ return DnsServerAddresses .DNS_PORT ;
316
+ }
317
+
311
318
/**
312
319
* Returns the resolution cache.
313
320
*/
314
321
public DnsCache resolveCache () {
315
322
return resolveCache ;
316
323
}
317
324
325
+ /**
326
+ * Returns the cache used for authoritative DNS servers for a domain.
327
+ */
328
+ public DnsCache authoritativeDnsServerCache () {
329
+ return authoritativeDnsServerCache ;
330
+ }
331
+
318
332
/**
319
333
* Returns the timeout of each DNS query performed by this resolver (in milliseconds).
320
334
* The default value is 5 seconds.
@@ -344,12 +358,12 @@ final int ndots() {
344
358
return ndots ;
345
359
}
346
360
347
- final boolean isCnameFollowAAAARecords () {
348
- return cnameFollowAAAARecords ;
361
+ final boolean supportsAAAARecords () {
362
+ return supportsAAAARecords ;
349
363
}
350
364
351
- final boolean isCnameFollowARecords () {
352
- return cnameFollowARecords ;
365
+ final boolean supportsARecords () {
366
+ return supportsARecords ;
353
367
}
354
368
355
369
final InternetProtocolFamily2 preferredAddressType () {
0 commit comments