Class PrefixedStringDecoder

All Implemented Interfaces:
ProtocolDecoder

public class PrefixedStringDecoder extends CumulativeProtocolDecoder
A ProtocolDecoder which decodes a String using a fixed-length length prefix.
  • Field Details

    • DEFAULT_PREFIX_LENGTH

      public static final int DEFAULT_PREFIX_LENGTH
      The default length for the prefix
      See Also:
    • DEFAULT_MAX_DATA_LENGTH

      public static final int DEFAULT_MAX_DATA_LENGTH
      The default maximum data length
      See Also:
    • charset

      private final Charset charset
    • prefixLength

      private int prefixLength
    • maxDataLength

      private int maxDataLength
  • Constructor Details

    • PrefixedStringDecoder

      public PrefixedStringDecoder(Charset charset, int prefixLength, int maxDataLength)
      Creates a new PrefixedStringDecoder instance
      Parameters:
      charset - the Charset to use for decoding
      prefixLength - the length of the prefix
      maxDataLength - maximum number of bytes allowed for a single String
    • PrefixedStringDecoder

      public PrefixedStringDecoder(Charset charset, int prefixLength)
      Creates a new PrefixedStringDecoder instance
      Parameters:
      charset - the Charset to use for decoding
      prefixLength - the length of the prefix
    • PrefixedStringDecoder

      public PrefixedStringDecoder(Charset charset)
      Creates a new PrefixedStringDecoder instance
      Parameters:
      charset - the Charset to use for decoding
  • Method Details

    • setPrefixLength

      public void setPrefixLength(int prefixLength)
      Sets the number of bytes used by the length prefix
      Parameters:
      prefixLength - the length of the length prefix (1, 2, or 4)
    • getPrefixLength

      public int getPrefixLength()
      Gets the length of the length prefix (1, 2, or 4)
      Returns:
      length of the length prefix
    • setMaxDataLength

      public void setMaxDataLength(int maxDataLength)
      Sets the maximum allowed value specified as data length in the incoming data

      Useful for preventing an OutOfMemory attack by the peer. The decoder will throw a BufferDataException when data length specified in the incoming data is greater than maxDataLength The default value is DEFAULT_MAX_DATA_LENGTH.

      Parameters:
      maxDataLength - maximum allowed value specified as data length in the incoming data
    • getMaxDataLength

      public int getMaxDataLength()
      Gets the maximum number of bytes allowed for a single String
      Returns:
      maximum number of bytes allowed for a single String
    • doDecode

      protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception
      Implement this method to consume the specified cumulative buffer and decode its content into message(s).
      Specified by:
      doDecode in class CumulativeProtocolDecoder
      Parameters:
      session - The current Session
      in - the cumulative buffer
      out - The ProtocolDecoderOutput that will receive the decoded message
      Returns:
      true if and only if there's more to decode in the buffer and you want to have doDecode method invoked again. Return false if remaining data is not enough to decode, then this method will be invoked again when more data is cumulated.
      Throws:
      Exception - if cannot decode in.