107 */
108 ZoneNode getDeepestPopulated(DnsName fqdn) {
109 ZoneNode znode = this;
110 ZoneNode popNode = isPopulated() ? this : null;
111 for (int i = 1; i < fqdn.size(); i++) { // "i=1" to skip root label
112 znode = (ZoneNode) znode.get(fqdn.getKey(i));
113 if (znode == null) {
114 break;
115 } else if (znode.isPopulated()) {
116 popNode = znode;
117 }
118 }
119 return popNode;
120 }
121
122 /*
123 * Populates (or repopulates) a zone given its own fully-qualified
124 * name and its resource records. Returns the zone's new contents.
125 */
126 NameNode populate(DnsName zone, ResourceRecords rrs) {
127 // assert zone.get(0).equals(""); // zone has root label
128 // assert (zone.size() == (depth() + 1)); // +1 due to root label
129
130 NameNode newContents = new NameNode(null);
131
132 for (int i = 0; i < rrs.answer.size(); i++) {
133 ResourceRecord rr = rrs.answer.elementAt(i);
134 DnsName n = rr.getName();
135
136 // Ignore resource records whose names aren't within the zone's
137 // domain. Also skip records of the zone's top node, since
138 // the zone's root NameNode is already in place.
139 if ((n.size() > zone.size()) && n.startsWith(zone)) {
140 NameNode nnode = newContents.add(n, zone.size());
141 if (rr.getType() == ResourceRecord.TYPE_NS) {
142 nnode.setZoneCut(true);
143 }
144 }
145 }
146 // The zone's SOA record is the first record in the answer section.
147 ResourceRecord soa = rrs.answer.firstElement();
|
107 */
108 ZoneNode getDeepestPopulated(DnsName fqdn) {
109 ZoneNode znode = this;
110 ZoneNode popNode = isPopulated() ? this : null;
111 for (int i = 1; i < fqdn.size(); i++) { // "i=1" to skip root label
112 znode = (ZoneNode) znode.get(fqdn.getKey(i));
113 if (znode == null) {
114 break;
115 } else if (znode.isPopulated()) {
116 popNode = znode;
117 }
118 }
119 return popNode;
120 }
121
122 /*
123 * Populates (or repopulates) a zone given its own fully-qualified
124 * name and its resource records. Returns the zone's new contents.
125 */
126 NameNode populate(DnsName zone, ResourceRecords rrs) {
127 // assert zone.get(0).isEmpty(); // zone has root label
128 // assert (zone.size() == (depth() + 1)); // +1 due to root label
129
130 NameNode newContents = new NameNode(null);
131
132 for (int i = 0; i < rrs.answer.size(); i++) {
133 ResourceRecord rr = rrs.answer.elementAt(i);
134 DnsName n = rr.getName();
135
136 // Ignore resource records whose names aren't within the zone's
137 // domain. Also skip records of the zone's top node, since
138 // the zone's root NameNode is already in place.
139 if ((n.size() > zone.size()) && n.startsWith(zone)) {
140 NameNode nnode = newContents.add(n, zone.size());
141 if (rr.getType() == ResourceRecord.TYPE_NS) {
142 nnode.setZoneCut(true);
143 }
144 }
145 }
146 // The zone's SOA record is the first record in the answer section.
147 ResourceRecord soa = rrs.answer.firstElement();
|