From d7955ce24d294fb2014c59d11fca184471056f44 Mon Sep 17 00:00:00 2001 From: Shuyi Chen Date: Wed, 22 May 2013 14:51:55 -0700 Subject: Add android smack source. Change-Id: I49ce97136c17173c4ae3965c694af6e7bc49897d --- src/org/xbill/DNS/SetResponse.java | 202 +++++++++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 src/org/xbill/DNS/SetResponse.java (limited to 'src/org/xbill/DNS/SetResponse.java') diff --git a/src/org/xbill/DNS/SetResponse.java b/src/org/xbill/DNS/SetResponse.java new file mode 100644 index 0000000..05d9f32 --- /dev/null +++ b/src/org/xbill/DNS/SetResponse.java @@ -0,0 +1,202 @@ +// Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org) + +package org.xbill.DNS; + +import java.util.*; + +/** + * The Response from a query to Cache.lookupRecords() or Zone.findRecords() + * @see Cache + * @see Zone + * + * @author Brian Wellington + */ + +public class SetResponse { + +/** + * The Cache contains no information about the requested name/type + */ +static final int UNKNOWN = 0; + +/** + * The Zone does not contain the requested name, or the Cache has + * determined that the name does not exist. + */ +static final int NXDOMAIN = 1; + +/** + * The Zone contains the name, but no data of the requested type, + * or the Cache has determined that the name exists and has no data + * of the requested type. + */ +static final int NXRRSET = 2; + +/** + * A delegation enclosing the requested name was found. + */ +static final int DELEGATION = 3; + +/** + * The Cache/Zone found a CNAME when looking for the name. + * @see CNAMERecord + */ +static final int CNAME = 4; + +/** + * The Cache/Zone found a DNAME when looking for the name. + * @see DNAMERecord + */ +static final int DNAME = 5; + +/** + * The Cache/Zone has successfully answered the question for the + * requested name/type/class. + */ +static final int SUCCESSFUL = 6; + +private static final SetResponse unknown = new SetResponse(UNKNOWN); +private static final SetResponse nxdomain = new SetResponse(NXDOMAIN); +private static final SetResponse nxrrset = new SetResponse(NXRRSET); + +private int type; +private Object data; + +private +SetResponse() {} + +SetResponse(int type, RRset rrset) { + if (type < 0 || type > 6) + throw new IllegalArgumentException("invalid type"); + this.type = type; + this.data = rrset; +} + +SetResponse(int type) { + if (type < 0 || type > 6) + throw new IllegalArgumentException("invalid type"); + this.type = type; + this.data = null; +} + +static SetResponse +ofType(int type) { + switch (type) { + case UNKNOWN: + return unknown; + case NXDOMAIN: + return nxdomain; + case NXRRSET: + return nxrrset; + case DELEGATION: + case CNAME: + case DNAME: + case SUCCESSFUL: + SetResponse sr = new SetResponse(); + sr.type = type; + sr.data = null; + return sr; + default: + throw new IllegalArgumentException("invalid type"); + } +} + +void +addRRset(RRset rrset) { + if (data == null) + data = new ArrayList(); + List l = (List) data; + l.add(rrset); +} + +/** Is the answer to the query unknown? */ +public boolean +isUnknown() { + return (type == UNKNOWN); +} + +/** Is the answer to the query that the name does not exist? */ +public boolean +isNXDOMAIN() { + return (type == NXDOMAIN); +} + +/** Is the answer to the query that the name exists, but the type does not? */ +public boolean +isNXRRSET() { + return (type == NXRRSET); +} + +/** Is the result of the lookup that the name is below a delegation? */ +public boolean +isDelegation() { + return (type == DELEGATION); +} + +/** Is the result of the lookup a CNAME? */ +public boolean +isCNAME() { + return (type == CNAME); +} + +/** Is the result of the lookup a DNAME? */ +public boolean +isDNAME() { + return (type == DNAME); +} + +/** Was the query successful? */ +public boolean +isSuccessful() { + return (type == SUCCESSFUL); +} + +/** If the query was successful, return the answers */ +public RRset [] +answers() { + if (type != SUCCESSFUL) + return null; + List l = (List) data; + return (RRset []) l.toArray(new RRset[l.size()]); +} + +/** + * If the query encountered a CNAME, return it. + */ +public CNAMERecord +getCNAME() { + return (CNAMERecord)((RRset)data).first(); +} + +/** + * If the query encountered a DNAME, return it. + */ +public DNAMERecord +getDNAME() { + return (DNAMERecord)((RRset)data).first(); +} + +/** + * If the query hit a delegation point, return the NS set. + */ +public RRset +getNS() { + return (RRset)data; +} + +/** Prints the value of the SetResponse */ +public String +toString() { + switch (type) { + case UNKNOWN: return "unknown"; + case NXDOMAIN: return "NXDOMAIN"; + case NXRRSET: return "NXRRSET"; + case DELEGATION: return "delegation: " + data; + case CNAME: return "CNAME: " + data; + case DNAME: return "DNAME: " + data; + case SUCCESSFUL: return "successful"; + default: throw new IllegalStateException(); + } +} + +} -- cgit v1.2.3