/* ** 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.system; //Netzwerkziel, Netzwerkmaske, ZielIp(Gateway), Schnittstelle import filius.Main; import filius.rahmenprogramm.Information; import filius.software.firewall.Firewall; import filius.software.firewall.FirewallWebKonfig; import filius.software.firewall.FirewallWebLog; import filius.software.www.WebServer; import filius.hardware.NetzwerkInterface; import filius.hardware.knoten.InternetKnoten; import filius.hardware.knoten.Knoten; import filius.hardware.knoten.Vermittlungsrechner; import filius.software.rip.RIPTable; import filius.software.rip.RIPBeacon; import filius.software.rip.RIPServer; import filius.software.rip.RIPWeb; /** * Diese Klasse stellt die Funktionalitaet eines Betriebssystems fuer * Vermittlungsrechner zur Verfuegung. Spezifisch ist die automatische * Installation einer Firewall und eines Webservers mit einer Erweiterung zur * Konfiguration der Firewall. Die weitere Funktionalitaet wird von der * Oberklasse (InternetKnotenBetriebssystem) zur Verfuegung gestellt. */ public class VermittlungsrechnerBetriebssystem extends InternetKnotenBetriebssystem { private static final long serialVersionUID = 1L; private boolean ripEnabled; private RIPTable riptable; private RIPBeacon ripbeacon; private RIPServer ripserver; /** Konstruktor mit Initialisierung von Firewall und Webserver */ public VermittlungsrechnerBetriebssystem() { super(); Main.debug.println("INVOKED-2 ("+this.hashCode()+") "+getClass()+" (VermittlungsrechnerBetriebssystem), constr: VermittlungsrechnerBetriebssystem()"); initialisiereAnwendungen(); } public void setKnoten(Knoten vermittlungsrechner) { super.setKnoten(vermittlungsrechner); } /** * Methode zur initialisierung der Firewall und des Web-Servers mit den * Erweiterungen fuer den Zugriff auf die Firewall ueber eine * Web-Schnittstelle */ private void initialisiereAnwendungen() { Main.debug.println("INVOKED (" + this.hashCode() + ") " + getClass() + " (VermittlungsrechnerBetriebssystem), initialisiereFirewallUndWebserver()"); FirewallWebLog weblog; FirewallWebKonfig webkonfig; WebServer server = null; Firewall firewall = null; // Installation von Firewall und Webserver installiereSoftware("filius.software.firewall.Firewall"); installiereSoftware("filius.software.www.WebServer"); // while(firewall==null) { firewall = this.holeFirewall(); // } // while(server==null) { server = this.holeWebServer(); // } firewall.setModus(Firewall.GATEWAY); // Erweiterung des Webservers fuer die Anzeige der // Log-Eintraege der Firewall weblog = new FirewallWebLog(); weblog.setFirewall(firewall); weblog.setPfad("log.html"); server.setzePlugIn(weblog); // Erweiterung des Webservers fuer die Konfiguration // der Firewall webkonfig = new FirewallWebKonfig(); webkonfig.setWebserver(server); webkonfig.setFirewall(firewall); webkonfig.setPfad("konfig.html"); server.setzePlugIn(webkonfig); server.erzeugeIndexDatei(Information.getInformation().getProgrammPfad() + "config/firewall_index_"+Information.getInformation().getLocale()+".txt"); // ------------- RIP ------------------ riptable = new RIPTable(this); ripserver = new RIPServer(); ripserver.setSystemSoftware(this); ripbeacon = new RIPBeacon(); ripbeacon.setSystemSoftware(this); RIPWeb ripweb = new RIPWeb(riptable); ripweb.setPfad("routes.html"); server.setzePlugIn(ripweb); } /** * Starten des Webservers * * @see filius.software.system.InternetKnotenBetriebssystem.starten() */ public void starten() { Main.debug.println("INVOKED ("+this.hashCode()+") "+getClass()+" (VermittlungsrechnerBetriebssystem), starten()"); super.starten(); // Startet den Web-Server holeWebServer().setAktiv(true); if (ripEnabled) { riptable.reset(); riptable.addLocalRoutes((InternetKnoten)this.getKnoten()); ripserver.starten(); ripserver.setAktiv(true); ripbeacon.starten(); } } public void beenden() { super.beenden(); if (ripEnabled) { ripbeacon.beenden(); ripserver.beenden(); } } public RIPTable getRIPTable() { if (ripEnabled) { return riptable; } else { return null; } } public boolean getRip() { return ripEnabled; } public void setRip(boolean state) { ripEnabled = state; } /** * Methode fuer den Zugriff auf die Firewall. Dieser Zugriff ist nicht * JavaBean-konform, weil die Speicherung der Firewall als eine Anwendung * durch die Oberklasse erfolgt. */ public Firewall holeFirewall() { return (Firewall) holeSoftware("filius.software.firewall.Firewall"); } /** * Methode fuer den Zugriff auf den Webserver Dieser Zugriff ist nicht * JavaBean-konform, weil die Speicherung des Webservers als eine Anwendung * durch die Oberklasse erfolgt. */ public WebServer holeWebServer() { return (WebServer) holeSoftware("filius.software.www.WebServer"); } }