private int decodeRequest( Msg msg, MsgContext ep, MessageBytes tmpMB )
throws IOException
{
// FORWARD_REQUEST handler
Request req=(Request)ep.getRequest();
if( req==null ) {
req=new Request();
Response res=new Response();
req.setResponse(res);
ep.setRequest( req );
if( this.getDomain() != null ) {
try {
if( global==null ) {
global=new RequestGroupInfo();
Registry.getRegistry().registerComponent( global,
getDomain(), "GlobalRequestProcessor",
"type=GlobalRequestProcessor,name=jk");
}
RequestInfo rp=req.getRequestProcessor();
rp.setGlobalProcessor(global);
Registry.getRegistry().registerComponent( rp,
getDomain(), "RequestProcessor",
"type=RequestProcessor,name=JkRequest" + count++ );
} catch( Exception ex ) {
log.warn("Error registering request");
}
}
}
MessageBytes tmpMB2 = (MessageBytes)req.getNote(WorkerEnv.SSL_CERT_NOTE);
if(tmpMB2 != null) {
tmpMB2.recycle();
}
req.setStartTime(System.currentTimeMillis());
JkInputStream jkBody=(JkInputStream)ep.getNote( bodyNote );
if( jkBody==null ) {
jkBody=new JkInputStream();
jkBody.setMsgContext( ep );
ep.setNote( bodyNote, jkBody );
}
jkBody.recycle();
// Translate the HTTP method code to a String.
byte methodCode = msg.getByte();
String mName=methodTransArray[(int)methodCode - 1];
req.method().setString(mName);
msg.getBytes(req.protocol());
msg.getBytes(req.requestURI());
msg.getBytes(req.remoteAddr());
msg.getBytes(req.remoteHost());
msg.getBytes(req.serverName());
req.setServerPort(msg.getInt());
boolean isSSL = msg.getByte() != 0;
if( isSSL ) {
// XXX req.setSecure( true );
req.scheme().setString("https");
}
decodeHeaders( ep, msg, req, tmpMB );
decodeAttributes( ep, msg, req, tmpMB );
// if(req.getSecure() ) {
// req.setScheme(req.SCHEME_HTTPS);
// }
// set cookies on request now that we have all headers
req.getCookies().setHeaders(req.getMimeHeaders());
// Check to see if there should be a body packet coming along
// immediately after
int cl=req.getContentLength();
if(cl > 0) {
jkBody.setContentLength( cl );
jkBody.receive();
}
if (log.isTraceEnabled()) {
log.trace(req.toString());
}
return OK;
}