aboutsummaryrefslogtreecommitdiff
path: root/src/org/xbill/DNS/NSECRecord.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/xbill/DNS/NSECRecord.java')
-rw-r--r--src/org/xbill/DNS/NSECRecord.java98
1 files changed, 98 insertions, 0 deletions
diff --git a/src/org/xbill/DNS/NSECRecord.java b/src/org/xbill/DNS/NSECRecord.java
new file mode 100644
index 0000000..e523e37
--- /dev/null
+++ b/src/org/xbill/DNS/NSECRecord.java
@@ -0,0 +1,98 @@
+// Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org)
+
+package org.xbill.DNS;
+
+import java.io.*;
+
+/**
+ * Next SECure name - this record contains the following name in an
+ * ordered list of names in the zone, and a set of types for which
+ * records exist for this name. The presence of this record in a response
+ * signifies a negative response from a DNSSEC-signed zone.
+ *
+ * This replaces the NXT record.
+ *
+ * @author Brian Wellington
+ * @author David Blacka
+ */
+
+public class NSECRecord extends Record {
+
+private static final long serialVersionUID = -5165065768816265385L;
+
+private Name next;
+private TypeBitmap types;
+
+NSECRecord() {}
+
+Record
+getObject() {
+ return new NSECRecord();
+}
+
+/**
+ * Creates an NSEC Record from the given data.
+ * @param next The following name in an ordered list of the zone
+ * @param types An array containing the types present.
+ */
+public
+NSECRecord(Name name, int dclass, long ttl, Name next, int [] types) {
+ super(name, Type.NSEC, dclass, ttl);
+ this.next = checkName("next", next);
+ for (int i = 0; i < types.length; i++) {
+ Type.check(types[i]);
+ }
+ this.types = new TypeBitmap(types);
+}
+
+void
+rrFromWire(DNSInput in) throws IOException {
+ next = new Name(in);
+ types = new TypeBitmap(in);
+}
+
+void
+rrToWire(DNSOutput out, Compression c, boolean canonical) {
+ // Note: The next name is not lowercased.
+ next.toWire(out, null, false);
+ types.toWire(out);
+}
+
+void
+rdataFromString(Tokenizer st, Name origin) throws IOException {
+ next = st.getName(origin);
+ types = new TypeBitmap(st);
+}
+
+/** Converts rdata to a String */
+String
+rrToString()
+{
+ StringBuffer sb = new StringBuffer();
+ sb.append(next);
+ if (!types.empty()) {
+ sb.append(' ');
+ sb.append(types.toString());
+ }
+ return sb.toString();
+}
+
+/** Returns the next name */
+public Name
+getNext() {
+ return next;
+}
+
+/** Returns the set of types defined for this name */
+public int []
+getTypes() {
+ return types.toArray();
+}
+
+/** Returns whether a specific type is in the set of types. */
+public boolean
+hasType(int type) {
+ return types.contains(type);
+}
+
+}