| // 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); |
| } |
| |
| } |