switch (ipVersionSetting) { case v4only: primaryTarget = getRandomIpv4RootServer(); break; case v6only: primaryTarget = getRandomIpv6RootServer(); break; case v4v6: primaryTarget = getRandomIpv4RootServer(); secondaryTarget = getRandomIpv6RootServer(); break; case v6v4: primaryTarget = getRandomIpv6RootServer(); secondaryTarget = getRandomIpv4RootServer(); break; return queryRecursive(recursionState, q, primaryTarget); } catch (IOException ioException) { abortIfFatal(ioException); ioExceptions.add(ioException); return queryRecursive(recursionState, q, secondaryTarget); } catch (IOException ioException) { ioExceptions.add(ioException);
public static List<InetAddress> getRootServer(char rootServerId) { return getRootServer(rootServerId, ipVersionSetting); }
@SuppressWarnings("incomplete-switch") private IpResultSet searchAdditional(DNSMessage message, DNSName name) { IpResultSet.Builder res = newIpResultSetBuilder(); for (Record record : message.additionalSection) { if (!record.name.equals(name)) { continue; } switch (record.type) { case A: res.ipv4Addresses.add(inetAddressFromRecord(name.ace, ((A) record.payloadData))); break; case AAAA: res.ipv6Addresses.add(inetAddressFromRecord(name.ace, ((AAAA) record.payloadData))); break; } } return res.build(); }
private IpResultSet resolveIpRecursive(RecursionState recursionState, DNSName name) throws IOException { IpResultSet.Builder res = newIpResultSetBuilder(); final DNSMessage query = getQueryFor(question); DNSMessage aMessage = queryRecursive(recursionState, query); if (aMessage != null) { for (Record answer : aMessage.answerSection) { if (answer.isAnswer(question)) { InetAddress inetAddress = inetAddressFromRecord(name.ace, (A) answer.payloadData); res.ipv4Addresses.add(inetAddress); } else if (answer.type == TYPE.CNAME && answer.name.equals(name)) { return resolveIpRecursive(recursionState, ((CNAME) answer.payloadData).name); final DNSMessage query = getQueryFor(question); DNSMessage aMessage = queryRecursive(recursionState, query); if (aMessage != null) { for (Record answer : aMessage.answerSection) { if (answer.isAnswer(question)) { InetAddress inetAddress = inetAddressFromRecord(name.ace, (AAAA) answer.payloadData); res.ipv6Addresses.add(inetAddress); } else if (answer.type == TYPE.CNAME && answer.name.equals(name)) { return resolveIpRecursive(recursionState, ((CNAME) answer.payloadData).name);
private DNSMessage queryRecursive(RecursionState recursionState, DNSMessage q, InetAddress address) throws IOException { recursionState.recurse(address, q); DNSMessage resMessage = query(q, address); IpResultSet gluedNs = searchAdditional(resMessage, name); for (InetAddress target : gluedNs.addresses) { DNSMessage recursive = null; try { recursive = queryRecursive(recursionState, q, target); } catch (IOException e) { LOGGER.log(Level.FINER, "Exception while recursing", e); res = resolveIpRecursive(recursionState, name); } catch (IOException e) { recursionState.decrementSteps(); DNSMessage recursive = null; try { recursive = queryRecursive(recursionState, q, target); } catch (IOException e) { recursionState.decrementSteps();
@Override protected boolean isResponseCacheable(Question q, DNSMessage dnsMessage) { boolean res = super.isResponseCacheable(q, dnsMessage); return ReliableDNSClient.this.isResponseCacheable(q, dnsMessage) && res; } };
@Override protected DNSMessage.Builder newQuestion(DNSMessage.Builder questionMessage) { questionMessage = super.newQuestion(questionMessage); return ReliableDNSClient.this.newQuestion(questionMessage); } @Override
dnsMessage = recursiveDnsClient.query(q); } catch (IOException ioException) { ioExceptions.add(ioException);