From b0f8bec1cbfa6d21e0873c63d5213bd12d429bd8 Mon Sep 17 00:00:00 2001 From: Rene Treffer Date: Wed, 23 Jul 2014 00:00:55 +0200 Subject: [PATCH] Add TXT record --- src/main/java/de/measite/minidns/Record.java | 10 ++- .../java/de/measite/minidns/record/TXT.java | 65 +++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/measite/minidns/record/TXT.java diff --git a/src/main/java/de/measite/minidns/Record.java b/src/main/java/de/measite/minidns/Record.java index f14aa0b8f..6aaf4f7d0 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 000000000..03e730401 --- /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() + "\""; + } + +}