// // Jala Project [http://opensvn.csie.org/traccgi/jala] // // Copyright 2004 ORF Online und Teletext GmbH // // Licensed 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. // // $Revision$ // $LastChangedBy$ // $LastChangedDate$ // $HeadURL$ // /** * @fileoverview Fields and methods of the jala.DnsClient class. */ // Define the global namespace for Jala modules if (!global.jala) { global.jala = {}; } /** * Jala dependencies */ app.addRepository(getProperty("jala.dir", "modules/jala") + "/lib/javadns.jar"); /** * Constructs a new DnsClient object. * @class This is a wrapper around the Dns Client by wonderly.org * providing methods for querying Dns servers. For more information * about the Java DNS client visit * <a href="https://javadns.dev.java.net/">https://javadns.dev.java.net/</a>. * Please mind that the nameserver specified must accept queries on port * 53 TCP (the Java DNS client used doesn't support UDP nameserver queries), * and that reverse lookups are not supported. * @param {String} nameServer IP-Address or FQDN of nameserver to query * @constructor */ jala.DnsClient = function(nameServer) { /** * Contains the IP Adress/FQDN of the name server to query. * @type String */ this.nameServer = nameServer; if (!this.nameServer) { throw "jala.DnsClient: missing nameserver argument"; } else { // test if required javadns library is available try { var clazz = java.lang.Class.forName("org.wonderly.net.dns.Query", false, app.getClassLoader()) } catch (e) { throw "jala.DnsClient requires JavaDNS.jar" + " in lib/ext or application directory " + "[https://javadns.dev.java.net/]"; } } return this; }; /** @ignore */ jala.DnsClient.PKG = Packages.org.wonderly.net.dns; /** * The "A" record/query type. * @type Number * @final */ jala.DnsClient.TYPE_A = jala.DnsClient.PKG.Question.TYPE_A; /** * The "CNAME" record/query type. * @type Number * @final */ jala.DnsClient.TYPE_CNAME = jala.DnsClient.PKG.Question.TYPE_CNAME; /** * The "MX" record/query type. * @type Number * @final */ jala.DnsClient.TYPE_MX = jala.DnsClient.PKG.Question.TYPE_MX; /** * The "NS" record/query type. * @type Number * @final */ jala.DnsClient.TYPE_NS = jala.DnsClient.PKG.Question.TYPE_NS; /** * The "PTR" record/query type. * @type Number * @final */ jala.DnsClient.TYPE_PTR = jala.DnsClient.PKG.Question.TYPE_PTR; /** * The "SOA" record/query type. * @type Number * @final */ jala.DnsClient.TYPE_SOA = jala.DnsClient.PKG.Question.TYPE_SOA; /** * The "TXT" record/query type. * @type Number * @final */ jala.DnsClient.TYPE_TXT = jala.DnsClient.PKG.Question.TYPE_TXT; /** * The "WKS" record/query type. * @type Number * @final */ jala.DnsClient.TYPE_WKS = jala.DnsClient.PKG.Question.TYPE_WKS; /** * Queries the nameserver for a specific domain * and the given type of record. * @param {String} dName The domain name to query for * @param {Number} queryType The type of records to retrieve * @returns The records retrieved from the nameserver * @type org.wonderly.net.dns.RR */ jala.DnsClient.prototype.query = function(dName, queryType) { if (dName == null) { throw new Error("no domain-name to query for"); } if (queryType == null) { queryType = jala.DnsClient.TYPE_A; } // construct the question for querying the nameserver var question = new jala.DnsClient.PKG.Question(dName, queryType, jala.DnsClient.PKG.Question.CLASS_IN); // construct the query var query = new jala.DnsClient.PKG.Query(question); // run the query query.runQuery(this.nameServer); // wrap the records received in instances of jala.DnsClient.Record var answers = query.getAnswers(); var arr = []; for (var i=0;i<answers.length;i++) { arr[i] = new jala.DnsClient.Record(answers[i]); } return arr; }; /** * Convenience method to query for the MX-records * of the domain passed as argument. * @param {String} dName The domain name to query for * @returns The records retrieved from the nameserver * @type org.wonderly.net.dns.RR */ jala.DnsClient.prototype.queryMailHost = function (dName) { return this.query(dName, this.TYPE_MX); }; /** @ignore */ jala.DnsClient.toString = function() { return "[jala.DnsClient]"; }; /** @ignore */ jala.DnsClient.prototype.toString = function() { return "[jala.DnsClient (" + this.nameServer + ")]"; }; /** * Constructs a new instance of jala.DnsClient.Record. * @class Instances of this class wrap record data as received * from the nameserver. * @param {org.wonderly.net.dns.RR} data The data as received from * the nameserver * @returns A newly constructed Record instance * @constructor */ jala.DnsClient.Record = function(data) { /** * The type of the nameserver record represented by this Answer instance. * @type Number * @see #TYPE_A * @see #TYPE_CNAME * @see #TYPE_HINFO * @see #TYPE_MX * @see #TYPE_NS * @see #TYPE_PTR * @see #TYPE_SOA * @see #TYPE_TXT * @see #TYPE_WKS */ this.type = data.getType(); /** * The name of the host. This will only be set for records * of type A, AAAA and NS. * @type String * @see #TYPE_A * @see #TYPE_AAAA * @see #TYPE_NS */ this.host = null; /** * The IP address of the host. This will only be set for records * of type A and AAAA * @type String * @see #TYPE_A * @see #TYPE_AAAA */ this.ipAddress = null; /** * The CNAME of this record. This will only be set for records * of type CNAME * @type String * @see #TYPE_CNAME */ this.cname = null; /** * The name of the mail exchanging server. This is only set for * records of type MX * @type String * @see #TYPE_MX */ this.mx = null; /** * The email address responsible for a name server. This property * will only be set for records of type SOA * @type String * @see #TYPE_SOA */ this.email = null; /** * Descriptive text as received from the nameserver. This is only * set for records of type TXT * @type String * @see #TYPE_TXT */ this.text = null; /** * Returns the wrapped nameserver record data * @returns The wrapped data * @type org.wonderly.net.dns.RR */ this.getData = function() { return data; }; /** * Main constructor body */ switch (data.getClass()) { case jala.DnsClient.PKG.ARR: case jala.DnsClient.PKG.AAAARR: this.host = data.getHost(); this.ipAddress = data.getIPAddress(); break; case jala.DnsClient.PKG.NSRR: this.host = data.getHost(); break; case jala.DnsClient.PKG.CNAMERR: this.cname = data.getCName(); break; case jala.DnsClient.PKG.MXRR: this.mx = data.getExchanger(); break; case jala.DnsClient.PKG.SOARR: this.host = data.getNSHost(); this.email = data.getResponsibleEmail(); break; case jala.DnsClient.PKG.TXTRR: this.text = data.getText(); break; default: break; } return this; }; /** @ignore */ jala.DnsClient.Record.prototype.toString = function() { return "[jala.DnsClient.Record]"; };