Package org.apache.coyote.ajp
Class AjpMessage
java.lang.Object
org.apache.coyote.ajp.AjpMessage
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
Modifier and TypeFieldDescriptionprotected final byte[]
Fixed size buffer.protected int
This actually means different things depending on whether the packet is read or write.protected int
The current read or write position in the buffer.protected static final StringManager
The string manager for this package. -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
appendByte
(int val) Append a byte (1 byte) to the message.void
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
Copy a chunk of bytes into the packet, starting at the current write position.void
Write a MessageBytes out at the current write position.void
appendInt
(int val) Add a short integer (2 bytes) to the message.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
byte[]
Return the underlying byte buffer.byte
getByte()
void
getBytes
(MessageBytes mb) int
getInt()
Read an integer from packet, and advance the read position past it.int
getLen()
Return the current message length.int
Read a 32 bits integer from packet, and advance the read position past it.protected static String
hex
(int x) protected static String
hexLine
(byte[] buf, int start, int len) int
peekInt()
int
processHeader
(boolean toContainer) void
reset()
Prepare this packet for accumulating a message from the container to the web server.
-
Field Details
-
sm
The string manager for this package. -
buf
protected final byte[] bufFixed size buffer. -
pos
protected int posThe current read or write position in the buffer. -
len
protected int lenThis 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 Details
-
AjpMessage
public AjpMessage(int packetSize)
-
-
Method Details
-
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.- Returns:
- The buffer
-
getLen
public 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).
-
appendInt
public void appendInt(int val) Add a short integer (2 bytes) to the message.- Parameters:
val
- The integer to append
-
appendByte
public void appendByte(int val) Append a byte (1 byte) to the message.- Parameters:
val
- The byte value to append
-
appendBytes
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
-
appendByteChunk
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
-
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 copyingnumBytes
- The number of bytes to copy.
-
appendBytes
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.
-
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.- Returns:
- The integer value read from the message
-
peekInt
public int peekInt() -
getByte
public byte getByte() -
getBytes
-
getBodyBytes
-
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.- Returns:
- The long value read from the message
-
processHeader
public int processHeader(boolean toContainer) -
hexLine
-
hex
-