All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jgroups.protocols.dns.AddressedDNSResolver Maven / Gradle / Ivy

package org.jgroups.protocols.dns;

import org.jgroups.Address;
import org.jgroups.logging.Log;
import org.jgroups.logging.LogFactory;
import org.jgroups.stack.IpAddress;

import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.List;

public class AddressedDNSResolver extends DefaultDNSResolver {

    private static final Log log = LogFactory.getLog(MethodHandles.lookup().lookupClass());

    public AddressedDNSResolver(DirContext context) {
        super(context);
    }

    public AddressedDNSResolver(String dnsContextFactory, String dnsAddress) throws NamingException {
        super(dnsContextFactory, dnsAddress);
    }

    @Override
    protected List
resolveAEntries(String dnsQuery, String srcPort) { List
addresses = new ArrayList<>(); try { // We are parsing this kind of structure: // {a=A: 172.17.0.2, 172.17.0.7} // The frst attribute is the type of record. We are not interested in this. Next are addresses. Attributes attributes = getDnsContext().getAttributes(dnsQuery, new String[] { DNSRecordType.A.toString() }); if (attributes != null && attributes.getAll().hasMoreElements()) { NamingEnumeration namingEnumeration = attributes.get(DNSRecordType.A.toString()).getAll(); while (namingEnumeration.hasMoreElements()) { try { int p = Integer.parseInt(srcPort); if (p == 0) { addresses.add(new IpAddress(namingEnumeration.nextElement().toString())); } else { addresses.add(new IpAddress(namingEnumeration.nextElement().toString(), p)); } } catch (Exception e) { log.trace("non critical DNS resolution error", e); } } } } catch (NamingException ex) { log.trace("no DNS records for query %s, ex: %a", dnsQuery, ex); } return addresses; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy