Package org.apache.coyote.ajp
Class AjpMessage
- java.lang.Object
- 
- org.apache.coyote.ajp.AjpMessage
 
- 
 public class AjpMessage extends java.lang.ObjectA 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 SummaryFields Modifier and Type Field Description protected byte[]bufFixed size buffer.protected intlenThis actually means different things depending on whether the packet is read or write.protected intposThe current read or write position in the buffer.protected static StringManagersmThe string manager for this package.
 - 
Constructor SummaryConstructors Constructor Description AjpMessage(int packetSize)
 - 
Method SummaryAll Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidappendByte(int val)Append a byte (1 byte) to the message.voidappendByteChunk(ByteChunk bc)Write a ByteChunk out at the current write position.voidappendBytes(byte[] b, int off, int numBytes)Copy a chunk of bytes into the packet, starting at the current write position.voidappendBytes(java.nio.ByteBuffer b)Copy a chunk of bytes into the packet, starting at the current write position.voidappendBytes(MessageBytes mb)Write a MessageBytes out at the current write position.voidappendInt(int val)Add a short integer (2 bytes) to the message.voidend()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.voidgetBodyBytes(MessageBytes mb)byte[]getBuffer()Return the underlying byte buffer.bytegetByte()voidgetBytes(MessageBytes mb)intgetInt()Read an integer from packet, and advance the read position past it.intgetLen()Return the current message length.intgetLongInt()Read a 32 bits integer from packet, and advance the read position past it.protected static java.lang.Stringhex(int x)protected static java.lang.StringhexLine(byte[] buf, int start, int len)intpeekInt()intprocessHeader(boolean toContainer)voidreset()Prepare this packet for accumulating a message from the container to the web server.
 
- 
- 
- 
Field Detail- 
smprotected static final StringManager sm The string manager for this package.
 - 
bufprotected final byte[] buf Fixed size buffer.
 - 
posprotected int pos The current read or write position in the buffer.
 - 
lenprotected 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.
 
- 
 - 
Method Detail- 
resetpublic 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).
 - 
endpublic 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.
 - 
getBufferpublic byte[] getBuffer() Return the underlying byte buffer.- Returns:
- The buffer
 
 - 
getLenpublic int getLen() Return the current message length.- Returns:
- 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).
 
 - 
appendIntpublic void appendInt(int val) Add a short integer (2 bytes) to the message.- Parameters:
- val- The integer to append
 
 - 
appendBytepublic void appendByte(int val) Append a byte (1 byte) to the message.- Parameters:
- val- The byte value to append
 
 - 
appendBytespublic void appendBytes(MessageBytes mb) Write a MessageBytes out at the current write position. A null MessageBytes is encoded as a string with length 0.- Parameters:
- mb- The data to write
 
 - 
appendByteChunkpublic void appendByteChunk(ByteChunk bc) Write a ByteChunk out at the current write position. A null ByteChunk is encoded as a string with length 0.- Parameters:
- bc- The data to write
 
 - 
appendBytespublic 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.
 
 - 
appendBytespublic void appendBytes(java.nio.ByteBuffer b) 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 ByteBuffer from which to copy bytes.
 
 - 
getIntpublic 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.- Returns:
- The integer value read from the message
 
 - 
peekIntpublic int peekInt() 
 - 
getBytepublic byte getByte() 
 - 
getBytespublic void getBytes(MessageBytes mb) 
 - 
getBodyBytespublic void getBodyBytes(MessageBytes mb) 
 - 
getLongIntpublic 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.- Returns:
- The long value read from the message
 
 - 
processHeaderpublic int processHeader(boolean toContainer) 
 - 
hexLineprotected static java.lang.String hexLine(byte[] buf, int start, int len)
 - 
hexprotected static java.lang.String hex(int x) 
 
- 
 
-