diff options
Diffstat (limited to 'src/org/xbill/DNS/NAPTRRecord.java')
-rw-r--r-- | src/org/xbill/DNS/NAPTRRecord.java | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/src/org/xbill/DNS/NAPTRRecord.java b/src/org/xbill/DNS/NAPTRRecord.java new file mode 100644 index 0000000..da2ec6d --- /dev/null +++ b/src/org/xbill/DNS/NAPTRRecord.java @@ -0,0 +1,154 @@ +// Copyright (c) 2000-2004 Brian Wellington (bwelling@xbill.org) + +package org.xbill.DNS; + +import java.io.*; + +/** + * Name Authority Pointer Record - specifies rewrite rule, that when applied + * to an existing string will produce a new domain. + * + * @author Chuck Santos + */ + +public class NAPTRRecord extends Record { + +private static final long serialVersionUID = 5191232392044947002L; + +private int order, preference; +private byte [] flags, service, regexp; +private Name replacement; + +NAPTRRecord() {} + +Record +getObject() { + return new NAPTRRecord(); +} + +/** + * Creates an NAPTR Record from the given data + * @param order The order of this NAPTR. Records with lower order are + * preferred. + * @param preference The preference, used to select between records at the + * same order. + * @param flags The control aspects of the NAPTRRecord. + * @param service The service or protocol available down the rewrite path. + * @param regexp The regular/substitution expression. + * @param replacement The domain-name to query for the next DNS resource + * record, depending on the value of the flags field. + * @throws IllegalArgumentException One of the strings has invalid escapes + */ +public +NAPTRRecord(Name name, int dclass, long ttl, int order, int preference, + String flags, String service, String regexp, Name replacement) +{ + super(name, Type.NAPTR, dclass, ttl); + this.order = checkU16("order", order); + this.preference = checkU16("preference", preference); + try { + this.flags = byteArrayFromString(flags); + this.service = byteArrayFromString(service); + this.regexp = byteArrayFromString(regexp); + } + catch (TextParseException e) { + throw new IllegalArgumentException(e.getMessage()); + } + this.replacement = checkName("replacement", replacement); +} + +void +rrFromWire(DNSInput in) throws IOException { + order = in.readU16(); + preference = in.readU16(); + flags = in.readCountedString(); + service = in.readCountedString(); + regexp = in.readCountedString(); + replacement = new Name(in); +} + +void +rdataFromString(Tokenizer st, Name origin) throws IOException { + order = st.getUInt16(); + preference = st.getUInt16(); + try { + flags = byteArrayFromString(st.getString()); + service = byteArrayFromString(st.getString()); + regexp = byteArrayFromString(st.getString()); + } + catch (TextParseException e) { + throw st.exception(e.getMessage()); + } + replacement = st.getName(origin); +} + +/** Converts rdata to a String */ +String +rrToString() { + StringBuffer sb = new StringBuffer(); + sb.append(order); + sb.append(" "); + sb.append(preference); + sb.append(" "); + sb.append(byteArrayToString(flags, true)); + sb.append(" "); + sb.append(byteArrayToString(service, true)); + sb.append(" "); + sb.append(byteArrayToString(regexp, true)); + sb.append(" "); + sb.append(replacement); + return sb.toString(); +} + +/** Returns the order */ +public int +getOrder() { + return order; +} + +/** Returns the preference */ +public int +getPreference() { + return preference; +} + +/** Returns flags */ +public String +getFlags() { + return byteArrayToString(flags, false); +} + +/** Returns service */ +public String +getService() { + return byteArrayToString(service, false); +} + +/** Returns regexp */ +public String +getRegexp() { + return byteArrayToString(regexp, false); +} + +/** Returns the replacement domain-name */ +public Name +getReplacement() { + return replacement; +} + +void +rrToWire(DNSOutput out, Compression c, boolean canonical) { + out.writeU16(order); + out.writeU16(preference); + out.writeCountedString(flags); + out.writeCountedString(service); + out.writeCountedString(regexp); + replacement.toWire(out, null, canonical); +} + +public Name +getAdditionalName() { + return replacement; +} + +} |