diff --git a/src/zutil/net/dns/MulticastDnsServer.java b/src/zutil/net/dns/MulticastDnsServer.java index d541aad..6fd64a0 100755 --- a/src/zutil/net/dns/MulticastDnsServer.java +++ b/src/zutil/net/dns/MulticastDnsServer.java @@ -116,7 +116,7 @@ public class MulticastDnsServer extends ThreadedUDPNetwork implements ThreadedUD // Just handle queries and no responses if ( ! dnsPacket.getHeader().flagQueryResponse) { - DnsPacket response = handleReceivedPacket(dnsPacket); + DnsPacket response = handleReceivedPacket(packet.getAddress(), dnsPacket); if (response != null){ ByteArrayOutputStream outBuffer = new ByteArrayOutputStream(); BinaryStructOutputStream out = new BinaryStructOutputStream(outBuffer); @@ -135,45 +135,48 @@ public class MulticastDnsServer extends ThreadedUDPNetwork implements ThreadedUD } } - protected DnsPacket handleReceivedPacket(DnsPacket request){ + protected DnsPacket handleReceivedPacket(InetAddress address, DnsPacket request){ DnsPacket response = new DnsPacket(); response.getHeader().setDefaultResponseData(); for (DnsPacketQuestion question : request.getQuestions()){ if (question.name == null) continue; switch (question.type){ + // ------------------------------------------ // Normal Domain Name Resolution + // ------------------------------------------ + case DnsConstants.TYPE.A: if (entries.containsKey(question.name)){ - logger.finer("Received request for domain: " + question.name); + logger.finer("Received request for domain: '" + question.name + "' from source: " + address); response.addAnswerRecord(entries.get(question.name)); } else { - logger.finest("Received request for unknown domain: " + question.name); + logger.finest("Received request for unknown domain: '" + question.name + "' from source: " + address); } break; - // Service Name Resolution + // ------------------------------------------ + // Service Name Resolution (Reverse DNS) + // ------------------------------------------ + case DnsConstants.TYPE.PTR: if (question.name.startsWith("_service.")){ String postFix = question.name.substring(9); for (String domain : entries.keySet()){ if (domain.endsWith(postFix)) { - logger.finer("Received request for service: " + question.name); + logger.finer("Received request for service: '" + question.name + "' from source: " + address); response.addAnswerRecord(entries.get(domain)); } else { - logger.finest("Received request for unknown service: " + question.name); + logger.finest("Received request for unknown service: '" + question.name + "' from source: " + address); } } } else if (entries.containsKey(question.name)){ - logger.finer("Received request for service: " + question.name); + logger.finer("Received request for service: '" + question.name + "' from source: " + address); response.addAnswerRecord(entries.get(question.name)); } else { - logger.finer("Received request for unknown pointer: " + question.name); + logger.finer("Received request for unknown pointer: '" + question.name + "' from source: " + address); } break; - - default: - logger.finest("Unknown request type: " + question.type); } } diff --git a/src/zutil/net/dns/packet/DnsConstants.java b/src/zutil/net/dns/packet/DnsConstants.java index ca87e32..12ab993 100755 --- a/src/zutil/net/dns/packet/DnsConstants.java +++ b/src/zutil/net/dns/packet/DnsConstants.java @@ -77,7 +77,7 @@ public final class DnsConstants { public static final int NULL = 10; /** a well known service description */ public static final int WKS = 11; - /** a domain name pointer */ + /** a domain name pointer, generally used for reverse DNS */ public static final int PTR = 12; /** host information */ public static final int HINFO = 13; diff --git a/test/zutil/net/dns/MulticastDnsServerTest.java b/test/zutil/net/dns/MulticastDnsServerTest.java index f577e16..23e6523 100755 --- a/test/zutil/net/dns/MulticastDnsServerTest.java +++ b/test/zutil/net/dns/MulticastDnsServerTest.java @@ -21,12 +21,12 @@ public class MulticastDnsServerTest { @Test - public void domainLookupNoEntries(){ + public void domainLookupNoEntries() throws UnknownHostException { DnsPacket request = creatRequestDnsPacket( "example.com", DnsConstants.TYPE.A); - DnsPacket response = server.handleReceivedPacket(request); + DnsPacket response = server.handleReceivedPacket(InetAddress.getLocalHost(), request); assertNull(response); } @@ -38,19 +38,19 @@ public class MulticastDnsServerTest { DnsConstants.TYPE.A); server.addEntry("example.com", InetAddress.getLocalHost()); - DnsPacket response = server.handleReceivedPacket(request); + DnsPacket response = server.handleReceivedPacket(InetAddress.getLocalHost(), request); assertNotNull(response); assertEquals("example.com", response.getAnswerRecords().get(0).name); } @Test - public void serviceDiscoveryNoEntries(){ + public void serviceDiscoveryNoEntries() throws UnknownHostException { DnsPacket request = creatRequestDnsPacket( "_service._tcp.local", DnsConstants.TYPE.PTR); - DnsPacket response = server.handleReceivedPacket(request); + DnsPacket response = server.handleReceivedPacket(InetAddress.getLocalHost(), request); assertNull(response); } @@ -62,7 +62,7 @@ public class MulticastDnsServerTest { DnsConstants.TYPE.PTR); server.addEntry("_http._tcp.local", InetAddress.getLocalHost()); - DnsPacket response = server.handleReceivedPacket(request); + DnsPacket response = server.handleReceivedPacket(InetAddress.getLocalHost(), request); assertNotNull(response); }