/* ** 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 filius.Main; import filius.software.clientserver.ServerMitarbeiter; import filius.software.transportschicht.Socket; import filius.software.transportschicht.UDPSocket; public class DNSServerMitarbeiter extends ServerMitarbeiter { public DNSServerMitarbeiter(DNSServer server, Socket socket) { super(server, socket); } protected void verarbeiteNachricht(String dateneinheit) { Main.debug.println("INVOKED ("+this.hashCode()+", T"+this.getId()+") "+getClass()+" (DNSServerMitarbeiter), verarbeiteNachricht("+dateneinheit+")"); DNSNachricht nachricht, antwort; ResourceRecord record; nachricht = new DNSNachricht(dateneinheit); antwort = new DNSNachricht(DNSNachricht.RESPONSE); antwort.setId(nachricht.getId()); for (Query query : nachricht.holeQueries()) { server.benachrichtigeBeobachter(messages.getString("sw_dnsservermitarbeiter_msg1")+query); record = ((DNSServer)server).holeRecord(query.holeDomainname(), query.holeTyp()); if (record == null) { record = ((DNSServer)server).holeRecord(query.holeDomainname()); } if (record != null) { if (record.getType().equals(ResourceRecord.ADDRESS)) { antwort.hinzuAntwortResourceRecord(record.toString()); } else if (record.getType().equals(ResourceRecord.NAME_SERVER)) { antwort.hinzuAntwortResourceRecord(record.toString()); record = ((DNSServer)server).holeRecord(record.getRdata(), ResourceRecord.ADDRESS); if (record != null) { antwort.hinzuAntwortResourceRecord(record.toString()); } } else if (record.getType().equals(ResourceRecord.MAIL_EXCHANGE)) { antwort.hinzuAntwortResourceRecord(record.toString()); record = ((DNSServer)server).holeRecord(record.getRdata(), ResourceRecord.ADDRESS); if (record != null) { antwort.hinzuAntwortResourceRecord(record.toString()); } } } } if (socket != null) { ((UDPSocket)socket).senden(antwort.toString()); server.benachrichtigeBeobachter(messages.getString("sw_dnsservermitarbeiter_msg2")+"\n>>>>\n"+antwort.toString()+"<<<<"); } } }