Home / Class/ MqttDecoder Class — netty Architecture

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;

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