minidns

 1commit 62a61c8df0656945b05798109b0765181e8f3d62
 2Author: Rene Treffer <treffer@measite.de>
 3Date:   Thu Apr 3 22:38:44 2014 +0200
 4
 5    Allow querying specific dns server by name/ip and port
 6
 7diff --git a/src/de/measite/minidns/Client.java b/src/de/measite/minidns/Client.java
 8index beb461bec..8bc75d015 100644
 9--- a/src/de/measite/minidns/Client.java
10+++ b/src/de/measite/minidns/Client.java
11@@ -30,6 +30,16 @@ public class Client {
12      */
13     protected Random random;
14 
15+    /**
16+     * The buffer size for dns replies.
17+     */
18+    protected int bufferSize = 1500;
19+
20+    /**
21+     * DNS timeout.
22+     */
23+    protected int timeout = 5000;
24+
25     /**
26      * Create a new DNS client.
27      */
28@@ -41,6 +51,26 @@ public class Client {
29         }
30     }
31 
32+    /**
33+     * Query a nameserver for a single entry.
34+     * @param name The DNS name to request.
35+     * @param type The DNS type to request (SRV, A, AAAA, ...).
36+     * @param clazz The class of the request (usually IN for Internet).
37+     * @param host The DNS server host.
38+     * @param port The DNS server port.
39+     * @return 
40+     * @throws IOException On IO Errors.
41+     */
42+    public DNSMessage query(String name, TYPE type, CLASS clazz, String host, int port)
43+        throws IOException
44+    {
45+        Question q = new Question();
46+        q.setClazz(clazz);
47+        q.setType(type);
48+        q.setName(name);
49+        return query(q, host, port);
50+    }
51+
52     /**
53      * Query a nameserver for a single entry.
54      * @param name The DNS name to request.
55@@ -83,6 +113,17 @@ public class Client {
56      * @throws IOException On IOErrors.
57      */
58     public DNSMessage query(Question q, String host) throws IOException {
59+        return query(q, host, 53);
60+    }
61+
62+    /**
63+     * Query a specific server for one entry.
64+     * @param q The question section of the DNS query.
65+     * @param host The dns server host.
66+     * @param port the dns port.
67+     * @throws IOException On IOErrors.
68+     */
69+    public DNSMessage query(Question q, String host, int port) throws IOException {
70         DNSMessage message = new DNSMessage();
71         message.setQuestions(new Question[]{q});
72         message.setRecursionDesired(true);
73@@ -90,10 +131,10 @@ public class Client {
74         byte[] buf = message.toArray();
75         DatagramSocket socket = new DatagramSocket();
76         DatagramPacket packet = new DatagramPacket(
77-                buf, buf.length, InetAddress.getByName(host), 53);
78-        socket.setSoTimeout(5000);
79+                buf, buf.length, InetAddress.getByName(host), port);
80+        socket.setSoTimeout(timeout);
81         socket.send(packet);
82-        packet = new DatagramPacket(new byte[513], 513);
83+        packet = new DatagramPacket(new byte[bufferSize], bufferSize);
84         socket.receive(packet);
85         DNSMessage dnsMessage = DNSMessage.parse(packet.getData());
86         if (dnsMessage.getId() != message.getId()) {