costin 01/11/21 12:49:55
Modified: jk/java/org/apache/ajp Ajp13.java Ajp14.java AjpHandler.java
NegociationHandler.java RequestHandler.java
jk/java/org/apache/ajp/test TestAjp13.java
jk/java/org/apache/ajp/tomcat33 Ajp14Interceptor.java
Log:
Removing a lot of duplicated code, update everything.
I tested with both 4.0.1 and 3.3 - it seems to work fine with both 13 and 14,
but I probably left few debug statements in.
This is not 'complete', there are still many things to clean up and make
sure we can use mod_jk ajp14 with both 13 and 14 servers and to start
integrating the 1.4 callbacks into 4.0.1.
Based on the feedback on the 'jk_handler' proposal, the code will be greatly
simplified and enhanced in the next few weeks.
Revision Changes Path
1.19 +118 -622 jakarta-tomcat-connectors/jk/java/org/apache/ajp/Ajp13.java
Index: Ajp13.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/ajp/Ajp13.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- Ajp13.java 2001/10/10 06:35:22 1.18
+++ Ajp13.java 2001/11/21 20:49:54 1.19
@@ -103,15 +103,8 @@
public static final int MAX_SEND_SIZE = MAX_PACKET_SIZE - H_SIZE - 4;
// Prefix codes for message types from server to container
- public static final byte JK_AJP13_FORWARD_REQUEST = 2;
public static final byte JK_AJP13_SHUTDOWN = 7;
- // Prefix codes for message types from container to server
- public static final byte JK_AJP13_SEND_BODY_CHUNK = 3;
- public static final byte JK_AJP13_SEND_HEADERS = 4;
- public static final byte JK_AJP13_END_RESPONSE = 5;
- public static final byte JK_AJP13_GET_BODY_CHUNK = 6;
-
// Error code for Ajp13
public static final int JK_AJP13_BAD_HEADER = -100;
public static final int JK_AJP13_NO_HEADER = -101;
@@ -120,109 +113,18 @@
public static final int JK_AJP13_BAD_BODY = -104;
public static final int JK_AJP13_INCOMPLETE_BODY = -105;
- // Integer codes for common response header strings
- public static final int SC_RESP_CONTENT_TYPE = 0xA001;
- public static final int SC_RESP_CONTENT_LANGUAGE = 0xA002;
- public static final int SC_RESP_CONTENT_LENGTH = 0xA003;
- public static final int SC_RESP_DATE = 0xA004;
- public static final int SC_RESP_LAST_MODIFIED = 0xA005;
- public static final int SC_RESP_LOCATION = 0xA006;
- public static final int SC_RESP_SET_COOKIE = 0xA007;
- public static final int SC_RESP_SET_COOKIE2 = 0xA008;
- public static final int SC_RESP_SERVLET_ENGINE = 0xA009;
- public static final int SC_RESP_STATUS = 0xA00A;
- public static final int SC_RESP_WWW_AUTHENTICATE = 0xA00B;
-
- // Integer codes for common (optional) request attribute names
- public static final byte SC_A_CONTEXT = 1; // XXX Unused
- public static final byte SC_A_SERVLET_PATH = 2; // XXX Unused
- public static final byte SC_A_REMOTE_USER = 3;
- public static final byte SC_A_AUTH_TYPE = 4;
- public static final byte SC_A_QUERY_STRING = 5;
- public static final byte SC_A_JVM_ROUTE = 6;
- public static final byte SC_A_SSL_CERT = 7;
- public static final byte SC_A_SSL_CIPHER = 8;
- public static final byte SC_A_SSL_SESSION = 9;
- public static final byte SC_A_SSL_KEYSIZE = 11;
-
- // Used for attributes which are not in the list above
- public static final byte SC_A_REQ_ATTRIBUTE = 10;
-
- // Terminates list of attributes
- public static final byte SC_A_ARE_DONE = (byte)0xFF;
-
- // Translates integer codes to names of HTTP methods
- public static final String []methodTransArray = {
- "OPTIONS",
- "GET",
- "HEAD",
- "POST",
- "PUT",
- "DELETE",
- "TRACE",
- "PROPFIND",
- "PROPPATCH",
- "MKCOL",
- "COPY",
- "MOVE",
- "LOCK",
- "UNLOCK",
- "ACL",
- "REPORT",
- "VERSION-CONTROL",
- "CHECKIN",
- "CHECKOUT",
- "UNCHECKOUT",
- "SEARCH"
- };
-
- // id's for common request headers
- public static final int SC_REQ_ACCEPT = 1;
- public static final int SC_REQ_ACCEPT_CHARSET = 2;
- public static final int SC_REQ_ACCEPT_ENCODING = 3;
- public static final int SC_REQ_ACCEPT_LANGUAGE = 4;
- public static final int SC_REQ_AUTHORIZATION = 5;
- public static final int SC_REQ_CONNECTION = 6;
- public static final int SC_REQ_CONTENT_TYPE = 7;
- public static final int SC_REQ_CONTENT_LENGTH = 8;
- public static final int SC_REQ_COOKIE = 9;
- public static final int SC_REQ_COOKIE2 = 10;
- public static final int SC_REQ_HOST = 11;
- public static final int SC_REQ_PRAGMA = 12;
- public static final int SC_REQ_REFERER = 13;
- public static final int SC_REQ_USER_AGENT = 14;
-
- // Translates integer codes to request header names
- public static final String []headerTransArray = {
- "accept",
- "accept-charset",
- "accept-encoding",
- "accept-language",
- "authorization",
- "connection",
- "content-type",
- "content-length",
- "cookie",
- "cookie2",
- "host",
- "pragma",
- "referer",
- "user-agent"
- };
-
-
// ============ Instance Properties ====================
OutputStream out;
InputStream in;
// Buffer used of output body and headers
- Ajp13Packet outBuf = new Ajp13Packet( MAX_PACKET_SIZE );
+ public Ajp13Packet outBuf = new Ajp13Packet( MAX_PACKET_SIZE );
// Buffer used for input body
Ajp13Packet inBuf = new Ajp13Packet( MAX_PACKET_SIZE );
// Buffer used for request head ( and headers )
Ajp13Packet hBuf=new Ajp13Packet( MAX_PACKET_SIZE );
-
+
// Holds incoming reads of request body data (*not* header data)
byte []bodyBuff = new byte[MAX_READ_SIZE];
@@ -230,10 +132,14 @@
int pos; // Current read position within that buffer
boolean end_of_stream; // true if we've received an empty packet
-
+
+ // Required handler - essential request processing
+ public RequestHandler reqHandler=new RequestHandler();
+
public Ajp13() {
super();
initBuf();
+ reqHandler.init( this );
}
/** Will be overriden
@@ -269,6 +175,37 @@
pos = 0;
}
+ // -------------------- Handlers registry --------------------
+
+ static final int MAX_HANDLERS=32;
+ static final int RESERVED=16; // reserved names, backward compat
+
+ // Note that we don't make distinction between in and out
+ // messages ( i.e. one id is used only in one direction )
+ AjpHandler handlers[]=new AjpHandler[MAX_HANDLERS];
+ String handlerName[]=new String[MAX_HANDLERS];
+ int currentId=RESERVED;
+
+ public int registerMessageType( int id, String name, AjpHandler h,
+ String sig[] )
+ {
+ if( id < 0 ) {
+ // try to find it by name
+ for( int i=0; i< handlerName.length; i++ )
+ if( name.equals( handlerName[i] ) ) return i;
+ handlerName[currentId]=name;
+ handlers[currentId]=h;
+ currentId++;
+ return currentId;
+ }
+ // fixed id
+ handlerName[id]=name;
+ handlers[id]=h;
+ return id;
+ }
+
+ // -------------------- Main dispatch --------------------
+
/**
* Read a new packet from the web server and decode it. If it's a
* forwarded request, store its properties in the passed-in AjpRequest
@@ -295,543 +232,99 @@
try {
err = receive(hBuf);
} catch (IOException ioe) {
+ if(debug >0 ) logger.log( "IOException receiving message ");
return -1; // Indicate it's a disconnection from the remote end
}
if(err < 0) {
+ if(debug >0 ) logger.log( "Error receiving message ");
return 500;
}
int type = (int)hBuf.getByte();
+ // System.out.println("XXX " + this );
+ return handleMessage( type, hBuf, req );
+ }
+
+ /** Override for ajp14, temporary
+ */
+ public int handleMessage( int type, Ajp13Packet hBuf, AjpRequest req )
+ throws IOException
+ {
switch(type) {
- case JK_AJP13_FORWARD_REQUEST:
- return decodeRequest(req, hBuf);
+ case RequestHandler.JK_AJP13_FORWARD_REQUEST:
+ return reqHandler.decodeRequest(this, hBuf, req);
case JK_AJP13_SHUTDOWN:
return -2;
}
return 200; // XXX This is actually an error condition
}
-
- /**
- * Try to decode Headers - AJP13 will do nothing but descendant will
- * override this method to handle new headers (ie SSL_KEY_SIZE in AJP14)
- */
- int decodeMoreHeaders(AjpRequest req, byte attribute, Ajp13Packet msg)
- {
- return 500;
- }
-
- /**
- * Parse a FORWARD_REQUEST packet from the web server and store its
- * properties in the passed-in request object.
- *
- * @param req An empty (newly-recycled) request object.
- * @param msg Holds the packet which has just been sent by the web
- * server, with its read position just past the packet header (which in
- * this case includes the prefix code for FORWARD_REQUEST).
- *
- * @return 200 in case of a successful decoduing, 500 in case of error.
- */
- protected int decodeRequest(AjpRequest req, Ajp13Packet msg)
- throws IOException
- {
-
- if (debug > 0) {
- logger.log("decodeRequest()");
- }
-
- // XXX Awful return values
-
- boolean isSSL = false;
-
- // Translate the HTTP method code to a String.
- byte methodCode = msg.getByte();
- req.method().setString(methodTransArray[(int)methodCode - 1]);
-
- msg.getMessageBytes(req.protocol());
- msg.getMessageBytes(req.requestURI());
-
- msg.getMessageBytes(req.remoteAddr());
- msg.getMessageBytes(req.remoteHost());
- msg.getMessageBytes(req.serverName());
- req.setServerPort(msg.getInt());
-
- isSSL = msg.getBool();
-
- // Decode headers
- MimeHeaders headers = req.headers();
- int hCount = msg.getInt();
- for(int i = 0 ; i < hCount ; i++) {
- String hName = null;
-
- // Header names are encoded as either an integer code starting
- // with 0xA0, or as a normal string (in which case the first
- // two bytes are the length).
- int isc = msg.peekInt();
- int hId = isc & 0xFF;
-
- MessageBytes vMB=null;
- isc &= 0xFF00;
- if(0xA000 == isc) {
- msg.getInt(); // To advance the read position
- hName = headerTransArray[hId - 1];
- vMB= headers.addValue(hName);
- } else {
- // XXX Not very elegant
- vMB = msg.addHeader(headers);
- if (vMB == null) {
- return 500; // wrong packet
- }
- }
-
- msg.getMessageBytes(vMB);
-
- // set content length, if this is it...
- if (hId == SC_REQ_CONTENT_LENGTH) {
- int contentLength = (vMB == null) ? -1 : vMB.getInt();
- req.setContentLength(contentLength);
- } else if (hId == SC_REQ_CONTENT_TYPE) {
- ByteChunk bchunk = vMB.getByteChunk();
- req.contentType().setBytes(bchunk.getBytes(),
- bchunk.getOffset(),
- bchunk.getLength());
- }
- }
- byte attributeCode;
- for(attributeCode = msg.getByte() ;
- attributeCode != SC_A_ARE_DONE ;
- attributeCode = msg.getByte()) {
- switch(attributeCode) {
- case SC_A_CONTEXT :
- break;
-
- case SC_A_SERVLET_PATH :
- break;
-
- case SC_A_REMOTE_USER :
- msg.getMessageBytes(req.remoteUser());
- break;
-
- case SC_A_AUTH_TYPE :
- msg.getMessageBytes(req.authType());
- break;
-
- case SC_A_QUERY_STRING :
- msg.getMessageBytes(req.queryString());
- break;
-
- case SC_A_JVM_ROUTE :
- msg.getMessageBytes(req.jvmRoute());
- break;
-
- case SC_A_SSL_CERT :
- isSSL = true;
- // Transform the string into certificate.
- String certString = msg.getString();
- byte[] certData = certString.getBytes();
- ByteArrayInputStream bais = new ByteArrayInputStream(certData);
-
- // Fill the first element.
- X509Certificate jsseCerts[] = null;
- try {
- CertificateFactory cf =
- CertificateFactory.getInstance("X.509");
- X509Certificate cert = (X509Certificate)
- cf.generateCertificate(bais);
- jsseCerts = new X509Certificate[1];
- jsseCerts[0] = cert;
- } catch(java.security.cert.CertificateException e) {
- logger.log("Certificate convertion failed" + e );
- }
-
- req.setAttribute("javax.servlet.request.X509Certificate",
- jsseCerts);
- break;
-
- case SC_A_SSL_CIPHER :
- isSSL = true;
- req.setAttribute("javax.servlet.request.cipher_suite",
- msg.getString());
- break;
-
- case SC_A_SSL_SESSION :
- isSSL = true;
- req.setAttribute("javax.servlet.request.ssl_session",
- msg.getString());
- break;
-
- case SC_A_REQ_ATTRIBUTE :
- req.setAttribute(msg.getString(),
- msg.getString());
- break;
-
- case SC_A_SSL_KEYSIZE :
- req.setAttribute("javax.servlet.request.key_size",
- new Integer (msg.getInt()));
- break;
- default:
- if (decodeMoreHeaders(req, attributeCode, msg) != 500)
- break;
+ // ==================== Servlet Input Support =================
- return 500;
- }
- }
+ /** @deprecated -- Will use reqHandler, make sure nobody else
+ calls this */
- if(isSSL) {
- req.setScheme(req.SCHEME_HTTPS);
- req.setSecure(true);
- }
-
- // set cookies on request now that we have all headers
- req.cookies().setHeaders(req.headers());
-
- // Check to see if there should be a body packet coming along
- // immediately after
- if(req.getContentLength() != 0) {
-
- /* Read present data */
- int err = receive(inBuf);
- if(err < 0) {
- return 500;
- }
-
- blen = inBuf.peekInt();
- pos = 0;
- inBuf.getBytes(bodyBuff);
- }
- if (debug > 5) {
- logger.log(req.toString());
- }
-
- return 200; // Success
- }
-
- // ==================== Servlet Input Support =================
-
public int available() throws IOException {
- if (debug > 0) {
- logger.log("available()");
- }
-
- if (pos >= blen) {
- if( ! refillReadBuffer()) {
- return 0;
- }
- }
- return blen - pos;
+ return reqHandler.available(this);
}
- /**
- * Return the next byte of request body data (to a servlet).
- *
- * @see Request#doRead
- */
public int doRead() throws IOException
{
- if (debug > 0) {
- logger.log("doRead()");
- }
-
- if(pos >= blen) {
- if( ! refillReadBuffer()) {
- return -1;
- }
- }
- return (char) bodyBuff[pos++];
+ return reqHandler.doRead( this );
}
- /**
- * Store a chunk of request data into the passed-in byte buffer.
- *
- * @param b A buffer to fill with data from the request.
- * @param off The offset in the buffer at which to start filling.
- * @param len The number of bytes to copy into the buffer.
- *
- * @return The number of bytes actually copied into the buffer, or -1
- * if the end of the stream has been reached.
- *
- * @see Request#doRead
- */
public int doRead(byte[] b, int off, int len) throws IOException
{
- if (debug > 0) {
- logger.log("doRead(byte[], int, int)");
- }
-
- if(pos >= blen) {
- if( ! refillReadBuffer()) {
- return -1;
- }
- }
-
- if(pos + len <= blen) { // Fear the off by one error
- // Sanity check b.length > off + len?
- System.arraycopy(bodyBuff, pos, b, off, len);
- pos += len;
- return len;
- }
-
- // Not enough data (blen < pos + len) or chunked encoded
- int toCopy = len;
- while(toCopy > 0) {
- int bytesRemaining = blen - pos;
- if(bytesRemaining < 0)
- bytesRemaining = 0;
- int c = bytesRemaining < toCopy ? bytesRemaining : toCopy;
-
- System.arraycopy(bodyBuff, pos, b, off, c);
-
- toCopy -= c;
-
- off += c;
- pos += c; // In case we exactly consume the buffer
-
- if(toCopy > 0)
- if( ! refillReadBuffer()) { // Resets blen and pos
- break;
- }
- }
-
- return len - toCopy;
+ return reqHandler.doRead( this, b, off, len );
}
- /**
- * Get more request body data from the web server and store it in the
- * internal buffer.
- *
- * @return true if there is more data, false if not.
- */
private boolean refillReadBuffer() throws IOException
{
- if (debug > 0) {
- logger.log("refillReadBuffer()");
- }
-
- // If the server returns an empty packet, assume that that end of
- // the stream has been reached (yuck -- fix protocol??).
- if (end_of_stream) {
- return false;
- }
-
- // Why not use outBuf??
- inBuf.reset();
- inBuf.appendByte(JK_AJP13_GET_BODY_CHUNK);
- inBuf.appendInt(MAX_READ_SIZE);
- send(inBuf);
-
- int err = receive(inBuf);
- if(err < 0) {
- throw new IOException();
- }
-
- // No data received.
- if( inBuf.getLen() == 0 ) {
- pos=0;
- blen=0;
- end_of_stream = true;
- return false;
- }
-
- blen = inBuf.peekInt();
- pos = 0;
- inBuf.getBytes(bodyBuff);
-
- return (blen > 0);
+ return reqHandler.refillReadBuffer(this);
}
- // ==================== Servlet Output Support =================
-
- /**
- */
public void beginSendHeaders(int status,
String statusMessage,
int numHeaders) throws IOException {
+ reqHandler.beginSendHeaders( this, outBuf,
+ status, statusMessage,
+ numHeaders);
+ }
- if (debug > 0) {
- logger.log("sendHeaders()");
- }
-
- // XXX if more headers that MAX_SIZE, send 2 packets!
-
- outBuf.reset();
- outBuf.appendByte(JK_AJP13_SEND_HEADERS);
-
- if (debug > 0) {
- logger.log("status is: " + status +
- "(" + statusMessage + ")");
- }
-
- // set status code and message
- outBuf.appendInt(status);
- outBuf.appendString(statusMessage);
-
- // write the number of headers...
- outBuf.appendInt(numHeaders);
- }
-
public void sendHeader(String name, String value) throws IOException {
- int sc = headerNameToSc(name);
- if(-1 != sc) {
- outBuf.appendInt(sc);
- } else {
- outBuf.appendString(name);
- }
- outBuf.appendString(value);
+ reqHandler.sendHeader( outBuf, name, value );
}
public void endSendHeaders() throws IOException {
- outBuf.end();
- send(outBuf);
+ reqHandler.endSendHeaders(this, outBuf);
}
- /**
- * Send the HTTP headers back to the web server and on to the browser.
- *
- * @param status The HTTP status code to send.
- * @param headers The set of all headers.
- */
public void sendHeaders(int status, MimeHeaders headers)
- throws IOException {
- sendHeaders(status, HttpMessages.getMessage(status), headers);
+ throws IOException
+ {
+ reqHandler.sendHeaders(this, outBuf, status,
+ HttpMessages.getMessage(status),
+ headers);
}
-
- /**
- * Send the HTTP headers back to the web server and on to the browser.
- *
- * @param status The HTTP status code to send.
- * @param statusMessage the HTTP status message to send.
- * @param headers The set of all headers.
- */
- public void sendHeaders(int status, String statusMessage, MimeHeaders headers)
- throws IOException {
- // XXX if more headers that MAX_SIZE, send 2 packets!
-
- outBuf.reset();
- outBuf.appendByte(JK_AJP13_SEND_HEADERS);
- outBuf.appendInt(status);
-
- outBuf.appendString(statusMessage);
-
- int numHeaders = headers.size();
- outBuf.appendInt(numHeaders);
-
- for( int i=0 ; i < numHeaders ; i++ ) {
- String headerName = headers.getName(i).toString();
- int sc = headerNameToSc(headerName);
- if(-1 != sc) {
- outBuf.appendInt(sc);
- } else {
- outBuf.appendString(headerName);
- }
- outBuf.appendString(headers.getValue(i).toString() );
- }
- outBuf.end();
- send(outBuf);
- }
-
- /**
- * Translate an HTTP response header name to an integer code if
- * possible. Case is ignored.
- *
- * @param name The name of the response header to translate.
- *
- * @return The code for that header name, or -1 if no code exists.
- */
- protected int headerNameToSc(String name)
- {
- switch(name.charAt(0)) {
- case 'c':
- case 'C':
- if(name.equalsIgnoreCase("Content-Type")) {
- return SC_RESP_CONTENT_TYPE;
- } else if(name.equalsIgnoreCase("Content-Language")) {
- return SC_RESP_CONTENT_LANGUAGE;
- } else if(name.equalsIgnoreCase("Content-Length")) {
- return SC_RESP_CONTENT_LENGTH;
- }
- break;
-
- case 'd':
- case 'D':
- if(name.equalsIgnoreCase("Date")) {
- return SC_RESP_DATE;
- }
- break;
-
- case 'l':
- case 'L':
- if(name.equalsIgnoreCase("Last-Modified")) {
- return SC_RESP_LAST_MODIFIED;
- } else if(name.equalsIgnoreCase("Location")) {
- return SC_RESP_LOCATION;
- }
- break;
-
- case 's':
- case 'S':
- if(name.equalsIgnoreCase("Set-Cookie")) {
- return SC_RESP_SET_COOKIE;
- } else if(name.equalsIgnoreCase("Set-Cookie2")) {
- return SC_RESP_SET_COOKIE2;
- }
- break;
-
- case 'w':
- case 'W':
- if(name.equalsIgnoreCase("WWW-Authenticate")) {
- return SC_RESP_WWW_AUTHENTICATE;
- }
- break;
- }
-
- return -1;
+ public void sendHeaders(int status, String statusMessage,
+ MimeHeaders headers)
+ throws IOException
+ {
+ reqHandler.sendHeaders( this, outBuf, status,
+ statusMessage, headers );
}
- /**
- * Signal the web server that the servlet has finished handling this
- * request, and that the connection can be reused.
- */
public void finish() throws IOException {
- if (debug > 0) {
- logger.log("finish()");
- }
-
- outBuf.reset();
- outBuf.appendByte(JK_AJP13_END_RESPONSE);
- outBuf.appendBool(true); // Reuse this connection
- outBuf.end();
- send(outBuf);
+ reqHandler.finish(this, outBuf );
}
- /**
- * Send a chunk of response body data to the web server and on to the
- * browser.
- *
- * @param b A huffer of bytes to send.
- * @param off The offset into the buffer from which to start sending.
- * @param len The number of bytes to send.
- */
public void doWrite(byte b[], int off, int len) throws IOException {
- if (debug > 0) {
- logger.log("doWrite(byte[], " + off + ", " + len + ")");
- }
-
- int sent = 0;
- while(sent < len) {
- int to_send = len - sent;
- to_send = to_send > MAX_SEND_SIZE ? MAX_SEND_SIZE : to_send;
-
- outBuf.reset();
- outBuf.appendByte(JK_AJP13_SEND_BODY_CHUNK);
- outBuf.appendBytes(b, off + sent, to_send);
- send(outBuf);
- sent += to_send;
- }
+ reqHandler.doWrite( this, outBuf, b, off, len );
}
@@ -901,49 +394,49 @@
// returned -- should probably return true/false instead.
byte b[] = msg.getBuff();
- int rd = readN(in, b, 0, H_SIZE );
-
- // XXX - connection closed (JK_AJP13_COMM_CLOSED)
- // - connection broken (JK_AJP13_COMM_BROKEN)
- //
- if(rd < 0) {
- logger.log("bad read: " + rd);
- return rd;
- }
-
+ int rd = readN(in, b, 0, H_SIZE );
+
+ // XXX - connection closed (JK_AJP13_COMM_CLOSED)
+ // - connection broken (JK_AJP13_COMM_BROKEN)
+ //
+ if(rd < 0) {
+ logger.log("bad read: " + rd);
+ return rd;
+ }
+
int len = msg.checkIn();
- if (debug > 0) {
- logger.log("receive: len = " + len);
- }
-
+ if( debug > 5 )
+ logger.log( "Received " + rd + " " + len + " " + b[0] );
+
// XXX check if enough space - it's assert()-ed !!!
-
+
int total_read = 0;
-
- total_read = readN(in, b, H_SIZE, len);
-
- if (total_read < 0) {
- logger.log("can't read body, waited #" + len);
- return JK_AJP13_BAD_BODY;
- }
-
- if (total_read != len) {
- logger.log( "incomplete read, waited #" + len + " got only " + total_read);
- return JK_AJP13_INCOMPLETE_BODY;
- }
-
- if (debug > 0)
- logger.log("receive: total read = " + total_read);
+
+ total_read = readN(in, b, H_SIZE, len);
+
+ if (total_read < 0) {
+ logger.log("can't read body, waited #" + len);
+ return JK_AJP13_BAD_BODY;
+ }
+
+ if (total_read != len) {
+ logger.log( "incomplete read, waited #" + len +
+ " got only " + total_read);
+ return JK_AJP13_INCOMPLETE_BODY;
+ }
+
+ if (debug > 0)
+ logger.log("receive: total read = " + total_read);
return total_read;
}
-
+
/**
* Send a packet to the web server. Works for any type of message.
*
* @param msg A packet with accumulated data to send to the server --
* this method will write out the length in the header.
*/
- private void send( Ajp13Packet msg ) throws IOException {
+ public void send( Ajp13Packet msg ) throws IOException {
if (debug > 0) {
logger.log("send()");
}
@@ -952,9 +445,8 @@
byte b[] = msg.getBuff();
int len = msg.getLen();
- if (debug > 0) {
- logger.log("sending msg, len = " + len);
- }
+ if (debug > 5 )
+ logger.log("send() " + len + " " + b[0] );
out.write( b, 0, len );
}
@@ -980,17 +472,21 @@
}
// -------------------- Debug --------------------
- private int debug = 0;
-
+ protected int debug = 0;
+
public void setDebug(int debug) {
this.debug = debug;
}
+ public void setLogger(Logger l) {
+ this.logger = l;
+ }
+
/**
* XXX place holder...
*/
Logger logger = new Logger();
- class Logger {
+ public static class Logger {
void log(String msg) {
System.out.println("[Ajp13] " + msg);
}
1.5 +17 -198 jakarta-tomcat-connectors/jk/java/org/apache/ajp/Ajp14.java
Index: Ajp14.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/ajp/Ajp14.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Ajp14.java 2001/11/20 17:49:53 1.4
+++ Ajp14.java 2001/11/21 20:49:54 1.5
@@ -90,7 +90,7 @@
* @author Dan Milstein [[EMAIL PROTECTED]]
* @author Keith Wannamaker [[EMAIL PROTECTED]]
*/
-public class Ajp14
+public class Ajp14 extends Ajp13
{
// XXX The message id and name will be handled by a registry, and
// will allow dynamic allocation, based on the intial negotiation.
@@ -98,38 +98,12 @@
// XXX For now we'll just use the static final field, as before
- public static final int MAX_PACKET_SIZE=8192;
- public static final int H_SIZE=4; // Size of basic packet header
-
- public static final int MAX_READ_SIZE = MAX_PACKET_SIZE - H_SIZE - 2;
- public static final int MAX_SEND_SIZE = MAX_PACKET_SIZE - H_SIZE - 4;
-
// ============ Instance Properties ====================
- // Ajp13
- OutputStream out;
- InputStream in;
-
- // XXX public fields are temp. solutions until the API stabilizes
- // Buffer used of output body and headers
- public Ajp13Packet outBuf = new Ajp13Packet( MAX_PACKET_SIZE );
- // Buffer used for input body
- Ajp13Packet inBuf = new Ajp13Packet( MAX_PACKET_SIZE );
- // Buffer used for request head ( and headers )
- Ajp13Packet hBuf=new Ajp13Packet( MAX_PACKET_SIZE );
-
- // Holds incoming reads of request body data (*not* header data)
- byte []bodyBuff = new byte[MAX_READ_SIZE];
-
- int blen; // Length of current chunk of body data in buffer
- int pos; // Current read position within that buffer
// AJP14
// Required handler - detect protocol,
// set communication parameters, login
public NegociationHandler negHandler=new NegociationHandler();
-
- // Required handler - essential request processing
- public RequestHandler reqHandler=new RequestHandler();
public Ajp14()
{
@@ -137,40 +111,8 @@
setSeed("myveryrandomentropy");
setPassword("myverysecretkey");
negHandler.init( this );
- reqHandler.init( this );
- }
-
- public void initBuf()
- {
- outBuf = new Ajp13Packet( MAX_PACKET_SIZE );
- inBuf = new Ajp13Packet( MAX_PACKET_SIZE );
- hBuf = new Ajp13Packet( MAX_PACKET_SIZE );
}
- public void recycle() {
- if (debug > 0) {
- log("recycle()");
- }
-
- // This is a touch cargo-cultish, but I think wise.
- blen = 0;
- pos = 0;
- }
-
- /**
- * Associate an open socket with this instance.
- */
- public void setSocket( Socket socket ) throws IOException {
- if (debug > 0) {
- log("setSocket()");
- }
-
- socket.setSoLinger( true, 100);
- out = socket.getOutputStream();
- in = socket.getInputStream();
- pos = 0;
- }
-
// -------------------- Parameters --------------------
/** Set the server signature, to be sent in Servlet-Container header
@@ -195,168 +137,45 @@
negHandler.setPassword( ppwd );
}
- // -------------------- Handlers registry --------------------
-
- static final int MAX_HANDLERS=32;
- static final int RESERVED=16; // reserved names, backward compat
-
- // Note that we don't make distinction between in and out
- // messages ( i.e. one id is used only in one direction )
- AjpHandler handlers[]=new AjpHandler[MAX_HANDLERS];
- String handlerName[]=new String[MAX_HANDLERS];
- int currentId=RESERVED;
-
- public int registerMessageType( int id, String name, AjpHandler h,
- String sig[] )
- {
- if( id < 0 ) {
- // try to find it by name
- for( int i=0; i< handlerName.length; i++ )
- if( name.equals( handlerName[i] ) ) return i;
- handlerName[currentId]=name;
- handlers[currentId]=h;
- currentId++;
- return currentId;
- }
- // fixed id
- handlerName[id]=name;
- handlers[id]=h;
- return id;
- }
-
- // -------------------- Main dispatch --------------------
-
- /**
- * Read a new packet from the web server and decode it. If it's a
- * forwarded request, store its properties in the passed-in Request
- * object.
- *
- * @param req An empty (newly-recycled) request object.
- *
- * @return 200 in case of a successful read of a forwarded request, 500
- * if there were errors in the reading of the request, and -2 if the
- * server is asking the container to shut itself down.
- */
- public int receiveNextRequest(BaseRequest req) throws IOException
+ public int handleMessage( int type, Ajp13Packet hBuf, AjpRequest req )
+ throws IOException
{
- // XXX The return values are awful.
- int err = receive(hBuf);
- if(err < 0) {
- if(debug >0 ) log( "Error receiving message ");
- return 500;
- }
-
- int type = (int)hBuf.getByte();
- if( type > handlers.length ) {
- log( "Invalid handler " + type );
+ logger.log("ajp14 handle message " + type );
+ if( type > handlers.length ) {
+ logger.log( "Invalid handler " + type );
return 500;
}
- if( debug > 0 ) log( "Received " + type + " " + handlerName[type]);
+ if( debug > 0 )
+ logger.log( "Received " + type + " " + handlerName[type]);
if( ! negHandler.isLogged() ) {
if( type != NegociationHandler.JK_AJP14_LOGINIT_CMD &&
type != NegociationHandler.JK_AJP14_LOGCOMP_CMD ) {
+
+ logger.log( "Ajp14 error: not logged " +
+ type + " " + handlerName[type]);
+
return 300;
}
// else continue
}
-
+
// logged || loging message
AjpHandler handler=handlers[type];
if( handler==null ) {
- log( "Unknown message " + type + handlerName[type] );
+ logger.log( "Unknown message " + type + handlerName[type] );
return 200;
}
+ if( debug > 0 )
+ logger.log( "Ajp14 handler " + handler );
return handler.handleAjpMessage( type, this, hBuf, req );
}
// ========= Internal Packet-Handling Methods =================
-
- /**
- * Read in a packet from the web server and store it in the passed-in
- * <CODE>Ajp13Packet</CODE> object.
- *
- * @param msg The object into which to store the incoming packet -- any
- * current contents will be overwritten.
- *
- * @return The number of bytes read on a successful read or -1 if there
- * was an error.
- **/
- public int receive(Ajp13Packet msg) throws IOException {
- // XXX If the length in the packet header doesn't agree with the
- // actual number of bytes read, it should probably return an error
- // value. Also, callers of this method never use the length
- // returned -- should probably return true/false instead.
- byte b[] = msg.getBuff();
-
- if( debug > 5 ) log( "Reading head " );
- int rd = in.read( b, 0, H_SIZE );
- if(rd <= 0) {
- if( debug > 5 ) log( "Error reading " + rd );
- return rd;
- }
-
- int len = msg.checkIn();
-
- if( debug > 5 ) log( "Received " + rd + " " + len + " " + b[0] );
-
- // XXX check if enough space - it's assert()-ed !!!
-
- int total_read = 0;
- while (total_read < len) {
- rd = in.read( b, 4 + total_read, len - total_read);
- if (rd == -1) {
- log( "Incomplete read, deal with it " + len + " " + rd);
- break;
- // XXX log
- // XXX Return an error code?
- }
- total_read += rd;
- }
- if( debug > 10 ) log( "Received total: " + total_read );
- return total_read;
- }
-
- /**
- * Send a packet to the web server. Works for any type of message.
- *
- * @param msg A packet with accumulated data to send to the server --
- * this method will write out the length in the header.
- */
- public void send( Ajp13Packet msg ) throws IOException {
- msg.end(); // Write the packet header
- byte b[] = msg.getBuff();
- int len = msg.getLen();
- if (debug > 5 ) log("send() " + len + " " + b[0] );
- out.write( b, 0, len );
- }
-
- /**
- * Close the socket connection to the web server. In general, sockets
- * are maintained across many requests, so this will not be called
- * after finish().
- *
- * @see Ajp14Interceptor#processConnection
- */
public void close() throws IOException {
- if (debug > 0) log("close()");
-
- if(null != out) {
- out.close();
- }
- if(null !=in) {
- in.close();
- }
-
+ super.close();
negHandler.setLogged( false ); // no more logged now
- }
-
- // -------------------- Utils --------------------
-
- private static int debug=10;
- void log(String s) {
- System.out.println("Ajp14: " + s );
}
}
1.3 +2 -2 jakarta-tomcat-connectors/jk/java/org/apache/ajp/AjpHandler.java
Index: AjpHandler.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/ajp/AjpHandler.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- AjpHandler.java 2001/11/20 17:49:53 1.2
+++ AjpHandler.java 2001/11/21 20:49:54 1.3
@@ -93,8 +93,8 @@
/** Execute the callback
*/
- public int handleAjpMessage( int type, Ajp14 channel,
- Ajp13Packet ajp, BaseRequest req )
+ public int handleAjpMessage( int type, Ajp13 channel,
+ Ajp13Packet ajp, AjpRequest req )
throws IOException
{
return UNKNOWN;
1.4 +8 -6
jakarta-tomcat-connectors/jk/java/org/apache/ajp/NegociationHandler.java
Index: NegociationHandler.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/ajp/NegociationHandler.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- NegociationHandler.java 2001/11/20 17:49:53 1.3
+++ NegociationHandler.java 2001/11/21 20:49:54 1.4
@@ -254,8 +254,9 @@
// -------------------- Initialization --------------------
- public void init( Ajp14 ajp14 ) {
+ public void init( Ajp13 ajp14 ) {
// register incoming message handlers
+ System.out.println("XXX register ajp 14 hooks");
ajp14.registerMessageType( JK_AJP14_LOGINIT_CMD,"JK_AJP14_LOGINIT_CMD",
this, null); //
ajp14.registerMessageType( JK_AJP14_LOGCOMP_CMD,"JK_AJP14_LOGCOMP_CMD",
@@ -286,10 +287,11 @@
// -------------------- Dispatch --------------------
- public int handleAjpMessage( int type, Ajp14 ch, Ajp13Packet hBuf,
- BaseRequest req )
+ public int handleAjpMessage( int type, Ajp13 ch, Ajp13Packet hBuf,
+ AjpRequest req )
throws IOException
{
+ System.out.println("handleAjpMessage: " + type );
Ajp13Packet outBuf=ch.outBuf;
// Valid requests when not logged:
switch( type ) {
@@ -326,7 +328,7 @@
*
* Send Login Seed (MD5 of seed)
*/
- private int handleLogInit( Ajp14 ch, Ajp13Packet msg,
+ private int handleLogInit( Ajp13 ch, Ajp13Packet msg,
Ajp13Packet outBuf )
throws IOException
{
@@ -353,7 +355,7 @@
* If the authentification is valid send back LogOk
* If the authentification failed send back LogNok
*/
- private int handleLogComp( Ajp14 ch, Ajp13Packet msg,
+ private int handleLogComp( Ajp13 ch, Ajp13Packet msg,
Ajp13Packet outBuf )
throws IOException
{
@@ -403,7 +405,7 @@
return (304);
}
- private int handleContextQuery( Ajp14 ch, Ajp13Packet msg,
+ private int handleContextQuery( Ajp13 ch, Ajp13Packet msg,
Ajp13Packet outBuf )
throws IOException
{
1.6 +50 -30
jakarta-tomcat-connectors/jk/java/org/apache/ajp/RequestHandler.java
Index: RequestHandler.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/ajp/RequestHandler.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- RequestHandler.java 2001/11/20 17:49:53 1.5
+++ RequestHandler.java 2001/11/21 20:49:54 1.6
@@ -59,13 +59,11 @@
package org.apache.ajp;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.io.InputStream;
-import java.io.OutputStream;
+import java.io.*;
import java.net.Socket;
import java.util.Enumeration;
import java.security.*;
+import java.security.cert.*;
import org.apache.tomcat.util.http.*;
import org.apache.tomcat.util.buf.*;
@@ -125,6 +123,7 @@
public static final byte SC_A_SSL_CERT = 7;
public static final byte SC_A_SSL_CIPHER = 8;
public static final byte SC_A_SSL_SESSION = 9;
+ public static final byte SC_A_SSL_KEYSIZE = 11;
// Used for attributes which are not in the list above
public static final byte SC_A_REQ_ATTRIBUTE = 10;
@@ -197,7 +196,7 @@
{
}
- public void init( Ajp14 ajp14 ) {
+ public void init( Ajp13 ajp14 ) {
// register incoming message handlers
ajp14.registerMessageType( JK_AJP13_FORWARD_REQUEST,
"JK_AJP13_FORWARD_REQUEST",
@@ -218,8 +217,8 @@
}
// -------------------- Incoming message --------------------
- public int handleAjpMessage( int type, Ajp14 channel,
- Ajp13Packet ajp, BaseRequest req )
+ public int handleAjpMessage( int type, Ajp13 channel,
+ Ajp13Packet ajp, AjpRequest req )
throws IOException
{
switch( type ) {
@@ -241,7 +240,7 @@
*
* @return 200 in case of a successful decoduing, 500 in case of error.
*/
- protected int decodeRequest(Ajp14 ch, Ajp13Packet msg, BaseRequest req)
+ protected int decodeRequest(Ajp13 ch, Ajp13Packet msg, BaseRequest req)
throws IOException
{
@@ -336,8 +335,26 @@
case SC_A_SSL_CERT :
isSSL = true;
- req.setAttribute("javax.servlet.request.X509Certificate",
- msg.getString());
+ // Transform the string into certificate.
+ String certString = msg.getString();
+ byte[] certData = certString.getBytes();
+ ByteArrayInputStream bais = new ByteArrayInputStream(certData);
+
+ // Fill the first element.
+ X509Certificate jsseCerts[] = null;
+ try {
+ CertificateFactory cf =
+ CertificateFactory.getInstance("X.509");
+ X509Certificate cert = (X509Certificate)
+ cf.generateCertificate(bais);
+ jsseCerts = new X509Certificate[1];
+ jsseCerts[0] = cert;
+ } catch(java.security.cert.CertificateException e) {
+ log("Certificate convertion failed" + e );
+ }
+
+ req.setAttribute("javax.servlet.request.X509Certificate",
+ jsseCerts);
break;
case SC_A_SSL_CIPHER :
@@ -357,7 +374,7 @@
msg.getString());
break;
- case SC_A_SSL_KEY_SIZE: // Ajp14 !
+ case SC_A_SSL_KEY_SIZE: // Ajp13 !
req.setAttribute("javax.servlet.request.key_size",
Integer.toString(msg.getInt()));
return 200;
@@ -397,7 +414,7 @@
}
- // -------------------- Messages from container to server --------------------
+ // -------------------- Messages from container to server ------------------
/**
* Send the HTTP headers back to the web server and on to the browser.
@@ -406,8 +423,9 @@
* @param statusMessage the HTTP status message to send.
* @param headers The set of all headers.
*/
- public void sendHeaders(Ajp14 ch, Ajp13Packet outBuf,
- int status, String statusMessage, MimeHeaders headers)
+ public void sendHeaders(Ajp13 ch, Ajp13Packet outBuf,
+ int status, String statusMessage,
+ MimeHeaders headers)
throws IOException
{
// XXX if more headers that MAX_SIZE, send 2 packets!
@@ -441,7 +459,7 @@
* Signal the web server that the servlet has finished handling this
* request, and that the connection can be reused.
*/
- public void finish(Ajp14 ch, Ajp13Packet outBuf) throws IOException {
+ public void finish(Ajp13 ch, Ajp13Packet outBuf) throws IOException {
if (debug > 0) log("finish()");
outBuf.reset();
@@ -459,7 +477,7 @@
* @param off The offset into the buffer from which to start sending.
* @param len The number of bytes to send.
*/
- public void doWrite(Ajp14 ch, Ajp13Packet outBuf,
+ public void doWrite(Ajp13 ch, Ajp13Packet outBuf,
byte b[], int off, int len)
throws IOException
{
@@ -468,7 +486,7 @@
int sent = 0;
while(sent < len) {
int to_send = len - sent;
- to_send = to_send > Ajp14.MAX_SEND_SIZE ? Ajp14.MAX_SEND_SIZE : to_send;
+ to_send = to_send > Ajp13.MAX_SEND_SIZE ? Ajp13.MAX_SEND_SIZE : to_send;
outBuf.reset();
outBuf.appendByte(JK_AJP13_SEND_BODY_CHUNK);
@@ -538,15 +556,15 @@
return -1;
}
- private static int debug=10;
+ private static int debug=0;
void log(String s) {
- System.out.println("Ajp14RequestHandler: " + s );
+ System.out.println("RequestHandler: " + s );
}
// ==================== Servlet Input Support =================
// XXX DEPRECATED
- public int available(Ajp14 ch) throws IOException {
+ public int available(Ajp13 ch) throws IOException {
if (debug > 0) {
log("available()");
}
@@ -564,7 +582,7 @@
*
* @see Request#doRead
*/
- public int doRead(Ajp14 ch) throws IOException
+ public int doRead(Ajp13 ch) throws IOException
{
if (debug > 0) {
log("doRead()");
@@ -590,7 +608,7 @@
*
* @see Request#doRead
*/
- public int doRead(Ajp14 ch, byte[] b, int off, int len) throws IOException
+ public int doRead(Ajp13 ch, byte[] b, int off, int len) throws IOException
{
if (debug > 0) {
log("doRead(byte[], int, int)");
@@ -616,7 +634,7 @@
if(bytesRemaining < 0)
bytesRemaining = 0;
int c = bytesRemaining < toCopy ? bytesRemaining : toCopy;
-
+
System.arraycopy(ch.bodyBuff, ch.pos, b, off, c);
toCopy -= c;
@@ -639,7 +657,7 @@
*
* @return true if there is more data, false if not.
*/
- private boolean refillReadBuffer(Ajp14 ch) throws IOException
+ public boolean refillReadBuffer(Ajp13 ch) throws IOException
{
if (debug > 0) {
log("refillReadBuffer()");
@@ -651,7 +669,7 @@
// Why not use outBuf??
ch.inBuf.reset();
ch.inBuf.appendByte(JK_AJP13_GET_BODY_CHUNK);
- ch.inBuf.appendInt(Ajp14.MAX_READ_SIZE);
+ ch.inBuf.appendInt(Ajp13.MAX_READ_SIZE);
ch.send(ch.inBuf);
int err = ch.receive(ch.inBuf);
@@ -670,7 +688,7 @@
/**
*/
- public void beginSendHeaders(Ajp14 ch, Ajp13Packet outBuf,
+ public void beginSendHeaders(Ajp13 ch, Ajp13Packet outBuf,
int status,
String statusMessage,
int numHeaders) throws IOException {
@@ -710,7 +728,7 @@
outBuf.appendString(value);
}
- public void endSendHeaders(Ajp14 ch, Ajp13Packet outBuf)
+ public void endSendHeaders(Ajp13 ch, Ajp13Packet outBuf)
throws IOException
{
outBuf.end();
@@ -723,10 +741,12 @@
* @param status The HTTP status code to send.
* @param headers The set of all headers.
*/
- public void sendHeaders(Ajp14 ch, Ajp13Packet outBuf,
+ public void sendHeaders(Ajp13 ch, Ajp13Packet outBuf,
int status, MimeHeaders headers)
- throws IOException {
- sendHeaders(ch, outBuf, status, HttpMessages.getMessage(status), headers);
+ throws IOException
+ {
+ sendHeaders(ch, outBuf, status, HttpMessages.getMessage(status),
+ headers);
}
1.6 +4 -4
jakarta-tomcat-connectors/jk/java/org/apache/ajp/test/TestAjp13.java
Index: TestAjp13.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/ajp/test/TestAjp13.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- TestAjp13.java 2001/06/03 21:13:44 1.5
+++ TestAjp13.java 2001/11/21 20:49:55 1.6
@@ -44,7 +44,7 @@
p.appendInt(0x1234);
p.appendInt(0);
p.setByteOff(4);
- p.appendByte(Ajp13.JK_AJP13_FORWARD_REQUEST);
+ p.appendByte(RequestHandler.JK_AJP13_FORWARD_REQUEST);
p.appendByte((byte)2);
p.appendString("http");
p.appendString("/test_uri");
@@ -56,11 +56,11 @@
p.appendInt(3);
p.appendString("my header");
p.appendString("my header value");
- p.appendInt((0xA0 << 8) + Ajp13.SC_REQ_AUTHORIZATION);
+ p.appendInt((0xA0 << 8) + RequestHandler.SC_REQ_AUTHORIZATION);
p.appendString("some auth string");
- p.appendInt((0xA0 << 8) + Ajp13.SC_REQ_USER_AGENT);
+ p.appendInt((0xA0 << 8) + RequestHandler.SC_REQ_USER_AGENT);
p.appendString("TestAjp13 User Agent");
- p.appendByte(Ajp13.SC_A_ARE_DONE);
+ p.appendByte(RequestHandler.SC_A_ARE_DONE);
int len = p.getByteOff() - 4;
p.setByteOff(2);
1.8 +5 -5
jakarta-tomcat-connectors/jk/java/org/apache/ajp/tomcat33/Ajp14Interceptor.java
Index: Ajp14Interceptor.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/ajp/tomcat33/Ajp14Interceptor.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- Ajp14Interceptor.java 2001/10/26 21:19:35 1.7
+++ Ajp14Interceptor.java 2001/11/21 20:49:55 1.8
@@ -171,7 +171,7 @@
Ajp14 ajp14=new Ajp14();
ajp14.setContainerSignature( ContextManager.TOMCAT_NAME +
" v" + ContextManager.TOMCAT_VERSION);
- BaseRequest ajpreq=new BaseRequest();
+ AjpRequest ajpreq=new AjpRequest();
ajp14.setPassword( password );
req=new Ajp14Request(ajp14, ajpreq);
Ajp14Response res=new Ajp14Response(ajp14);
@@ -195,7 +195,7 @@
Ajp14Request req=initRequest( thData );
Ajp14Response res= (Ajp14Response)req.getResponse();
Ajp14 ajp14=req.ajp14;
- BaseRequest ajpReq=req.ajpReq;
+ AjpRequest ajpReq=req.ajpReq;
ajp14.setSocket(socket);
@@ -285,9 +285,9 @@
class Ajp14Request extends Request
{
Ajp14 ajp14;
- BaseRequest ajpReq;
+ AjpRequest ajpReq;
- public Ajp14Request(Ajp14 ajp14, BaseRequest ajpReq)
+ public Ajp14Request(Ajp14 ajp14, AjpRequest ajpReq)
{
headers = ajpReq.headers();
methodMB=ajpReq.method();
@@ -314,7 +314,7 @@
}
// -------------------- Wrappers for changed method names, and to use the
buffers
- // XXX Move BaseRequest into util !!! ( it's just a stuct with some
MessageBytes )
+ // XXX Move AjpRequest into util !!! ( it's just a stuct with some MessageBytes
)
public int getServerPort() {
return ajpReq.getServerPort();
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>