| // Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org) |
| |
| package org.xbill.DNS; |
| |
| import java.io.*; |
| |
| /** |
| * Start of Authority - describes properties of a zone. |
| * |
| * @author Brian Wellington |
| */ |
| |
| public class SOARecord extends Record { |
| |
| private static final long serialVersionUID = 1049740098229303931L; |
| |
| private Name host, admin; |
| private long serial, refresh, retry, expire, minimum; |
| |
| SOARecord() {} |
| |
| Record |
| getObject() { |
| return new SOARecord(); |
| } |
| |
| /** |
| * Creates an SOA Record from the given data |
| * @param host The primary name server for the zone |
| * @param admin The zone administrator's address |
| * @param serial The zone's serial number |
| * @param refresh The amount of time until a secondary checks for a new serial |
| * number |
| * @param retry The amount of time between a secondary's checks for a new |
| * serial number |
| * @param expire The amount of time until a secondary expires a zone |
| * @param minimum The minimum TTL for records in the zone |
| */ |
| public |
| SOARecord(Name name, int dclass, long ttl, Name host, Name admin, |
| long serial, long refresh, long retry, long expire, long minimum) |
| { |
| super(name, Type.SOA, dclass, ttl); |
| this.host = checkName("host", host); |
| this.admin = checkName("admin", admin); |
| this.serial = checkU32("serial", serial); |
| this.refresh = checkU32("refresh", refresh); |
| this.retry = checkU32("retry", retry); |
| this.expire = checkU32("expire", expire); |
| this.minimum = checkU32("minimum", minimum); |
| } |
| |
| void |
| rrFromWire(DNSInput in) throws IOException { |
| host = new Name(in); |
| admin = new Name(in); |
| serial = in.readU32(); |
| refresh = in.readU32(); |
| retry = in.readU32(); |
| expire = in.readU32(); |
| minimum = in.readU32(); |
| } |
| |
| void |
| rdataFromString(Tokenizer st, Name origin) throws IOException { |
| host = st.getName(origin); |
| admin = st.getName(origin); |
| serial = st.getUInt32(); |
| refresh = st.getTTLLike(); |
| retry = st.getTTLLike(); |
| expire = st.getTTLLike(); |
| minimum = st.getTTLLike(); |
| } |
| |
| /** Convert to a String */ |
| String |
| rrToString() { |
| StringBuffer sb = new StringBuffer(); |
| sb.append(host); |
| sb.append(" "); |
| sb.append(admin); |
| if (Options.check("multiline")) { |
| sb.append(" (\n\t\t\t\t\t"); |
| sb.append(serial); |
| sb.append("\t; serial\n\t\t\t\t\t"); |
| sb.append(refresh); |
| sb.append("\t; refresh\n\t\t\t\t\t"); |
| sb.append(retry); |
| sb.append("\t; retry\n\t\t\t\t\t"); |
| sb.append(expire); |
| sb.append("\t; expire\n\t\t\t\t\t"); |
| sb.append(minimum); |
| sb.append(" )\t; minimum"); |
| } else { |
| sb.append(" "); |
| sb.append(serial); |
| sb.append(" "); |
| sb.append(refresh); |
| sb.append(" "); |
| sb.append(retry); |
| sb.append(" "); |
| sb.append(expire); |
| sb.append(" "); |
| sb.append(minimum); |
| } |
| return sb.toString(); |
| } |
| |
| /** Returns the primary name server */ |
| public Name |
| getHost() { |
| return host; |
| } |
| |
| /** Returns the zone administrator's address */ |
| public Name |
| getAdmin() { |
| return admin; |
| } |
| |
| /** Returns the zone's serial number */ |
| public long |
| getSerial() { |
| return serial; |
| } |
| |
| /** Returns the zone refresh interval */ |
| public long |
| getRefresh() { |
| return refresh; |
| } |
| |
| /** Returns the zone retry interval */ |
| public long |
| getRetry() { |
| return retry; |
| } |
| |
| /** Returns the time until a secondary expires a zone */ |
| public long |
| getExpire() { |
| return expire; |
| } |
| |
| /** Returns the minimum TTL for records in the zone */ |
| public long |
| getMinimum() { |
| return minimum; |
| } |
| |
| void |
| rrToWire(DNSOutput out, Compression c, boolean canonical) { |
| host.toWire(out, c, canonical); |
| admin.toWire(out, c, canonical); |
| out.writeU32(serial); |
| out.writeU32(refresh); |
| out.writeU32(retry); |
| out.writeU32(expire); |
| out.writeU32(minimum); |
| } |
| |
| } |