aboutsummaryrefslogtreecommitdiff
path: root/src/org/xbill/DNS/ARecord.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/xbill/DNS/ARecord.java')
-rw-r--r--src/org/xbill/DNS/ARecord.java90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/org/xbill/DNS/ARecord.java b/src/org/xbill/DNS/ARecord.java
new file mode 100644
index 0000000..4e13aa7
--- /dev/null
+++ b/src/org/xbill/DNS/ARecord.java
@@ -0,0 +1,90 @@
+// Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org)
+
+package org.xbill.DNS;
+
+import java.net.*;
+import java.io.*;
+
+/**
+ * Address Record - maps a domain name to an Internet address
+ *
+ * @author Brian Wellington
+ */
+
+public class ARecord extends Record {
+
+private static final long serialVersionUID = -2172609200849142323L;
+
+private int addr;
+
+ARecord() {}
+
+Record
+getObject() {
+ return new ARecord();
+}
+
+private static final int
+fromArray(byte [] array) {
+ return (((array[0] & 0xFF) << 24) |
+ ((array[1] & 0xFF) << 16) |
+ ((array[2] & 0xFF) << 8) |
+ (array[3] & 0xFF));
+}
+
+private static final byte []
+toArray(int addr) {
+ byte [] bytes = new byte[4];
+ bytes[0] = (byte) ((addr >>> 24) & 0xFF);
+ bytes[1] = (byte) ((addr >>> 16) & 0xFF);
+ bytes[2] = (byte) ((addr >>> 8) & 0xFF);
+ bytes[3] = (byte) (addr & 0xFF);
+ return bytes;
+}
+
+/**
+ * Creates an A Record from the given data
+ * @param address The address that the name refers to
+ */
+public
+ARecord(Name name, int dclass, long ttl, InetAddress address) {
+ super(name, Type.A, dclass, ttl);
+ if (Address.familyOf(address) != Address.IPv4)
+ throw new IllegalArgumentException("invalid IPv4 address");
+ addr = fromArray(address.getAddress());
+}
+
+void
+rrFromWire(DNSInput in) throws IOException {
+ addr = fromArray(in.readByteArray(4));
+}
+
+void
+rdataFromString(Tokenizer st, Name origin) throws IOException {
+ InetAddress address = st.getAddress(Address.IPv4);
+ addr = fromArray(address.getAddress());
+}
+
+/** Converts rdata to a String */
+String
+rrToString() {
+ return (Address.toDottedQuad(toArray(addr)));
+}
+
+/** Returns the Internet address */
+public InetAddress
+getAddress() {
+ try {
+ return InetAddress.getByAddress(name.toString(),
+ toArray(addr));
+ } catch (UnknownHostException e) {
+ return null;
+ }
+}
+
+void
+rrToWire(DNSOutput out, Compression c, boolean canonical) {
+ out.writeU32(((long)addr) & 0xFFFFFFFFL);
+}
+
+}