package jfconfig; /** * Created : Mar 18, 2012 * * @author pquiring */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javaforce.*; public class DHCPPoolDialog extends javax.swing.JDialog implements KeyListener { /** * Creates new form DHCPPoolDialog */ public DHCPPoolDialog(java.awt.Frame parent, boolean modal, DHCPPanel.Pool pool) { super(parent, modal); initComponents(); setPosition(); if (pool == null) return; enabled.setSelected(pool.enabled); ip.setText(pool.ip); mask.setText(pool.mask); ipFirst.setText(pool.ipfirst); ipLast.setText(pool.iplast); domain.setText(pool.domain); router.setText(pool.router); dns.setText(pool.dns); wins.setText(pool.wins); extra.setText(pool.extra); ip.addKeyListener(this); mask.addKeyListener(this); ipFirst.addKeyListener(this); ipLast.addKeyListener(this); domain.addKeyListener(this); router.addKeyListener(this); dns.addKeyListener(this); wins.addKeyListener(this); extra.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() { jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); mask = new javax.swing.JTextField(); ip = new javax.swing.JTextField(); dns = new javax.swing.JTextField(); router = new javax.swing.JTextField(); wins = new javax.swing.JTextField(); apply = new javax.swing.JButton(); cancel = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); extra = new javax.swing.JTextArea(); jLabel7 = new javax.swing.JLabel(); domain = new javax.swing.JTextField(); enabled = new javax.swing.JCheckBox(); jLabel8 = new javax.swing.JLabel(); jLabel9 = new javax.swing.JLabel(); ipFirst = new javax.swing.JTextField(); jLabel11 = new javax.swing.JLabel(); ipLast = new javax.swing.JTextField(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("DHCP Pool"); setAlwaysOnTop(true); jLabel1.setText("Subnet"); jLabel2.setText("Subnet Mask"); jLabel3.setText("DNS"); jLabel4.setText("Router"); jLabel5.setText("WINS"); jLabel6.setText("Extra"); apply.setText("Apply"); apply.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { applyActionPerformed(evt); } }); cancel.setText("Cancel"); cancel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cancelActionPerformed(evt); } }); extra.setColumns(20); extra.setRows(5); jScrollPane1.setViewportView(extra); jLabel7.setText("Domain"); enabled.setSelected(true); enabled.setText("Enabled"); jLabel8.setText("Note : Seperate multiple IPs with a comma"); jLabel9.setText("IP Range"); jLabel11.setText("to"); 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() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel2) .addComponent(jLabel1) .addComponent(jLabel3) .addComponent(jLabel4) .addComponent(jLabel5) .addComponent(jLabel6) .addComponent(jLabel7) .addComponent(enabled) .addComponent(jLabel9)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(dns) .addComponent(router) .addComponent(wins) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 410, Short.MAX_VALUE) .addComponent(domain) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent(ip, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 174, Short.MAX_VALUE) .addComponent(mask, javax.swing.GroupLayout.Alignment.LEADING) .addComponent(ipFirst, javax.swing.GroupLayout.Alignment.LEADING)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel11) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(ipLast)))) .addGroup(layout.createSequentialGroup() .addComponent(jLabel8) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(cancel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(apply))) .addContainerGap()) ); 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(ip, 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(jLabel2) .addComponent(mask, 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(jLabel9) .addComponent(ipFirst, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel11) .addComponent(ipLast, 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(jLabel7) .addComponent(domain, 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(jLabel3) .addComponent(dns, 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(jLabel4) .addComponent(router, 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(jLabel5) .addComponent(wins, 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.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jLabel6) .addGap(0, 0, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addComponent(jScrollPane1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(apply) .addComponent(cancel) .addComponent(jLabel8)) .addGap(6, 6, 6)) ); pack(); }// </editor-fold>//GEN-END:initComponents private void cancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelActionPerformed dispose(); }//GEN-LAST:event_cancelActionPerformed private void applyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_applyActionPerformed attempted = true; if (!valid()) return; accepted = true; dispose(); }//GEN-LAST:event_applyActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton apply; private javax.swing.JButton cancel; private javax.swing.JTextField dns; private javax.swing.JTextField domain; private javax.swing.JCheckBox enabled; private javax.swing.JTextArea extra; private javax.swing.JTextField ip; private javax.swing.JTextField ipFirst; private javax.swing.JTextField ipLast; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel11; 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.JScrollPane jScrollPane1; private javax.swing.JTextField mask; private javax.swing.JTextField router; private javax.swing.JTextField wins; // End of variables declaration//GEN-END:variables public boolean accepted = false; public boolean attempted = false; public boolean getEnabled() { return enabled.isSelected(); } public String getIP() { return ip.getText(); } public String getMask() { return mask.getText(); } public String getIPFirst() { return ipFirst.getText(); } public String getIPLast() { return ipLast.getText(); } public String getDomain() { return domain.getText(); } public String getDNS() { return dns.getText(); } public String getRouter() { return router.getText(); } public String getWINS() { return wins.getText(); } public String getExtra() { return extra.getText(); } private boolean isIP4ListValid(JTextField tf, boolean nullAllowed, int maxips, boolean isMask) { String str = tf.getText(); int test; tf.setBackground(new Color(0xff0000)); if (str.length() == 0) return nullAllowed; String ips[] = str.split(","); if (ips.length > maxips) return false; for(int i=0;i<ips.length;i++) { String octs[] = ips[i].split("[.]", -1); if (octs.length != 4) return false; int mask = 0; try { for(int a=0;a<4;a++) { test = Integer.valueOf(octs[a]); if ((test < 0) || (test > 255)) return false; if (isMask) { mask <<= 8; mask += test; } } if (isMask) { boolean one = false; for(int a=0;a<32;a++) { if ((mask & 0x01) == 0x01) {one = true;} else {if (one) return false;} mask >>= 1; } } } catch (Exception e) { JFLog.log(e); return false; } } tf.setBackground(new Color(0xffffff)); return true; } private long getIP(JTextField tf) { //assumes IP is valid String octs[] = tf.getText().split("[.]", -1); long ipValue = 0; for(int a=0;a<4;a++) { int oct = Integer.valueOf(octs[a]); ipValue <<= 8; ipValue += oct; } return ipValue; } private boolean isDomainValid(JTextField tf, boolean nullAllowed) { String str = tf.getText(); //check a few conditions if (str.length() == 0) return nullAllowed; // if (str.indexOf(".") == -1) return false; //??? if (str.startsWith(".")) return false; if (str.endsWith(".")) return false; char c[] = str.toCharArray(); for(int a=0;a<c.length;a++) { if (c[a] == '~') return false; if (c[a] == '!') return false; if (c[a] == '@') return false; if (c[a] == '#') return false; if (c[a] == '$') return false; if (c[a] == '%') return false; if (c[a] == '^') return false; if (c[a] == '&') return false; if (c[a] == '*') return false; if (c[a] == '(') return false; if (c[a] == ')') return false; if (c[a] == ' ') return false; if (c[a] == '?') return false; if (c[a] == '+') return false; if (c[a] == '/') return false; if (c[a] == '\\') return false; if (c[a] == '{') return false; if (c[a] == '}') return false; } return true; } private boolean valid() { boolean ok = true; if (!isIP4ListValid(ip, false, 1, false)) ok = false; if (!isIP4ListValid(mask, false, 1, true)) ok = false; if (!isIP4ListValid(ipFirst, false, 1, false)) ok = false; if (!isIP4ListValid(ipLast, false, 1, false)) ok = false; if (!isIP4ListValid(dns, true, 3, false)) ok = false; if (!isIP4ListValid(router, true, 3, false)) ok = false; if (!isIP4ListValid(wins, true, 3, false)) ok = false; if (!isDomainValid(domain, true)) ok = false; if (!ok) return ok; //make sure ips are in valid ranges long i_ip = getIP(ip); long i_mask = getIP(mask); long i_first = getIP(ipFirst); long i_last = getIP(ipLast); if (i_last < i_first) {JFLog.log("ipLast < ipFirst"); ok = false;} long i_ip_mask = i_ip & i_mask; if ((i_first & i_mask) != i_ip_mask) {JFLog.log("ipFirst is not in subnet"); ok = false;} if ((i_last & i_mask) != i_ip_mask) {JFLog.log("ipLast is not in subnet"); ok = false;} if (!ok) { //set ipFirst & ipLast background = red ipFirst.setBackground(new Color(0xff0000)); ipLast.setBackground(new Color(0xff0000)); } return ok; } public void keyPressed(KeyEvent e) {} public void keyReleased(KeyEvent e) {if (attempted) 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)); } }