e8efcd82a8
Motivation: We can just use Objects.requireNonNull(...) as a replacement for ObjectUtil.checkNotNull(....) Modifications: - Use Objects.requireNonNull(...) Result: Less code to maintain.
220 lines
7.0 KiB
Java
220 lines
7.0 KiB
Java
/*
|
|
* Copyright 2015 The Netty Project
|
|
*
|
|
* The Netty Project licenses this file to you under the Apache License,
|
|
* version 2.0 (the "License"); you may not use this file except in compliance
|
|
* with the License. You may obtain a copy of the License at:
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations
|
|
* under the License.
|
|
*/
|
|
package io.netty.handler.codec.dns;
|
|
|
|
import io.netty.util.internal.UnstableApi;
|
|
|
|
import static java.util.Objects.requireNonNull;
|
|
|
|
/**
|
|
* The DNS {@code RCODE}, as defined in <a href="https://tools.ietf.org/html/rfc2929">RFC2929</a>.
|
|
*/
|
|
@UnstableApi
|
|
public class DnsResponseCode implements Comparable<DnsResponseCode> {
|
|
|
|
/**
|
|
* The 'NoError' DNS RCODE (0), as defined in <a href="https://tools.ietf.org/html/rfc1035">RFC1035</a>.
|
|
*/
|
|
public static final DnsResponseCode NOERROR = new DnsResponseCode(0, "NoError");
|
|
|
|
/**
|
|
* The 'FormErr' DNS RCODE (1), as defined in <a href="https://tools.ietf.org/html/rfc1035">RFC1035</a>.
|
|
*/
|
|
public static final DnsResponseCode FORMERR = new DnsResponseCode(1, "FormErr");
|
|
|
|
/**
|
|
* The 'ServFail' DNS RCODE (2), as defined in <a href="https://tools.ietf.org/html/rfc1035">RFC1035</a>.
|
|
*/
|
|
public static final DnsResponseCode SERVFAIL = new DnsResponseCode(2, "ServFail");
|
|
|
|
/**
|
|
* The 'NXDomain' DNS RCODE (3), as defined in <a href="https://tools.ietf.org/html/rfc1035">RFC1035</a>.
|
|
*/
|
|
public static final DnsResponseCode NXDOMAIN = new DnsResponseCode(3, "NXDomain");
|
|
|
|
/**
|
|
* The 'NotImp' DNS RCODE (4), as defined in <a href="https://tools.ietf.org/html/rfc1035">RFC1035</a>.
|
|
*/
|
|
public static final DnsResponseCode NOTIMP = new DnsResponseCode(4, "NotImp");
|
|
|
|
/**
|
|
* The 'Refused' DNS RCODE (5), as defined in <a href="https://tools.ietf.org/html/rfc1035">RFC1035</a>.
|
|
*/
|
|
public static final DnsResponseCode REFUSED = new DnsResponseCode(5, "Refused");
|
|
|
|
/**
|
|
* The 'YXDomain' DNS RCODE (6), as defined in <a href="https://tools.ietf.org/html/rfc2136">RFC2136</a>.
|
|
*/
|
|
public static final DnsResponseCode YXDOMAIN = new DnsResponseCode(6, "YXDomain");
|
|
|
|
/**
|
|
* The 'YXRRSet' DNS RCODE (7), as defined in <a href="https://tools.ietf.org/html/rfc2136">RFC2136</a>.
|
|
*/
|
|
public static final DnsResponseCode YXRRSET = new DnsResponseCode(7, "YXRRSet");
|
|
|
|
/**
|
|
* The 'NXRRSet' DNS RCODE (8), as defined in <a href="https://tools.ietf.org/html/rfc2136">RFC2136</a>.
|
|
*/
|
|
public static final DnsResponseCode NXRRSET = new DnsResponseCode(8, "NXRRSet");
|
|
|
|
/**
|
|
* The 'NotAuth' DNS RCODE (9), as defined in <a href="https://tools.ietf.org/html/rfc2136">RFC2136</a>.
|
|
*/
|
|
public static final DnsResponseCode NOTAUTH = new DnsResponseCode(9, "NotAuth");
|
|
|
|
/**
|
|
* The 'NotZone' DNS RCODE (10), as defined in <a href="https://tools.ietf.org/html/rfc2136">RFC2136</a>.
|
|
*/
|
|
public static final DnsResponseCode NOTZONE = new DnsResponseCode(10, "NotZone");
|
|
|
|
/**
|
|
* The 'BADVERS' or 'BADSIG' DNS RCODE (16), as defined in <a href="https://tools.ietf.org/html/rfc2671">RFC2671</a>
|
|
* and <a href="https://tools.ietf.org/html/rfc2845">RFC2845</a>.
|
|
*/
|
|
public static final DnsResponseCode BADVERS_OR_BADSIG = new DnsResponseCode(16, "BADVERS_OR_BADSIG");
|
|
|
|
/**
|
|
* The 'BADKEY' DNS RCODE (17), as defined in <a href="https://tools.ietf.org/html/rfc2845">RFC2845</a>.
|
|
*/
|
|
public static final DnsResponseCode BADKEY = new DnsResponseCode(17, "BADKEY");
|
|
|
|
/**
|
|
* The 'BADTIME' DNS RCODE (18), as defined in <a href="https://tools.ietf.org/html/rfc2845">RFC2845</a>.
|
|
*/
|
|
public static final DnsResponseCode BADTIME = new DnsResponseCode(18, "BADTIME");
|
|
|
|
/**
|
|
* The 'BADMODE' DNS RCODE (19), as defined in <a href="https://tools.ietf.org/html/rfc2930">RFC2930</a>.
|
|
*/
|
|
public static final DnsResponseCode BADMODE = new DnsResponseCode(19, "BADMODE");
|
|
|
|
/**
|
|
* The 'BADNAME' DNS RCODE (20), as defined in <a href="https://tools.ietf.org/html/rfc2930">RFC2930</a>.
|
|
*/
|
|
public static final DnsResponseCode BADNAME = new DnsResponseCode(20, "BADNAME");
|
|
|
|
/**
|
|
* The 'BADALG' DNS RCODE (21), as defined in <a href="https://tools.ietf.org/html/rfc2930">RFC2930</a>.
|
|
*/
|
|
public static final DnsResponseCode BADALG = new DnsResponseCode(21, "BADALG");
|
|
|
|
/**
|
|
* Returns the {@link DnsResponseCode} that corresponds with the given {@code responseCode}.
|
|
*
|
|
* @param responseCode the DNS RCODE
|
|
*
|
|
* @return the corresponding {@link DnsResponseCode}
|
|
*/
|
|
public static DnsResponseCode valueOf(int responseCode) {
|
|
switch (responseCode) {
|
|
case 0:
|
|
return NOERROR;
|
|
case 1:
|
|
return FORMERR;
|
|
case 2:
|
|
return SERVFAIL;
|
|
case 3:
|
|
return NXDOMAIN;
|
|
case 4:
|
|
return NOTIMP;
|
|
case 5:
|
|
return REFUSED;
|
|
case 6:
|
|
return YXDOMAIN;
|
|
case 7:
|
|
return YXRRSET;
|
|
case 8:
|
|
return NXRRSET;
|
|
case 9:
|
|
return NOTAUTH;
|
|
case 10:
|
|
return NOTZONE;
|
|
case 16:
|
|
return BADVERS_OR_BADSIG;
|
|
case 17:
|
|
return BADKEY;
|
|
case 18:
|
|
return BADTIME;
|
|
case 19:
|
|
return BADMODE;
|
|
case 20:
|
|
return BADNAME;
|
|
case 21:
|
|
return BADALG;
|
|
default:
|
|
return new DnsResponseCode(responseCode);
|
|
}
|
|
}
|
|
|
|
private final int code;
|
|
private final String name;
|
|
private String text;
|
|
|
|
private DnsResponseCode(int code) {
|
|
this(code, "UNKNOWN");
|
|
}
|
|
|
|
public DnsResponseCode(int code, String name) {
|
|
if (code < 0 || code > 65535) {
|
|
throw new IllegalArgumentException("code: " + code + " (expected: 0 ~ 65535)");
|
|
}
|
|
|
|
this.code = code;
|
|
this.name = requireNonNull(name, "name");
|
|
}
|
|
|
|
/**
|
|
* Returns the error code for this {@link DnsResponseCode}.
|
|
*/
|
|
public int intValue() {
|
|
return code;
|
|
}
|
|
|
|
@Override
|
|
public int compareTo(DnsResponseCode o) {
|
|
return intValue() - o.intValue();
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return intValue();
|
|
}
|
|
|
|
/**
|
|
* Equality of {@link DnsResponseCode} only depends on {@link #intValue()}.
|
|
*/
|
|
@Override
|
|
public boolean equals(Object o) {
|
|
if (!(o instanceof DnsResponseCode)) {
|
|
return false;
|
|
}
|
|
|
|
return intValue() == ((DnsResponseCode) o).intValue();
|
|
}
|
|
|
|
/**
|
|
* Returns a formatted error message for this {@link DnsResponseCode}.
|
|
*/
|
|
@Override
|
|
public String toString() {
|
|
String text = this.text;
|
|
if (text == null) {
|
|
this.text = text = name + '(' + intValue() + ')';
|
|
}
|
|
return text;
|
|
}
|
|
}
|