diff --git a/leigh-infra-dnsd/build.gradle b/leigh-stack-dnsd/build.gradle similarity index 89% rename from leigh-infra-dnsd/build.gradle rename to leigh-stack-dnsd/build.gradle index 0b3c64227c7dc192abe0ef22b2355f759e9a9cb8..4f9e9459f8e7174e7e9b7dce2db8af7b6837af71 100644 --- a/leigh-infra-dnsd/build.gradle +++ b/leigh-stack-dnsd/build.gradle @@ -22,5 +22,5 @@ test { } application { - mainClass = 'leigh.infra.dnsd.DNSDaemon' + mainClass = 'leigh.stack.dnsd.DNSDaemon' } \ No newline at end of file diff --git a/leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/DNSDaemon.java b/leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/DNSDaemon.java similarity index 94% rename from leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/DNSDaemon.java rename to leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/DNSDaemon.java index 679488ac873d961cc6c89a7196001276e4dd118d..dc251fe4d24b2049f379ac73a3f1784b6f788a75 100644 --- a/leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/DNSDaemon.java +++ b/leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/DNSDaemon.java @@ -1,4 +1,4 @@ -package leigh.infra.dnsd; +package leigh.stack.dnsd; import leigh.mecha.log.MechaLogger; import leigh.mecha.log.MechaLoggerFactory; diff --git a/leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/DNSService.java b/leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/DNSService.java similarity index 64% rename from leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/DNSService.java rename to leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/DNSService.java index 466b050ddbcc28409082a55421b797ddcd5fb1a9..b79a00ca52f8c5c976edb4475b26af0917b29980 100644 --- a/leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/DNSService.java +++ b/leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/DNSService.java @@ -1,4 +1,4 @@ -package leigh.infra.dnsd; +package leigh.stack.dnsd; import leigh.mecha.log.MechaLogger; import leigh.mecha.log.MechaLoggerFactory; @@ -8,7 +8,10 @@ import org.xbill.DNS.SimpleResolver; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; +import java.net.InetAddress; import java.net.UnknownHostException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; /** * Simple implementation of a DNS server. This implementation attempts to lookup queries in a {@link NameStore}, @@ -22,6 +25,7 @@ public class DNSService implements Runnable { private final int port; private final SimpleResolver resolver; private final NameStore nameStore = new EmergencyNameStore(); + private final ExecutorService executorService = Executors.newCachedThreadPool(); DNSService(int port) throws UnknownHostException { this.port = port; @@ -33,24 +37,24 @@ public class DNSService implements Runnable { DatagramSocket socket = new DatagramSocket(port); //noinspection InfiniteLoopStatement while (true) { - try { - process(socket); - } catch (Exception e) { - e.printStackTrace(); - } + executorService.submit(() -> { + try { + byte[] in = new byte[UDP_SIZE]; + DatagramPacket indp = new DatagramPacket(in, UDP_SIZE); + socket.receive(indp); + query(socket, in, indp.getAddress(), indp.getPort()); + } catch (Exception e) { + e.printStackTrace(); + } + }); } } catch (IOException e) { e.printStackTrace(); } } - private void process(DatagramSocket socket) throws IOException { - // TODO: Make this an executor threadpool to avoid pipelining on slow relayed queries - byte[] in = new byte[UDP_SIZE]; - DatagramPacket indp = new DatagramPacket(in, UDP_SIZE); - socket.receive(indp); + private void query(DatagramSocket socket, byte[] in, InetAddress dstAddr, int dstPort) throws IOException { Message request = new Message(in); - Message reply = nameStore.doQuery(request); if (reply == null) @@ -58,7 +62,7 @@ public class DNSService implements Runnable { byte[] resp = reply.toWire(); DatagramPacket outdp = new DatagramPacket(resp, resp.length, - indp.getAddress(), indp.getPort()); + dstAddr, dstPort); socket.send(outdp); } } \ No newline at end of file diff --git a/leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/EmergencyNameStore.java b/leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/EmergencyNameStore.java similarity index 99% rename from leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/EmergencyNameStore.java rename to leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/EmergencyNameStore.java index baf6bd87afc73f30f397eeff549fa6e6dd089e15..72f8969c5a72309cbf0bc7653c187d19e4cd5e8a 100644 --- a/leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/EmergencyNameStore.java +++ b/leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/EmergencyNameStore.java @@ -1,4 +1,4 @@ -package leigh.infra.dnsd; +package leigh.stack.dnsd; import org.xbill.DNS.Record; import org.xbill.DNS.*; diff --git a/leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/NameStore.java b/leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/NameStore.java similarity index 91% rename from leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/NameStore.java rename to leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/NameStore.java index 787d590422e5c4325625be741f809a43061d7aae..7c3aa6b82ffce5f854e19a5f97d38e78b093fbac 100644 --- a/leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/NameStore.java +++ b/leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/NameStore.java @@ -1,4 +1,4 @@ -package leigh.infra.dnsd; +package leigh.stack.dnsd; import org.xbill.DNS.Message; diff --git a/leigh-infra-dnsd/src/test/java/leigh/infra/dnsd/TestResolver.java b/leigh-stack-dnsd/src/test/java/leigh/infra/dnsd/TestResolver.java similarity index 100% rename from leigh-infra-dnsd/src/test/java/leigh/infra/dnsd/TestResolver.java rename to leigh-stack-dnsd/src/test/java/leigh/infra/dnsd/TestResolver.java diff --git a/settings.gradle b/settings.gradle index 04fda5d705f38b11207f7e4c5c753c5f13142549..a557ade19b139f188d620c946dc00e5089a3f73f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -87,4 +87,4 @@ include 'leigh-minecraft-link-quests' include 'leigh-blockchain' include 'leigh-inkan' include 'leigh-blockchain-blocktail' -include 'leigh-infra-dnsd' \ No newline at end of file +include 'leigh-stack-dnsd' \ No newline at end of file