NetworkDNS/src-wip/org/handwerkszeug/dns/record/MINFORecord.java

136 lines
3.2 KiB
Java
Executable File

package org.handwerkszeug.dns.record;
import java.util.List;
import org.handwerkszeug.dns.Name;
import org.handwerkszeug.dns.NameCompressor;
import org.handwerkszeug.dns.RRType;
import org.handwerkszeug.dns.ResourceRecord;
import io.netty.buffer.ByteBuf;
/**
* 3.3.7. MINFO RDATA format (EXPERIMENTAL)
*
* @author taichi
*/
public
class MINFORecord extends AbstractRecord<MINFORecord> {
/**
* A <domain-name> which specifies a mailbox which is responsible for the
* mailing list or mailbox. If this domain name names the root, the owner of
* the MINFO RR is responsible for itself. Note that many existing mailing
* lists use a mailbox X-request for the RMAILBX field of mailing list X,
* e.g., Msgroup-request for Msgroup. This field provides a more general
* mechanism.
*/
protected Name rmailbx;
/**
* A <domain-name> which specifies a mailbox which is to receive error
* messages related to the mailing list or mailbox specified by the owner of
* the MINFO RR (similar to the ERRORS-TO: field which has been proposed).
* If this domain name names the root, errors should be returned to the
* sender of the message.
*/
protected Name emailbx;
public
MINFORecord() {
super(RRType.MINFO);
}
public
MINFORecord(MINFORecord from) {
super(from);
this.rmailbx(from.rmailbx());
this.emailbx(from.emailbx());
}
public
Name rmailbx() {
return this.rmailbx;
}
public
void rmailbx(Name name) {
this.rmailbx = name;
}
public
Name emailbx() {
return this.emailbx;
}
public
void emailbx(Name name) {
this.emailbx = name;
}
@Override
protected
void parseRDATA(ByteBuf buffer) {
this.rmailbx = new Name(buffer);
this.emailbx = new Name(buffer);
}
@Override
protected
void writeRDATA(ByteBuf buffer, NameCompressor compressor) {
this.rmailbx()
.write(buffer, compressor);
this.emailbx()
.write(buffer, compressor);
}
@Override
protected
ResourceRecord newInstance() {
return new MINFORecord(this);
}
@Override
public
int compareTo(MINFORecord o) {
if (this == o) {
return 0;
}
int result = super.compareTo(o);
if (result == 0) {
result = this.rmailbx()
.compareTo(o.rmailbx());
if (result == 0) {
result = this.emailbx()
.compareTo(o.emailbx());
}
}
return result;
}
@Override
public
String toString() {
StringBuilder stb = new StringBuilder();
stb.append(super.toString());
stb.append(' ');
stb.append(this.rmailbx());
stb.append(' ');
stb.append(this.emailbx());
return stb.toString();
}
@Override
public
void setRDATA(List<String> list) {
if (2 == list.size()) {
this.rmailbx(new Name(list.get(0)));
this.emailbx(new Name(list.get(1)));
}
else {
// TODO error message.
throw new IllegalArgumentException();
}
}
}