package jfconfig;
/**
* Created : Mar 15, 2012
*
* @author pquiring
*/
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javaforce.*;
public class FirewallRuleDialog extends javax.swing.JDialog implements KeyListener {
/**
* Creates new form FirewallRuleDialog
*/
public FirewallRuleDialog(java.awt.Frame parent, boolean modal, FirewallPanel.Rule rule, String ruleName) {
super(parent, modal);
initComponents();
setPosition();
listInterfaces();
tabs.removeAll();
if (rule == null) {
tabs.add(localhost);
name.setText(ruleName);
setTitle("Add Rule");
} else {
//load rule
name.setText(rule.name);
type.setEnabled(false);
type.setSelectedIndex(rule.type);
typeItemStateChanged(null);
enabled.setSelected(rule.enabled);
loadOpts(rule.opts, rule.type);
setTitle("Edit Rule");
}
basicPort.addKeyListener(this);
portForwardingPort.addKeyListener(this);
portForwardingLength.addKeyListener(this);
portForwardingDestPort.addKeyListener(this);
portForwardingIP.addKeyListener(this);
DMZPublicIP.addKeyListener(this);
DMZPrivateIP.addKeyListener(this);
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
buttonGroup1 = new javax.swing.ButtonGroup();
jLabel1 = new javax.swing.JLabel();
name = new javax.swing.JTextField();
cancel = new javax.swing.JButton();
accept = new javax.swing.JButton();
type = new javax.swing.JComboBox();
jLabel2 = new javax.swing.JLabel();
tabs = new javax.swing.JTabbedPane();
localhost = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
basicProtocol = new javax.swing.JComboBox();
basicPort = new javax.swing.JTextField();
basicAccept = new javax.swing.JRadioButton();
jLabel5 = new javax.swing.JLabel();
basicBlock = new javax.swing.JRadioButton();
nat = new javax.swing.JPanel();
jLabel6 = new javax.swing.JLabel();
wan = new javax.swing.JComboBox();
jLabel7 = new javax.swing.JLabel();
lan = new javax.swing.JComboBox();
portForwarding = new javax.swing.JPanel();
jLabel8 = new javax.swing.JLabel();
portForwardingIF = new javax.swing.JComboBox();
jLabel9 = new javax.swing.JLabel();
portForwardingProtocol = new javax.swing.JComboBox();
jLabel10 = new javax.swing.JLabel();
portForwardingIP = new javax.swing.JTextField();
jLabel13 = new javax.swing.JLabel();
portForwardingPort = new javax.swing.JTextField();
jLabel14 = new javax.swing.JLabel();
portForwardingLength = new javax.swing.JTextField();
jLabel15 = new javax.swing.JLabel();
portForwardingDestPort = new javax.swing.JTextField();
dmz = new javax.swing.JPanel();
jLabel11 = new javax.swing.JLabel();
DMZIF = new javax.swing.JComboBox();
jLabel12 = new javax.swing.JLabel();
DMZPrivateIP = new javax.swing.JTextField();
jLabel16 = new javax.swing.JLabel();
DMZPublicIP = new javax.swing.JTextField();
jLabel17 = new javax.swing.JLabel();
enabled = new javax.swing.JCheckBox();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
jLabel1.setText("Name:");
cancel.setText("Cancel");
cancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelActionPerformed(evt);
}
});
accept.setText("Accept");
accept.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
acceptActionPerformed(evt);
}
});
type.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Localhost Exception", "NAT Routing", "Port Forwarding", "DMZ" }));
type.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
typeItemStateChanged(evt);
}
});
jLabel2.setText("Type:");
tabs.setTabLayoutPolicy(javax.swing.JTabbedPane.SCROLL_TAB_LAYOUT);
jLabel3.setText("Port");
jLabel4.setText("Protocol");
basicProtocol.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "TCP", "UDP", "ICMP" }));
buttonGroup1.add(basicAccept);
basicAccept.setSelected(true);
basicAccept.setText("Accept");
jLabel5.setText("Action");
buttonGroup1.add(basicBlock);
basicBlock.setText("Block");
javax.swing.GroupLayout localhostLayout = new javax.swing.GroupLayout(localhost);
localhost.setLayout(localhostLayout);
localhostLayout.setHorizontalGroup(
localhostLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(localhostLayout.createSequentialGroup()
.addContainerGap()
.addGroup(localhostLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel4)
.addComponent(jLabel3)
.addComponent(jLabel5))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(localhostLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(localhostLayout.createSequentialGroup()
.addComponent(basicAccept)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(basicBlock))
.addGroup(localhostLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(basicProtocol, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(basicPort)))
.addContainerGap(219, Short.MAX_VALUE))
);
localhostLayout.setVerticalGroup(
localhostLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(localhostLayout.createSequentialGroup()
.addContainerGap()
.addGroup(localhostLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel4)
.addComponent(basicProtocol, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(localhostLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel3)
.addComponent(basicPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(localhostLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(basicAccept)
.addComponent(jLabel5)
.addComponent(basicBlock))
.addContainerGap(125, Short.MAX_VALUE))
);
tabs.addTab("Exception", localhost);
jLabel6.setText("WAN Interface");
jLabel7.setText("LAN Interface");
javax.swing.GroupLayout natLayout = new javax.swing.GroupLayout(nat);
nat.setLayout(natLayout);
natLayout.setHorizontalGroup(
natLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(natLayout.createSequentialGroup()
.addContainerGap()
.addGroup(natLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(natLayout.createSequentialGroup()
.addComponent(jLabel6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(wan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(natLayout.createSequentialGroup()
.addComponent(jLabel7)
.addGap(18, 18, 18)
.addComponent(lan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(279, Short.MAX_VALUE))
);
natLayout.setVerticalGroup(
natLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(natLayout.createSequentialGroup()
.addContainerGap()
.addGroup(natLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel6)
.addComponent(wan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(natLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel7)
.addComponent(lan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(145, Short.MAX_VALUE))
);
tabs.addTab("NAT Routing", nat);
jLabel8.setText("WAN Interface");
jLabel9.setText("Protocol");
portForwardingProtocol.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "TCP", "UDP", "ICMP" }));
jLabel10.setText("Destination IP");
jLabel13.setText("Port");
jLabel14.setText("Length");
jLabel15.setText("Dest Port");
javax.swing.GroupLayout portForwardingLayout = new javax.swing.GroupLayout(portForwarding);
portForwarding.setLayout(portForwardingLayout);
portForwardingLayout.setHorizontalGroup(
portForwardingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(portForwardingLayout.createSequentialGroup()
.addContainerGap()
.addGroup(portForwardingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(portForwardingLayout.createSequentialGroup()
.addComponent(jLabel10)
.addGap(18, 18, 18)
.addComponent(portForwardingIP))
.addGroup(portForwardingLayout.createSequentialGroup()
.addGroup(portForwardingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel8)
.addComponent(jLabel9)
.addComponent(jLabel13)
.addComponent(jLabel15))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(portForwardingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(portForwardingDestPort)
.addComponent(portForwardingIF, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(portForwardingProtocol, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(portForwardingPort, javax.swing.GroupLayout.Alignment.LEADING))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel14)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(portForwardingLength, javax.swing.GroupLayout.DEFAULT_SIZE, 163, Short.MAX_VALUE)))
.addContainerGap())
);
portForwardingLayout.setVerticalGroup(
portForwardingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(portForwardingLayout.createSequentialGroup()
.addContainerGap()
.addGroup(portForwardingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel8)
.addComponent(portForwardingIF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(portForwardingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel9)
.addComponent(portForwardingProtocol, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(portForwardingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(portForwardingPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel14)
.addComponent(portForwardingLength, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel13))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(portForwardingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel15)
.addComponent(portForwardingDestPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(portForwardingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel10)
.addComponent(portForwardingIP, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(70, Short.MAX_VALUE))
);
tabs.addTab("Port Forwarding", portForwarding);
jLabel11.setText("WAN Interface");
jLabel12.setText("Private IP");
jLabel16.setText("Public IP (optional)");
jLabel17.setText("NOTE : Using Public IP field creates a 1-to-1 NAT");
javax.swing.GroupLayout dmzLayout = new javax.swing.GroupLayout(dmz);
dmz.setLayout(dmzLayout);
dmzLayout.setHorizontalGroup(
dmzLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(dmzLayout.createSequentialGroup()
.addContainerGap()
.addGroup(dmzLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(dmzLayout.createSequentialGroup()
.addComponent(jLabel12)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(DMZPrivateIP))
.addGroup(dmzLayout.createSequentialGroup()
.addComponent(jLabel16)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(DMZPublicIP))
.addGroup(dmzLayout.createSequentialGroup()
.addGroup(dmzLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(dmzLayout.createSequentialGroup()
.addComponent(jLabel11)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(DMZIF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jLabel17))
.addGap(0, 77, Short.MAX_VALUE)))
.addContainerGap())
);
dmzLayout.setVerticalGroup(
dmzLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(dmzLayout.createSequentialGroup()
.addContainerGap()
.addGroup(dmzLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel11)
.addComponent(DMZIF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(dmzLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel16)
.addComponent(DMZPublicIP, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(dmzLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel12)
.addComponent(DMZPrivateIP, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel17)
.addContainerGap(104, Short.MAX_VALUE))
);
tabs.addTab("DMZ", dmz);
enabled.setSelected(true);
enabled.setText("Enabled");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(tabs)
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(accept)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(cancel))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1)
.addComponent(jLabel2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(name)
.addComponent(type, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
.addGap(12, 12, 12))
.addGroup(layout.createSequentialGroup()
.addComponent(enabled)
.addGap(0, 0, Short.MAX_VALUE))))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(enabled)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(name, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(type, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tabs)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(cancel)
.addComponent(accept))
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void typeItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_typeItemStateChanged
int idx = type.getSelectedIndex();
tabs.removeAll();
switch (idx) {
case 0: tabs.add(localhost); break;
case 1: tabs.add(nat); break;
case 2: tabs.add(portForwarding); break;
case 3: tabs.add(dmz); break;
}
}//GEN-LAST:event_typeItemStateChanged
private void cancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelActionPerformed
dispose();
}//GEN-LAST:event_cancelActionPerformed
private void acceptActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_acceptActionPerformed
if (!valid()) return;
accepted = true;
opts = buildOpts();
dispose();
}//GEN-LAST:event_acceptActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JComboBox DMZIF;
private javax.swing.JTextField DMZPrivateIP;
private javax.swing.JTextField DMZPublicIP;
private javax.swing.JButton accept;
private javax.swing.JRadioButton basicAccept;
private javax.swing.JRadioButton basicBlock;
private javax.swing.JTextField basicPort;
private javax.swing.JComboBox basicProtocol;
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.JButton cancel;
private javax.swing.JPanel dmz;
private javax.swing.JCheckBox enabled;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel14;
private javax.swing.JLabel jLabel15;
private javax.swing.JLabel jLabel16;
private javax.swing.JLabel jLabel17;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JComboBox lan;
private javax.swing.JPanel localhost;
private javax.swing.JTextField name;
private javax.swing.JPanel nat;
private javax.swing.JPanel portForwarding;
private javax.swing.JTextField portForwardingDestPort;
private javax.swing.JComboBox portForwardingIF;
private javax.swing.JTextField portForwardingIP;
private javax.swing.JTextField portForwardingLength;
private javax.swing.JTextField portForwardingPort;
private javax.swing.JComboBox portForwardingProtocol;
private javax.swing.JTabbedPane tabs;
private javax.swing.JComboBox type;
private javax.swing.JComboBox wan;
// End of variables declaration//GEN-END:variables
public boolean accepted = false;
private ArrayList<String> ifNames = new ArrayList<String>();
private String opts;
private void listInterfaces() {
//exec "ifconfig"
ShellProcess sp = new ShellProcess();
ArrayList<String> cmd = new ArrayList<String>();
cmd.add("ifconfig");
String output = sp.run(cmd, false);
if (output == null) {
JF.showError("Error", "Failed to exec ifconfig.");
return;
}
String lns[] = output.split("\n");
for(int a=0;a<lns.length;a++) {
if (lns[a].length() == 0) continue;
if (lns[a].charAt(0) == ' ') continue;
int idx = lns[a].indexOf(' ');
String intface = lns[a].substring(0, idx);
// if (intface.equals("lo")) continue; //useful?
ifNames.add(intface);
wan.addItem(intface);
lan.addItem(intface);
portForwardingIF.addItem(intface);
DMZIF.addItem(intface);
}
}
private String buildOpts() {
switch (type.getSelectedIndex()) {
case 0: return "protocol=" + basicProtocol.getSelectedItem()
+ ";port=" + basicPort.getText()
+ ";action=" + (basicAccept.isSelected() ? "ACCEPT" : "DROP");
case 1: return "wan=" + wan.getSelectedItem()
+ ";lan=" + lan.getSelectedItem();
case 2: return "wan=" + portForwardingIF.getSelectedItem()
+ ";protocol=" + portForwardingProtocol.getSelectedItem()
+ ";port=" + portForwardingPort.getText()
+ ";length=" + portForwardingLength.getText()
+ ";dport=" + portForwardingDestPort.getText()
+ ";ip=" + portForwardingIP.getText();
case 3: return "wan=" + DMZIF.getSelectedItem()
+ ";privateip=" + DMZPrivateIP.getText()
+ ";publicip=" + DMZPublicIP.getText();
}
return null;
}
private void loadOpts(String opts, int type) {
String lns[] = opts.split(";");
for(int a=0;a<lns.length;a++) {
String f[] = lns[a].split("="); //sides of equation
switch (type) {
case 0:
if (f[0].equals("protocol")) {basicProtocol.setSelectedIndex(getProtocolIdx(f[1])); continue;}
if (f[0].equals("port")) {basicPort.setText(f[1]); continue;}
if (f[0].equals("action")) {basicAccept.setSelected(f[1].equals("ACCEPT")); continue;}
case 1:
if (f[0].equals("wan")) {wan.setSelectedIndex(getIFidx(f[1])); continue;}
if (f[0].equals("lan")) {lan.setSelectedIndex(getIFidx(f[1])); continue;}
case 2:
if (f[0].equals("wan")) {portForwardingIF.setSelectedIndex(getIFidx(f[1])); continue;}
if (f[0].equals("protocol")) {portForwardingProtocol.setSelectedIndex(getProtocolIdx(f[1])); continue;}
if (f[0].equals("port")) {portForwardingPort.setText(f[1]); continue;}
if (f[0].equals("length")) {portForwardingLength.setText(f[1]); continue;}
if (f[0].equals("dport")) {portForwardingDestPort.setText(f[1]); continue;}
if (f[0].equals("ip")) {portForwardingIP.setText(f[1]); continue;}
case 3:
if (f[0].equals("wan")) {DMZIF.setSelectedIndex(getIFidx(f[1])); continue;}
if (f[0].equals("privateip")) {DMZPrivateIP.setText(f[1]); continue;}
if (f[0].equals("publicip")) {DMZPublicIP.setText(f[1]); continue;}
}
}
}
private int getIFidx(String ifName) {
for(int a=0;a<ifNames.size();a++) {
if (ifNames.get(a).equalsIgnoreCase(ifName)) return a;
}
return -1;
}
private int getProtocolIdx(String name) {
if (name.equalsIgnoreCase("TCP")) return 0;
if (name.equalsIgnoreCase("UDP")) return 1;
if (name.equalsIgnoreCase("ICMP")) return 2;
return -1;
}
private boolean isPortNumberValid(JTextField tf) {
String str = tf.getText();
tf.setBackground(new Color(0xff0000));
if (str.length() == 0) return false;
try {
int test = Integer.valueOf(str);
if ((test < 0) || (test > 65535)) return false;
} catch (Exception e) {
return false;
}
tf.setBackground(new Color(0xffffff));
return true;
}
private boolean isIP4Valid(JTextField tf, boolean nullAllowed) {
String str = tf.getText();
tf.setBackground(new Color(0xff0000));
if (str.length() == 0) return nullAllowed;
String octs[] = str.split("[.]", -1);
if (octs.length != 4) {JFLog.log("octs.length=" + octs.length); return false;}
try {
for(int a=0;a<4;a++) {
int test = Integer.valueOf(octs[a]);
System.out.println("test=" + test);
if ((test < 0) || (test > 255)) return false;
}
} catch (Exception e) {
JFLog.log(e);
return false;
}
tf.setBackground(new Color(0xffffff));
return true;
}
private boolean isStringValid(JTextField tf, int minlength, int maxlength) {
String str = tf.getText();
tf.setBackground(new Color(0xff0000));
int len = str.length();
if ((len < minlength) || (len > maxlength)) return false;
tf.setBackground(new Color(0xffffff));
return true;
}
private boolean valid() {
boolean valid = true;
if (!isStringValid(name, 1, 32)) valid = false;
switch (type.getSelectedIndex()) {
case 0:
if (!isPortNumberValid(basicPort)) valid = false;
break;
case 1:
break;
case 2:
if (!isPortNumberValid(portForwardingPort)) valid = false;
if (!isPortNumberValid(portForwardingLength)) valid = false;
if (!isPortNumberValid(portForwardingDestPort)) valid = false;
if (!isIP4Valid(portForwardingIP, false)) valid = false;
break;
case 3:
if (!isIP4Valid(DMZPublicIP, true)) valid = false;
if (!isIP4Valid(DMZPrivateIP, false)) valid = false;
break;
}
return valid;
}
public String getOpts() {
return opts;
}
public String getName() {
return name.getText();
}
public int getRuleType() {
return type.getSelectedIndex();
}
public boolean getEnabled() {
return enabled.isSelected();
}
public void keyPressed(KeyEvent e) {}
public void keyReleased(KeyEvent e) {
valid();
}
public void keyTyped(KeyEvent e) {
}
private void setPosition() {
Rectangle s = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
Dimension d = getSize();
setLocation(s.width/2 - d.width/2, s.height/2 - (d.height/2));
}
}