• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org)
2 
3 package org.xbill.DNS;
4 
5 import java.io.*;
6 
7 /**
8  * Start of Authority - describes properties of a zone.
9  *
10  * @author Brian Wellington
11  */
12 
13 public class SOARecord extends Record {
14 
15 private static final long serialVersionUID = 1049740098229303931L;
16 
17 private Name host, admin;
18 private long serial, refresh, retry, expire, minimum;
19 
SOARecord()20 SOARecord() {}
21 
22 Record
getObject()23 getObject() {
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 */
39 public
SOARecord(Name name, int dclass, long ttl, Name host, Name admin, long serial, long refresh, long retry, long expire, long minimum)40 SOARecord(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 
53 void
rrFromWire(DNSInput in)54 rrFromWire(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 
64 void
rdataFromString(Tokenizer st, Name origin)65 rdataFromString(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 */
76 String
rrToString()77 rrToString() {
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 */
110 public Name
getHost()111 getHost() {
112 	return host;
113 }
114 
115 /** Returns the zone administrator's address */
116 public Name
getAdmin()117 getAdmin() {
118 	return admin;
119 }
120 
121 /** Returns the zone's serial number */
122 public long
getSerial()123 getSerial() {
124 	return serial;
125 }
126 
127 /** Returns the zone refresh interval */
128 public long
getRefresh()129 getRefresh() {
130 	return refresh;
131 }
132 
133 /** Returns the zone retry interval */
134 public long
getRetry()135 getRetry() {
136 	return retry;
137 }
138 
139 /** Returns the time until a secondary expires a zone */
140 public long
getExpire()141 getExpire() {
142 	return expire;
143 }
144 
145 /** Returns the minimum TTL for records in the zone */
146 public long
getMinimum()147 getMinimum() {
148 	return minimum;
149 }
150 
151 void
rrToWire(DNSOutput out, Compression c, boolean canonical)152 rrToWire(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 }
163