• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org)
2 
3 package org.xbill.DNS;
4 
5 import java.net.*;
6 import java.io.*;
7 
8 /**
9  * Address Record - maps a domain name to an Internet address
10  *
11  * @author Brian Wellington
12  */
13 
14 public class ARecord extends Record {
15 
16 private static final long serialVersionUID = -2172609200849142323L;
17 
18 private int addr;
19 
ARecord()20 ARecord() {}
21 
22 Record
getObject()23 getObject() {
24 	return new ARecord();
25 }
26 
27 private static final int
fromArray(byte [] array)28 fromArray(byte [] array) {
29 	return (((array[0] & 0xFF) << 24) |
30 		((array[1] & 0xFF) << 16) |
31 		((array[2] & 0xFF) << 8) |
32 		(array[3] & 0xFF));
33 }
34 
35 private static final byte []
toArray(int addr)36 toArray(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  */
49 public
ARecord(Name name, int dclass, long ttl, InetAddress address)50 ARecord(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 
57 void
rrFromWire(DNSInput in)58 rrFromWire(DNSInput in) throws IOException {
59 	addr = fromArray(in.readByteArray(4));
60 }
61 
62 void
rdataFromString(Tokenizer st, Name origin)63 rdataFromString(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 */
69 String
rrToString()70 rrToString() {
71 	return (Address.toDottedQuad(toArray(addr)));
72 }
73 
74 /** Returns the Internet address */
75 public InetAddress
getAddress()76 getAddress() {
77 	try {
78 		return InetAddress.getByAddress(name.toString(),
79 						toArray(addr));
80 	} catch (UnknownHostException e) {
81 		return null;
82 	}
83 }
84 
85 void
rrToWire(DNSOutput out, Compression c, boolean canonical)86 rrToWire(DNSOutput out, Compression c, boolean canonical) {
87 	out.writeU32(((long)addr) & 0xFFFFFFFFL);
88 }
89 
90 }
91