blob: 7f27077a68213328cc15b4dc4b3d94db2bb23c5b [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;
4
5import java.io.*;
6
7/**
8 * Start of Authority - describes properties of a zone.
9 *
10 * @author Brian Wellington
11 */
12
13public class SOARecord extends Record {
14
15private static final long serialVersionUID = 1049740098229303931L;
16
17private Name host, admin;
18private long serial, refresh, retry, expire, minimum;
19
20SOARecord() {}
21
22Record
23getObject() {
24 return new SOARecord();
25}
26
27/**
28 * Creates an SOA Record from the given data
29 * @param host The primary name server for the zone
30 * @param admin The zone administrator's address
31 * @param serial The zone's serial number
32 * @param refresh The amount of time until a secondary checks for a new serial
33 * number
34 * @param retry The amount of time between a secondary's checks for a new
35 * serial number
36 * @param expire The amount of time until a secondary expires a zone
37 * @param minimum The minimum TTL for records in the zone
38*/
39public
40SOARecord(Name name, int dclass, long ttl, Name host, Name admin,
41 long serial, long refresh, long retry, long expire, long minimum)
42{
43 super(name, Type.SOA, dclass, ttl);
44 this.host = checkName("host", host);
45 this.admin = checkName("admin", admin);
46 this.serial = checkU32("serial", serial);
47 this.refresh = checkU32("refresh", refresh);
48 this.retry = checkU32("retry", retry);
49 this.expire = checkU32("expire", expire);
50 this.minimum = checkU32("minimum", minimum);
51}
52
53void
54rrFromWire(DNSInput in) throws IOException {
55 host = new Name(in);
56 admin = new Name(in);
57 serial = in.readU32();
58 refresh = in.readU32();
59 retry = in.readU32();
60 expire = in.readU32();
61 minimum = in.readU32();
62}
63
64void
65rdataFromString(Tokenizer st, Name origin) throws IOException {
66 host = st.getName(origin);
67 admin = st.getName(origin);
68 serial = st.getUInt32();
69 refresh = st.getTTLLike();
70 retry = st.getTTLLike();
71 expire = st.getTTLLike();
72 minimum = st.getTTLLike();
73}
74
75/** Convert to a String */
76String
77rrToString() {
78 StringBuffer sb = new StringBuffer();
79 sb.append(host);
80 sb.append(" ");
81 sb.append(admin);
82 if (Options.check("multiline")) {
83 sb.append(" (\n\t\t\t\t\t");
84 sb.append(serial);
85 sb.append("\t; serial\n\t\t\t\t\t");
86 sb.append(refresh);
87 sb.append("\t; refresh\n\t\t\t\t\t");
88 sb.append(retry);
89 sb.append("\t; retry\n\t\t\t\t\t");
90 sb.append(expire);
91 sb.append("\t; expire\n\t\t\t\t\t");
92 sb.append(minimum);
93 sb.append(" )\t; minimum");
94 } else {
95 sb.append(" ");
96 sb.append(serial);
97 sb.append(" ");
98 sb.append(refresh);
99 sb.append(" ");
100 sb.append(retry);
101 sb.append(" ");
102 sb.append(expire);
103 sb.append(" ");
104 sb.append(minimum);
105 }
106 return sb.toString();
107}
108
109/** Returns the primary name server */
110public Name
111getHost() {
112 return host;
113}
114
115/** Returns the zone administrator's address */
116public Name
117getAdmin() {
118 return admin;
119}
120
121/** Returns the zone's serial number */
122public long
123getSerial() {
124 return serial;
125}
126
127/** Returns the zone refresh interval */
128public long
129getRefresh() {
130 return refresh;
131}
132
133/** Returns the zone retry interval */
134public long
135getRetry() {
136 return retry;
137}
138
139/** Returns the time until a secondary expires a zone */
140public long
141getExpire() {
142 return expire;
143}
144
145/** Returns the minimum TTL for records in the zone */
146public long
147getMinimum() {
148 return minimum;
149}
150
151void
152rrToWire(DNSOutput out, Compression c, boolean canonical) {
153 host.toWire(out, c, canonical);
154 admin.toWire(out, c, canonical);
155 out.writeU32(serial);
156 out.writeU32(refresh);
157 out.writeU32(retry);
158 out.writeU32(expire);
159 out.writeU32(minimum);
160}
161
162}