package com.netifera.platform.net.dns.service; import java.io.IOException; import java.util.List; import org.xbill.DNS.Name; import org.xbill.DNS.ZoneTransferException; import org.xbill.DNS.ZoneTransferIn; import com.netifera.platform.net.dns.service.client.ExtendedResolver; import com.netifera.platform.net.dns.service.client.SimpleResolver; import com.netifera.platform.net.dns.service.nameresolver.INameResolver; import com.netifera.platform.net.dns.service.nameresolver.NameResolver; import com.netifera.platform.net.services.NetworkService; import com.netifera.platform.net.sockets.ISocketEngineService; import com.netifera.platform.net.sockets.UDPChannel; import com.netifera.platform.util.locators.ISocketLocator; import com.netifera.platform.util.locators.UDPSocketLocator; public class DNS extends NetworkService { private static final long serialVersionUID = 964019196230856576L; public DNS(ISocketLocator locator) { super(locator); } @Override public UDPSocketLocator getLocator() { return (UDPSocketLocator) super.getLocator(); } private SimpleResolver createSimpleResolver(ISocketEngineService engine) throws IOException { UDPChannel channel = engine.openUDP(); channel.connect(getLocator()); return new SimpleResolver(channel); } private ExtendedResolver createExtendedResolver(ISocketEngineService engine) throws IOException { ExtendedResolver answer = new ExtendedResolver(); answer.addResolver(createSimpleResolver(engine)); return answer; } public INameResolver createNameResolver(ISocketEngineService engine) throws IOException { return new NameResolver(createExtendedResolver(engine)); } public List<?> zoneTransfer(String domain) throws IOException, ZoneTransferException { ZoneTransferIn xfr = ZoneTransferIn.newAXFR(new Name(domain), getLocator().getAddress().toInetAddress().getHostAddress(), getLocator().getPort(), null); return xfr.run(); } public int getDefaultPort() { return 53; } // TODO see RFC 4501 for getURI() }