blob: 066c70e9d5bdc361b5140f7a8dea22af0146533d [file] [log] [blame]
Shuyi Chend7955ce2013-05-22 14:51:55 -07001// Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org)
2
3package org.xbill.DNS.tests;
4
5import java.util.*;
6import org.xbill.DNS.*;
7
8public class xfrin {
9
10private static void
11usage(String s) {
12 System.out.println("Error: " + s);
13 System.out.println("usage: xfrin [-i serial] [-k keyname/secret] " +
14 "[-s server] [-p port] [-f] zone");
15 System.exit(1);
16}
17
18public static void
19main(String [] args) throws Exception {
20 ZoneTransferIn xfrin;
21 TSIG key = null;
22 int ixfr_serial = -1;
23 String server = null;
24 int port = SimpleResolver.DEFAULT_PORT;
25 boolean fallback = false;
26 Name zname;
27
28 int arg = 0;
29 while (arg < args.length) {
30 if (args[arg].equals("-i")) {
31 ixfr_serial = Integer.parseInt(args[++arg]);
32 if (ixfr_serial < 0)
33 usage("invalid serial number");
34 } else if (args[arg].equals("-k")) {
35 String s = args[++arg];
36 int index = s.indexOf('/');
37 if (index < 0)
38 usage("invalid key");
39 key = new TSIG(s.substring(0, index),
40 s.substring(index+1));
41 } else if (args[arg].equals("-s")) {
42 server = args[++arg];
43 } else if (args[arg].equals("-p")) {
44 port = Integer.parseInt(args[++arg]);
45 if (port < 0 || port > 0xFFFF)
46 usage("invalid port");
47 } else if (args[arg].equals("-f")) {
48 fallback = true;
49 } else if (args[arg].startsWith("-")) {
50 usage("invalid option");
51 } else {
52 break;
53 }
54 arg++;
55 }
56 if (arg >= args.length)
57 usage("no zone name specified");
58 zname = Name.fromString(args[arg]);
59
60 if (server == null) {
61 Lookup l = new Lookup(zname, Type.NS);
62 Record [] ns = l.run();
63 if (ns == null) {
64 System.out.println("failed to look up NS record: " +
65 l.getErrorString());
66 System.exit(1);
67 }
68 server = ns[0].rdataToString();
69 System.out.println("sending to server '" + server + "'");
70 }
71
72 if (ixfr_serial >= 0)
73 xfrin = ZoneTransferIn.newIXFR(zname, ixfr_serial, fallback,
74 server, port, key);
75 else
76 xfrin = ZoneTransferIn.newAXFR(zname, server, port, key);
77
78 List response = xfrin.run();
79 if (xfrin.isAXFR()) {
80 if (ixfr_serial >= 0)
81 System.out.println("AXFR-like IXFR response");
82 else
83 System.out.println("AXFR response");
84 Iterator it = response.iterator();
85 while (it.hasNext())
86 System.out.println(it.next());
87 } else if (xfrin.isIXFR()) {
88 System.out.println("IXFR response");
89 Iterator it = response.iterator();
90 while (it.hasNext()) {
91 ZoneTransferIn.Delta delta;
92 delta = (ZoneTransferIn.Delta) it.next();
93 System.out.println("delta from " + delta.start +
94 " to " + delta.end);
95 System.out.println("deletes");
96 Iterator it2 = delta.deletes.iterator();
97 while (it2.hasNext())
98 System.out.println(it2.next());
99 System.out.println("adds");
100 it2 = delta.adds.iterator();
101 while (it2.hasNext())
102 System.out.println(it2.next());
103 }
104 } else if (xfrin.isCurrent()) {
105 System.out.println("up to date");
106 }
107}
108
109}