MqttCodecUtil Class — netty Architecture
Architecture documentation for the MqttCodecUtil class in MqttCodecUtil.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 8cc4b5f5_1c6e_ed7b_93cd_8de978fc304c["MqttCodecUtil"] 397b5d32_fc6d_2eaa_2392_8f94340a3c8e["MqttCodecUtil.java"] 8cc4b5f5_1c6e_ed7b_93cd_8de978fc304c -->|defined in| 397b5d32_fc6d_2eaa_2392_8f94340a3c8e 01a072b3_9c32_18fc_dea0_1beb8e00503a["MqttVersion()"] 8cc4b5f5_1c6e_ed7b_93cd_8de978fc304c -->|method| 01a072b3_9c32_18fc_dea0_1beb8e00503a c7468cce_1660_80a5_b862_0862b4939da4["setMqttVersion()"] 8cc4b5f5_1c6e_ed7b_93cd_8de978fc304c -->|method| c7468cce_1660_80a5_b862_0862b4939da4 b4806cb3_33aa_2c46_ad1b_e978476a6151["isValidPublishTopicName()"] 8cc4b5f5_1c6e_ed7b_93cd_8de978fc304c -->|method| b4806cb3_33aa_2c46_ad1b_e978476a6151 8e24bd70_b22e_1a1b_1c9d_1978ffb7a3d3["isValidMessageId()"] 8cc4b5f5_1c6e_ed7b_93cd_8de978fc304c -->|method| 8e24bd70_b22e_1a1b_1c9d_1978ffb7a3d3 d8241bea_5097_fd1a_ef25_f6a275af9502["isValidClientId()"] 8cc4b5f5_1c6e_ed7b_93cd_8de978fc304c -->|method| d8241bea_5097_fd1a_ef25_f6a275af9502 dfe673fb_d7c6_8571_4ba2_328416a117ec["MqttFixedHeader()"] 8cc4b5f5_1c6e_ed7b_93cd_8de978fc304c -->|method| dfe673fb_d7c6_8571_4ba2_328416a117ec a077046e_24d2_2753_316e_dd2314b027da["MqttCodecUtil()"] 8cc4b5f5_1c6e_ed7b_93cd_8de978fc304c -->|method| a077046e_24d2_2753_316e_dd2314b027da
Relationship Graph
Source Code
codec-mqtt/src/main/java/io/netty/handler/codec/mqtt/MqttCodecUtil.java lines 26–132
final class MqttCodecUtil {
static final AttributeKey<MqttVersion> MQTT_VERSION_KEY = AttributeKey.valueOf("NETTY_CODEC_MQTT_VERSION");
static MqttVersion getMqttVersion(ChannelHandlerContext ctx) {
Attribute<MqttVersion> attr = ctx.channel().attr(MQTT_VERSION_KEY);
MqttVersion version = attr.get();
if (version == null) {
return MqttVersion.MQTT_3_1_1;
}
return version;
}
static void setMqttVersion(ChannelHandlerContext ctx, MqttVersion version) {
Attribute<MqttVersion> attr = ctx.channel().attr(MQTT_VERSION_KEY);
attr.set(version);
}
static boolean isValidPublishTopicName(String topicName) {
// publish topic name must not contain any wildcard
for (int i = 0; i < topicName.length(); i++) {
char c = topicName.charAt(i);
if (c == '#' || c == '+') {
return false;
}
}
return true;
}
static boolean isValidMessageId(int messageId) {
return messageId != 0;
}
static boolean isValidClientId(MqttVersion mqttVersion, int maxClientIdLength, String clientId) {
if (mqttVersion == MqttVersion.MQTT_3_1) {
return clientId != null && clientId.length() >= MIN_CLIENT_ID_LENGTH &&
clientId.length() <= maxClientIdLength;
}
if (mqttVersion == MqttVersion.MQTT_3_1_1 || mqttVersion == MqttVersion.MQTT_5) {
// In 3.1.3.1 Client Identifier of MQTT 3.1.1 and 5.0 specifications, The Server MAY allow ClientId’s
// that contain more than 23 encoded bytes. And, The Server MAY allow zero-length ClientId.
return clientId != null;
}
throw new IllegalArgumentException(mqttVersion + " is unknown mqtt version");
}
static MqttFixedHeader validateFixedHeader(ChannelHandlerContext ctx, MqttFixedHeader mqttFixedHeader) {
switch (mqttFixedHeader.messageType()) {
case PUBREL:
case SUBSCRIBE:
case UNSUBSCRIBE:
if (mqttFixedHeader.qosLevel() != MqttQoS.AT_LEAST_ONCE) {
throw new DecoderException(mqttFixedHeader.messageType().name() + " message must have QoS 1");
}
return mqttFixedHeader;
case AUTH:
if (MqttCodecUtil.getMqttVersion(ctx) != MqttVersion.MQTT_5) {
throw new DecoderException("AUTH message requires at least MQTT 5");
}
return mqttFixedHeader;
default:
return mqttFixedHeader;
}
}
static MqttFixedHeader resetUnusedFields(MqttFixedHeader mqttFixedHeader) {
switch (mqttFixedHeader.messageType()) {
case CONNECT:
case CONNACK:
case PUBACK:
case PUBREC:
case PUBCOMP:
case SUBACK:
case UNSUBACK:
case PINGREQ:
case PINGRESP:
case DISCONNECT:
if (mqttFixedHeader.isDup() ||
mqttFixedHeader.qosLevel() != MqttQoS.AT_MOST_ONCE ||
mqttFixedHeader.isRetain()) {
return new MqttFixedHeader(
Source
Frequently Asked Questions
What is the MqttCodecUtil class?
MqttCodecUtil is a class in the netty codebase, defined in codec-mqtt/src/main/java/io/netty/handler/codec/mqtt/MqttCodecUtil.java.
Where is MqttCodecUtil defined?
MqttCodecUtil is defined in codec-mqtt/src/main/java/io/netty/handler/codec/mqtt/MqttCodecUtil.java at line 26.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free