public void processConnection(TcpConnection connection,
Object[] thData) {
Socket socket=null;
// System.out.println("New Connection");
try {
socket=connection.getSocket();
InputStream in=socket.getInputStream();
OutputStream out=socket.getOutputStream();
Request request=new Request();
HttpRequestAdapter reqA=new HttpRequestAdapter();
Response response=new Response();
HttpResponseAdapter resA=new HttpResponseAdapter();
response.setRequest(request);
request.setResponse( response );
request.setRequestAdapter( reqA );
response.setResponseAdapter( resA );
reqA.setSocket( socket );
resA.setOutputStream( out );
reqA.readNextRequest(response );
// XXX temporary fix for getServerName
String hostHeader = request.getHeader("host");
// if it's not null, Request.getServerName() will take care
if (hostHeader == null) {
// XXX
// we need a better solution here
InetAddress localAddress = socket.getLocalAddress();
reqA.setServerName(localAddress.getHostName());
} else {
// strip out the port information
int i = hostHeader.indexOf(":");
if (i > -1)
hostHeader = hostHeader.substring(0, i);
reqA.setServerName(hostHeader);
}
contextM.service( request, response );
try {
InputStream is = socket.getInputStream();
int available = is.available ();
// XXX on JDK 1.3 just socket.shutdownInput () which
// was added just to deal with such issues.
// skip any unread (bogus) bytes
if (available > 1) {
is.skip (available);
}
}catch(NullPointerException npe) {
// do nothing - we are just cleaning up, this is
// a workaround for Netscape \n\r in POST - it is supposed
// to be ignored
} catch(java.net.SocketException ex) {
// do nothing - same
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// recycle kernel sockets ASAP
try { socket.close (); }
catch (IOException e) { /* ignore */ }
}
}
|