1// Copyright (c) 2004 Brian Wellington (bwelling@xbill.org) 2 3package org.xbill.DNS; 4 5import java.io.*; 6 7/** 8 * X25 - identifies the PSDN (Public Switched Data Network) address in the 9 * X.121 numbering plan associated with a name. 10 * 11 * @author Brian Wellington 12 */ 13 14public class X25Record extends Record { 15 16private static final long serialVersionUID = 4267576252335579764L; 17 18private byte [] address; 19 20X25Record() {} 21 22Record 23getObject() { 24 return new X25Record(); 25} 26 27private static final byte [] 28checkAndConvertAddress(String address) { 29 int length = address.length(); 30 byte [] out = new byte [length]; 31 for (int i = 0; i < length; i++) { 32 char c = address.charAt(i); 33 if (!Character.isDigit(c)) 34 return null; 35 out[i] = (byte) c; 36 } 37 return out; 38} 39 40/** 41 * Creates an X25 Record from the given data 42 * @param address The X.25 PSDN address. 43 * @throws IllegalArgumentException The address is not a valid PSDN address. 44 */ 45public 46X25Record(Name name, int dclass, long ttl, String address) { 47 super(name, Type.X25, dclass, ttl); 48 this.address = checkAndConvertAddress(address); 49 if (this.address == null) { 50 throw new IllegalArgumentException("invalid PSDN address " + 51 address); 52 } 53} 54 55void 56rrFromWire(DNSInput in) throws IOException { 57 address = in.readCountedString(); 58} 59 60void 61rdataFromString(Tokenizer st, Name origin) throws IOException { 62 String addr = st.getString(); 63 this.address = checkAndConvertAddress(addr); 64 if (this.address == null) 65 throw st.exception("invalid PSDN address " + addr); 66} 67 68/** 69 * Returns the X.25 PSDN address. 70 */ 71public String 72getAddress() { 73 return byteArrayToString(address, false); 74} 75 76void 77rrToWire(DNSOutput out, Compression c, boolean canonical) { 78 out.writeCountedString(address); 79} 80 81String 82rrToString() { 83 return byteArrayToString(address, true); 84} 85 86} 87