Java/Apache Common/Net

Материал из Java эксперт
Перейти к: навигация, поиск

Exercises the various protocols available in the Commons Net Package

   <source lang="java">

/*

* ProtocolRunner.java
*
* Created on 22 December 2003, 12:57
*/

// Import Java Packages import java.awt.Point; import java.awt.Frame; import java.awt.Toolkit; import java.awt.Dimension; import java.awt.ruponent; import java.io.IOException; import javax.swing.JLabel; import javax.swing.JDialog; import javax.swing.UIManager; import javax.swing.JComboBox; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.JOptionPane; import java.net.SocketException; import java.io.File; import java.util.Date; import java.util.Calendar; import javax.swing.JDialog; import java.io.PrintWriter; import java.net.InetAddress; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.GregorianCalendar; // Import NET Packages import org.apache.rumons.net.*; import org.apache.rumons.net.io.*; import org.apache.rumons.net.ftp.*; import org.apache.rumons.net.nntp.*; import org.apache.rumons.net.pop3.*; import org.apache.rumons.net.smtp.*; import org.apache.rumons.net.tftp.*; /**

* ProtocolRunner class exercises the various protocols available in the
* Commons Net Package
* @author  Vikram Goyal
*/

public class ProtocolRunner extends javax.swing.JFrame {

   /** Creates new form ProtocolRunner */
   public ProtocolRunner() { 
       // set the native look and feel
       try{
           UIManager.setLookAndFeel(
               UIManager.getSystemLookAndFeelClassName());
       }catch(Exception e) {}
       
       initComponents();
       // size it so that it appears full screen
       Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
       this.setSize(screen.width, screen.height);
       this.pack();
       this.setExtendedState(Frame.MAXIMIZED_BOTH);
   }
   
   /** 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.
    */
   private void initComponents() {//GEN-BEGIN:initComponents
       ftpPanel = new javax.swing.JPanel();
       jRadioButton4 = new javax.swing.JRadioButton();
       jRadioButton8 = new javax.swing.JRadioButton();
       jRadioButton1 = new javax.swing.JRadioButton();
       jRadioButton3 = new javax.swing.JRadioButton();
       jRadioButton5 = new javax.swing.JRadioButton();
       jRadioButton6 = new javax.swing.JRadioButton();
       jRadioButton7 = new javax.swing.JRadioButton();
       nntpPanel = new javax.swing.JPanel();
       jRadioButton10 = new javax.swing.JRadioButton();
       jRadioButton15 = new javax.swing.JRadioButton();
       jRadioButton2 = new javax.swing.JRadioButton();
       jRadioButton11 = new javax.swing.JRadioButton();
       jRadioButton12 = new javax.swing.JRadioButton();
       jRadioButton13 = new javax.swing.JRadioButton();
       jRadioButton14 = new javax.swing.JRadioButton();
       smtpPanel = new javax.swing.JPanel();
       jRadioButton17 = new javax.swing.JRadioButton();
       jRadioButton18 = new javax.swing.JRadioButton();
       jRadioButton16 = new javax.swing.JRadioButton();
       pop3Panel = new javax.swing.JPanel();
       jRadioButton19 = new javax.swing.JRadioButton();
       jRadioButton20 = new javax.swing.JRadioButton();
       jRadioButton21 = new javax.swing.JRadioButton();
       jRadioButton22 = new javax.swing.JRadioButton();
       jRadioButton23 = new javax.swing.JRadioButton();
       jRadioButton24 = new javax.swing.JRadioButton();
       jRadioButton9 = new javax.swing.JRadioButton();
       ftpButtonGroup = new javax.swing.ButtonGroup();
       nntpButtonGroup = new javax.swing.ButtonGroup();
       smtpButtonGroup = new javax.swing.ButtonGroup();
       pop3ButtonGroup = new javax.swing.ButtonGroup();
       tftpPanel = new javax.swing.JPanel();
       jRadioButton25 = new javax.swing.JRadioButton();
       jRadioButton26 = new javax.swing.JRadioButton();
       tftpPanelButtonGroup = new javax.swing.ButtonGroup();
       loginDialog = new javax.swing.JDialog();
       jLabel9 = new javax.swing.JLabel();
       jPanel13 = new javax.swing.JPanel();
       jLabel10 = new javax.swing.JLabel();
       loginUsername = new javax.swing.JTextField();
       jLabel11 = new javax.swing.JLabel();
       loginPassword = new javax.swing.JPasswordField();
       jPanel14 = new javax.swing.JPanel();
       jButton1 = new javax.swing.JButton();
       jButton2 = new javax.swing.JButton();
       singleValueDialog = new javax.swing.JDialog();
       jLabel12 = new javax.swing.JLabel();
       jPanel15 = new javax.swing.JPanel();
       singleValueLabel = new javax.swing.JLabel();
       singleValueField = new javax.swing.JTextField();
       jPanel16 = new javax.swing.JPanel();
       jButton3 = new javax.swing.JButton();
       jButton4 = new javax.swing.JButton();
       multipleValueDialog = new javax.swing.JDialog();
       jLabel13 = new javax.swing.JLabel();
       jPanel17 = new javax.swing.JPanel();
       jButton5 = new javax.swing.JButton();
       jButton6 = new javax.swing.JButton();
       jPanel18 = new javax.swing.JPanel();
       jLabel16 = new javax.swing.JLabel();
       jScrollPane3 = new javax.swing.JScrollPane();
       messageArea = new javax.swing.JTextArea();
       jPanel19 = new javax.swing.JPanel();
       jLabel14 = new javax.swing.JLabel();
       fromField = new javax.swing.JTextField();
       jLabel15 = new javax.swing.JLabel();
       subjectField = new javax.swing.JTextField();
       variableLabel = new javax.swing.JLabel();
       variableField = new javax.swing.JTextField();
       jTabbedPane1 = new javax.swing.JTabbedPane();
       jPanel1 = new javax.swing.JPanel();
       jPanel4 = new javax.swing.JPanel();
       jScrollPane1 = new javax.swing.JScrollPane();
       tcpServerResponse = new javax.swing.JTextArea();
       jPanel7 = new javax.swing.JPanel();
       presetPanel = new javax.swing.JPanel();
       defaultPanel = new javax.swing.JPanel();
       jLabel5 = new javax.swing.JLabel();
       jPanel9 = new javax.swing.JPanel();
       jLabel4 = new javax.swing.JLabel();
       commandBox = new javax.swing.JTextField();
       jPanel5 = new javax.swing.JPanel();
       jPanel6 = new javax.swing.JPanel();
       jLabel3 = new javax.swing.JLabel();
       tcpSelectionBox = new javax.swing.JComboBox();
       jPanel3 = new javax.swing.JPanel();
       jLabel1 = new javax.swing.JLabel();
       serverNameField = new javax.swing.JTextField();
       jLabel2 = new javax.swing.JLabel();
       portNumberField = new javax.swing.JTextField();
       tcpConnectButton = new javax.swing.JButton();
       jPanel2 = new javax.swing.JPanel();
       jPanel10 = new javax.swing.JPanel();
       jPanel8 = new javax.swing.JPanel();
       jLabel6 = new javax.swing.JLabel();
       udpSelectionBox = new javax.swing.JComboBox();
       jPanel12 = new javax.swing.JPanel();
       jLabel7 = new javax.swing.JLabel();
       udpRemoteServerField = new javax.swing.JTextField();
       jPanel11 = new javax.swing.JPanel();
       udpCommandPanel = new javax.swing.JPanel();
       udpStartButton = new javax.swing.JButton();
       jScrollPane2 = new javax.swing.JScrollPane();
       udpServerResponse = new javax.swing.JTextArea();
       ftpPanel.setLayout(new java.awt.GridLayout(3, 3));
       jRadioButton4.setText("Login");
       ftpButtonGroup.add(jRadioButton4);
       jRadioButton4.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton4ActionPerformed(evt);
           }
       });
       ftpPanel.add(jRadioButton4);
       jRadioButton8.setText("Logout");
       ftpButtonGroup.add(jRadioButton8);
       jRadioButton8.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton8ActionPerformed(evt);
           }
       });
       ftpPanel.add(jRadioButton8);
       jRadioButton1.setText("Change Working Directory");
       ftpButtonGroup.add(jRadioButton1);
       jRadioButton1.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton1ActionPerformed(evt);
           }
       });
       ftpPanel.add(jRadioButton1);
       jRadioButton3.setText("List Files");
       ftpButtonGroup.add(jRadioButton3);
       jRadioButton3.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton3ActionPerformed(evt);
           }
       });
       ftpPanel.add(jRadioButton3);
       jRadioButton5.setText("Make Directory");
       ftpButtonGroup.add(jRadioButton5);
       jRadioButton5.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton5ActionPerformed(evt);
           }
       });
       ftpPanel.add(jRadioButton5);
       jRadioButton6.setText("Upload File");
       ftpButtonGroup.add(jRadioButton6);
       jRadioButton6.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton6ActionPerformed(evt);
           }
       });
       ftpPanel.add(jRadioButton6);
       jRadioButton7.setText("Download File");
       ftpButtonGroup.add(jRadioButton7);
       jRadioButton7.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton7ActionPerformed(evt);
           }
       });
       ftpPanel.add(jRadioButton7);
       nntpPanel.setLayout(new java.awt.GridLayout(3, 3));
       jRadioButton10.setText("Login");
       nntpButtonGroup.add(jRadioButton10);
       jRadioButton10.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton10ActionPerformed(evt);
           }
       });
       nntpPanel.add(jRadioButton10);
       jRadioButton15.setText("Logout");
       nntpButtonGroup.add(jRadioButton15);
       jRadioButton15.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton15ActionPerformed(evt);
           }
       });
       nntpPanel.add(jRadioButton15);
       jRadioButton2.setText("List All NewsGroups");
       nntpButtonGroup.add(jRadioButton2);
       jRadioButton2.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton2ActionPerformed(evt);
           }
       });
       nntpPanel.add(jRadioButton2);
       jRadioButton11.setText("List New NewsGroups");
       nntpButtonGroup.add(jRadioButton11);
       jRadioButton11.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton11ActionPerformed(evt);
           }
       });
       nntpPanel.add(jRadioButton11);
       jRadioButton12.setText("List New News");
       nntpButtonGroup.add(jRadioButton12);
       jRadioButton12.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton12ActionPerformed(evt);
           }
       });
       nntpPanel.add(jRadioButton12);
       jRadioButton13.setText("Post Article");
       nntpButtonGroup.add(jRadioButton13);
       jRadioButton13.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton13ActionPerformed(evt);
           }
       });
       nntpPanel.add(jRadioButton13);
       jRadioButton14.setText("Get Article");
       nntpButtonGroup.add(jRadioButton14);
       jRadioButton14.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton14ActionPerformed(evt);
           }
       });
       nntpPanel.add(jRadioButton14);
       smtpPanel.setLayout(new java.awt.GridLayout(1, 1));
       jRadioButton17.setText("Login");
       smtpButtonGroup.add(jRadioButton17);
       jRadioButton17.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton17ActionPerformed(evt);
           }
       });
       smtpPanel.add(jRadioButton17);
       jRadioButton18.setText("Logout");
       smtpButtonGroup.add(jRadioButton18);
       jRadioButton18.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton18ActionPerformed(evt);
           }
       });
       smtpPanel.add(jRadioButton18);
       jRadioButton16.setText("Send Simple Message");
       smtpButtonGroup.add(jRadioButton16);
       jRadioButton16.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton16ActionPerformed(evt);
           }
       });
       smtpPanel.add(jRadioButton16);
       pop3Panel.setLayout(new java.awt.GridLayout(2, 0));
       jRadioButton19.setText("Login");
       pop3ButtonGroup.add(jRadioButton19);
       jRadioButton19.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton19ActionPerformed(evt);
           }
       });
       pop3Panel.add(jRadioButton19);
       jRadioButton20.setText("Logout");
       pop3ButtonGroup.add(jRadioButton20);
       jRadioButton20.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton20ActionPerformed(evt);
           }
       });
       pop3Panel.add(jRadioButton20);
       jRadioButton21.setText("List All Messages");
       pop3ButtonGroup.add(jRadioButton21);
       jRadioButton21.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton21ActionPerformed(evt);
           }
       });
       pop3Panel.add(jRadioButton21);
       jRadioButton22.setText("Status");
       pop3ButtonGroup.add(jRadioButton22);
       jRadioButton22.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton22ActionPerformed(evt);
           }
       });
       pop3Panel.add(jRadioButton22);
       jRadioButton23.setText("Retrieve Message");
       pop3ButtonGroup.add(jRadioButton23);
       jRadioButton23.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton23ActionPerformed(evt);
           }
       });
       pop3Panel.add(jRadioButton23);
       jRadioButton24.setText("Delete Message");
       pop3ButtonGroup.add(jRadioButton24);
       jRadioButton24.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton24ActionPerformed(evt);
           }
       });
       pop3Panel.add(jRadioButton24);
       jRadioButton9.setText("Reset");
       pop3ButtonGroup.add(jRadioButton9);
       jRadioButton9.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton9ActionPerformed(evt);
           }
       });
       pop3Panel.add(jRadioButton9);
       tftpPanel.setLayout(new java.awt.GridLayout(1, 0));
       jRadioButton25.setText("Send A File");
       tftpPanelButtonGroup.add(jRadioButton25);
       jRadioButton25.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton25ActionPerformed(evt);
           }
       });
       tftpPanel.add(jRadioButton25);
       jRadioButton26.setText("Receive A File");
       tftpPanelButtonGroup.add(jRadioButton26);
       jRadioButton26.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jRadioButton26ActionPerformed(evt);
           }
       });
       tftpPanel.add(jRadioButton26);
       loginDialog.getContentPane().setLayout(new java.awt.BorderLayout(0, 5));
       loginDialog.setTitle("Input Required");
       loginDialog.setModal(true);
       loginDialog.setResizable(false);
       jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
       jLabel9.setText("Please Enter Login Details");
       loginDialog.getContentPane().add(jLabel9, java.awt.BorderLayout.NORTH);
       jPanel13.setLayout(new java.awt.GridLayout(2, 2, 5, 3));
       jLabel10.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
       jLabel10.setText("Username:");
       jPanel13.add(jLabel10);
       loginUsername.setColumns(15);
       jPanel13.add(loginUsername);
       jLabel11.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
       jLabel11.setText("Password:");
       jPanel13.add(jLabel11);
       loginPassword.setColumns(15);
       jPanel13.add(loginPassword);
       loginDialog.getContentPane().add(jPanel13, java.awt.BorderLayout.CENTER);
       jPanel14.setLayout(new java.awt.GridLayout(1, 0));
       jButton1.setText("OK");
       jButton1.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jButton1ActionPerformed(evt);
           }
       });
       jPanel14.add(jButton1);
       jButton2.setText("Cancel");
       jButton2.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jButton2ActionPerformed(evt);
           }
       });
       jPanel14.add(jButton2);
       loginDialog.getContentPane().add(jPanel14, java.awt.BorderLayout.SOUTH);
       singleValueDialog.setTitle("Input Required");
       singleValueDialog.setModal(true);
       singleValueDialog.setResizable(false);
       jLabel12.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
       jLabel12.setText("Please enter a value");
       singleValueDialog.getContentPane().add(jLabel12, java.awt.BorderLayout.NORTH);
       jPanel15.setLayout(new java.awt.GridLayout(1, 0, 3, 0));
       singleValueLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
       jPanel15.add(singleValueLabel);
       singleValueField.setColumns(15);
       jPanel15.add(singleValueField);
       singleValueDialog.getContentPane().add(jPanel15, java.awt.BorderLayout.CENTER);
       jPanel16.setLayout(new java.awt.GridLayout(1, 0, 5, 0));
       jButton3.setText("OK");
       jButton3.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jButton3ActionPerformed(evt);
           }
       });
       jPanel16.add(jButton3);
       jButton4.setText("Cancel");
       jButton4.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jButton4ActionPerformed(evt);
           }
       });
       jPanel16.add(jButton4);
       singleValueDialog.getContentPane().add(jPanel16, java.awt.BorderLayout.SOUTH);
       multipleValueDialog.setTitle("Input Required");
       multipleValueDialog.setModal(true);
       jLabel13.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
       jLabel13.setText("Please enter the following values");
       multipleValueDialog.getContentPane().add(jLabel13, java.awt.BorderLayout.NORTH);
       jPanel17.setLayout(new java.awt.GridLayout(1, 0, 5, 0));
       jButton5.setText("OK");
       jButton5.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jButton5ActionPerformed(evt);
           }
       });
       jPanel17.add(jButton5);
       jButton6.setText("Cancel");
       jButton6.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               jButton6ActionPerformed(evt);
           }
       });
       jPanel17.add(jButton6);
       multipleValueDialog.getContentPane().add(jPanel17, java.awt.BorderLayout.SOUTH);
       jPanel18.setLayout(new java.awt.BorderLayout());
       jLabel16.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
       jLabel16.setText("Enter Message:");
       jPanel18.add(jLabel16, java.awt.BorderLayout.WEST);
       messageArea.setColumns(20);
       messageArea.setRows(15);
       jScrollPane3.setViewportView(messageArea);
       jPanel18.add(jScrollPane3, java.awt.BorderLayout.CENTER);
       jPanel19.setLayout(new java.awt.GridLayout(3, 2, 3, 3));
       jLabel14.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
       jLabel14.setText("From:");
       jPanel19.add(jLabel14);
       fromField.setColumns(15);
       jPanel19.add(fromField);
       jLabel15.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
       jLabel15.setText("Subject:");
       jPanel19.add(jLabel15);
       subjectField.setColumns(15);
       jPanel19.add(subjectField);
       variableLabel.setText("Newsgroup:");
       jPanel19.add(variableLabel);
       variableField.setColumns(15);
       jPanel19.add(variableField);
       jPanel18.add(jPanel19, java.awt.BorderLayout.NORTH);
       multipleValueDialog.getContentPane().add(jPanel18, java.awt.BorderLayout.CENTER);
       setTitle("Protocol Runner");
       addWindowListener(new java.awt.event.WindowAdapter() {
           public void windowClosing(java.awt.event.WindowEvent evt) {
               exitForm(evt);
           }
       });
       jPanel1.setLayout(new java.awt.BorderLayout());
       jPanel4.setLayout(new java.awt.BorderLayout());
       jScrollPane1.setBorder(new javax.swing.border.TitledBorder("Server Output"));
       tcpServerResponse.setEditable(false);
       tcpServerResponse.setFont(new java.awt.Font("Monospaced", 0, 12));
       jScrollPane1.setViewportView(tcpServerResponse);
       jPanel4.add(jScrollPane1, java.awt.BorderLayout.CENTER);
       jPanel7.setLayout(new java.awt.GridLayout(1, 2, 5, 0));
       presetPanel.setLayout(new java.awt.BorderLayout());
       presetPanel.setBorder(new javax.swing.border.TitledBorder("Preset Commands"));
       jLabel5.setFont(new java.awt.Font("Dialog", 3, 12));
       jLabel5.setText("No Preset Commands. Simply Connect");
       defaultPanel.add(jLabel5);
       presetPanel.add(defaultPanel, java.awt.BorderLayout.CENTER);
       jPanel7.add(presetPanel);
       jPanel9.setBorder(new javax.swing.border.TitledBorder("Freeflow Commands"));
       jLabel4.setText("Type Command Here:");
       jPanel9.add(jLabel4);
       commandBox.setColumns(15);
       commandBox.setEnabled(false);
       commandBox.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               commandBoxActionPerformed(evt);
           }
       });
       jPanel9.add(commandBox);
       jPanel7.add(jPanel9);
       jPanel4.add(jPanel7, java.awt.BorderLayout.NORTH);
       jPanel1.add(jPanel4, java.awt.BorderLayout.CENTER);
       jPanel5.setLayout(new java.awt.GridLayout(2, 1, 0, 5));
       jPanel6.setBorder(new javax.swing.border.TitledBorder("Protocol"));
       jLabel3.setText("Select Protocol:");
       jPanel6.add(jLabel3);
       tcpSelectionBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "CharGen", "Daytime", "Echo", "Finger", "FTP", "NNTP", "POP3", "SMTP", "Time", "Whois" }));
       tcpSelectionBox.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               tcpSelectionBoxActionPerformed(evt);
           }
       });
       jPanel6.add(tcpSelectionBox);
       jPanel5.add(jPanel6);
       jPanel3.setBorder(new javax.swing.border.TitledBorder("Server Connection Details"));
       jLabel1.setText("Server:");
       jPanel3.add(jLabel1);
       serverNameField.setColumns(25);
       jPanel3.add(serverNameField);
       jLabel2.setText("Port:");
       jPanel3.add(jLabel2);
       portNumberField.setColumns(4);
       portNumberField.setText("19");
       jPanel3.add(portNumberField);
       tcpConnectButton.setText("CONNECT");
       tcpConnectButton.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               tcpConnectButtonActionPerformed(evt);
           }
       });
       jPanel3.add(tcpConnectButton);
       jPanel5.add(jPanel3);
       jPanel1.add(jPanel5, java.awt.BorderLayout.NORTH);
       jTabbedPane1.addTab("TCP", jPanel1);
       jPanel2.setLayout(new java.awt.BorderLayout());
       jPanel10.setLayout(new java.awt.GridLayout(2, 0));
       jPanel8.setBorder(new javax.swing.border.TitledBorder("Protocol"));
       jLabel6.setText("Select Protocol:");
       jPanel8.add(jLabel6);
       udpSelectionBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "CharGen", "Daytime", "Echo", "TFTP", "Time" }));
       udpSelectionBox.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               udpSelectionBoxActionPerformed(evt);
           }
       });
       jPanel8.add(udpSelectionBox);
       jPanel10.add(jPanel8);
       jPanel12.setBorder(new javax.swing.border.TitledBorder("Remote Server Details"));
       jLabel7.setText("Remote Server:");
       jPanel12.add(jLabel7);
       udpRemoteServerField.setColumns(25);
       jPanel12.add(udpRemoteServerField);
       jPanel10.add(jPanel12);
       jPanel2.add(jPanel10, java.awt.BorderLayout.NORTH);
       jPanel11.setLayout(new java.awt.BorderLayout());
       udpCommandPanel.setLayout(new java.awt.GridLayout(1, 0));
       udpCommandPanel.setBorder(new javax.swing.border.TitledBorder("Command Panel"));
       udpStartButton.setText("START");
       udpStartButton.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               udpStartButtonActionPerformed(evt);
           }
       });
       udpCommandPanel.add(udpStartButton);
       jPanel11.add(udpCommandPanel, java.awt.BorderLayout.NORTH);
       udpServerResponse.setEditable(false);
       udpServerResponse.setFont(new java.awt.Font("Monospaced", 0, 12));
       jScrollPane2.setViewportView(udpServerResponse);
       jPanel11.add(jScrollPane2, java.awt.BorderLayout.CENTER);
       jPanel2.add(jPanel11, java.awt.BorderLayout.CENTER);
       jTabbedPane1.addTab("UDP", jPanel2);
       getContentPane().add(jTabbedPane1, java.awt.BorderLayout.CENTER);
       pack();
   }//GEN-END:initComponents
   private void jRadioButton26ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton26ActionPerformed
       // tftp receive a file:
       udpRemoteServer = udpRemoteServerField.getText();
       if(udpRemoteServer == null || udpRemoteServer.length() == 0) {
           showError("Please enter a remote server");
           return;
       }
       
       // get the name of the file to receive
       udpStartButton.doClick();
       
       singleValueLabel.setText("Enter file path (TFTP-Receive):");
       showDialog(singleValueDialog);
   }//GEN-LAST:event_jRadioButton26ActionPerformed
   private void jRadioButton25ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton25ActionPerformed
       // tftp send a file:
       udpRemoteServer = udpRemoteServerField.getText();
       if(udpRemoteServer == null || udpRemoteServer.length() == 0) {
           showError("Please enter a remote server");
           return;
       }
       
       // get the name of the file to send
       udpStartButton.doClick();
       
       singleValueLabel.setText("Enter file path (TFTP-Send):");
       showDialog(singleValueDialog);
   }//GEN-LAST:event_jRadioButton25ActionPerformed
   private void udpStartButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_udpStartButtonActionPerformed
       // handler for Start button for UDP:
       if(started) { // means a session has already started
           try{
               handleUDPStop();
           }catch(IOException ex) {
               showError(ex.getMessage());
           }
           return;
       }
       
       udpRemoteServer = udpRemoteServerField.getText();
       
       if(udpRemoteServer == null || udpRemoteServer.length() == 0) {
           showError("Please enter a remote server");
           return;
       }
       try{
           udpClient = 
             ClientFactory.getUDPClientInstance(
                 udpSelectionBox.getSelectedIndex());
           udpClient.open();
       }catch(SocketException se){
           showError(se.getMessage());
           return;
       }catch(IOException ioex){
           showError(ioex.getMessage());
           return;
       }
       
       // if we come here means we have opened a port
       started = true;
       udpStartButton.setText("Stop");
       udpSelectionBox.setEnabled(false);
       jTabbedPane1.setEnabledAt(0, false);
       
       try {
           ProtocolHandler.handleUDPProtocol(
               udpSelectionBox.getSelectedIndex(), 
               udpClient, 
               this);
       }catch (IOException io) {
           showError(io.getMessage());
           io.printStackTrace();
       }        
       
       
   }//GEN-LAST:event_udpStartButtonActionPerformed
   private void jRadioButton9ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton9ActionPerformed
       // reset for pop3:
       if(!checkValidConnection()) return;
       try {
           ((POP3Client)tcpClient).reset();
           tcpServerResponse.append(
               ((POP3Client)tcpClient).getReplyString() + 
               "\r\n");
       }catch(IOException ioex) { showError(ioex.getMessage()); return; }        
   }//GEN-LAST:event_jRadioButton9ActionPerformed
   private void jRadioButton24ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton24ActionPerformed
       // delete message for pop3:
       if(!checkValidConnection()) return;
       
       singleValueLabel.setText("Enter message number to delete:");
       showDialog(singleValueDialog);
   }//GEN-LAST:event_jRadioButton24ActionPerformed
   private void jRadioButton23ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton23ActionPerformed
       // Retrieve message for pop3:
       if(!checkValidConnection()) return;
       
       singleValueLabel.setText("Enter message number:");
       showDialog(singleValueDialog);
   }//GEN-LAST:event_jRadioButton23ActionPerformed
   private void jRadioButton21ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton21ActionPerformed
       // list all messages for pop3:
       if(!checkValidConnection()) return;
       try {
           ((POP3Client)tcpClient).listMessages();
           tcpServerResponse.append(
               ((POP3Client)tcpClient).getReplyString() + 
               "\r\n");
       }catch(IOException ioex) { showError(ioex.getMessage()); return; }        
   }//GEN-LAST:event_jRadioButton21ActionPerformed
   private void jRadioButton22ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton22ActionPerformed
       // status for pop3:
       if(!checkValidConnection()) return;
       try {
           ((POP3Client)tcpClient).status();
           tcpServerResponse.append(
               ((POP3Client)tcpClient).getReplyString() +
               "\r\n");
       }catch(IOException ioex) { showError(ioex.getMessage()); return; }        
   }//GEN-LAST:event_jRadioButton22ActionPerformed
   private void jRadioButton20ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton20ActionPerformed
       // logout for pop3:
       if(!checkValidConnection()) return;
       try {
           ((POP3Client)tcpClient).logout();
           tcpServerResponse.append(
               ((POP3Client)tcpClient).getReplyString() +
               "\r\n");
           handleDisconnect();
       }catch(IOException ioex) { showError(ioex.getMessage()); return; }
   }//GEN-LAST:event_jRadioButton20ActionPerformed
   private void jRadioButton19ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton19ActionPerformed
       // login for pop3:
       if(!checkValidConnection()) return; 
       showDialog(loginDialog);
   }//GEN-LAST:event_jRadioButton19ActionPerformed
   private void jRadioButton16ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton16ActionPerformed
       // Send simple message for SMTP:
       if(!checkValidConnection()) return;
       
       variableLabel.setText("To:");
       showDialog(multipleValueDialog);
   }//GEN-LAST:event_jRadioButton16ActionPerformed
   private void jRadioButton18ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton18ActionPerformed
       // logout for SMTP:
       if(!checkValidConnection()) return;
       
       try {
           ((SMTPClient)tcpClient).logout();
           tcpServerResponse.append(
               ((SMTPClient)tcpClient).getReplyString() +
               "\r\n");
       }catch(IOException ioex) { showError(ioex.getMessage()); return; }         
   }//GEN-LAST:event_jRadioButton18ActionPerformed
   private void jRadioButton17ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton17ActionPerformed
       // login for SMTP:
       if(!checkValidConnection()) return;
       
       // for SMTP login is simply sending HELO
       try {
           ((SMTPClient)tcpClient).login();
           tcpServerResponse.append(
               ((SMTPClient)tcpClient).getReplyString() +
               "\r\n");
       }catch(IOException ioex) { showError(ioex.getMessage()); return; } 
       
   }//GEN-LAST:event_jRadioButton17ActionPerformed
   private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton5ActionPerformed
       // ok for multiple value dialog:
       String fromText     = fromField.getText();
       String subjectText  = subjectField.getText();
       String variableText = variableField.getText();
       String messageText  = messageArea.getText();
       
       DotTerminatedMessageWriter writer;
             
       int selection = tcpSelectionBox.getSelectedIndex();
       try{
           if(selection == 5) { // means handling NNTP posting of message
               writer = (DotTerminatedMessageWriter)
                   ((NNTPClient)tcpClient).postArticle();             
               
               if(writer == null) { 
                   tcpServerResponse.append(
                       ((NNTPClient)tcpClient).getReplyString() + "\r\n");
                   return;
               }
               
               // create simple NNTP headers
               SimpleNNTPHeader headers = 
                   new SimpleNNTPHeader(fromText, subjectText);
               headers.addNewsgroup(variableText);
               
               // and write the message on
               writer.write(headers.toString());
               writer.write(messageText);
               writer.close();
               ((NNTPClient)tcpClient).rupletePendingCommand();                
               tcpServerResponse.append(
                   ((NNTPClient)tcpClient).getReplyString() + "\r\n");                
           } else if(selection == 7) { // means handling SMTP posting of message
               
               ((SMTPClient)tcpClient).setSender(fromText);
               ((SMTPClient)tcpClient).addRecipient(variableText);
               writer = (DotTerminatedMessageWriter) 
                   ((SMTPClient)tcpClient).sendMessageData();                
               
               if(writer == null) {
                   tcpServerResponse.append(
                       ((SMTPClient)tcpClient).getReplyString() + "\r\n");
                   return;
               }
               
               // create Simple SMTP header
               SimpleSMTPHeader headers = 
                   new SimpleSMTPHeader(fromText, variableText, subjectText);
               
               writer.write(headers.toString());
               writer.write(messageText);
               writer.close();
               ((SMTPClient)tcpClient).rupletePendingCommand();
               tcpServerResponse.append(
                   ((SMTPClient)tcpClient).getReplyString() + "\r\n");                
           }
       }catch(IOException ioex) { showError(ioex.getMessage()); }
       finally{ 
           fromField.setText(""); 
           subjectField.setText(""); 
           variableField.setText(""); 
           messageArea.setText("");
           multipleValueDialog.setVisible(false);
       }
   }//GEN-LAST:event_jButton5ActionPerformed
   private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton6ActionPerformed
       // cancel for multiple value dialog:
       multipleValueDialog.setVisible(false);
   }//GEN-LAST:event_jButton6ActionPerformed
   private void jRadioButton13ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton13ActionPerformed
       // post article for nntp:
       if(!checkValidConnection()) return;
       
       variableLabel.setText("Newsgroup:");
       showDialog(multipleValueDialog);
   }//GEN-LAST:event_jRadioButton13ActionPerformed
   private void jRadioButton14ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton14ActionPerformed
       // get article for nntp:
       if(!checkValidConnection()) return;
       
       singleValueLabel.setText("Enter message id:");
       showDialog(singleValueDialog);
   }//GEN-LAST:event_jRadioButton14ActionPerformed
   private void jRadioButton12ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton12ActionPerformed
       // list new news messages for nntp:
       if(!checkValidConnection()) return;
       
       singleValueLabel.setText("Full or part name of group:");
       showDialog(singleValueDialog);
   }//GEN-LAST:event_jRadioButton12ActionPerformed
   private void jRadioButton15ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton15ActionPerformed
       // logout for nntp:
       if(!checkValidConnection()) return;
       
       try {
           ((NNTPClient)tcpClient).logout();
           tcpServerResponse.append(
               ((NNTPClient)tcpClient).getReplyString() + "\r\n");
           handleDisconnect();            
       }catch(IOException ioex) { showError(ioex.getMessage()); }
   }//GEN-LAST:event_jRadioButton15ActionPerformed
   private void jRadioButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton2ActionPerformed
       // list all news groups for nntp:
       if(!checkValidConnection()) return;
       
       try{
           NewsgroupInfo[] newsgroups = 
               ((NNTPClient)tcpClient).listNewsgroups();
           tcpServerResponse.append(
               ((NNTPClient)tcpClient).getReplyString() + "\r\n");
           for(int i=0; i<newsgroups.length; i++) {
               tcpServerResponse.append(newsgroups[i].getNewsgroup() + "\r\n");
           }
       }catch(IOException ioex) { showError(ioex.getMessage()); }        
   }//GEN-LAST:event_jRadioButton2ActionPerformed
   private void jRadioButton11ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton11ActionPerformed
       // list new news group for nntp:
       if(!checkValidConnection()) return;
       
       // create a query to find new news groups since yesterday
       GregorianCalendar today = new GregorianCalendar();    
       today.roll(Calendar.DAY_OF_YEAR, false);
       NewGroupsOrNewsQuery query = 
         new NewGroupsOrNewsQuery(today, false);
       
       try{
           NewsgroupInfo[] newsgroups = 
               ((NNTPClient)tcpClient).listNewNewsgroups(query);
           tcpServerResponse.append(
               ((NNTPClient)tcpClient).getReplyString() + "\r\n");
           
           if(newsgroups == null) return;
           for(int i=0; i<newsgroups.length; i++) {
               tcpServerResponse.append(newsgroups[i].getNewsgroup() + "\r\n");                
           }
           if(newsgroups.length == 0)
               tcpServerResponse.append("No new NewsGroups\r\n");            
       }catch(IOException ioex) { showError(ioex.getMessage()); }      
       
   }//GEN-LAST:event_jRadioButton11ActionPerformed
   private void jRadioButton10ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton10ActionPerformed
       // login for nntp:
       if(!checkValidConnection()) return; 
       showDialog(loginDialog);
   }//GEN-LAST:event_jRadioButton10ActionPerformed
   private void jRadioButton7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton7ActionPerformed
       // Download file for FTP:
       if(!checkValidConnection()) return;
       
       singleValueLabel.setText("Remote file:");
       showDialog(singleValueDialog);
   }//GEN-LAST:event_jRadioButton7ActionPerformed
   private void jRadioButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton6ActionPerformed
       // upload file for FTP:
       if(!checkValidConnection()) return;
       
       singleValueLabel.setText("Full path to local file:");
       showDialog(singleValueDialog);
   }//GEN-LAST:event_jRadioButton6ActionPerformed
   private void jRadioButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton5ActionPerformed
       // make directory for FTP:
       if(!checkValidConnection()) return;
       
       singleValueLabel.setText("New Directory Name:");
       showDialog(singleValueDialog);
   }//GEN-LAST:event_jRadioButton5ActionPerformed
   private void jRadioButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton3ActionPerformed
       // list files for FTP:
       if(!checkValidConnection()) return;
       
       try {
           FTPFile[] fileList = ((FTPClient)tcpClient).listFiles();
           tcpServerResponse.append(
               ((FTPClient)tcpClient).getReplyString() + "\r\n");
           if(fileList == null) return;
           for(int i=0; i<fileList.length; i++) {
             tcpServerResponse.append(fileList[i].toString() + "\r\n");
           }
       }catch(IOException ioex) { showError(ioex.getMessage()); return; }
   }//GEN-LAST:event_jRadioButton3ActionPerformed
   private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
       // Single Value Dialog OK Button
       
       // this method only handles tcp protocols, for udp protocols, another
       // method is used
       if(jTabbedPane1.getSelectedIndex() == 1) { // means we are in udp tab
           udpSingleValOKButton(); 
           return;
       }
       
       String valueText = singleValueField.getText();
       String valueLabel = singleValueLabel.getText();
       int selection = tcpSelectionBox.getSelectedIndex();
       try{
           if(selection == 4) { // means handling FTP
               if("New Directory:".equals(valueLabel)) { 
                   // means CWD
                   ((FTPClient)tcpClient).changeWorkingDirectory(valueText);
               } else if(
                   "New Directory Name:".equals(valueLabel)) {
                       // means make new directory
                       ((FTPClient)tcpClient).makeDirectory(valueText);
               } else if(
                   "Full path to local file:".equals(
                       valueLabel)) { 
                           // means uploading file
                           FileInputStream input = 
                               new FileInputStream(valueText);
                           ((FTPClient)tcpClient).storeFile(
                               new File(valueText).getName(), input);
                           input.close();
               } else if("Remote file:".equals(valueLabel)) { 
                   // means downloading a file
                   FileOutputStream output = 
                       new FileOutputStream(
                           System.getProperty("user.dir") + 
                           System.getProperty("file.separator") + 
                           valueText);
                   ((FTPClient)tcpClient).retrieveFile(valueText, output);
                   output.close();
               }
               tcpServerResponse.append(
                   ((FTPClient)tcpClient).getReplyString() + "\r\n");
           } else if(selection == 5) { // means handling NNTP
               if("Full or part name of group:".equals(valueLabel)) {
                   // means getting new news of a group
                   
                   // create a query to get all new messages in this group
                   // since yesterday
                   GregorianCalendar today = new GregorianCalendar();    
                   today.roll(Calendar.DAY_OF_YEAR, false);
                   NewGroupsOrNewsQuery query = 
                     new NewGroupsOrNewsQuery(today, false);
                   query.addDistribution(valueText);
                   
                   String[] result = 
                       ((NNTPClient)tcpClient).listNewNews(query);
                   
                   tcpServerResponse.append(
                       ((NNTPClient)tcpClient).getReplyString() + "\r\n");
                   
                   // in case the NEWNEWS cmmand is disabled
                   if(result == null)  return;
                   for(int i=0; i<result.length; i++) {
                       tcpServerResponse.append(
                           result[i] + "\r\n");
                   }
               } else if("Enter message id:".equals(valueLabel)) {
                   // means getting a message based on id
                   DotTerminatedMessageReader reader = 
                       (DotTerminatedMessageReader)
                       ((NNTPClient)tcpClient).retrieveArticle(
                       "<" + valueText + ">");
                   tcpServerResponse.append(
                       ((NNTPClient)tcpClient).getReplyString() + "\r\n");                    
                   
                   if(reader == null) return;
                   
                   BufferedReader buffReader = new BufferedReader(reader);
                   String lineRead;
                   while((lineRead = buffReader.readLine()) != null) {
                       tcpServerResponse.append(lineRead + "\r\n");
                   }
               }
           } else if(selection == 6) { // means handling pop3
               if("Enter message number:".equals(valueLabel)) { 
                   // means getting a message based on number
                   DotTerminatedMessageReader reader = 
                       (DotTerminatedMessageReader)                    
                       ((POP3Client)tcpClient).retrieveMessage(
                           Integer.parseInt(valueText));
                   
                   tcpServerResponse.append(
                       ((POP3Client)tcpClient).getReplyString() + 
                       "\r\n");
                   
                   if(reader == null) return;
                   
                   BufferedReader buffReader = new BufferedReader(reader);
                   String lineRead;
                   while((lineRead = buffReader.readLine()) != null) {
                       tcpServerResponse.append(lineRead + "\r\n");
                   }                    
               } else if("Enter message number to delete:".equals(valueLabel)){
                   // means deleting a message based on id
                   ((POP3Client)tcpClient).deleteMessage(
                       Integer.parseInt(valueText));
                   tcpServerResponse.append(
                       ((POP3Client)tcpClient).getReplyString() + 
                       "\r\n");                    
               }
           } else if(selection == 2) { // is echo
               BufferedReader reader = new BufferedReader(
                   new InputStreamReader(
                       ((EchoTCPClient)tcpClient).getInputStream()));
               
               PrintWriter writer =
                   new PrintWriter(
                       new OutputStreamWriter(
                           ((EchoTCPClient)tcpClient).getOutputStream()), true);
               
               // write to the server
               writer.println(valueText);
               
               // read from the server
               tcpServerResponse.append(reader.readLine());
               
               // streams are not closed here as there is no provision for the
               // user to send another stream of data. Thus the user has to
               // close the connection, which cleans up open streams.
           } else if(selection == 3) { // is finger
               tcpServerResponse.setText(
                   ((FingerClient)tcpClient).query(false, valueText));
           } else if(selection == 9) { // is whois
               tcpServerResponse.setText(
                   ((WhoisClient)tcpClient).query(valueText));
           }
       }catch(IOException ioex) { showError(ioex.getMessage()); return; }
       finally {
           singleValueField.setText("");
           singleValueDialog.setVisible(false);
       }
   }//GEN-LAST:event_jButton3ActionPerformed
   private void udpSingleValOKButton() {
       // handles udp single value ok button clicks
       String valueText = singleValueField.getText();
       String valueLabel = singleValueLabel.getText();
       
       int selection = udpSelectionBox.getSelectedIndex();
       try{
           if(selection == 2) { // means handling echo
               if("Enter echo data (UDP):".equals(valueLabel)) { 
                   ((EchoUDPClient)udpClient).send(
                       valueText.getBytes(), 
                       InetAddress.getByName(udpRemoteServer));
                   byte[] data = new byte[valueText.length()];
                   
                   ((EchoUDPClient)udpClient).receive(data);
                   udpServerResponse.append(new String(data) + "\r\n");
               }
           } else if(selection == 3) { // handling tftp
               File localFile = new File(valueText);
               if("Enter file path (TFTP-Receive):".equals(valueLabel)) {
                   // means receiving a file via tftp
                   FileOutputStream output = new FileOutputStream(localFile);
                   ((TFTPClient)udpClient).receiveFile(
                       localFile.getName(),
                       TFTPClient.ASCII_MODE,
                       output,
                       InetAddress.getByName(udpRemoteServer));
                   output.close();
               } else if("Enter file path (TFTP-Send):".equals(valueLabel)) {
                   // means sending a file via tftp
                   FileInputStream input = new FileInputStream(localFile);
                   ((TFTPClient)udpClient).sendFile(
                       localFile.getName(),
                       TFTPClient.ASCII_MODE,
                       input,
                       InetAddress.getByName(udpRemoteServer));
                   input.close();
               }
               udpClient.close();
           }
       }catch(IOException ioex) { showError(ioex.getMessage()); return; }
       finally {
           singleValueField.setText("");
           singleValueDialog.setVisible(false);
       }
   }
   private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
       singleValueDialog.setVisible(false);
       
       // if this is any of the following protocols disconnect as well
       int currentSel = tcpSelectionBox.getSelectedIndex();
       int currentUDPSel = udpSelectionBox.getSelectedIndex();
       int currentSelTab = jTabbedPane1.getSelectedIndex();
       try{
           if((currentSel == 2) && (currentSelTab == 0)) { 
               // is Echo for TCP
               handleDisconnect();
           } else if((currentUDPSel == 3) && (currentSelTab == 1)) { 
               // is TFTP for UDP
               handleUDPStop();
           }
       }catch(IOException ioex) {
           System.err.println(ioex.getMessage());
       }
   }//GEN-LAST:event_jButton4ActionPerformed
   private void jRadioButton8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton8ActionPerformed
       // logout for ftp:
       if(!checkValidConnection()) return;
       try{
           ((FTPClient)tcpClient).logout();
           tcpServerResponse.append(((FTPClient)tcpClient).getReplyString());
           handleDisconnect();
       }catch(IOException ioex) { showError(ioex.getMessage()); }
   }//GEN-LAST:event_jRadioButton8ActionPerformed
   private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
       // login handling code for ftp, nntp, pop3:
       String username = loginUsername.getText();
       String password = loginPassword.getText();
       loginDialog.setVisible(false);
       try {
           int currentSel = tcpSelectionBox.getSelectedIndex();
           if(currentSel == 4) { // is FTP login
               ((FTPClient)tcpClient).login(username, password);
               tcpServerResponse.append(
                   ((FTPClient)tcpClient).getReplyString());
           } else if(currentSel == 5) { // is NNTP login
               ((NNTPClient)tcpClient).authenticate(username, password);
               tcpServerResponse.append(
                   ((NNTPClient)tcpClient).getReplyString());
           } else if(currentSel == 6) { // is POP3 login
               ((POP3Client)tcpClient).login(username, password);
               tcpServerResponse.append(
                   ((POP3Client)tcpClient).getReplyString());
           }
       }catch(IOException ioex) { showError(ioex.getMessage()); }
       finally{ loginUsername.setText(""); loginPassword.setText(""); }
   }//GEN-LAST:event_jButton1ActionPerformed
   private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
       // Add your handling code here:
       loginDialog.setVisible(false);
   }//GEN-LAST:event_jButton2ActionPerformed
   private void jRadioButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton4ActionPerformed
       // ftp login
       if(!checkValidConnection()) return; 
       showDialog(loginDialog);
   }//GEN-LAST:event_jRadioButton4ActionPerformed
   private boolean checkValidConnection() {
       if(!connected) { showError("Please connect first!"); return false; }
       return true;
   }
   
   private void commandBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_commandBoxActionPerformed
       
       String commandString = commandBox.getText();
       if(commandString == null || commandString.length() == 0) return;
       try{
           ProtocolHandler.handleTCPProtocol(
               tcpSelectionBox.getSelectedIndex(), 
               tcpClient, this, commandString);
       }catch(IOException ioex) { showError(ioex.getMessage()); }
       finally{ commandBox.setText(""); }
   }//GEN-LAST:event_commandBoxActionPerformed
   /**
    * This code handles the action events for the Connect button 
    */
   private void tcpConnectButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tcpConnectButtonActionPerformed
       // if already connected, simply disconnect
       if(connected) {
           try {
               handleDisconnect();
           }catch(IOException e) {
               showError(e.getMessage());
           }
           return;
       }
       
       // if not connected, try and make a connection        
       String server  = serverNameField.getText();
       String port    = portNumberField.getText();
       int portNumber;
       
       // check if the port number is a valid number
       try{
         portNumber = Integer.parseInt(port);
       }catch(NumberFormatException nfe){
           showError("Invalid port number: " + port);
           return;
       }
       
       // some basic checking of data
       if(server == null || server.trim().length() == 0 ||
          portNumber < 1){
         showError("Invalid connection attributes");
         return;
       }
       
       // now using the factory create an instance of the client
       // and connect
       try{
           tcpClient = 
             ClientFactory.getTCPClientInstance(
                 tcpSelectionBox.getSelectedIndex());
           tcpClient.connect(server, portNumber);
       }catch(SocketException se){
           showError(se.getMessage());
           return;
       }catch(IOException ioex){
           showError(ioex.getMessage());
           return;
       }
       
       // if we come here means we have connected
       connected = true;
       tcpConnectButton.setText("Disconnect");
       tcpSelectionBox.setEnabled(false);
       jTabbedPane1.setEnabledAt(1, false);
       
       try {
           ProtocolHandler.handleTCPProtocol(
               tcpSelectionBox.getSelectedIndex(), 
               tcpClient, 
               this);
       }catch (IOException io) {
           showError(io.getMessage());
           io.printStackTrace();
       }
   }//GEN-LAST:event_tcpConnectButtonActionPerformed
   private void udpSelectionBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_udpSelectionBoxActionPerformed
       // Add your handling code here:
       JComboBox box = (JComboBox)evt.getSource();
       int selectedProtocolIdx = box.getSelectedIndex();
       
       udpCommandPanel.removeAll();
       
       if(selectedProtocolIdx == 3){ // is TFTP
           udpCommandPanel.add(tftpPanel);
       }else{
           udpCommandPanel.add(udpStartButton);
       }
       
       repaint(); 
   }//GEN-LAST:event_udpSelectionBoxActionPerformed
   private void jRadioButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton1ActionPerformed
       // change working directory for FTP
       if(!checkValidConnection()) return;
       
       singleValueLabel.setText("New Directory:");
       showDialog(singleValueDialog);
   }//GEN-LAST:event_jRadioButton1ActionPerformed
   private void tcpSelectionBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tcpSelectionBoxActionPerformed
       // Add your handling code here:
       // get the protocol selected
       JComboBox box = (JComboBox)evt.getSource();
       int selectedProtocolIdx = box.getSelectedIndex();
       updateTCPPanels(selectedProtocolIdx);
   }//GEN-LAST:event_tcpSelectionBoxActionPerformed
   
   private void updateTCPPanels(int index){        
       // based on what protocol has been selected,
       // change the available commands panel
       presetPanel.removeAll();
       
       // this local boolean indicates if the protocol currently being
       // used requires a different command panel or not
       boolean isPanelDifferent = false;
       
       switch(index){
           case 4: {
               presetPanel.add(ftpPanel);
               isPanelDifferent = true;
               portNumberField.setText("21");
               break;
           }// ftp
           case 5: {
               presetPanel.add(nntpPanel);
               isPanelDifferent = true;
               portNumberField.setText("119");
               break;
           } // nntp
           case 6: {
               presetPanel.add(pop3Panel);
               isPanelDifferent = true;
               portNumberField.setText("110");
               break;
           }
           case 7: {
               presetPanel.add(smtpPanel);
               isPanelDifferent = true;
               portNumberField.setText("25");
               break;
           } // smtp
           case 0: {
               portNumberField.setText("19");
               break;
           } // chargen
           case 1: {
               portNumberField.setText("13");
               break;
           } // daytime
           case 2: {
               portNumberField.setText("7");                
               break;
           } // echo
           case 3: {
               portNumberField.setText("79");
               break;
           } // finger
           case 8: {
               portNumberField.setText("37");
               break;
           } // time
           case 9: {
               portNumberField.setText("43");
               break;
           } // Whois
       }
       
       if(isPanelDifferent) {
           commandBox.setEnabled(true);
       } else {
           commandBox.setEnabled(false);
           presetPanel.add(defaultPanel);
       }
       
       repaint();
   }
   
   /** Exit the Application */
   private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
       System.exit(0);
   }//GEN-LAST:event_exitForm
   
   /**
    * @param args the command line arguments
    */
   public static void main(String args[]) {
       new ProtocolRunner().show();
   }
   
   private void showError(String msg){
       JOptionPane.showMessageDialog(
         this, msg, "Error", JOptionPane.ERROR_MESSAGE);
       try {
           if(connected) handleDisconnect();
       }catch(IOException ioex) { System.err.println(ioex.getMessage()); }
   }
   
   void showDialog(JDialog dialog) {
       dialog.pack();
       dialog.setLocationRelativeTo(this);
       dialog.setVisible(true);
   }
   
   final void handleUDPStop() throws IOException {
       udpClient.close();
       started = false;
       udpServerResponse.setText("");
       udpStartButton.setText("Start");
       udpSelectionBox.setEnabled(true);
       jTabbedPane1.setEnabledAt(0, true);
       return;
   }
   
   final void handleDisconnect() throws IOException {
       tcpClient.disconnect();
       tcpServerResponse.setText("");
       connected = false;
       tcpConnectButton.setText("Connect");
       tcpSelectionBox.setEnabled(true);
       jTabbedPane1.setEnabledAt(1, true);
       return;
   }
   
   final JTextArea getTCPServerResponse() {
       return this.tcpServerResponse;
   }
   final JTextArea getUDPServerResponse() {
       return this.udpServerResponse;
   }
   
   final JDialog getSingleValueDialog() {
       return this.singleValueDialog;
   }
   final JLabel getSingleValueLabel() {
       return this.singleValueLabel;
   }    
   
   final JTextField getSingleValueText() {
       return this.singleValueField;
   }
   final String getUDPRemoteServer() {
       return this.udpRemoteServer;
   }
   
   // non GUI variables
   // identifies if a connection is made for tcp
   private boolean connected;
   
   // identifies if a udp session is started
   private boolean started;   
   
   // the remote udp server
   private String udpRemoteServer;
   
   // the current client for tcp connections
   SocketClient tcpClient;
   
   // the current client for udp connections
   DatagramSocketClient udpClient;
   
   // Variables declaration - do not modify//GEN-BEGIN:variables
   private javax.swing.JTextField commandBox;
   private javax.swing.JPanel defaultPanel;
   private javax.swing.JTextField fromField;
   private javax.swing.ButtonGroup ftpButtonGroup;
   private javax.swing.JPanel ftpPanel;
   private javax.swing.JButton jButton1;
   private javax.swing.JButton jButton2;
   private javax.swing.JButton jButton3;
   private javax.swing.JButton jButton4;
   private javax.swing.JButton jButton5;
   private javax.swing.JButton jButton6;
   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 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 jLabel9;
   private javax.swing.JPanel jPanel1;
   private javax.swing.JPanel jPanel10;
   private javax.swing.JPanel jPanel11;
   private javax.swing.JPanel jPanel12;
   private javax.swing.JPanel jPanel13;
   private javax.swing.JPanel jPanel14;
   private javax.swing.JPanel jPanel15;
   private javax.swing.JPanel jPanel16;
   private javax.swing.JPanel jPanel17;
   private javax.swing.JPanel jPanel18;
   private javax.swing.JPanel jPanel19;
   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.JPanel jPanel7;
   private javax.swing.JPanel jPanel8;
   private javax.swing.JPanel jPanel9;
   private javax.swing.JRadioButton jRadioButton1;
   private javax.swing.JRadioButton jRadioButton10;
   private javax.swing.JRadioButton jRadioButton11;
   private javax.swing.JRadioButton jRadioButton12;
   private javax.swing.JRadioButton jRadioButton13;
   private javax.swing.JRadioButton jRadioButton14;
   private javax.swing.JRadioButton jRadioButton15;
   private javax.swing.JRadioButton jRadioButton16;
   private javax.swing.JRadioButton jRadioButton17;
   private javax.swing.JRadioButton jRadioButton18;
   private javax.swing.JRadioButton jRadioButton19;
   private javax.swing.JRadioButton jRadioButton2;
   private javax.swing.JRadioButton jRadioButton20;
   private javax.swing.JRadioButton jRadioButton21;
   private javax.swing.JRadioButton jRadioButton22;
   private javax.swing.JRadioButton jRadioButton23;
   private javax.swing.JRadioButton jRadioButton24;
   private javax.swing.JRadioButton jRadioButton25;
   private javax.swing.JRadioButton jRadioButton26;
   private javax.swing.JRadioButton jRadioButton3;
   private javax.swing.JRadioButton jRadioButton4;
   private javax.swing.JRadioButton jRadioButton5;
   private javax.swing.JRadioButton jRadioButton6;
   private javax.swing.JRadioButton jRadioButton7;
   private javax.swing.JRadioButton jRadioButton8;
   private javax.swing.JRadioButton jRadioButton9;
   private javax.swing.JScrollPane jScrollPane1;
   private javax.swing.JScrollPane jScrollPane2;
   private javax.swing.JScrollPane jScrollPane3;
   private javax.swing.JTabbedPane jTabbedPane1;
   private javax.swing.JDialog loginDialog;
   private javax.swing.JPasswordField loginPassword;
   private javax.swing.JTextField loginUsername;
   private javax.swing.JTextArea messageArea;
   private javax.swing.JDialog multipleValueDialog;
   private javax.swing.ButtonGroup nntpButtonGroup;
   private javax.swing.JPanel nntpPanel;
   private javax.swing.ButtonGroup pop3ButtonGroup;
   private javax.swing.JPanel pop3Panel;
   private javax.swing.JTextField portNumberField;
   private javax.swing.JPanel presetPanel;
   private javax.swing.JTextField serverNameField;
   private javax.swing.JDialog singleValueDialog;
   private javax.swing.JTextField singleValueField;
   private javax.swing.JLabel singleValueLabel;
   private javax.swing.ButtonGroup smtpButtonGroup;
   private javax.swing.JPanel smtpPanel;
   private javax.swing.JTextField subjectField;
   private javax.swing.JButton tcpConnectButton;
   private javax.swing.JComboBox tcpSelectionBox;
   private javax.swing.JTextArea tcpServerResponse;
   private javax.swing.JPanel tftpPanel;
   private javax.swing.ButtonGroup tftpPanelButtonGroup;
   private javax.swing.JPanel udpCommandPanel;
   private javax.swing.JTextField udpRemoteServerField;
   private javax.swing.JComboBox udpSelectionBox;
   private javax.swing.JTextArea udpServerResponse;
   private javax.swing.JButton udpStartButton;
   private javax.swing.JTextField variableField;
   private javax.swing.JLabel variableLabel;
   // End of variables declaration//GEN-END:variables
   

}


/*

* ClientFactory.java
*
* Created on December 31, 2003, 12:15 PM
*/

import org.apache.rumons.net.*; import org.apache.rumons.net.ftp.FTPClient; import org.apache.rumons.net.smtp.SMTPClient; import org.apache.rumons.net.pop3.POP3Client; import org.apache.rumons.net.nntp.NNTPClient; import org.apache.rumons.net.tftp.TFTPClient; /**

* Factory for creation of singleton clients.
* @author  vgoyal
*/

class ClientFactory {

   public static SocketClient getTCPClientInstance(int clientType) {
      switch(clientType) {
           case 0: { // is chargen
               if(charGenTCPClient == null) {
                   charGenTCPClient = new CharGenTCPClient();
               }
               return charGenTCPClient;
           }
          case 1: { // is daytime 
              if(daytimeTCPClient == null) {
                  daytimeTCPClient = new DaytimeTCPClient();
              }
              return daytimeTCPClient;
          }
          case 2: { // is echo
              if(echoTCPClient == null) {
                  echoTCPClient = new EchoTCPClient();
              }
              return echoTCPClient;
          }
          case 3: { // is finger
              if(fingerClient == null) {
                  fingerClient = new FingerClient();
              }
              return fingerClient;
          }
          case 4: { // is ftp
              if(ftpClient == null) {
                  ftpClient = new FTPClient();
              }
              return ftpClient;
          }
          case 5: { // is nntp
              if(nntpClient == null) {
                  nntpClient = new NNTPClient();
              }
              return nntpClient;
          }
          case 6: { // is pop3
              if(pop3Client == null) {
                  pop3Client = new POP3Client();
              }
              return pop3Client;
          }
          case 7: { // is smtp
              if(smtpClient == null) {
                  smtpClient = new SMTPClient();
              }
              return smtpClient;
          }
          case 8: { // is time
              if(timeTCPClient == null) {
                  timeTCPClient = new TimeTCPClient();
              }
              return timeTCPClient;
          }
          case 9: { // is whois
              if(whoisClient == null) {
                  whoisClient = new WhoisClient();
              }
              return whoisClient;
          }
       }
       return null;
   }
   
   public static DatagramSocketClient getUDPClientInstance(int clientType) {
      switch(clientType) {
           case 0: { // is chargen
               if(charGenUDPClient == null) {
                   charGenUDPClient = new CharGenUDPClient();
               }
               return charGenUDPClient;
           }
          case 1: { // is daytime
              if(daytimeUDPClient == null) {
                  daytimeUDPClient = new DaytimeUDPClient();
              }
              return daytimeUDPClient;
          }
          case 2: { // is echo
              if(echoUDPClient == null) {
                  echoUDPClient = new EchoUDPClient();
              }
              return echoUDPClient;
          }
          case 3: { // is tftp
              if(tftpClient == null) {
                  tftpClient = new TFTPClient();
              }
              return tftpClient;
          }
          case 4: { // is time
              if(timeUDPClient == null) {
                  timeUDPClient = new TimeUDPClient();
              }
              return timeUDPClient;
          }
       }
      return null;
   }
   
   // TCP clients
   private static CharGenTCPClient charGenTCPClient;
   private static DaytimeTCPClient daytimeTCPClient;
   private static EchoTCPClient    echoTCPClient;
   private static FingerClient     fingerClient;
   private static FTPClient        ftpClient;
   private static NNTPClient       nntpClient;
   private static POP3Client       pop3Client;
   private static SMTPClient       smtpClient;
   private static TimeTCPClient    timeTCPClient;
   private static WhoisClient      whoisClient;
   
   // UDP clients
   private static CharGenUDPClient charGenUDPClient;
   private static DaytimeUDPClient daytimeUDPClient;
   private static EchoUDPClient    echoUDPClient;
   private static TFTPClient       tftpClient;
   private static TimeUDPClient    timeUDPClient;

}


/*

* ProtocolHandler.java
*
* Created on December 28, 2003, 1:05 PM
*/

import org.apache.rumons.net.*; import org.apache.rumons.net.ftp.*; import org.apache.rumons.net.nntp.*; import org.apache.rumons.net.pop3.*; import org.apache.rumons.net.smtp.*; import org.apache.rumons.net.tftp.*; import java.util.Date; import java.io.InputStream; import java.io.IOException; import java.net.InetAddress; import java.io.BufferedReader; import java.io.InputStreamReader; /**

* This class handles protocol commands that are either typed in or do not 
* require much manual intervention.
* @author  vgoyal
*/

public class ProtocolHandler {

   public static void handleTCPProtocol(
       int protocolId, SocketClient client, 
       ProtocolRunner runner, String commandString) 
       throws IOException {
       
       switch(protocolId) {
           case 0: { // is chargen
               handleTCPChargen((CharGenTCPClient)client, runner);
               return;
           }
           case 1: { // is daytime
               handleTCPDaytime((DaytimeTCPClient)client, runner);
               return;
           }
           case 2: { // is echo
               handleTCPEcho((EchoTCPClient)client, runner);
               return;
           }  
           case 3: { // is finger
               handleFinger((FingerClient)client, runner);
               return;
           }              
           case 4: { // is ftp
               handleFTP((FTPClient)client, runner, commandString);
               return;
           }
           case 5: { // is nntp
               handleNNTP((NNTPClient)client, runner, commandString);
               return;
           }
           case 6: { // is pop3
               handlePOP3((POP3Client)client, runner, commandString);
               return;
           }
           case 7: { // is smtp
               handleSMTP((SMTPClient)client, runner, commandString);
               return;
           }
           case 8: { // is Time
               handleTCPTime((TimeTCPClient)client, runner);
               return;
           }
           case 9: { // is Whois
               handleWhois((WhoisClient)client, runner);
               return;
           }
       }
   }    
   public static void handleTCPProtocol(
       int protocolId, SocketClient client, ProtocolRunner runner)  
       throws IOException {
           handleTCPProtocol(protocolId, client, runner, null);
   }
   
   public static void handleUDPProtocol(
       int protocolId, DatagramSocketClient client, ProtocolRunner runner)
       throws IOException {
       switch(protocolId) {
           case 0: { // is chargen
               handleUDPChargen((CharGenUDPClient)client, runner);
               return;
           }
           case 1: { // is daytime
               handleUDPDaytime((DaytimeUDPClient)client, runner);
               return;
           }
           case 2: { // is echo
               handleUDPEcho((EchoUDPClient)client, runner);
               return;
           }
           case 4: { // is time
               handleUDPTime((TimeUDPClient)client, runner);
               return;
           }
       }            
   }    
   
   private static void handleUDPChargen(
       CharGenUDPClient client, ProtocolRunner runner) 
       throws IOException {
           
       int packets = 500;        
       while(packets-- > 0) {
           client.send(InetAddress.getByName(runner.getUDPRemoteServer()));
           runner.getUDPServerResponse().append(new String(client.receive()));
       }
   }
   private static void handleUDPDaytime(
       DaytimeUDPClient client, ProtocolRunner runner) 
       throws IOException {            
           runner.getUDPServerResponse().append(
               client.getTime(
                   InetAddress.getByName(runner.getUDPRemoteServer())) 
                   + "\r\n");
   }
   private static void handleUDPEcho(
       EchoUDPClient client, ProtocolRunner runner) 
       throws IOException {
           
       // use the runner to get data from the user to send to echo server
       runner.getSingleValueLabel().setText("Enter echo data (UDP):");
       runner.showDialog(runner.getSingleValueDialog());
   }        
   
   private static void handleUDPTime(
       TimeUDPClient client, ProtocolRunner runner) 
       throws IOException {
           
       long origTime = client.getTime(InetAddress.getByName(
           runner.getUDPRemoteServer()));
       runner.getUDPServerResponse().append(
       "Time returned from server: " +  origTime + "\r\n" +
       "Converted to Date: " + 
       new Date(((origTime) - TimeUDPClient.SECONDS_1900_TO_1970)*1000L));
   }    
   private static void handleTCPChargen(
       CharGenTCPClient client, ProtocolRunner runner) 
       throws IOException {
       // simply grab the resulting inputstream to show the return by the
       // remote server for upto 500 lines
       BufferedReader chargenInput = 
           new BufferedReader(new InputStreamReader(client.getInputStream()));
       
       int lines = 500;
       while(lines-- > 0) {
           runner.getTCPServerResponse().append(
               chargenInput.readLine() + "\r\n");
       }
   }
   
   private static void handleTCPDaytime(
       DaytimeTCPClient client, ProtocolRunner runner) 
       throws IOException {            
           runner.getTCPServerResponse().append(client.getTime() + "\r\n");
   }
   private static void handleTCPTime(
       TimeTCPClient client, ProtocolRunner runner) 
       throws IOException {
           long origTime = client.getTime();
           
           // remember that the long time returned from the server is the 
           // seconds since midnight Jan 1900 and Date in Java is number of
           // seconds since midnight Jan 1970. NET TCPClient provides the time
           // in both formats but you cannot call them both one after another
           // as the internal getDate uses getTime, but the line has already
           // been closed if you have called getTime before.
           runner.getTCPServerResponse().append(
           "Time returned from server: " +  origTime + "\r\n" +
           "Converted to Date: " + 
           new Date(((origTime) - TimeTCPClient.SECONDS_1900_TO_1970)*1000L));
   }
   private static void handleTCPEcho(
       EchoTCPClient client, ProtocolRunner runner) 
       throws IOException {
           
       // use the runner to get data from the user to send to echo server
       runner.getSingleValueLabel().setText("Enter echo data:");
       runner.showDialog(runner.getSingleValueDialog());
   }    
   
   private static void handleFinger(
       FingerClient client, ProtocolRunner runner) 
       throws IOException {
           
       // use the runner to get data from the user to send to echo server
       runner.getSingleValueLabel().setText("Enter query:");
       runner.showDialog(runner.getSingleValueDialog());
   }
   private static void handleWhois(
       WhoisClient client, ProtocolRunner runner) 
       throws IOException {
           
       // use the runner to get data from the user to send to echo server
       runner.getSingleValueLabel().setText("Enter Whois query:");
       runner.showDialog(runner.getSingleValueDialog());
   }    
   
   private static void handleFTP(
       FTPClient client, 
       ProtocolRunner runner, 
       String commandString) 
       throws IOException {
       
       if(commandString == null) { // means just connected        
           
           // check if the server response was valid
           if(!FTPReply.isPositiveCompletion(client.getReplyCode())) {
               runner.handleDisconnect();
               return;
           }
           
       } else { // need to handle a command
           client.sendCommand(commandString);
       }
       
       runner.getTCPServerResponse().append(client.getReplyString());
   }
   private static void handleNNTP(
       NNTPClient client, 
       ProtocolRunner runner, 
       String commandString) 
       throws IOException {
       
       if(commandString == null) { // means just connected        
       
           // check if the server response was valid
           if(!NNTPReply.isPositiveCompletion(client.getReplyCode())) {
               runner.handleDisconnect();
               return;
           }
           
       } else { // need to handle a command
           client.sendCommand(commandString);
       }
       
       runner.getTCPServerResponse().append(client.getReplyString());
   }
   private static void handlePOP3(
       POP3Client client, 
       ProtocolRunner runner, 
       String commandString) 
       throws IOException {
       
       if(commandString == null) { // means just connected 
               return;            
       } else { // need to handle a command
           client.sendCommand(commandString);
       }
       
       runner.getTCPServerResponse().append(client.getReplyString());
   }
   private static void handleSMTP(
       SMTPClient client, 
       ProtocolRunner runner, 
       String commandString) 
       throws IOException {
       
       if(commandString == null) { // means just connected 
           // check if the server response was valid
           if(!SMTPReply.isPositiveCompletion(client.getReplyCode())) {
               runner.handleDisconnect();
               return;
           }
       } else { // need to handle a command
           client.sendCommand(commandString);
       }
       
       runner.getTCPServerResponse().append(client.getReplyString());
   } 
   

}

public class MultiProtocolHandler { }

/*

* Command.java
*
* Created on December 28, 2003, 3:10 PM
*/

import java.util.Vector; import java.util.Iterator; import java.lang.IllegalArgumentException; /**

* A Command is a protocol independent class that implements commands.
* A Command may have arguments, like USER for FTP, or it may be standalone
* as in logout, again for ftp. A command can only be created by calling the
* Command Constructor with the name of the command. To add arguments to the
* command, use the addArgument method.
* @author  vgoyal
*/

public class Command {

   private String commandName;
   
   private Vector commandArguments;
   
   /** Creates a new instance of Command */
   public Command(String commandName) {
       if(commandName == null || commandName.length() == 0) {
           throw new IllegalArgumentException("Invalid Command Name");
       }
       
       this.rumandName = commandName;
   }
   
   public String getCommandName() {
       return this.rumandName;
   }
   
   public void addArgument(String argValue) {
       if(argValue == null || 
          argValue.length() == 0) {
          throw new IllegalArgumentException("Invalid Command Argument");
       }
       
       if(commandArguments == null) commandArguments = new Vector();
       
       commandArguments.add(argValue);
   }
   
   public int getCountCommandArguments() {
       if(commandArguments == null) return 0;
       else return commandArguments.size();
   }
   
   /**
    * Returns space delimited String containing all arguments to this command
    */
   public String getArguments() {
       if(getCountCommandArguments() == 0) return "";
       
       String returnVal = "";
       Iterator itr = commandArguments.iterator();
       while(itr.hasNext()){
           returnVal = returnVal + " " + itr.next();
       }
       
       return returnVal;
   }
   

}

      </source>