MqttDecoder Class — netty Architecture
Architecture documentation for the MqttDecoder class in MqttDecoder.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD c4faa729_e212_a3dd_9d90_3e8fd908d755["MqttDecoder"] 52078baf_b26d_75e7_1081_84887a89512d["MqttDecoder.java"] c4faa729_e212_a3dd_9d90_3e8fd908d755 -->|defined in| 52078baf_b26d_75e7_1081_84887a89512d 4e72241e_5c66_78f9_6730_f0dbaf898957["MqttDecoder()"] c4faa729_e212_a3dd_9d90_3e8fd908d755 -->|method| 4e72241e_5c66_78f9_6730_f0dbaf898957 a35298c8_9a5c_3e14_ccb3_e2c50cd85c73["decode()"] c4faa729_e212_a3dd_9d90_3e8fd908d755 -->|method| a35298c8_9a5c_3e14_ccb3_e2c50cd85c73 aadf437a_1f0b_b0d0_59f0_96569761a7d4["MqttMessage()"] c4faa729_e212_a3dd_9d90_3e8fd908d755 -->|method| aadf437a_1f0b_b0d0_59f0_96569761a7d4 f52b822d_d755_b4dd_2485_216ecd243ffb["MqttFixedHeader()"] c4faa729_e212_a3dd_9d90_3e8fd908d755 -->|method| f52b822d_d755_b4dd_2485_216ecd243ffb 0e76d845_8de4_7a4c_bd45_465942f0d8f3["parseRemainingLength()"] c4faa729_e212_a3dd_9d90_3e8fd908d755 -->|method| 0e76d845_8de4_7a4c_bd45_465942f0d8f3 f861d2ef_8349_def0_dc63_58d885f3887f["Object()"] c4faa729_e212_a3dd_9d90_3e8fd908d755 -->|method| f861d2ef_8349_def0_dc63_58d885f3887f 011991cc_195a_5e24_a498_8df8267d825e["MqttConnectVariableHeader()"] c4faa729_e212_a3dd_9d90_3e8fd908d755 -->|method| 011991cc_195a_5e24_a498_8df8267d825e ce7a49f3_246f_2440_f1c6_01af3e368c37["MqttConnAckVariableHeader()"] c4faa729_e212_a3dd_9d90_3e8fd908d755 -->|method| ce7a49f3_246f_2440_f1c6_01af3e368c37 56e49442_12c5_b9e5_14d7_23d73dd802d2["MqttMessageIdAndPropertiesVariableHeader()"] c4faa729_e212_a3dd_9d90_3e8fd908d755 -->|method| 56e49442_12c5_b9e5_14d7_23d73dd802d2 8b19608c_9ee3_40f3_5402_e745fcea4448["MqttPubReplyMessageVariableHeader()"] c4faa729_e212_a3dd_9d90_3e8fd908d755 -->|method| 8b19608c_9ee3_40f3_5402_e745fcea4448 fc3166bc_2c32_c8b7_e203_32d9c6648fa1["MqttReasonCodeAndPropertiesVariableHeader()"] c4faa729_e212_a3dd_9d90_3e8fd908d755 -->|method| fc3166bc_2c32_c8b7_e203_32d9c6648fa1 c4f45191_2a53_efcc_39c7_8365c184d7db["MqttPublishVariableHeader()"] c4faa729_e212_a3dd_9d90_3e8fd908d755 -->|method| c4f45191_2a53_efcc_39c7_8365c184d7db ffabaaa2_4dc4_d6a0_6031_2c831eb098b0["decodeMessageId()"] c4faa729_e212_a3dd_9d90_3e8fd908d755 -->|method| ffabaaa2_4dc4_d6a0_6031_2c831eb098b0
Relationship Graph
Source Code
codec-mqtt/src/main/java/io/netty/handler/codec/mqtt/MqttDecoder.java lines 76–837
public final class MqttDecoder extends ReplayingDecoder<DecoderState> {
/**
* States of the decoder.
* We start at READ_FIXED_HEADER, followed by
* READ_VARIABLE_HEADER and finally READ_PAYLOAD.
*/
enum DecoderState {
READ_FIXED_HEADER,
READ_VARIABLE_HEADER,
READ_PAYLOAD,
BAD_MESSAGE,
}
private MqttFixedHeader mqttFixedHeader;
private Object variableHeader;
private int bytesRemainingInVariablePart;
private final int maxBytesInMessage;
private final int maxClientIdLength;
public MqttDecoder() {
this(DEFAULT_MAX_BYTES_IN_MESSAGE, DEFAULT_MAX_CLIENT_ID_LENGTH);
}
public MqttDecoder(int maxBytesInMessage) {
this(maxBytesInMessage, DEFAULT_MAX_CLIENT_ID_LENGTH);
}
public MqttDecoder(int maxBytesInMessage, int maxClientIdLength) {
super(DecoderState.READ_FIXED_HEADER);
this.maxBytesInMessage = ObjectUtil.checkPositive(maxBytesInMessage, "maxBytesInMessage");
this.maxClientIdLength = ObjectUtil.checkPositive(maxClientIdLength, "maxClientIdLength");
}
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf buffer, List<Object> out) throws Exception {
switch (state()) {
case READ_FIXED_HEADER: try {
mqttFixedHeader = decodeFixedHeader(ctx, buffer);
bytesRemainingInVariablePart = mqttFixedHeader.remainingLength();
checkpoint(DecoderState.READ_VARIABLE_HEADER);
// fall through
} catch (Exception cause) {
out.add(invalidMessage(cause));
return;
}
case READ_VARIABLE_HEADER: try {
int bytesRemainingBeforeVariableHeader = bytesRemainingInVariablePart;
variableHeader = decodeVariableHeader(ctx, buffer, mqttFixedHeader);
if (bytesRemainingBeforeVariableHeader > maxBytesInMessage) {
buffer.skipBytes(actualReadableBytes());
throw new TooLongFrameException("message length exceeds " + maxBytesInMessage + ": "
+ bytesRemainingBeforeVariableHeader);
}
checkpoint(DecoderState.READ_PAYLOAD);
// fall through
} catch (Exception cause) {
out.add(invalidMessage(cause));
return;
}
case READ_PAYLOAD: try {
final Object decodedPayload =
decodePayload(
ctx,
buffer,
mqttFixedHeader.messageType(),
maxClientIdLength,
variableHeader);
checkpoint(DecoderState.READ_FIXED_HEADER);
MqttMessage message = MqttMessageFactory.newMessage(
mqttFixedHeader, variableHeader, decodedPayload);
mqttFixedHeader = null;
variableHeader = null;
out.add(message);
break;
} catch (Exception cause) {
out.add(invalidMessage(cause));
return;
Source
Frequently Asked Questions
What is the MqttDecoder class?
MqttDecoder is a class in the netty codebase, defined in codec-mqtt/src/main/java/io/netty/handler/codec/mqtt/MqttDecoder.java.
Where is MqttDecoder defined?
MqttDecoder is defined in codec-mqtt/src/main/java/io/netty/handler/codec/mqtt/MqttDecoder.java at line 76.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free