• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2004 Brian Wellington (bwelling@xbill.org)
2 
3 package org.xbill.DNS;
4 
5 import java.io.*;
6 import org.xbill.DNS.utils.*;
7 
8 /**
9  * NSAP Address Record.
10  *
11  * @author Brian Wellington
12  */
13 
14 public class NSAPRecord extends Record {
15 
16 private static final long serialVersionUID = -1037209403185658593L;
17 
18 private byte [] address;
19 
NSAPRecord()20 NSAPRecord() {}
21 
22 Record
getObject()23 getObject() {
24 	return new NSAPRecord();
25 }
26 
27 private static final byte []
checkAndConvertAddress(String address)28 checkAndConvertAddress(String address) {
29 	if (!address.substring(0, 2).equalsIgnoreCase("0x")) {
30 		return null;
31 	}
32 	ByteArrayOutputStream bytes = new ByteArrayOutputStream();
33 	boolean partial = false;
34 	int current = 0;
35 	for (int i = 2; i < address.length(); i++) {
36 		char c = address.charAt(i);
37 		if (c == '.') {
38 			continue;
39 		}
40 		int value = Character.digit(c, 16);
41 		if (value == -1) {
42 			return null;
43 		}
44 		if (partial) {
45 			current += value;
46 			bytes.write(current);
47 			partial = false;
48 		} else {
49 			current = value << 4;
50 			partial = true;
51 		}
52 
53 	}
54 	if (partial) {
55 		return null;
56 	}
57 	return bytes.toByteArray();
58 }
59 
60 /**
61  * Creates an NSAP Record from the given data
62  * @param address The NSAP address.
63  * @throws IllegalArgumentException The address is not a valid NSAP address.
64  */
65 public
NSAPRecord(Name name, int dclass, long ttl, String address)66 NSAPRecord(Name name, int dclass, long ttl, String address) {
67 	super(name, Type.NSAP, dclass, ttl);
68 	this.address = checkAndConvertAddress(address);
69 	if (this.address == null) {
70 		throw new IllegalArgumentException("invalid NSAP address " +
71 						   address);
72 	}
73 }
74 
75 void
rrFromWire(DNSInput in)76 rrFromWire(DNSInput in) throws IOException {
77 	address = in.readByteArray();
78 }
79 
80 void
rdataFromString(Tokenizer st, Name origin)81 rdataFromString(Tokenizer st, Name origin) throws IOException {
82 	String addr = st.getString();
83 	this.address = checkAndConvertAddress(addr);
84 	if (this.address == null)
85 		throw st.exception("invalid NSAP address " + addr);
86 }
87 
88 /**
89  * Returns the NSAP address.
90  */
91 public String
getAddress()92 getAddress() {
93 	return byteArrayToString(address, false);
94 }
95 
96 void
rrToWire(DNSOutput out, Compression c, boolean canonical)97 rrToWire(DNSOutput out, Compression c, boolean canonical) {
98 	out.writeByteArray(address);
99 }
100 
101 String
rrToString()102 rrToString() {
103 	return "0x" + base16.toString(address);
104 }
105 
106 }
107