Package io.netty.handler.codec.mqtt
Class MqttDecoder
- java.lang.Object
-
- All Implemented Interfaces:
ChannelHandler
,ChannelInboundHandler
public final class MqttDecoder extends ReplayingDecoder<MqttDecoder.DecoderState>
Decodes Mqtt messages from bytes, following the MQTT protocol specification v3.1
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
MqttDecoder.DecoderState
States of the decoder.private static class
MqttDecoder.Result<T>
-
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 int
bytesRemainingInVariablePart
private static int
DEFAULT_MAX_BYTES_IN_MESSAGE
private int
maxBytesInMessage
private MqttFixedHeader
mqttFixedHeader
private java.lang.Object
variableHeader
-
Fields inherited from class io.netty.handler.codec.ByteToMessageDecoder
COMPOSITE_CUMULATOR, MERGE_CUMULATOR
-
-
Constructor Summary
Constructors Constructor Description MqttDecoder()
MqttDecoder(int maxBytesInMessage)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
decode(ChannelHandlerContext ctx, ByteBuf buffer, java.util.List<java.lang.Object> out)
Decode the from oneByteBuf
to an other.private static MqttDecoder.Result<byte[]>
decodeByteArray(ByteBuf buffer)
private static MqttDecoder.Result<MqttConnAckVariableHeader>
decodeConnAckVariableHeader(ByteBuf buffer)
private static MqttDecoder.Result<MqttConnectPayload>
decodeConnectionPayload(ByteBuf buffer, MqttConnectVariableHeader mqttConnectVariableHeader)
private static MqttDecoder.Result<MqttConnectVariableHeader>
decodeConnectionVariableHeader(ByteBuf buffer)
private static MqttFixedHeader
decodeFixedHeader(ByteBuf buffer)
Decodes the fixed header.private static MqttDecoder.Result<java.lang.Integer>
decodeMessageId(ByteBuf buffer)
private static MqttDecoder.Result<MqttMessageIdVariableHeader>
decodeMessageIdVariableHeader(ByteBuf buffer)
private static MqttDecoder.Result<java.lang.Integer>
decodeMsbLsb(ByteBuf buffer)
private static MqttDecoder.Result<java.lang.Integer>
decodeMsbLsb(ByteBuf buffer, int min, int max)
private static MqttDecoder.Result<?>
decodePayload(ByteBuf buffer, MqttMessageType messageType, int bytesRemainingInVariablePart, java.lang.Object variableHeader)
Decodes the payload.private static MqttDecoder.Result<ByteBuf>
decodePublishPayload(ByteBuf buffer, int bytesRemainingInVariablePart)
private static MqttDecoder.Result<MqttPublishVariableHeader>
decodePublishVariableHeader(ByteBuf buffer, MqttFixedHeader mqttFixedHeader)
private static MqttDecoder.Result<java.lang.String>
decodeString(ByteBuf buffer)
private static MqttDecoder.Result<java.lang.String>
decodeString(ByteBuf buffer, int minBytes, int maxBytes)
private static MqttDecoder.Result<MqttSubAckPayload>
decodeSubackPayload(ByteBuf buffer, int bytesRemainingInVariablePart)
private static MqttDecoder.Result<MqttSubscribePayload>
decodeSubscribePayload(ByteBuf buffer, int bytesRemainingInVariablePart)
private static MqttDecoder.Result<MqttUnsubscribePayload>
decodeUnsubscribePayload(ByteBuf buffer, int bytesRemainingInVariablePart)
private static MqttDecoder.Result<?>
decodeVariableHeader(ByteBuf buffer, MqttFixedHeader mqttFixedHeader)
Decodes the variable header (if any)private MqttMessage
invalidMessage(java.lang.Throwable cause)
-
Methods inherited from class io.netty.handler.codec.ReplayingDecoder
callDecode, checkpoint, checkpoint, state, state
-
Methods inherited from class io.netty.handler.codec.ByteToMessageDecoder
actualReadableBytes, 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_BYTES_IN_MESSAGE
private static final int DEFAULT_MAX_BYTES_IN_MESSAGE
- See Also:
- Constant Field Values
-
mqttFixedHeader
private MqttFixedHeader mqttFixedHeader
-
variableHeader
private java.lang.Object variableHeader
-
bytesRemainingInVariablePart
private int bytesRemainingInVariablePart
-
maxBytesInMessage
private final int maxBytesInMessage
-
-
Method Detail
-
decode
protected void decode(ChannelHandlerContext ctx, ByteBuf buffer, java.util.List<java.lang.Object> out) throws java.lang.Exception
Description copied from class:ByteToMessageDecoder
Decode the from oneByteBuf
to an other. This method will be called till either the inputByteBuf
has nothing to read when return from this method or till nothing was read from the inputByteBuf
.- Specified by:
decode
in classByteToMessageDecoder
- Parameters:
ctx
- theChannelHandlerContext
which thisByteToMessageDecoder
belongs tobuffer
- theByteBuf
from which to read dataout
- theList
to which decoded messages should be added- Throws:
java.lang.Exception
- is thrown if an error occurs
-
invalidMessage
private MqttMessage invalidMessage(java.lang.Throwable cause)
-
decodeFixedHeader
private static MqttFixedHeader decodeFixedHeader(ByteBuf buffer)
Decodes the fixed header. It's one byte for the flags and then variable bytes for the remaining length.- Parameters:
buffer
- the buffer to decode from- Returns:
- the fixed header
-
decodeVariableHeader
private static MqttDecoder.Result<?> decodeVariableHeader(ByteBuf buffer, MqttFixedHeader mqttFixedHeader)
Decodes the variable header (if any)- Parameters:
buffer
- the buffer to decode frommqttFixedHeader
- MqttFixedHeader of the same message- Returns:
- the variable header
-
decodeConnectionVariableHeader
private static MqttDecoder.Result<MqttConnectVariableHeader> decodeConnectionVariableHeader(ByteBuf buffer)
-
decodeConnAckVariableHeader
private static MqttDecoder.Result<MqttConnAckVariableHeader> decodeConnAckVariableHeader(ByteBuf buffer)
-
decodeMessageIdVariableHeader
private static MqttDecoder.Result<MqttMessageIdVariableHeader> decodeMessageIdVariableHeader(ByteBuf buffer)
-
decodePublishVariableHeader
private static MqttDecoder.Result<MqttPublishVariableHeader> decodePublishVariableHeader(ByteBuf buffer, MqttFixedHeader mqttFixedHeader)
-
decodeMessageId
private static MqttDecoder.Result<java.lang.Integer> decodeMessageId(ByteBuf buffer)
-
decodePayload
private static MqttDecoder.Result<?> decodePayload(ByteBuf buffer, MqttMessageType messageType, int bytesRemainingInVariablePart, java.lang.Object variableHeader)
Decodes the payload.- Parameters:
buffer
- the buffer to decode frommessageType
- type of the message being decodedbytesRemainingInVariablePart
- bytes remainingvariableHeader
- variable header of the same message- Returns:
- the payload
-
decodeConnectionPayload
private static MqttDecoder.Result<MqttConnectPayload> decodeConnectionPayload(ByteBuf buffer, MqttConnectVariableHeader mqttConnectVariableHeader)
-
decodeSubscribePayload
private static MqttDecoder.Result<MqttSubscribePayload> decodeSubscribePayload(ByteBuf buffer, int bytesRemainingInVariablePart)
-
decodeSubackPayload
private static MqttDecoder.Result<MqttSubAckPayload> decodeSubackPayload(ByteBuf buffer, int bytesRemainingInVariablePart)
-
decodeUnsubscribePayload
private static MqttDecoder.Result<MqttUnsubscribePayload> decodeUnsubscribePayload(ByteBuf buffer, int bytesRemainingInVariablePart)
-
decodePublishPayload
private static MqttDecoder.Result<ByteBuf> decodePublishPayload(ByteBuf buffer, int bytesRemainingInVariablePart)
-
decodeString
private static MqttDecoder.Result<java.lang.String> decodeString(ByteBuf buffer)
-
decodeString
private static MqttDecoder.Result<java.lang.String> decodeString(ByteBuf buffer, int minBytes, int maxBytes)
-
decodeByteArray
private static MqttDecoder.Result<byte[]> decodeByteArray(ByteBuf buffer)
-
decodeMsbLsb
private static MqttDecoder.Result<java.lang.Integer> decodeMsbLsb(ByteBuf buffer)
-
decodeMsbLsb
private static MqttDecoder.Result<java.lang.Integer> decodeMsbLsb(ByteBuf buffer, int min, int max)
-
-