blob: 4e13aa768aeea7d6caa15e2d3ecb308edcf9cfc6 [file] [log] [blame]
Shuyi Chend7955ce2013-05-22 14:51:55 -07001// Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org)
2
3package org.xbill.DNS;
4
5import java.net.*;
6import java.io.*;
7
8/**
9 * Address Record - maps a domain name to an Internet address
10 *
11 * @author Brian Wellington
12 */
13
14public class ARecord extends Record {
15
16private static final long serialVersionUID = -2172609200849142323L;
17
18private int addr;
19
20ARecord() {}
21
22Record
23getObject() {
24 return new ARecord();
25}
26
27private static final int
28fromArray(byte [] array) {
29 return (((array[0] & 0xFF) << 24) |
30 ((array[1] & 0xFF) << 16) |
31 ((array[2] & 0xFF) << 8) |
32 (array[3] & 0xFF));
33}
34
35private static final byte []
36toArray(int addr) {
37 byte [] bytes = new byte[4];
38 bytes[0] = (byte) ((addr >>> 24) & 0xFF);
39 bytes[1] = (byte) ((addr >>> 16) & 0xFF);
40 bytes[2] = (byte) ((addr >>> 8) & 0xFF);
41 bytes[3] = (byte) (addr & 0xFF);
42 return bytes;
43}
44
45/**
46 * Creates an A Record from the given data
47 * @param address The address that the name refers to
48 */
49public
50ARecord(Name name, int dclass, long ttl, InetAddress address) {
51 super(name, Type.A, dclass, ttl);
52 if (Address.familyOf(address) != Address.IPv4)
53 throw new IllegalArgumentException("invalid IPv4 address");
54 addr = fromArray(address.getAddress());
55}
56
57void
58rrFromWire(DNSInput in) throws IOException {
59 addr = fromArray(in.readByteArray(4));
60}
61
62void
63rdataFromString(Tokenizer st, Name origin) throws IOException {
64 InetAddress address = st.getAddress(Address.IPv4);
65 addr = fromArray(address.getAddress());
66}
67
68/** Converts rdata to a String */
69String
70rrToString() {
71 return (Address.toDottedQuad(toArray(addr)));
72}
73
74/** Returns the Internet address */
75public InetAddress
76getAddress() {
77 try {
78 return InetAddress.getByAddress(name.toString(),
79 toArray(addr));
80 } catch (UnknownHostException e) {
81 return null;
82 }
83}
84
85void
86rrToWire(DNSOutput out, Compression c, boolean canonical) {
87 out.writeU32(((long)addr) & 0xFFFFFFFFL);
88}
89
90}