From 6bcb6ac6ca5087d250d37ef5affe1803eb73d2ec Mon Sep 17 00:00:00 2001 From: NB Grey <serge.rumyancev@gmail.com> Date: Tue, 31 Dec 2024 22:29:03 +0300 Subject: [PATCH] add response code conversion for mqtt 3.1.1 --- .../kotlin/io/github/davidepianca98/MQTTClient.kt | 4 +++- .../mqtt/packets/mqttv4/ConnectReturnCode.kt | 14 +++++++++++++- .../mqtt/packets/mqttv4/SubackReturnCode.kt | 2 +- .../mqtt/packets/mqttv5/ReasonCode.kt | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/kmqtt-client/src/commonMain/kotlin/io/github/davidepianca98/MQTTClient.kt b/kmqtt-client/src/commonMain/kotlin/io/github/davidepianca98/MQTTClient.kt index 5492e3b..dd25dae 100644 --- a/kmqtt-client/src/commonMain/kotlin/io/github/davidepianca98/MQTTClient.kt +++ b/kmqtt-client/src/commonMain/kotlin/io/github/davidepianca98/MQTTClient.kt @@ -41,6 +41,7 @@ import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Pubcomp import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Publish import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Suback import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Subscribe +import io.github.davidepianca98.mqtt.packets.mqttv4.toReasonCode import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Auth import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Connack import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Connect @@ -539,7 +540,8 @@ public class MQTTClient( enhancedAuthCallback(packet.properties.authenticationData) } else if (packet is MQTT4Connack) { if (packet.connectReturnCode != ConnectReturnCode.CONNECTION_ACCEPTED) { - throw IOException("Connection failed with code: ${packet.connectReturnCode}") + throw MQTTException(packet.connectReturnCode.toReasonCode()) +// throw IOException("Connection failed with code: ${packet.connectReturnCode}") } } diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/ConnectReturnCode.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/ConnectReturnCode.kt index 8346c22..09ad45d 100644 --- a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/ConnectReturnCode.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/ConnectReturnCode.kt @@ -1,5 +1,8 @@ package io.github.davidepianca98.mqtt.packets.mqttv4 +import io.github.davidepianca98.mqtt.packets.mqttv4.ConnectReturnCode.* +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode + public enum class ConnectReturnCode(public val value: Int) { CONNECTION_ACCEPTED(0), UNACCEPTABLE_PROTOCOL_VERSION(1), @@ -9,6 +12,15 @@ public enum class ConnectReturnCode(public val value: Int) { NOT_AUTHORIZED(5); public companion object { - public fun valueOf(value: Int): ConnectReturnCode? = values().firstOrNull { it.value == value } + public fun valueOf(value: Int): ConnectReturnCode? = entries.firstOrNull { it.value == value } } } + +public fun ConnectReturnCode.toReasonCode() : ReasonCode = when (this) { + CONNECTION_ACCEPTED -> ReasonCode.SUCCESS + UNACCEPTABLE_PROTOCOL_VERSION -> ReasonCode.UNSUPPORTED_PROTOCOL_VERSION + IDENTIFIER_REJECTED -> ReasonCode.CLIENT_IDENTIFIER_NOT_VALID + SERVER_UNAVAILABLE -> ReasonCode.SERVER_UNAVAILABLE + BAD_USERNAME_PASSWORD -> ReasonCode.BAD_USER_NAME_OR_PASSWORD + NOT_AUTHORIZED -> ReasonCode.NOT_AUTHORIZED +} diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/SubackReturnCode.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/SubackReturnCode.kt index 0c8331f..7972483 100644 --- a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/SubackReturnCode.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/SubackReturnCode.kt @@ -9,7 +9,7 @@ public enum class SubackReturnCode(public val value: Int) { FAILURE(128); public companion object { - public fun valueOf(value: Int): SubackReturnCode? = values().firstOrNull { it.value == value } + public fun valueOf(value: Int): SubackReturnCode? = entries.firstOrNull { it.value == value } } } diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/ReasonCode.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/ReasonCode.kt index dfba46b..2b61f53 100644 --- a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/ReasonCode.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/ReasonCode.kt @@ -46,6 +46,6 @@ public enum class ReasonCode(public val value: Int) { WILDCARD_SUBSCRIPTIONS_NOT_SUPPORTED(162); public companion object { - public fun valueOf(value: Int): ReasonCode? = values().firstOrNull { it.value == value } + public fun valueOf(value: Int): ReasonCode? = entries.firstOrNull { it.value == value } } } -- GitLab