aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/de/measite/minidns/Record.java10
-rw-r--r--src/main/java/de/measite/minidns/record/TXT.java65
2 files changed, 74 insertions, 1 deletions
diff --git a/src/main/java/de/measite/minidns/Record.java b/src/main/java/de/measite/minidns/Record.java
index f14aa0b8..6aaf4f7d 100644
--- a/src/main/java/de/measite/minidns/Record.java
+++ b/src/main/java/de/measite/minidns/Record.java
@@ -11,6 +11,7 @@ import de.measite.minidns.record.Data;
import de.measite.minidns.record.NS;
import de.measite.minidns.record.PTR;
import de.measite.minidns.record.SRV;
+import de.measite.minidns.record.TXT;
import de.measite.minidns.util.NameUtil;
/**
@@ -231,7 +232,11 @@ public class Record {
public void parse(DataInputStream dis, byte[] data) throws IOException {
this.name = NameUtil.parse(dis, data);
this.type = TYPE.getType(dis.readUnsignedShort());
- this.clazz = CLASS.getClass(dis.readUnsignedShort());
+ int clazzValue = dis.readUnsignedShort();
+ this.clazz = CLASS.getClass(clazzValue);
+ if (this.clazz == null) {
+ System.out.println("Unknown class " + clazzValue);
+ }
this.ttl = (((long)dis.readUnsignedShort()) << 32) +
dis.readUnsignedShort();
int payloadLength = dis.readUnsignedShort();
@@ -254,6 +259,9 @@ public class Record {
case PTR:
this.payloadData = new PTR();
break;
+ case TXT:
+ this.payloadData = new TXT();
+ break;
default:
System.out.println("Unparsed type " + type);
this.payloadData = null;
diff --git a/src/main/java/de/measite/minidns/record/TXT.java b/src/main/java/de/measite/minidns/record/TXT.java
new file mode 100644
index 00000000..03e73040
--- /dev/null
+++ b/src/main/java/de/measite/minidns/record/TXT.java
@@ -0,0 +1,65 @@
+package de.measite.minidns.record;
+
+import java.io.DataInputStream;
+import java.io.IOException;
+
+import de.measite.minidns.Record.TYPE;
+import de.measite.minidns.util.NameUtil;
+
+/**
+ * TXT record (actually a binary blob with wrappers for text content).
+ */
+public class TXT implements Data {
+
+ protected byte[] blob;
+
+ public byte[] getBlob() {
+ return blob;
+ }
+
+ public void setBlob(byte[] blob) {
+ this.blob = blob;
+ }
+
+ public String getText() {
+ try {
+ return (new String(blob, "UTF-8")).intern();
+ } catch (Exception e) {
+ /* Can't happen for UTF-8 unless it's really a blob */
+ return null;
+ }
+ }
+
+ public void setText(String text) {
+ try {
+ this.blob = text.getBytes("UTF-8");
+ } catch (Exception e) {
+ /* Can't happen, UTF-8 IS supported */
+ throw new RuntimeException("UTF-8 not supported", e);
+ }
+ }
+
+ @Override
+ public byte[] toByteArray() {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
+ @Override
+ public void parse(DataInputStream dis, byte[] data, int length)
+ throws IOException
+ {
+ blob = new byte[length];
+ dis.readFully(blob);
+ }
+
+ @Override
+ public TYPE getType() {
+ return TYPE.TXT;
+ }
+
+ @Override
+ public String toString() {
+ return "\"" + getText() + "\"";
+ }
+
+}