String method;
String ct;
String version = "";
File theFile;
long timestamp = System.currentTimeMillis();
Date now=new Date();
try {
PrintStream os = new PrintStream(theConnection.getOutputStream());
DataInputStream is = new DataInputStream(theConnection.getInputStream());
String get = is.readLine();
String agent = null;
StringBuffer sout = new StringBuffer();
// Date has format: Day Mmm dd hh:mm:ss yyyy
StringTokenizer dt = new StringTokenizer( (new Date()).toString() );
String[] da = new String[6];
int i=0;
while (dt.hasMoreElements())
{ da[i] = (String) dt.nextElement(); i++; }
sout.append(theConnection.getInetAddress());
sout.append(" - - [");
sout.append(da[2]);
sout.append("/");
sout.append(da[1]);
sout.append("/");
sout.append(da[4]);
sout.append(":");
sout.append(da[3]);
sout.append("] \"");
sout.append(get.trim());
sout.append("\" ");
StringTokenizer st = new StringTokenizer(get);
method = st.nextToken();
if (method.equals("GET")) {
String file = st.nextToken();
if (file.endsWith("/")) file += indexfile;
ct = guessContentTypeFromName(file);
if (st.hasMoreTokens()) {
version = st.nextToken();
}
// loop through the rest of the input lines
while ((get = is.readLine()) != null) {
get = get.trim();
if (get.toUpperCase().startsWith("USER-AGENT: "))
{ agent=get.substring(12); }
if (get.equals("")) break;
}
try {
theFile = new File(docroot, file.substring(1,file.length()));
FileInputStream fis = new FileInputStream(theFile);
byte[] theData = new byte[(int) theFile.length()];
// need to check the number of bytes read here
fis.read(theData);
fis.close();
if (version.startsWith("HTTP/")) { // send a MIME header
os.print("HTTP/1.0 200 OK\r\n");
os.print("Date: " + now + "\r\n");
os.print("Server: jhttp 1.0\r\n");
os.print("Content-length: " + theData.length + "\r\n");
os.print("Content-type: " + ct + "\r\n\r\n");
} // end try
// send the file
os.write(theData);
os.close();
sout.append("200 ");
sout.append(theData.length);
} // end try
catch (IOException e) { // can't find the file
if (version.startsWith("HTTP/")) { // send a MIME header
os.print("HTTP/1.0 404 File Not Found\r\n");
os.print("Date: " + now + "\r\n");
os.print("Server: jhttp 1.0\r\n");
os.print("Content-type: text/html" + "\r\n\r\n");
}
os.println("<HTML><HEAD><TITLE>File Not Found</TITLE></HEAD>");
os.println("<BODY><H1>HTTP Error 404: File Not Found</H1></BODY></HTML>");
os.close();
sout.append("404 File Not Found");
}
}
else { // method does not equal "GET"
if (version.startsWith("HTTP/")) { // send a MIME header
os.print("HTTP/1.0 501 Not Implemented\r\n");
os.print("Date: " + now + "\r\n");
os.print("Server: jhttp 1.0\r\n");
os.print("Content-type: text/html" + "\r\n\r\n");
}
os.println("<HTML><HEAD><TITLE>Not Implemented</TITLE></HEAD>");
os.println("<BODY><H1>HTTP Error 501: Not Implemented</H1></BODY></HTML>");
os.close();
sout.append("501 Not Implemented");
}
if (agent!=null)
{
sout.append(" ");
sout.append(agent);
}
sout.append(" ");
sout.append( (System.currentTimeMillis()-timestamp) );
sout.append("mS");
System.out.println(sout.toString());
}
catch (IOException e) {
}
try {
theConnection.close();
}
catch (IOException e) {
}