1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Copyright (c) 2004 Brian Wellington (bwelling@xbill.org) 2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.xbill.DNS; 4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.io.*; 6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * ISDN - identifies the ISDN number and subaddress associated with a name. 9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Brian Wellington 11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class ISDNRecord extends Record { 14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate static final long serialVersionUID = -8730801385178968798L; 16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate byte [] address; 18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate byte [] subAddress; 19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 20d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenISDNRecord() {} 21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 22d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenRecord 23d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChengetObject() { 24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return new ISDNRecord(); 25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Creates an ISDN Record from the given data 29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param address The ISDN number associated with the domain. 30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param subAddress The subaddress, if any. 31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws IllegalArgumentException One of the strings is invalid. 32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic 34d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenISDNRecord(Name name, int dclass, long ttl, String address, String subAddress) { 35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen super(name, Type.ISDN, dclass, ttl); 36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen try { 37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.address = byteArrayFromString(address); 38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (subAddress != null) 39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.subAddress = byteArrayFromString(subAddress); 40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen catch (TextParseException e) { 42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen throw new IllegalArgumentException(e.getMessage()); 43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenvoid 47d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenrrFromWire(DNSInput in) throws IOException { 48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen address = in.readCountedString(); 49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (in.remaining() > 0) 50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen subAddress = in.readCountedString(); 51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenvoid 54d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenrdataFromString(Tokenizer st, Name origin) throws IOException { 55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen try { 56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen address = byteArrayFromString(st.getString()); 57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen Tokenizer.Token t = st.get(); 58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (t.isString()) { 59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen subAddress = byteArrayFromString(t.value); 60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } else { 61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen st.unget(); 62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen catch (TextParseException e) { 65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen throw st.exception(e.getMessage()); 66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the ISDN number associated with the domain. 71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic String 73d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChengetAddress() { 74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return byteArrayToString(address, false); 75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the ISDN subaddress, or null if there is none. 79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic String 81d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChengetSubAddress() { 82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (subAddress == null) 83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return null; 84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return byteArrayToString(subAddress, false); 85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenvoid 88d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenrrToWire(DNSOutput out, Compression c, boolean canonical) { 89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen out.writeCountedString(address); 90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (subAddress != null) 91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen out.writeCountedString(subAddress); 92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 94d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenString 95d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenrrToString() { 96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen StringBuffer sb = new StringBuffer(); 97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen sb.append(byteArrayToString(address, true)); 98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (subAddress != null) { 99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen sb.append(" "); 100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen sb.append(byteArrayToString(subAddress, true)); 101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return sb.toString(); 103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 106