Java tutorial
/* * Copyright (c) 2011 Matthew Doll <mdoll at homenet.me>. * * This file is part of HomeNet. * * HomeNet is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * HomeNet is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with HomeNet. If not, see <http://www.gnu.org/licenses/>. */ //Error 0x5 at /home/bob/foo/rxtx-devel/build/../src/termios.Exception in thread "Thread-6" java.util.ConcurrentModificationException // at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372) // at java.util.AbstractList$Itr.next(AbstractList.java:343) // at homenetapp.HomeNetApp$SerialManager.checkSerialPorts(HomeNetApp.java:338) // at homenetapp.HomeNetApp$SerialManager$SerialCheckThread.run(HomeNetApp.java:406) //c(482): Access is denied. package homenetapp; import java.util.*; //import java.awt.*; import javax.swing.*; import javax.swing.plaf.basic.*; import java.io.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.net.*; import java.security.KeyStore; import javax.net.ssl.*; //import java.security.*; import java.security.cert.*; import org.apache.commons.codec.binary.Base64; import homenet.XmlrpcClient; /** * * @author mdoll */ public class HomeNetAppGui extends javax.swing.JFrame { public HashMap<String, JCheckBoxMenuItem> menuItems = new HashMap<String, JCheckBoxMenuItem>(); public HomeNetApp homenetapp; private LinkedList<homenet.Packet> packetList = new LinkedList<homenet.Packet>(); //default settings int packetToNode = 1; int packetToDevice = 1; int packetFromNode = 255; int packetFromDevice = 0; int packetCommand = 0; String packetPayload = "test"; boolean prefAutoUpdatePacket = true; /** Creates new form HomeNetAppGui */ public HomeNetAppGui() { this.setLocationRelativeTo(null); // try { // javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName()); // } catch (Exception e) {e.printStackTrace();} homenetapp = new HomeNetApp(); initComponents(); ImageIcon ImageIcon = new ImageIcon(getClass().getResource("/HomeNetIcon.gif")); java.awt.Image Image = ImageIcon.getImage(); this.setIconImage(Image); SendPacketFrame.setIconImage(Image); //redirectSystemStreams();////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// System.err.println("test"); SettingsDialog.setLocationRelativeTo(null); //if not configured //if(true){ if (homenetapp.configDone == false) { System.out.println("HomeNet App Not Setup"); System.out.println("Launching Setup Wizard"); javax.swing.JPanel wizardPanel = new SetupWizardGui(this); cardPanel.add(wizardPanel, "wizard"); //validate(); pack(); wizardPanel.setVisible(true); ((java.awt.CardLayout) cardPanel.getLayout()).next(cardPanel); // ((java.awt.CardLayout) cardPanel.getLayout()).show(cardPanel,"wizard"); } else { startMainGui(); } //redirect console to gui } public void startMainGui() { loadConfig(); // System.out.append("startMainGui"); startHomeNetApp(); topMenuBar.setVisible(true); ((java.awt.CardLayout) cardPanel.getLayout()).first(cardPanel); } public void exit() { saveConfig(); System.out.println("Exiting"); setVisible(false); homenetapp.exit(); System.exit(0); } private void startHomeNetApp() { this.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent winEvt) { // Perhaps ask user if they want to save any unsaved files first. exit(); } }); homenetapp.homenet.addPortListener(new homenet.PortListener() { ArrayList<String> local = new ArrayList<String>(); ArrayList<String> remote = new ArrayList<String>(); private boolean isRemote(String port) { return port.equals("xmlrpc"); } public void portAdded(String port) { // System.out.println("portAddedEvent"); if (isRemote(port)) { remote.add(port); remoteStatusLabel.setText("Connected"); } else { local.add(port); localStatusLabel.setText("Connected"); } } public void portRemoved(String port) { //System.out.println("portRemovedEvent"); if (isRemote(port)) { remote.remove(port); if (remote.size() < 1) { remoteStatusLabel.setText("Not Connected"); } } else { local.remove(port); if (local.size() < 1) { localStatusLabel.setText("Not Connected"); } } } public void portSendingStart(String port) { // System.out.println("portSendingStartEvent"); if (isRemote(port)) { remoteSendingLabel.setText("(X)"); } else { localSendingLabel.setText("(X)"); } } public void portSendingEnd(String port) { // System.out.println("portSendingEndEvent"); if (isRemote(port)) { Thread delayThread = new Thread() { public void run() { try { Thread.sleep(500); } catch (Exception e) { } remoteSendingLabel.setText("( )"); } }; delayThread.start(); } else { Thread delayThread = new Thread() { public void run() { try { Thread.sleep(500); } catch (Exception e) { } localSendingLabel.setText("( )"); } }; delayThread.start(); } } public void portReceivingStart(String port) { // System.out.println("portRecievingStartEvent"); if (isRemote(port)) { remoteReceivingLabel.setText("(X)"); } else { localReceivingLabel.setText("(X)"); } } public void portReceivingEnd(String port) { // System.out.println("portRecievingEndEvent"); if (isRemote(port)) { Thread delayThread = new Thread() { public void run() { try { Thread.sleep(500); } catch (Exception e) { } remoteReceivingLabel.setText("( )"); } }; delayThread.start(); } else { Thread delayThread = new Thread() { public void run() { try { Thread.sleep(500); } catch (Exception e) { } localReceivingLabel.setText("( )"); } }; delayThread.start(); } } }); try { homenetapp.start(); } catch (Exception e) { //show popup and exit program javax.swing.JOptionPane.showMessageDialog(null, "Error: " + e.getMessage(), "Error", javax.swing.JOptionPane.ERROR_MESSAGE); System.err.println(e.getMessage()); } loadSettings(); SendPacketFrame.setLocationRelativeTo(null); homenetapp.homenet.addPacketListener(new homenet.PacketListener() { public void packetRecieved(homenet.Packet packet) { addPacketToList(packet); } }); homenetapp.serialmanager.addListener(new SerialListener() { public void portAdded(String name) { // System.out.println("portAddedEvent"); javax.swing.JCheckBoxMenuItem serialPortCheckBox = new javax.swing.JCheckBoxMenuItem(name); serialPortCheckBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { JCheckBoxMenuItem checkbox = (JCheckBoxMenuItem) evt.getSource(); if (checkbox.isSelected()) { try { homenetapp.serialmanager.activatePort(checkbox.getText()); } catch (Exception e) { javax.swing.JOptionPane.showMessageDialog(null, "Port " + checkbox.getText() + " Error: " + e.getMessage(), "Error", javax.swing.JOptionPane.ERROR_MESSAGE); } } else { homenetapp.serialmanager.deactivatePort(checkbox.getText()); } } }); // serialPortCheckBox.setMnemonic(java.awt.event.KeyEvent.VK_1); menuItems.put(name, serialPortCheckBox); menuSerialPorts.add(serialPortCheckBox); } public void portRemoved(String name) { // System.out.println("portRemovedEvent"); menuSerialPorts.remove(menuItems.get(name)); } public void portActivated(String name) { // System.out.println("portActivatedEvent"); menuItems.get(name).setSelected(true); } public void portDeactivated(String name) { // System.out.println("portDeactivatedEvent"); menuItems.get(name).setSelected(false); } }); try { homenetapp.serialmanager.start(); } catch (Exception e) { javax.swing.JOptionPane.showMessageDialog(null, "Port Error: " + e.getMessage(), "Error", javax.swing.JOptionPane.ERROR_MESSAGE); } } class setupFrameEventHandler extends WindowAdapter { public void windowClosing(WindowEvent evt) { //check to make sure all the settings are good System.out.println("Checking New Config"); //then reboot the app System.out.println("rebooting app with new config"); SwingUtilities.invokeLater(new Runnable() { public void run() { startHomeNetApp(); } }); } } private void loadConfig() { //load gui config settings try { packetToNode = homenetapp.config.getInt("packet.tonode"); packetToDevice = homenetapp.config.getInt("packet.todevice"); packetFromNode = homenetapp.config.getInt("packet.fromnode"); packetFromDevice = homenetapp.config.getInt("packet.fromdevice"); packetCommand = homenetapp.config.getInt("packet.command"); packetPayload = homenetapp.config.getString("packet.payload"); } catch (Exception e) { // e.printStackTrace(); } } public void saveConfig() { //save properties //page1 homenetapp.config.setProperty("packet.tonode", packetToNode); homenetapp.config.setProperty("packet.todevice", packetToDevice); homenetapp.config.setProperty("packet.fromnode", packetFromNode); homenetapp.config.setProperty("packet.fromdevice", packetFromDevice); homenetapp.config.setProperty("packet.command", packetCommand); homenetapp.config.setProperty("packet.payload", packetPayload); try { homenetapp.saveConfig(); } catch (Exception e) { e.printStackTrace(); javax.swing.JOptionPane.showMessageDialog(null, "Could not save config", "Error", javax.swing.JOptionPane.ERROR_MESSAGE); } } private void loadSettings() { serverTextField.setText(homenetapp.clientServer); apiKeyTextField.setText(homenetapp.clientApiKey); enableServerCheckBox.setSelected(homenetapp.serverEnabled); enableUPnPCheckBox.setSelected(homenetapp.serverUpnpEnabled); serverPortTextField.setText("" + homenetapp.serverPort); if (!homenetapp.serverEnabled) { enableUPnPCheckBox.setEnabled(false); serverPortLabel.setEnabled(false); serverPortTextField.setEnabled(false); } } /** 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() { SendPacketFrame = new javax.swing.JFrame(); sendPacketButton = new javax.swing.JButton(); jPanel1 = new javax.swing.JPanel(); toNodeLabel = new javax.swing.JLabel(); toNodeSpinner = new javax.swing.JSpinner(); toDeviceLabel = new javax.swing.JLabel(); toDeviceSpinner = new javax.swing.JSpinner(); fromNodeLabel = new javax.swing.JLabel(); fromNodeSpinner = new javax.swing.JSpinner(); fromDeviceLabel = new javax.swing.JLabel(); commandLabel = new javax.swing.JLabel(); commandComboBox = new javax.swing.JComboBox(); payloadLabel = new javax.swing.JLabel(); payloadTextField = new javax.swing.JTextField(); fromDeviceSpinner = new javax.swing.JSpinner(); jSplitPane1 = new javax.swing.JSplitPane(); SettingsDialog = new javax.swing.JDialog(); jTabbedPane1 = new javax.swing.JTabbedPane(); jPanel4 = new javax.swing.JPanel(); serverLabel = new javax.swing.JLabel(); apiKeyLabel = new javax.swing.JLabel(); serverTextField = new javax.swing.JTextField(); apiKeyTextField = new javax.swing.JTextField(); testButton = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); certPropertiesLabel = new javax.swing.JLabel(); jButton1 = new javax.swing.JButton(); jPanel5 = new javax.swing.JPanel(); serverPortLabel = new javax.swing.JLabel(); serverPortTextField = new javax.swing.JTextField(); enableUPnPCheckBox = new javax.swing.JCheckBox(); enableServerCheckBox = new javax.swing.JCheckBox(); jSeparator1 = new javax.swing.JSeparator(); jPanel6 = new javax.swing.JPanel(); checkForUpdatesCheckBox = new javax.swing.JCheckBox(); settingsSaveButton = new javax.swing.JButton(); filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); cardPanel = new javax.swing.JPanel(); mainPanel = new javax.swing.JPanel(); jPanel3 = new javax.swing.JPanel(); jSplitPane2 = new javax.swing.JSplitPane(); jPanel2 = new javax.swing.JPanel(); jLabel9 = new javax.swing.JLabel(); jScrollPane2 = new javax.swing.JScrollPane(); packetTextArea = new javax.swing.JTextArea(); jScrollPane3 = new javax.swing.JScrollPane(); packetListModel = new DefaultListModel(); jList1 = new javax.swing.JList(); autoUpdateToggleButton = new javax.swing.JToggleButton(); jScrollPane1 = new javax.swing.JScrollPane(); consoleTextPane = new javax.swing.JTextPane(); statusPanel = new javax.swing.JPanel(); jLabel7 = new javax.swing.JLabel(); localStatusLabel = new javax.swing.JLabel(); jLabel11 = new javax.swing.JLabel(); remoteStatusLabel = new javax.swing.JLabel(); localSendingLabel = new javax.swing.JLabel(); localReceivingLabel = new javax.swing.JLabel(); remoteSendingLabel = new javax.swing.JLabel(); remoteReceivingLabel = new javax.swing.JLabel(); topMenuBar = new javax.swing.JMenuBar(); menuFile = new javax.swing.JMenu(); jMenuItem3 = new javax.swing.JMenuItem(); menuTools = new javax.swing.JMenu(); menuToolsSendPacket = new javax.swing.JMenuItem(); menuToolsSettings = new javax.swing.JMenuItem(); menuSerialPorts = new javax.swing.JMenu(); menuHelp = new javax.swing.JMenu(); menuHelpOnline = new javax.swing.JMenuItem(); menuHelpAbout = new javax.swing.JMenuItem(); SendPacketFrame.setTitle("Send Packet"); SendPacketFrame.setMinimumSize(new java.awt.Dimension(380, 240)); SendPacketFrame.setResizable(false); SendPacketFrame.addWindowListener(new java.awt.event.WindowAdapter() { public void windowOpened(java.awt.event.WindowEvent evt) { SendPacketFrameWindowOpened(evt); } }); sendPacketButton.setText("Send"); sendPacketButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { sendPacketButtonActionPerformed(evt); } }); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Packet")); toNodeLabel.setText("To Node: "); toNodeSpinner.setModel(new javax.swing.SpinnerNumberModel(0, 0, 4095, 1)); toDeviceLabel.setText("To Device:"); toDeviceSpinner.setModel(new javax.swing.SpinnerNumberModel(0, 0, 15, 1)); fromNodeLabel.setText("From Node:"); fromNodeSpinner.setModel(new javax.swing.SpinnerNumberModel(0, 0, 4095, 1)); fromDeviceLabel.setText("From Device:"); commandLabel.setText("Command:"); commandComboBox.setModel(new javax.swing.DefaultComboBoxModel(homenetapp.getCommandKeys())); commandComboBox.setRenderer(new CommandRenderer()); payloadLabel.setText("Payload:"); fromDeviceSpinner.setModel(new javax.swing.SpinnerNumberModel(0, 0, 15, 1)); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup().addGap(10, 10, 10).addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addComponent(payloadLabel) .addComponent(commandLabel).addComponent(fromNodeLabel).addComponent(toNodeLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(commandComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel1Layout.createSequentialGroup().addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(toNodeSpinner).addComponent(fromNodeSpinner)) .addGap(18, 18, 18) .addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(fromDeviceLabel).addComponent(toDeviceLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(toDeviceSpinner, 0, 0, Short.MAX_VALUE).addComponent( fromDeviceSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 37, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 2, Short.MAX_VALUE)) .addComponent(payloadTextField)) .addContainerGap(17, Short.MAX_VALUE))); jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup().addContainerGap().addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(toNodeLabel) .addComponent(toNodeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(toDeviceLabel).addComponent(toDeviceSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(fromNodeLabel) .addComponent(fromNodeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(fromDeviceLabel).addComponent(fromDeviceSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(commandComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(commandLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(payloadTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(payloadLabel)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); javax.swing.GroupLayout SendPacketFrameLayout = new javax.swing.GroupLayout( SendPacketFrame.getContentPane()); SendPacketFrame.getContentPane().setLayout(SendPacketFrameLayout); SendPacketFrameLayout.setHorizontalGroup( SendPacketFrameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(SendPacketFrameLayout.createSequentialGroup().addContainerGap() .addGroup(SendPacketFrameLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(sendPacketButton).addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); SendPacketFrameLayout.setVerticalGroup(SendPacketFrameLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(SendPacketFrameLayout.createSequentialGroup().addContainerGap() .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(sendPacketButton) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); SettingsDialog.setTitle("HomeNet Settings"); SettingsDialog.setMinimumSize(new java.awt.Dimension(400, 300)); SettingsDialog.setResizable(false); SettingsDialog.addWindowListener(new java.awt.event.WindowAdapter() { public void windowOpened(java.awt.event.WindowEvent evt) { SettingsDialogWindowOpened(evt); } }); serverLabel.setText("Server:"); apiKeyLabel.setText("API Key:"); serverTextField.setEditable(false); serverTextField.setText("homenet.me"); apiKeyTextField.setText("reallylongstringofchars"); testButton.setText("Test"); testButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { testButtonActionPerformed(evt); } }); jLabel1.setText("SSL Cert:"); certPropertiesLabel.setText("Loading..."); jButton1.setText("Paste"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); jPanel4.setLayout(jPanel4Layout); jPanel4Layout.setHorizontalGroup(jPanel4Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup().addContainerGap().addGroup(jPanel4Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(apiKeyLabel).addComponent(serverLabel)) .addComponent(jLabel1)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup() .addComponent(certPropertiesLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 182, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(testButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButton1)) .addComponent(apiKeyTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 304, Short.MAX_VALUE) .addComponent(serverTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 304, Short.MAX_VALUE)) .addContainerGap())); jPanel4Layout.setVerticalGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup().addContainerGap() .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(serverTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(serverLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(apiKeyTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(apiKeyLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1).addComponent(certPropertiesLabel).addComponent(testButton) .addComponent(jButton1)) .addContainerGap(81, Short.MAX_VALUE))); jTabbedPane1.addTab("Client", jPanel4); serverPortLabel.setText("Port:"); serverPortTextField.setEditable(false); serverPortTextField.setText("2443"); enableUPnPCheckBox.setText("Enable UPnP Portforwarding"); enableServerCheckBox.setSelected(true); enableServerCheckBox.setText("Enable Local Server"); enableServerCheckBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { enableServerCheckBoxActionPerformed(evt); } }); javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); jPanel5.setLayout(jPanel5Layout); jPanel5Layout.setHorizontalGroup(jPanel5Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup().addContainerGap().addComponent(serverPortLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(serverPortTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(294, Short.MAX_VALUE)) .addGroup(jPanel5Layout.createSequentialGroup().addContainerGap().addComponent(enableServerCheckBox) .addContainerGap(250, Short.MAX_VALUE)) .addComponent(jSeparator1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 375, Short.MAX_VALUE) .addGroup(jPanel5Layout.createSequentialGroup().addContainerGap().addComponent(enableUPnPCheckBox) .addContainerGap(208, Short.MAX_VALUE))); jPanel5Layout.setVerticalGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup().addContainerGap().addComponent(enableServerCheckBox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 2, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(serverPortTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(serverPortLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(enableUPnPCheckBox).addContainerGap(77, Short.MAX_VALUE))); jTabbedPane1.addTab("Server", jPanel5); checkForUpdatesCheckBox.setText("Check For Updates"); javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6); jPanel6.setLayout(jPanel6Layout); jPanel6Layout .setHorizontalGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel6Layout.createSequentialGroup().addContainerGap() .addComponent(checkForUpdatesCheckBox).addContainerGap(252, Short.MAX_VALUE))); jPanel6Layout.setVerticalGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel6Layout.createSequentialGroup().addContainerGap() .addComponent(checkForUpdatesCheckBox).addContainerGap(137, Short.MAX_VALUE))); jTabbedPane1.addTab("Preferences", jPanel6); settingsSaveButton.setText("Save"); settingsSaveButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { settingsSaveButtonActionPerformed(evt); } }); javax.swing.GroupLayout SettingsDialogLayout = new javax.swing.GroupLayout(SettingsDialog.getContentPane()); SettingsDialog.getContentPane().setLayout(SettingsDialogLayout); SettingsDialogLayout.setHorizontalGroup(SettingsDialogLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(SettingsDialogLayout.createSequentialGroup().addContainerGap().addGroup( SettingsDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(settingsSaveButton, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)) .addContainerGap())); SettingsDialogLayout.setVerticalGroup(SettingsDialogLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, SettingsDialogLayout.createSequentialGroup() .addContainerGap() .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 195, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(settingsSaveButton).addContainerGap())); jTabbedPane1.getAccessibleContext().setAccessibleName("Server"); SettingsDialog.getAccessibleContext().setAccessibleName("HomeNet App Settings"); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("HomeNet.me Desktop App"); cardPanel.setLayout(new java.awt.CardLayout()); mainPanel.setLayout(new javax.swing.BoxLayout(mainPanel, javax.swing.BoxLayout.Y_AXIS)); jSplitPane2.setDividerLocation(200); jSplitPane2.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); jLabel9.setText("Packets Received:"); packetTextArea.setColumns(20); packetTextArea.setFont(new java.awt.Font("Courier New", 0, 12)); packetTextArea.setRows(5); jScrollPane2.setViewportView(packetTextArea); jList1.setModel(packetListModel); jList1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); jList1.setCellRenderer(new PacketListRenderer()); jList1.addListSelectionListener(new javax.swing.event.ListSelectionListener() { public void valueChanged(javax.swing.event.ListSelectionEvent evt) { jList1ValueChanged(evt); } }); jScrollPane3.setViewportView(jList1); autoUpdateToggleButton.setSelected(true); autoUpdateToggleButton.setText("Auto Update"); autoUpdateToggleButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { autoUpdateToggleButtonActionPerformed(evt); } }); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup(jPanel2Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup().addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel9).addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(autoUpdateToggleButton).addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 350, Short.MAX_VALUE)) .addContainerGap())); jPanel2Layout.setVerticalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel9).addComponent(autoUpdateToggleButton)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 148, Short.MAX_VALUE) .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 148, Short.MAX_VALUE)) .addContainerGap())); jSplitPane2.setTopComponent(jPanel2); consoleTextPane.setBackground(new java.awt.Color(0, 0, 0)); consoleTextPane.setEditable(false); consoleTextPane.setFont(new java.awt.Font("Consolas", 0, 10)); consoleTextPane.setForeground(new java.awt.Color(255, 255, 255)); jScrollPane1.setViewportView(consoleTextPane); jSplitPane2.setRightComponent(jScrollPane1); javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup(jPanel3Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 530, Short.MAX_VALUE) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jSplitPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 530, Short.MAX_VALUE))); jPanel3Layout.setVerticalGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 320, Short.MAX_VALUE) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jSplitPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 320, Short.MAX_VALUE))); mainPanel.add(jPanel3); statusPanel.setBackground(new java.awt.Color(204, 204, 204)); statusPanel.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); jLabel7.setText("Local:"); localStatusLabel.setText("Not Connected"); jLabel11.setText("Remote:"); remoteStatusLabel.setText("Not Connected"); localSendingLabel.setFont(new java.awt.Font("Courier New", 0, 11)); localSendingLabel.setText("( )"); localReceivingLabel.setFont(new java.awt.Font("Courier New", 0, 11)); localReceivingLabel.setText("( )"); remoteSendingLabel.setFont(new java.awt.Font("Courier New", 0, 11)); remoteSendingLabel.setText("( )"); remoteReceivingLabel.setFont(new java.awt.Font("Courier New", 0, 11)); remoteReceivingLabel.setText("( )"); javax.swing.GroupLayout statusPanelLayout = new javax.swing.GroupLayout(statusPanel); statusPanel.setLayout(statusPanelLayout); statusPanelLayout.setHorizontalGroup(statusPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(statusPanelLayout.createSequentialGroup().addContainerGap().addComponent(jLabel7) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(localStatusLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(localSendingLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(localReceivingLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 177, Short.MAX_VALUE) .addComponent(jLabel11).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(remoteStatusLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(remoteSendingLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(remoteReceivingLabel).addContainerGap())); statusPanelLayout .setVerticalGroup(statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel7, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(localStatusLabel).addComponent(localSendingLabel) .addComponent(localReceivingLabel).addComponent(remoteSendingLabel) .addComponent(remoteReceivingLabel).addComponent(remoteStatusLabel) .addComponent(jLabel11))); mainPanel.add(statusPanel); cardPanel.add(mainPanel, "card2"); topMenuBar.setVisible(false); menuFile.setMnemonic('f'); menuFile.setText("File"); jMenuItem3.setMnemonic('e'); jMenuItem3.setText("Exit"); jMenuItem3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem3ActionPerformed(evt); } }); menuFile.add(jMenuItem3); topMenuBar.add(menuFile); menuTools.setMnemonic('t'); menuTools.setText("Tools"); menuToolsSendPacket.setMnemonic('p'); menuToolsSendPacket.setText("Send Packet"); menuToolsSendPacket.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { menuToolsSendPacketActionPerformed(evt); } }); menuTools.add(menuToolsSendPacket); menuToolsSettings.setMnemonic('s'); menuToolsSettings.setText("Settings"); menuToolsSettings.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { menuToolsSettingsActionPerformed(evt); } }); menuTools.add(menuToolsSettings); menuSerialPorts.setMnemonic('e'); menuSerialPorts.setText("Select Ports"); menuSerialPorts.addMenuListener(new javax.swing.event.MenuListener() { public void menuCanceled(javax.swing.event.MenuEvent evt) { } public void menuDeselected(javax.swing.event.MenuEvent evt) { } public void menuSelected(javax.swing.event.MenuEvent evt) { menuSerialPortsMenuSelected(evt); } }); menuSerialPorts.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { menuSerialPortsActionPerformed(evt); } }); menuTools.add(menuSerialPorts); topMenuBar.add(menuTools); menuHelp.setMnemonic('h'); menuHelp.setText("Help"); menuHelpOnline.setText("Online Help"); menuHelpOnline.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { menuHelpOnlineActionPerformed(evt); } }); menuHelp.add(menuHelpOnline); menuHelpAbout.setText("About"); menuHelpAbout.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { menuHelpAboutActionPerformed(evt); } }); menuHelp.add(menuHelpAbout); topMenuBar.add(menuHelp); setJMenuBar(topMenuBar); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(cardPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 530, Short.MAX_VALUE)); layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(cardPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 340, Short.MAX_VALUE)); pack(); }// </editor-fold>//GEN-END:initComponents private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem3ActionPerformed exit(); }//GEN-LAST:event_jMenuItem3ActionPerformed private void menuHelpAboutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuHelpAboutActionPerformed // new jDialog1(); // AboutDialog.setVisible(true); JOptionPane.showMessageDialog(null, "<html>Developed by Matthew Doll<br>Licenced Under GPLv3<br>For more info visit HomeNet.me</html>", "About", JOptionPane.INFORMATION_MESSAGE); }//GEN-LAST:event_menuHelpAboutActionPerformed private void menuToolsSendPacketActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuToolsSendPacketActionPerformed SendPacketFrame.setVisible(true); }//GEN-LAST:event_menuToolsSendPacketActionPerformed private void sendPacketButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sendPacketButtonActionPerformed packetToNode = (Integer) toNodeSpinner.getValue(); packetToDevice = (Integer) toDeviceSpinner.getValue(); packetFromNode = (Integer) fromNodeSpinner.getValue(); packetFromDevice = (Integer) fromDeviceSpinner.getValue(); packetCommand = commandComboBox.getSelectedIndex(); packetPayload = payloadTextField.getText().trim(); //prepare payload //lookup command, if it it's not in the table assume bytes String type = "BYTE"; int item = (Integer) commandComboBox.getSelectedItem(); if (homenetapp.commands.containsKey(item) == true) { // String[] c = commandMap.get(int(packet[4])); // println(c); type = homenetapp.commands.get(item)[2]; type.toUpperCase(); } System.out.println("Send Packet Type: " + type); //return; homenet.Payload payload = null; if (packetPayload.length() > 0) { if (type.equals("STRING")) { payload = new homenet.Payload(packetPayload); } else { String[] p = packetPayload.split(","); if (type.equals("BYTE")) { byte[] bytes = new byte[p.length]; for (int i = 0; i < p.length; i++) { bytes[i] = (byte) (Integer.parseInt(p[i]) & 0xff); } payload = new homenet.Payload(bytes); } else if (type.equals("INT")) { int[] ints = new int[p.length]; for (int i = 0; i < p.length; i++) { ints[i] = Integer.parseInt(p[i]); } payload = new homenet.Payload(ints); } else if (type.equals("FLOAT")) { float[] floats = new float[p.length]; for (int i = 0; i < p.length; i++) { floats[i] = Float.parseFloat(p[i]); } //payload = new homenet.Payload(floats); } else if (type.equals("LONG")) { int[] ints = new int[p.length]; for (int i = 0; i < p.length; i++) { ints[i] = Integer.parseInt(p[i]); } payload = new homenet.Payload(ints); } else if (type.equals("BINARY")) { byte[] bytes = new byte[p.length]; for (int i = 0; i < p.length; i++) { bytes[i] = (byte) (Integer.parseInt(p[i], 2) & 0xff); } payload = new homenet.Payload(bytes); } } } else { payload = new homenet.Payload(); } homenet.Packet p = homenetapp.homenet.addUdpPacket(packetFromDevice, packetToNode, packetToDevice, (Integer) commandComboBox.getSelectedItem(), new homenet.Payload(packetPayload)); p.setFromNode(packetFromNode); p.fromPort = "xmlrpc"; }//GEN-LAST:event_sendPacketButtonActionPerformed private void menuHelpOnlineActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuHelpOnlineActionPerformed if (!java.awt.Desktop.isDesktopSupported()) { System.err.println("Desktop is not supported (fatal)"); // System.exit(1); } java.awt.Desktop desktop = java.awt.Desktop.getDesktop(); if (!desktop.isSupported(java.awt.Desktop.Action.BROWSE)) { System.err.println("Desktop doesn't support the browse action (fatal)"); // System.exit(1); } try { java.net.URI uri = new java.net.URI("http://homenet.me"); desktop.browse(uri); } catch (Exception e) { System.err.println(e.getMessage()); } }//GEN-LAST:event_menuHelpOnlineActionPerformed private void menuSerialPortsMenuSelected(javax.swing.event.MenuEvent evt) {//GEN-FIRST:event_menuSerialPortsMenuSelected // System.out.println("Get Ports"); // for (String s : homenetapp.serialmanager.portList) { // System.out.println("Port: " + s); // } //javax.swing.JCheckBoxMenuItem cbMenuItem = new javax.swing.JCheckBoxMenuItem("A check box menu item"); //cbMenuItem.setMnemonic(KeyEvent.VK_C); //menuSerialPorts.add(cbMenuItem); //decide which ones to add //decide which ones to remove }//GEN-LAST:event_menuSerialPortsMenuSelected private void menuToolsSettingsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuToolsSettingsActionPerformed java.awt.EventQueue.invokeLater(new Runnable() { public void run() { checkClientCert(); } }); SettingsDialog.setVisible(true); }//GEN-LAST:event_menuToolsSettingsActionPerformed private void settingsSaveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_settingsSaveButtonActionPerformed //check to see if client settings changed if (!homenetapp.clientServer.equals(serverTextField.getText()) || !homenetapp.clientApiKey.equals(apiKeyTextField.getText())) { //client changed homenetapp.stopClient(); homenetapp.clientServer = serverTextField.getText(); homenetapp.clientApiKey = apiKeyTextField.getText(); try { homenetapp.startClient(); } catch (Exception e) { System.out.println("Error " + e.getMessage()); javax.swing.JOptionPane.showMessageDialog(null, "Error: " + e.getMessage(), "Error", javax.swing.JOptionPane.ERROR_MESSAGE); return; } } boolean portChanged = (homenetapp.serverPort != Integer.parseInt(serverPortTextField.getText())); boolean serverChanged = (homenetapp.serverEnabled != enableServerCheckBox.isSelected()); boolean upnpChanged = (homenetapp.serverUpnpEnabled != enableUPnPCheckBox.isSelected()); homenetapp.serverEnabled = enableServerCheckBox.isSelected(); homenetapp.serverUpnpEnabled = enableUPnPCheckBox.isSelected(); homenetapp.serverPort = Integer.parseInt(serverPortTextField.getText()); //do we need to stop the server if (serverChanged || portChanged) { homenetapp.stopServer(); } //do we need to unmap the upnp port- port changed or was upnp turned off if ((upnpChanged && (homenetapp.serverUpnpEnabled == false)) || (portChanged && homenetapp.serverEnabled == true) || (serverChanged && homenetapp.serverEnabled == false)) { homenetapp.stopUpnp(); } //do we need to restart the server if ((serverChanged || portChanged) && homenetapp.serverEnabled) { //server changed try { homenetapp.startServer(); } catch (Exception e) { System.out.println("Error " + e.getMessage()); javax.swing.JOptionPane.showMessageDialog(null, "Error: " + e.getMessage(), "Error", javax.swing.JOptionPane.ERROR_MESSAGE); return; } } //do we need to remap the port via upnp if (((serverChanged && (homenetapp.serverEnabled == true)) || portChanged || upnpChanged) && (homenetapp.serverUpnpEnabled == true)) { homenetapp.startUpnp(); } saveConfig(); SettingsDialog.setVisible(false); }//GEN-LAST:event_settingsSaveButtonActionPerformed private void enableServerCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_enableServerCheckBoxActionPerformed javax.swing.JCheckBox checkbox = (javax.swing.JCheckBox) evt.getSource(); if (checkbox.isSelected()) { enableUPnPCheckBox.setEnabled(true); serverPortLabel.setEnabled(true); serverPortTextField.setEnabled(true); System.out.println("Selected"); } else { enableUPnPCheckBox.setEnabled(false); serverPortLabel.setEnabled(false); serverPortTextField.setEnabled(false); System.out.println("Not Selected"); } }//GEN-LAST:event_enableServerCheckBoxActionPerformed private void testButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_testButtonActionPerformed SwingUtilities.invokeLater(new Runnable() { public void run() { try { // XmlrpcClient xmlrpcClient = new XmlrpcClient(serverTextField.getText(), apiKeyTextField.getText()); boolean reply = (Boolean) xmlrpcClient.execute("homenet.validate.apikey", apiKeyTextField.getText()); if (reply == true) { JOptionPane.showMessageDialog(null, "Successfuly connected to " + serverTextField.getText(), "Success", JOptionPane.INFORMATION_MESSAGE); return; } else { JOptionPane.showMessageDialog(null, "Invalid Api Key", "Error", JOptionPane.ERROR_MESSAGE); return; } // KeyStore mykeystore = KeyStore.getInstance("JKS"); // // java.security.KeyFactory rSAKeyFactory = java.security.KeyFactory.getInstance("RSA"); // // java.security.PublicKey pk = xc.getPublicKey();; // // java.security.spec.PKCS8EncodedKeySpec keySpec = new // java.security.spec.PKCS8EncodedKeySpec(pk.getEncoded()); // java.security.KeyFactory keyFactory = null; // keyFactory = keyFactory.getInstance("RSA"); // java.security.PrivateKey privateKey = keyFactory.generatePrivate(keySpec); // //// mykeystore.setEntry("HomeNet", //// new KeyStore.PrivateKeyEntry(privateKey, certs), //// new KeyStore.PasswordProtection("keypassword".toCharArray())); // // FileOutputStream sigfos = new FileOutputStream("test2.txt"); // // // mykeystore.setKeyEntry("HomeNet", privateKey.getEncoded(), certs); // mykeystore.store(sigfos, "mysecret".toCharArray()); // sigfos.close(); //if(URLConnection.class.getName() == ) //conn. } catch (Exception e) { JOptionPane.showMessageDialog(null, "Error: " + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); // certPropertiesLabel.setText("Invalid Server"); // System.out.println(e.getMessage()); e.printStackTrace(); } } }); // //// Sending information through HTTPS: POST //OutputStream ostream = conn.getOutputStream(); //ostream.write(....); //...... //ostream.close(); // }//GEN-LAST:event_testButtonActionPerformed private void menuSerialPortsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuSerialPortsActionPerformed // Update Serial Port List }//GEN-LAST:event_menuSerialPortsActionPerformed private void autoUpdateToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_autoUpdateToggleButtonActionPerformed //if selected javax.swing.JToggleButton button = (javax.swing.JToggleButton) evt.getSource(); if (button.isSelected()) { System.out.println("Button Toggled"); } else { System.out.println("Button UnToggled"); } //else }//GEN-LAST:event_autoUpdateToggleButtonActionPerformed private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_jList1ValueChanged int index = evt.getFirstIndex(); JList j = (JList) evt.getSource(); homenet.Packet p = (homenet.Packet) j.getSelectedValue(); //homenet.Packet p = (homenet.Packet)packetListModel.getElementAt(index); displayPacket(p); }//GEN-LAST:event_jList1ValueChanged private void SettingsDialogWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_SettingsDialogWindowOpened System.out.println("Settings Window Opened"); loadSettings(); }//GEN-LAST:event_SettingsDialogWindowOpened private void SendPacketFrameWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_SendPacketFrameWindowOpened toNodeSpinner.setValue(packetToNode); toDeviceSpinner.setValue(packetToDevice); fromNodeSpinner.setValue(packetFromNode); fromDeviceSpinner.setValue(packetFromDevice); commandComboBox.setSelectedIndex(packetCommand); payloadTextField.setText(packetPayload); }//GEN-LAST:event_SendPacketFrameWindowOpened private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed apiKeyTextField.setText(""); apiKeyTextField.paste(); }//GEN-LAST:event_jButton1ActionPerformed class CommandRenderer extends BasicComboBoxRenderer { public java.awt.Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); Integer item = (Integer) value; if (value != null) { // Integer item = (Integer) value; setText(homenetapp.commands.get(item)[1]); return this; } if (index == -1) { // setText("Select Command"); // Item item = (Item) value; // setText("index -1");// + item.getId() // System.out.println(homenetapp.commands.get(item)[1]); } return this; } } class NodeVerifier extends javax.swing.InputVerifier { public boolean verify(javax.swing.JComponent input) { javax.swing.JTextField tf = (javax.swing.JTextField) input; int value = Integer.parseInt(tf.getText()); if (value >= 0 && value < 16) { return true; } return false; } } private void updateTextPane(final String text) { updateTextPane(text, null); } private void updateTextPane(final String text, final javax.swing.text.Style color) { SwingUtilities.invokeLater(new Runnable() { public void run() { javax.swing.text.StyledDocument doc = consoleTextPane.getStyledDocument(); try { // consoleTextPane.se if (color != null) { doc.setLogicalStyle(doc.getLength(), color); } doc.insertString(doc.getLength(), text, null); if (doc.getLength() > 10000) { doc.remove(0, text.length()); } } catch (javax.swing.text.BadLocationException e) { throw new RuntimeException(e); } consoleTextPane.setCaretPosition(doc.getLength() - 1); } }); } private void redirectSystemStreams() { javax.swing.text.Style style = consoleTextPane.addStyle("Red", null); javax.swing.text.StyleConstants.setForeground(style, java.awt.Color.red); final javax.swing.text.Style redStyle = style; style = consoleTextPane.addStyle("White", null); javax.swing.text.StyleConstants.setForeground(style, java.awt.Color.white); final javax.swing.text.Style whiteStyle = style; OutputStream out = new OutputStream() { @Override public void write(final int b) throws IOException { updateTextPane(String.valueOf((char) b), whiteStyle); } @Override public void write(byte[] b, int off, int len) throws IOException { updateTextPane(new String(b, off, len), whiteStyle); } @Override public void write(byte[] b) throws IOException { write(b, 0, b.length); } }; OutputStream err = new OutputStream() { @Override public void write(final int b) throws IOException { updateTextPane(String.valueOf((char) b), redStyle); } @Override public void write(byte[] b, int off, int len) throws IOException { updateTextPane(new String(b, off, len), redStyle); } @Override public void write(byte[] b) throws IOException { write(b, 0, b.length); } }; System.setOut(new PrintStream(out, true)); System.setErr(new PrintStream(err, true)); } public void addPacketToList(homenet.Packet packet) { System.out.println("Adding Packet to GUI"); // packetList.addLast(packet); packetListModel.addElement(packet); if (packetListModel.size() > 10) { // packetList.removeFirst(); packetListModel.remove(0); } // jList1.validate(); if (autoUpdateToggleButton.isSelected()) { jList1.setSelectedValue(packet, true); } // jScrollPane3. } // class PacketListModel extends DefaultListModel { // // String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" }; // public int getSize() { return packetList.size(); } // public Object getElementAt(int i) { return packetList.get(i); } // } class PacketListRenderer extends DefaultListCellRenderer { public java.awt.Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); // System.out.println("PacketListRenderer"); if (value != null) { homenet.Packet p = (homenet.Packet) value; setText(p.getFromPort() + ">" + p.getToPort() + " " + p.getFromNode() + ":" + p.getFromDevice() + ">" + p.getToNode() + ":" + p.getToDevice() + " " + p.getId()); return this; } if (index == -1) { // setText("Select Command"); // Item item = (Item) value; // setText("index -1");// + item.getId() // System.out.println(homenetapp.commands.get(item)[1]); } return this; } } private void displayPacket(homenet.Packet packet) { String message = ""; String message2 = ""; for (int i = 0; i < packet.getPayloadLength(); i++) { message += (int) packet.getPayloadAt(i); message += ","; message2 += (char) packet.getPayloadAt(i); } //lookup command; String c = "" + packet.getCommand(); if (homenetapp.commands.containsKey(packet.getCommand()) == true) { // String[] c = commandMap.get(int(packet[4])); // println(c); c = homenetapp.commands.get(packet.getCommand())[1]; } packetTextArea.setText(" Received: " + packet.getTimestamp() + "\n" + " fromPort: " + packet.getFromPort() + "\n" + " toPort: " + packet.getToPort() + "\n" + " status: " + packet.getStatus() + "\n" + " length: " + packet.getLength() + "\n" + " settings: " + packet.getSettings() + "\n" + " type: " + packet.getType() + "\n" + " fromNode: " + packet.getFromNode() + "\n" + "fromDevice: " + packet.getFromDevice() + "\n" + " toNode: " + packet.getToNode() + "\n" + " toDevice: " + packet.getToDevice() + "\n" + //" ttl: " + packet.getTtl() + "\n" + " id: " + packet.getId() + "\n" + " command: " + c + "\n" + " payload: " + message + "\n" + " payload: " + message2 + "\n" + " checksum: " + packet.getChecksum()); } private void checkClientCert() { try { URL url = new URL("https://" + homenetapp.clientServer + "/"); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.connect(); Certificate[] certs = conn.getServerCertificates(); //System.out.println("Cert Chain Length: "+certs.length); Certificate c = certs[0]; X509Certificate xc = (X509Certificate) c; String[] from = homenetapp.splitTokens(xc.getIssuerX500Principal().getName(), "=, "); String[] to = homenetapp.splitTokens(xc.getSubjectX500Principal().getName(), "=, "); certPropertiesLabel.setText("<html>Issued by: " + from[1] + "<br>For: " + to[1] + "<br>Expires: " + xc.getNotAfter() + "</html>"); System.out.println("Cert: " + c.getType()); System.out.println("Not After: " + xc.getNotAfter()); System.out.println("Subject DN: " + xc.getSubjectX500Principal()); System.out.println("Issuer DN: " + xc.getIssuerX500Principal()); System.out.println("getSigAlgName: " + xc.getSigAlgName()); } catch (Exception e) { certPropertiesLabel.setText("Failed to load certficate"); } } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new HomeNetAppGui().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JFrame SendPacketFrame; private javax.swing.JDialog SettingsDialog; private javax.swing.JLabel apiKeyLabel; private javax.swing.JTextField apiKeyTextField; private javax.swing.JToggleButton autoUpdateToggleButton; private javax.swing.JPanel cardPanel; private javax.swing.JLabel certPropertiesLabel; private javax.swing.JCheckBox checkForUpdatesCheckBox; private javax.swing.JComboBox commandComboBox; private javax.swing.JLabel commandLabel; private javax.swing.JTextPane consoleTextPane; private javax.swing.JCheckBox enableServerCheckBox; private javax.swing.JCheckBox enableUPnPCheckBox; private javax.swing.Box.Filler filler1; private javax.swing.JLabel fromDeviceLabel; private javax.swing.JSpinner fromDeviceSpinner; private javax.swing.JLabel fromNodeLabel; private javax.swing.JSpinner fromNodeSpinner; private javax.swing.JButton jButton1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel9; private javax.swing.JList jList1; private javax.swing.JMenuItem jMenuItem3; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JPanel jPanel5; private javax.swing.JPanel jPanel6; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JSeparator jSeparator1; private javax.swing.JSplitPane jSplitPane1; private javax.swing.JSplitPane jSplitPane2; private javax.swing.JTabbedPane jTabbedPane1; private javax.swing.JLabel localReceivingLabel; private javax.swing.JLabel localSendingLabel; private javax.swing.JLabel localStatusLabel; private javax.swing.JPanel mainPanel; private javax.swing.JMenu menuFile; private javax.swing.JMenu menuHelp; private javax.swing.JMenuItem menuHelpAbout; private javax.swing.JMenuItem menuHelpOnline; private javax.swing.JMenu menuSerialPorts; private javax.swing.JMenu menuTools; private javax.swing.JMenuItem menuToolsSendPacket; private javax.swing.JMenuItem menuToolsSettings; private javax.swing.JTextArea packetTextArea; private javax.swing.JLabel payloadLabel; private javax.swing.JTextField payloadTextField; private javax.swing.JLabel remoteReceivingLabel; private javax.swing.JLabel remoteSendingLabel; private javax.swing.JLabel remoteStatusLabel; private javax.swing.JButton sendPacketButton; private javax.swing.JLabel serverLabel; private javax.swing.JLabel serverPortLabel; private javax.swing.JTextField serverPortTextField; private javax.swing.JTextField serverTextField; private javax.swing.JButton settingsSaveButton; private javax.swing.JPanel statusPanel; private javax.swing.JButton testButton; private javax.swing.JLabel toDeviceLabel; private javax.swing.JSpinner toDeviceSpinner; private javax.swing.JLabel toNodeLabel; private javax.swing.JSpinner toNodeSpinner; private javax.swing.JMenuBar topMenuBar; // End of variables declaration//GEN-END:variables //hash map ports private DefaultListModel packetListModel; //selected ports }