📄 firewallaction.java
字号:
validate(); tcpPanelAdded = false; } UserDialog.ErrorBox("Cannot load TCP connections! ("+Communicator.commError+")"); break; } setEnabled(true); setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); actionCommand = 0; firstRun = false; try { Thread.sleep(10000); // reload every ten seconds } catch (InterruptedException ignore) {} } // while break; case KILL_TCP: TcpConnection tc = null; if (tcpPanelAdded) tc = (TcpConnection)tcpCanvas.getSelectedEntry(); if (!tcpPanelAdded || tc == null) { UserDialog.ErrorBox("No connection selected!"); break; } tcpThread.stop(); answer = JOptionPane.showConfirmDialog(null, "Killing connection ID "+tc.id, "User Information", JOptionPane.OK_CANCEL_OPTION); remove(tcpPanel); tcpPanelAdded = false; if (answer == JOptionPane.OK_OPTION) { if (!Communicator.killTcp(firewall.HostAddresses.getFirstAddress(), tc.id, tc.key, tc.created_jiffies)) UserDialog.ErrorBox("Error killing TCP connection! ("+Communicator.commError+")"); } actionCommand = LOAD_TCP; tcpThread = actionThread; continue; case RESET_USAGE: answer = JOptionPane.showConfirmDialog(null, "Do you really want to reset the usage counter?", "Reset Usage Counters", JOptionPane.YES_NO_OPTION); if (answer == JOptionPane.YES_OPTION) { if (!Communicator.resetUsage(firewall.HostAddresses.getFirstAddress())) UserDialog.ErrorBox("Error resetting usage counter! ("+Communicator.commError+")"); else if (rulePanelAdded) { remove(rulePanel); rulePanelAdded = false; actionCommand = LOAD_CONFIG; continue; } } break; } // switch setEnabled(true); setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); actionCommand = 0; return; } } /** * The varShowing variable indicates if the variable dialog is currently visible. */ protected boolean varShowing = false; // private data private Thread actionThread, tcpThread; private Host firewall; private boolean rulePanelAdded = false; private boolean tcpPanelAdded = false; private boolean configLoaded = false; // GUI data private MenuBar mbar; private Menu FileMenu; private Menu AdminMenu; private Menu ConfigMenu; private Menu HelpMenu; private ListPanel rulePanel; private ShowCanvas ruleCanvas; private ShowHeader ruleHeader; private ListPanel tcpPanel; private TcpCanvas tcpCanvas; private TcpHeader tcpHeader; private VariableDialog varDialog;} // FirewallAction// Canvas for showing the active rules using the ListPanelclass ShowCanvas extends ListCanvas { public ShowCanvas(Host fw) { super(fw.rules); firewall = fw; mgDomain = fw.mgDomain; column_no = 7; column_share = new int[column_no]; column_share[0] = 10; column_share[1] = 15; column_share[2] = 16; column_share[3] = 20; column_share[4] = 20; column_share[5] = 11; column_share[6] = 8; column_size = new int[column_no]; column_pos = new int[column_no]; } protected int drawColumn(Graphics g, Object listObj, int col, int ypos, FontMetrics fm, int fontheight, int maxascent) { String str[]; Rule r = (Rule)listObj; int objIdx = listEntries.indexOf(listObj); if (col >= 0) { // draw column if (g == null) { if (objIdx == 0 && col == 0) listText = new String[listEntries.size()][][]; if (col == 0) listText[objIdx] = new String[column_no][]; str = r.getString(col, firewall, mgDomain); if (col == 0) str[0] += String.valueOf(objIdx+1); listText[objIdx][col] = str; return str.length; } else str = listText[objIdx][col]; if (ypos + str.length*fontheight - offset_y < 0) return str.length; int start = 0; if (col==0) { // add rule number start = 1; int imageWidth; if (r.active) { imageWidth = greenBallImage.getWidth(null); if (column_size[0] > imageWidth) g.drawImage(greenBallImage, column_pos[col]+1, ypos-offset_y+1, null); } else { imageWidth = redBallImage.getWidth(null); g.drawImage(redBallImage, column_pos[col]+1, ypos-offset_y+1, null); } g.drawString(clipString(str[0], column_size[col]-3-imageWidth, fm), column_pos[col]+imageWidth+2, ypos + maxascent - offset_y); } for (int i=start; i < str.length; i++) g.drawString(clipString(str[i], column_size[col]-3, fm), column_pos[col]+1, (ypos + maxascent + i*fontheight) - offset_y); return str.length; } else { // draw multi column text if (r.comment != null && r.comment.length() > 0) { if (g == null) return 1; String cs = clipString("Description: "+r.comment, canvas_width-column_size[0]-4, fm); g.clearRect(column_pos[1]+1, ypos - offset_y, fm.stringWidth(cs), fontheight); g.drawString(cs, column_pos[1]+1, ypos + maxascent - offset_y); return 1; } else return 0; } } private Host firewall; private ManageDomain mgDomain; private String listText[][][]; private static Image greenBallImage = Utils.greenBall(); private static Image redBallImage = Utils.redBall();} // ShowCanvas// Header bar for showing the active rules using the ListPanelclass ShowHeader extends ListHeader { public ShowHeader(ListCanvas listCanvas) { super(listCanvas); header = new String[listCanvas.column_no]; header[0] = "Rule"; header[1] = "Action"; header[2] = "Protocol"; header[3] = "From"; header[4] = "To"; header[5] = "Notification"; header[6] = "Usage"; }} // ShowHeader// Dialog box for showing the variablesclass VariableDialog extends Dialog implements ActionListener { public VariableDialog(FirewallAction p, Host h) { super(p, "Variables on "+h.objectID, false); parent = p; host = h; GridBagLayout gbl = new GridBagLayout(); GridBagConstraints gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.BOTH; gbc.insets = new Insets(3,3,3,3); setLayout(gbl); constructString(); varArea = new TextArea(varString, 20, 60); varArea.setEditable(false); varArea.setFont(new Font("Courier", Font.PLAIN, 12)); Utils.add_component(this, varArea, gbl, gbc, 0, 0, 1, 1, 100, 100); Panel pa = new Panel(); OKbutton = new Button("OK"); OKbutton.addActionListener(this); pa.add(OKbutton); Utils.add_component(this, pa, gbl, gbc, 0, 1, 1, 1, 0, 0); parent.varShowing = true; pack(); addWindowListener(new VDAdapter()); } class VDAdapter extends WindowAdapter { public void WindowClosing(WindowEvent we) { if (isEnabled()) dispose(); return; } } // VDAdapter public void actionPerformed(ActionEvent ae) { if (ae.getSource() == OKbutton) { dispose(); parent.varShowing = false; return; } } // actionPerformed private void constructString() { StringBuffer sb = new StringBuffer(); Date actDate = new Date(); int len; for (int i=0; i < host.varnames.length; i++) { sb.append(host.varnames[i]); sb.append(" = "); if (host.vartimeout[i][0].after(actDate)) { sb.append(varval(i,0)); sb.append("\n"); } else sb.append("0\n"); for (int j=1; j < host.varvalues[i].length; j++) { if (host.vartimeout[i][j].after(actDate)) { sb.append(" host "); len = sb.length(); sb.append(Utils.printIP(host.varaddr[i][j])); while (sb.length() - len < 15) sb.append(' '); sb.append(" = "); sb.append(varval(i,j)); sb.append("\n"); } } sb.append("\n"); } varString = sb.toString(); } private String varval(int varnum, int entrynum) { StringBuffer sb = new StringBuffer(); sb.append(Integer.toString(host.varvalues[varnum][entrynum])); if (host.vartimeout[varnum][entrynum].before(maxDate)) { String tstr = host.vartimeout[varnum][entrynum].toString(); sb.append(", timeout "+tstr.substring(tstr.indexOf(':')-2,tstr.indexOf(':')+6)); } return sb.toString(); } public void refresh() { constructString(); varArea.setText(varString); } private static Date maxDate = new Date((long)Integer.MAX_VALUE * 1000); private FirewallAction parent; private Host host; private String varString; private TextArea varArea; private Button OKbutton;} // VariableDialog// Canvas to display the active TCP connections using the ListPanelclass TcpCanvas extends ListCanvas { public TcpCanvas(Host fw) { super(fw.tcpconns); firewall = fw; mgDomain = fw.mgDomain; column_no = 7; column_share = new int[column_no]; column_share[0] = 5; column_share[1] = 15; column_share[2] = 12; column_share[3] = 12; column_share[4] = 12; column_share[5] = 22; column_share[6] = 22; column_size = new int[column_no]; column_pos = new int[column_no]; } public TcpCanvas(Host fw, int share[]) { super(fw.tcpconns); firewall = fw; mgDomain = fw.mgDomain; column_no = 7; column_share = share; column_size = new int[column_no]; column_pos = new int[column_no]; } protected int drawColumn(Graphics g, Object listObj, int col, int ypos, FontMetrics fm, int fontheight, int maxascent) { String str; TcpConnection tc = (TcpConnection)listObj; int objIdx = listEntries.indexOf(listObj); Image stateBall; int imageWidth; if (col >= 0) { // draw column if (g == null) { if (objIdx == 0 && col == 0) listText = new String[listEntries.size()][]; if (col == 0) listText[objIdx] = new String[column_no]; str = tc.getString(col); listText[objIdx][col] = str; return 1; } else str = listText[objIdx][col]; if (ypos + fontheight - offset_y < 0) return 1; if (col == 1) { // state switch (tc.stateColor()) { case TcpConnection.RED: stateBall = redBallImage; break; case TcpConnection.YELLOW: stateBall = yellowBallImage; break; case TcpConnection.GREEN: stateBall = greenBallImage; break; default: stateBall = null; break; } if (stateBall != null) { imageWidth = stateBall.getWidth(null); if (column_size[col] > imageWidth) g.drawImage(stateBall, column_pos[col]+1, ypos - offset_y + 1, null); } else imageWidth = 0; g.drawString(clipString(str, column_size[col]-3-imageWidth, fm), column_pos[col]+imageWidth+2, ypos + maxascent - offset_y); } else g.drawString(clipString(str, column_size[col]-3, fm), column_pos[col]+1, ypos + maxascent - offset_y); return 1; } else // no multi column text return 0; } private Host firewall; private ManageDomain mgDomain; private String listText[][]; private static Image greenBallImage = Utils.greenBall(); private static Image redBallImage = Utils.redBall(); private static Image yellowBallImage = Utils.yellowBall();} // TcpCanvas// Header bar for the TCP connection monitorclass TcpHeader extends ListHeader { public TcpHeader(ListCanvas listCanvas, Host firewall) { super(listCanvas); header = new String[listCanvas.column_no]; header[0] = "ID"; header[1] = "State "+Utils.timeString(firewall.actDate); header[2] = "Created"; header[3] = "Last used"; header[4] = "Timeout"; header[5] = "Source"; header[6] = "Destination"; }} // TcpHeader
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -