Package io.netty.handler.codec.mqtt
Class MqttDecoder
- All Implemented Interfaces:
ChannelHandler,ChannelInboundHandler
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static enumStates of the decoder.private static final classNested classes/interfaces inherited from class io.netty.handler.codec.ByteToMessageDecoder
ByteToMessageDecoder.CumulatorNested classes/interfaces inherited from interface io.netty.channel.ChannelHandler
ChannelHandler.Sharable -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate intprivate final intprivate final intprivate MqttFixedHeaderprivate ObjectFields inherited from class io.netty.handler.codec.ByteToMessageDecoder
COMPOSITE_CUMULATOR, MERGE_CUMULATOR -
Constructor Summary
ConstructorsConstructorDescriptionMqttDecoder(int maxBytesInMessage) MqttDecoder(int maxBytesInMessage, int maxClientIdLength) -
Method Summary
Modifier and TypeMethodDescriptionprotected voiddecode(ChannelHandlerContext ctx, ByteBuf buffer, List<Object> out) Decode the from oneByteBufto an other.private static byte[]decodeByteArray(ByteBuf buffer) private static MqttDecoder.Result<MqttConnAckVariableHeader>decodeConnAckVariableHeader(ChannelHandlerContext ctx, ByteBuf buffer) private static MqttDecoder.Result<MqttConnectPayload>decodeConnectionPayload(ByteBuf buffer, int maxClientIdLength, MqttConnectVariableHeader mqttConnectVariableHeader) private static MqttDecoder.Result<MqttConnectVariableHeader>decodeConnectionVariableHeader(ChannelHandlerContext ctx, ByteBuf buffer) private static MqttFixedHeaderdecodeFixedHeader(ChannelHandlerContext ctx, ByteBuf buffer) Decodes the fixed header.private static intdecodeMessageId(ByteBuf buffer) private static MqttDecoder.Result<MqttMessageIdAndPropertiesVariableHeader>private static intdecodeMsbLsb(ByteBuf buffer) numberOfBytesConsumed = 2.private static MqttDecoder.Result<?>decodePayload(ChannelHandlerContext ctx, ByteBuf buffer, MqttMessageType messageType, int bytesRemainingInVariablePart, int maxClientIdLength, Object variableHeader) Decodes the payload.private static MqttDecoder.Result<MqttProperties>decodeProperties(ByteBuf buffer) private static MqttDecoder.Result<ByteBuf>decodePublishPayload(ByteBuf buffer, int bytesRemainingInVariablePart) decodePublishVariableHeader(ChannelHandlerContext ctx, ByteBuf buffer, MqttFixedHeader mqttFixedHeader) decodePubReplyMessage(ByteBuf buffer) private static MqttDecoder.Result<String>decodeString(ByteBuf buffer) private static MqttDecoder.Result<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<MqttUnsubAckPayload>decodeUnsubAckPayload(ChannelHandlerContext ctx, ByteBuf buffer, int bytesRemainingInVariablePart) private static MqttDecoder.Result<MqttUnsubscribePayload>decodeUnsubscribePayload(ByteBuf buffer, int bytesRemainingInVariablePart) private static longdecodeVariableByteInteger(ByteBuf buffer) See 1.5.5 Variable Byte Integer section of MQTT 5.0 specification for encoding/decoding rulesprivate MqttDecoder.Result<?>decodeVariableHeader(ChannelHandlerContext ctx, ByteBuf buffer, MqttFixedHeader mqttFixedHeader) Decodes the variable header (if any)private MqttMessageinvalidMessage(Throwable cause) private static longpackInts(int a, int b) private static intunpackA(long ints) private static intunpackB(long ints) Methods inherited from class io.netty.handler.codec.ReplayingDecoder
callDecode, checkpoint, checkpoint, state, stateMethods inherited from class io.netty.handler.codec.ByteToMessageDecoder
actualReadableBytes, channelInactive, channelRead, channelReadComplete, decodeLast, discardSomeReadBytes, handlerRemoved, handlerRemoved0, internalBuffer, isSingleDecode, setCumulator, setDiscardAfterReads, setSingleDecode, userEventTriggeredMethods inherited from class io.netty.channel.ChannelInboundHandlerAdapter
channelActive, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaughtMethods inherited from class io.netty.channel.ChannelHandlerAdapter
ensureNotSharable, handlerAdded, isSharableMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface io.netty.channel.ChannelHandler
handlerAdded
-
Field Details
-
mqttFixedHeader
-
variableHeader
-
bytesRemainingInVariablePart
private int bytesRemainingInVariablePart -
maxBytesInMessage
private final int maxBytesInMessage -
maxClientIdLength
private final int maxClientIdLength
-
-
Constructor Details
-
MqttDecoder
public MqttDecoder() -
MqttDecoder
public MqttDecoder(int maxBytesInMessage) -
MqttDecoder
public MqttDecoder(int maxBytesInMessage, int maxClientIdLength)
-
-
Method Details
-
decode
Description copied from class:ByteToMessageDecoderDecode the from oneByteBufto an other. This method will be called till either the inputByteBufhas nothing to read when return from this method or till nothing was read from the inputByteBuf.- Specified by:
decodein classByteToMessageDecoder- Parameters:
ctx- theChannelHandlerContextwhich thisByteToMessageDecoderbelongs tobuffer- theByteBuffrom which to read dataout- theListto which decoded messages should be added- Throws:
Exception- is thrown if an error occurs
-
invalidMessage
-
decodeFixedHeader
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 MqttDecoder.Result<?> decodeVariableHeader(ChannelHandlerContext ctx, 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(ChannelHandlerContext ctx, ByteBuf buffer) -
decodeConnAckVariableHeader
private static MqttDecoder.Result<MqttConnAckVariableHeader> decodeConnAckVariableHeader(ChannelHandlerContext ctx, ByteBuf buffer) -
decodeMessageIdAndPropertiesVariableHeader
private static MqttDecoder.Result<MqttMessageIdAndPropertiesVariableHeader> decodeMessageIdAndPropertiesVariableHeader(ChannelHandlerContext ctx, ByteBuf buffer) -
decodePubReplyMessage
-
decodeReasonCodeAndPropertiesVariableHeader
private MqttDecoder.Result<MqttReasonCodeAndPropertiesVariableHeader> decodeReasonCodeAndPropertiesVariableHeader(ByteBuf buffer) -
decodePublishVariableHeader
private MqttDecoder.Result<MqttPublishVariableHeader> decodePublishVariableHeader(ChannelHandlerContext ctx, ByteBuf buffer, MqttFixedHeader mqttFixedHeader) -
decodeMessageId
- Returns:
- messageId with numberOfBytesConsumed is 2
-
decodePayload
private static MqttDecoder.Result<?> decodePayload(ChannelHandlerContext ctx, ByteBuf buffer, MqttMessageType messageType, int bytesRemainingInVariablePart, int maxClientIdLength, 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, int maxClientIdLength, MqttConnectVariableHeader mqttConnectVariableHeader) -
decodeSubscribePayload
private static MqttDecoder.Result<MqttSubscribePayload> decodeSubscribePayload(ByteBuf buffer, int bytesRemainingInVariablePart) -
decodeSubackPayload
private static MqttDecoder.Result<MqttSubAckPayload> decodeSubackPayload(ByteBuf buffer, int bytesRemainingInVariablePart) -
decodeUnsubAckPayload
private static MqttDecoder.Result<MqttUnsubAckPayload> decodeUnsubAckPayload(ChannelHandlerContext ctx, 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
-
decodeString
-
decodeByteArray
- Returns:
- the decoded byte[], numberOfBytesConsumed = byte[].length + 2
-
packInts
private static long packInts(int a, int b) -
unpackA
private static int unpackA(long ints) -
unpackB
private static int unpackB(long ints) -
decodeMsbLsb
numberOfBytesConsumed = 2. return decoded result. -
decodeVariableByteInteger
See 1.5.5 Variable Byte Integer section of MQTT 5.0 specification for encoding/decoding rules- Parameters:
buffer- the buffer to decode from- Returns:
- result pack with a = decoded integer, b = numberOfBytesConsumed. Need to unpack to read them.
- Throws:
DecoderException- if bad MQTT protocol limits Remaining Length
-
decodeProperties
-