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<? extends Data> 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(); }
@Override protected boolean isResponseCacheable(Question q, DNSMessage dnsMessage) { boolean res = super.isResponseCacheable(q, dnsMessage); return ReliableDNSClient.this.isResponseCacheable(q, dnsMessage) && res; } };
private DNSMessage queryRecursive(ResolutionState resolutionState, DNSMessage q, InetAddress address, DNSName authoritativeZone) throws IOException { resolutionState.recurse(address, q); DNSMessage resMessage = query(q, address); IpResultSet gluedNs = searchAdditional(resMessage, name); for (Iterator<InetAddress> addressIterator = gluedNs.addresses.iterator(); addressIterator.hasNext(); ) { InetAddress target = addressIterator.next(); DNSMessage recursive = null; try { recursive = queryRecursive(resolutionState, q, target, record.name); } catch (IOException e) { abortIfFatal(e); LOGGER.log(Level.FINER, "Exception while recursing", e); resolutionState.decrementSteps(); res = resolveIpRecursive(resolutionState, name); } catch (IOException e) { resolutionState.decrementSteps(); DNSMessage recursive = null; try { recursive = queryRecursive(resolutionState, q, target, record.name); } catch (IOException e) { resolutionState.decrementSteps();
private IpResultSet resolveIpRecursive(ResolutionState resolutionState, DNSName name) throws IOException { IpResultSet.Builder res = newIpResultSetBuilder(); final DNSMessage query = getQueryFor(question); DNSMessage aMessage = queryRecursive(resolutionState, query); if (aMessage != null) { for (Record<? extends Data> 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(resolutionState, ((CNAME) answer.payloadData).name); final DNSMessage query = getQueryFor(question); DNSMessage aMessage = queryRecursive(resolutionState, query); if (aMessage != null) { for (Record<? extends Data> 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(resolutionState, ((CNAME) answer.payloadData).name);
for (A a : getCachedIPv4NameserverAddressesFor(parent)) { if (primaryTarget == null) { primaryTarget = a.getInetAddress(); for (AAAA aaaa : getCachedIPv6NameserverAddressesFor(parent)) { if (primaryTarget == null) { primaryTarget = aaaa.getInetAddress(); InetAddress[] v4v6targets = getTargets(getCachedIPv4NameserverAddressesFor(parent), getCachedIPv6NameserverAddressesFor(parent)); primaryTarget = v4v6targets[0]; secondaryTarget = v4v6targets[1]; break; case v6v4: InetAddress[] v6v4targets = getTargets(getCachedIPv6NameserverAddressesFor(parent), getCachedIPv4NameserverAddressesFor(parent)); primaryTarget = v6v4targets[0]; secondaryTarget = v6v4targets[1]; switch (ipVersionSetting) { case v4only: primaryTarget = getRandomIpv4RootServer(); break; case v6only: primaryTarget = getRandomIpv6RootServer(); break; case v4v6: primaryTarget = getRandomIpv4RootServer(); secondaryTarget = getRandomIpv6RootServer(); break; case v6v4:
@IntegrationTest public static NSID testNsidLRoot() { DNSClient client = new DNSClient(null) { @Override protected Builder newQuestion(Builder message) { message.getEdnsBuilder().addEdnsOption(NSID.REQUEST); return super.newQuestion(message); } }; DNSMessage response = null; Question q = new Question("de", TYPE.NS); for (InetAddress lRoot : IterativeDNSClient.getRootServer('l')) { try { response = client.query(q, lRoot); } catch (IOException e) { continue; } break; } NSID nsid = response.getEdns().getEdnsOption(OptionCode.NSID); assertNotNull(nsid); return nsid; } }