org.apache.coyote.ajp
Class AjpMessage

java.lang.Object
  extended byorg.apache.coyote.ajp.AjpMessage

public class AjpMessage
extends java.lang.Object

A single packet for communication between the web server and the container. Designed to be reused many times with no creation of garbage. Understands the format of data types for these packets. Can be used (somewhat confusingly) for both incoming and outgoing packets.

Author:
Henri Gomez, Dan Milstein, Keith Wannamaker, Kevin Seguin, Costin Manolache

Field Summary
protected  byte[] buf
          Fixed size buffer.
protected  int len
          This actually means different things depending on whether the packet is read or write.
protected static org.apache.commons.logging.Log log
           
protected  int pos
          The current read or write position in the buffer.
protected static StringManager sm
          The string manager for this package.
 
Constructor Summary
AjpMessage(int packetSize)
           
 
Method Summary
 void appendByte(int val)
          Append a byte (1 byte) to the message.
 void appendByteChunk(ByteChunk bc)
          Write a ByteChunk out at the current write position.
 void appendBytes(byte[] b, int off, int numBytes)
          Copy a chunk of bytes into the packet, starting at the current write position.
 void appendBytes(MessageBytes mb)
          Write a MessageBytes out at the current write position.
 void appendCharChunk(CharChunk cc)
          Write a CharChunk out at the current write position.
 void appendInt(int val)
          Add a short integer (2 bytes) to the message.
 void appendLongInt(int val)
          Append an int (4 bytes) to the message.
 void appendString(java.lang.String str)
          Write a String out at the current write position.
 void dump(java.lang.String msg)
          Dump the contents of the message, prefixed with the given String.
 void end()
          For a packet to be sent to the web server, finish the process of accumulating data and write the length of the data payload into the header.
 void getBodyBytes(MessageBytes mb)
           
 byte[] getBuffer()
          Return the underlying byte buffer.
 byte getByte()
           
 int getBytes(byte[] dest)
          Deprecated.  
 void getBytes(MessageBytes mb)
           
 int getHeaderLength()
           
 int getInt()
          Read an integer from packet, and advance the read position past it.
 int getLen()
          Return the current message length.
 int getLongInt()
          Read a 32 bits integer from packet, and advance the read position past it.
protected static java.lang.String hex(int x)
           
protected static java.lang.String hexLine(byte[] buf, int start, int len)
           
 byte peekByte()
           
 int peekInt()
           
 int processHeader()
           
 void reset()
          Prepare this packet for accumulating a message from the container to the web server.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

log

protected static org.apache.commons.logging.Log log

sm

protected static StringManager sm
The string manager for this package.


buf

protected byte[] buf
Fixed size buffer.


pos

protected int pos
The current read or write position in the buffer.


len

protected int len
This actually means different things depending on whether the packet is read or write. For read, it's the length of the payload (excluding the header). For write, it's the length of the packet as a whole (counting the header). Oh, well.

Constructor Detail

AjpMessage

public AjpMessage(int packetSize)
Method Detail

reset

public void reset()
Prepare this packet for accumulating a message from the container to the web server. Set the write position to just after the header (but leave the length unwritten, because it is as yet unknown).


end

public void end()
For a packet to be sent to the web server, finish the process of accumulating data and write the length of the data payload into the header.


getBuffer

public byte[] getBuffer()
Return the underlying byte buffer.


getLen

public int getLen()
Return the current message length. For read, it's the length of the payload (excluding the header). For write, it's the length of the packet as a whole (counting the header).


appendInt

public void appendInt(int val)
Add a short integer (2 bytes) to the message.


appendByte

public void appendByte(int val)
Append a byte (1 byte) to the message.


appendLongInt

public void appendLongInt(int val)
Append an int (4 bytes) to the message.


appendBytes

public void appendBytes(MessageBytes mb)
Write a MessageBytes out at the current write position. A null MessageBytes is encoded as a string with length 0.


appendByteChunk

public void appendByteChunk(ByteChunk bc)
Write a ByteChunk out at the current write position. A null ByteChunk is encoded as a string with length 0.


appendCharChunk

public void appendCharChunk(CharChunk cc)
Write a CharChunk out at the current write position. A null CharChunk is encoded as a string with length 0.


appendString

public void appendString(java.lang.String str)
Write a String out at the current write position. Strings are encoded with the length in two bytes first, then the string, and then a terminating \0 (which is not included in the encoded length). The terminator is for the convenience of the C code, where it saves a round of copying. A null string is encoded as a string with length 0.


appendBytes

public void appendBytes(byte[] b,
                        int off,
                        int numBytes)
Copy a chunk of bytes into the packet, starting at the current write position. The chunk of bytes is encoded with the length in two bytes first, then the data itself, and finally a terminating \0 (which is not included in the encoded length).

Parameters:
b - The array from which to copy bytes.
off - The offset into the array at which to start copying
numBytes - The number of bytes to copy.

getInt

public int getInt()
Read an integer from packet, and advance the read position past it. Integers are encoded as two unsigned bytes with the high-order byte first, and, as far as I can tell, in little-endian order within each byte.


peekInt

public int peekInt()

getByte

public byte getByte()

peekByte

public byte peekByte()

getBytes

public void getBytes(MessageBytes mb)

getBodyBytes

public void getBodyBytes(MessageBytes mb)

getBytes

public int getBytes(byte[] dest)
Deprecated.  

Copy a chunk of bytes from the packet into an array and advance the read position past the chunk. See appendBytes() for details on the encoding.

Returns:
The number of bytes copied.

getLongInt

public int getLongInt()
Read a 32 bits integer from packet, and advance the read position past it. Integers are encoded as four unsigned bytes with the high-order byte first, and, as far as I can tell, in little-endian order within each byte.


getHeaderLength

public int getHeaderLength()

processHeader

public int processHeader()

dump

public void dump(java.lang.String msg)
Dump the contents of the message, prefixed with the given String.


hexLine

protected static java.lang.String hexLine(byte[] buf,
                                          int start,
                                          int len)

hex

protected static java.lang.String hex(int x)


Copyright © 2000-2012 Apache Software Foundation. All Rights Reserved.