51 lines
1.4 KiB
Java
Executable File
51 lines
1.4 KiB
Java
Executable File
package org.handwerkszeug.dns.server;
|
|
|
|
import static org.handwerkszeug.util.Validation.notNull;
|
|
|
|
import org.handwerkszeug.dns.*;
|
|
import org.handwerkszeug.dns.record.SingleNameRecord;
|
|
|
|
public
|
|
class DNAMEResponse extends DefaultResponse {
|
|
|
|
final SingleNameRecord dname;
|
|
final Name qname;
|
|
final RRType qtype;
|
|
|
|
public
|
|
DNAMEResponse(ResourceRecord dname, Name qname, RRType qtype) {
|
|
super(RCode.NoError);
|
|
notNull(dname, "dname");
|
|
notNull(qname, "qname");
|
|
notNull(qtype, "qtype");
|
|
this.dname = SingleNameRecord.class.cast(dname);
|
|
this.qname = qname;
|
|
this.qtype = qtype;
|
|
}
|
|
|
|
@Override
|
|
public
|
|
void postProcess(ResolveContext context) {
|
|
DNSMessage res = context.response();
|
|
res.answer()
|
|
.add(this.dname);
|
|
Name name = this.qname.replace(this.dname.name(), this.dname.oneName());
|
|
if (name == null) {
|
|
context.response()
|
|
.header()
|
|
.rcode(RCode.YXDomain);
|
|
}
|
|
else {
|
|
SingleNameRecord cname = new SingleNameRecord(RRType.CNAME, name);
|
|
cname.name(this.qname);
|
|
res.answer()
|
|
.add(cname);
|
|
res.header()
|
|
.aa(true);
|
|
Response r = context.resolve(name, this.qtype);
|
|
r.postProcess(context);
|
|
}
|
|
}
|
|
|
|
}
|