1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Copyright (c) 2003-2004 Brian Wellington (bwelling@xbill.org) 2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.xbill.DNS; 4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.io.*; 6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.*; 7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * A helper class for constructing dynamic DNS (DDNS) update messages. 10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Brian Wellington 12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class Update extends Message { 15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate Name origin; 17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate int dclass; 18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Creates an update message. 21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param zone The name of the zone being updated. 22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param dclass The class of the zone being updated. 23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic 25d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenUpdate(Name zone, int dclass) { 26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen super(); 27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (!zone.isAbsolute()) 28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen throw new RelativeNameException(zone); 29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen DClass.check(dclass); 30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen getHeader().setOpcode(Opcode.UPDATE); 31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen Record soa = Record.newRecord(zone, Type.SOA, DClass.IN); 32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen addRecord(soa, Section.QUESTION); 33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.origin = zone; 34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.dclass = dclass; 35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Creates an update message. The class is assumed to be IN. 39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param zone The name of the zone being updated. 40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic 42d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenUpdate(Name zone) { 43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this(zone, DClass.IN); 44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate void 47d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChennewPrereq(Record rec) { 48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen addRecord(rec, Section.PREREQ); 49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate void 52d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChennewUpdate(Record rec) { 53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen addRecord(rec, Section.UPDATE); 54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Inserts a prerequisite that the specified name exists; that is, there 58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * exist records with the given name in the zone. 59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpresent(Name name) { 62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen newPrereq(Record.newRecord(name, Type.ANY, DClass.ANY, 0)); 63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Inserts a prerequisite that the specified rrset exists; that is, there 67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * exist records with the given name and type in the zone. 68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpresent(Name name, int type) { 71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen newPrereq(Record.newRecord(name, type, DClass.ANY, 0)); 72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Parses a record from the string, and inserts a prerequisite that the 76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * record exists. Due to the way value-dependent prequisites work, the 77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * condition that must be met is that the set of all records with the same 78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * and type in the update message must be identical to the set of all records 79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * with that name and type on the server. 80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws IOException The record could not be parsed. 81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpresent(Name name, int type, String record) throws IOException { 84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen newPrereq(Record.fromString(name, type, dclass, 0, record, origin)); 85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Parses a record from the tokenizer, and inserts a prerequisite that the 89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * record exists. Due to the way value-dependent prequisites work, the 90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * condition that must be met is that the set of all records with the same 91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * and type in the update message must be identical to the set of all records 92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * with that name and type on the server. 93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws IOException The record could not be parsed. 94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpresent(Name name, int type, Tokenizer tokenizer) throws IOException { 97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen newPrereq(Record.fromString(name, type, dclass, 0, tokenizer, origin)); 98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Inserts a prerequisite that the specified record exists. Due to the way 102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * value-dependent prequisites work, the condition that must be met is that 103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * the set of all records with the same and type in the update message must 104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * be identical to the set of all records with that name and type on the server. 105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpresent(Record record) { 108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen newPrereq(record); 109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Inserts a prerequisite that the specified name does not exist; that is, 113d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * there are no records with the given name in the zone. 114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 116d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenabsent(Name name) { 117d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen newPrereq(Record.newRecord(name, Type.ANY, DClass.NONE, 0)); 118d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 119d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 120d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 121d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Inserts a prerequisite that the specified rrset does not exist; that is, 122d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * there are no records with the given name and type in the zone. 123d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 124d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 125d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenabsent(Name name, int type) { 126d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen newPrereq(Record.newRecord(name, type, DClass.NONE, 0)); 127d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 128d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 129d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 130d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Parses a record from the string, and indicates that the record 131d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * should be inserted into the zone. 132d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws IOException The record could not be parsed. 133d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 134d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 135d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenadd(Name name, int type, long ttl, String record) throws IOException { 136d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen newUpdate(Record.fromString(name, type, dclass, ttl, record, origin)); 137d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 138d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 139d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 140d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Parses a record from the tokenizer, and indicates that the record 141d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * should be inserted into the zone. 142d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws IOException The record could not be parsed. 143d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 144d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 145d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenadd(Name name, int type, long ttl, Tokenizer tokenizer) throws IOException { 146d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen newUpdate(Record.fromString(name, type, dclass, ttl, tokenizer, 147d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen origin)); 148d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 149d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 150d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 151d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that the record should be inserted into the zone. 152d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 153d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 154d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenadd(Record record) { 155d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen newUpdate(record); 156d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 157d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 158d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 159d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that the records should be inserted into the zone. 160d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 161d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 162d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenadd(Record [] records) { 163d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (int i = 0; i < records.length; i++) 164d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen add(records[i]); 165d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 166d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 167d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 168d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that all of the records in the rrset should be inserted into the 169d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * zone. 170d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 171d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 172d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenadd(RRset rrset) { 173d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (Iterator it = rrset.rrs(); it.hasNext(); ) 174d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen add((Record) it.next()); 175d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 176d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 177d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 178d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that all records with the given name should be deleted from 179d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * the zone. 180d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 181d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 182d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chendelete(Name name) { 183d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen newUpdate(Record.newRecord(name, Type.ANY, DClass.ANY, 0)); 184d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 185d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 186d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 187d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that all records with the given name and type should be deleted 188d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * from the zone. 189d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 190d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 191d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chendelete(Name name, int type) { 192d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen newUpdate(Record.newRecord(name, type, DClass.ANY, 0)); 193d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 194d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 195d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 196d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Parses a record from the string, and indicates that the record 197d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * should be deleted from the zone. 198d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws IOException The record could not be parsed. 199d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 200d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 201d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chendelete(Name name, int type, String record) throws IOException { 202d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen newUpdate(Record.fromString(name, type, DClass.NONE, 0, record, 203d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen origin)); 204d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 205d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 206d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 207d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Parses a record from the tokenizer, and indicates that the record 208d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * should be deleted from the zone. 209d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws IOException The record could not be parsed. 210d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 211d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 212d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chendelete(Name name, int type, Tokenizer tokenizer) throws IOException { 213d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen newUpdate(Record.fromString(name, type, DClass.NONE, 0, tokenizer, 214d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen origin)); 215d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 216d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 217d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 218d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that the specified record should be deleted from the zone. 219d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 220d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 221d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chendelete(Record record) { 222d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen newUpdate(record.withDClass(DClass.NONE, 0)); 223d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 224d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 225d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 226d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that the records should be deleted from the zone. 227d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 228d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 229d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chendelete(Record [] records) { 230d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (int i = 0; i < records.length; i++) 231d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen delete(records[i]); 232d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 233d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 234d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 235d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that all of the records in the rrset should be deleted from the 236d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * zone. 237d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 238d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 239d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chendelete(RRset rrset) { 240d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (Iterator it = rrset.rrs(); it.hasNext(); ) 241d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen delete((Record) it.next()); 242d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 243d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 244d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 245d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Parses a record from the string, and indicates that the record 246d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * should be inserted into the zone replacing any other records with the 247d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * same name and type. 248d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws IOException The record could not be parsed. 249d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 250d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 251d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenreplace(Name name, int type, long ttl, String record) throws IOException { 252d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen delete(name, type); 253d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen add(name, type, ttl, record); 254d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 255d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 256d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 257d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Parses a record from the tokenizer, and indicates that the record 258d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * should be inserted into the zone replacing any other records with the 259d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * same name and type. 260d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws IOException The record could not be parsed. 261d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 262d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 263d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenreplace(Name name, int type, long ttl, Tokenizer tokenizer) throws IOException 264d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen{ 265d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen delete(name, type); 266d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen add(name, type, ttl, tokenizer); 267d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 268d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 269d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 270d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that the record should be inserted into the zone replacing any 271d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * other records with the same name and type. 272d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 273d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 274d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenreplace(Record record) { 275d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen delete(record.getName(), record.getType()); 276d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen add(record); 277d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 278d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 279d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 280d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that the records should be inserted into the zone replacing any 281d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * other records with the same name and type as each one. 282d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 283d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 284d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenreplace(Record [] records) { 285d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (int i = 0; i < records.length; i++) 286d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen replace(records[i]); 287d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 288d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 289d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 290d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that all of the records in the rrset should be inserted into the 291d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * zone replacing any other records with the same name and type. 292d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 293d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void 294d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenreplace(RRset rrset) { 295d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen delete(rrset.getName(), rrset.getType()); 296d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen for (Iterator it = rrset.rrs(); it.hasNext(); ) 297d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen add((Record) it.next()); 298d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 299d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 300d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 301