@Override protected List<SRVRecord> lookupSRVRecords0(DnsName name, List<HostAddress> failedAddresses, DnssecMode dnssecMode) { List<SRVRecord> res = new ArrayList<>(); Lookup lookup; try { lookup = new Lookup(name.ace, Type.SRV); } catch (TextParseException e) { throw new IllegalStateException(e); } Record[] recs = lookup.run(); if (recs == null) return res; for (Record record : recs) { org.xbill.DNS.SRVRecord srvRecord = (org.xbill.DNS.SRVRecord) record; if (srvRecord != null && srvRecord.getTarget() != null) { DnsName host = DnsName.from(srvRecord.getTarget().toString()); int port = srvRecord.getPort(); int priority = srvRecord.getPriority(); int weight = srvRecord.getWeight(); List<InetAddress> hostAddresses = lookupHostAddress0(host, failedAddresses, dnssecMode); if (shouldContinue(name, host, hostAddresses)) { continue; } SRVRecord r = new SRVRecord(host, port, priority, weight, hostAddresses); res.add(r); } } return res; }
/** * Creates the LDAP connection URLs from a set of SRV records. * @param retRecords SRV records containing the LDAP connection information. * @return List of URLs delimited by a space. */ protected String createLDAPUrl(Record[] retRecords){ StringBuilder builder = new StringBuilder(); // sort the records based on priority Arrays.sort(retRecords, new SRVRecordComparitor()); for (Record rec : retRecords){ SRVRecord srvRec = (SRVRecord)rec; if (builder.length() > 0) builder.append(" "); String target = srvRec.getTarget().toString(); target = (target.endsWith(".")) ? target.substring(0, target.length() - 1) : target; String url = "ldap://" + target+ ":" + srvRec.getPort(); builder.append(url); } return builder.toString(); }
public static Map<String, String> foundCachedEntry(String host, String transport, Record[] records) { Map<String, String> entry = cachedLookup.get(host+transport); if(entry == null) { return null; } String entryResolvedName = entry.get("hostName"); String hostAddress = entry.get("hostAddress"); String hostPort = entry.get("hostPort"); for (Record record : records) { if(record instanceof SRVRecord) { SRVRecord srvRecord = (SRVRecord) record; String resolvedName = srvRecord.getTarget().toString(); String resolvedHostAddress; try { resolvedHostAddress = InetAddress.getByName(resolvedName).getHostAddress(); int recordPort = srvRecord.getPort(); if(entryResolvedName.equalsIgnoreCase(resolvedName) && hostAddress.equalsIgnoreCase(resolvedHostAddress) && hostPort.equalsIgnoreCase("" + recordPort)) { return entry; } } catch (UnknownHostException e) { logger.warn("Couldn't resolve address " + resolvedName); } } } return null; } }
private Optional<RemoteAddress> lookupSrv(String domain) { try { Record[] records = new Lookup(prefix + domain, Type.SRV).run(); if (records == null) { return Optional.empty(); } return Stream.of(records) .filter(record -> record.getType() == Type.SRV && record instanceof SRVRecord) .map(record -> (SRVRecord) record) .min(Comparator.comparingInt(SRVRecord::getPriority)) .map(record -> new RemoteAddress(record.getTarget().toString(true), record.getPort())); } catch (TextParseException e) { return Optional.empty(); } }
SRVRecord srvRecord = (SRVRecord) record; int recordPort = srvRecord.getPort(); String resolvedName = srvRecord.getTarget().toString(); if(logger.isDebugEnabled()) { logger.debug("Looking up " +
String baseUrl = "https://" + srvRecord.getTarget().toString(true) + ":" + srvRecord.getPort(); if (isUsable(baseUrl)) { log.info("Found Identity Server for domain {} at {}", domainOrUrl, baseUrl);
public int compare(Record o1, Record o2) { SRVRecord o1SRVRecord = (SRVRecord) o1; SRVRecord o2SRVRecord = (SRVRecord) o2; int o1Priority = o1SRVRecord.getPriority(); int o2Priority = o2SRVRecord.getPriority(); // the lower priority is the best if(o1Priority > o2Priority) return 1; if(o1Priority < o2Priority) return -1; // if they are the same sort them through weight int o1Weight = o1SRVRecord.getWeight(); int o2Weight = o2SRVRecord.getWeight(); // the higher weight is the best if(o1Weight < o2Weight) return 1; if(o1Weight > o2Weight) return -1; // RFC 3263 Section 4.4 return o1SRVRecord.getTarget().compareTo(o2SRVRecord.getTarget()); }
private static List<LookupResult> toLookupResults(Record[] queryResult) { ImmutableList.Builder<LookupResult> builder = ImmutableList.builder(); if (queryResult != null) { for (Record record: queryResult) { if (record instanceof SRVRecord) { SRVRecord srvRecord = (SRVRecord) record; builder.add(LookupResult.create(srvRecord.getTarget().toString(), srvRecord.getPort(), srvRecord.getPriority(), srvRecord.getWeight(), srvRecord.getTTL())); } } } return builder.build(); } }
@Nullable protected InetAddress toInetAddress(@Nonnull SRVRecord record) { final String name = record.getTarget().toString(); InetAddress address; try { address = getByAddress(name); } catch (final UnknownHostException ignored) { final Record [] records = createLookupFor(name, Type.A).run(); if (records != null && records.length > 0) { address = toInetAddress(name, (ARecord) records[0]); } else { address = null; } } return address; }
private static List<LookupResult> toLookupResults(Record[] queryResult) { ImmutableList.Builder<LookupResult> builder = ImmutableList.builder(); if (queryResult != null) { for (Record record: queryResult) { if (record instanceof SRVRecord) { SRVRecord srvRecord = (SRVRecord) record; builder.add(LookupResult.create(srvRecord.getTarget().toString(), srvRecord.getPort(), srvRecord.getPriority(), srvRecord.getWeight(), srvRecord.getTTL())); } } } return builder.build(); } }
public List<ResolvedAddress> resolveXmppServer(String domain) { List<ResolvedAddress> addresses = new ArrayList<ResolvedAddress>(); try { Record[] records = new Lookup("_xmpp-server._tcp." + domain, Type.SRV).run(); if(records != null) { for (int i = 0; i < records.length; i++) { SRVRecord srv = (SRVRecord) records[i]; addresses.add(new ResolvedAddress(srv.getTarget(), srv.getPort(), srv.getPriority())); } // sort by priority Collections.sort(addresses, new Comparator<ResolvedAddress>() { public int compare(ResolvedAddress a1, ResolvedAddress a2) { return a1.getPriority() - a2.getPriority(); } }); } else { addresses.add(new ResolvedAddress(domain, SERVER_PORT, 0)); } } catch (TextParseException e) { // ignore } return addresses; }
for (SRVRecord record : srvRecords) { log.info("Found SRV record: {}", record.toString()); return "https://" + record.getTarget().toString(true) + ":" + record.getPort();
SRVRecord record = (SRVRecord) records[0]; int recordPort = record.getPort(); String resolvedName = record.getTarget().toString(); try { String hostAddress= InetAddress.getByName(resolvedName).getHostAddress();
private List<Server> lookup() { final Lookup lookup; try { lookup = new Lookup(record, Type.SRV, DClass.IN); } catch (TextParseException e) { throw new RuntimeException(e); } final Record[] result = lookup.run(); if (lookup.getResult() != Lookup.SUCCESSFUL) { throw new RuntimeException( "DNS lookup failed: " + lookup.getErrorString() + ": " + record); } final ImmutableList.Builder<Server> results = ImmutableList.builder(); if (result != null) { for (final Record a : result) { final SRVRecord srv = (SRVRecord) a; results.add(new Server(srv.getTarget().canonicalize().toString(), srv.getPort())); } } return results.build(); } }
public ServiceInstance(final SRVRecord srv) throws TextParseException { this(new ServiceName(srv.getName()), srv.getPriority(), srv.getWeight(), srv.getPort(), srv.getTarget(), null, (Map) null); }
case Type.SRV: SRVRecord srv = (SRVRecord) record; additionalNames.add(srv.getTarget()); break; default:
protected List<DiscoveryNode> lookupNodes() throws TextParseException { List<DiscoveryNode> discoNodes = Lists.newArrayList(); for (Record srvRecord : lookupRecords(query, Type.SRV)) { logger.trace("Found SRV record {}", srvRecord); for (Record aRecord : lookupRecords(((SRVRecord) srvRecord).getTarget().toString(), Type.A)) { logger.trace("Found A record {} for SRV record", aRecord, srvRecord); String address = ((ARecord) aRecord).getAddress().getHostAddress() + ":" + ((SRVRecord) srvRecord).getPort(); try { for (TransportAddress transportAddress : transportService.addressesFromString(address)) { logger.trace("adding {}, transport_address {}", address, transportAddress); discoNodes.add(new DiscoveryNode("#srv-" + address + "-" + transportAddress, transportAddress, version.minimumCompatibilityVersion())); } } catch (Exception e) { logger.warn("failed to add {}, address {}", e, address); } } } return discoNodes; } }