📄 managecontrol.new
字号:
public boolean terminated = false; public static AppletContext appletContext; // private data // gui data private DragDrop ddPanel; private MenuBar mbar; private Menu FileMenu; private Menu EditMenu; private Menu ReportMenu; private Menu HelpMenu; 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;} // ManageControl// 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) { YesNoCancelBox ync = new YesNoCancelBox(parent, "Data not saved", "Save data to firewalls before exiting?"); ync.show(); parent.setCursor(Frame.DEFAULT_CURSOR); switch (ync.getAnswer()) { case YesNoCancelBox.YES: // save and quit break; case YesNoCancelBox.NO: // don't save, quit mgDomain.changed = false; parent.prepareQuit(); return; case YesNoCancelBox.CANCEL: // don't save, don't quit parent.setEnabled(true); return; } parent.setCursor(Frame.WAIT_CURSOR); } boolean success = true; if (!saveLocal) { // save data to firewalls BusyBox b = new BusyBox(parent, "Save in progress. Please wait!"); b.show(); // show busy box, returns immediately Enumeration en = mgDomain.Firewalls.elements(); Host f; byte faddr[]; RelayOutputStream ros; PersistentOutputStream os; while (en.hasMoreElements()) { f = (Host)en.nextElement(); faddr = f.HostAddresses.getFirstAddress(); try { ros = new RelayOutputStream(faddr, Custom.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) { ErrorBox eb = new ErrorBox(parent, "Error saving data to "+f.objectID+" ("+Utils.printIP(faddr)+")."); eb.show(); success = false; } // catch } // while b.done(); } // if else { // save data to local file StringDialog strd = new StringDialog(parent, "Filename:"); strd.setVisible(true); if (strd.getAnswer() != StringDialog.OK) { parent.setEnabled(true); parent.setCursor(Frame.DEFAULT_CURSOR); return; } String filename = strd.getString(); BusyBox b = new BusyBox(parent, "Save in progress. Please wait!"); b.show(); // show busy box, returns immediately try { LocalOutputStream los = new LocalOutputStream(filename); if (los.isClosed()) throw new IOException("Error opening file"); PersistentOutputStream os = new PersistentOutputStream(los); if (!mgDomain.saveDomainConfig(os)) throw new IOException("Error writing data"); los.close(); os.close(); b.done(); } // try catch (IOException e) { b.done(); ErrorBox eb = new ErrorBox(parent, "Error saving data to "+filename+". Data not saved! ("+Communicator.commError+")"); eb.show(); success = false; } // catch } if (success) { mgDomain.changed = false; NoticeBox nb = new NoticeBox(parent, "Data saved successfully!"); nb.show(); if (askDialog) // quit after saving parent.prepareQuit(); } parent.setEnabled(true); parent.setCursor(Frame.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) { YesNoCancelBox ync = new YesNoCancelBox(parent, "Data not saved", "Save data to firewalls?"); ync.show(); switch (ync.getAnswer()) { case YesNoCancelBox.YES: // 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 YesNoCancelBox.NO: // don't save, load break; case YesNoCancelBox.CANCEL: // don't save, abort load parent.setEnabled(true); parent.setCursor(Frame.DEFAULT_CURSOR); return; } } if (load == NONE) parent.setManageDomain(new ManageDomain()); if (load == REMOTE) { StringDialog strd = new StringDialog(parent, "Hostname or IP address:"); strd.setVisible(true); if (strd.getAnswer() != StringDialog.OK) { parent.setEnabled(true); parent.setCursor(Frame.DEFAULT_CURSOR); return; } String hostname = strd.getString(); byte host[] = Communicator.resolve(hostname); if (host == null) { ErrorBox eb; switch (Communicator.commError) { case Communicator.COMM_NOCONN: eb = new ErrorBox(parent, "Cannot connect to sfrelay!"); break; case Communicator.COMM_RESOLVE: eb = new ErrorBox(parent, "Unknown host "+hostname); break; default: eb = new ErrorBox(parent, "Error while checking hostname. ("+Communicator.commError+")"); break; } eb.show(); } else { ManageDomain newmd; RelayInputStream ris = new RelayInputStream(host, Custom.CONF_DIR + Custom.GLOBAL_CONFIG); if (ris.isEOF()) newmd = null; else { PersistentInputStream is = new PersistentInputStream(ris); newmd = ManageDomain.loadDomainConfig(is); } if (newmd == null) { // error reading file ErrorBox eb = new ErrorBox(parent, "Error loading data! ("+Communicator.commError+")"); eb.show(); } else parent.setManageDomain(newmd); } } if (load == LOCAL) { StringDialog strd = new StringDialog(parent, "Filename:"); strd.setVisible(true); if (strd.getAnswer() != StringDialog.OK) { parent.setEnabled(true); parent.setCursor(Frame.DEFAULT_CURSOR); return; } String filename = strd.getString(); LocalInputStream lis = new LocalInputStream(filename); ManageDomain newmd; if (lis.isEOF()) newmd = null; else { PersistentInputStream is = new PersistentInputStream(lis); newmd = ManageDomain.loadDomainConfig(is); } if (newmd == null) { // error reading file ErrorBox eb = new ErrorBox(parent, "Error loading data! ("+Communicator.commError+")"); eb.show(); } else parent.setManageDomain(newmd); } parent.setEnabled(true); parent.setCursor(Frame.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(parent, "Running Autoconfiguration. Please wait!"); bb.show(); try { sleep(500); // time to show busy box } catch (Exception e) {} mgDomain.autoConfig(); bb.done(); NoticeBox nb = new NoticeBox(parent, "Autoconfiguration completed successfully!"); nb.show(); parent.setEnabled(true); parent.setCursor(Frame.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(parent, "Generating report. Please wait!"); bb.show(); String filename = Communicator.getTempName(); if (filename == null) { ErrorBox eb = new ErrorBox(parent, "Cannot create temporary file name! ("+Communicator.commError+")"); bb.done(); eb.show(); parent.setEnabled(true); parent.setCursor(Frame.DEFAULT_CURSOR); return; } try { LocalOutputStream los = new LocalOutputStream(filename); if (los.isClosed()) throw new IOException(); PrintStream ps = new PrintStream(los); switch (reportType) { case REPORT_CONFIG: writeConfigReport(ps); break; default: ErrorBox eb = new ErrorBox(parent, "Unknown report type!"); bb.done(); eb.show(); parent.setEnabled(true); parent.setCursor(Frame.DEFAULT_CURSOR); return; } los.close(); ps.close(); URL u = new URL(Utils.fileURLPrefix()+filename); ManageControl.appletContext.showDocument(u,"_blank"); } catch (IOException e) { ErrorBox eb = new ErrorBox(parent, "Error writing file! ("+Communicator.commError+")"); eb.show(); } finally { bb.done(); } parent.setCursor(Frame.DEFAULT_CURSOR); parent.setEnabled(true); } /** * generate configuration report */ private void writeConfigReport(PrintStream ps) { ps.println("<html><head><title>sf Configuration Report</title></head><body>"); ps.println("<h1>sf Configuration Report</h1>"); ps.println("<p>Report generated "+(new Date()).toString()); if (mgDomain.DomainName.length() > 0) ps.println("<h2>Management domain <i>"+mgDomain.DomainName+"</i></h2>"); Enumeration en = mgDomain.getTopology().getAllVertices(); ManageObject mo; Host h; Net n; Internet in; while (en.hasMoreElements()) { mo = (ManageObject)en.nextElement(); if (mo instanceof Host) { h = (Host)mo; ps.println("<h3><a name="+mo.identString()+">Host <i>"+h.objectID+"</i></a></h3>"); ps.println("<ul>"); if (h.level == 1) ps.println("<li>Level: "+h.level+" firewall hop to nearest Internet connection"); else if (h.level >= 0) ps.println("<li>Level: "+h.level+" firewall hops to nearest Internet connection"); else ps.println("<li>No Internet connection"); if (h.isFirewall) if (h.transparent) ps.println("<li>Firewall (allows packets from outside to outside)"); else ps.println("<li>Firewall (blocks packets from outside to outside)"); if (h.isServer && h.publicServer) ps.println("<li>Server (public access)"); if (h.isServer && !h.publicServer) ps.println("<li>Server (internal access only)"); ps.println("<li>Addresses:"); writeAddresses(ps, h.HostAddresses); if (h.isFirewall) { ps.println("<li>Internalnets:"); writeAddresses(ps, h.internalAddresses); } writeNeighbors(ps, mo); ps.println("</ul>"); } else if (mo instanceof Net) { n = (Net)mo; ps.println("<h3><a name="+mo.identString()+">Network <i>"+n.objectID+"</i></a></h3>"); ps.println("<ul>");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -