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()) {