Package io.netty.handler.codec.smtp
Class SmtpResponseDecoder
- java.lang.Object
-
- io.netty.channel.ChannelHandlerAdapter
-
- io.netty.channel.ChannelInboundHandlerAdapter
-
- io.netty.handler.codec.ByteToMessageDecoder
-
- io.netty.handler.codec.LineBasedFrameDecoder
-
- io.netty.handler.codec.smtp.SmtpResponseDecoder
-
- All Implemented Interfaces:
ChannelHandler,ChannelInboundHandler
@UnstableApi public final class SmtpResponseDecoder extends LineBasedFrameDecoder
Decoder for SMTP responses.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class io.netty.handler.codec.ByteToMessageDecoder
ByteToMessageDecoder.Cumulator
-
Nested classes/interfaces inherited from interface io.netty.channel.ChannelHandler
ChannelHandler.Sharable
-
-
Field Summary
Fields Modifier and Type Field Description private static intDEFAULT_MAX_RESPONSE_SIZEprivate static intDETAIL_ENTRY_OVERHEADprivate java.util.List<java.lang.CharSequence>detailsprivate intmaxResponseSizeprivate longresponseSize-
Fields inherited from class io.netty.handler.codec.ByteToMessageDecoder
COMPOSITE_CUMULATOR, MERGE_CUMULATOR
-
-
Constructor Summary
Constructors Constructor Description SmtpResponseDecoder(int maxLineLength)Creates a new instance that enforces the givenmaxLineLengthand a default limit of 64 KiB on the accumulated size of a multi-line response.SmtpResponseDecoder(int maxLineLength, int maxResponseSize)Creates a new instance that enforces the givenmaxLineLengthandmaxResponseSize.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected SmtpResponsedecode(ChannelHandlerContext ctx, ByteBuf buffer)Create a frame out of theByteBufand return it.private static DecoderExceptionnewDecoderException(ByteBuf buffer, int readerIndex, int readable)private static intparseCode(ByteBuf buffer)Parses the io.netty.handler.codec.smtp code without any allocation, which is three digits.private static intparseNumber(byte b)private voidreset()-
Methods inherited from class io.netty.handler.codec.LineBasedFrameDecoder
decode
-
Methods inherited from class io.netty.handler.codec.ByteToMessageDecoder
actualReadableBytes, callDecode, channelInactive, channelRead, channelReadComplete, decodeLast, discardSomeReadBytes, handlerRemoved, handlerRemoved0, internalBuffer, isSingleDecode, setCumulator, setDiscardAfterReads, setSingleDecode, userEventTriggered
-
Methods inherited from class io.netty.channel.ChannelInboundHandlerAdapter
channelActive, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught
-
Methods inherited from class io.netty.channel.ChannelHandlerAdapter
ensureNotSharable, handlerAdded, isSharable
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface io.netty.channel.ChannelHandler
handlerAdded
-
-
-
-
Field Detail
-
DEFAULT_MAX_RESPONSE_SIZE
private static final int DEFAULT_MAX_RESPONSE_SIZE
- See Also:
- Constant Field Values
-
DETAIL_ENTRY_OVERHEAD
private static final int DETAIL_ENTRY_OVERHEAD
- See Also:
- Constant Field Values
-
maxResponseSize
private final int maxResponseSize
-
details
private java.util.List<java.lang.CharSequence> details
-
responseSize
private long responseSize
-
-
Constructor Detail
-
SmtpResponseDecoder
public SmtpResponseDecoder(int maxLineLength)
Creates a new instance that enforces the givenmaxLineLengthand a default limit of 64 KiB on the accumulated size of a multi-line response.- Parameters:
maxLineLength- the maximum length of a single response line, in bytes.
-
SmtpResponseDecoder
public SmtpResponseDecoder(int maxLineLength, int maxResponseSize)Creates a new instance that enforces the givenmaxLineLengthandmaxResponseSize.The lines of a multi-line response are buffered until its terminating line arrives.
maxResponseSizebounds that buffering. Once it is exceeded, decoding fails with aTooLongFrameException. The limit is approximate and tracks retained memory rather than bytes received, as it charges each buffered line a fixed object overhead in addition to its detail bytes, and ignores the response code, the separator and the terminating line.- Parameters:
maxLineLength- the maximum length of a single response line, in bytes.maxResponseSize- the maximum accumulated size of a multi-line response, in bytes.
-
-
Method Detail
-
decode
protected SmtpResponse decode(ChannelHandlerContext ctx, ByteBuf buffer) throws java.lang.Exception
Description copied from class:LineBasedFrameDecoderCreate a frame out of theByteBufand return it.- Overrides:
decodein classLineBasedFrameDecoder- Parameters:
ctx- theChannelHandlerContextwhich thisByteToMessageDecoderbelongs tobuffer- theByteBuffrom which to read data- Returns:
- frame the
ByteBufwhich represent the frame ornullif no frame could be created. - Throws:
java.lang.Exception
-
reset
private void reset()
-
newDecoderException
private static DecoderException newDecoderException(ByteBuf buffer, int readerIndex, int readable)
-
parseCode
private static int parseCode(ByteBuf buffer)
Parses the io.netty.handler.codec.smtp code without any allocation, which is three digits.
-
parseNumber
private static int parseNumber(byte b)
-
-