/*
** This file is part of Filius, a network construction and simulation software.
**
** Originally created at the University of Siegen, Institute "Didactics of
** Informatics and E-Learning" by a students' project group:
** members (2006-2007):
** André Asschoff, Johannes Bade, Carsten Dittich, Thomas Gerding,
** Nadja Haßler, Ernst Johannes Klebert, Michell Weyer
** supervisors:
** Stefan Freischlad (maintainer until 2009), Peer Stechert
** Project is maintained since 2010 by Christian Eibl <filius@c.fameibl.de>
** and Stefan Freischlad
** Filius is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 2 of the License, or
** (at your option) version 3.
**
** Filius is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied
** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
** PURPOSE. See the GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Filius. If not, see <http://www.gnu.org/licenses/>.
*/
package filius.software.dns;
import java.util.StringTokenizer;
import filius.Main;
/** * <b>Question section format </b> <br />
* The question section is used to carry the "question" in most queries, i.e.,
* the parameters that define what is being asked. The section contains QDCOUNT
* (usually 1) entries, each of the following format: ...
* <ol>
* <li> QNAME a domain name represented as a sequence of labels, where each
* label consists of a length octet followed by that number of octets. The
* domain name terminates with the zero length octet for the null label of the
* root. Note that this field may be an odd number of octets; no padding is
* used. </li>
* <li> QTYPE a two octet code which specifies the type of the query. The values
* for this field include all codes valid for a TYPE field, together with some
* more general codes which can match more than one type of RR. </li>
* <li> QCLASS a two octet code that specifies the class of the query. For
* example, the QCLASS field is IN for the Internet. </li>
* </ol>
*/
public class Query {
/** QNAME a domain name */
private String qname = null;
/** QTYPE a code which specifies the type of the query.
* Zur Belegung dieses Attributs sollten die entsprechenden Konstanten
* der Klasse DNSNachricht verwendet werden */
private String qtype = null;
/** QCLASS a code that specifies the class of the query. For
* example, the QCLASS field is IN for the Internet. */
private String qclass = "IN";
/** Ein Konstruktor, der aus einem String, der durch den Aufruf der
* Methode toString() erzeugt wurde, wieder eine Query erstellt.
*
* @param nachricht ein String, der durch die Methode toString()
* erstellt wurde
*/
public Query(String query) {
Main.debug.println("INVOKED ("+this.hashCode()+") "+getClass()+" (Query), constr: Query("+query+")");
StringTokenizer tokenizer;
String token;
tokenizer = new StringTokenizer(query, " ");
if (tokenizer.hasMoreTokens()) {
token = tokenizer.nextToken().trim();
qname = token;
}
if (tokenizer.hasMoreTokens()) {
token = tokenizer.nextToken().trim();
qtype = token;
}
if (tokenizer.hasMoreTokens()) {
token = tokenizer.nextToken().trim();
qclass = token;
}
}
/** Methode zum Abruf einer Anfrage (query). Das Rueckgabeformat ist
* NAME TYPE CLASS (Bsp.: web.de. A IN) */
public String toString() {
return qname + " " + qtype + " " + qclass;
}
public String holeDomainname() {
return qname;
}
public String holeTyp() {
return qtype;
}
public String holeKlasse() {
return qclass;
}
}