package javaforce.service; /** * * @author pquiring * * Created : Nov 16, 2013 */ import java.io.*; import java.net.*; import java.util.*; import javax.swing.*; import javaforce.*; import javaforce.jbus.*; public class DHCPApp extends javax.swing.JFrame { /** * Creates new form DHCPApp */ public DHCPApp() { initComponents(); //create tray icon to open app JFImage img = new JFImage(); img.loadPNG(this.getClass().getResourceAsStream("/javaforce/icons/dhcp.png")); new Thread() { public void run() { Random r = new Random(); busClient = new JBusClient(DHCP.busPack + ".client" + r.nextInt(), new JBusMethods()); busClient.setPort(DHCP.getBusPort()); busClient.start(); busClient.call(DHCP.busPack, "getConfig", "\"" + busClient.pack + "\""); } }.start(); JF.centerWindow(this); } public void writeConfig() { busClient.call(DHCP.busPack, "setConfig", busClient.quote(busClient.encodeString(config.getText()))); } public void restart() { busClient.call(DHCP.busPack, "restart", ""); } /** * 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() { save = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); config = new javax.swing.JTextArea(); jLabel1 = new javax.swing.JLabel(); viewLog = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("DHCP Server"); save.setText("Save"); save.setEnabled(false); save.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { saveActionPerformed(evt); } }); config.setColumns(20); config.setRows(5); config.setText(" [ loading ... ]"); config.setEnabled(false); jScrollPane1.setViewportView(config); jLabel1.setText("DHCP Configuration:"); viewLog.setText("View Log"); viewLog.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { viewLogActionPerformed(evt); } }); 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) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 583, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(viewLog) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(save)) .addGroup(layout.createSequentialGroup() .addComponent(jLabel1) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 424, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(save) .addComponent(viewLog)) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents private void saveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveActionPerformed writeConfig(); restart(); JF.showMessage("Notice", "Settings saved!"); }//GEN-LAST:event_saveActionPerformed private void viewLogActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_viewLogActionPerformed showViewLog(); }//GEN-LAST:event_viewLogActionPerformed /** * @param args the command line arguments */ public static void main(String args[]) { /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new DHCPApp().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JTextArea config; private javax.swing.JLabel jLabel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JButton save; private javax.swing.JButton viewLog; // End of variables declaration//GEN-END:variables public ViewLog viewer; public void showViewLog() { if (viewer == null || viewer.isClosed) { viewer = new ViewLog(DHCP.getLogFile()); viewer.setTitle("DHCP Log"); } viewer.setVisible(true); viewer.setExtendedState(JFrame.NORMAL); } private void test() { try { DatagramSocket s = new DatagramSocket(68); byte d[] = new byte[242]; d[0] = DHCP.DHCP_OPCODE_REQUEST; d[1] = 1; //ethernet d[2] = 6; //hw len (MAC size) d[3] = 0; //hops BE.setuint16(d, 4, 0x12341234); //transaction id //8-9 = seconds //10-11 = flags //12-15 = client IP //16-19 = your IP //20-23 = next server IP //24-27 = relay IP //28-33 = client MAC address //33-42 = padding //43-104 = server host name //105-233 = boot file name //234-237 = cookie BE.setuint16(d, 234, 0x12341234); //cookie //DHCP Option : DHCP_DISCOVER d[238] = 0x35; d[239] = 0x1; d[240] = 0x1; //DHCP Option : END d[241] = (byte)0xff; DatagramPacket p = new DatagramPacket(d, d.length); p.setAddress(Inet4Address.getByName("255.255.255.255")); p.setPort(67); s.send(p); d = new byte[1024]; p = new DatagramPacket(d, d.length); s.receive(p); JF.showMessage("IP", DHCP.IP4toString(d, 16)); s.close(); } catch (Exception e) { JF.showError("Error", e.toString()); } } public JBusClient busClient; public class JBusMethods { public void getConfig(String cfg) { final String _cfg = cfg; java.awt.EventQueue.invokeLater(new Runnable() { public void run() { config.setText(JBusClient.decodeString(_cfg)); config.setEnabled(true); save.setEnabled(true); } }); } } }