]> WPIA git - gigi.git/blob - src/org/cacert/gigi/ping/DNSPinger.java
ADD: the daemon for pinging domains. (ping via email still missing)
[gigi.git] / src / org / cacert / gigi / ping / DNSPinger.java
1 package org.cacert.gigi.ping;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6 import java.util.Arrays;
7 import java.util.LinkedList;
8
9 public class DNSPinger extends DomainPinger {
10
11     @Override
12     public String ping(String domain, String expToken) {
13         try {
14             String[] tokenParts = expToken.split(":", 2);
15
16             Process p = Runtime.getRuntime().exec(new String[] {
17                     "dig", "+short", "NS", domain
18             });
19             BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
20             String line;
21             LinkedList<String> nameservers = new LinkedList<String>();
22             while ((line = br.readLine()) != null) {
23                 nameservers.add(line);
24             }
25             p.destroy();
26             StringBuffer result = new StringBuffer();
27             result.append("failed: ");
28             boolean failed = nameservers.isEmpty();
29             nameservers:
30             for (String NS : nameservers) {
31                 String[] call = new String[] {
32                         "dig", "@" + NS, "+short", "TXT", "cacert-" + tokenParts[0] + "." + domain
33                 };
34                 System.out.println(Arrays.toString(call));
35                 p = Runtime.getRuntime().exec(call);
36                 br = new BufferedReader(new InputStreamReader(p.getInputStream()));
37                 String token = null;
38                 boolean found = false;
39                 while ((line = br.readLine()) != null) {
40                     if (line.isEmpty()) {
41                         continue;
42                     }
43                     found = true;
44                     token = line.substring(1, line.length() - 1);
45                     if (token.equals(tokenParts[1])) {
46                         continue nameservers;
47                     }
48                 }
49                 p.destroy();
50                 result.append(NS);
51                 if (found) {
52                     result.append(" DIFFER;");
53                 } else {
54                     result.append(" EMPTY;");
55                 }
56                 failed = true;
57
58             }
59             if ( !failed) {
60                 return PING_SUCCEDED;
61             }
62             return result.toString();
63         } catch (IOException e) {
64             e.printStackTrace();
65             return "Connection closed";
66         }
67     }
68
69 }