/******************************************************** * Speaker Verification Implemented Security * * CA4 Project * * Written by: Ronan Crowley (97084603) * * and Paul Connolly (97307599) * ********************************************************/ import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Client extends JFrame { BorderLayout Layout1; Socket client; private static String IPAddress; ObjectOutputStream output; ObjectInputStream input; String message; private JTextField jTextField1 = new JTextField(); private JTextField jTextField2 = new JTextField(); private JTextField jTextField3 = new JTextField(); private JButton jLogonButton = new JButton(); private JButton jNewButton = new JButton(); private JButton jThresButton = new JButton(); private JButton jQuitButton = new JButton(); Icon sv = new ImageIcon("sv.gif"); //======================================================================== /** Client constructor -> Sets up GUI **/ public Client() { super ("Client "); //Menu Bar...... JMenuBar jMenuBar1 = new JMenuBar(); //File Menu....... JMenu jMenuFile = new JMenu(); jMenuFile.setText("File"); JMenuItem jMenuFileExit = new JMenuItem(); jMenuFileExit.setText("Exit"); jMenuFileExit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jMenuFileExit_actionPerformed(e); } }); //Help Menu....... JMenu jMenuHelp = new JMenu(); jMenuHelp.setText("Help"); JMenuItem jMenuHelpAbout = new JMenuItem(); jMenuHelpAbout.setText("About"); jMenuHelpAbout.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jMenuHelpAbout_actionPerformed(e); } }); //Setup pane Container myC = getContentPane(); GridLayout gridLayout1; gridLayout1 = new GridLayout( 4, 3 ); myC.setLayout(gridLayout1); //Replace the JavaCup icon in upper-left with our image. setIconImage(Toolkit.getDefaultToolkit().createImage(Client.class.getResource("sv.gif"))); //Setup Window Menu Bar and Menu Items jMenuBar1.add(jMenuFile); jMenuBar1.add(jMenuHelp); jMenuFile.add(jMenuFileExit); jMenuHelp.add(jMenuHelpAbout); setJMenuBar(jMenuBar1); //Add UserName field...... jTextField1.setBorder(BorderFactory.createRaisedBevelBorder()); jTextField1.setText("Enter User Name Here"); jTextField1.setEnabled(true); jTextField1.select(0, 20); myC.add(jTextField1); //Add Logon button ! jLogonButton.setText("Logon"); jLogonButton.setEnabled(false); jLogonButton.setToolTipText("Logon once User has been created and Threshold set."); myC.add(jLogonButton); jLogonButton.setMnemonic('l'); jLogonButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jLogonButton_actionPerformed(e); } }); //Add UserName field...... jTextField2.setBorder(BorderFactory.createRaisedBevelBorder()); jTextField2.setText("Enter User Name Here"); jTextField2.setEnabled(true); jTextField2.select(0, 20); myC.add(jTextField2); //Add New User button ! jNewButton.setText("New User"); jNewButton.setEnabled(false); jNewButton.setToolTipText("Create a New User in the System"); myC.add(jNewButton); jNewButton.setMnemonic('n'); jNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jNewButton_actionPerformed(e); } }); //Add UserName field...... jTextField3.setBorder(BorderFactory.createRaisedBevelBorder()); jTextField3.setText("Enter User Name Here"); jTextField3.setEnabled(true); jTextField3.select(0, 20); myC.add(jTextField3); //Add New User button ! jThresButton.setText("Set Threshold"); jThresButton.setEnabled(false); jThresButton.setToolTipText("Once New User Added, press here to set threshold of acceptance."); myC.add(jThresButton); jThresButton.setMnemonic('s'); jThresButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jThresButton_actionPerformed(e); } }); //Add Quit button ! jQuitButton.setText("QUIT"); jQuitButton.setEnabled(false); jQuitButton.setToolTipText("Exit Speaker Verification System."); myC.add(jQuitButton); jQuitButton.setMnemonic('q'); jQuitButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jQuitButton_actionPerformed(e); } }); setTitle("Speaker Verification Implemented Security"); setLocation(150, 150); setSize(400, 200); show(); } //====================================================================== /** Initial Client configuration and Server Connection **/ public void runClient() { try { System.out.println("Attempting connection\n"); client = new Socket(InetAddress.getByName(IPAddress),5000); System.out.println("Connected to : "+ client.getInetAddress().getHostName()); output = new ObjectOutputStream(client.getOutputStream()); output.flush(); input= new ObjectInputStream(client.getInputStream() ); System.out.println("\nGot I/O streams\n"); jLogonButton.setEnabled(true); jNewButton.setEnabled(true); jThresButton.setEnabled(true); jQuitButton.setEnabled(true); } catch (EOFException eof) { System.out.println("Server terminated connection"); } catch ( IOException e) { e.printStackTrace(); } } //==================================================================== /** Kills Server Connection **/ public void stopClient() { try { output.close(); client.close(); } catch (EOFException eof) { System.out.println("Server terminated connection"); } catch ( IOException e) { e.printStackTrace(); } } //========================================================= /** Method for Sending a String to the Server @param s The String to Send **/ private void sendString(String s) { try { output.writeObject(s); output.flush(); } catch (EOFException eof) { System.out.println("Server terminated connection"); } catch ( IOException e ) { e.printStackTrace(); } } // ******** Menu Commands ********* // /** File -> Exit (Stops the Client and Shuts down the Application) **/ public void jMenuFileExit_actionPerformed(ActionEvent e) { stopClient(); System.exit(0); } /** Help -> About (Shows the Project About* Box) *=Aboot Box in Canada **/ public void jMenuHelpAbout_actionPerformed(ActionEvent e) { AboutBox abt = new AboutBox(this); Dimension boxSize = abt.getPreferredSize(); Dimension frmSize = getSize(); Point loc = getLocation(); abt.setLocation((frmSize.width - boxSize.width) / 2 + loc.x, (frmSize.height - boxSize.height) / 2 + loc.y); abt.setModal(true); abt.show(); } //============================================================================== /** Logon Button -> Ensures user exists, recieves randomly generated test case and presents a test window. **/ public void jLogonButton_actionPerformed(ActionEvent e) { if (!jTextField1.getText().equals("Enter User Name Here"))// && (t.exists())) { sendString("#"+jTextField1.getText()); // The leading # indicates that this is a logon Process. } try{ //Recieve Random Text / No user message message=(String) input.readObject(); if (message.equals("X")){ // "X" message from Server indicates user does not exist. //Error Message - No such user JOptionPane.showMessageDialog(this, "Invalid Username.\n\nPlease check your details and re-try.", "Invalid Username", 1, sv); } else if (message.equals("NO_T")) { //Error Message - No Threshold set JOptionPane.showMessageDialog(this, "Threshold for user: "+jTextField1.getText()+ " has not been set.\n\nPlease select the \"Set Threshold\" option before logging in.", "No Threshold Set", 1, sv); } else //message = "X" { System.out.println("Randomly Generated text = "+message); //Show the Logon Process Dialoude Record rec = new Record(input, output, message, this, IPAddress, jTextField1.getText()); rec.setLocation(100, 100); rec.show(); } } catch (ClassNotFoundException cnfex){ System.out.println("Unknown object type received"); } catch (EOFException eof) { System.out.println("Server terminated connection"); } catch ( IOException io) { io.printStackTrace(); } } /** New User Button -> Ensures user does not exist already and then presents a new user training window. **/ public void jNewButton_actionPerformed(ActionEvent e) { boolean nospace = true; for (int c=0; c<jTextField2.getText().length(); c++) { if (jTextField2.getText().charAt(c)==' ') { nospace= false; } } if (!nospace) { //Error Message JOptionPane.showMessageDialog(this, "Username cannot contain spaces.\n\nPlease try another.", "Space's not allowed", 1, sv); } else if ((!jTextField2.getText().equals("Enter User Name Here")) && (nospace) ) { sendString("*"+jTextField2.getText()); // The leading * indicates that this is a create new user Process. try { message=(String) input.readObject(); if (!message.equals("Y")){ // "Y" message from Server indicates user already exists. //Present the New User Screen NewUser nu = new NewUser(jTextField2.getText(), this); nu.show(); } else { //Error Message JOptionPane.showMessageDialog(this, "Username already exists.\n\nPlease try another.", "User already Exists", 1, sv); } } catch (ClassNotFoundException cnfex){ System.out.println("Unknown object type received"); } catch (EOFException eof) { System.out.println("Server terminated connection"); } catch ( IOException io) { io.printStackTrace(); } } } /** Threshold Button -> Ensures user exists already and then presents a new user threshold creation window. **/ public void jThresButton_actionPerformed(ActionEvent e) { if (!jTextField3.getText().equals("Enter User Name Here")) { // ! indicates Threshold setting for user. sendString("!"+jTextField3.getText()); try { message=(String) input.readObject(); if (message.equals("NTH")){ //Error message System.out.println("User "+jTextField3.getText()+" does not exist in the system."); JOptionPane.showMessageDialog(this, "Threshold cannot be set at this time.\n\nUser: "+jTextField3.getText()+ " does not exist in the system !\nPlease create a new user (if necessary).", "Threshold cannot be set", 1, sv); } else if (message.equals("TH_AL")) { //Error message System.out.println("User "+jTextField3.getText()+" has already set threshold."); JOptionPane.showMessageDialog(this, "Threshold cannot be set at this time.\n\nUser: "+jTextField3.getText()+ " has already set a threshold !", "Threshold cannot be set", 1, sv); } else //message.equals("Z") { //Present the create threshold screen Threshold th = new Threshold(input, output, jTextField3.getText(), this); th.show(); } } catch (ClassNotFoundException cnfex){ System.out.println("Unknown object type received"); } catch (EOFException eof) { System.out.println("Server terminated connection"); } catch ( IOException io) { io.printStackTrace(); } } } /** Quit Button-> Sends the "TERMINATE" String which closes the Client/Server connection. **/ public void jQuitButton_actionPerformed(ActionEvent e) { //SEND: "TERMINATE" String to kill connection ! sendString("TERMINATE"); dispose(); System.exit(0); } /** Main method. Calls the Client constructor and listens for the window closing, upon which it shuts down the application. **/ public static void main(String args[]) { //Constructor ! Client app = new Client(); if (args.length==0){ System.out.println("\nUSAGE: java Client IPAddress\n"); System.out.println("Assuming Default Server Address"); IPAddress = "136.206.18.129"; } else { IPAddress = args[0]; } app.addWindowListener( new WindowAdapter() { public void windowClosing (WindowEvent e) { System.exit(0); } } ); app.runClient(); } }