📄 managecontrol.java
字号:
private CheckboxMenuItem TopologyCheckbox; private Panel Toolbar; private Checkbox hostBox; private Checkbox netBox; private Checkbox internetBox; private RuleEditor editRuleFrame; // application data private ManageDomain mgDomain; private boolean topologyEdit = false; private Class drawClass, hostClass, netClass, internetClass;} // ManageControlclass ExportData extends Thread { public ExportData(Frame p, ManageDomain mgDomain) { parent = p; md = mgDomain; } public void run() { Graph g; Enumeration en; AddrList adr; ManageObject mo; int ID; Host host; Net net; FileDialog fd = new FileDialog(parent, "Export Topology", FileDialog.SAVE); fd.setVisible(true); if (fd.getFile() == null) { parent.setEnabled(true); parent.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); return; } String filename = fd.getDirectory() + fd.getFile(); BusyBox b = new BusyBox("Save in progress. Please wait!"); b.start(); // show busy box, returns immediately try { FileOutputStream fos = new FileOutputStream(filename); pw = new PrintWriter(fos); Date date = new Date(); pw.println("#"); pw.println("# Topology Export"); pw.println("# Generated on " + date + "by sfControl"); pw.println("#"); pw.println(); g = md.getTopology(); en = g.getAllVertices(); ID = 0; while (en.hasMoreElements()) { ID += 1; mo = (ManageObject)en.nextElement(); mo.uniqueID = ID; pw.println("$item"); pw.println("id=" + ID); pw.print("type="); // process host host = null; if (mo instanceof Host) { host = (Host)mo; if (host.isFirewall & host.isServer) pw.println("(firewall, server)"); else if (host.isFirewall) pw.println("firewall"); if (host.isServer) pw.println("server"); adr = host.HostAddresses; writeAddresses(adr); if (host.isServer) for (int i = 0; i < host.hostTemplates.length; i++) if (host.hostTemplates[i]) pw.println("attribute=(service, \""+Templates.prompt[Templates.startServer+i]+"\")"); } // process net net = null; if (mo instanceof Net) { net = (Net)mo; pw.println("net"); adr = net.NetAddresses; writeAddresses(adr); } // process internet if (mo instanceof Internet) { pw.println("internet"); } pw.println("$enditem"); pw.println(); } // export connections pw.println("# Follows the adjazenzlists of all connections."); pw.println("# Numbers refer to the item's id."); pw.println("$connections"); en = g.getAllVertices(); Enumeration neighbourEnum; while (en.hasMoreElements()) { mo = (ManageObject)en.nextElement(); pw.print("neighbours{" + mo.uniqueID + "}=("); neighbourEnum = g.findNeighbors(mo); if (neighbourEnum.hasMoreElements()) { mo = (ManageObject)neighbourEnum.nextElement(); pw.print(mo.uniqueID); while (neighbourEnum.hasMoreElements()) { mo = (ManageObject)neighbourEnum.nextElement(); pw.print(", " + mo.uniqueID); } pw.println(")"); } else pw.println("()"); } pw.println("$endconnections"); pw.flush(); pw.close(); fos.close(); b.done(); parent.setEnabled(true); parent.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } // try catch (IOException e) { b.done(); UserDialog.ErrorBox("Error saving data to "+filename+". Data not saved! ("+Communicator.commError+")"); } // catch } private void writeAddresses(AddrList al) { AddrObj ao; String s; byte[] address; byte[] netmask; Vector av = al.getAddresses(); for (int i = 0; i < av.size(); i++) { ao = (AddrObj)av.elementAt(i); address = ao.getAddr(); netmask = ao.getMask(); if ((address == null) || (address.length != 4)) pw.print("address=(0.0.0.0"); else { s = ("" + Utils.unsign(address[0])); for (i=1; i < 4; i++) s += ("." + Utils.unsign(address[i])); pw.print("address=(" + s); } if ((netmask == null) || (netmask.length != 4)) pw.println("/0.0.0.0)"); else { s = ("" + Utils.unsign(netmask[0])); for (i=1; i < 4; i++) s += ("." + Utils.unsign(netmask[i])); pw.println("/" + s + ")"); } } } protected Frame parent;protected ManageDomain md;protected PrintWriter pw;}// Thread used for saving data. A separate thread is necessary, because// it is not possible to wait for the user response when showing a dialog// box from the event handling loop.class SaveData extends Thread { public SaveData(ManageDomain md, ManageControl p, boolean ask, boolean sl) { mgDomain = md; parent = p; askDialog = ask; saveLocal = ask ? false : sl; } public void run() { if (askDialog) { int answer = JOptionPane.showConfirmDialog(null, "Save data to firewalls before exiting?", "Data not saved", JOptionPane.YES_NO_CANCEL_OPTION); parent.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); switch (answer) { case JOptionPane.YES_OPTION: // save and quit break; case JOptionPane.NO_OPTION: // don't save, quit mgDomain.changed = false; parent.prepareQuit(); return; case JOptionPane.CANCEL_OPTION: // don't save, don't quit parent.setEnabled(true); return; } parent.setCursor(new Cursor(Cursor.WAIT_CURSOR)); } boolean success = true; if (!saveLocal) { // save data to firewalls BusyBox b = new BusyBox("Save in progress. Please wait!"); b.start(); // show busy box, returns immediately Enumeration en = mgDomain.Firewalls.elements(); Host f; byte faddr[]; ServerOutputStream ros; PersistentOutputStream os; while (en.hasMoreElements()) { f = (Host)en.nextElement(); faddr = f.HostAddresses.getFirstAddress(); try { ros = new ServerOutputStream(faddr, ManageControl.custom.getProperty("GLOBAL_CONFIG")); if (ros.isClosed()) { throw new IOException(); } os = new PersistentOutputStream(ros); if (!mgDomain.saveDomainConfig(os)) throw new IOException(); ros.close(); os.close(); } // try catch (IOException e) { UserDialog.ErrorBox("Error saving data to "+f.objectID+" ("+Utils.printIP(faddr)+")."); success = false; } // catch } // while b.done(); } // if else { // save data to local file FileDialog fd = new FileDialog(parent, "Save Configuration", FileDialog.SAVE); fd.setVisible(true); if (fd.getFile() == null) { parent.setEnabled(true); parent.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); return; } String filename = fd.getDirectory() + fd.getFile(); BusyBox b = new BusyBox("Save in progress. Please wait!"); b.start(); // show busy box, returns immediately try { FileOutputStream fos = new FileOutputStream(filename); PersistentOutputStream os = new PersistentOutputStream(fos); if (!mgDomain.saveDomainConfig(os)) throw new IOException("Error writing data"); fos.close(); os.close(); b.done(); } // try catch (IOException e) { b.done(); UserDialog.ErrorBox("Error saving data to "+filename+". Data not saved! ("+Communicator.commError+")"); success = false; } // catch } if (success) { mgDomain.changed = false; UserDialog.NoticeBox("Data saved successfully!"); if (askDialog) // quit after saving parent.prepareQuit(); } parent.setEnabled(true); parent.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } private ManageDomain mgDomain; private ManageControl parent; // parent frame private boolean askDialog, saveLocal;} // SaveData // This thread is used for loading dataclass LoadData extends Thread { public LoadData(ManageDomain md, ManageControl p, int l) { mgDomain = md; parent = p; load = l; } public void run() { if (mgDomain.changed) { int answer = JOptionPane.showConfirmDialog(null, "Save data to firewalls?", "Data not saved", JOptionPane.YES_NO_CANCEL_OPTION); switch (answer) { case JOptionPane.YES_OPTION: // save and load SaveData sd = new SaveData(mgDomain, parent, false, false); sd.start(); while (sd.isAlive()) { try { sd.join(); // wait for save thread to complete break; } catch (Exception ignore) {} } break; case JOptionPane.NO_OPTION: // don't save, load break; break; case JOptionPane.CANCEL_OPTION: // don't save, abort load parent.setEnabled(true); parent.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); return; } } if (load == NONE) parent.setManageDomain(new ManageDomain()); if (load == REMOTE) { StringDialog strd = new StringDialog(parent, "Hostname or IP address:"); strd.show(); if (strd.getAnswer() != StringDialog.OK) { parent.setEnabled(true); parent.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); return; } String hostname = strd.getString(); byte host[] = Communicator.resolve(hostname); if (host == null) { switch (Communicator.commError) { case Communicator.COMM_RESOLVE: UserDialog.ErrorBox("Unknown host "+hostname); break; default: UserDialog.ErrorBox("Error while checking hostname. ("+Communicator.commError+")"); break; } } else { ManageDomain newmd; ServerInputStream ris = new ServerInputStream(host, ManageControl.custom.getProperty("CONF_DIR") + ManageControl.custom.getProperty("GLOBAL_CONFIG")); if (ris.isEOF()) newmd = null; else { PersistentInputStream is = new PersistentInputStream(ris); newmd = ManageDomain.loadDomainConfig(is); } if (newmd == null) { // error reading file UserDialog.ErrorBox("Error loading data! ("+Communicator.commError+")"); } else parent.setManageDomain(newmd); } } if (load == LOCAL) { FileDialog fd = new FileDialog(parent, "Load configuration", FileDialog.LOAD); fd.setVisible(true); String filename = fd.getDirectory(); if (fd.getFile() == null) { parent.setEnabled(true); parent.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); return; } filename += fd.getFile(); FileInputStream fis = null; try { fis = new FileInputStream(filename); } catch (FileNotFoundException e) { } ManageDomain newmd; if (fis == null) newmd = null; else { PersistentInputStream is = new PersistentInputStream(fis); newmd = ManageDomain.loadDomainConfig(is); } if (newmd == null) // error reading file UserDialog.ErrorBox("Can't open File: "+filename); else parent.setManageDomain(newmd); } parent.setEnabled(true); parent.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } private ManageDomain mgDomain; private ManageControl parent; // parent frame private int load; // if false create empty domain public static final int NONE = 0; public static final int LOCAL = 1; public static final int REMOTE = 2;} // LoadData// This thread executes autoconfigurationclass AutoconfThread extends Thread { public AutoconfThread(ManageDomain md, Frame p ) { mgDomain = md; parent = p; } public void run() { BusyBox bb = new BusyBox("Running Autoconfiguration. Please wait!"); bb.start(); try { sleep(500); // time to show busy box } catch (Exception e) {} mgDomain.autoConfig(); bb.done(); UserDialog.NoticeBox("Autoconfiguration completed successfully!"); parent.setEnabled(true); parent.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } private ManageDomain mgDomain; private Frame parent;} // AutoconfThread// This thread generates and shows reportsclass ReportThread extends Thread { public ReportThread(ManageDomain md, Frame p, int rt) { mgDomain = md; parent = p; reportType = rt; } public void run() { BusyBox bb = new BusyBox("Generating report. Please wait!"); bb.start(); String filename = ManageControl.custom.getProperty("TMP_DIR") + "ConfigReport.html"; if (filename == null) { UserDialog.ErrorBox("Cannot create temporary file name! ("+Communicator.commError+")"); bb.done(); parent.setEnabled(true); parent.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); return; } try { FileOutputStream fos = new FileOutputStream(filename, false); PrintWriter pw = new PrintWriter(fos, true); switch (reportType) { case REPORT_CONFIG: writeConfigReport(pw); break; default: UserDialog.ErrorBox("Unknown report type!"); bb.done(); parent.setEnabled(true); parent.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); return; } fos.close(); pw.close(); String URLString = Utils.fileURLPrefix() + filename; if (System.getProperty("os.name").equals("Windows 95")) { URLString.replace('\\', '/'); } URL u = new URL(URLString); Frame hv = new HTMLView(u); } catch (IOException e) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -