*/
public void allocateRequestResponse(Socket socket, InputStream inSocket,
OutputStream outSocket, RequestHandlerThread handler,
boolean iAmFirst) throws SocketException, IOException {
WinstoneRequest req = this.objectPool.getRequestFromPool();
WinstoneResponse rsp = this.objectPool.getResponseFromPool();
rsp.setRequest(req);
req.setHostGroup(this.hostGroup);
// rsp.updateContentTypeHeader("text/html");
if (iAmFirst || (KEEP_ALIVE_TIMEOUT == -1))
socket.setSoTimeout(CONNECTION_TIMEOUT);
else
socket.setSoTimeout(KEEP_ALIVE_TIMEOUT);
Ajp13IncomingPacket headers = null;
try {
headers = new Ajp13IncomingPacket(inSocket, handler);
} catch (InterruptedIOException err) {
// keep alive timeout ? ignore if not first
if (iAmFirst) {
throw err;
} else {
deallocateRequestResponse(handler, req, rsp, null, null);
return;
}
} finally {
try {socket.setSoTimeout(CONNECTION_TIMEOUT);} catch (Throwable err) {}
}
if (headers.getPacketLength() > 0) {
headers.parsePacket("8859_1");
parseSocketInfo(headers, req);
req.parseHeaders(Arrays.asList(headers.getHeaders()));
String servletURI = parseURILine(headers, req, rsp);
req.setAttribute(TEMPORARY_URL_STASH, servletURI);
// If content-length present and non-zero, download the other
// packets
WinstoneInputStream inData = null;
int contentLength = req.getContentLength();
if (contentLength > 0) {
byte bodyContent[] = new byte[contentLength];
int position = 0;
while (position < contentLength) {
outSocket.write(getBodyRequestPacket(Math.min(contentLength
- position, 8184)));
position = getBodyResponsePacket(inSocket, bodyContent,
position);
Logger.log(Logger.FULL_DEBUG, AJP_RESOURCES,
"Ajp13Listener.ReadBodyProgress", new String[] {
"" + position, "" + contentLength });
}
inData = new WinstoneInputStream(bodyContent);
inData.setContentLength(contentLength);
} else
inData = new WinstoneInputStream(new byte[0]);
req.setInputStream(inData);
// Build input/output streams, plus request/response
WinstoneOutputStream outData = new Ajp13OutputStream(socket
.getOutputStream(), "8859_1");
outData.setResponse(rsp);
rsp.setOutputStream(outData);
// Set the handler's member variables so it can execute the servlet
handler.setRequest(req);
handler.setResponse(rsp);
handler.setInStream(inData);