Rev 223 | Rev 260 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*******************************************************************************
* File: P3_ServerThread.java
* Author: Ira W. Snyder (devel@irasnyder.com)
* License: GNU General Public License v2
* Class: CS380 - Computer Networking
*
* Assignment: Project #3
* Date Last Modified: 2006-02-15
*
* Purpose: //FIXME
******************************************************************************/
import java.net.*;
import java.io.*;
public class P3_ServerThread extends Thread
{
/* Instance Variables */
private Socket socket = null;
private DHCPTable table = null;
/**
* Method: P3_ServerThread constructor
* Purpose: Construct a new thread that will handle dealing with a
* DHCP client.
*/
public P3_ServerThread (Socket socket, DHCPTable table)
{
super ("P3_ServerThread");
this.socket = socket;
this.table = table;
}
/**
* Method: run
* Purpose: Communicate with the client
*/
public void run ()
{
BufferedReader in = null;
PrintWriter out = null;
// Set up communication to the server
try
{
out = new PrintWriter (socket.getOutputStream(), true);
in = new BufferedReader (
new InputStreamReader (
socket.getInputStream()));
}
catch (IOException ex)
{
ex.printStackTrace();
}
String inputLine, outputLine;
DHCPTableEntry e, expired;
String[] splitInput = new String[1];
// Try to get "req IP <HWAddr>" message
try
{
inputLine = in.readLine();
splitInput = inputLine.split(" ");
}
catch (IOException ex)
{
ex.printStackTrace();
}
// Make sure the request was ok
if (splitInput.length != 3 &&
!splitInput[0].equals("req") &&
!splitInput[1].equals("IP"))
{
System.err.println ("REQ was not the first message!");
out.println ("BAD REQUEST");
return; // Leave uncleanly
}
// Get the next entry in the DHCPTable
e = table.addEntry (splitInput[2]);
// Print out DHCP Server info
System.out.printf ("Client Added: IP=%s -- HW=%s\n", e.getIPAddr(), e.getHWAddr());
// Send out the client's IP Address
out.println ("IPAddr: " + e.getIPAddr());
// wait for timeout of this entry
expired = table.timeoutEntry (e.getIPAddr());
while (expired == null)
{
expired = table.timeoutEntry (e.getIPAddr());
}
// Print DHCP Server info
System.out.printf ("Client Expired: IP=%s -- HW=%s\n",
expired.getIPAddr(), expired.getHWAddr());
// Tell the client that it expired
out.println ("IP Lease Time Expired");
// Try to cleanup sockets
try
{
out.close();
in.close();
socket.close();
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}