Javadoc
This commit is contained in:
parent
230113c0c6
commit
4d0facee9f
@ -27,7 +27,89 @@ import org.jboss.netty.channel.Channel;
|
|||||||
import org.jboss.netty.channel.ChannelHandlerContext;
|
import org.jboss.netty.channel.ChannelHandlerContext;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO Documentation
|
* A decoder that decodes the received {@link ChannelBuffer}s that contain
|
||||||
|
* a message length field into a meaningfully framed {@link ChannelBuffer}.
|
||||||
|
* It is particularly useful when you decode a binary message which has an
|
||||||
|
* integer header field that represents the length of the message body or the
|
||||||
|
* whole message.
|
||||||
|
* <p>
|
||||||
|
* {@link LengthFieldBasedFrameDecoder} has many configuration parameters so
|
||||||
|
* that it can decode any message with a length field, which is often seen in
|
||||||
|
* proprietary client-server protocols. Here are some example that will give
|
||||||
|
* you the basic idea on which option does what.
|
||||||
|
*
|
||||||
|
* <h3>4 bytes length field at offset 0, strip header</h3>
|
||||||
|
* <pre>
|
||||||
|
* <b>lengthFieldOffset</b> = <b>0</b>
|
||||||
|
* <b>lengthFieldLength</b> = <b>4</b>
|
||||||
|
* <b>lengthAdjustment</b> = <b>0</b>
|
||||||
|
* <b>initialBytesToStrip</b> = <b>4</b>
|
||||||
|
*
|
||||||
|
* BEFORE DECODE (16 bytes) AFTER DECODE (12 bytes)
|
||||||
|
* +--------------+----------------+ +----------------+
|
||||||
|
* | Length Field | Actual Content |----->| Actual Content |
|
||||||
|
* | 0x0000000C | "HELLO, WORLD" | | "HELLO, WORLD" |
|
||||||
|
* +--------------+----------------+ +----------------+
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* <h3>2 bytes length Field at offset 0, do not strip header</h3>
|
||||||
|
* <pre>
|
||||||
|
* <b>lengthFieldOffset</b> = <b>0</b>
|
||||||
|
* <b>lengthFieldLength</b> = <b>2</b>
|
||||||
|
* <b>lengthAdjustment</b> = <b>0</b>
|
||||||
|
* <b>initialBytesToStrip</b> = <b>0</b>
|
||||||
|
*
|
||||||
|
* BEFORE DECODE (14 bytes) AFTER DECODE (14 bytes)
|
||||||
|
* +--------+----------------+ +--------+----------------+
|
||||||
|
* | Length | Actual Content |----->| Length | Actual Content |
|
||||||
|
* | 0x000C | "HELLO, WORLD" | | 0x000C | "HELLO, WORLD" |
|
||||||
|
* +--------+----------------+ +--------+----------------+
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* <h3>3 bytes length Field at the end of 5 bytes header, strip header</h3>
|
||||||
|
* <pre>
|
||||||
|
* <b>lengthFieldOffset</b> = <b>2</b> (= 5 - 3)
|
||||||
|
* <b>lengthFieldLength</b> = <b>3</b>
|
||||||
|
* <b>lengthAdjustment</b> = <b>0</b>
|
||||||
|
* <b>initialBytesToStrip</b> = <b>5</b>
|
||||||
|
*
|
||||||
|
* BEFORE DECODE (17 bytes) AFTER DECODE (12 bytes)
|
||||||
|
* +----------+----------+----------------+ +----------------+
|
||||||
|
* | Header 1 | Length | Actual Content |----->| Actual Content |
|
||||||
|
* | 0xCAFE | 0x00000C | "HELLO, WORLD" | | "HELLO, WORLD" |
|
||||||
|
* +----------+----------+----------------+ +----------------+
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* <h3>2 bytes length Field at offset 1 in the middle of 4 bytes header,
|
||||||
|
* strip the first header field and the length field</h3>
|
||||||
|
* <pre>
|
||||||
|
* <b>lengthFieldOffset</b> = <b>1</b>
|
||||||
|
* <b>lengthFieldLength</b> = <b>2</b>
|
||||||
|
* <b>lengthAdjustment</b> = <b>1</b> (= the length of HDR2)
|
||||||
|
* <b>initialBytesToStrip</b> = <b>3</b> (= the length of HDR1 + LEN)
|
||||||
|
*
|
||||||
|
* BEFORE DECODE (16 bytes) AFTER DECODE (13 bytes)
|
||||||
|
* +------+--------+------+----------------+ +------+----------------+
|
||||||
|
* | HDR1 | Length | HDR2 | Actual Content |----->| HDR2 | Actual Content |
|
||||||
|
* | 0xCA | 0x000C | 0xFE | "HELLO, WORLD" | | 0xFE | "HELLO, WORLD" |
|
||||||
|
* +------+--------+------+----------------+ +------+----------------+
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* <h3>2 bytes length Field at offset 1 in the middle of 4 bytes header,
|
||||||
|
* strip the first header field and the length field, the length field
|
||||||
|
* includes the header length</h3>
|
||||||
|
* <pre>
|
||||||
|
* <b>lengthFieldOffset</b> = <b>1</b>
|
||||||
|
* <b>lengthFieldLength</b> = <b>2</b>
|
||||||
|
* <b>lengthAdjustment</b> = <b>-3</b> (= the length of HDR1 + LEN, negative)
|
||||||
|
* <b>initialBytesToStrip</b> = <b>3</b>
|
||||||
|
*
|
||||||
|
* BEFORE DECODE (16 bytes) AFTER DECODE (13 bytes)
|
||||||
|
* +------+--------+------+----------------+ +------+----------------+
|
||||||
|
* | HDR1 | Length | HDR2 | Actual Content |----->| HDR2 | Actual Content |
|
||||||
|
* | 0xCA | 0x0010 | 0xFE | "HELLO, WORLD" | | 0xFE | "HELLO, WORLD" |
|
||||||
|
* +------+--------+------+----------------+ +------+----------------+
|
||||||
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author The Netty Project (netty-dev@lists.jboss.org)
|
* @author The Netty Project (netty-dev@lists.jboss.org)
|
||||||
* @author Trustin Lee (tlee@redhat.com)
|
* @author Trustin Lee (tlee@redhat.com)
|
||||||
@ -35,6 +117,7 @@ import org.jboss.netty.channel.ChannelHandlerContext;
|
|||||||
* @version $Rev:231 $, $Date:2008-06-12 16:44:50 +0900 (목, 12 6월 2008) $
|
* @version $Rev:231 $, $Date:2008-06-12 16:44:50 +0900 (목, 12 6월 2008) $
|
||||||
*
|
*
|
||||||
* @apiviz.landmark
|
* @apiviz.landmark
|
||||||
|
* @see LengthFieldPrepender
|
||||||
*/
|
*/
|
||||||
public class LengthFieldBasedFrameDecoder extends FrameDecoder {
|
public class LengthFieldBasedFrameDecoder extends FrameDecoder {
|
||||||
|
|
||||||
@ -50,6 +133,16 @@ public class LengthFieldBasedFrameDecoder extends FrameDecoder {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new instance.
|
* Creates a new instance.
|
||||||
|
*
|
||||||
|
* @param maxFrameLength
|
||||||
|
* the maximum length of the frame. If the length of the frame is
|
||||||
|
* greater than this value, {@link TooLongFrameException} will be
|
||||||
|
* thrown.
|
||||||
|
* @param lengthFieldOffset
|
||||||
|
* the offset of the length field
|
||||||
|
* @param lengthFieldLength
|
||||||
|
* the length of the length field
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
public LengthFieldBasedFrameDecoder(
|
public LengthFieldBasedFrameDecoder(
|
||||||
int maxFrameLength,
|
int maxFrameLength,
|
||||||
@ -59,6 +152,19 @@ public class LengthFieldBasedFrameDecoder extends FrameDecoder {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new instance.
|
* Creates a new instance.
|
||||||
|
*
|
||||||
|
* @param maxFrameLength
|
||||||
|
* the maximum length of the frame. If the length of the frame is
|
||||||
|
* greater than this value, {@link TooLongFrameException} will be
|
||||||
|
* thrown.
|
||||||
|
* @param lengthFieldOffset
|
||||||
|
* the offset of the length field
|
||||||
|
* @param lengthFieldLength
|
||||||
|
* the length of the length field
|
||||||
|
* @param lengthAdjustment
|
||||||
|
* the compensation value to add to the value of the length field
|
||||||
|
* @param initialBytesToStrip
|
||||||
|
* the number of first bytes to strip out from the decoded frame
|
||||||
*/
|
*/
|
||||||
public LengthFieldBasedFrameDecoder(
|
public LengthFieldBasedFrameDecoder(
|
||||||
int maxFrameLength,
|
int maxFrameLength,
|
||||||
|
Loading…
Reference in New Issue
Block a user