blob: 4e13aa768aeea7d6caa15e2d3ecb308edcf9cfc6 [file] [log] [blame]
// 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);
}
}