Home / Function/ MqttConnectVariableHeader() — netty Function Reference

MqttConnectVariableHeader() — netty Function Reference

Architecture documentation for the MqttConnectVariableHeader() function in MqttDecoder.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  011991cc_195a_5e24_a498_8df8267d825e["MqttConnectVariableHeader()"]
  c4faa729_e212_a3dd_9d90_3e8fd908d755["MqttDecoder"]
  011991cc_195a_5e24_a498_8df8267d825e -->|defined in| c4faa729_e212_a3dd_9d90_3e8fd908d755
  98ef5a77_12ad_c763_de85_bb9068059363["decodeString()"]
  011991cc_195a_5e24_a498_8df8267d825e -->|calls| 98ef5a77_12ad_c763_de85_bb9068059363
  c329612b_da71_6e39_b716_e4f7dc59569d["decodeMsbLsb()"]
  011991cc_195a_5e24_a498_8df8267d825e -->|calls| c329612b_da71_6e39_b716_e4f7dc59569d
  8cad50bc_08ed_5075_a0f7_de30f00ba977["decodeProperties()"]
  011991cc_195a_5e24_a498_8df8267d825e -->|calls| 8cad50bc_08ed_5075_a0f7_de30f00ba977
  style 011991cc_195a_5e24_a498_8df8267d825e fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

codec-mqtt/src/main/java/io/netty/handler/codec/mqtt/MqttDecoder.java lines 314–369

    private MqttConnectVariableHeader decodeConnectionVariableHeader(
            ChannelHandlerContext ctx,
            ByteBuf buffer) {
        final Result<String> protoString = decodeString(buffer);
        int numberOfBytesConsumed = protoString.numberOfBytesConsumed;

        final byte protocolLevel = buffer.readByte();
        numberOfBytesConsumed += 1;

        MqttVersion version = MqttVersion.fromProtocolNameAndLevel(protoString.value, protocolLevel);
        MqttCodecUtil.setMqttVersion(ctx, version);

        final int b1 = buffer.readUnsignedByte();
        numberOfBytesConsumed += 1;

        final int keepAlive = decodeMsbLsb(buffer);
        numberOfBytesConsumed += 2;

        final boolean hasUserName = (b1 & 0x80) == 0x80;
        final boolean hasPassword = (b1 & 0x40) == 0x40;
        final boolean willRetain = (b1 & 0x20) == 0x20;
        final int willQos = (b1 & 0x18) >> 3;
        final boolean willFlag = (b1 & 0x04) == 0x04;
        final boolean cleanSession = (b1 & 0x02) == 0x02;
        if (version == MqttVersion.MQTT_3_1_1 || version == MqttVersion.MQTT_5) {
            final boolean zeroReservedFlag = (b1 & 0x01) == 0x0;
            if (!zeroReservedFlag) {
                // MQTT v3.1.1: The Server MUST validate that the reserved flag in the CONNECT Control Packet is
                // set to zero and disconnect the Client if it is not zero.
                // See https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc385349230
                throw new DecoderException("non-zero reserved flag");
            }
        }

        final MqttProperties properties;
        if (version == MqttVersion.MQTT_5) {
            final Result<MqttProperties> propertiesResult = decodeProperties(buffer);
            properties = propertiesResult.value;
            numberOfBytesConsumed += propertiesResult.numberOfBytesConsumed;
        } else {
            properties = MqttProperties.NO_PROPERTIES;
        }

        bytesRemainingInVariablePart -= numberOfBytesConsumed;
        return new MqttConnectVariableHeader(
                version.protocolName(),
                version.protocolLevel(),
                hasUserName,
                hasPassword,
                willRetain,
                willQos,
                willFlag,
                cleanSession,
                keepAlive,
                properties);
    }

Domain

Subdomains

Frequently Asked Questions

What does MqttConnectVariableHeader() do?
MqttConnectVariableHeader() is a function in the netty codebase, defined in codec-mqtt/src/main/java/io/netty/handler/codec/mqtt/MqttDecoder.java.
Where is MqttConnectVariableHeader() defined?
MqttConnectVariableHeader() is defined in codec-mqtt/src/main/java/io/netty/handler/codec/mqtt/MqttDecoder.java at line 314.
What does MqttConnectVariableHeader() call?
MqttConnectVariableHeader() calls 3 function(s): decodeMsbLsb, decodeProperties, decodeString.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free