diff --git a/kmqtt-broker/src/commonMain/kotlin/Main.kt b/kmqtt-broker/src/commonMain/kotlin/Main.kt index 5fa61d376995ccc46676433a5bcb6fccd9593f2a..02071dbf2019a41fcf3f8a72377412922e8d0cb3 100644 --- a/kmqtt-broker/src/commonMain/kotlin/Main.kt +++ b/kmqtt-broker/src/commonMain/kotlin/Main.kt @@ -1,5 +1,6 @@ -import mqtt.broker.Broker -import socket.tls.TLSSettings +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.setShutdownHook +import io.github.davidepianca98.socket.tls.TLSSettings private fun showHelp() { println("At least one argument needed:") diff --git a/kmqtt-broker/src/commonMain/kotlin/ShutdownHook.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/ShutdownHook.kt similarity index 61% rename from kmqtt-broker/src/commonMain/kotlin/ShutdownHook.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/ShutdownHook.kt index 82616b0786c0d3d7b2c6357e8ee26185fb5a6952..4d8edcfe0f48af7b1bb337ef8d81d11f074d97e7 100644 --- a/kmqtt-broker/src/commonMain/kotlin/ShutdownHook.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/ShutdownHook.kt @@ -1 +1,3 @@ +package io.github.davidepianca98 + internal expect fun setShutdownHook(hook: () -> Unit) diff --git a/kmqtt-broker/src/commonMain/kotlin/datastructures/Trie.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/datastructures/Trie.kt similarity index 96% rename from kmqtt-broker/src/commonMain/kotlin/datastructures/Trie.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/datastructures/Trie.kt index 2fc9e56bc15108d0023900161ada8eab66845962..02b6b010ce5fa2a168b8d29c31137a2b12c3553a 100644 --- a/kmqtt-broker/src/commonMain/kotlin/datastructures/Trie.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/datastructures/Trie.kt @@ -1,7 +1,7 @@ -package datastructures +package io.github.davidepianca98.datastructures -import mqtt.Subscription -import mqtt.getSharedTopicFilter +import io.github.davidepianca98.mqtt.Subscription +import io.github.davidepianca98.mqtt.getSharedTopicFilter internal class Trie(subscriptions: Map<String, Subscription>? = null) { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/Will.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/Will.kt similarity index 80% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/Will.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/Will.kt index 3b3a75eaf30fd79201f9364a2b1471ec25dac6c5..76906eee38a90f4941f33573faf4097a4e5422f2 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/Will.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/Will.kt @@ -1,10 +1,10 @@ -package mqtt +package io.github.davidepianca98.mqtt -import mqtt.packets.Qos -import mqtt.packets.mqtt.MQTTConnect -import mqtt.packets.mqttv5.MQTT5Connect -import mqtt.packets.mqttv5.ReasonCode -import validatePayloadFormat +import io.github.davidepianca98.mqtt.packets.Qos +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTConnect +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Connect +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.validatePayloadFormat public class Will(packet: MQTTConnect) { public val retain: Boolean diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/Broker.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/Broker.kt similarity index 93% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/Broker.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/Broker.kt index 3e2fe0c77b5fa03835b0f8fb1afa7df286f23993..72be9dbdd8d02549f139eb621634f36e8a663aa1 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/Broker.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/Broker.kt @@ -1,21 +1,22 @@ -package mqtt.broker - -import currentTimeMillis -import datastructures.Trie +package io.github.davidepianca98.mqtt.broker + +import io.github.davidepianca98.currentTimeMillis +import io.github.davidepianca98.datastructures.Trie +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.Subscription +import io.github.davidepianca98.mqtt.broker.cluster.* +import io.github.davidepianca98.mqtt.broker.interfaces.* +import io.github.davidepianca98.mqtt.matchesWildcard +import io.github.davidepianca98.mqtt.packets.Qos +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPublish +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Properties +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Publish +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.removeIf +import io.github.davidepianca98.socket.ServerSocketLoop +import io.github.davidepianca98.socket.tls.TLSSettings import kotlinx.atomicfu.locks.reentrantLock import kotlinx.atomicfu.locks.withLock -import mqtt.MQTTException -import mqtt.Subscription -import mqtt.broker.cluster.* -import mqtt.broker.interfaces.* -import mqtt.matchesWildcard -import mqtt.packets.Qos -import mqtt.packets.mqttv5.MQTT5Properties -import mqtt.packets.mqttv5.MQTT5Publish -import mqtt.packets.mqttv5.ReasonCode -import removeIf -import socket.ServerSocketLoop -import socket.tls.TLSSettings public class Broker( public val port: Int = 1883, @@ -272,7 +273,7 @@ public class Broker( } } - internal fun publishFromRemote(packet: mqtt.packets.mqtt.MQTTPublish) { + internal fun publishFromRemote(packet: MQTTPublish) { publish( "", packet.retain, @@ -340,7 +341,7 @@ public class Broker( } } - internal fun setRetained(topicName: String, message: mqtt.packets.mqtt.MQTTPublish, clientId: String, remote: Boolean = false) { + internal fun setRetained(topicName: String, message: MQTTPublish, clientId: String, remote: Boolean = false) { if (retainedAvailable) { if (message.payload?.isNotEmpty() == true) { val retained = Pair(message, clientId) @@ -373,7 +374,7 @@ public class Broker( } } - internal fun getRetained(topicFilter: String): List<Pair<mqtt.packets.mqtt.MQTTPublish, String>> { + internal fun getRetained(topicFilter: String): List<Pair<MQTTPublish, String>> { removeExpiredRetainedMessages() return retainedList.filter { it.key.matchesWildcard(topicFilter) }.map { it.value } } diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/ClientConnection.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/ClientConnection.kt similarity index 89% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/ClientConnection.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/ClientConnection.kt index 57f0b641cffe747fece24d96041adbae30c5fb2c..6019c94a0a27cedeae3f2bef37337fa0541bf9a2 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/ClientConnection.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/ClientConnection.kt @@ -1,21 +1,63 @@ -package mqtt.broker - -import currentTimeMillis -import generateRandomClientId -import mqtt.* -import mqtt.broker.cluster.RemoteSession -import mqtt.broker.interfaces.EnhancedAuthenticationProvider -import mqtt.packets.ConnectAcknowledgeFlags -import mqtt.MQTTException -import mqtt.packets.MQTTPacket -import mqtt.packets.Qos -import mqtt.packets.mqtt.* -import mqtt.packets.mqttv4.* -import mqtt.packets.mqttv5.* -import socket.IOException -import socket.SocketInterface -import socket.streams.EOFException -import socket.tcp.TCPEventHandler +package io.github.davidepianca98.mqtt.broker + +import io.github.davidepianca98.currentTimeMillis +import io.github.davidepianca98.generateRandomClientId +import io.github.davidepianca98.mqtt.MQTTCurrentPacket +import io.github.davidepianca98.mqtt.Subscription +import io.github.davidepianca98.mqtt.Will +import io.github.davidepianca98.mqtt.broker.cluster.RemoteSession +import io.github.davidepianca98.mqtt.broker.interfaces.EnhancedAuthenticationProvider +import io.github.davidepianca98.mqtt.containsWildcard +import io.github.davidepianca98.mqtt.isValidTopic +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPubrel +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTUnsubscribe +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Pingresp +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Pubrec +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Pubrel +import io.github.davidepianca98.mqtt.packets.mqttv4.toSubackReturnCodes +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Puback +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Subscribe +import io.github.davidepianca98.mqtt.packets.ConnectAcknowledgeFlags +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.MQTTVersion +import io.github.davidepianca98.mqtt.packets.MQTTPacket +import io.github.davidepianca98.mqtt.packets.Qos +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTAuth +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTConnect +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTDisconnect +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPingreq +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPuback +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPubcomp +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPublish +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPubrec +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTSubscribe +import io.github.davidepianca98.mqtt.packets.mqttv4.ConnectReturnCode +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Connack +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Connect +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Disconnect +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Puback +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.MQTT4Unsuback +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Auth +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Connack +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Connect +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Disconnect +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pingresp +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Properties +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pubcomp +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Publish +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pubrec +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pubrel +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Suback +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Unsuback +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Unsubscribe +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.SocketInterface +import io.github.davidepianca98.socket.streams.EOFException +import io.github.davidepianca98.socket.tcp.TCPEventHandler public class ClientConnection( private val client: SocketInterface, diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/ISession.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/ISession.kt similarity index 75% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/ISession.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/ISession.kt index e91bde12f40f2fcf96b24afddc0dbd508f66f3f7..84de90a5fc4875f0b659e76f9da842a469a88505 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/ISession.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/ISession.kt @@ -1,10 +1,10 @@ -package mqtt.broker +package io.github.davidepianca98.mqtt.broker -import currentTimeMillis -import mqtt.MQTTVersion -import mqtt.Will -import mqtt.packets.Qos -import mqtt.packets.mqttv5.MQTT5Properties +import io.github.davidepianca98.currentTimeMillis +import io.github.davidepianca98.mqtt.Will +import io.github.davidepianca98.mqtt.MQTTVersion +import io.github.davidepianca98.mqtt.packets.Qos +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Properties internal interface ISession { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/Session.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/Session.kt similarity index 90% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/Session.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/Session.kt index f8118a4491dc537a2a34aa84d4a50f8e42bcf580..ce6af4c637f5f7af72ce52e2afdc9b5bd87bc5fc 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/Session.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/Session.kt @@ -1,16 +1,16 @@ -package mqtt.broker - -import currentTimeMillis -import mqtt.MQTTVersion -import mqtt.Will -import mqtt.packets.MQTTPacket -import mqtt.packets.Qos -import mqtt.packets.mqtt.MQTTPublish -import mqtt.packets.mqtt.MQTTPubrel -import mqtt.packets.mqttv4.MQTT4Publish -import mqtt.packets.mqttv5.MQTT5Properties -import mqtt.packets.mqttv5.MQTT5Publish -import mqtt.packets.mqttv5.ReasonCode +package io.github.davidepianca98.mqtt.broker + +import io.github.davidepianca98.currentTimeMillis +import io.github.davidepianca98.mqtt.Will +import io.github.davidepianca98.mqtt.MQTTVersion +import io.github.davidepianca98.mqtt.packets.MQTTPacket +import io.github.davidepianca98.mqtt.packets.Qos +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPublish +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPubrel +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Publish +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Properties +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Publish +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode public class Session( public var clientConnection: ClientConnection?, diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/ClusterConnection.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/ClusterConnection.kt similarity index 73% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/ClusterConnection.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/ClusterConnection.kt index b9eb4093992aedd597df0717b7eeecb1609a71c0..24f319b3c48fab4fe6631e791e0814a2f8306058 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/ClusterConnection.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/ClusterConnection.kt @@ -1,11 +1,19 @@ -package mqtt.broker.cluster - -import mqtt.Subscription -import mqtt.broker.Broker -import mqtt.broker.Session -import mqtt.broker.cluster.packets.* -import socket.SocketInterface -import socket.tcp.TCPEventHandler +package io.github.davidepianca98.mqtt.broker.cluster + +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.mqtt.broker.Session +import io.github.davidepianca98.mqtt.broker.cluster.packets.AddSessionPacket +import io.github.davidepianca98.mqtt.broker.cluster.packets.AddSubscriptionPacket +import io.github.davidepianca98.mqtt.broker.cluster.packets.ClusterPacket +import io.github.davidepianca98.mqtt.broker.cluster.packets.PublishPacket +import io.github.davidepianca98.mqtt.broker.cluster.packets.RemoveSubscriptionPacket +import io.github.davidepianca98.mqtt.broker.cluster.packets.SessionTakenOverPacket +import io.github.davidepianca98.mqtt.broker.cluster.packets.SessionUpdatePacket +import io.github.davidepianca98.mqtt.broker.cluster.packets.SetRetainedPacket +import io.github.davidepianca98.mqtt.Subscription +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPublish +import io.github.davidepianca98.socket.SocketInterface +import io.github.davidepianca98.socket.tcp.TCPEventHandler internal class ClusterConnection(private val socket: SocketInterface, private val broker: Broker) : TCPEventHandler { @@ -70,11 +78,11 @@ internal class ClusterConnection(private val socket: SocketInterface, private va socket.close() } - fun publish(packet: mqtt.packets.mqtt.MQTTPublish) { + fun publish(packet: MQTTPublish) { socket.send(PublishPacket(packet).toByteArray()) } - fun setRetained(retained: Pair<mqtt.packets.mqtt.MQTTPublish, String>) { + fun setRetained(retained: Pair<MQTTPublish, String>) { socket.send(SetRetainedPacket(retained).toByteArray()) } diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/ClusterCurrentPacket.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/ClusterCurrentPacket.kt similarity index 66% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/ClusterCurrentPacket.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/ClusterCurrentPacket.kt index 2a75b8a06d504d9d3938dc9715ca70f8322a4b95..22a72b35b89bab0c04ec67b017bcecc047f1dcb2 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/ClusterCurrentPacket.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/ClusterCurrentPacket.kt @@ -1,9 +1,16 @@ -package mqtt.broker.cluster - -import mqtt.broker.cluster.packets.* -import socket.streams.DynamicByteBuffer -import socket.streams.EOFException -import socket.streams.decodeVariableByteInteger +package io.github.davidepianca98.mqtt.broker.cluster + +import io.github.davidepianca98.mqtt.broker.cluster.packets.AddSessionPacket +import io.github.davidepianca98.mqtt.broker.cluster.packets.AddSubscriptionPacket +import io.github.davidepianca98.mqtt.broker.cluster.packets.ClusterPacket +import io.github.davidepianca98.mqtt.broker.cluster.packets.PublishPacket +import io.github.davidepianca98.mqtt.broker.cluster.packets.RemoveSubscriptionPacket +import io.github.davidepianca98.mqtt.broker.cluster.packets.SessionTakenOverPacket +import io.github.davidepianca98.mqtt.broker.cluster.packets.SessionUpdatePacket +import io.github.davidepianca98.mqtt.broker.cluster.packets.SetRetainedPacket +import io.github.davidepianca98.socket.streams.DynamicByteBuffer +import io.github.davidepianca98.socket.streams.EOFException +import io.github.davidepianca98.socket.streams.decodeVariableByteInteger internal class ClusterCurrentPacket { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/ClusterDiscoveryConnection.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/ClusterDiscoveryConnection.kt similarity index 77% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/ClusterDiscoveryConnection.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/ClusterDiscoveryConnection.kt index d05d7fe8c4b94731896a13419f2a85716feede4a..a209845c6b3dacd423040702b90daeef3b4e07be 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/ClusterDiscoveryConnection.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/ClusterDiscoveryConnection.kt @@ -1,9 +1,9 @@ -package mqtt.broker.cluster +package io.github.davidepianca98.mqtt.broker.cluster +import io.github.davidepianca98.mqtt.broker.Broker import kotlinx.serialization.protobuf.ProtoBuf -import mqtt.broker.Broker -import socket.udp.UDPEventHandler -import socket.udp.UDPSocket +import io.github.davidepianca98.socket.udp.UDPEventHandler +import io.github.davidepianca98.socket.udp.UDPSocket internal class ClusterDiscoveryConnection(private val socket: UDPSocket, private val broker: Broker) : UDPEventHandler { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/ClusterExtensions.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/ClusterExtensions.kt similarity index 75% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/ClusterExtensions.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/ClusterExtensions.kt index 6f393d90e037daa052d57bb894a843c910c5174f..3d60807257c0696570a69743d0bff6548834a088 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/ClusterExtensions.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/ClusterExtensions.kt @@ -1,9 +1,10 @@ -package mqtt.broker.cluster +package io.github.davidepianca98.mqtt.broker.cluster -import mqtt.Subscription -import mqtt.broker.Session +import io.github.davidepianca98.mqtt.broker.Session +import io.github.davidepianca98.mqtt.Subscription +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPublish -internal fun MutableMap<String, ClusterConnection>.setRetained(retained: Pair<mqtt.packets.mqtt.MQTTPublish, String>) { +internal fun MutableMap<String, ClusterConnection>.setRetained(retained: Pair<MQTTPublish, String>) { forEach { it.value.setRetained(retained) } diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/ClusterSettings.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/ClusterSettings.kt similarity index 83% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/ClusterSettings.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/ClusterSettings.kt index d7b9e505dc517adecde1bf4c72a2aff626395be6..cca0fb4058ada6b99774c55b651b100a20c67a43 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/ClusterSettings.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/ClusterSettings.kt @@ -1,4 +1,4 @@ -package mqtt.broker.cluster +package io.github.davidepianca98.mqtt.broker.cluster import kotlin.random.Random diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/DiscoveryPacket.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/DiscoveryPacket.kt similarity index 78% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/DiscoveryPacket.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/DiscoveryPacket.kt index b3d019c8c6d14b14da9254ac6c1aeb52111def05..c128763b549f92e3c4c97fa75ca1686f6fcfc8c5 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/DiscoveryPacket.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/DiscoveryPacket.kt @@ -1,4 +1,4 @@ -package mqtt.broker.cluster +package io.github.davidepianca98.mqtt.broker.cluster import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/RemoteSession.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/RemoteSession.kt similarity index 75% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/RemoteSession.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/RemoteSession.kt index 41fad0af7f04b96fe370c571f201382594955114..50c6d63850b69bc09332c728694908c020d66d80 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/RemoteSession.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/RemoteSession.kt @@ -1,15 +1,15 @@ -package mqtt.broker.cluster +package io.github.davidepianca98.mqtt.broker.cluster -import mqtt.MQTTVersion -import mqtt.Will -import mqtt.broker.Broker -import mqtt.broker.ClientConnection -import mqtt.broker.ISession -import mqtt.broker.Session -import mqtt.packets.Qos -import mqtt.packets.mqttv4.MQTT4Publish -import mqtt.packets.mqttv5.MQTT5Properties -import mqtt.packets.mqttv5.MQTT5Publish +import io.github.davidepianca98.mqtt.Will +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.mqtt.broker.ClientConnection +import io.github.davidepianca98.mqtt.broker.ISession +import io.github.davidepianca98.mqtt.broker.Session +import io.github.davidepianca98.mqtt.MQTTVersion +import io.github.davidepianca98.mqtt.packets.Qos +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Publish +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Properties +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Publish internal class RemoteSession( private val connection: ClusterConnection, diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/AddSessionPacket.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/AddSessionPacket.kt similarity index 80% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/AddSessionPacket.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/AddSessionPacket.kt index 75d47ab23f4297acc6bd238548f277ac17699021..8e9af10dfc26871161cdefce0db3ee7fadd22e53 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/AddSessionPacket.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/AddSessionPacket.kt @@ -1,8 +1,8 @@ -package mqtt.broker.cluster.packets +package io.github.davidepianca98.mqtt.broker.cluster.packets -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream -import socket.streams.encodeVariableByteInteger +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.socket.streams.encodeVariableByteInteger internal class AddSessionPacket(val clientId: String, val sessionExpiryInterval: UInt) : ClusterPacket { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/AddSubscriptionPacket.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/AddSubscriptionPacket.kt similarity index 82% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/AddSubscriptionPacket.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/AddSubscriptionPacket.kt index 2c5bbb1e6743f6f7617a7dafde1982c5af9f80ae..e126feed5e39a8c79d801248bab714395e765f62 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/AddSubscriptionPacket.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/AddSubscriptionPacket.kt @@ -1,11 +1,11 @@ -package mqtt.broker.cluster.packets - -import mqtt.Subscription -import mqtt.packets.Qos -import mqtt.packets.mqttv5.SubscriptionOptions -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream -import socket.streams.encodeVariableByteInteger +package io.github.davidepianca98.mqtt.broker.cluster.packets + +import io.github.davidepianca98.mqtt.Subscription +import io.github.davidepianca98.mqtt.packets.Qos +import io.github.davidepianca98.mqtt.packets.mqttv5.SubscriptionOptions +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.socket.streams.encodeVariableByteInteger internal class AddSubscriptionPacket(val clientId: String, val subscription: Subscription) : ClusterPacket { diff --git a/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/ClusterPacket.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/ClusterPacket.kt new file mode 100644 index 0000000000000000000000000000000000000000..55a03932f0cc1179256bb7979372eff0c0650405 --- /dev/null +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/ClusterPacket.kt @@ -0,0 +1,5 @@ +package io.github.davidepianca98.mqtt.broker.cluster.packets + +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTTSerializer + +internal interface ClusterPacket : MQTTSerializer diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/ClusterPacketDeserializer.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/ClusterPacketDeserializer.kt similarity index 72% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/ClusterPacketDeserializer.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/ClusterPacketDeserializer.kt index b8e06d8076f334bde2bd5d12657a28e0f4c158f9..ad222f04ed1fce8d46c0b3e0fddbc2ce354104e5 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/ClusterPacketDeserializer.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/ClusterPacketDeserializer.kt @@ -1,9 +1,9 @@ -package mqtt.broker.cluster.packets +package io.github.davidepianca98.mqtt.broker.cluster.packets -import mqtt.MQTTException -import mqtt.packets.mqttv5.ReasonCode -import socket.streams.ByteArrayInputStream -import validateUTF8String +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.validateUTF8String internal interface ClusterPacketDeserializer { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/PublishPacket.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/PublishPacket.kt similarity index 72% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/PublishPacket.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/PublishPacket.kt index 4cbbbf6f04f00f46faacf11057efa20faa15f7e0..a9fd9c44b8630013297c966b20e15c327364ed30 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/PublishPacket.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/PublishPacket.kt @@ -1,9 +1,9 @@ -package mqtt.broker.cluster.packets +package io.github.davidepianca98.mqtt.broker.cluster.packets -import mqtt.packets.mqtt.MQTTPublish -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream -import socket.streams.encodeVariableByteInteger +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPublish +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.socket.streams.encodeVariableByteInteger internal class PublishPacket(val packet: MQTTPublish) : ClusterPacket { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/RemoveSubscriptionPacket.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/RemoveSubscriptionPacket.kt similarity index 79% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/RemoveSubscriptionPacket.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/RemoveSubscriptionPacket.kt index dd197c2c4c0dc0e756481c7e20de3a757e942a2e..0c96bcabe71b1a6750aa1da9656d93468dcfe3a1 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/RemoveSubscriptionPacket.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/RemoveSubscriptionPacket.kt @@ -1,8 +1,8 @@ -package mqtt.broker.cluster.packets +package io.github.davidepianca98.mqtt.broker.cluster.packets -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream -import socket.streams.encodeVariableByteInteger +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.socket.streams.encodeVariableByteInteger internal class RemoveSubscriptionPacket(val clientId: String, val topicFilter: String) : ClusterPacket { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/SessionTakenOverPacket.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/SessionTakenOverPacket.kt similarity index 75% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/SessionTakenOverPacket.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/SessionTakenOverPacket.kt index 0ee7b0b6308ffb4039c645d4c5b452a7d3154c4e..171e2e91d8f332ae76d140ac37fbcb3459812677 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/SessionTakenOverPacket.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/SessionTakenOverPacket.kt @@ -1,8 +1,8 @@ -package mqtt.broker.cluster.packets +package io.github.davidepianca98.mqtt.broker.cluster.packets -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream -import socket.streams.encodeVariableByteInteger +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.socket.streams.encodeVariableByteInteger internal class SessionTakenOverPacket(val clientId: String) : ClusterPacket { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/SessionUpdatePacket.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/SessionUpdatePacket.kt similarity index 86% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/SessionUpdatePacket.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/SessionUpdatePacket.kt index 36d9429621699de38e4bc57956fe817f7d8b0512..3e267981652e5b08fde6e1e7814ca221763cc516 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/SessionUpdatePacket.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/SessionUpdatePacket.kt @@ -1,8 +1,8 @@ -package mqtt.broker.cluster.packets +package io.github.davidepianca98.mqtt.broker.cluster.packets -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream -import socket.streams.encodeVariableByteInteger +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.socket.streams.encodeVariableByteInteger internal class SessionUpdatePacket( val clientId: String, diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/SetRetainedPacket.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/SetRetainedPacket.kt similarity index 76% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/SetRetainedPacket.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/SetRetainedPacket.kt index adbeb5d20de5bb4a7fbd0aa9e0b8fa62760b06ba..48a67e6e47f647a126bc955a16f4e43dfd4074f6 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/SetRetainedPacket.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/SetRetainedPacket.kt @@ -1,9 +1,9 @@ -package mqtt.broker.cluster.packets +package io.github.davidepianca98.mqtt.broker.cluster.packets -import mqtt.packets.mqtt.MQTTPublish -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream -import socket.streams.encodeVariableByteInteger +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPublish +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.socket.streams.encodeVariableByteInteger internal class SetRetainedPacket(val retained: Pair<MQTTPublish, String>) : ClusterPacket { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/Authentication.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/Authentication.kt similarity index 89% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/Authentication.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/Authentication.kt index 09d0f55e0b1d74c24a82cd0935aa353ba2ce64f8..a08a9aecf70e4bfffa7d48f6f59c04ea8565075a 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/Authentication.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/Authentication.kt @@ -1,4 +1,4 @@ -package mqtt.broker.interfaces +package io.github.davidepianca98.mqtt.broker.interfaces public interface Authentication { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/Authorization.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/Authorization.kt similarity index 94% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/Authorization.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/Authorization.kt index 32623471ac061d7052a70647a1b6904577ee30c9..40858bc727eb48e19065406c41604b97c72c14e0 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/Authorization.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/Authorization.kt @@ -1,4 +1,4 @@ -package mqtt.broker.interfaces +package io.github.davidepianca98.mqtt.broker.interfaces public interface Authorization { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/BytesMetrics.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/BytesMetrics.kt similarity index 90% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/BytesMetrics.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/BytesMetrics.kt index 743b2f5552a16b6c75137600706fe06cefc566ee..5c1321386d0f3cb6f2265edf24f67be5c68a4bc1 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/BytesMetrics.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/BytesMetrics.kt @@ -1,4 +1,4 @@ -package mqtt.broker.interfaces +package io.github.davidepianca98.mqtt.broker.interfaces public interface BytesMetrics { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/ConnectionCallbacks.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/ConnectionCallbacks.kt similarity index 85% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/ConnectionCallbacks.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/ConnectionCallbacks.kt index ee1899bd516b51ac1f9a042eca49713ba2d91e01..2960baace54f6f1adc3620197daf2f0330b6be2e 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/ConnectionCallbacks.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/ConnectionCallbacks.kt @@ -1,4 +1,4 @@ -package mqtt.broker.interfaces +package io.github.davidepianca98.mqtt.broker.interfaces public interface ConnectionCallbacks { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/EnhancedAuthentication.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/EnhancedAuthentication.kt similarity index 93% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/EnhancedAuthentication.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/EnhancedAuthentication.kt index 736e2c6440e62f4e606a8be82f94ea0cf46142b3..01e34950935d5de15d2425f201e804d8306f3206 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/EnhancedAuthentication.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/EnhancedAuthentication.kt @@ -1,4 +1,4 @@ -package mqtt.broker.interfaces +package io.github.davidepianca98.mqtt.broker.interfaces public interface EnhancedAuthenticationProvider { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/MiscCallbacks.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/MiscCallbacks.kt similarity index 80% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/MiscCallbacks.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/MiscCallbacks.kt index f549e594ef6cffffb2282ab590f2014364ee2d51..ebdac94879966c162408f5e9f6857fbf1f4fdf42 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/MiscCallbacks.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/MiscCallbacks.kt @@ -1,4 +1,4 @@ -package mqtt.broker.interfaces +package io.github.davidepianca98.mqtt.broker.interfaces public interface MiscCallbacks { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/PacketInterceptor.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/PacketInterceptor.kt similarity index 84% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/PacketInterceptor.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/PacketInterceptor.kt index 4fe3348cb418ba4a8bf4601726fc01eaa76f712f..05f281d9b36d46fc1966a2856b1e563331834e0c 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/PacketInterceptor.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/PacketInterceptor.kt @@ -1,6 +1,6 @@ -package mqtt.broker.interfaces +package io.github.davidepianca98.mqtt.broker.interfaces -import mqtt.packets.MQTTPacket +import io.github.davidepianca98.mqtt.packets.MQTTPacket public interface PacketInterceptor { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/Persistence.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/Persistence.kt similarity index 90% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/Persistence.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/Persistence.kt index 0d546c3ec1eac86a4c296cb1044fa78765af5f42..162b041b482f437feac204bda6c41c97e59602d4 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/interfaces/Persistence.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/interfaces/Persistence.kt @@ -1,8 +1,8 @@ -package mqtt.broker.interfaces +package io.github.davidepianca98.mqtt.broker.interfaces -import mqtt.Subscription -import mqtt.broker.Session -import mqtt.packets.mqtt.MQTTPublish +import io.github.davidepianca98.mqtt.broker.Session +import io.github.davidepianca98.mqtt.Subscription +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPublish public interface Persistence { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/udp/UDPConnectionsMap.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/udp/UDPConnectionsMap.kt similarity index 74% rename from kmqtt-broker/src/commonMain/kotlin/mqtt/broker/udp/UDPConnectionsMap.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/udp/UDPConnectionsMap.kt index f1c3d91fdae914b23debc2f8d81e2017748f671a..9d9bc24319d6846fcaa535b89a53cbaeb7c25b6d 100644 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/udp/UDPConnectionsMap.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/udp/UDPConnectionsMap.kt @@ -1,10 +1,10 @@ -package mqtt.broker.udp +package io.github.davidepianca98.mqtt.broker.udp -import mqtt.broker.Broker -import mqtt.broker.ClientConnection -import socket.SocketInterface -import socket.udp.UDPEventHandler -import socket.udp.UDPSocket +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.mqtt.broker.ClientConnection +import io.github.davidepianca98.socket.SocketInterface +import io.github.davidepianca98.socket.udp.UDPEventHandler +import io.github.davidepianca98.socket.udp.UDPSocket internal class UDPConnectionsMap(private val socket: UDPSocket, private val broker: Broker) : UDPEventHandler, SocketInterface { diff --git a/kmqtt-broker/src/commonMain/kotlin/socket/ServerSocket.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/ServerSocket.kt similarity index 66% rename from kmqtt-broker/src/commonMain/kotlin/socket/ServerSocket.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/ServerSocket.kt index 17e6849216b19dd0a88937e5b29027683ee49a55..550c5c9c1527d68d40a994d6fedf2628a77f829b 100644 --- a/kmqtt-broker/src/commonMain/kotlin/socket/ServerSocket.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/ServerSocket.kt @@ -1,7 +1,7 @@ -package socket +package io.github.davidepianca98.socket -import mqtt.broker.Broker -import mqtt.broker.cluster.ClusterConnection +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.mqtt.broker.cluster.ClusterConnection internal expect open class ServerSocket( broker: Broker, diff --git a/kmqtt-broker/src/commonMain/kotlin/socket/ServerSocketInterface.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/ServerSocketInterface.kt similarity index 50% rename from kmqtt-broker/src/commonMain/kotlin/socket/ServerSocketInterface.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/ServerSocketInterface.kt index 88d72a655abb250463917c9dcb3530a27363a9bd..5115abec506df0d802bb417449548b576ef681db 100644 --- a/kmqtt-broker/src/commonMain/kotlin/socket/ServerSocketInterface.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/ServerSocketInterface.kt @@ -1,6 +1,6 @@ -package socket +package io.github.davidepianca98.socket -import mqtt.broker.cluster.ClusterConnection +import io.github.davidepianca98.mqtt.broker.cluster.ClusterConnection internal interface ServerSocketInterface { diff --git a/kmqtt-broker/src/commonMain/kotlin/socket/ServerSocketLoop.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/ServerSocketLoop.kt similarity index 88% rename from kmqtt-broker/src/commonMain/kotlin/socket/ServerSocketLoop.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/ServerSocketLoop.kt index e351ff65e9802670989a0464f0a77c355aa99b59..4d9aa59c9e53e6a97982995607c801b5a213593d 100644 --- a/kmqtt-broker/src/commonMain/kotlin/socket/ServerSocketLoop.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/ServerSocketLoop.kt @@ -1,11 +1,11 @@ -package socket +package io.github.davidepianca98.socket import kotlinx.atomicfu.locks.withLock -import mqtt.broker.Broker -import mqtt.broker.cluster.ClusterConnection -import socket.tcp.TCPEventHandler -import socket.tls.TLSServerSocket -import socket.udp.UDPEventHandler +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.mqtt.broker.cluster.ClusterConnection +import io.github.davidepianca98.socket.tcp.TCPEventHandler +import io.github.davidepianca98.socket.tls.TLSServerSocket +import io.github.davidepianca98.socket.udp.UDPEventHandler internal class ServerSocketLoop(private val broker: Broker) { diff --git a/kmqtt-broker/src/commonMain/kotlin/socket/tcp/TCPEventHandler.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tcp/TCPEventHandler.kt similarity index 81% rename from kmqtt-broker/src/commonMain/kotlin/socket/tcp/TCPEventHandler.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tcp/TCPEventHandler.kt index f3b98b2568397edd7ef0397d32a2d91cb59784a1..a1f5ef9d9b3f26099634cd5122e736e51e06c106 100644 --- a/kmqtt-broker/src/commonMain/kotlin/socket/tcp/TCPEventHandler.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tcp/TCPEventHandler.kt @@ -1,4 +1,4 @@ -package socket.tcp +package io.github.davidepianca98.socket.tcp internal interface TCPEventHandler { diff --git a/kmqtt-broker/src/commonMain/kotlin/socket/tcp/WebSocket.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tcp/WebSocket.kt similarity index 92% rename from kmqtt-broker/src/commonMain/kotlin/socket/tcp/WebSocket.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tcp/WebSocket.kt index 124b0e9a11c8f762531190171876e852170ccc80..c1a4ba8a136b8a8dbca70d348e553a27d2125465 100644 --- a/kmqtt-broker/src/commonMain/kotlin/socket/tcp/WebSocket.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tcp/WebSocket.kt @@ -1,12 +1,12 @@ -package socket.tcp - -import sha1 -import socket.IOException -import socket.SocketInterface -import socket.streams.ByteArrayOutputStream -import socket.streams.DynamicByteBuffer -import socket.streams.EOFException -import toBase64 +package io.github.davidepianca98.socket.tcp + +import io.github.davidepianca98.sha1 +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.SocketInterface +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.socket.streams.DynamicByteBuffer +import io.github.davidepianca98.socket.streams.EOFException +import io.github.davidepianca98.toBase64 internal class WebSocket(private val socket: Socket) : SocketInterface { diff --git a/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerSocket.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerSocket.kt new file mode 100644 index 0000000000000000000000000000000000000000..35a2dc195e61ab15959bc2bd5c684b63f0171473 --- /dev/null +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerSocket.kt @@ -0,0 +1,10 @@ +package io.github.davidepianca98.socket.tls + +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.socket.ServerSocket +import io.github.davidepianca98.socket.SocketState + +internal expect class TLSServerSocket( + broker: Broker, + selectCallback: (attachment: Any?, state: SocketState) -> Boolean +) : ServerSocket diff --git a/kmqtt-broker/src/commonMain/kotlin/socket/tls/TLSSettings.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tls/TLSSettings.kt similarity index 83% rename from kmqtt-broker/src/commonMain/kotlin/socket/tls/TLSSettings.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tls/TLSSettings.kt index b744230aa58e270d8ac678d2fa7f600f795a63b0..e287239bbb4c3e2160ba27863f9e774d2a558747 100644 --- a/kmqtt-broker/src/commonMain/kotlin/socket/tls/TLSSettings.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tls/TLSSettings.kt @@ -1,4 +1,4 @@ -package socket.tls +package io.github.davidepianca98.socket.tls public class TLSSettings( public val version: String = "TLS", diff --git a/kmqtt-broker/src/commonMain/kotlin/socket/udp/UDPEventHandler.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/udp/UDPEventHandler.kt similarity index 59% rename from kmqtt-broker/src/commonMain/kotlin/socket/udp/UDPEventHandler.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/udp/UDPEventHandler.kt index 29a56c4753beb776e2841836f2a0efade357392e..da56113b9db25804eb57e9f4823b5caaea7ae5ab 100644 --- a/kmqtt-broker/src/commonMain/kotlin/socket/udp/UDPEventHandler.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/udp/UDPEventHandler.kt @@ -1,4 +1,4 @@ -package socket.udp +package io.github.davidepianca98.socket.udp internal interface UDPEventHandler { diff --git a/kmqtt-broker/src/commonMain/kotlin/socket/udp/UDPReadData.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/udp/UDPReadData.kt similarity index 70% rename from kmqtt-broker/src/commonMain/kotlin/socket/udp/UDPReadData.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/udp/UDPReadData.kt index d315b19df1d7b0a86ea0be81a81a85181b73477c..546ee81b87f94a34f3e1d5e78e42196c91b09b2b 100644 --- a/kmqtt-broker/src/commonMain/kotlin/socket/udp/UDPReadData.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/udp/UDPReadData.kt @@ -1,3 +1,3 @@ -package socket.udp +package io.github.davidepianca98.socket.udp internal data class UDPReadData(val data: UByteArray, val sourceAddress: String, val sourcePort: Int) diff --git a/kmqtt-broker/src/commonMain/kotlin/socket/udp/UDPSocket.kt b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/udp/UDPSocket.kt similarity index 74% rename from kmqtt-broker/src/commonMain/kotlin/socket/udp/UDPSocket.kt rename to kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/udp/UDPSocket.kt index 24864c3606d1e4d6313501682a1330e3cc64c51b..b737d3570223723d6a8109d89b4569ee5de1994b 100644 --- a/kmqtt-broker/src/commonMain/kotlin/socket/udp/UDPSocket.kt +++ b/kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/udp/UDPSocket.kt @@ -1,4 +1,4 @@ -package socket.udp +package io.github.davidepianca98.socket.udp internal expect class UDPSocket { diff --git a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/ClusterPacket.kt b/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/ClusterPacket.kt deleted file mode 100644 index 96a276178815b2a13cdeefe126132b286f551430..0000000000000000000000000000000000000000 --- a/kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/ClusterPacket.kt +++ /dev/null @@ -1,5 +0,0 @@ -package mqtt.broker.cluster.packets - -import mqtt.packets.mqttv5.MQTTSerializer - -internal interface ClusterPacket : MQTTSerializer diff --git a/kmqtt-broker/src/commonMain/kotlin/socket/tls/TLSServerSocket.kt b/kmqtt-broker/src/commonMain/kotlin/socket/tls/TLSServerSocket.kt deleted file mode 100644 index bdf6ab0f150470cee6445a5378862bc4ff26c270..0000000000000000000000000000000000000000 --- a/kmqtt-broker/src/commonMain/kotlin/socket/tls/TLSServerSocket.kt +++ /dev/null @@ -1,11 +0,0 @@ -package socket.tls - -import mqtt.broker.Broker -import socket.ServerSocket -import socket.ServerSocketLoop -import socket.SocketState - -internal expect class TLSServerSocket( - broker: Broker, - selectCallback: (attachment: Any?, state: SocketState) -> Boolean -) : ServerSocket diff --git a/kmqtt-broker/src/commonTest/kotlin/datastructures/TrieTest.kt b/kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/datastructures/TrieTest.kt similarity index 97% rename from kmqtt-broker/src/commonTest/kotlin/datastructures/TrieTest.kt rename to kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/datastructures/TrieTest.kt index 7710b1425b23085d0d76ad100d6ad9a8bdd0abdd..2cab9016644a1804ee9a70d65e73c4119b3c8066 100644 --- a/kmqtt-broker/src/commonTest/kotlin/datastructures/TrieTest.kt +++ b/kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/datastructures/TrieTest.kt @@ -1,6 +1,6 @@ -package datastructures +package io.github.davidepianca98.datastructures -import mqtt.Subscription +import io.github.davidepianca98.mqtt.Subscription import kotlin.test.Test import kotlin.test.assertEquals diff --git a/kmqtt-broker/src/commonTest/kotlin/integration/AuthenticationTest.kt b/kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/integration/AuthenticationTest.kt similarity index 86% rename from kmqtt-broker/src/commonTest/kotlin/integration/AuthenticationTest.kt rename to kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/integration/AuthenticationTest.kt index 67c98d6cb0d3faa21fb58b5614b952331cc3da21..884233b2e72b0a850d436f66ad53792d35d74e3b 100644 --- a/kmqtt-broker/src/commonTest/kotlin/integration/AuthenticationTest.kt +++ b/kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/integration/AuthenticationTest.kt @@ -1,14 +1,14 @@ -package integration +package io.github.davidepianca98.integration -import MQTTClient +import io.github.davidepianca98.MQTTClient import kotlinx.coroutines.delay import kotlinx.coroutines.test.runTest -import mqtt.MQTTVersion -import mqtt.broker.Broker -import mqtt.broker.interfaces.Authentication -import mqtt.broker.interfaces.EnhancedAuthenticationProvider -import mqtt.packets.mqttv5.MQTT5Properties -import mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.mqtt.MQTTVersion +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.mqtt.broker.interfaces.Authentication +import io.github.davidepianca98.mqtt.broker.interfaces.EnhancedAuthenticationProvider +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Properties +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode import kotlin.test.Test class AuthenticationTest { diff --git a/kmqtt-broker/src/commonTest/kotlin/integration/PublishSubscribeMultipleClientsTest.kt b/kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/integration/PublishSubscribeMultipleClientsTest.kt similarity index 84% rename from kmqtt-broker/src/commonTest/kotlin/integration/PublishSubscribeMultipleClientsTest.kt rename to kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/integration/PublishSubscribeMultipleClientsTest.kt index 2e4a4605a68c5764f00f06f22b96d4643a7022f7..36ff0c2946eb2803b48a8f082e465915f07889ae 100644 --- a/kmqtt-broker/src/commonTest/kotlin/integration/PublishSubscribeMultipleClientsTest.kt +++ b/kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/integration/PublishSubscribeMultipleClientsTest.kt @@ -1,14 +1,14 @@ -package integration +package io.github.davidepianca98.integration -import MQTTClient +import io.github.davidepianca98.MQTTClient import kotlinx.coroutines.delay import kotlinx.coroutines.test.runTest -import mqtt.MQTTVersion -import mqtt.Subscription -import mqtt.broker.Broker -import mqtt.packets.Qos -import mqtt.packets.mqttv5.ReasonCode -import mqtt.packets.mqttv5.SubscriptionOptions +import io.github.davidepianca98.mqtt.MQTTVersion +import io.github.davidepianca98.mqtt.Subscription +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.mqtt.packets.Qos +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.mqtt.packets.mqttv5.SubscriptionOptions import kotlin.test.Test import kotlin.test.assertContentEquals import kotlin.test.assertEquals diff --git a/kmqtt-broker/src/commonTest/kotlin/integration/PublishSubscribeSingleClientTest.kt b/kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/integration/PublishSubscribeSingleClientTest.kt similarity index 74% rename from kmqtt-broker/src/commonTest/kotlin/integration/PublishSubscribeSingleClientTest.kt rename to kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/integration/PublishSubscribeSingleClientTest.kt index 28b255e9f5336ec214752c97e41b46578da424fc..5fd23bd94a0945b6efa8e08f7baa6f3d29d53211 100644 --- a/kmqtt-broker/src/commonTest/kotlin/integration/PublishSubscribeSingleClientTest.kt +++ b/kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/integration/PublishSubscribeSingleClientTest.kt @@ -1,16 +1,14 @@ -package integration +package io.github.davidepianca98.integration -import MQTTClient -import kotlinx.coroutines.Dispatchers +import io.github.davidepianca98.MQTTClient import kotlinx.coroutines.delay import kotlinx.coroutines.test.runTest -import kotlinx.coroutines.withContext -import mqtt.MQTTVersion -import mqtt.Subscription -import mqtt.broker.Broker -import mqtt.packets.Qos -import mqtt.packets.mqttv5.ReasonCode -import mqtt.packets.mqttv5.SubscriptionOptions +import io.github.davidepianca98.mqtt.MQTTVersion +import io.github.davidepianca98.mqtt.Subscription +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.mqtt.packets.Qos +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.mqtt.packets.mqttv5.SubscriptionOptions import kotlin.test.Test import kotlin.test.assertContentEquals import kotlin.test.assertEquals diff --git a/kmqtt-broker/src/commonTest/kotlin/integration/RetainedPublishTest.kt b/kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/integration/RetainedPublishTest.kt similarity index 82% rename from kmqtt-broker/src/commonTest/kotlin/integration/RetainedPublishTest.kt rename to kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/integration/RetainedPublishTest.kt index 79b0d5fcbdd498222ecc6261736ba0e147bd57b8..4a89bd597050345a4ba0350a14d6ccac2aa3cb0a 100644 --- a/kmqtt-broker/src/commonTest/kotlin/integration/RetainedPublishTest.kt +++ b/kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/integration/RetainedPublishTest.kt @@ -1,16 +1,14 @@ -package integration +package io.github.davidepianca98.integration -import MQTTClient -import kotlinx.coroutines.Dispatchers +import io.github.davidepianca98.MQTTClient import kotlinx.coroutines.delay import kotlinx.coroutines.test.runTest -import kotlinx.coroutines.withContext -import mqtt.MQTTVersion -import mqtt.Subscription -import mqtt.broker.Broker -import mqtt.packets.Qos -import mqtt.packets.mqttv5.ReasonCode -import mqtt.packets.mqttv5.SubscriptionOptions +import io.github.davidepianca98.mqtt.MQTTVersion +import io.github.davidepianca98.mqtt.Subscription +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.mqtt.packets.Qos +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.mqtt.packets.mqttv5.SubscriptionOptions import kotlin.test.Test import kotlin.test.assertContentEquals import kotlin.test.assertEquals diff --git a/kmqtt-broker/src/commonTest/kotlin/integration/TLSTest.kt b/kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/integration/TLSTest.kt similarity index 77% rename from kmqtt-broker/src/commonTest/kotlin/integration/TLSTest.kt rename to kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/integration/TLSTest.kt index 077b5ccc617ab4d1f9b5519d475d35062a2ac65b..aab3fe9d2f36199d64b7331b8f0e922a91023269 100644 --- a/kmqtt-broker/src/commonTest/kotlin/integration/TLSTest.kt +++ b/kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/integration/TLSTest.kt @@ -1,19 +1,17 @@ -package integration +package io.github.davidepianca98.integration -import MQTTClient +import io.github.davidepianca98.MQTTClient import com.goncalossilva.resources.Resource -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.test.runTest -import kotlinx.coroutines.withContext -import mqtt.MQTTVersion -import mqtt.Subscription -import mqtt.broker.Broker -import mqtt.packets.Qos -import mqtt.packets.mqttv5.ReasonCode -import mqtt.packets.mqttv5.SubscriptionOptions -import socket.tls.TLSClientSettings -import socket.tls.TLSSettings +import io.github.davidepianca98.mqtt.MQTTVersion +import io.github.davidepianca98.mqtt.Subscription +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.mqtt.packets.Qos +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.mqtt.packets.mqttv5.SubscriptionOptions +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSSettings import kotlin.test.Test import kotlin.test.assertContentEquals import kotlin.test.assertEquals diff --git a/kmqtt-broker/src/commonTest/kotlin/mqtt/MQTTCurrentPacketTest.kt b/kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/mqtt/MQTTCurrentPacketTest.kt similarity index 96% rename from kmqtt-broker/src/commonTest/kotlin/mqtt/MQTTCurrentPacketTest.kt rename to kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/mqtt/MQTTCurrentPacketTest.kt index 3774afab39f02d12b8d56664dc8a3fba0d954802..82f9720f5322346b31ed28efba5291915d833570 100644 --- a/kmqtt-broker/src/commonTest/kotlin/mqtt/MQTTCurrentPacketTest.kt +++ b/kmqtt-broker/src/commonTest/kotlin/io/github/davidepianca98/mqtt/MQTTCurrentPacketTest.kt @@ -1,6 +1,6 @@ -package mqtt +package io.github.davidepianca98.mqtt -import mqtt.packets.mqttv5.MQTT5Publish +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Publish import kotlin.test.Test import kotlin.test.assertEquals diff --git a/kmqtt-broker/src/jsMain/kotlin/io/github/davidepianca98/setShutdownHook.kt b/kmqtt-broker/src/jsMain/kotlin/io/github/davidepianca98/setShutdownHook.kt new file mode 100644 index 0000000000000000000000000000000000000000..05a5e8055e26184419b750167629b04c29cda8e3 --- /dev/null +++ b/kmqtt-broker/src/jsMain/kotlin/io/github/davidepianca98/setShutdownHook.kt @@ -0,0 +1,10 @@ +package io.github.davidepianca98 + +import node.process.ProcessEvent +import node.process.process + +internal actual fun setShutdownHook(hook: () -> Unit) { + process.on(ProcessEvent.BEFOREEXIT) { + hook() + } +} diff --git a/kmqtt-broker/src/jsMain/kotlin/socket/ServerSocket.kt b/kmqtt-broker/src/jsMain/kotlin/io/github/davidepianca98/socket/ServerSocket.kt similarity index 82% rename from kmqtt-broker/src/jsMain/kotlin/socket/ServerSocket.kt rename to kmqtt-broker/src/jsMain/kotlin/io/github/davidepianca98/socket/ServerSocket.kt index 6784551cda5924064e90211c122164486d63ab1a..40515bc39153214e139953b2d3dbbbd826a3fd3c 100644 --- a/kmqtt-broker/src/jsMain/kotlin/socket/ServerSocket.kt +++ b/kmqtt-broker/src/jsMain/kotlin/io/github/davidepianca98/socket/ServerSocket.kt @@ -1,12 +1,15 @@ -package socket +package io.github.davidepianca98.socket -import mqtt.broker.Broker -import mqtt.broker.ClientConnection -import mqtt.broker.cluster.ClusterConnection +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.mqtt.broker.ClientConnection +import io.github.davidepianca98.mqtt.broker.cluster.ClusterConnection import node.net.SocketEvent -import socket.tcp.Socket -import socket.tcp.WebSocket +import io.github.davidepianca98.socket.tcp.Socket +import io.github.davidepianca98.socket.tcp.WebSocket +import node.net.Server +import node.net.createServer import web.timers.setTimeout +import kotlin.collections.iterator internal actual open class ServerSocket actual constructor( private val broker: Broker, @@ -14,7 +17,7 @@ internal actual open class ServerSocket actual constructor( ) : ServerSocketInterface { protected val clients = mutableMapOf<String, Pair<node.net.Socket, Any?>>() - protected open val mqttSocket: node.net.Server = node.net.createServer { socket: node.net.Socket -> + protected open val mqttSocket: Server = createServer { socket: node.net.Socket -> val localSocket = createSocket(socket) val connection = ClientConnection(localSocket, broker) clients[socket.socketId()] = Pair(socket, connection) @@ -22,7 +25,7 @@ internal actual open class ServerSocket actual constructor( onConnect(socket) } - protected open val mqttWebSocket: node.net.Server = node.net.createServer { socket: node.net.Socket -> + protected open val mqttWebSocket: Server = createServer { socket: node.net.Socket -> val localSocket = createSocket(socket) val connection = ClientConnection(WebSocket(localSocket), broker) clients[socket.socketId()] = Pair(socket, connection) diff --git a/kmqtt-broker/src/jsMain/kotlin/socket/tls/TLSServerSocket.kt b/kmqtt-broker/src/jsMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerSocket.kt similarity index 76% rename from kmqtt-broker/src/jsMain/kotlin/socket/tls/TLSServerSocket.kt rename to kmqtt-broker/src/jsMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerSocket.kt index fad911c1366ab3c14688f21600a270da728e580e..c4cebb0b6d4214902f7ee32c3fab33b5e0cd8d07 100644 --- a/kmqtt-broker/src/jsMain/kotlin/socket/tls/TLSServerSocket.kt +++ b/kmqtt-broker/src/jsMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerSocket.kt @@ -1,12 +1,13 @@ -package socket.tls +package io.github.davidepianca98.socket.tls -import mqtt.broker.Broker -import mqtt.broker.ClientConnection +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.mqtt.broker.ClientConnection import node.fs.ReadFileSyncBufferOptions import node.net.Socket -import socket.ServerSocket -import socket.SocketState -import socket.tcp.WebSocket +import io.github.davidepianca98.socket.ServerSocket +import io.github.davidepianca98.socket.SocketState +import io.github.davidepianca98.socket.tcp.WebSocket +import node.fs.readFileSync internal actual class TLSServerSocket actual constructor( private val broker: Broker, @@ -17,7 +18,7 @@ internal actual class TLSServerSocket actual constructor( private fun ReadFileOptions(): ReadFileSyncBufferOptions = js("{}") as ReadFileSyncBufferOptions private val tlsOptions = TlsOptions().apply { - pfx = node.fs.readFileSync(broker.tlsSettings!!.keyStoreFilePath, ReadFileOptions()) + pfx = readFileSync(broker.tlsSettings!!.keyStoreFilePath, ReadFileOptions()) passphrase = broker.tlsSettings.keyStorePassword requestCert = broker.tlsSettings.requireClientCertificate } @@ -57,9 +58,9 @@ internal actual class TLSServerSocket actual constructor( } } - private fun node.net.Socket.socketId(): String = "$remoteAddress:$remotePort" + private fun Socket.socketId(): String = "$remoteAddress:$remotePort" - override fun createSocket(socket: node.net.Socket): TLSSocket { + override fun createSocket(socket: Socket): TLSSocket { return TLSSocket(socket, selectCallback) } } diff --git a/kmqtt-broker/src/jsMain/kotlin/socket/udp/UDPSocket.kt b/kmqtt-broker/src/jsMain/kotlin/io/github/davidepianca98/socket/udp/UDPSocket.kt similarity index 73% rename from kmqtt-broker/src/jsMain/kotlin/socket/udp/UDPSocket.kt rename to kmqtt-broker/src/jsMain/kotlin/io/github/davidepianca98/socket/udp/UDPSocket.kt index fac7aa20d5b39d53fe9c24506eb42274caf4ec1c..63b721ba3d7a703a14be5eef84c6aae2426ec71e 100644 --- a/kmqtt-broker/src/jsMain/kotlin/socket/udp/UDPSocket.kt +++ b/kmqtt-broker/src/jsMain/kotlin/io/github/davidepianca98/socket/udp/UDPSocket.kt @@ -1,10 +1,12 @@ -package socket.udp +package io.github.davidepianca98.socket.udp -import socket.SocketState -import toBuffer +import node.dgram.Socket +import node.dgram.SocketEvent +import io.github.davidepianca98.socket.SocketState +import io.github.davidepianca98.toBuffer internal actual class UDPSocket( - private val socket: node.dgram.Socket, + private val socket: Socket, private val selectCallback: (attachment: Any?, state: SocketState) -> Boolean ) { @@ -12,7 +14,7 @@ internal actual class UDPSocket( private var attachment: Any? = null init { - socket.on(node.dgram.SocketEvent.MESSAGE) { msg, rinfo -> + socket.on(SocketEvent.MESSAGE) { msg, rinfo -> queue.add(UDPReadData(msg.toUByteArray(), rinfo.address, rinfo.port.toInt())) selectCallback(attachment, SocketState.READ) } diff --git a/kmqtt-broker/src/jsMain/kotlin/setShutdownHook.kt b/kmqtt-broker/src/jsMain/kotlin/setShutdownHook.kt deleted file mode 100644 index f408c18e9cdc46a13650f39fd39df40589213de7..0000000000000000000000000000000000000000 --- a/kmqtt-broker/src/jsMain/kotlin/setShutdownHook.kt +++ /dev/null @@ -1,7 +0,0 @@ -import node.process.process - -internal actual fun setShutdownHook(hook: () -> Unit) { - process.on(node.process.ProcessEvent.BEFOREEXIT) { - hook() - } -} diff --git a/kmqtt-broker/src/jvmMain/kotlin/setShutdownHook.kt b/kmqtt-broker/src/jvmMain/kotlin/io/github/davidepianca98/setShutdownHook.kt similarity index 84% rename from kmqtt-broker/src/jvmMain/kotlin/setShutdownHook.kt rename to kmqtt-broker/src/jvmMain/kotlin/io/github/davidepianca98/setShutdownHook.kt index c07a9a554d6bd9f00feee2566e88d287aea3dcb7..70ba797d9f7f8eed2e291276cd8139d6bcf62f66 100644 --- a/kmqtt-broker/src/jvmMain/kotlin/setShutdownHook.kt +++ b/kmqtt-broker/src/jvmMain/kotlin/io/github/davidepianca98/setShutdownHook.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + public actual fun setShutdownHook(hook: () -> Unit) { Runtime.getRuntime().addShutdownHook(object : Thread() { override fun run() { diff --git a/kmqtt-broker/src/jvmMain/kotlin/socket/ServerSocket.kt b/kmqtt-broker/src/jvmMain/kotlin/io/github/davidepianca98/socket/ServerSocket.kt similarity index 92% rename from kmqtt-broker/src/jvmMain/kotlin/socket/ServerSocket.kt rename to kmqtt-broker/src/jvmMain/kotlin/io/github/davidepianca98/socket/ServerSocket.kt index dee547f43bd984e068fceaac061d05d186962c3d..285c589d123695d3887d908fd1cfa187b9b496ec 100644 --- a/kmqtt-broker/src/jvmMain/kotlin/socket/ServerSocket.kt +++ b/kmqtt-broker/src/jvmMain/kotlin/io/github/davidepianca98/socket/ServerSocket.kt @@ -1,16 +1,16 @@ -package socket +package io.github.davidepianca98.socket -import mqtt.broker.Broker -import mqtt.broker.ClientConnection -import mqtt.broker.cluster.ClusterConnection -import mqtt.broker.cluster.ClusterDiscoveryConnection -import mqtt.broker.udp.UDPConnectionsMap +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.mqtt.broker.ClientConnection +import io.github.davidepianca98.mqtt.broker.cluster.ClusterConnection +import io.github.davidepianca98.mqtt.broker.cluster.ClusterDiscoveryConnection +import io.github.davidepianca98.mqtt.broker.udp.UDPConnectionsMap import org.xbill.DNS.ARecord import org.xbill.DNS.Lookup import org.xbill.DNS.Type -import socket.tcp.Socket -import socket.tcp.WebSocket -import socket.udp.UDPSocket +import io.github.davidepianca98.socket.tcp.Socket +import io.github.davidepianca98.socket.tcp.WebSocket +import io.github.davidepianca98.socket.udp.UDPSocket import java.net.InetAddress import java.net.InetSocketAddress import java.net.StandardSocketOptions diff --git a/kmqtt-broker/src/jvmMain/kotlin/socket/tls/TLSServerSocket.kt b/kmqtt-broker/src/jvmMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerSocket.kt similarity index 93% rename from kmqtt-broker/src/jvmMain/kotlin/socket/tls/TLSServerSocket.kt rename to kmqtt-broker/src/jvmMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerSocket.kt index 7d252a76ab7690304bf114f5496e1f4b8b7da763..42b2fd9a91fe4ec43ba817c38f7f09d988b30203 100644 --- a/kmqtt-broker/src/jvmMain/kotlin/socket/tls/TLSServerSocket.kt +++ b/kmqtt-broker/src/jvmMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerSocket.kt @@ -1,9 +1,9 @@ -package socket.tls +package io.github.davidepianca98.socket.tls -import mqtt.broker.Broker -import socket.ServerSocket -import socket.SocketState -import socket.tcp.Socket +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.socket.ServerSocket +import io.github.davidepianca98.socket.SocketState +import io.github.davidepianca98.socket.tcp.Socket import java.io.ByteArrayInputStream import java.io.File import java.nio.ByteBuffer diff --git a/kmqtt-broker/src/jvmMain/kotlin/socket/udp/UDPSocket.kt b/kmqtt-broker/src/jvmMain/kotlin/io/github/davidepianca98/socket/udp/UDPSocket.kt similarity index 91% rename from kmqtt-broker/src/jvmMain/kotlin/socket/udp/UDPSocket.kt rename to kmqtt-broker/src/jvmMain/kotlin/io/github/davidepianca98/socket/udp/UDPSocket.kt index a08a678a124c166bac0a19518c66b979fdac2e3f..39589d2c9aa39652ca07a8e9d53a6c8052ba7d2e 100644 --- a/kmqtt-broker/src/jvmMain/kotlin/socket/udp/UDPSocket.kt +++ b/kmqtt-broker/src/jvmMain/kotlin/io/github/davidepianca98/socket/udp/UDPSocket.kt @@ -1,6 +1,6 @@ -package socket.udp +package io.github.davidepianca98.socket.udp -import toUByteArray +import io.github.davidepianca98.toUByteArray import java.net.InetSocketAddress import java.nio.ByteBuffer import java.nio.channels.DatagramChannel diff --git a/kmqtt-broker/src/jvmTest/kotlin/RunLocal.kt b/kmqtt-broker/src/jvmTest/kotlin/RunLocal.kt index d9a6718f6d893cdd4b749c3eec42a3cfde6226c9..e3e6b08b2408fd0201eaaf5fb450df66f2eb4429 100644 --- a/kmqtt-broker/src/jvmTest/kotlin/RunLocal.kt +++ b/kmqtt-broker/src/jvmTest/kotlin/RunLocal.kt @@ -1,6 +1,6 @@ -import mqtt.broker.Broker -import mqtt.broker.interfaces.Authorization -import socket.tls.TLSSettings +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.mqtt.broker.interfaces.Authorization +import io.github.davidepianca98.socket.tls.TLSSettings fun main() { Broker( diff --git a/kmqtt-broker/src/macosX64Main/kotlin/setShutdownHook.kt b/kmqtt-broker/src/linuxArm64Main/kotlin/io/github/davidepianca98/setShutdownHook.kt similarity index 92% rename from kmqtt-broker/src/macosX64Main/kotlin/setShutdownHook.kt rename to kmqtt-broker/src/linuxArm64Main/kotlin/io/github/davidepianca98/setShutdownHook.kt index f8ec7b8ad6f55f5b29c9a4189aac9b6110ca1806..6fd07530f6d357dec46c0393d0ac802489de3e5e 100644 --- a/kmqtt-broker/src/macosX64Main/kotlin/setShutdownHook.kt +++ b/kmqtt-broker/src/linuxArm64Main/kotlin/io/github/davidepianca98/setShutdownHook.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.staticCFunction import platform.posix.SIGINT import platform.posix.SIGTERM diff --git a/kmqtt-broker/src/linuxArm64Main/kotlin/socket.tls/TLSServerContext.kt b/kmqtt-broker/src/linuxArm64Main/kotlin/io/github/davidepianca98/socket.tls/TLSServerContext.kt similarity index 97% rename from kmqtt-broker/src/linuxArm64Main/kotlin/socket.tls/TLSServerContext.kt rename to kmqtt-broker/src/linuxArm64Main/kotlin/io/github/davidepianca98/socket.tls/TLSServerContext.kt index d55a78ffe535dc4500c07b796647d7b0e639d984..29106e7cdb6a9f00686e9aa9e315ae10d780c5e4 100644 --- a/kmqtt-broker/src/linuxArm64Main/kotlin/socket.tls/TLSServerContext.kt +++ b/kmqtt-broker/src/linuxArm64Main/kotlin/io/github/davidepianca98/socket.tls/TLSServerContext.kt @@ -1,4 +1,4 @@ -package socket.tls +package io.github.davidepianca98.socket.tls import cnames.structs.stack_st_X509 import kotlinx.cinterop.* diff --git a/kmqtt-broker/src/linuxArm64Main/kotlin/socket.tls/TLSServerEngine.kt b/kmqtt-broker/src/linuxArm64Main/kotlin/io/github/davidepianca98/socket.tls/TLSServerEngine.kt similarity index 95% rename from kmqtt-broker/src/linuxArm64Main/kotlin/socket.tls/TLSServerEngine.kt rename to kmqtt-broker/src/linuxArm64Main/kotlin/io/github/davidepianca98/socket.tls/TLSServerEngine.kt index 0dc5defc552d808703b9eaa8f50a9b45c378cc34..62574c55be244393c7c29f8dfe4ad67ee2fcbee7 100644 --- a/kmqtt-broker/src/linuxArm64Main/kotlin/socket.tls/TLSServerEngine.kt +++ b/kmqtt-broker/src/linuxArm64Main/kotlin/io/github/davidepianca98/socket.tls/TLSServerEngine.kt @@ -1,8 +1,8 @@ -package socket.tls +package io.github.davidepianca98.socket.tls import kotlinx.cinterop.* import openssl.* -import socket.IOException +import io.github.davidepianca98.socket.IOException internal actual class TLSServerEngine actual constructor(serverContext: TLSServerContext) : TLSEngine { diff --git a/kmqtt-broker/src/macosArm64Main/kotlin/setShutdownHook.kt b/kmqtt-broker/src/linuxX64Main/kotlin/io/github/davidepianca98/setShutdownHook.kt similarity index 92% rename from kmqtt-broker/src/macosArm64Main/kotlin/setShutdownHook.kt rename to kmqtt-broker/src/linuxX64Main/kotlin/io/github/davidepianca98/setShutdownHook.kt index f8ec7b8ad6f55f5b29c9a4189aac9b6110ca1806..6fd07530f6d357dec46c0393d0ac802489de3e5e 100644 --- a/kmqtt-broker/src/macosArm64Main/kotlin/setShutdownHook.kt +++ b/kmqtt-broker/src/linuxX64Main/kotlin/io/github/davidepianca98/setShutdownHook.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.staticCFunction import platform.posix.SIGINT import platform.posix.SIGTERM diff --git a/kmqtt-broker/src/macosArm64Main/kotlin/socket/tls/TLSServerContext.kt b/kmqtt-broker/src/linuxX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerContext.kt similarity index 97% rename from kmqtt-broker/src/macosArm64Main/kotlin/socket/tls/TLSServerContext.kt rename to kmqtt-broker/src/linuxX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerContext.kt index afbbd663dc85e943d7a3e8964317c5a3db58ed21..3b7f599424c5d932e7cdf2ac9706dad9b657c094 100644 --- a/kmqtt-broker/src/macosArm64Main/kotlin/socket/tls/TLSServerContext.kt +++ b/kmqtt-broker/src/linuxX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerContext.kt @@ -1,8 +1,7 @@ -package socket.tls +package io.github.davidepianca98.socket.tls import cnames.structs.stack_st_X509 import kotlinx.cinterop.* -import mqtt.broker.Broker import openssl.* import platform.posix.fclose import platform.posix.fopen diff --git a/kmqtt-broker/src/macosX64Main/kotlin/socket/tls/TLSServerEngine.kt b/kmqtt-broker/src/linuxX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerEngine.kt similarity index 95% rename from kmqtt-broker/src/macosX64Main/kotlin/socket/tls/TLSServerEngine.kt rename to kmqtt-broker/src/linuxX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerEngine.kt index 3c08335d5f42b109067f08d1df5a867ada9a0b6e..d8a8e6c71b116ba99819ca148594a8bbb588995d 100644 --- a/kmqtt-broker/src/macosX64Main/kotlin/socket/tls/TLSServerEngine.kt +++ b/kmqtt-broker/src/linuxX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerEngine.kt @@ -1,9 +1,9 @@ -package socket.tls +package io.github.davidepianca98.socket.tls import kotlinx.cinterop.ByteVar import kotlinx.cinterop.CPointer import openssl.* -import socket.IOException +import io.github.davidepianca98.socket.IOException internal actual class TLSServerEngine actual constructor(serverContext: TLSServerContext) : TLSEngine { diff --git a/kmqtt-broker/src/linuxArm64Main/kotlin/setShutdownHook.kt b/kmqtt-broker/src/macosArm64Main/kotlin/io/github/davidepianca98/setShutdownHook.kt similarity index 92% rename from kmqtt-broker/src/linuxArm64Main/kotlin/setShutdownHook.kt rename to kmqtt-broker/src/macosArm64Main/kotlin/io/github/davidepianca98/setShutdownHook.kt index f8ec7b8ad6f55f5b29c9a4189aac9b6110ca1806..6fd07530f6d357dec46c0393d0ac802489de3e5e 100644 --- a/kmqtt-broker/src/linuxArm64Main/kotlin/setShutdownHook.kt +++ b/kmqtt-broker/src/macosArm64Main/kotlin/io/github/davidepianca98/setShutdownHook.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.staticCFunction import platform.posix.SIGINT import platform.posix.SIGTERM diff --git a/kmqtt-broker/src/linuxX64Main/kotlin/socket/tls/TLSServerContext.kt b/kmqtt-broker/src/macosArm64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerContext.kt similarity index 97% rename from kmqtt-broker/src/linuxX64Main/kotlin/socket/tls/TLSServerContext.kt rename to kmqtt-broker/src/macosArm64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerContext.kt index afbbd663dc85e943d7a3e8964317c5a3db58ed21..3b7f599424c5d932e7cdf2ac9706dad9b657c094 100644 --- a/kmqtt-broker/src/linuxX64Main/kotlin/socket/tls/TLSServerContext.kt +++ b/kmqtt-broker/src/macosArm64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerContext.kt @@ -1,8 +1,7 @@ -package socket.tls +package io.github.davidepianca98.socket.tls import cnames.structs.stack_st_X509 import kotlinx.cinterop.* -import mqtt.broker.Broker import openssl.* import platform.posix.fclose import platform.posix.fopen diff --git a/kmqtt-broker/src/macosArm64Main/kotlin/socket/tls/TLSServerEngine.kt b/kmqtt-broker/src/macosArm64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerEngine.kt similarity index 95% rename from kmqtt-broker/src/macosArm64Main/kotlin/socket/tls/TLSServerEngine.kt rename to kmqtt-broker/src/macosArm64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerEngine.kt index 3c08335d5f42b109067f08d1df5a867ada9a0b6e..d8a8e6c71b116ba99819ca148594a8bbb588995d 100644 --- a/kmqtt-broker/src/macosArm64Main/kotlin/socket/tls/TLSServerEngine.kt +++ b/kmqtt-broker/src/macosArm64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerEngine.kt @@ -1,9 +1,9 @@ -package socket.tls +package io.github.davidepianca98.socket.tls import kotlinx.cinterop.ByteVar import kotlinx.cinterop.CPointer import openssl.* -import socket.IOException +import io.github.davidepianca98.socket.IOException internal actual class TLSServerEngine actual constructor(serverContext: TLSServerContext) : TLSEngine { diff --git a/kmqtt-broker/src/linuxX64Main/kotlin/setShutdownHook.kt b/kmqtt-broker/src/macosX64Main/kotlin/io/github/davidepianca98/setShutdownHook.kt similarity index 92% rename from kmqtt-broker/src/linuxX64Main/kotlin/setShutdownHook.kt rename to kmqtt-broker/src/macosX64Main/kotlin/io/github/davidepianca98/setShutdownHook.kt index f8ec7b8ad6f55f5b29c9a4189aac9b6110ca1806..6fd07530f6d357dec46c0393d0ac802489de3e5e 100644 --- a/kmqtt-broker/src/linuxX64Main/kotlin/setShutdownHook.kt +++ b/kmqtt-broker/src/macosX64Main/kotlin/io/github/davidepianca98/setShutdownHook.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.staticCFunction import platform.posix.SIGINT import platform.posix.SIGTERM diff --git a/kmqtt-broker/src/mingwX64Main/kotlin/socket/tls/TLSServerContext.kt b/kmqtt-broker/src/macosX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerContext.kt similarity index 97% rename from kmqtt-broker/src/mingwX64Main/kotlin/socket/tls/TLSServerContext.kt rename to kmqtt-broker/src/macosX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerContext.kt index afbbd663dc85e943d7a3e8964317c5a3db58ed21..3b7f599424c5d932e7cdf2ac9706dad9b657c094 100644 --- a/kmqtt-broker/src/mingwX64Main/kotlin/socket/tls/TLSServerContext.kt +++ b/kmqtt-broker/src/macosX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerContext.kt @@ -1,8 +1,7 @@ -package socket.tls +package io.github.davidepianca98.socket.tls import cnames.structs.stack_st_X509 import kotlinx.cinterop.* -import mqtt.broker.Broker import openssl.* import platform.posix.fclose import platform.posix.fopen diff --git a/kmqtt-broker/src/linuxX64Main/kotlin/socket/tls/TLSServerEngine.kt b/kmqtt-broker/src/macosX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerEngine.kt similarity index 95% rename from kmqtt-broker/src/linuxX64Main/kotlin/socket/tls/TLSServerEngine.kt rename to kmqtt-broker/src/macosX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerEngine.kt index 3c08335d5f42b109067f08d1df5a867ada9a0b6e..d8a8e6c71b116ba99819ca148594a8bbb588995d 100644 --- a/kmqtt-broker/src/linuxX64Main/kotlin/socket/tls/TLSServerEngine.kt +++ b/kmqtt-broker/src/macosX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerEngine.kt @@ -1,9 +1,9 @@ -package socket.tls +package io.github.davidepianca98.socket.tls import kotlinx.cinterop.ByteVar import kotlinx.cinterop.CPointer import openssl.* -import socket.IOException +import io.github.davidepianca98.socket.IOException internal actual class TLSServerEngine actual constructor(serverContext: TLSServerContext) : TLSEngine { diff --git a/kmqtt-broker/src/mingwX64Main/kotlin/setShutdownHook.kt b/kmqtt-broker/src/mingwX64Main/kotlin/io/github/davidepianca98/setShutdownHook.kt similarity index 92% rename from kmqtt-broker/src/mingwX64Main/kotlin/setShutdownHook.kt rename to kmqtt-broker/src/mingwX64Main/kotlin/io/github/davidepianca98/setShutdownHook.kt index 801378ae78b97548e21e555ac3278125849e9d25..3b206f3c9087d53e3547625f020c6a875d959a03 100644 --- a/kmqtt-broker/src/mingwX64Main/kotlin/setShutdownHook.kt +++ b/kmqtt-broker/src/mingwX64Main/kotlin/io/github/davidepianca98/setShutdownHook.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.staticCFunction import platform.windows.* diff --git a/kmqtt-broker/src/macosX64Main/kotlin/socket/tls/TLSServerContext.kt b/kmqtt-broker/src/mingwX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerContext.kt similarity index 97% rename from kmqtt-broker/src/macosX64Main/kotlin/socket/tls/TLSServerContext.kt rename to kmqtt-broker/src/mingwX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerContext.kt index afbbd663dc85e943d7a3e8964317c5a3db58ed21..3b7f599424c5d932e7cdf2ac9706dad9b657c094 100644 --- a/kmqtt-broker/src/macosX64Main/kotlin/socket/tls/TLSServerContext.kt +++ b/kmqtt-broker/src/mingwX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerContext.kt @@ -1,8 +1,7 @@ -package socket.tls +package io.github.davidepianca98.socket.tls import cnames.structs.stack_st_X509 import kotlinx.cinterop.* -import mqtt.broker.Broker import openssl.* import platform.posix.fclose import platform.posix.fopen diff --git a/kmqtt-broker/src/mingwX64Main/kotlin/socket/tls/TLSServerEngine.kt b/kmqtt-broker/src/mingwX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerEngine.kt similarity index 95% rename from kmqtt-broker/src/mingwX64Main/kotlin/socket/tls/TLSServerEngine.kt rename to kmqtt-broker/src/mingwX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerEngine.kt index 3c08335d5f42b109067f08d1df5a867ada9a0b6e..d8a8e6c71b116ba99819ca148594a8bbb588995d 100644 --- a/kmqtt-broker/src/mingwX64Main/kotlin/socket/tls/TLSServerEngine.kt +++ b/kmqtt-broker/src/mingwX64Main/kotlin/io/github/davidepianca98/socket/tls/TLSServerEngine.kt @@ -1,9 +1,9 @@ -package socket.tls +package io.github.davidepianca98.socket.tls import kotlinx.cinterop.ByteVar import kotlinx.cinterop.CPointer import openssl.* -import socket.IOException +import io.github.davidepianca98.socket.IOException internal actual class TLSServerEngine actual constructor(serverContext: TLSServerContext) : TLSEngine { diff --git a/kmqtt-broker/src/posixMain/kotlin/socket/ServerSocket.kt b/kmqtt-broker/src/posixMain/kotlin/io/github/davidepianca98/socket/ServerSocket.kt similarity index 89% rename from kmqtt-broker/src/posixMain/kotlin/socket/ServerSocket.kt rename to kmqtt-broker/src/posixMain/kotlin/io/github/davidepianca98/socket/ServerSocket.kt index f73b772da0ec39016849655a88d018e58ca225c9..5524be809e7a823616a476196c0391be3e063d26 100644 --- a/kmqtt-broker/src/posixMain/kotlin/socket/ServerSocket.kt +++ b/kmqtt-broker/src/posixMain/kotlin/io/github/davidepianca98/socket/ServerSocket.kt @@ -1,31 +1,31 @@ -package socket - -import bind -import close -import getEagain -import getErrno -import getEwouldblock -import inet_pton +package io.github.davidepianca98.socket + +import io.github.davidepianca98.bind +import io.github.davidepianca98.close +import io.github.davidepianca98.getEagain +import io.github.davidepianca98.getErrno +import io.github.davidepianca98.getEwouldblock +import io.github.davidepianca98.inet_pton import kotlinx.cinterop.* -import listen -import mqtt.broker.Broker -import mqtt.broker.ClientConnection -import mqtt.broker.cluster.ClusterConnection -import mqtt.broker.cluster.ClusterDiscoveryConnection -import mqtt.broker.udp.UDPConnectionsMap +import io.github.davidepianca98.listen +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.mqtt.broker.ClientConnection +import io.github.davidepianca98.mqtt.broker.cluster.ClusterConnection +import io.github.davidepianca98.mqtt.broker.cluster.ClusterDiscoveryConnection +import io.github.davidepianca98.mqtt.broker.udp.UDPConnectionsMap +import io.github.davidepianca98.select import platform.posix.* -import select -import set_non_blocking -import setsockopt -import shutdown -import sockaddrIn -import socket -import socket.tcp.Socket -import socket.tcp.WebSocket -import socket.udp.UDPSocket -import socketsCleanup -import socketsInit -import accept as posixAccept +import io.github.davidepianca98.set_non_blocking +import io.github.davidepianca98.setsockopt +import io.github.davidepianca98.shutdown +import io.github.davidepianca98.sockaddrIn +import io.github.davidepianca98.socket +import io.github.davidepianca98.socket.tcp.Socket +import io.github.davidepianca98.socket.tcp.WebSocket +import io.github.davidepianca98.socket.udp.UDPSocket +import io.github.davidepianca98.socketsCleanup +import io.github.davidepianca98.socketsInit +import io.github.davidepianca98.accept as posixAccept internal actual open class ServerSocket actual constructor( private val broker: Broker, diff --git a/kmqtt-broker/src/posixMain/kotlin/socket/tls/TLSServerContext.kt b/kmqtt-broker/src/posixMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerContext.kt similarity index 65% rename from kmqtt-broker/src/posixMain/kotlin/socket/tls/TLSServerContext.kt rename to kmqtt-broker/src/posixMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerContext.kt index 0e2a7f73381e32652b36fd8d78193a52d67c3b2a..4fd96336e93128430de4979396237438d9c3acf4 100644 --- a/kmqtt-broker/src/posixMain/kotlin/socket/tls/TLSServerContext.kt +++ b/kmqtt-broker/src/posixMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerContext.kt @@ -1,4 +1,4 @@ -package socket.tls +package io.github.davidepianca98.socket.tls internal expect class TLSServerContext(tlsSettings: TLSSettings) { fun close() diff --git a/kmqtt-broker/src/posixMain/kotlin/socket/tls/TLSServerEngine.kt b/kmqtt-broker/src/posixMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerEngine.kt similarity index 93% rename from kmqtt-broker/src/posixMain/kotlin/socket/tls/TLSServerEngine.kt rename to kmqtt-broker/src/posixMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerEngine.kt index dee0771bd3fcaadd7ff67fa2d97a3894a1373ea4..3f1d3067c0ae91aded53a6a9a41ea3a713fd2407 100644 --- a/kmqtt-broker/src/posixMain/kotlin/socket/tls/TLSServerEngine.kt +++ b/kmqtt-broker/src/posixMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerEngine.kt @@ -1,4 +1,4 @@ -package socket.tls +package io.github.davidepianca98.socket.tls import kotlinx.cinterop.ByteVar import kotlinx.cinterop.CPointer diff --git a/kmqtt-broker/src/posixMain/kotlin/socket/tls/TLSServerSocket.kt b/kmqtt-broker/src/posixMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerSocket.kt similarity index 76% rename from kmqtt-broker/src/posixMain/kotlin/socket/tls/TLSServerSocket.kt rename to kmqtt-broker/src/posixMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerSocket.kt index 7291574f17e922bd6e7ed1af754d290150a31762..bff7d0e28d28cf11904ce75efcf22ec731597408 100644 --- a/kmqtt-broker/src/posixMain/kotlin/socket/tls/TLSServerSocket.kt +++ b/kmqtt-broker/src/posixMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerSocket.kt @@ -1,12 +1,12 @@ -package socket.tls +package io.github.davidepianca98.socket.tls -import close -import mqtt.broker.Broker -import mqtt.broker.ClientConnection -import socket.IOException -import socket.ServerSocket -import socket.SocketState -import socket.tcp.WebSocket +import io.github.davidepianca98.close +import io.github.davidepianca98.mqtt.broker.Broker +import io.github.davidepianca98.mqtt.broker.ClientConnection +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.ServerSocket +import io.github.davidepianca98.socket.SocketState +import io.github.davidepianca98.socket.tcp.WebSocket internal actual class TLSServerSocket actual constructor( private val broker: Broker, diff --git a/kmqtt-broker/src/posixMain/kotlin/socket/udp/UDPSocket.kt b/kmqtt-broker/src/posixMain/kotlin/io/github/davidepianca98/socket/udp/UDPSocket.kt similarity index 80% rename from kmqtt-broker/src/posixMain/kotlin/socket/udp/UDPSocket.kt rename to kmqtt-broker/src/posixMain/kotlin/io/github/davidepianca98/socket/udp/UDPSocket.kt index 6a75a8f8fece0cd08d1855e21316fc228cd895f3..a3eb9a920e6502aff92515a33da3f6a0a1cb672d 100644 --- a/kmqtt-broker/src/posixMain/kotlin/socket/udp/UDPSocket.kt +++ b/kmqtt-broker/src/posixMain/kotlin/io/github/davidepianca98/socket/udp/UDPSocket.kt @@ -1,23 +1,23 @@ -package socket.udp +package io.github.davidepianca98.socket.udp -import close -import getEagain -import getErrno -import getEwouldblock -import getPortFromSockaddrIn -import inet_ntop -import inet_pton +import io.github.davidepianca98.close +import io.github.davidepianca98.getEagain +import io.github.davidepianca98.getErrno +import io.github.davidepianca98.getEwouldblock +import io.github.davidepianca98.inet_ntop +import io.github.davidepianca98.inet_pton +import io.github.davidepianca98.getPortFromSockaddrIn import kotlinx.cinterop.* -import memset +import io.github.davidepianca98.memset import platform.posix.AF_INET import platform.posix.sockaddr import platform.posix.sockaddr_in -import recvfrom -import sendto -import sockaddrIn -import socket.IOException -import socket.SocketClosedException -import socklen_tVar +import io.github.davidepianca98.recvfrom +import io.github.davidepianca98.sendto +import io.github.davidepianca98.sockaddrIn +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.SocketClosedException +import io.github.davidepianca98.socklen_tVar internal actual class UDPSocket(private val socket: Int) { diff --git a/kmqtt-client/src/commonMain/kotlin/ClientSocket.kt b/kmqtt-client/src/commonMain/kotlin/io/github/davidepianca98/ClientSocket.kt similarity index 69% rename from kmqtt-client/src/commonMain/kotlin/ClientSocket.kt rename to kmqtt-client/src/commonMain/kotlin/io/github/davidepianca98/ClientSocket.kt index 46d4841b33f85f5cd0567e51409d1e73567e55c7..d242be1a8b169bde67fb9c76822de68e978b9d94 100644 --- a/kmqtt-client/src/commonMain/kotlin/ClientSocket.kt +++ b/kmqtt-client/src/commonMain/kotlin/io/github/davidepianca98/ClientSocket.kt @@ -1,4 +1,6 @@ -import socket.tcp.Socket +package io.github.davidepianca98 + +import io.github.davidepianca98.socket.tcp.Socket public expect class ClientSocket( address: String, diff --git a/kmqtt-client/src/commonMain/kotlin/MQTTClient.kt b/kmqtt-client/src/commonMain/kotlin/io/github/davidepianca98/MQTTClient.kt similarity index 86% rename from kmqtt-client/src/commonMain/kotlin/MQTTClient.kt rename to kmqtt-client/src/commonMain/kotlin/io/github/davidepianca98/MQTTClient.kt index 218fd461c5347517aa8479bcd4678c88bd0fa670..6ec25e4d7f1d8cb7767d310ceeec755a20d38d8d 100644 --- a/kmqtt-client/src/commonMain/kotlin/MQTTClient.kt +++ b/kmqtt-client/src/commonMain/kotlin/io/github/davidepianca98/MQTTClient.kt @@ -1,3 +1,12 @@ +package io.github.davidepianca98 + +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPubrel +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Pubrec +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Pubrel +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Unsubscribe +import io.github.davidepianca98.mqtt.packets.mqttv4.SubackReturnCode +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Puback +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Subscribe import kotlinx.atomicfu.AtomicBoolean import kotlinx.atomicfu.atomic import kotlinx.atomicfu.locks.ReentrantLock @@ -6,21 +15,51 @@ import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import mqtt.MQTTCurrentPacket -import mqtt.MQTTException -import mqtt.MQTTVersion -import mqtt.Subscription -import mqtt.packets.ConnectFlags -import mqtt.packets.MQTTPacket -import mqtt.packets.Qos -import mqtt.packets.mqtt.* -import mqtt.packets.mqttv4.* -import mqtt.packets.mqttv5.* -import socket.IOException -import socket.SocketClosedException -import socket.SocketInterface -import socket.streams.EOFException -import socket.tls.TLSClientSettings +import io.github.davidepianca98.mqtt.MQTTCurrentPacket +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.MQTTVersion +import io.github.davidepianca98.mqtt.Subscription +import io.github.davidepianca98.mqtt.packets.ConnectFlags +import io.github.davidepianca98.mqtt.packets.MQTTPacket +import io.github.davidepianca98.mqtt.packets.Qos +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTConnack +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTDisconnect +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPingresp +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPuback +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPubcomp +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPublish +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPubrec +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTSuback +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTUnsuback +import io.github.davidepianca98.mqtt.packets.mqttv4.ConnectReturnCode +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Connack +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Connect +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Disconnect +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Pingreq +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Puback +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.mqttv5.MQTT5Auth +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Connack +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Connect +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Disconnect +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pingreq +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Properties +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pubcomp +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Publish +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pubrec +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pubrel +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Suback +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Unsuback +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Unsubscribe +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.SocketClosedException +import io.github.davidepianca98.socket.SocketInterface +import io.github.davidepianca98.socket.streams.EOFException +import io.github.davidepianca98.socket.tls.TLSClientSettings /** * MQTT 3.1.1 and 5 client @@ -164,7 +203,15 @@ public class MQTTClient( val connect = if (mqttVersion == MQTTVersion.MQTT3_1_1) { MQTT4Connect( "MQTT", - ConnectFlags(userName != null, password != null, willRetain, willQos, willTopic != null, cleanStart, false), + ConnectFlags( + userName != null, + password != null, + willRetain, + willQos, + willTopic != null, + cleanStart, + false + ), keepAlive.value, clientId ?: generateRandomClientId(), willTopic, @@ -175,7 +222,15 @@ public class MQTTClient( } else { MQTT5Connect( "MQTT", - ConnectFlags(userName != null, password != null, willRetain, willQos, willTopic != null, cleanStart, false), + ConnectFlags( + userName != null, + password != null, + willRetain, + willQos, + willTopic != null, + cleanStart, + false + ), keepAlive.value, clientId ?: generateRandomClientId(), properties, @@ -534,7 +589,8 @@ public class MQTTClient( topicAliasesClient[correctPacket.properties.topicAlias!!] = correctPacket.topicName } else if (correctPacket.topicName.isEmpty()) { // Use alias - val topicName = topicAliasesClient[correctPacket.properties.topicAlias!!] ?: throw MQTTException(ReasonCode.PROTOCOL_ERROR) + val topicName = topicAliasesClient[correctPacket.properties.topicAlias!!] ?: throw MQTTException( + ReasonCode.PROTOCOL_ERROR) correctPacket = correctPacket.setTopicFromAlias(topicName) } } @@ -652,7 +708,13 @@ public class MQTTClient( private fun handleAuth(packet: MQTT5Auth) { if (packet.authenticateReasonCode == ReasonCode.CONTINUE_AUTHENTICATION) { val data = enhancedAuthCallback(packet.properties.authenticationData) - val auth = MQTT5Auth(ReasonCode.CONTINUE_AUTHENTICATION, MQTT5Properties(authenticationMethod = packet.properties.authenticationMethod, authenticationData = data)) + val auth = MQTT5Auth( + ReasonCode.CONTINUE_AUTHENTICATION, + MQTT5Properties( + authenticationMethod = packet.properties.authenticationMethod, + authenticationData = data + ) + ) send(auth.toByteArray(), true) } } diff --git a/kmqtt-client/src/commonMain/kotlin/TLSClientSocket.kt b/kmqtt-client/src/commonMain/kotlin/io/github/davidepianca98/TLSClientSocket.kt similarity index 65% rename from kmqtt-client/src/commonMain/kotlin/TLSClientSocket.kt rename to kmqtt-client/src/commonMain/kotlin/io/github/davidepianca98/TLSClientSocket.kt index 1964002269876138b74f55d4a6f7b0e0cfabde22..f7a20b43caae155d0200d624343b33d70fbe8792 100644 --- a/kmqtt-client/src/commonMain/kotlin/TLSClientSocket.kt +++ b/kmqtt-client/src/commonMain/kotlin/io/github/davidepianca98/TLSClientSocket.kt @@ -1,5 +1,7 @@ -import socket.tls.TLSClientSettings -import socket.tls.TLSSocket +package io.github.davidepianca98 + +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSSocket public expect class TLSClientSocket( address: String, diff --git a/kmqtt-client/src/commonMain/kotlin/WebSocket.kt b/kmqtt-client/src/commonMain/kotlin/io/github/davidepianca98/WebSocket.kt similarity index 95% rename from kmqtt-client/src/commonMain/kotlin/WebSocket.kt rename to kmqtt-client/src/commonMain/kotlin/io/github/davidepianca98/WebSocket.kt index 9d599bd637988feccdfbc48dc2cdabd1b772c3ac..a81c6b1ec2530b827d7b21d3da736ccf25c4d7ba 100644 --- a/kmqtt-client/src/commonMain/kotlin/WebSocket.kt +++ b/kmqtt-client/src/commonMain/kotlin/io/github/davidepianca98/WebSocket.kt @@ -1,8 +1,10 @@ -import socket.IOException -import socket.SocketInterface -import socket.streams.ByteArrayOutputStream -import socket.streams.DynamicByteBuffer -import socket.streams.EOFException +package io.github.davidepianca98 + +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.SocketInterface +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.socket.streams.DynamicByteBuffer +import io.github.davidepianca98.socket.streams.EOFException import kotlin.random.Random public class WebSocket(private val socket: SocketInterface, host: String, path: String = "/mqtt") : SocketInterface { diff --git a/kmqtt-client/src/iosArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt b/kmqtt-client/src/iosArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt new file mode 100644 index 0000000000000000000000000000000000000000..6a7fddc0f8df0ef7b503ac160160008318af81ec --- /dev/null +++ b/kmqtt-client/src/iosArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt @@ -0,0 +1,235 @@ +package io.github.davidepianca98 + +import kotlinx.cinterop.ByteVar +import kotlinx.cinterop.COpaquePointer +import kotlinx.cinterop.CPointer +import kotlinx.cinterop.pointed +import kotlinx.cinterop.refTo +import kotlinx.cinterop.reinterpret +import kotlinx.cinterop.staticCFunction +import kotlinx.cinterop.toKString +import openssl.BIO_FLAGS_SHOULD_RETRY +import openssl.BIO_free +import openssl.BIO_new +import openssl.BIO_puts +import openssl.BIO_read +import openssl.BIO_s_mem +import openssl.BIO_test_flags +import openssl.BIO_write +import openssl.PEM_X509_INFO_read_bio +import openssl.PEM_read_bio_PrivateKey +import openssl.PEM_read_bio_X509 +import openssl.SSL_CTX_check_private_key +import openssl.SSL_CTX_get_cert_store +import openssl.SSL_CTX_load_verify_locations +import openssl.SSL_CTX_new +import openssl.SSL_CTX_set_cert_verify_callback +import openssl.SSL_CTX_set_default_passwd_cb +import openssl.SSL_CTX_set_default_passwd_cb_userdata +import openssl.SSL_CTX_use_PrivateKey +import openssl.SSL_CTX_use_PrivateKey_file +import openssl.SSL_CTX_use_certificate +import openssl.SSL_CTX_use_certificate_file +import openssl.SSL_FILETYPE_PEM +import openssl.SSL_VERIFY_PEER +import openssl.SSL_free +import openssl.SSL_get_error +import openssl.SSL_is_init_finished +import openssl.SSL_new +import openssl.SSL_read +import openssl.SSL_set_bio +import openssl.SSL_set_connect_state +import openssl.SSL_set_verify +import openssl.SSL_write +import openssl.TLS_client_method +import openssl.X509_INFO_free +import openssl.X509_STORE_add_cert +import openssl.X509_get_default_cert_dir_env +import openssl.sk_X509_INFO_num +import openssl.sk_X509_INFO_pop_free +import openssl.sk_X509_INFO_value +import platform.posix.getenv +import platform.posix.strcpy +import platform.posix.strlen +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSEngine + +internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { + + private val context: CPointer<SSL> + private val readBio: CPointer<BIO> + private val writeBio: CPointer<BIO> + + fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, certBuffer) + + val inf = PEM_X509_INFO_read_bio(bio, null, null, null) + + if (inf == null) { + BIO_free(bio) + return false + } + + val ctx = SSL_CTX_get_cert_store(context); + + var loaded = 0 + for (i in 0..<sk_X509_INFO_num(inf)) { + val itmp = sk_X509_INFO_value(inf, i) + if (itmp != null && itmp.pointed.x509 != null) { + if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + return false + } + loaded++ + } + } + + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + + return loaded > 0 + } + + init { + val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") + + val writeBio = BIO_new(BIO_s_mem()) + if (writeBio == null) { + BIO_free(readBio) + throw IOException("Failed allocating read BIO") + } + + val method = TLS_client_method() + val sslContext = SSL_CTX_new(method)!! + + if (tlsSettings.serverCertificate != null) { + if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { + // Try file + if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { + throw Exception("Server certificate path not found") + } + } + } else { + if (!tlsSettings.checkServerCertificate) { + SSL_CTX_set_cert_verify_callback( + sslContext, + staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> + 1 + }, + null + ) + } else { + if (SSL_CTX_load_verify_locations( + sslContext, + null, + getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString() + ) != 1) { + throw Exception("Server certificate path not found") + } + } + } + + if (tlsSettings.clientCertificate != null) { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, tlsSettings.clientCertificate) + val certificate = PEM_read_bio_X509(bio, null, null, null) + + if (certificate != null) { + if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { + throw Exception("Cannot load client's certificate") + } + } else { + // Load file + if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's certificate file") + } + } + + BIO_puts(bio, tlsSettings.clientCertificateKey) + val key = PEM_read_bio_PrivateKey(bio, null, null, null) + if (key != null) { + if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { + throw Exception("Cannot load client's key") + } + } else { + if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's key file") + } + } + if (SSL_CTX_check_private_key(sslContext) != 1) { + throw Exception("Client's certificate and key don't match") + } + + if (tlsSettings.clientCertificatePassword != null) { + SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) + SSL_CTX_set_default_passwd_cb( + sslContext, + staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> + if (password == null) { + 0 + } else { + val len = strlen(password.reinterpret<ByteVar>().toKString()) + if (size < len.toInt() + 1) { + 0 + } else { + strcpy(buf, password.reinterpret<ByteVar>().toKString()) + len.toInt() + } + } + }) + } + } + + val clientContext = SSL_new(sslContext) + if (clientContext == null) { + BIO_free(readBio) + BIO_free(writeBio) + throw IOException("Failed allocating read BIO") + } + + SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) + + SSL_set_connect_state(clientContext) + SSL_set_bio(clientContext, readBio, writeBio) + context = clientContext + this.readBio = readBio + this.writeBio = writeBio + } + + actual override val isInitFinished: Boolean + get() = SSL_is_init_finished(context) != 0 + + actual override val bioShouldRetry: Boolean + get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 + + actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_write(context, buffer, length) + } + + actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_read(context, buffer, length) + } + + actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_read(writeBio, buffer, length) + } + + actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_write(readBio, buffer, length) + } + + actual override fun getError(result: Int): Int { + return SSL_get_error(context, result) + } + + actual override fun close() { + SSL_free(context) + } +} \ No newline at end of file diff --git a/kmqtt-client/src/iosSimulatorArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt b/kmqtt-client/src/iosSimulatorArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt new file mode 100644 index 0000000000000000000000000000000000000000..6a7fddc0f8df0ef7b503ac160160008318af81ec --- /dev/null +++ b/kmqtt-client/src/iosSimulatorArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt @@ -0,0 +1,235 @@ +package io.github.davidepianca98 + +import kotlinx.cinterop.ByteVar +import kotlinx.cinterop.COpaquePointer +import kotlinx.cinterop.CPointer +import kotlinx.cinterop.pointed +import kotlinx.cinterop.refTo +import kotlinx.cinterop.reinterpret +import kotlinx.cinterop.staticCFunction +import kotlinx.cinterop.toKString +import openssl.BIO_FLAGS_SHOULD_RETRY +import openssl.BIO_free +import openssl.BIO_new +import openssl.BIO_puts +import openssl.BIO_read +import openssl.BIO_s_mem +import openssl.BIO_test_flags +import openssl.BIO_write +import openssl.PEM_X509_INFO_read_bio +import openssl.PEM_read_bio_PrivateKey +import openssl.PEM_read_bio_X509 +import openssl.SSL_CTX_check_private_key +import openssl.SSL_CTX_get_cert_store +import openssl.SSL_CTX_load_verify_locations +import openssl.SSL_CTX_new +import openssl.SSL_CTX_set_cert_verify_callback +import openssl.SSL_CTX_set_default_passwd_cb +import openssl.SSL_CTX_set_default_passwd_cb_userdata +import openssl.SSL_CTX_use_PrivateKey +import openssl.SSL_CTX_use_PrivateKey_file +import openssl.SSL_CTX_use_certificate +import openssl.SSL_CTX_use_certificate_file +import openssl.SSL_FILETYPE_PEM +import openssl.SSL_VERIFY_PEER +import openssl.SSL_free +import openssl.SSL_get_error +import openssl.SSL_is_init_finished +import openssl.SSL_new +import openssl.SSL_read +import openssl.SSL_set_bio +import openssl.SSL_set_connect_state +import openssl.SSL_set_verify +import openssl.SSL_write +import openssl.TLS_client_method +import openssl.X509_INFO_free +import openssl.X509_STORE_add_cert +import openssl.X509_get_default_cert_dir_env +import openssl.sk_X509_INFO_num +import openssl.sk_X509_INFO_pop_free +import openssl.sk_X509_INFO_value +import platform.posix.getenv +import platform.posix.strcpy +import platform.posix.strlen +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSEngine + +internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { + + private val context: CPointer<SSL> + private val readBio: CPointer<BIO> + private val writeBio: CPointer<BIO> + + fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, certBuffer) + + val inf = PEM_X509_INFO_read_bio(bio, null, null, null) + + if (inf == null) { + BIO_free(bio) + return false + } + + val ctx = SSL_CTX_get_cert_store(context); + + var loaded = 0 + for (i in 0..<sk_X509_INFO_num(inf)) { + val itmp = sk_X509_INFO_value(inf, i) + if (itmp != null && itmp.pointed.x509 != null) { + if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + return false + } + loaded++ + } + } + + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + + return loaded > 0 + } + + init { + val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") + + val writeBio = BIO_new(BIO_s_mem()) + if (writeBio == null) { + BIO_free(readBio) + throw IOException("Failed allocating read BIO") + } + + val method = TLS_client_method() + val sslContext = SSL_CTX_new(method)!! + + if (tlsSettings.serverCertificate != null) { + if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { + // Try file + if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { + throw Exception("Server certificate path not found") + } + } + } else { + if (!tlsSettings.checkServerCertificate) { + SSL_CTX_set_cert_verify_callback( + sslContext, + staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> + 1 + }, + null + ) + } else { + if (SSL_CTX_load_verify_locations( + sslContext, + null, + getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString() + ) != 1) { + throw Exception("Server certificate path not found") + } + } + } + + if (tlsSettings.clientCertificate != null) { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, tlsSettings.clientCertificate) + val certificate = PEM_read_bio_X509(bio, null, null, null) + + if (certificate != null) { + if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { + throw Exception("Cannot load client's certificate") + } + } else { + // Load file + if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's certificate file") + } + } + + BIO_puts(bio, tlsSettings.clientCertificateKey) + val key = PEM_read_bio_PrivateKey(bio, null, null, null) + if (key != null) { + if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { + throw Exception("Cannot load client's key") + } + } else { + if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's key file") + } + } + if (SSL_CTX_check_private_key(sslContext) != 1) { + throw Exception("Client's certificate and key don't match") + } + + if (tlsSettings.clientCertificatePassword != null) { + SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) + SSL_CTX_set_default_passwd_cb( + sslContext, + staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> + if (password == null) { + 0 + } else { + val len = strlen(password.reinterpret<ByteVar>().toKString()) + if (size < len.toInt() + 1) { + 0 + } else { + strcpy(buf, password.reinterpret<ByteVar>().toKString()) + len.toInt() + } + } + }) + } + } + + val clientContext = SSL_new(sslContext) + if (clientContext == null) { + BIO_free(readBio) + BIO_free(writeBio) + throw IOException("Failed allocating read BIO") + } + + SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) + + SSL_set_connect_state(clientContext) + SSL_set_bio(clientContext, readBio, writeBio) + context = clientContext + this.readBio = readBio + this.writeBio = writeBio + } + + actual override val isInitFinished: Boolean + get() = SSL_is_init_finished(context) != 0 + + actual override val bioShouldRetry: Boolean + get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 + + actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_write(context, buffer, length) + } + + actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_read(context, buffer, length) + } + + actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_read(writeBio, buffer, length) + } + + actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_write(readBio, buffer, length) + } + + actual override fun getError(result: Int): Int { + return SSL_get_error(context, result) + } + + actual override fun close() { + SSL_free(context) + } +} \ No newline at end of file diff --git a/kmqtt-client/src/iosArm64Main/kotlin/TLSClientEngine.kt b/kmqtt-client/src/iosX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt similarity index 97% rename from kmqtt-client/src/iosArm64Main/kotlin/TLSClientEngine.kt rename to kmqtt-client/src/iosX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt index b180dea3fb966b42a150ca3e66decb194b6cd0f3..35214674fc3ee31084da917a860a564c37d85155 100644 --- a/kmqtt-client/src/iosArm64Main/kotlin/TLSClientEngine.kt +++ b/kmqtt-client/src/iosX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt @@ -1,11 +1,13 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import openssl.* import platform.posix.getenv import platform.posix.strcpy import platform.posix.strlen -import socket.IOException -import socket.tls.TLSClientSettings -import socket.tls.TLSEngine +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSEngine internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { diff --git a/kmqtt-client/src/jsMain/kotlin/ClientSocket.kt b/kmqtt-client/src/jsMain/kotlin/io/github/davidepianca98/ClientSocket.kt similarity index 88% rename from kmqtt-client/src/jsMain/kotlin/ClientSocket.kt rename to kmqtt-client/src/jsMain/kotlin/io/github/davidepianca98/ClientSocket.kt index 86c85219f6875fc486eea0a0d21d3266e232b6ba..df89e3fa43a15ad83208d8f9887a11e7ffee79c3 100644 --- a/kmqtt-client/src/jsMain/kotlin/ClientSocket.kt +++ b/kmqtt-client/src/jsMain/kotlin/io/github/davidepianca98/ClientSocket.kt @@ -1,5 +1,7 @@ -import socket.IOException -import socket.tcp.Socket +package io.github.davidepianca98 + +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tcp.Socket import web.timers.setTimeout public actual class ClientSocket actual constructor( diff --git a/kmqtt-client/src/jsMain/kotlin/TLSClientSocket.kt b/kmqtt-client/src/jsMain/kotlin/io/github/davidepianca98/TLSClientSocket.kt similarity index 75% rename from kmqtt-client/src/jsMain/kotlin/TLSClientSocket.kt rename to kmqtt-client/src/jsMain/kotlin/io/github/davidepianca98/TLSClientSocket.kt index a72f4916a50a220c63b31fd478bf9d38bf6d4b2a..4cfa354d0a747f26411f1839c4e942e1543fd13d 100644 --- a/kmqtt-client/src/jsMain/kotlin/TLSClientSocket.kt +++ b/kmqtt-client/src/jsMain/kotlin/io/github/davidepianca98/TLSClientSocket.kt @@ -1,9 +1,12 @@ +package io.github.davidepianca98 + import node.fs.ReadFileSyncBufferOptions -import socket.IOException -import socket.tls.ConnectionOptions -import socket.tls.TLSClientSettings -import socket.tls.TLSSocket -import socket.tls.connect +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tls.ConnectionOptions +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSSocket +import io.github.davidepianca98.socket.tls.connect +import node.fs.readFileSync import web.timers.setTimeout private fun TlsConnectionOptions(): ConnectionOptions = js("{ checkServerIdentity: function (host, cert) { return undefined; }}") as ConnectionOptions @@ -23,7 +26,7 @@ public actual class TLSClientSocket actual constructor( tlsSettings.serverCertificate?.encodeToByteArray()?.toUByteArray()?.toBuffer() } else { // Try to load file - tlsSettings.serverCertificate?.run { node.fs.readFileSync(this, ReadFileOptions()) } ?: throw IOException("Couldn't load server certificate") + tlsSettings.serverCertificate?.run { readFileSync(this, ReadFileOptions()) } ?: throw IOException("Couldn't load server certificate") } } if (tlsSettings.clientCertificate != null) { @@ -31,7 +34,7 @@ public actual class TLSClientSocket actual constructor( tlsSettings.clientCertificate?.encodeToByteArray()?.toUByteArray()?.toBuffer() } else { // Try to load file - tlsSettings.clientCertificate?.run { node.fs.readFileSync(this, ReadFileOptions()) } ?: throw IOException("Couldn't load client certificate") + tlsSettings.clientCertificate?.run { readFileSync(this, ReadFileOptions()) } ?: throw IOException("Couldn't load client certificate") } } if (tlsSettings.clientCertificateKey != null) { @@ -39,7 +42,7 @@ public actual class TLSClientSocket actual constructor( tlsSettings.clientCertificateKey?.encodeToByteArray()?.toUByteArray()?.toBuffer() } else { // Try to load file - tlsSettings.clientCertificateKey?.run { node.fs.readFileSync(this, ReadFileOptions()) } ?: throw IOException("Couldn't load client certificate key") + tlsSettings.clientCertificateKey?.run { readFileSync(this, ReadFileOptions()) } ?: throw IOException("Couldn't load client certificate key") } } diff --git a/kmqtt-client/src/jvmMain/kotlin/ClientSocket.kt b/kmqtt-client/src/jvmMain/kotlin/io/github/davidepianca98/ClientSocket.kt similarity index 92% rename from kmqtt-client/src/jvmMain/kotlin/ClientSocket.kt rename to kmqtt-client/src/jvmMain/kotlin/io/github/davidepianca98/ClientSocket.kt index 6aaf823edc9e99ac30c7c56dcd8f04b816938315..881b0283d2b703388cc413299d16f760edb16e9b 100644 --- a/kmqtt-client/src/jvmMain/kotlin/ClientSocket.kt +++ b/kmqtt-client/src/jvmMain/kotlin/io/github/davidepianca98/ClientSocket.kt @@ -1,4 +1,6 @@ -import socket.tcp.Socket +package io.github.davidepianca98 + +import io.github.davidepianca98.socket.tcp.Socket import java.net.InetSocketAddress import java.nio.ByteBuffer import java.nio.channels.SelectionKey diff --git a/kmqtt-client/src/jvmMain/kotlin/TLSClientSocket.kt b/kmqtt-client/src/jvmMain/kotlin/io/github/davidepianca98/TLSClientSocket.kt similarity index 97% rename from kmqtt-client/src/jvmMain/kotlin/TLSClientSocket.kt rename to kmqtt-client/src/jvmMain/kotlin/io/github/davidepianca98/TLSClientSocket.kt index d01d03d63cac1e2c2bf76fe6fb11a301c4636f74..49b53f0b206d12cf9b03d27ec5942b23167c9cd8 100644 --- a/kmqtt-client/src/jvmMain/kotlin/TLSClientSocket.kt +++ b/kmqtt-client/src/jvmMain/kotlin/io/github/davidepianca98/TLSClientSocket.kt @@ -1,5 +1,7 @@ -import socket.tls.TLSClientSettings -import socket.tls.TLSSocket +package io.github.davidepianca98 + +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSSocket import java.io.FileInputStream import java.net.InetSocketAddress import java.nio.ByteBuffer diff --git a/kmqtt-client/src/linuxArm64Main/kotlin/TLSClientEngine.kt b/kmqtt-client/src/linuxArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt similarity index 97% rename from kmqtt-client/src/linuxArm64Main/kotlin/TLSClientEngine.kt rename to kmqtt-client/src/linuxArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt index b180dea3fb966b42a150ca3e66decb194b6cd0f3..35214674fc3ee31084da917a860a564c37d85155 100644 --- a/kmqtt-client/src/linuxArm64Main/kotlin/TLSClientEngine.kt +++ b/kmqtt-client/src/linuxArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt @@ -1,11 +1,13 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import openssl.* import platform.posix.getenv import platform.posix.strcpy import platform.posix.strlen -import socket.IOException -import socket.tls.TLSClientSettings -import socket.tls.TLSEngine +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSEngine internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { diff --git a/kmqtt-client/src/linuxX64Main/kotlin/TLSClientEngine.kt b/kmqtt-client/src/linuxX64Main/kotlin/TLSClientEngine.kt deleted file mode 100644 index b180dea3fb966b42a150ca3e66decb194b6cd0f3..0000000000000000000000000000000000000000 --- a/kmqtt-client/src/linuxX64Main/kotlin/TLSClientEngine.kt +++ /dev/null @@ -1,183 +0,0 @@ -import kotlinx.cinterop.* -import openssl.* -import platform.posix.getenv -import platform.posix.strcpy -import platform.posix.strlen -import socket.IOException -import socket.tls.TLSClientSettings -import socket.tls.TLSEngine - -internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { - - private val context: CPointer<SSL> - private val readBio: CPointer<BIO> - private val writeBio: CPointer<BIO> - - fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, certBuffer) - - val inf = PEM_X509_INFO_read_bio(bio, null, null, null) - - if (inf == null) { - BIO_free(bio) - return false - } - - val ctx = SSL_CTX_get_cert_store(context); - - var loaded = 0 - for (i in 0..<sk_X509_INFO_num(inf)) { - val itmp = sk_X509_INFO_value(inf, i) - if (itmp != null && itmp.pointed.x509 != null) { - if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - return false - } - loaded++ - } - } - - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - - return loaded > 0 - } - - init { - val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") - - val writeBio = BIO_new(BIO_s_mem()) - if (writeBio == null) { - BIO_free(readBio) - throw IOException("Failed allocating read BIO") - } - - val method = TLS_client_method() - val sslContext = SSL_CTX_new(method)!! - - if (tlsSettings.serverCertificate != null) { - if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { - // Try file - if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { - throw Exception("Server certificate path not found") - } - } - } else { - if (!tlsSettings.checkServerCertificate) { - SSL_CTX_set_cert_verify_callback( - sslContext, - staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> - 1 - }, - null - ) - } else { - if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { - throw Exception("Server certificate path not found") - } - } - } - - if (tlsSettings.clientCertificate != null) { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, tlsSettings.clientCertificate) - val certificate = PEM_read_bio_X509(bio, null, null, null) - - if (certificate != null) { - if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { - throw Exception("Cannot load client's certificate") - } - } else { - // Load file - if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's certificate file") - } - } - - BIO_puts(bio, tlsSettings.clientCertificateKey) - val key = PEM_read_bio_PrivateKey(bio, null, null, null) - if (key != null) { - if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { - throw Exception("Cannot load client's key") - } - } else { - if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's key file") - } - } - if (SSL_CTX_check_private_key(sslContext) != 1) { - throw Exception("Client's certificate and key don't match") - } - - if (tlsSettings.clientCertificatePassword != null) { - SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) - SSL_CTX_set_default_passwd_cb( - sslContext, - staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> - if (password == null) { - 0 - } else { - val len = strlen(password.reinterpret<ByteVar>().toKString()) - if (size < len.toInt() + 1) { - 0 - } else { - strcpy(buf, password.reinterpret<ByteVar>().toKString()) - len.toInt() - } - } - }) - } - } - - val clientContext = SSL_new(sslContext) - if (clientContext == null) { - BIO_free(readBio) - BIO_free(writeBio) - throw IOException("Failed allocating read BIO") - } - - SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) - - SSL_set_connect_state(clientContext) - SSL_set_bio(clientContext, readBio, writeBio) - context = clientContext - this.readBio = readBio - this.writeBio = writeBio - } - - actual override val isInitFinished: Boolean - get() = SSL_is_init_finished(context) != 0 - - actual override val bioShouldRetry: Boolean - get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 - - actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_write(context, buffer, length) - } - - actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_read(context, buffer, length) - } - - actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_read(writeBio, buffer, length) - } - - actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_write(readBio, buffer, length) - } - - actual override fun getError(result: Int): Int { - return SSL_get_error(context, result) - } - - actual override fun close() { - SSL_free(context) - } -} diff --git a/kmqtt-client/src/iosSimulatorArm64Main/kotlin/TLSClientEngine.kt b/kmqtt-client/src/linuxX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt similarity index 97% rename from kmqtt-client/src/iosSimulatorArm64Main/kotlin/TLSClientEngine.kt rename to kmqtt-client/src/linuxX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt index b180dea3fb966b42a150ca3e66decb194b6cd0f3..35214674fc3ee31084da917a860a564c37d85155 100644 --- a/kmqtt-client/src/iosSimulatorArm64Main/kotlin/TLSClientEngine.kt +++ b/kmqtt-client/src/linuxX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt @@ -1,11 +1,13 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import openssl.* import platform.posix.getenv import platform.posix.strcpy import platform.posix.strlen -import socket.IOException -import socket.tls.TLSClientSettings -import socket.tls.TLSEngine +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSEngine internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { diff --git a/kmqtt-client/src/macosArm64Main/kotlin/TLSClientEngine.kt b/kmqtt-client/src/macosArm64Main/kotlin/TLSClientEngine.kt deleted file mode 100644 index b180dea3fb966b42a150ca3e66decb194b6cd0f3..0000000000000000000000000000000000000000 --- a/kmqtt-client/src/macosArm64Main/kotlin/TLSClientEngine.kt +++ /dev/null @@ -1,183 +0,0 @@ -import kotlinx.cinterop.* -import openssl.* -import platform.posix.getenv -import platform.posix.strcpy -import platform.posix.strlen -import socket.IOException -import socket.tls.TLSClientSettings -import socket.tls.TLSEngine - -internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { - - private val context: CPointer<SSL> - private val readBio: CPointer<BIO> - private val writeBio: CPointer<BIO> - - fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, certBuffer) - - val inf = PEM_X509_INFO_read_bio(bio, null, null, null) - - if (inf == null) { - BIO_free(bio) - return false - } - - val ctx = SSL_CTX_get_cert_store(context); - - var loaded = 0 - for (i in 0..<sk_X509_INFO_num(inf)) { - val itmp = sk_X509_INFO_value(inf, i) - if (itmp != null && itmp.pointed.x509 != null) { - if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - return false - } - loaded++ - } - } - - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - - return loaded > 0 - } - - init { - val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") - - val writeBio = BIO_new(BIO_s_mem()) - if (writeBio == null) { - BIO_free(readBio) - throw IOException("Failed allocating read BIO") - } - - val method = TLS_client_method() - val sslContext = SSL_CTX_new(method)!! - - if (tlsSettings.serverCertificate != null) { - if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { - // Try file - if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { - throw Exception("Server certificate path not found") - } - } - } else { - if (!tlsSettings.checkServerCertificate) { - SSL_CTX_set_cert_verify_callback( - sslContext, - staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> - 1 - }, - null - ) - } else { - if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { - throw Exception("Server certificate path not found") - } - } - } - - if (tlsSettings.clientCertificate != null) { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, tlsSettings.clientCertificate) - val certificate = PEM_read_bio_X509(bio, null, null, null) - - if (certificate != null) { - if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { - throw Exception("Cannot load client's certificate") - } - } else { - // Load file - if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's certificate file") - } - } - - BIO_puts(bio, tlsSettings.clientCertificateKey) - val key = PEM_read_bio_PrivateKey(bio, null, null, null) - if (key != null) { - if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { - throw Exception("Cannot load client's key") - } - } else { - if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's key file") - } - } - if (SSL_CTX_check_private_key(sslContext) != 1) { - throw Exception("Client's certificate and key don't match") - } - - if (tlsSettings.clientCertificatePassword != null) { - SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) - SSL_CTX_set_default_passwd_cb( - sslContext, - staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> - if (password == null) { - 0 - } else { - val len = strlen(password.reinterpret<ByteVar>().toKString()) - if (size < len.toInt() + 1) { - 0 - } else { - strcpy(buf, password.reinterpret<ByteVar>().toKString()) - len.toInt() - } - } - }) - } - } - - val clientContext = SSL_new(sslContext) - if (clientContext == null) { - BIO_free(readBio) - BIO_free(writeBio) - throw IOException("Failed allocating read BIO") - } - - SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) - - SSL_set_connect_state(clientContext) - SSL_set_bio(clientContext, readBio, writeBio) - context = clientContext - this.readBio = readBio - this.writeBio = writeBio - } - - actual override val isInitFinished: Boolean - get() = SSL_is_init_finished(context) != 0 - - actual override val bioShouldRetry: Boolean - get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 - - actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_write(context, buffer, length) - } - - actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_read(context, buffer, length) - } - - actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_read(writeBio, buffer, length) - } - - actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_write(readBio, buffer, length) - } - - actual override fun getError(result: Int): Int { - return SSL_get_error(context, result) - } - - actual override fun close() { - SSL_free(context) - } -} diff --git a/kmqtt-client/src/iosX64Main/kotlin/TLSClientEngine.kt b/kmqtt-client/src/macosArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt similarity index 97% rename from kmqtt-client/src/iosX64Main/kotlin/TLSClientEngine.kt rename to kmqtt-client/src/macosArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt index b180dea3fb966b42a150ca3e66decb194b6cd0f3..35214674fc3ee31084da917a860a564c37d85155 100644 --- a/kmqtt-client/src/iosX64Main/kotlin/TLSClientEngine.kt +++ b/kmqtt-client/src/macosArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt @@ -1,11 +1,13 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import openssl.* import platform.posix.getenv import platform.posix.strcpy import platform.posix.strlen -import socket.IOException -import socket.tls.TLSClientSettings -import socket.tls.TLSEngine +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSEngine internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { diff --git a/kmqtt-client/src/macosX64Main/kotlin/TLSClientEngine.kt b/kmqtt-client/src/macosX64Main/kotlin/TLSClientEngine.kt deleted file mode 100644 index b180dea3fb966b42a150ca3e66decb194b6cd0f3..0000000000000000000000000000000000000000 --- a/kmqtt-client/src/macosX64Main/kotlin/TLSClientEngine.kt +++ /dev/null @@ -1,183 +0,0 @@ -import kotlinx.cinterop.* -import openssl.* -import platform.posix.getenv -import platform.posix.strcpy -import platform.posix.strlen -import socket.IOException -import socket.tls.TLSClientSettings -import socket.tls.TLSEngine - -internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { - - private val context: CPointer<SSL> - private val readBio: CPointer<BIO> - private val writeBio: CPointer<BIO> - - fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, certBuffer) - - val inf = PEM_X509_INFO_read_bio(bio, null, null, null) - - if (inf == null) { - BIO_free(bio) - return false - } - - val ctx = SSL_CTX_get_cert_store(context); - - var loaded = 0 - for (i in 0..<sk_X509_INFO_num(inf)) { - val itmp = sk_X509_INFO_value(inf, i) - if (itmp != null && itmp.pointed.x509 != null) { - if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - return false - } - loaded++ - } - } - - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - - return loaded > 0 - } - - init { - val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") - - val writeBio = BIO_new(BIO_s_mem()) - if (writeBio == null) { - BIO_free(readBio) - throw IOException("Failed allocating read BIO") - } - - val method = TLS_client_method() - val sslContext = SSL_CTX_new(method)!! - - if (tlsSettings.serverCertificate != null) { - if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { - // Try file - if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { - throw Exception("Server certificate path not found") - } - } - } else { - if (!tlsSettings.checkServerCertificate) { - SSL_CTX_set_cert_verify_callback( - sslContext, - staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> - 1 - }, - null - ) - } else { - if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { - throw Exception("Server certificate path not found") - } - } - } - - if (tlsSettings.clientCertificate != null) { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, tlsSettings.clientCertificate) - val certificate = PEM_read_bio_X509(bio, null, null, null) - - if (certificate != null) { - if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { - throw Exception("Cannot load client's certificate") - } - } else { - // Load file - if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's certificate file") - } - } - - BIO_puts(bio, tlsSettings.clientCertificateKey) - val key = PEM_read_bio_PrivateKey(bio, null, null, null) - if (key != null) { - if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { - throw Exception("Cannot load client's key") - } - } else { - if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's key file") - } - } - if (SSL_CTX_check_private_key(sslContext) != 1) { - throw Exception("Client's certificate and key don't match") - } - - if (tlsSettings.clientCertificatePassword != null) { - SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) - SSL_CTX_set_default_passwd_cb( - sslContext, - staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> - if (password == null) { - 0 - } else { - val len = strlen(password.reinterpret<ByteVar>().toKString()) - if (size < len.toInt() + 1) { - 0 - } else { - strcpy(buf, password.reinterpret<ByteVar>().toKString()) - len.toInt() - } - } - }) - } - } - - val clientContext = SSL_new(sslContext) - if (clientContext == null) { - BIO_free(readBio) - BIO_free(writeBio) - throw IOException("Failed allocating read BIO") - } - - SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) - - SSL_set_connect_state(clientContext) - SSL_set_bio(clientContext, readBio, writeBio) - context = clientContext - this.readBio = readBio - this.writeBio = writeBio - } - - actual override val isInitFinished: Boolean - get() = SSL_is_init_finished(context) != 0 - - actual override val bioShouldRetry: Boolean - get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 - - actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_write(context, buffer, length) - } - - actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_read(context, buffer, length) - } - - actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_read(writeBio, buffer, length) - } - - actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_write(readBio, buffer, length) - } - - actual override fun getError(result: Int): Int { - return SSL_get_error(context, result) - } - - actual override fun close() { - SSL_free(context) - } -} diff --git a/kmqtt-client/src/macosX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt b/kmqtt-client/src/macosX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt new file mode 100644 index 0000000000000000000000000000000000000000..35214674fc3ee31084da917a860a564c37d85155 --- /dev/null +++ b/kmqtt-client/src/macosX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt @@ -0,0 +1,185 @@ +package io.github.davidepianca98 + +import kotlinx.cinterop.* +import openssl.* +import platform.posix.getenv +import platform.posix.strcpy +import platform.posix.strlen +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSEngine + +internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { + + private val context: CPointer<SSL> + private val readBio: CPointer<BIO> + private val writeBio: CPointer<BIO> + + fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, certBuffer) + + val inf = PEM_X509_INFO_read_bio(bio, null, null, null) + + if (inf == null) { + BIO_free(bio) + return false + } + + val ctx = SSL_CTX_get_cert_store(context); + + var loaded = 0 + for (i in 0..<sk_X509_INFO_num(inf)) { + val itmp = sk_X509_INFO_value(inf, i) + if (itmp != null && itmp.pointed.x509 != null) { + if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + return false + } + loaded++ + } + } + + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + + return loaded > 0 + } + + init { + val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") + + val writeBio = BIO_new(BIO_s_mem()) + if (writeBio == null) { + BIO_free(readBio) + throw IOException("Failed allocating read BIO") + } + + val method = TLS_client_method() + val sslContext = SSL_CTX_new(method)!! + + if (tlsSettings.serverCertificate != null) { + if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { + // Try file + if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { + throw Exception("Server certificate path not found") + } + } + } else { + if (!tlsSettings.checkServerCertificate) { + SSL_CTX_set_cert_verify_callback( + sslContext, + staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> + 1 + }, + null + ) + } else { + if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { + throw Exception("Server certificate path not found") + } + } + } + + if (tlsSettings.clientCertificate != null) { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, tlsSettings.clientCertificate) + val certificate = PEM_read_bio_X509(bio, null, null, null) + + if (certificate != null) { + if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { + throw Exception("Cannot load client's certificate") + } + } else { + // Load file + if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's certificate file") + } + } + + BIO_puts(bio, tlsSettings.clientCertificateKey) + val key = PEM_read_bio_PrivateKey(bio, null, null, null) + if (key != null) { + if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { + throw Exception("Cannot load client's key") + } + } else { + if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's key file") + } + } + if (SSL_CTX_check_private_key(sslContext) != 1) { + throw Exception("Client's certificate and key don't match") + } + + if (tlsSettings.clientCertificatePassword != null) { + SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) + SSL_CTX_set_default_passwd_cb( + sslContext, + staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> + if (password == null) { + 0 + } else { + val len = strlen(password.reinterpret<ByteVar>().toKString()) + if (size < len.toInt() + 1) { + 0 + } else { + strcpy(buf, password.reinterpret<ByteVar>().toKString()) + len.toInt() + } + } + }) + } + } + + val clientContext = SSL_new(sslContext) + if (clientContext == null) { + BIO_free(readBio) + BIO_free(writeBio) + throw IOException("Failed allocating read BIO") + } + + SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) + + SSL_set_connect_state(clientContext) + SSL_set_bio(clientContext, readBio, writeBio) + context = clientContext + this.readBio = readBio + this.writeBio = writeBio + } + + actual override val isInitFinished: Boolean + get() = SSL_is_init_finished(context) != 0 + + actual override val bioShouldRetry: Boolean + get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 + + actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_write(context, buffer, length) + } + + actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_read(context, buffer, length) + } + + actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_read(writeBio, buffer, length) + } + + actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_write(readBio, buffer, length) + } + + actual override fun getError(result: Int): Int { + return SSL_get_error(context, result) + } + + actual override fun close() { + SSL_free(context) + } +} diff --git a/kmqtt-client/src/mingwX64Main/kotlin/TLSClientEngine.kt b/kmqtt-client/src/mingwX64Main/kotlin/TLSClientEngine.kt deleted file mode 100644 index b180dea3fb966b42a150ca3e66decb194b6cd0f3..0000000000000000000000000000000000000000 --- a/kmqtt-client/src/mingwX64Main/kotlin/TLSClientEngine.kt +++ /dev/null @@ -1,183 +0,0 @@ -import kotlinx.cinterop.* -import openssl.* -import platform.posix.getenv -import platform.posix.strcpy -import platform.posix.strlen -import socket.IOException -import socket.tls.TLSClientSettings -import socket.tls.TLSEngine - -internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { - - private val context: CPointer<SSL> - private val readBio: CPointer<BIO> - private val writeBio: CPointer<BIO> - - fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, certBuffer) - - val inf = PEM_X509_INFO_read_bio(bio, null, null, null) - - if (inf == null) { - BIO_free(bio) - return false - } - - val ctx = SSL_CTX_get_cert_store(context); - - var loaded = 0 - for (i in 0..<sk_X509_INFO_num(inf)) { - val itmp = sk_X509_INFO_value(inf, i) - if (itmp != null && itmp.pointed.x509 != null) { - if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - return false - } - loaded++ - } - } - - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - - return loaded > 0 - } - - init { - val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") - - val writeBio = BIO_new(BIO_s_mem()) - if (writeBio == null) { - BIO_free(readBio) - throw IOException("Failed allocating read BIO") - } - - val method = TLS_client_method() - val sslContext = SSL_CTX_new(method)!! - - if (tlsSettings.serverCertificate != null) { - if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { - // Try file - if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { - throw Exception("Server certificate path not found") - } - } - } else { - if (!tlsSettings.checkServerCertificate) { - SSL_CTX_set_cert_verify_callback( - sslContext, - staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> - 1 - }, - null - ) - } else { - if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { - throw Exception("Server certificate path not found") - } - } - } - - if (tlsSettings.clientCertificate != null) { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, tlsSettings.clientCertificate) - val certificate = PEM_read_bio_X509(bio, null, null, null) - - if (certificate != null) { - if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { - throw Exception("Cannot load client's certificate") - } - } else { - // Load file - if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's certificate file") - } - } - - BIO_puts(bio, tlsSettings.clientCertificateKey) - val key = PEM_read_bio_PrivateKey(bio, null, null, null) - if (key != null) { - if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { - throw Exception("Cannot load client's key") - } - } else { - if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's key file") - } - } - if (SSL_CTX_check_private_key(sslContext) != 1) { - throw Exception("Client's certificate and key don't match") - } - - if (tlsSettings.clientCertificatePassword != null) { - SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) - SSL_CTX_set_default_passwd_cb( - sslContext, - staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> - if (password == null) { - 0 - } else { - val len = strlen(password.reinterpret<ByteVar>().toKString()) - if (size < len.toInt() + 1) { - 0 - } else { - strcpy(buf, password.reinterpret<ByteVar>().toKString()) - len.toInt() - } - } - }) - } - } - - val clientContext = SSL_new(sslContext) - if (clientContext == null) { - BIO_free(readBio) - BIO_free(writeBio) - throw IOException("Failed allocating read BIO") - } - - SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) - - SSL_set_connect_state(clientContext) - SSL_set_bio(clientContext, readBio, writeBio) - context = clientContext - this.readBio = readBio - this.writeBio = writeBio - } - - actual override val isInitFinished: Boolean - get() = SSL_is_init_finished(context) != 0 - - actual override val bioShouldRetry: Boolean - get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 - - actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_write(context, buffer, length) - } - - actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_read(context, buffer, length) - } - - actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_read(writeBio, buffer, length) - } - - actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_write(readBio, buffer, length) - } - - actual override fun getError(result: Int): Int { - return SSL_get_error(context, result) - } - - actual override fun close() { - SSL_free(context) - } -} diff --git a/kmqtt-client/src/mingwX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt b/kmqtt-client/src/mingwX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt new file mode 100644 index 0000000000000000000000000000000000000000..35214674fc3ee31084da917a860a564c37d85155 --- /dev/null +++ b/kmqtt-client/src/mingwX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt @@ -0,0 +1,185 @@ +package io.github.davidepianca98 + +import kotlinx.cinterop.* +import openssl.* +import platform.posix.getenv +import platform.posix.strcpy +import platform.posix.strlen +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSEngine + +internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { + + private val context: CPointer<SSL> + private val readBio: CPointer<BIO> + private val writeBio: CPointer<BIO> + + fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, certBuffer) + + val inf = PEM_X509_INFO_read_bio(bio, null, null, null) + + if (inf == null) { + BIO_free(bio) + return false + } + + val ctx = SSL_CTX_get_cert_store(context); + + var loaded = 0 + for (i in 0..<sk_X509_INFO_num(inf)) { + val itmp = sk_X509_INFO_value(inf, i) + if (itmp != null && itmp.pointed.x509 != null) { + if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + return false + } + loaded++ + } + } + + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + + return loaded > 0 + } + + init { + val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") + + val writeBio = BIO_new(BIO_s_mem()) + if (writeBio == null) { + BIO_free(readBio) + throw IOException("Failed allocating read BIO") + } + + val method = TLS_client_method() + val sslContext = SSL_CTX_new(method)!! + + if (tlsSettings.serverCertificate != null) { + if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { + // Try file + if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { + throw Exception("Server certificate path not found") + } + } + } else { + if (!tlsSettings.checkServerCertificate) { + SSL_CTX_set_cert_verify_callback( + sslContext, + staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> + 1 + }, + null + ) + } else { + if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { + throw Exception("Server certificate path not found") + } + } + } + + if (tlsSettings.clientCertificate != null) { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, tlsSettings.clientCertificate) + val certificate = PEM_read_bio_X509(bio, null, null, null) + + if (certificate != null) { + if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { + throw Exception("Cannot load client's certificate") + } + } else { + // Load file + if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's certificate file") + } + } + + BIO_puts(bio, tlsSettings.clientCertificateKey) + val key = PEM_read_bio_PrivateKey(bio, null, null, null) + if (key != null) { + if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { + throw Exception("Cannot load client's key") + } + } else { + if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's key file") + } + } + if (SSL_CTX_check_private_key(sslContext) != 1) { + throw Exception("Client's certificate and key don't match") + } + + if (tlsSettings.clientCertificatePassword != null) { + SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) + SSL_CTX_set_default_passwd_cb( + sslContext, + staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> + if (password == null) { + 0 + } else { + val len = strlen(password.reinterpret<ByteVar>().toKString()) + if (size < len.toInt() + 1) { + 0 + } else { + strcpy(buf, password.reinterpret<ByteVar>().toKString()) + len.toInt() + } + } + }) + } + } + + val clientContext = SSL_new(sslContext) + if (clientContext == null) { + BIO_free(readBio) + BIO_free(writeBio) + throw IOException("Failed allocating read BIO") + } + + SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) + + SSL_set_connect_state(clientContext) + SSL_set_bio(clientContext, readBio, writeBio) + context = clientContext + this.readBio = readBio + this.writeBio = writeBio + } + + actual override val isInitFinished: Boolean + get() = SSL_is_init_finished(context) != 0 + + actual override val bioShouldRetry: Boolean + get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 + + actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_write(context, buffer, length) + } + + actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_read(context, buffer, length) + } + + actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_read(writeBio, buffer, length) + } + + actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_write(readBio, buffer, length) + } + + actual override fun getError(result: Int): Int { + return SSL_get_error(context, result) + } + + actual override fun close() { + SSL_free(context) + } +} diff --git a/kmqtt-client/src/posixMain/kotlin/ClientSocket.kt b/kmqtt-client/src/posixMain/kotlin/io/github/davidepianca98/ClientSocket.kt similarity index 92% rename from kmqtt-client/src/posixMain/kotlin/ClientSocket.kt rename to kmqtt-client/src/posixMain/kotlin/io/github/davidepianca98/ClientSocket.kt index 6fcf934b3409db3adfb5521017b7894c1ab8d036..ea1f39372ceabb0fe9c2b24f516ae6c7547da004 100644 --- a/kmqtt-client/src/posixMain/kotlin/ClientSocket.kt +++ b/kmqtt-client/src/posixMain/kotlin/io/github/davidepianca98/ClientSocket.kt @@ -1,7 +1,9 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import platform.posix.* -import socket.IOException -import socket.tcp.Socket +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tcp.Socket public actual class ClientSocket actual constructor( address: String, diff --git a/kmqtt-client/src/posixMain/kotlin/TLSClientEngine.kt b/kmqtt-client/src/posixMain/kotlin/io/github/davidepianca98/TLSClientEngine.kt similarity index 79% rename from kmqtt-client/src/posixMain/kotlin/TLSClientEngine.kt rename to kmqtt-client/src/posixMain/kotlin/io/github/davidepianca98/TLSClientEngine.kt index f6fa7a9e2b37a4d252b43f2c838e1b69e79513de..d16c003e9217d1c45ca246bdce14a7d972cf717e 100644 --- a/kmqtt-client/src/posixMain/kotlin/TLSClientEngine.kt +++ b/kmqtt-client/src/posixMain/kotlin/io/github/davidepianca98/TLSClientEngine.kt @@ -1,7 +1,9 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.ByteVar import kotlinx.cinterop.CPointer -import socket.tls.TLSClientSettings -import socket.tls.TLSEngine +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSEngine internal expect class TLSClientEngine(tlsSettings: TLSClientSettings) : TLSEngine { diff --git a/kmqtt-client/src/posixMain/kotlin/TLSClientSocket.kt b/kmqtt-client/src/posixMain/kotlin/io/github/davidepianca98/TLSClientSocket.kt similarity index 90% rename from kmqtt-client/src/posixMain/kotlin/TLSClientSocket.kt rename to kmqtt-client/src/posixMain/kotlin/io/github/davidepianca98/TLSClientSocket.kt index bb1629b0a77abcfbdbccc5f3c9e5e464f83b34d3..ce4fca96f4cb78961766218449355b8c316a4cb3 100644 --- a/kmqtt-client/src/posixMain/kotlin/TLSClientSocket.kt +++ b/kmqtt-client/src/posixMain/kotlin/io/github/davidepianca98/TLSClientSocket.kt @@ -1,8 +1,10 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import platform.posix.* -import socket.IOException -import socket.tls.TLSClientSettings -import socket.tls.TLSSocket +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSSocket public actual class TLSClientSocket actual constructor( address: String, diff --git a/kmqtt-client/src/tvosArm64Main/kotlin/TLSClientEngine.kt b/kmqtt-client/src/tvosArm64Main/kotlin/TLSClientEngine.kt deleted file mode 100644 index b180dea3fb966b42a150ca3e66decb194b6cd0f3..0000000000000000000000000000000000000000 --- a/kmqtt-client/src/tvosArm64Main/kotlin/TLSClientEngine.kt +++ /dev/null @@ -1,183 +0,0 @@ -import kotlinx.cinterop.* -import openssl.* -import platform.posix.getenv -import platform.posix.strcpy -import platform.posix.strlen -import socket.IOException -import socket.tls.TLSClientSettings -import socket.tls.TLSEngine - -internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { - - private val context: CPointer<SSL> - private val readBio: CPointer<BIO> - private val writeBio: CPointer<BIO> - - fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, certBuffer) - - val inf = PEM_X509_INFO_read_bio(bio, null, null, null) - - if (inf == null) { - BIO_free(bio) - return false - } - - val ctx = SSL_CTX_get_cert_store(context); - - var loaded = 0 - for (i in 0..<sk_X509_INFO_num(inf)) { - val itmp = sk_X509_INFO_value(inf, i) - if (itmp != null && itmp.pointed.x509 != null) { - if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - return false - } - loaded++ - } - } - - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - - return loaded > 0 - } - - init { - val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") - - val writeBio = BIO_new(BIO_s_mem()) - if (writeBio == null) { - BIO_free(readBio) - throw IOException("Failed allocating read BIO") - } - - val method = TLS_client_method() - val sslContext = SSL_CTX_new(method)!! - - if (tlsSettings.serverCertificate != null) { - if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { - // Try file - if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { - throw Exception("Server certificate path not found") - } - } - } else { - if (!tlsSettings.checkServerCertificate) { - SSL_CTX_set_cert_verify_callback( - sslContext, - staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> - 1 - }, - null - ) - } else { - if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { - throw Exception("Server certificate path not found") - } - } - } - - if (tlsSettings.clientCertificate != null) { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, tlsSettings.clientCertificate) - val certificate = PEM_read_bio_X509(bio, null, null, null) - - if (certificate != null) { - if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { - throw Exception("Cannot load client's certificate") - } - } else { - // Load file - if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's certificate file") - } - } - - BIO_puts(bio, tlsSettings.clientCertificateKey) - val key = PEM_read_bio_PrivateKey(bio, null, null, null) - if (key != null) { - if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { - throw Exception("Cannot load client's key") - } - } else { - if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's key file") - } - } - if (SSL_CTX_check_private_key(sslContext) != 1) { - throw Exception("Client's certificate and key don't match") - } - - if (tlsSettings.clientCertificatePassword != null) { - SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) - SSL_CTX_set_default_passwd_cb( - sslContext, - staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> - if (password == null) { - 0 - } else { - val len = strlen(password.reinterpret<ByteVar>().toKString()) - if (size < len.toInt() + 1) { - 0 - } else { - strcpy(buf, password.reinterpret<ByteVar>().toKString()) - len.toInt() - } - } - }) - } - } - - val clientContext = SSL_new(sslContext) - if (clientContext == null) { - BIO_free(readBio) - BIO_free(writeBio) - throw IOException("Failed allocating read BIO") - } - - SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) - - SSL_set_connect_state(clientContext) - SSL_set_bio(clientContext, readBio, writeBio) - context = clientContext - this.readBio = readBio - this.writeBio = writeBio - } - - actual override val isInitFinished: Boolean - get() = SSL_is_init_finished(context) != 0 - - actual override val bioShouldRetry: Boolean - get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 - - actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_write(context, buffer, length) - } - - actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_read(context, buffer, length) - } - - actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_read(writeBio, buffer, length) - } - - actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_write(readBio, buffer, length) - } - - actual override fun getError(result: Int): Int { - return SSL_get_error(context, result) - } - - actual override fun close() { - SSL_free(context) - } -} diff --git a/kmqtt-client/src/tvosArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt b/kmqtt-client/src/tvosArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt new file mode 100644 index 0000000000000000000000000000000000000000..35214674fc3ee31084da917a860a564c37d85155 --- /dev/null +++ b/kmqtt-client/src/tvosArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt @@ -0,0 +1,185 @@ +package io.github.davidepianca98 + +import kotlinx.cinterop.* +import openssl.* +import platform.posix.getenv +import platform.posix.strcpy +import platform.posix.strlen +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSEngine + +internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { + + private val context: CPointer<SSL> + private val readBio: CPointer<BIO> + private val writeBio: CPointer<BIO> + + fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, certBuffer) + + val inf = PEM_X509_INFO_read_bio(bio, null, null, null) + + if (inf == null) { + BIO_free(bio) + return false + } + + val ctx = SSL_CTX_get_cert_store(context); + + var loaded = 0 + for (i in 0..<sk_X509_INFO_num(inf)) { + val itmp = sk_X509_INFO_value(inf, i) + if (itmp != null && itmp.pointed.x509 != null) { + if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + return false + } + loaded++ + } + } + + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + + return loaded > 0 + } + + init { + val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") + + val writeBio = BIO_new(BIO_s_mem()) + if (writeBio == null) { + BIO_free(readBio) + throw IOException("Failed allocating read BIO") + } + + val method = TLS_client_method() + val sslContext = SSL_CTX_new(method)!! + + if (tlsSettings.serverCertificate != null) { + if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { + // Try file + if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { + throw Exception("Server certificate path not found") + } + } + } else { + if (!tlsSettings.checkServerCertificate) { + SSL_CTX_set_cert_verify_callback( + sslContext, + staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> + 1 + }, + null + ) + } else { + if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { + throw Exception("Server certificate path not found") + } + } + } + + if (tlsSettings.clientCertificate != null) { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, tlsSettings.clientCertificate) + val certificate = PEM_read_bio_X509(bio, null, null, null) + + if (certificate != null) { + if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { + throw Exception("Cannot load client's certificate") + } + } else { + // Load file + if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's certificate file") + } + } + + BIO_puts(bio, tlsSettings.clientCertificateKey) + val key = PEM_read_bio_PrivateKey(bio, null, null, null) + if (key != null) { + if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { + throw Exception("Cannot load client's key") + } + } else { + if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's key file") + } + } + if (SSL_CTX_check_private_key(sslContext) != 1) { + throw Exception("Client's certificate and key don't match") + } + + if (tlsSettings.clientCertificatePassword != null) { + SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) + SSL_CTX_set_default_passwd_cb( + sslContext, + staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> + if (password == null) { + 0 + } else { + val len = strlen(password.reinterpret<ByteVar>().toKString()) + if (size < len.toInt() + 1) { + 0 + } else { + strcpy(buf, password.reinterpret<ByteVar>().toKString()) + len.toInt() + } + } + }) + } + } + + val clientContext = SSL_new(sslContext) + if (clientContext == null) { + BIO_free(readBio) + BIO_free(writeBio) + throw IOException("Failed allocating read BIO") + } + + SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) + + SSL_set_connect_state(clientContext) + SSL_set_bio(clientContext, readBio, writeBio) + context = clientContext + this.readBio = readBio + this.writeBio = writeBio + } + + actual override val isInitFinished: Boolean + get() = SSL_is_init_finished(context) != 0 + + actual override val bioShouldRetry: Boolean + get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 + + actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_write(context, buffer, length) + } + + actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_read(context, buffer, length) + } + + actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_read(writeBio, buffer, length) + } + + actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_write(readBio, buffer, length) + } + + actual override fun getError(result: Int): Int { + return SSL_get_error(context, result) + } + + actual override fun close() { + SSL_free(context) + } +} diff --git a/kmqtt-client/src/tvosSimulatorArm64Main/kotlin/TLSClientEngine.kt b/kmqtt-client/src/tvosSimulatorArm64Main/kotlin/TLSClientEngine.kt deleted file mode 100644 index b180dea3fb966b42a150ca3e66decb194b6cd0f3..0000000000000000000000000000000000000000 --- a/kmqtt-client/src/tvosSimulatorArm64Main/kotlin/TLSClientEngine.kt +++ /dev/null @@ -1,183 +0,0 @@ -import kotlinx.cinterop.* -import openssl.* -import platform.posix.getenv -import platform.posix.strcpy -import platform.posix.strlen -import socket.IOException -import socket.tls.TLSClientSettings -import socket.tls.TLSEngine - -internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { - - private val context: CPointer<SSL> - private val readBio: CPointer<BIO> - private val writeBio: CPointer<BIO> - - fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, certBuffer) - - val inf = PEM_X509_INFO_read_bio(bio, null, null, null) - - if (inf == null) { - BIO_free(bio) - return false - } - - val ctx = SSL_CTX_get_cert_store(context); - - var loaded = 0 - for (i in 0..<sk_X509_INFO_num(inf)) { - val itmp = sk_X509_INFO_value(inf, i) - if (itmp != null && itmp.pointed.x509 != null) { - if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - return false - } - loaded++ - } - } - - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - - return loaded > 0 - } - - init { - val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") - - val writeBio = BIO_new(BIO_s_mem()) - if (writeBio == null) { - BIO_free(readBio) - throw IOException("Failed allocating read BIO") - } - - val method = TLS_client_method() - val sslContext = SSL_CTX_new(method)!! - - if (tlsSettings.serverCertificate != null) { - if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { - // Try file - if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { - throw Exception("Server certificate path not found") - } - } - } else { - if (!tlsSettings.checkServerCertificate) { - SSL_CTX_set_cert_verify_callback( - sslContext, - staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> - 1 - }, - null - ) - } else { - if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { - throw Exception("Server certificate path not found") - } - } - } - - if (tlsSettings.clientCertificate != null) { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, tlsSettings.clientCertificate) - val certificate = PEM_read_bio_X509(bio, null, null, null) - - if (certificate != null) { - if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { - throw Exception("Cannot load client's certificate") - } - } else { - // Load file - if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's certificate file") - } - } - - BIO_puts(bio, tlsSettings.clientCertificateKey) - val key = PEM_read_bio_PrivateKey(bio, null, null, null) - if (key != null) { - if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { - throw Exception("Cannot load client's key") - } - } else { - if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's key file") - } - } - if (SSL_CTX_check_private_key(sslContext) != 1) { - throw Exception("Client's certificate and key don't match") - } - - if (tlsSettings.clientCertificatePassword != null) { - SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) - SSL_CTX_set_default_passwd_cb( - sslContext, - staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> - if (password == null) { - 0 - } else { - val len = strlen(password.reinterpret<ByteVar>().toKString()) - if (size < len.toInt() + 1) { - 0 - } else { - strcpy(buf, password.reinterpret<ByteVar>().toKString()) - len.toInt() - } - } - }) - } - } - - val clientContext = SSL_new(sslContext) - if (clientContext == null) { - BIO_free(readBio) - BIO_free(writeBio) - throw IOException("Failed allocating read BIO") - } - - SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) - - SSL_set_connect_state(clientContext) - SSL_set_bio(clientContext, readBio, writeBio) - context = clientContext - this.readBio = readBio - this.writeBio = writeBio - } - - actual override val isInitFinished: Boolean - get() = SSL_is_init_finished(context) != 0 - - actual override val bioShouldRetry: Boolean - get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 - - actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_write(context, buffer, length) - } - - actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_read(context, buffer, length) - } - - actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_read(writeBio, buffer, length) - } - - actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_write(readBio, buffer, length) - } - - actual override fun getError(result: Int): Int { - return SSL_get_error(context, result) - } - - actual override fun close() { - SSL_free(context) - } -} diff --git a/kmqtt-client/src/tvosSimulatorArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt b/kmqtt-client/src/tvosSimulatorArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt new file mode 100644 index 0000000000000000000000000000000000000000..35214674fc3ee31084da917a860a564c37d85155 --- /dev/null +++ b/kmqtt-client/src/tvosSimulatorArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt @@ -0,0 +1,185 @@ +package io.github.davidepianca98 + +import kotlinx.cinterop.* +import openssl.* +import platform.posix.getenv +import platform.posix.strcpy +import platform.posix.strlen +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSEngine + +internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { + + private val context: CPointer<SSL> + private val readBio: CPointer<BIO> + private val writeBio: CPointer<BIO> + + fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, certBuffer) + + val inf = PEM_X509_INFO_read_bio(bio, null, null, null) + + if (inf == null) { + BIO_free(bio) + return false + } + + val ctx = SSL_CTX_get_cert_store(context); + + var loaded = 0 + for (i in 0..<sk_X509_INFO_num(inf)) { + val itmp = sk_X509_INFO_value(inf, i) + if (itmp != null && itmp.pointed.x509 != null) { + if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + return false + } + loaded++ + } + } + + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + + return loaded > 0 + } + + init { + val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") + + val writeBio = BIO_new(BIO_s_mem()) + if (writeBio == null) { + BIO_free(readBio) + throw IOException("Failed allocating read BIO") + } + + val method = TLS_client_method() + val sslContext = SSL_CTX_new(method)!! + + if (tlsSettings.serverCertificate != null) { + if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { + // Try file + if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { + throw Exception("Server certificate path not found") + } + } + } else { + if (!tlsSettings.checkServerCertificate) { + SSL_CTX_set_cert_verify_callback( + sslContext, + staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> + 1 + }, + null + ) + } else { + if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { + throw Exception("Server certificate path not found") + } + } + } + + if (tlsSettings.clientCertificate != null) { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, tlsSettings.clientCertificate) + val certificate = PEM_read_bio_X509(bio, null, null, null) + + if (certificate != null) { + if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { + throw Exception("Cannot load client's certificate") + } + } else { + // Load file + if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's certificate file") + } + } + + BIO_puts(bio, tlsSettings.clientCertificateKey) + val key = PEM_read_bio_PrivateKey(bio, null, null, null) + if (key != null) { + if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { + throw Exception("Cannot load client's key") + } + } else { + if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's key file") + } + } + if (SSL_CTX_check_private_key(sslContext) != 1) { + throw Exception("Client's certificate and key don't match") + } + + if (tlsSettings.clientCertificatePassword != null) { + SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) + SSL_CTX_set_default_passwd_cb( + sslContext, + staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> + if (password == null) { + 0 + } else { + val len = strlen(password.reinterpret<ByteVar>().toKString()) + if (size < len.toInt() + 1) { + 0 + } else { + strcpy(buf, password.reinterpret<ByteVar>().toKString()) + len.toInt() + } + } + }) + } + } + + val clientContext = SSL_new(sslContext) + if (clientContext == null) { + BIO_free(readBio) + BIO_free(writeBio) + throw IOException("Failed allocating read BIO") + } + + SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) + + SSL_set_connect_state(clientContext) + SSL_set_bio(clientContext, readBio, writeBio) + context = clientContext + this.readBio = readBio + this.writeBio = writeBio + } + + actual override val isInitFinished: Boolean + get() = SSL_is_init_finished(context) != 0 + + actual override val bioShouldRetry: Boolean + get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 + + actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_write(context, buffer, length) + } + + actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_read(context, buffer, length) + } + + actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_read(writeBio, buffer, length) + } + + actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_write(readBio, buffer, length) + } + + actual override fun getError(result: Int): Int { + return SSL_get_error(context, result) + } + + actual override fun close() { + SSL_free(context) + } +} diff --git a/kmqtt-client/src/tvosX64Main/kotlin/TLSClientEngine.kt b/kmqtt-client/src/tvosX64Main/kotlin/TLSClientEngine.kt deleted file mode 100644 index b180dea3fb966b42a150ca3e66decb194b6cd0f3..0000000000000000000000000000000000000000 --- a/kmqtt-client/src/tvosX64Main/kotlin/TLSClientEngine.kt +++ /dev/null @@ -1,183 +0,0 @@ -import kotlinx.cinterop.* -import openssl.* -import platform.posix.getenv -import platform.posix.strcpy -import platform.posix.strlen -import socket.IOException -import socket.tls.TLSClientSettings -import socket.tls.TLSEngine - -internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { - - private val context: CPointer<SSL> - private val readBio: CPointer<BIO> - private val writeBio: CPointer<BIO> - - fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, certBuffer) - - val inf = PEM_X509_INFO_read_bio(bio, null, null, null) - - if (inf == null) { - BIO_free(bio) - return false - } - - val ctx = SSL_CTX_get_cert_store(context); - - var loaded = 0 - for (i in 0..<sk_X509_INFO_num(inf)) { - val itmp = sk_X509_INFO_value(inf, i) - if (itmp != null && itmp.pointed.x509 != null) { - if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - return false - } - loaded++ - } - } - - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - - return loaded > 0 - } - - init { - val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") - - val writeBio = BIO_new(BIO_s_mem()) - if (writeBio == null) { - BIO_free(readBio) - throw IOException("Failed allocating read BIO") - } - - val method = TLS_client_method() - val sslContext = SSL_CTX_new(method)!! - - if (tlsSettings.serverCertificate != null) { - if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { - // Try file - if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { - throw Exception("Server certificate path not found") - } - } - } else { - if (!tlsSettings.checkServerCertificate) { - SSL_CTX_set_cert_verify_callback( - sslContext, - staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> - 1 - }, - null - ) - } else { - if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { - throw Exception("Server certificate path not found") - } - } - } - - if (tlsSettings.clientCertificate != null) { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, tlsSettings.clientCertificate) - val certificate = PEM_read_bio_X509(bio, null, null, null) - - if (certificate != null) { - if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { - throw Exception("Cannot load client's certificate") - } - } else { - // Load file - if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's certificate file") - } - } - - BIO_puts(bio, tlsSettings.clientCertificateKey) - val key = PEM_read_bio_PrivateKey(bio, null, null, null) - if (key != null) { - if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { - throw Exception("Cannot load client's key") - } - } else { - if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's key file") - } - } - if (SSL_CTX_check_private_key(sslContext) != 1) { - throw Exception("Client's certificate and key don't match") - } - - if (tlsSettings.clientCertificatePassword != null) { - SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) - SSL_CTX_set_default_passwd_cb( - sslContext, - staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> - if (password == null) { - 0 - } else { - val len = strlen(password.reinterpret<ByteVar>().toKString()) - if (size < len.toInt() + 1) { - 0 - } else { - strcpy(buf, password.reinterpret<ByteVar>().toKString()) - len.toInt() - } - } - }) - } - } - - val clientContext = SSL_new(sslContext) - if (clientContext == null) { - BIO_free(readBio) - BIO_free(writeBio) - throw IOException("Failed allocating read BIO") - } - - SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) - - SSL_set_connect_state(clientContext) - SSL_set_bio(clientContext, readBio, writeBio) - context = clientContext - this.readBio = readBio - this.writeBio = writeBio - } - - actual override val isInitFinished: Boolean - get() = SSL_is_init_finished(context) != 0 - - actual override val bioShouldRetry: Boolean - get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 - - actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_write(context, buffer, length) - } - - actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_read(context, buffer, length) - } - - actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_read(writeBio, buffer, length) - } - - actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_write(readBio, buffer, length) - } - - actual override fun getError(result: Int): Int { - return SSL_get_error(context, result) - } - - actual override fun close() { - SSL_free(context) - } -} diff --git a/kmqtt-client/src/tvosX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt b/kmqtt-client/src/tvosX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt new file mode 100644 index 0000000000000000000000000000000000000000..35214674fc3ee31084da917a860a564c37d85155 --- /dev/null +++ b/kmqtt-client/src/tvosX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt @@ -0,0 +1,185 @@ +package io.github.davidepianca98 + +import kotlinx.cinterop.* +import openssl.* +import platform.posix.getenv +import platform.posix.strcpy +import platform.posix.strlen +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSEngine + +internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { + + private val context: CPointer<SSL> + private val readBio: CPointer<BIO> + private val writeBio: CPointer<BIO> + + fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, certBuffer) + + val inf = PEM_X509_INFO_read_bio(bio, null, null, null) + + if (inf == null) { + BIO_free(bio) + return false + } + + val ctx = SSL_CTX_get_cert_store(context); + + var loaded = 0 + for (i in 0..<sk_X509_INFO_num(inf)) { + val itmp = sk_X509_INFO_value(inf, i) + if (itmp != null && itmp.pointed.x509 != null) { + if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + return false + } + loaded++ + } + } + + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + + return loaded > 0 + } + + init { + val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") + + val writeBio = BIO_new(BIO_s_mem()) + if (writeBio == null) { + BIO_free(readBio) + throw IOException("Failed allocating read BIO") + } + + val method = TLS_client_method() + val sslContext = SSL_CTX_new(method)!! + + if (tlsSettings.serverCertificate != null) { + if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { + // Try file + if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { + throw Exception("Server certificate path not found") + } + } + } else { + if (!tlsSettings.checkServerCertificate) { + SSL_CTX_set_cert_verify_callback( + sslContext, + staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> + 1 + }, + null + ) + } else { + if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { + throw Exception("Server certificate path not found") + } + } + } + + if (tlsSettings.clientCertificate != null) { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, tlsSettings.clientCertificate) + val certificate = PEM_read_bio_X509(bio, null, null, null) + + if (certificate != null) { + if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { + throw Exception("Cannot load client's certificate") + } + } else { + // Load file + if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's certificate file") + } + } + + BIO_puts(bio, tlsSettings.clientCertificateKey) + val key = PEM_read_bio_PrivateKey(bio, null, null, null) + if (key != null) { + if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { + throw Exception("Cannot load client's key") + } + } else { + if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's key file") + } + } + if (SSL_CTX_check_private_key(sslContext) != 1) { + throw Exception("Client's certificate and key don't match") + } + + if (tlsSettings.clientCertificatePassword != null) { + SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) + SSL_CTX_set_default_passwd_cb( + sslContext, + staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> + if (password == null) { + 0 + } else { + val len = strlen(password.reinterpret<ByteVar>().toKString()) + if (size < len.toInt() + 1) { + 0 + } else { + strcpy(buf, password.reinterpret<ByteVar>().toKString()) + len.toInt() + } + } + }) + } + } + + val clientContext = SSL_new(sslContext) + if (clientContext == null) { + BIO_free(readBio) + BIO_free(writeBio) + throw IOException("Failed allocating read BIO") + } + + SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) + + SSL_set_connect_state(clientContext) + SSL_set_bio(clientContext, readBio, writeBio) + context = clientContext + this.readBio = readBio + this.writeBio = writeBio + } + + actual override val isInitFinished: Boolean + get() = SSL_is_init_finished(context) != 0 + + actual override val bioShouldRetry: Boolean + get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 + + actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_write(context, buffer, length) + } + + actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_read(context, buffer, length) + } + + actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_read(writeBio, buffer, length) + } + + actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_write(readBio, buffer, length) + } + + actual override fun getError(result: Int): Int { + return SSL_get_error(context, result) + } + + actual override fun close() { + SSL_free(context) + } +} diff --git a/kmqtt-client/src/watchosArm32Main/kotlin/TLSClientEngine.kt b/kmqtt-client/src/watchosArm32Main/kotlin/TLSClientEngine.kt deleted file mode 100644 index b180dea3fb966b42a150ca3e66decb194b6cd0f3..0000000000000000000000000000000000000000 --- a/kmqtt-client/src/watchosArm32Main/kotlin/TLSClientEngine.kt +++ /dev/null @@ -1,183 +0,0 @@ -import kotlinx.cinterop.* -import openssl.* -import platform.posix.getenv -import platform.posix.strcpy -import platform.posix.strlen -import socket.IOException -import socket.tls.TLSClientSettings -import socket.tls.TLSEngine - -internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { - - private val context: CPointer<SSL> - private val readBio: CPointer<BIO> - private val writeBio: CPointer<BIO> - - fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, certBuffer) - - val inf = PEM_X509_INFO_read_bio(bio, null, null, null) - - if (inf == null) { - BIO_free(bio) - return false - } - - val ctx = SSL_CTX_get_cert_store(context); - - var loaded = 0 - for (i in 0..<sk_X509_INFO_num(inf)) { - val itmp = sk_X509_INFO_value(inf, i) - if (itmp != null && itmp.pointed.x509 != null) { - if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - return false - } - loaded++ - } - } - - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - - return loaded > 0 - } - - init { - val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") - - val writeBio = BIO_new(BIO_s_mem()) - if (writeBio == null) { - BIO_free(readBio) - throw IOException("Failed allocating read BIO") - } - - val method = TLS_client_method() - val sslContext = SSL_CTX_new(method)!! - - if (tlsSettings.serverCertificate != null) { - if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { - // Try file - if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { - throw Exception("Server certificate path not found") - } - } - } else { - if (!tlsSettings.checkServerCertificate) { - SSL_CTX_set_cert_verify_callback( - sslContext, - staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> - 1 - }, - null - ) - } else { - if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { - throw Exception("Server certificate path not found") - } - } - } - - if (tlsSettings.clientCertificate != null) { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, tlsSettings.clientCertificate) - val certificate = PEM_read_bio_X509(bio, null, null, null) - - if (certificate != null) { - if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { - throw Exception("Cannot load client's certificate") - } - } else { - // Load file - if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's certificate file") - } - } - - BIO_puts(bio, tlsSettings.clientCertificateKey) - val key = PEM_read_bio_PrivateKey(bio, null, null, null) - if (key != null) { - if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { - throw Exception("Cannot load client's key") - } - } else { - if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's key file") - } - } - if (SSL_CTX_check_private_key(sslContext) != 1) { - throw Exception("Client's certificate and key don't match") - } - - if (tlsSettings.clientCertificatePassword != null) { - SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) - SSL_CTX_set_default_passwd_cb( - sslContext, - staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> - if (password == null) { - 0 - } else { - val len = strlen(password.reinterpret<ByteVar>().toKString()) - if (size < len.toInt() + 1) { - 0 - } else { - strcpy(buf, password.reinterpret<ByteVar>().toKString()) - len.toInt() - } - } - }) - } - } - - val clientContext = SSL_new(sslContext) - if (clientContext == null) { - BIO_free(readBio) - BIO_free(writeBio) - throw IOException("Failed allocating read BIO") - } - - SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) - - SSL_set_connect_state(clientContext) - SSL_set_bio(clientContext, readBio, writeBio) - context = clientContext - this.readBio = readBio - this.writeBio = writeBio - } - - actual override val isInitFinished: Boolean - get() = SSL_is_init_finished(context) != 0 - - actual override val bioShouldRetry: Boolean - get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 - - actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_write(context, buffer, length) - } - - actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_read(context, buffer, length) - } - - actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_read(writeBio, buffer, length) - } - - actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_write(readBio, buffer, length) - } - - actual override fun getError(result: Int): Int { - return SSL_get_error(context, result) - } - - actual override fun close() { - SSL_free(context) - } -} diff --git a/kmqtt-client/src/watchosArm32Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt b/kmqtt-client/src/watchosArm32Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt new file mode 100644 index 0000000000000000000000000000000000000000..35214674fc3ee31084da917a860a564c37d85155 --- /dev/null +++ b/kmqtt-client/src/watchosArm32Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt @@ -0,0 +1,185 @@ +package io.github.davidepianca98 + +import kotlinx.cinterop.* +import openssl.* +import platform.posix.getenv +import platform.posix.strcpy +import platform.posix.strlen +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSEngine + +internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { + + private val context: CPointer<SSL> + private val readBio: CPointer<BIO> + private val writeBio: CPointer<BIO> + + fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, certBuffer) + + val inf = PEM_X509_INFO_read_bio(bio, null, null, null) + + if (inf == null) { + BIO_free(bio) + return false + } + + val ctx = SSL_CTX_get_cert_store(context); + + var loaded = 0 + for (i in 0..<sk_X509_INFO_num(inf)) { + val itmp = sk_X509_INFO_value(inf, i) + if (itmp != null && itmp.pointed.x509 != null) { + if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + return false + } + loaded++ + } + } + + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + + return loaded > 0 + } + + init { + val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") + + val writeBio = BIO_new(BIO_s_mem()) + if (writeBio == null) { + BIO_free(readBio) + throw IOException("Failed allocating read BIO") + } + + val method = TLS_client_method() + val sslContext = SSL_CTX_new(method)!! + + if (tlsSettings.serverCertificate != null) { + if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { + // Try file + if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { + throw Exception("Server certificate path not found") + } + } + } else { + if (!tlsSettings.checkServerCertificate) { + SSL_CTX_set_cert_verify_callback( + sslContext, + staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> + 1 + }, + null + ) + } else { + if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { + throw Exception("Server certificate path not found") + } + } + } + + if (tlsSettings.clientCertificate != null) { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, tlsSettings.clientCertificate) + val certificate = PEM_read_bio_X509(bio, null, null, null) + + if (certificate != null) { + if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { + throw Exception("Cannot load client's certificate") + } + } else { + // Load file + if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's certificate file") + } + } + + BIO_puts(bio, tlsSettings.clientCertificateKey) + val key = PEM_read_bio_PrivateKey(bio, null, null, null) + if (key != null) { + if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { + throw Exception("Cannot load client's key") + } + } else { + if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's key file") + } + } + if (SSL_CTX_check_private_key(sslContext) != 1) { + throw Exception("Client's certificate and key don't match") + } + + if (tlsSettings.clientCertificatePassword != null) { + SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) + SSL_CTX_set_default_passwd_cb( + sslContext, + staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> + if (password == null) { + 0 + } else { + val len = strlen(password.reinterpret<ByteVar>().toKString()) + if (size < len.toInt() + 1) { + 0 + } else { + strcpy(buf, password.reinterpret<ByteVar>().toKString()) + len.toInt() + } + } + }) + } + } + + val clientContext = SSL_new(sslContext) + if (clientContext == null) { + BIO_free(readBio) + BIO_free(writeBio) + throw IOException("Failed allocating read BIO") + } + + SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) + + SSL_set_connect_state(clientContext) + SSL_set_bio(clientContext, readBio, writeBio) + context = clientContext + this.readBio = readBio + this.writeBio = writeBio + } + + actual override val isInitFinished: Boolean + get() = SSL_is_init_finished(context) != 0 + + actual override val bioShouldRetry: Boolean + get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 + + actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_write(context, buffer, length) + } + + actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_read(context, buffer, length) + } + + actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_read(writeBio, buffer, length) + } + + actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_write(readBio, buffer, length) + } + + actual override fun getError(result: Int): Int { + return SSL_get_error(context, result) + } + + actual override fun close() { + SSL_free(context) + } +} diff --git a/kmqtt-client/src/watchosArm64Main/kotlin/TLSClientEngine.kt b/kmqtt-client/src/watchosArm64Main/kotlin/TLSClientEngine.kt deleted file mode 100644 index b180dea3fb966b42a150ca3e66decb194b6cd0f3..0000000000000000000000000000000000000000 --- a/kmqtt-client/src/watchosArm64Main/kotlin/TLSClientEngine.kt +++ /dev/null @@ -1,183 +0,0 @@ -import kotlinx.cinterop.* -import openssl.* -import platform.posix.getenv -import platform.posix.strcpy -import platform.posix.strlen -import socket.IOException -import socket.tls.TLSClientSettings -import socket.tls.TLSEngine - -internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { - - private val context: CPointer<SSL> - private val readBio: CPointer<BIO> - private val writeBio: CPointer<BIO> - - fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, certBuffer) - - val inf = PEM_X509_INFO_read_bio(bio, null, null, null) - - if (inf == null) { - BIO_free(bio) - return false - } - - val ctx = SSL_CTX_get_cert_store(context); - - var loaded = 0 - for (i in 0..<sk_X509_INFO_num(inf)) { - val itmp = sk_X509_INFO_value(inf, i) - if (itmp != null && itmp.pointed.x509 != null) { - if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - return false - } - loaded++ - } - } - - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - - return loaded > 0 - } - - init { - val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") - - val writeBio = BIO_new(BIO_s_mem()) - if (writeBio == null) { - BIO_free(readBio) - throw IOException("Failed allocating read BIO") - } - - val method = TLS_client_method() - val sslContext = SSL_CTX_new(method)!! - - if (tlsSettings.serverCertificate != null) { - if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { - // Try file - if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { - throw Exception("Server certificate path not found") - } - } - } else { - if (!tlsSettings.checkServerCertificate) { - SSL_CTX_set_cert_verify_callback( - sslContext, - staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> - 1 - }, - null - ) - } else { - if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { - throw Exception("Server certificate path not found") - } - } - } - - if (tlsSettings.clientCertificate != null) { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, tlsSettings.clientCertificate) - val certificate = PEM_read_bio_X509(bio, null, null, null) - - if (certificate != null) { - if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { - throw Exception("Cannot load client's certificate") - } - } else { - // Load file - if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's certificate file") - } - } - - BIO_puts(bio, tlsSettings.clientCertificateKey) - val key = PEM_read_bio_PrivateKey(bio, null, null, null) - if (key != null) { - if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { - throw Exception("Cannot load client's key") - } - } else { - if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's key file") - } - } - if (SSL_CTX_check_private_key(sslContext) != 1) { - throw Exception("Client's certificate and key don't match") - } - - if (tlsSettings.clientCertificatePassword != null) { - SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) - SSL_CTX_set_default_passwd_cb( - sslContext, - staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> - if (password == null) { - 0 - } else { - val len = strlen(password.reinterpret<ByteVar>().toKString()) - if (size < len.toInt() + 1) { - 0 - } else { - strcpy(buf, password.reinterpret<ByteVar>().toKString()) - len.toInt() - } - } - }) - } - } - - val clientContext = SSL_new(sslContext) - if (clientContext == null) { - BIO_free(readBio) - BIO_free(writeBio) - throw IOException("Failed allocating read BIO") - } - - SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) - - SSL_set_connect_state(clientContext) - SSL_set_bio(clientContext, readBio, writeBio) - context = clientContext - this.readBio = readBio - this.writeBio = writeBio - } - - actual override val isInitFinished: Boolean - get() = SSL_is_init_finished(context) != 0 - - actual override val bioShouldRetry: Boolean - get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 - - actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_write(context, buffer, length) - } - - actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_read(context, buffer, length) - } - - actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_read(writeBio, buffer, length) - } - - actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_write(readBio, buffer, length) - } - - actual override fun getError(result: Int): Int { - return SSL_get_error(context, result) - } - - actual override fun close() { - SSL_free(context) - } -} diff --git a/kmqtt-client/src/watchosArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt b/kmqtt-client/src/watchosArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt new file mode 100644 index 0000000000000000000000000000000000000000..35214674fc3ee31084da917a860a564c37d85155 --- /dev/null +++ b/kmqtt-client/src/watchosArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt @@ -0,0 +1,185 @@ +package io.github.davidepianca98 + +import kotlinx.cinterop.* +import openssl.* +import platform.posix.getenv +import platform.posix.strcpy +import platform.posix.strlen +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSEngine + +internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { + + private val context: CPointer<SSL> + private val readBio: CPointer<BIO> + private val writeBio: CPointer<BIO> + + fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, certBuffer) + + val inf = PEM_X509_INFO_read_bio(bio, null, null, null) + + if (inf == null) { + BIO_free(bio) + return false + } + + val ctx = SSL_CTX_get_cert_store(context); + + var loaded = 0 + for (i in 0..<sk_X509_INFO_num(inf)) { + val itmp = sk_X509_INFO_value(inf, i) + if (itmp != null && itmp.pointed.x509 != null) { + if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + return false + } + loaded++ + } + } + + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + + return loaded > 0 + } + + init { + val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") + + val writeBio = BIO_new(BIO_s_mem()) + if (writeBio == null) { + BIO_free(readBio) + throw IOException("Failed allocating read BIO") + } + + val method = TLS_client_method() + val sslContext = SSL_CTX_new(method)!! + + if (tlsSettings.serverCertificate != null) { + if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { + // Try file + if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { + throw Exception("Server certificate path not found") + } + } + } else { + if (!tlsSettings.checkServerCertificate) { + SSL_CTX_set_cert_verify_callback( + sslContext, + staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> + 1 + }, + null + ) + } else { + if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { + throw Exception("Server certificate path not found") + } + } + } + + if (tlsSettings.clientCertificate != null) { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, tlsSettings.clientCertificate) + val certificate = PEM_read_bio_X509(bio, null, null, null) + + if (certificate != null) { + if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { + throw Exception("Cannot load client's certificate") + } + } else { + // Load file + if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's certificate file") + } + } + + BIO_puts(bio, tlsSettings.clientCertificateKey) + val key = PEM_read_bio_PrivateKey(bio, null, null, null) + if (key != null) { + if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { + throw Exception("Cannot load client's key") + } + } else { + if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's key file") + } + } + if (SSL_CTX_check_private_key(sslContext) != 1) { + throw Exception("Client's certificate and key don't match") + } + + if (tlsSettings.clientCertificatePassword != null) { + SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) + SSL_CTX_set_default_passwd_cb( + sslContext, + staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> + if (password == null) { + 0 + } else { + val len = strlen(password.reinterpret<ByteVar>().toKString()) + if (size < len.toInt() + 1) { + 0 + } else { + strcpy(buf, password.reinterpret<ByteVar>().toKString()) + len.toInt() + } + } + }) + } + } + + val clientContext = SSL_new(sslContext) + if (clientContext == null) { + BIO_free(readBio) + BIO_free(writeBio) + throw IOException("Failed allocating read BIO") + } + + SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) + + SSL_set_connect_state(clientContext) + SSL_set_bio(clientContext, readBio, writeBio) + context = clientContext + this.readBio = readBio + this.writeBio = writeBio + } + + actual override val isInitFinished: Boolean + get() = SSL_is_init_finished(context) != 0 + + actual override val bioShouldRetry: Boolean + get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 + + actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_write(context, buffer, length) + } + + actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_read(context, buffer, length) + } + + actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_read(writeBio, buffer, length) + } + + actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_write(readBio, buffer, length) + } + + actual override fun getError(result: Int): Int { + return SSL_get_error(context, result) + } + + actual override fun close() { + SSL_free(context) + } +} diff --git a/kmqtt-client/src/watchosSimulatorArm64Main/kotlin/TLSClientEngine.kt b/kmqtt-client/src/watchosSimulatorArm64Main/kotlin/TLSClientEngine.kt deleted file mode 100644 index b180dea3fb966b42a150ca3e66decb194b6cd0f3..0000000000000000000000000000000000000000 --- a/kmqtt-client/src/watchosSimulatorArm64Main/kotlin/TLSClientEngine.kt +++ /dev/null @@ -1,183 +0,0 @@ -import kotlinx.cinterop.* -import openssl.* -import platform.posix.getenv -import platform.posix.strcpy -import platform.posix.strlen -import socket.IOException -import socket.tls.TLSClientSettings -import socket.tls.TLSEngine - -internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { - - private val context: CPointer<SSL> - private val readBio: CPointer<BIO> - private val writeBio: CPointer<BIO> - - fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, certBuffer) - - val inf = PEM_X509_INFO_read_bio(bio, null, null, null) - - if (inf == null) { - BIO_free(bio) - return false - } - - val ctx = SSL_CTX_get_cert_store(context); - - var loaded = 0 - for (i in 0..<sk_X509_INFO_num(inf)) { - val itmp = sk_X509_INFO_value(inf, i) - if (itmp != null && itmp.pointed.x509 != null) { - if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - return false - } - loaded++ - } - } - - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - - return loaded > 0 - } - - init { - val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") - - val writeBio = BIO_new(BIO_s_mem()) - if (writeBio == null) { - BIO_free(readBio) - throw IOException("Failed allocating read BIO") - } - - val method = TLS_client_method() - val sslContext = SSL_CTX_new(method)!! - - if (tlsSettings.serverCertificate != null) { - if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { - // Try file - if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { - throw Exception("Server certificate path not found") - } - } - } else { - if (!tlsSettings.checkServerCertificate) { - SSL_CTX_set_cert_verify_callback( - sslContext, - staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> - 1 - }, - null - ) - } else { - if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { - throw Exception("Server certificate path not found") - } - } - } - - if (tlsSettings.clientCertificate != null) { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, tlsSettings.clientCertificate) - val certificate = PEM_read_bio_X509(bio, null, null, null) - - if (certificate != null) { - if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { - throw Exception("Cannot load client's certificate") - } - } else { - // Load file - if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's certificate file") - } - } - - BIO_puts(bio, tlsSettings.clientCertificateKey) - val key = PEM_read_bio_PrivateKey(bio, null, null, null) - if (key != null) { - if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { - throw Exception("Cannot load client's key") - } - } else { - if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's key file") - } - } - if (SSL_CTX_check_private_key(sslContext) != 1) { - throw Exception("Client's certificate and key don't match") - } - - if (tlsSettings.clientCertificatePassword != null) { - SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) - SSL_CTX_set_default_passwd_cb( - sslContext, - staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> - if (password == null) { - 0 - } else { - val len = strlen(password.reinterpret<ByteVar>().toKString()) - if (size < len.toInt() + 1) { - 0 - } else { - strcpy(buf, password.reinterpret<ByteVar>().toKString()) - len.toInt() - } - } - }) - } - } - - val clientContext = SSL_new(sslContext) - if (clientContext == null) { - BIO_free(readBio) - BIO_free(writeBio) - throw IOException("Failed allocating read BIO") - } - - SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) - - SSL_set_connect_state(clientContext) - SSL_set_bio(clientContext, readBio, writeBio) - context = clientContext - this.readBio = readBio - this.writeBio = writeBio - } - - actual override val isInitFinished: Boolean - get() = SSL_is_init_finished(context) != 0 - - actual override val bioShouldRetry: Boolean - get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 - - actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_write(context, buffer, length) - } - - actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_read(context, buffer, length) - } - - actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_read(writeBio, buffer, length) - } - - actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_write(readBio, buffer, length) - } - - actual override fun getError(result: Int): Int { - return SSL_get_error(context, result) - } - - actual override fun close() { - SSL_free(context) - } -} diff --git a/kmqtt-client/src/watchosSimulatorArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt b/kmqtt-client/src/watchosSimulatorArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt new file mode 100644 index 0000000000000000000000000000000000000000..35214674fc3ee31084da917a860a564c37d85155 --- /dev/null +++ b/kmqtt-client/src/watchosSimulatorArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt @@ -0,0 +1,185 @@ +package io.github.davidepianca98 + +import kotlinx.cinterop.* +import openssl.* +import platform.posix.getenv +import platform.posix.strcpy +import platform.posix.strlen +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSEngine + +internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { + + private val context: CPointer<SSL> + private val readBio: CPointer<BIO> + private val writeBio: CPointer<BIO> + + fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, certBuffer) + + val inf = PEM_X509_INFO_read_bio(bio, null, null, null) + + if (inf == null) { + BIO_free(bio) + return false + } + + val ctx = SSL_CTX_get_cert_store(context); + + var loaded = 0 + for (i in 0..<sk_X509_INFO_num(inf)) { + val itmp = sk_X509_INFO_value(inf, i) + if (itmp != null && itmp.pointed.x509 != null) { + if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + return false + } + loaded++ + } + } + + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + + return loaded > 0 + } + + init { + val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") + + val writeBio = BIO_new(BIO_s_mem()) + if (writeBio == null) { + BIO_free(readBio) + throw IOException("Failed allocating read BIO") + } + + val method = TLS_client_method() + val sslContext = SSL_CTX_new(method)!! + + if (tlsSettings.serverCertificate != null) { + if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { + // Try file + if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { + throw Exception("Server certificate path not found") + } + } + } else { + if (!tlsSettings.checkServerCertificate) { + SSL_CTX_set_cert_verify_callback( + sslContext, + staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> + 1 + }, + null + ) + } else { + if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { + throw Exception("Server certificate path not found") + } + } + } + + if (tlsSettings.clientCertificate != null) { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, tlsSettings.clientCertificate) + val certificate = PEM_read_bio_X509(bio, null, null, null) + + if (certificate != null) { + if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { + throw Exception("Cannot load client's certificate") + } + } else { + // Load file + if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's certificate file") + } + } + + BIO_puts(bio, tlsSettings.clientCertificateKey) + val key = PEM_read_bio_PrivateKey(bio, null, null, null) + if (key != null) { + if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { + throw Exception("Cannot load client's key") + } + } else { + if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's key file") + } + } + if (SSL_CTX_check_private_key(sslContext) != 1) { + throw Exception("Client's certificate and key don't match") + } + + if (tlsSettings.clientCertificatePassword != null) { + SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) + SSL_CTX_set_default_passwd_cb( + sslContext, + staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> + if (password == null) { + 0 + } else { + val len = strlen(password.reinterpret<ByteVar>().toKString()) + if (size < len.toInt() + 1) { + 0 + } else { + strcpy(buf, password.reinterpret<ByteVar>().toKString()) + len.toInt() + } + } + }) + } + } + + val clientContext = SSL_new(sslContext) + if (clientContext == null) { + BIO_free(readBio) + BIO_free(writeBio) + throw IOException("Failed allocating read BIO") + } + + SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) + + SSL_set_connect_state(clientContext) + SSL_set_bio(clientContext, readBio, writeBio) + context = clientContext + this.readBio = readBio + this.writeBio = writeBio + } + + actual override val isInitFinished: Boolean + get() = SSL_is_init_finished(context) != 0 + + actual override val bioShouldRetry: Boolean + get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 + + actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_write(context, buffer, length) + } + + actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_read(context, buffer, length) + } + + actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_read(writeBio, buffer, length) + } + + actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_write(readBio, buffer, length) + } + + actual override fun getError(result: Int): Int { + return SSL_get_error(context, result) + } + + actual override fun close() { + SSL_free(context) + } +} diff --git a/kmqtt-client/src/watchosX64Main/kotlin/TLSClientEngine.kt b/kmqtt-client/src/watchosX64Main/kotlin/TLSClientEngine.kt deleted file mode 100644 index b180dea3fb966b42a150ca3e66decb194b6cd0f3..0000000000000000000000000000000000000000 --- a/kmqtt-client/src/watchosX64Main/kotlin/TLSClientEngine.kt +++ /dev/null @@ -1,183 +0,0 @@ -import kotlinx.cinterop.* -import openssl.* -import platform.posix.getenv -import platform.posix.strcpy -import platform.posix.strlen -import socket.IOException -import socket.tls.TLSClientSettings -import socket.tls.TLSEngine - -internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { - - private val context: CPointer<SSL> - private val readBio: CPointer<BIO> - private val writeBio: CPointer<BIO> - - fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, certBuffer) - - val inf = PEM_X509_INFO_read_bio(bio, null, null, null) - - if (inf == null) { - BIO_free(bio) - return false - } - - val ctx = SSL_CTX_get_cert_store(context); - - var loaded = 0 - for (i in 0..<sk_X509_INFO_num(inf)) { - val itmp = sk_X509_INFO_value(inf, i) - if (itmp != null && itmp.pointed.x509 != null) { - if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - return false - } - loaded++ - } - } - - sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> - X509_INFO_free(buf) - }) - BIO_free(bio) - - return loaded > 0 - } - - init { - val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") - - val writeBio = BIO_new(BIO_s_mem()) - if (writeBio == null) { - BIO_free(readBio) - throw IOException("Failed allocating read BIO") - } - - val method = TLS_client_method() - val sslContext = SSL_CTX_new(method)!! - - if (tlsSettings.serverCertificate != null) { - if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { - // Try file - if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { - throw Exception("Server certificate path not found") - } - } - } else { - if (!tlsSettings.checkServerCertificate) { - SSL_CTX_set_cert_verify_callback( - sslContext, - staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> - 1 - }, - null - ) - } else { - if (SSL_CTX_load_verify_locations(sslContext, null, getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString()) != 1) { - throw Exception("Server certificate path not found") - } - } - } - - if (tlsSettings.clientCertificate != null) { - val bio = BIO_new(BIO_s_mem()) - BIO_puts(bio, tlsSettings.clientCertificate) - val certificate = PEM_read_bio_X509(bio, null, null, null) - - if (certificate != null) { - if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { - throw Exception("Cannot load client's certificate") - } - } else { - // Load file - if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's certificate file") - } - } - - BIO_puts(bio, tlsSettings.clientCertificateKey) - val key = PEM_read_bio_PrivateKey(bio, null, null, null) - if (key != null) { - if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { - throw Exception("Cannot load client's key") - } - } else { - if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { - throw Exception("Cannot load client's key file") - } - } - if (SSL_CTX_check_private_key(sslContext) != 1) { - throw Exception("Client's certificate and key don't match") - } - - if (tlsSettings.clientCertificatePassword != null) { - SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) - SSL_CTX_set_default_passwd_cb( - sslContext, - staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> - if (password == null) { - 0 - } else { - val len = strlen(password.reinterpret<ByteVar>().toKString()) - if (size < len.toInt() + 1) { - 0 - } else { - strcpy(buf, password.reinterpret<ByteVar>().toKString()) - len.toInt() - } - } - }) - } - } - - val clientContext = SSL_new(sslContext) - if (clientContext == null) { - BIO_free(readBio) - BIO_free(writeBio) - throw IOException("Failed allocating read BIO") - } - - SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) - - SSL_set_connect_state(clientContext) - SSL_set_bio(clientContext, readBio, writeBio) - context = clientContext - this.readBio = readBio - this.writeBio = writeBio - } - - actual override val isInitFinished: Boolean - get() = SSL_is_init_finished(context) != 0 - - actual override val bioShouldRetry: Boolean - get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 - - actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_write(context, buffer, length) - } - - actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { - return SSL_read(context, buffer, length) - } - - actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_read(writeBio, buffer, length) - } - - actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { - return BIO_write(readBio, buffer, length) - } - - actual override fun getError(result: Int): Int { - return SSL_get_error(context, result) - } - - actual override fun close() { - SSL_free(context) - } -} diff --git a/kmqtt-client/src/watchosX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt b/kmqtt-client/src/watchosX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt new file mode 100644 index 0000000000000000000000000000000000000000..6a7fddc0f8df0ef7b503ac160160008318af81ec --- /dev/null +++ b/kmqtt-client/src/watchosX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt @@ -0,0 +1,235 @@ +package io.github.davidepianca98 + +import kotlinx.cinterop.ByteVar +import kotlinx.cinterop.COpaquePointer +import kotlinx.cinterop.CPointer +import kotlinx.cinterop.pointed +import kotlinx.cinterop.refTo +import kotlinx.cinterop.reinterpret +import kotlinx.cinterop.staticCFunction +import kotlinx.cinterop.toKString +import openssl.BIO_FLAGS_SHOULD_RETRY +import openssl.BIO_free +import openssl.BIO_new +import openssl.BIO_puts +import openssl.BIO_read +import openssl.BIO_s_mem +import openssl.BIO_test_flags +import openssl.BIO_write +import openssl.PEM_X509_INFO_read_bio +import openssl.PEM_read_bio_PrivateKey +import openssl.PEM_read_bio_X509 +import openssl.SSL_CTX_check_private_key +import openssl.SSL_CTX_get_cert_store +import openssl.SSL_CTX_load_verify_locations +import openssl.SSL_CTX_new +import openssl.SSL_CTX_set_cert_verify_callback +import openssl.SSL_CTX_set_default_passwd_cb +import openssl.SSL_CTX_set_default_passwd_cb_userdata +import openssl.SSL_CTX_use_PrivateKey +import openssl.SSL_CTX_use_PrivateKey_file +import openssl.SSL_CTX_use_certificate +import openssl.SSL_CTX_use_certificate_file +import openssl.SSL_FILETYPE_PEM +import openssl.SSL_VERIFY_PEER +import openssl.SSL_free +import openssl.SSL_get_error +import openssl.SSL_is_init_finished +import openssl.SSL_new +import openssl.SSL_read +import openssl.SSL_set_bio +import openssl.SSL_set_connect_state +import openssl.SSL_set_verify +import openssl.SSL_write +import openssl.TLS_client_method +import openssl.X509_INFO_free +import openssl.X509_STORE_add_cert +import openssl.X509_get_default_cert_dir_env +import openssl.sk_X509_INFO_num +import openssl.sk_X509_INFO_pop_free +import openssl.sk_X509_INFO_value +import platform.posix.getenv +import platform.posix.strcpy +import platform.posix.strlen +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.tls.TLSClientSettings +import io.github.davidepianca98.socket.tls.TLSEngine + +internal actual class TLSClientEngine actual constructor(tlsSettings: TLSClientSettings) : TLSEngine { + + private val context: CPointer<SSL> + private val readBio: CPointer<BIO> + private val writeBio: CPointer<BIO> + + fun loadServerCertsFromString(context: CPointer<SSL_CTX>, certBuffer: String): Boolean { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, certBuffer) + + val inf = PEM_X509_INFO_read_bio(bio, null, null, null) + + if (inf == null) { + BIO_free(bio) + return false + } + + val ctx = SSL_CTX_get_cert_store(context); + + var loaded = 0 + for (i in 0..<sk_X509_INFO_num(inf)) { + val itmp = sk_X509_INFO_value(inf, i) + if (itmp != null && itmp.pointed.x509 != null) { + if (X509_STORE_add_cert(ctx, itmp.pointed.x509) != 1) { + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + return false + } + loaded++ + } + } + + sk_X509_INFO_pop_free(inf, staticCFunction { buf: CPointer<X509_INFO>? -> + X509_INFO_free(buf) + }) + BIO_free(bio) + + return loaded > 0 + } + + init { + val readBio = BIO_new(BIO_s_mem()) ?: throw IOException("Failed allocating read BIO") + + val writeBio = BIO_new(BIO_s_mem()) + if (writeBio == null) { + BIO_free(readBio) + throw IOException("Failed allocating read BIO") + } + + val method = TLS_client_method() + val sslContext = SSL_CTX_new(method)!! + + if (tlsSettings.serverCertificate != null) { + if (!loadServerCertsFromString(sslContext, tlsSettings.serverCertificate!!)) { + // Try file + if (SSL_CTX_load_verify_locations(sslContext, tlsSettings.serverCertificate, null) != 1) { + throw Exception("Server certificate path not found") + } + } + } else { + if (!tlsSettings.checkServerCertificate) { + SSL_CTX_set_cert_verify_callback( + sslContext, + staticCFunction { buf: CPointer<X509_STORE_CTX>?, arg: COpaquePointer? -> + 1 + }, + null + ) + } else { + if (SSL_CTX_load_verify_locations( + sslContext, + null, + getenv(X509_get_default_cert_dir_env()?.toKString())?.toKString() + ) != 1) { + throw Exception("Server certificate path not found") + } + } + } + + if (tlsSettings.clientCertificate != null) { + val bio = BIO_new(BIO_s_mem()) + BIO_puts(bio, tlsSettings.clientCertificate) + val certificate = PEM_read_bio_X509(bio, null, null, null) + + if (certificate != null) { + if (SSL_CTX_use_certificate(sslContext, certificate) != 1) { + throw Exception("Cannot load client's certificate") + } + } else { + // Load file + if (SSL_CTX_use_certificate_file(sslContext, tlsSettings.clientCertificate, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's certificate file") + } + } + + BIO_puts(bio, tlsSettings.clientCertificateKey) + val key = PEM_read_bio_PrivateKey(bio, null, null, null) + if (key != null) { + if (SSL_CTX_use_PrivateKey(sslContext, key) != 1) { + throw Exception("Cannot load client's key") + } + } else { + if (SSL_CTX_use_PrivateKey_file(sslContext, tlsSettings.clientCertificateKey!!, SSL_FILETYPE_PEM) != 1) { + throw Exception("Cannot load client's key file") + } + } + if (SSL_CTX_check_private_key(sslContext) != 1) { + throw Exception("Client's certificate and key don't match") + } + + if (tlsSettings.clientCertificatePassword != null) { + SSL_CTX_set_default_passwd_cb_userdata(sslContext, tlsSettings.clientCertificatePassword!!.refTo(0)) + SSL_CTX_set_default_passwd_cb( + sslContext, + staticCFunction { buf: CPointer<ByteVar>?, size: Int, _: Int, password: COpaquePointer? -> + if (password == null) { + 0 + } else { + val len = strlen(password.reinterpret<ByteVar>().toKString()) + if (size < len.toInt() + 1) { + 0 + } else { + strcpy(buf, password.reinterpret<ByteVar>().toKString()) + len.toInt() + } + } + }) + } + } + + val clientContext = SSL_new(sslContext) + if (clientContext == null) { + BIO_free(readBio) + BIO_free(writeBio) + throw IOException("Failed allocating read BIO") + } + + SSL_set_verify(clientContext, SSL_VERIFY_PEER, null) + + SSL_set_connect_state(clientContext) + SSL_set_bio(clientContext, readBio, writeBio) + context = clientContext + this.readBio = readBio + this.writeBio = writeBio + } + + actual override val isInitFinished: Boolean + get() = SSL_is_init_finished(context) != 0 + + actual override val bioShouldRetry: Boolean + get() = BIO_test_flags(writeBio, BIO_FLAGS_SHOULD_RETRY) == 0 + + actual override fun write(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_write(context, buffer, length) + } + + actual override fun read(buffer: CPointer<ByteVar>, length: Int): Int { + return SSL_read(context, buffer, length) + } + + actual override fun bioRead(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_read(writeBio, buffer, length) + } + + actual override fun bioWrite(buffer: CPointer<ByteVar>, length: Int): Int { + return BIO_write(readBio, buffer, length) + } + + actual override fun getError(result: Int): Int { + return SSL_get_error(context, result) + } + + actual override fun close() { + SSL_free(context) + } +} \ No newline at end of file diff --git a/kmqtt-common/src/commonMain/kotlin/CommonUtils.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/CommonUtils.kt similarity index 98% rename from kmqtt-common/src/commonMain/kotlin/CommonUtils.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/CommonUtils.kt index a1556954ddac8e566217c52be0e3284eba7470b6..574cac1ec627c2559a48099617281146eef6a74b 100644 --- a/kmqtt-common/src/commonMain/kotlin/CommonUtils.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/CommonUtils.kt @@ -1,4 +1,6 @@ -import socket.streams.ByteArrayOutputStream +package io.github.davidepianca98 + +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream import kotlin.random.Random public expect fun currentTimeMillis(): Long diff --git a/kmqtt-common/src/commonMain/kotlin/IgnoreJs.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/IgnoreJs.kt similarity index 74% rename from kmqtt-common/src/commonMain/kotlin/IgnoreJs.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/IgnoreJs.kt index 74df6db6bc35a9b158ec9e4421b38bd8811f7fa3..e4f9ff598814fc6d201bfeac8e75749241953c37 100644 --- a/kmqtt-common/src/commonMain/kotlin/IgnoreJs.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/IgnoreJs.kt @@ -1,2 +1,4 @@ +package io.github.davidepianca98 + @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) public expect annotation class IgnoreJs() \ No newline at end of file diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/MQTTCurrentPacket.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/MQTTCurrentPacket.kt similarity index 65% rename from kmqtt-common/src/commonMain/kotlin/mqtt/MQTTCurrentPacket.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/MQTTCurrentPacket.kt index 89d2a597ebe78240844350af19c9878ef91cf6c3..d6987e5e31d644345ce72712e92f5f38d06d990a 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/MQTTCurrentPacket.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/MQTTCurrentPacket.kt @@ -1,13 +1,42 @@ -package mqtt +package io.github.davidepianca98.mqtt -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.MQTTPacket -import mqtt.packets.mqttv4.* -import mqtt.packets.mqttv5.* -import socket.streams.DynamicByteBuffer -import socket.streams.EOFException -import socket.streams.decodeVariableByteInteger +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.MQTTPacket +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Connack +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Connect +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Disconnect +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Pingreq +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Pingresp +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Puback +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Pubcomp +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Publish +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Pubrec +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Pubrel +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Suback +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Subscribe +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Unsuback +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Unsubscribe +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Auth +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Connack +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Connect +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Disconnect +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pingreq +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pingresp +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Puback +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pubcomp +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Publish +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pubrec +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pubrel +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Suback +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Subscribe +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Unsuback +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Unsubscribe +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.socket.streams.DynamicByteBuffer +import io.github.davidepianca98.socket.streams.EOFException +import io.github.davidepianca98.socket.streams.decodeVariableByteInteger +import kotlin.collections.plusAssign public class MQTTCurrentPacket( private val maximumPacketSize: UInt, @@ -25,7 +54,7 @@ public class MQTTCurrentPacket( while (true) { packets += readPacket() } - } catch (e: EOFException) { + } catch (_: EOFException) { currentReceivedData.clearReadCounter() } return packets @@ -37,7 +66,7 @@ public class MQTTCurrentPacket( val flags = byte1 and 0b1111u val type = - MQTTControlPacketType.valueOf(mqttControlPacketType) ?: throw MQTTException(ReasonCode.PROTOCOL_ERROR) + MQTTControlPacketType.Companion.valueOf(mqttControlPacketType) ?: throw MQTTException(ReasonCode.PROTOCOL_ERROR) val remainingLength = currentReceivedData.decodeVariableByteInteger().toInt() @@ -104,7 +133,7 @@ public class MQTTCurrentPacket( try { mqttVersion = MQTTVersion.MQTT5 parseMQTT5Packet(type, flags, data) - } catch (e: MQTTException) { + } catch (_: MQTTException) { mqttVersion = MQTTVersion.MQTT3_1_1 parseMQTT4Packet(type, flags, data) } diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/MQTTException.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/MQTTException.kt new file mode 100644 index 0000000000000000000000000000000000000000..eaf4504eed1e97c04ec7b9ca5318a145128009f4 --- /dev/null +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/MQTTException.kt @@ -0,0 +1,5 @@ +package io.github.davidepianca98.mqtt + +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode + +public class MQTTException(public val reasonCode: ReasonCode) : Exception(reasonCode.toString()) diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/MQTTVersion.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/MQTTVersion.kt similarity index 69% rename from kmqtt-common/src/commonMain/kotlin/mqtt/MQTTVersion.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/MQTTVersion.kt index f1f9b552b15db4b4765b75dba66011f7794b80a6..dfda197d9c0307a8f77c5c908a8b27bd701c818f 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/MQTTVersion.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/MQTTVersion.kt @@ -1,4 +1,4 @@ -package mqtt +package io.github.davidepianca98.mqtt public enum class MQTTVersion(public val value: Int) { MQTT3_1_1(4), diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/Subscription.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/Subscription.kt similarity index 81% rename from kmqtt-common/src/commonMain/kotlin/mqtt/Subscription.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/Subscription.kt index 4d35a37d7d8d2f5b0fc74a8cd6810f2ada6c20ed..9445601cb3922e47e3377c89caa861a9be424b50 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/Subscription.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/Subscription.kt @@ -1,6 +1,6 @@ -package mqtt +package io.github.davidepianca98.mqtt -import mqtt.packets.mqttv5.SubscriptionOptions +import io.github.davidepianca98.mqtt.packets.mqttv5.SubscriptionOptions public data class Subscription( public val topicFilter: String, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/TopicUtils.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/TopicUtils.kt similarity index 98% rename from kmqtt-common/src/commonMain/kotlin/mqtt/TopicUtils.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/TopicUtils.kt index 88e4b58206e5ac19cfc1c394b7111320e5fd581e..c5da6be368ae9a2ce2bd23815cc92b64a07605b9 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/TopicUtils.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/TopicUtils.kt @@ -1,4 +1,4 @@ -package mqtt +package io.github.davidepianca98.mqtt public fun String.containsWildcard(): Boolean { return this.contains("#") || this.contains("+") diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/ConnectAcknowledgeFlags.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/ConnectAcknowledgeFlags.kt similarity index 62% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/ConnectAcknowledgeFlags.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/ConnectAcknowledgeFlags.kt index e3056937ca18aed0f7b2e0b827a9a1d4fa4b5e47..a362ba31205aa7e25f9cc720192172a124f8cfc3 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/ConnectAcknowledgeFlags.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/ConnectAcknowledgeFlags.kt @@ -1,3 +1,3 @@ -package mqtt.packets +package io.github.davidepianca98.mqtt.packets public data class ConnectAcknowledgeFlags(val sessionPresentFlag: Boolean) diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/ConnectFlags.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/ConnectFlags.kt similarity index 91% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/ConnectFlags.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/ConnectFlags.kt index afe23bf1d47a50d6a5f8af5eb512b421c129b26d..8fdd28ac5d571bc0811fe81702cd7b115803d050 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/ConnectFlags.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/ConnectFlags.kt @@ -1,7 +1,7 @@ -package mqtt.packets +package io.github.davidepianca98.mqtt.packets -import mqtt.MQTTException -import mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode public data class ConnectFlags( val userNameFlag: Boolean, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/MQTTControlPacketType.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/MQTTControlPacketType.kt similarity index 91% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/MQTTControlPacketType.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/MQTTControlPacketType.kt index 57b6dcec0c5bd73d8160afcbe2532177028d1125..cfcb9b712a1a320705ff73a91bb39e073bef1268 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/MQTTControlPacketType.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/MQTTControlPacketType.kt @@ -1,4 +1,4 @@ -package mqtt.packets +package io.github.davidepianca98.mqtt.packets public enum class MQTTControlPacketType(public val value: Int) { Reserved(0), diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/MQTTDeserializer.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/MQTTDeserializer.kt similarity index 94% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/MQTTDeserializer.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/MQTTDeserializer.kt index 92310b4725abf639d1b822757ebe002ce603613f..85abe2cdff5329476621564d30d709f2bb0f4332 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/MQTTDeserializer.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/MQTTDeserializer.kt @@ -1,13 +1,13 @@ -package mqtt.packets +package io.github.davidepianca98.mqtt.packets -import mqtt.MQTTException -import mqtt.containsWildcard -import mqtt.packets.mqttv5.MQTT5Properties -import mqtt.packets.mqttv5.Property -import mqtt.packets.mqttv5.ReasonCode -import socket.streams.ByteArrayInputStream -import socket.streams.decodeVariableByteInteger -import validateUTF8String +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.containsWildcard +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Properties +import io.github.davidepianca98.mqtt.packets.mqttv5.Property +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.decodeVariableByteInteger +import io.github.davidepianca98.validateUTF8String internal interface MQTTDeserializer { diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/MQTTPacket.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/MQTTPacket.kt similarity index 52% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/MQTTPacket.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/MQTTPacket.kt index 59e66fda2d7646b0f9037d0171dc19d7afb23a84..ccb482b6b54e3a1ff8cbe0a8bf5899fb0dd31e9d 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/MQTTPacket.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/MQTTPacket.kt @@ -1,6 +1,6 @@ -package mqtt.packets +package io.github.davidepianca98.mqtt.packets -import mqtt.packets.mqttv5.MQTTSerializer +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTTSerializer public interface MQTTPacket : MQTTSerializer { diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/Qos.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/Qos.kt similarity index 65% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/Qos.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/Qos.kt index 46e3c686a531193d0d4b288a15f81af4ecfca93f..4b3b5062bbc59f16305440567c610dac02c56eaa 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/Qos.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/Qos.kt @@ -1,4 +1,4 @@ -package mqtt.packets +package io.github.davidepianca98.mqtt.packets public enum class Qos(public val value: Int) { AT_MOST_ONCE(0), @@ -6,7 +6,7 @@ public enum class Qos(public val value: Int) { EXACTLY_ONCE(2); public companion object { - public fun valueOf(value: Int): Qos? = values().firstOrNull { it.value == value } + public fun valueOf(value: Int): Qos? = entries.firstOrNull { it.value == value } public fun min(qos1: Qos, qos2: Qos): Qos = valueOf(kotlin.math.min(qos1.value, qos2.value))!! } diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTAuth.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTAuth.kt new file mode 100644 index 0000000000000000000000000000000000000000..2735a4882277b2fb9aed41fcbd826f2ad965f5af --- /dev/null +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTAuth.kt @@ -0,0 +1,5 @@ +package io.github.davidepianca98.mqtt.packets.mqtt + +import io.github.davidepianca98.mqtt.packets.MQTTPacket + +public abstract class MQTTAuth : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTConnack.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTConnack.kt new file mode 100644 index 0000000000000000000000000000000000000000..bf99c9b64fdcb7ded1374c2d20c36e4d75eb7d3f --- /dev/null +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTConnack.kt @@ -0,0 +1,6 @@ +package io.github.davidepianca98.mqtt.packets.mqtt + +import io.github.davidepianca98.mqtt.packets.ConnectAcknowledgeFlags +import io.github.davidepianca98.mqtt.packets.MQTTPacket + +public abstract class MQTTConnack(public val connectAcknowledgeFlags: ConnectAcknowledgeFlags) : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTConnect.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTConnect.kt similarity index 71% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTConnect.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTConnect.kt index e2423bd7863ba71b511d9af6617e16ce446524e6..e031c221f1e181d6fcea3722d77acf5f7eaf7e78 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTConnect.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTConnect.kt @@ -1,7 +1,7 @@ -package mqtt.packets.mqtt +package io.github.davidepianca98.mqtt.packets.mqtt -import mqtt.packets.ConnectFlags -import mqtt.packets.MQTTPacket +import io.github.davidepianca98.mqtt.packets.ConnectFlags +import io.github.davidepianca98.mqtt.packets.MQTTPacket public abstract class MQTTConnect( public val protocolName: String, diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTDisconnect.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTDisconnect.kt new file mode 100644 index 0000000000000000000000000000000000000000..3b34fffd51aeed129d3c40f48a0036535ad1cfb5 --- /dev/null +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTDisconnect.kt @@ -0,0 +1,5 @@ +package io.github.davidepianca98.mqtt.packets.mqtt + +import io.github.davidepianca98.mqtt.packets.MQTTPacket + +public abstract class MQTTDisconnect : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPingreq.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPingreq.kt new file mode 100644 index 0000000000000000000000000000000000000000..0ef0a64bcea2a7b8d9d2a6cd5caf3bf71eb930b5 --- /dev/null +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPingreq.kt @@ -0,0 +1,5 @@ +package io.github.davidepianca98.mqtt.packets.mqtt + +import io.github.davidepianca98.mqtt.packets.MQTTPacket + +public abstract class MQTTPingreq : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPingresp.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPingresp.kt new file mode 100644 index 0000000000000000000000000000000000000000..f0233d9c1515d43035de0b86b33aabccddf368f5 --- /dev/null +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPingresp.kt @@ -0,0 +1,5 @@ +package io.github.davidepianca98.mqtt.packets.mqtt + +import io.github.davidepianca98.mqtt.packets.MQTTPacket + +public abstract class MQTTPingresp : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPuback.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPuback.kt new file mode 100644 index 0000000000000000000000000000000000000000..86034132005088453bb0e934c07a001c7c0f7c2f --- /dev/null +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPuback.kt @@ -0,0 +1,5 @@ +package io.github.davidepianca98.mqtt.packets.mqtt + +import io.github.davidepianca98.mqtt.packets.MQTTPacket + +public abstract class MQTTPuback(public val packetId: UInt) : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPubcomp.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPubcomp.kt new file mode 100644 index 0000000000000000000000000000000000000000..dac0e73454ac43b362ace5060a05cabfc8c5637b --- /dev/null +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPubcomp.kt @@ -0,0 +1,5 @@ +package io.github.davidepianca98.mqtt.packets.mqtt + +import io.github.davidepianca98.mqtt.packets.MQTTPacket + +public abstract class MQTTPubcomp(public val packetId: UInt) : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPublish.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPublish.kt similarity index 72% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPublish.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPublish.kt index 3c5d6328f5cb66d4afeb81319a1b3daac3fbc907..f46e24d2a7baa9e6428589a18384537a3628b469 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPublish.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPublish.kt @@ -1,13 +1,13 @@ -package mqtt.packets.mqtt - -import currentTimeMillis -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTPacket -import mqtt.packets.Qos -import mqtt.packets.mqttv4.MQTT4Publish -import mqtt.packets.mqttv5.MQTT5Publish -import socket.streams.ByteArrayInputStream -import socket.streams.decodeVariableByteInteger +package io.github.davidepianca98.mqtt.packets.mqtt + +import io.github.davidepianca98.currentTimeMillis +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTPacket +import io.github.davidepianca98.mqtt.packets.Qos +import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Publish +import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Publish +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.decodeVariableByteInteger public abstract class MQTTPublish( public val retain: Boolean, diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPubrec.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPubrec.kt new file mode 100644 index 0000000000000000000000000000000000000000..b3530260d3cbc90bfc8f0d1ac2802591cedc47c5 --- /dev/null +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPubrec.kt @@ -0,0 +1,5 @@ +package io.github.davidepianca98.mqtt.packets.mqtt + +import io.github.davidepianca98.mqtt.packets.MQTTPacket + +public abstract class MQTTPubrec(public val packetId: UInt) : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPubrel.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPubrel.kt new file mode 100644 index 0000000000000000000000000000000000000000..6f937372810bb742eb56ab8045705992fc68ec6b --- /dev/null +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPubrel.kt @@ -0,0 +1,5 @@ +package io.github.davidepianca98.mqtt.packets.mqtt + +import io.github.davidepianca98.mqtt.packets.MQTTPacket + +public abstract class MQTTPubrel(public val packetId: UInt) : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTSuback.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTSuback.kt new file mode 100644 index 0000000000000000000000000000000000000000..a62fd0f2b63c5b42ca338e86074c718d49368aeb --- /dev/null +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTSuback.kt @@ -0,0 +1,5 @@ +package io.github.davidepianca98.mqtt.packets.mqtt + +import io.github.davidepianca98.mqtt.packets.MQTTPacket + +public abstract class MQTTSuback(public val packetIdentifier: UInt) : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTSubscribe.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTSubscribe.kt new file mode 100644 index 0000000000000000000000000000000000000000..f2b0fc3efa8050036530309c308c30e0d6f5ce37 --- /dev/null +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTSubscribe.kt @@ -0,0 +1,9 @@ +package io.github.davidepianca98.mqtt.packets.mqtt + +import io.github.davidepianca98.mqtt.Subscription +import io.github.davidepianca98.mqtt.packets.MQTTPacket + +public abstract class MQTTSubscribe( + public val packetIdentifier: UInt, + public val subscriptions: List<Subscription> +) : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTUnsuback.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTUnsuback.kt new file mode 100644 index 0000000000000000000000000000000000000000..22a2e5537062c943d785cf6496d0a22c9b707d7b --- /dev/null +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTUnsuback.kt @@ -0,0 +1,5 @@ +package io.github.davidepianca98.mqtt.packets.mqtt + +import io.github.davidepianca98.mqtt.packets.MQTTPacket + +public abstract class MQTTUnsuback(public val packetIdentifier: UInt) : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTUnsubscribe.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTUnsubscribe.kt similarity index 56% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTUnsubscribe.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTUnsubscribe.kt index 0332f01266a8a07b0384133668d028b04fff270c..367f1acc441cffc98f9750a88b4e1208d292314e 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTUnsubscribe.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTUnsubscribe.kt @@ -1,6 +1,6 @@ -package mqtt.packets.mqtt +package io.github.davidepianca98.mqtt.packets.mqtt -import mqtt.packets.MQTTPacket +import io.github.davidepianca98.mqtt.packets.MQTTPacket public abstract class MQTTUnsubscribe( public val packetIdentifier: UInt, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/ConnectReturnCode.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/ConnectReturnCode.kt similarity index 87% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/ConnectReturnCode.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/ConnectReturnCode.kt index 647dc7f80c9326d2b5cdf09ff219cdb78dbd6453..8346c226a76091a54e5da7d80e50462f9212ab3f 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/ConnectReturnCode.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/ConnectReturnCode.kt @@ -1,4 +1,4 @@ -package mqtt.packets.mqttv4 +package io.github.davidepianca98.mqtt.packets.mqttv4 public enum class ConnectReturnCode(public val value: Int) { CONNECTION_ACCEPTED(0), diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Connack.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Connack.kt similarity index 72% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Connack.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Connack.kt index e7805ef223848a7af18253b56cbcc9654ab81194..74dbc0251929117339904617611dd87d19c03abd 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Connack.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Connack.kt @@ -1,13 +1,13 @@ -package mqtt.packets.mqttv4 - -import mqtt.MQTTException -import mqtt.packets.ConnectAcknowledgeFlags -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTConnack -import mqtt.packets.mqttv5.ReasonCode -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +package io.github.davidepianca98.mqtt.packets.mqttv4 + +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.ConnectAcknowledgeFlags +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTConnack +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT4Connack( connectAcknowledgeFlags: ConnectAcknowledgeFlags, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Connect.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Connect.kt similarity index 83% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Connect.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Connect.kt index 27e7f258805a80021d4109a5e4d1d0acc1c02527..64d7067e33acddce3be8cc17432b55ec0d5b2558 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Connect.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Connect.kt @@ -1,14 +1,14 @@ -package mqtt.packets.mqttv4 +package io.github.davidepianca98.mqtt.packets.mqttv4 -import mqtt.MQTTException -import mqtt.MQTTVersion -import mqtt.packets.ConnectFlags -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTConnect -import mqtt.packets.mqttv5.ReasonCode -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.MQTTVersion +import io.github.davidepianca98.mqtt.packets.ConnectFlags +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTConnect +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT4Connect( diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Disconnect.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Disconnect.kt similarity index 57% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Disconnect.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Disconnect.kt index 66f30784f5a2b3ea9195de04b795ea9bd764394c..878aeb4778b21dd289e4f30997b68bb78495318b 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Disconnect.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Disconnect.kt @@ -1,9 +1,9 @@ -package mqtt.packets.mqttv4 +package io.github.davidepianca98.mqtt.packets.mqttv4 -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTDisconnect -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTDisconnect +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT4Disconnect : MQTTDisconnect(), MQTT4Packet { diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Packet.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Packet.kt new file mode 100644 index 0000000000000000000000000000000000000000..d89f63839679cf5d5044de60b920f5ea003c7b67 --- /dev/null +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Packet.kt @@ -0,0 +1,5 @@ +package io.github.davidepianca98.mqtt.packets.mqttv4 + +import io.github.davidepianca98.mqtt.packets.MQTTPacket + +public interface MQTT4Packet : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Pingreq.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Pingreq.kt similarity index 57% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Pingreq.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Pingreq.kt index 82e2730e8fc7c4eb8a7cf752801799ac70e22a56..bd38e72ab1ec26964e5640e36cec1bec0f9519c5 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Pingreq.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Pingreq.kt @@ -1,9 +1,9 @@ -package mqtt.packets.mqttv4 +package io.github.davidepianca98.mqtt.packets.mqttv4 -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTPingreq -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPingreq +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT4Pingreq : MQTTPingreq(), MQTT4Packet { diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Pingresp.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Pingresp.kt similarity index 57% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Pingresp.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Pingresp.kt index 0f8a0c7c9943cd86ab43c4978b3f40e9d6284d55..a7a0cea30d5b918904fe840a9b469593550114dd 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Pingresp.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Pingresp.kt @@ -1,9 +1,9 @@ -package mqtt.packets.mqttv4 +package io.github.davidepianca98.mqtt.packets.mqttv4 -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTPingresp -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPingresp +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT4Pingresp : MQTTPingresp(), MQTT4Packet { diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Puback.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Puback.kt similarity index 62% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Puback.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Puback.kt index 4a9ba66d26cf935ab21a413c7aba791e8f9e5b79..0d4e06b933829af3cd313a163a00b677f1860380 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Puback.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Puback.kt @@ -1,10 +1,10 @@ -package mqtt.packets.mqttv4 +package io.github.davidepianca98.mqtt.packets.mqttv4 -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTPuback -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPuback +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT4Puback( packetId: UInt diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Pubcomp.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Pubcomp.kt similarity index 63% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Pubcomp.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Pubcomp.kt index 7606989bbe7fc2125468412282fd61dd5a267b1e..cfa9d728db0fb740e0d89d510c99842b2fefa0fe 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Pubcomp.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Pubcomp.kt @@ -1,10 +1,10 @@ -package mqtt.packets.mqttv4 +package io.github.davidepianca98.mqtt.packets.mqttv4 -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTPubcomp -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPubcomp +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT4Pubcomp( packetId: UInt diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Publish.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Publish.kt similarity index 78% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Publish.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Publish.kt index f28ec77993ca3839321e876bda6e0fab2e477548..bfa883927dc8350e715d5287b51ee95aeaf5ea1b 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Publish.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Publish.kt @@ -1,15 +1,15 @@ -package mqtt.packets.mqttv4 - -import currentTimeMillis -import mqtt.MQTTException -import mqtt.containsWildcard -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.Qos -import mqtt.packets.mqtt.MQTTPublish -import mqtt.packets.mqttv5.ReasonCode -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +package io.github.davidepianca98.mqtt.packets.mqttv4 + +import io.github.davidepianca98.currentTimeMillis +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.containsWildcard +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.Qos +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPublish +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT4Publish( retain: Boolean, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Pubrec.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Pubrec.kt similarity index 62% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Pubrec.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Pubrec.kt index 1ce6844aa3a3f4edd559b4103da90e8c1740ab24..2059561260dee1c0476efae574d8427ea6a897f2 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Pubrec.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Pubrec.kt @@ -1,10 +1,10 @@ -package mqtt.packets.mqttv4 +package io.github.davidepianca98.mqtt.packets.mqttv4 -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTPubrec -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPubrec +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT4Pubrec( packetId: UInt diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Pubrel.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Pubrel.kt similarity index 65% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Pubrel.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Pubrel.kt index f9df2b85aeb35aa70579dcf89cfda6e8cecd9fc2..b04dd644a1e9b961ef36cf5c2c9395378c8375cf 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Pubrel.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Pubrel.kt @@ -1,12 +1,12 @@ -package mqtt.packets.mqttv4 - -import mqtt.MQTTException -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTPubrel -import mqtt.packets.mqttv5.ReasonCode -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +package io.github.davidepianca98.mqtt.packets.mqttv4 + +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPubrel +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT4Pubrel( packetId: UInt diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Suback.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Suback.kt similarity index 70% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Suback.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Suback.kt index 45cf1d5114d87768c0dea51dc30654445b6da747..6df7f08c1ae95f372411e01fd10a3a723aa63a3f 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Suback.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Suback.kt @@ -1,12 +1,12 @@ -package mqtt.packets.mqttv4 - -import mqtt.MQTTException -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTSuback -import mqtt.packets.mqttv5.ReasonCode -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +package io.github.davidepianca98.mqtt.packets.mqttv4 + +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTSuback +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT4Suback( packetIdentifier: UInt, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Subscribe.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Subscribe.kt similarity index 76% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Subscribe.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Subscribe.kt index c64ba5a5fae494313870b165ac66eb0ddbe39d79..af2d735599786dd4f42b590409d22f88a66e7167 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Subscribe.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Subscribe.kt @@ -1,15 +1,15 @@ -package mqtt.packets.mqttv4 +package io.github.davidepianca98.mqtt.packets.mqttv4 -import mqtt.MQTTException -import mqtt.Subscription -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.Qos -import mqtt.packets.mqtt.MQTTSubscribe -import mqtt.packets.mqttv5.ReasonCode -import mqtt.packets.mqttv5.SubscriptionOptions -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.Subscription +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.Qos +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTSubscribe +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.mqtt.packets.mqttv5.SubscriptionOptions +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT4Subscribe( packetIdentifier: UInt, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Unsuback.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Unsuback.kt similarity index 64% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Unsuback.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Unsuback.kt index cad93c2de2e35646a6df5d1a6a11a1059eee91fa..da3d2631dc84a63716f15b1bf1cfaf2903a8e36e 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Unsuback.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Unsuback.kt @@ -1,10 +1,10 @@ -package mqtt.packets.mqttv4 +package io.github.davidepianca98.mqtt.packets.mqttv4 -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTUnsuback -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTUnsuback +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT4Unsuback( packetIdentifier: UInt diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Unsubscribe.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Unsubscribe.kt similarity index 72% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Unsubscribe.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Unsubscribe.kt index 02926b0b357a17bb1494867f9fe86be9a6d976e7..4394c05bd247813658ea14af9c9f17b49b646cb7 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Unsubscribe.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Unsubscribe.kt @@ -1,12 +1,12 @@ -package mqtt.packets.mqttv4 - -import mqtt.MQTTException -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTUnsubscribe -import mqtt.packets.mqttv5.ReasonCode -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +package io.github.davidepianca98.mqtt.packets.mqttv4 + +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTUnsubscribe +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT4Unsubscribe( packetIdentifier: UInt, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/SubackReturnCode.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/SubackReturnCode.kt similarity index 85% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/SubackReturnCode.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/SubackReturnCode.kt index 8446dd3be567e68962527cb8d21fe322de7d7b37..0c8331fabc7ed530871afde4ba5b4a3e3748b9b0 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/SubackReturnCode.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/SubackReturnCode.kt @@ -1,6 +1,6 @@ -package mqtt.packets.mqttv4 +package io.github.davidepianca98.mqtt.packets.mqttv4 -import mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.mqtt.packets.mqttv5.ReasonCode public enum class SubackReturnCode(public val value: Int) { MAXIMUM_QOS0(0), diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Auth.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Auth.kt similarity index 82% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Auth.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Auth.kt index 377780332175147b0094a985d7fa1e8cd5d7e999..10971c1545705810ced4a41688fbda528171bbd7 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Auth.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Auth.kt @@ -1,11 +1,11 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.MQTTException -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTAuth -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTAuth +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT5Auth( public val authenticateReasonCode: ReasonCode, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Connack.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Connack.kt similarity index 88% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Connack.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Connack.kt index 9f5028d052631c59adb562c4567c6b5f8d1117fa..b27e785db3ba1618db8949dae7357c67b2ea1f33 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Connack.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Connack.kt @@ -1,12 +1,12 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.MQTTException -import mqtt.packets.ConnectAcknowledgeFlags -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTConnack -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.ConnectAcknowledgeFlags +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTConnack +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT5Connack( connectAcknowledgeFlags: ConnectAcknowledgeFlags, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Connect.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Connect.kt similarity index 89% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Connect.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Connect.kt index 56f7ecd692af33b01e70981070507fe7b796db81..fce84d0d8ab3dc528f1f3b19c6e4cf55e65e9ae9 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Connect.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Connect.kt @@ -1,13 +1,13 @@ -package mqtt.packets.mqttv5 - -import mqtt.MQTTException -import mqtt.MQTTVersion -import mqtt.packets.ConnectFlags -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTConnect -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +package io.github.davidepianca98.mqtt.packets.mqttv5 + +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.MQTTVersion +import io.github.davidepianca98.mqtt.packets.ConnectFlags +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTConnect +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT5Connect( protocolName: String, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Disconnect.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Disconnect.kt similarity index 88% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Disconnect.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Disconnect.kt index 9307ba545792a23449e3ca74f6a06153a4eeadf4..ee8893d95d0c29521d862fc48608baba8d496826 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Disconnect.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Disconnect.kt @@ -1,11 +1,11 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.MQTTException -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTDisconnect -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTDisconnect +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT5Disconnect( public val reasonCode: ReasonCode, diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Packet.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Packet.kt new file mode 100644 index 0000000000000000000000000000000000000000..eceeb66e6d7eebdc3d8730a5e2f76811a0c4dff4 --- /dev/null +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Packet.kt @@ -0,0 +1,5 @@ +package io.github.davidepianca98.mqtt.packets.mqttv5 + +import io.github.davidepianca98.mqtt.packets.MQTTPacket + +public interface MQTT5Packet : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Pingreq.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Pingreq.kt similarity index 58% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Pingreq.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Pingreq.kt index 340432969e3b72db82dd86b2bc807b8920db9253..d5305fff83678d9abda5ff0f3025f7d2f3f8e847 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Pingreq.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Pingreq.kt @@ -1,10 +1,10 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.MQTTException -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTPingreq -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPingreq +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT5Pingreq : MQTTPingreq(), MQTT5Packet { diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Pingresp.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Pingresp.kt similarity index 58% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Pingresp.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Pingresp.kt index 778a0c353a7e53c43fa06cbc8c16aaf310120e2d..955768c838230e752caabbd7589e2be73b3c2c67 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Pingresp.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Pingresp.kt @@ -1,10 +1,10 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.MQTTException -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTPingresp -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPingresp +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT5Pingresp : MQTTPingresp(), MQTT5Packet { diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Properties.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Properties.kt similarity index 96% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Properties.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Properties.kt index 3bf034f0082a6432b521a5a3ba0fdc83e99ec895..5546887e9e258a182c57a8e1d8c9a414526acbae 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Properties.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Properties.kt @@ -1,4 +1,4 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 public class MQTT5Properties( public var payloadFormatIndicator: UInt? = null, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Puback.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Puback.kt similarity index 85% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Puback.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Puback.kt index b424310cbc444fead30a8a375d542b424a4af5ee..54f79a9f6e8eb6652f9e53a1e61aea174b8405d9 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Puback.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Puback.kt @@ -1,11 +1,11 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.MQTTException -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTPuback -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPuback +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT5Puback( packetId: UInt, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Pubcomp.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Pubcomp.kt similarity index 84% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Pubcomp.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Pubcomp.kt index eff09945fd295f785c84528ababbcef7182e2145..7188fa59a27c5d783c69c530e9852a59d564dd0b 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Pubcomp.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Pubcomp.kt @@ -1,11 +1,11 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.MQTTException -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTPubcomp -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPubcomp +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT5Pubcomp( packetId: UInt, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Publish.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Publish.kt similarity index 86% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Publish.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Publish.kt index 9ee43403abad37d98745cd3350fb7f23eae57d16..92a9f519462404ab45194ae065c3e60a024b1243 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Publish.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Publish.kt @@ -1,15 +1,15 @@ -package mqtt.packets.mqttv5 - -import currentTimeMillis -import mqtt.MQTTException -import mqtt.containsWildcard -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.Qos -import mqtt.packets.mqtt.MQTTPublish -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream -import validatePayloadFormat +package io.github.davidepianca98.mqtt.packets.mqttv5 + +import io.github.davidepianca98.currentTimeMillis +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.containsWildcard +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.Qos +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPublish +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.validatePayloadFormat public class MQTT5Publish( diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Pubrec.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Pubrec.kt similarity index 85% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Pubrec.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Pubrec.kt index 3bd48d1f1ed857acc747032932ed77942c3edd78..53ced26c080e9ef4d1349a411689613dd33d37ce 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Pubrec.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Pubrec.kt @@ -1,11 +1,11 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.MQTTException -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTPubrec -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPubrec +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT5Pubrec( packetId: UInt, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Pubrel.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Pubrel.kt similarity index 85% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Pubrel.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Pubrel.kt index 80c9dca9d87520570d37f1bb797b8787882a4886..105c8a5ba98e21ea384f586cce242fc491293b62 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Pubrel.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Pubrel.kt @@ -1,11 +1,11 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.MQTTException -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTPubrel -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTPubrel +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT5Pubrel( packetId: UInt, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Suback.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Suback.kt similarity index 86% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Suback.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Suback.kt index c5f06e72caa1b92ac706954a113abef85bb53055..aa350b7ced47f84928d7e33c01f4c44bbb01ea70 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Suback.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Suback.kt @@ -1,11 +1,11 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.MQTTException -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTSuback -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTSuback +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT5Suback( packetIdentifier: UInt, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Subscribe.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Subscribe.kt similarity index 87% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Subscribe.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Subscribe.kt index 39849332d61ee5e16cc6dd686fa76d223147d8e4..4de366f83317133946048cdf0bc25b9b8150930f 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Subscribe.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Subscribe.kt @@ -1,14 +1,14 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.MQTTException -import mqtt.Subscription -import mqtt.isSharedTopicFilter -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.Qos -import mqtt.packets.mqtt.MQTTSubscribe -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.Subscription +import io.github.davidepianca98.mqtt.isSharedTopicFilter +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.Qos +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTSubscribe +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT5Subscribe( packetIdentifier: UInt, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Unsuback.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Unsuback.kt similarity index 85% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Unsuback.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Unsuback.kt index 13c0e5981ffcd008b81217aed829e700e17ec825..57d3f4e22ecc47bb6ab407413c74709232e29874 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Unsuback.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Unsuback.kt @@ -1,11 +1,11 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.MQTTException -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTUnsuback -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTUnsuback +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT5Unsuback( packetIdentifier: UInt, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Unsubscribe.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Unsubscribe.kt similarity index 78% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Unsubscribe.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Unsubscribe.kt index eebfd1e6b49dbe535744ab8a7f1c0fd49545efc1..23729a0b65b6ff6b297471046ca92d0246ed6a74 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Unsubscribe.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Unsubscribe.kt @@ -1,11 +1,11 @@ -package mqtt.packets.mqttv5 - -import mqtt.MQTTException -import mqtt.packets.MQTTControlPacketType -import mqtt.packets.MQTTDeserializer -import mqtt.packets.mqtt.MQTTUnsubscribe -import socket.streams.ByteArrayInputStream -import socket.streams.ByteArrayOutputStream +package io.github.davidepianca98.mqtt.packets.mqttv5 + +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.mqtt.packets.MQTTDeserializer +import io.github.davidepianca98.mqtt.packets.mqtt.MQTTUnsubscribe +import io.github.davidepianca98.socket.streams.ByteArrayInputStream +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream public class MQTT5Unsubscribe( packetIdentifier: UInt, diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTTSerializer.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTSerializer.kt similarity index 95% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTTSerializer.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTSerializer.kt index 9942ef2c32841cd5dd5a7aa454118bc505c22428..8ad882d771ec88bc87861c29e6d936e8557a6396 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTTSerializer.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTSerializer.kt @@ -1,10 +1,10 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.MQTTException -import mqtt.packets.MQTTControlPacketType -import socket.streams.ByteArrayOutputStream -import socket.streams.encodeVariableByteInteger -import validateUTF8String +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.socket.streams.encodeVariableByteInteger +import io.github.davidepianca98.validateUTF8String public interface MQTTSerializer { diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/Property.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/Property.kt similarity index 95% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/Property.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/Property.kt index 7b10129857689778bf44dc758ae875d1149c2d06..a62bd4ed58690c051e2e33e8c51a67d724b6491e 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/Property.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/Property.kt @@ -1,4 +1,4 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 public enum class Property(public val value: UInt) { PAYLOAD_FORMAT_INDICATOR(1u), diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/ReasonCode.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/ReasonCode.kt similarity index 96% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/ReasonCode.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/ReasonCode.kt index 05bed9ad4c2eb7c2c90f68cbb359ca1fb52628c9..dfba46b5feba0b3bead849013486f754d6396288 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/ReasonCode.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/ReasonCode.kt @@ -1,4 +1,4 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 public enum class ReasonCode(public val value: Int) { SUCCESS(0), // NORMAL_DISCONNECTION, GRANTED_QOS0 diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/SubscriptionOptions.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/SubscriptionOptions.kt similarity index 81% rename from kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/SubscriptionOptions.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/SubscriptionOptions.kt index 3e72d36bc4bc0b635403c53bcad9c7c5284bdcca..c4d1cfcacbc6192eb1dde4a3f61c98ce17bc4a7a 100644 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/SubscriptionOptions.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/SubscriptionOptions.kt @@ -1,7 +1,7 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.MQTTException -import mqtt.packets.Qos +import io.github.davidepianca98.mqtt.MQTTException +import io.github.davidepianca98.mqtt.packets.Qos public data class SubscriptionOptions( public val qos: Qos = Qos.AT_MOST_ONCE, diff --git a/kmqtt-common/src/commonMain/kotlin/socket/IOException.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/IOException.kt similarity index 65% rename from kmqtt-common/src/commonMain/kotlin/socket/IOException.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/IOException.kt index dbf173eed0405e9d73fd5f2269edc2e866fdfe05..009100cd86f1f2e9d9532924243710441b291747 100644 --- a/kmqtt-common/src/commonMain/kotlin/socket/IOException.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/IOException.kt @@ -1,3 +1,3 @@ -package socket +package io.github.davidepianca98.socket public open class IOException(message: String? = null) : Exception(message) \ No newline at end of file diff --git a/kmqtt-common/src/commonMain/kotlin/socket/SocketClosedException.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/SocketClosedException.kt similarity index 67% rename from kmqtt-common/src/commonMain/kotlin/socket/SocketClosedException.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/SocketClosedException.kt index c1d92e149d54b904191950244999b51f12741736..5e028fcb4ffdcf5402534887aa75d9e5e6a4e84c 100644 --- a/kmqtt-common/src/commonMain/kotlin/socket/SocketClosedException.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/SocketClosedException.kt @@ -1,3 +1,3 @@ -package socket +package io.github.davidepianca98.socket public class SocketClosedException(message: String? = null) : IOException(message) \ No newline at end of file diff --git a/kmqtt-common/src/commonMain/kotlin/socket/SocketInterface.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/SocketInterface.kt similarity index 80% rename from kmqtt-common/src/commonMain/kotlin/socket/SocketInterface.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/SocketInterface.kt index 49de172a18832a2272ed618e7bf33d258212c3b5..032c99e286eec278257e9e26276ebed233672c95 100644 --- a/kmqtt-common/src/commonMain/kotlin/socket/SocketInterface.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/SocketInterface.kt @@ -1,4 +1,4 @@ -package socket +package io.github.davidepianca98.socket public interface SocketInterface { diff --git a/kmqtt-common/src/commonMain/kotlin/socket/SocketState.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/SocketState.kt similarity index 57% rename from kmqtt-common/src/commonMain/kotlin/socket/SocketState.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/SocketState.kt index e5f078f2f613dfcb497f118afa2dbf22c1732eca..be788936de6444cd793a00b0aa9f778cd3124a23 100644 --- a/kmqtt-common/src/commonMain/kotlin/socket/SocketState.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/SocketState.kt @@ -1,4 +1,4 @@ -package socket +package io.github.davidepianca98.socket public enum class SocketState { READ, diff --git a/kmqtt-common/src/commonMain/kotlin/socket/streams/ByteArrayInputStream.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/ByteArrayInputStream.kt similarity index 93% rename from kmqtt-common/src/commonMain/kotlin/socket/streams/ByteArrayInputStream.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/ByteArrayInputStream.kt index 796ef24901293b97f6a319e08e90875154c65a4e..b5bd189e8a6937442c7b40caf25e1ddf8f613d96 100644 --- a/kmqtt-common/src/commonMain/kotlin/socket/streams/ByteArrayInputStream.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/ByteArrayInputStream.kt @@ -1,4 +1,4 @@ -package socket.streams +package io.github.davidepianca98.socket.streams public class ByteArrayInputStream(private val array: UByteArray) : InputStream { diff --git a/kmqtt-common/src/commonMain/kotlin/socket/streams/ByteArrayOutputStream.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/ByteArrayOutputStream.kt similarity index 95% rename from kmqtt-common/src/commonMain/kotlin/socket/streams/ByteArrayOutputStream.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/ByteArrayOutputStream.kt index 4f79ddbdb1c13b71422b06a540c4ebc5b4ad7071..2496f3c9fcd3e24edafca4954510629a8524b265 100644 --- a/kmqtt-common/src/commonMain/kotlin/socket/streams/ByteArrayOutputStream.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/ByteArrayOutputStream.kt @@ -1,4 +1,4 @@ -package socket.streams +package io.github.davidepianca98.socket.streams public class ByteArrayOutputStream : OutputStream { diff --git a/kmqtt-common/src/commonMain/kotlin/socket/streams/DynamicByteBuffer.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/DynamicByteBuffer.kt similarity index 96% rename from kmqtt-common/src/commonMain/kotlin/socket/streams/DynamicByteBuffer.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/DynamicByteBuffer.kt index 13bf16fc4172d1a34dd158dda95ba42217203ee0..c2e4c7dbcff4b8bf67004b530dd823ee61c03e5a 100644 --- a/kmqtt-common/src/commonMain/kotlin/socket/streams/DynamicByteBuffer.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/DynamicByteBuffer.kt @@ -1,4 +1,4 @@ -package socket.streams +package io.github.davidepianca98.socket.streams public class DynamicByteBuffer : InputStream, OutputStream { diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/EOFException.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/EOFException.kt new file mode 100644 index 0000000000000000000000000000000000000000..c25bee7567e7f8e70720ef226d05d3f56d6d7f33 --- /dev/null +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/EOFException.kt @@ -0,0 +1,5 @@ +package io.github.davidepianca98.socket.streams + +import io.github.davidepianca98.socket.IOException + +public class EOFException : IOException() diff --git a/kmqtt-common/src/commonMain/kotlin/socket/streams/InputStream.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/InputStream.kt similarity index 92% rename from kmqtt-common/src/commonMain/kotlin/socket/streams/InputStream.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/InputStream.kt index bbf8575bd6088e1fb05229b9c2e15df8b644fa4b..5be09f7072446662800ba7ce07aae82ba5a291f3 100644 --- a/kmqtt-common/src/commonMain/kotlin/socket/streams/InputStream.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/InputStream.kt @@ -1,4 +1,4 @@ -package socket.streams +package io.github.davidepianca98.socket.streams public interface InputStream { diff --git a/kmqtt-common/src/commonMain/kotlin/socket/streams/OutputStream.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/OutputStream.kt similarity index 91% rename from kmqtt-common/src/commonMain/kotlin/socket/streams/OutputStream.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/OutputStream.kt index b3049b51dd2a83dbcc82645748668a8ad17e7a5c..ec39e1ead97f5e0d40fdabfafeab2aebb94931b7 100644 --- a/kmqtt-common/src/commonMain/kotlin/socket/streams/OutputStream.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/OutputStream.kt @@ -1,4 +1,4 @@ -package socket.streams +package io.github.davidepianca98.socket.streams public interface OutputStream { diff --git a/kmqtt-common/src/commonMain/kotlin/socket/streams/StreamExtensions.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/StreamExtensions.kt similarity index 94% rename from kmqtt-common/src/commonMain/kotlin/socket/streams/StreamExtensions.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/StreamExtensions.kt index 39abe02ccec50231f4ae7e33397f16ffdfb7bd50..2fd607605723b1bd910a34cd465b50dbdf1bdbd7 100644 --- a/kmqtt-common/src/commonMain/kotlin/socket/streams/StreamExtensions.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/StreamExtensions.kt @@ -1,4 +1,4 @@ -package socket.streams +package io.github.davidepianca98.socket.streams public fun OutputStream.encodeVariableByteInteger(value: UInt): Int { var length = 0 diff --git a/kmqtt-common/src/commonMain/kotlin/socket/tcp/Socket.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/tcp/Socket.kt similarity index 66% rename from kmqtt-common/src/commonMain/kotlin/socket/tcp/Socket.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/tcp/Socket.kt index 6da9c65a3eff90dbce06bf6a5c81f5c4768f6163..81b2bdab29db28f270b6d88e015720ba1db8b8b9 100644 --- a/kmqtt-common/src/commonMain/kotlin/socket/tcp/Socket.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/tcp/Socket.kt @@ -1,6 +1,6 @@ -package socket.tcp +package io.github.davidepianca98.socket.tcp -import socket.SocketInterface +import io.github.davidepianca98.socket.SocketInterface public expect open class Socket : SocketInterface { diff --git a/kmqtt-common/src/commonMain/kotlin/socket/tls/TLSClientSettings.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/tls/TLSClientSettings.kt similarity index 96% rename from kmqtt-common/src/commonMain/kotlin/socket/tls/TLSClientSettings.kt rename to kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/tls/TLSClientSettings.kt index 9537a62c6e76e6beaf64a23e7d83797e1757d7ff..7aa1f58bc31e8ccc7f007a27865f7f1dd8fdd54d 100644 --- a/kmqtt-common/src/commonMain/kotlin/socket/tls/TLSClientSettings.kt +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/tls/TLSClientSettings.kt @@ -1,4 +1,4 @@ -package socket.tls +package io.github.davidepianca98.socket.tls /** * TLS settings diff --git a/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/tls/TLSSocket.kt b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/tls/TLSSocket.kt new file mode 100644 index 0000000000000000000000000000000000000000..1ed4e6f8a2ee7cc5fdf95c314279ba198cdcb00d --- /dev/null +++ b/kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/tls/TLSSocket.kt @@ -0,0 +1,5 @@ +package io.github.davidepianca98.socket.tls + +import io.github.davidepianca98.socket.tcp.Socket + +public expect open class TLSSocket : Socket \ No newline at end of file diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/MQTTException.kt b/kmqtt-common/src/commonMain/kotlin/mqtt/MQTTException.kt deleted file mode 100644 index 80774e060c687585435f4dc4135d114c9d9608e5..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/MQTTException.kt +++ /dev/null @@ -1,5 +0,0 @@ -package mqtt - -import mqtt.packets.mqttv5.ReasonCode - -public class MQTTException(public val reasonCode: ReasonCode) : Exception(reasonCode.toString()) diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTAuth.kt b/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTAuth.kt deleted file mode 100644 index 3873a955c4d6e986cb879a8be848766caf269a17..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTAuth.kt +++ /dev/null @@ -1,5 +0,0 @@ -package mqtt.packets.mqtt - -import mqtt.packets.MQTTPacket - -public abstract class MQTTAuth : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTConnack.kt b/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTConnack.kt deleted file mode 100644 index 9153ca27711caebd96c2d4e5fdd3642558071afc..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTConnack.kt +++ /dev/null @@ -1,6 +0,0 @@ -package mqtt.packets.mqtt - -import mqtt.packets.ConnectAcknowledgeFlags -import mqtt.packets.MQTTPacket - -public abstract class MQTTConnack(public val connectAcknowledgeFlags: ConnectAcknowledgeFlags) : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTDisconnect.kt b/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTDisconnect.kt deleted file mode 100644 index 2f40b11039c2a3faf67c7e1907d8aeb462419673..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTDisconnect.kt +++ /dev/null @@ -1,5 +0,0 @@ -package mqtt.packets.mqtt - -import mqtt.packets.MQTTPacket - -public abstract class MQTTDisconnect : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPingreq.kt b/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPingreq.kt deleted file mode 100644 index 497c20eafaf597a8e003aec0b5c781c691a887df..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPingreq.kt +++ /dev/null @@ -1,5 +0,0 @@ -package mqtt.packets.mqtt - -import mqtt.packets.MQTTPacket - -public abstract class MQTTPingreq : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPingresp.kt b/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPingresp.kt deleted file mode 100644 index 102132da93b59486820f737fce04b839ef16ea49..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPingresp.kt +++ /dev/null @@ -1,5 +0,0 @@ -package mqtt.packets.mqtt - -import mqtt.packets.MQTTPacket - -public abstract class MQTTPingresp : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPuback.kt b/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPuback.kt deleted file mode 100644 index 3e3138be32da71d37731426dface0384cc962dce..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPuback.kt +++ /dev/null @@ -1,5 +0,0 @@ -package mqtt.packets.mqtt - -import mqtt.packets.MQTTPacket - -public abstract class MQTTPuback(public val packetId: UInt) : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPubcomp.kt b/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPubcomp.kt deleted file mode 100644 index f07a742c9a9dec9f2491d7643843efb4a1cbcf9e..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPubcomp.kt +++ /dev/null @@ -1,5 +0,0 @@ -package mqtt.packets.mqtt - -import mqtt.packets.MQTTPacket - -public abstract class MQTTPubcomp(public val packetId: UInt) : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPubrec.kt b/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPubrec.kt deleted file mode 100644 index c295f9eb5bbadb4f46effb2a62d37ee192a787de..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPubrec.kt +++ /dev/null @@ -1,5 +0,0 @@ -package mqtt.packets.mqtt - -import mqtt.packets.MQTTPacket - -public abstract class MQTTPubrec(public val packetId: UInt) : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPubrel.kt b/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPubrel.kt deleted file mode 100644 index 9f4ab7105ac5079a1b94050d0742c8bbba07052e..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPubrel.kt +++ /dev/null @@ -1,5 +0,0 @@ -package mqtt.packets.mqtt - -import mqtt.packets.MQTTPacket - -public abstract class MQTTPubrel(public val packetId: UInt) : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTSuback.kt b/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTSuback.kt deleted file mode 100644 index 46dcdd1ca34507f8212082a6207c0abd5cc70845..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTSuback.kt +++ /dev/null @@ -1,5 +0,0 @@ -package mqtt.packets.mqtt - -import mqtt.packets.MQTTPacket - -public abstract class MQTTSuback(public val packetIdentifier: UInt) : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTSubscribe.kt b/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTSubscribe.kt deleted file mode 100644 index bd399c540a7d56f8a5905dc105c17880c58bea80..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTSubscribe.kt +++ /dev/null @@ -1,9 +0,0 @@ -package mqtt.packets.mqtt - -import mqtt.Subscription -import mqtt.packets.MQTTPacket - -public abstract class MQTTSubscribe( - public val packetIdentifier: UInt, - public val subscriptions: List<Subscription> -) : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTUnsuback.kt b/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTUnsuback.kt deleted file mode 100644 index 939a3b8b6ab7eef8c45242256e9d2d0a179548e2..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTUnsuback.kt +++ /dev/null @@ -1,5 +0,0 @@ -package mqtt.packets.mqtt - -import mqtt.packets.MQTTPacket - -public abstract class MQTTUnsuback(public val packetIdentifier: UInt) : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Packet.kt b/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Packet.kt deleted file mode 100644 index 1b4334074299d60276f0a0b13253112efbda7816..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Packet.kt +++ /dev/null @@ -1,5 +0,0 @@ -package mqtt.packets.mqttv4 - -import mqtt.packets.MQTTPacket - -public interface MQTT4Packet : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Packet.kt b/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Packet.kt deleted file mode 100644 index 5f5ac5af3fe0068e2589afb88af4a2e8afe10d4b..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Packet.kt +++ /dev/null @@ -1,5 +0,0 @@ -package mqtt.packets.mqttv5 - -import mqtt.packets.MQTTPacket - -public interface MQTT5Packet : MQTTPacket diff --git a/kmqtt-common/src/commonMain/kotlin/socket/streams/EOFException.kt b/kmqtt-common/src/commonMain/kotlin/socket/streams/EOFException.kt deleted file mode 100644 index 5a26fe96ab55ca62315313ab3aa51601abb3ce32..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/commonMain/kotlin/socket/streams/EOFException.kt +++ /dev/null @@ -1,5 +0,0 @@ -package socket.streams - -import socket.IOException - -public class EOFException : IOException() diff --git a/kmqtt-common/src/commonMain/kotlin/socket/tls/TLSSocket.kt b/kmqtt-common/src/commonMain/kotlin/socket/tls/TLSSocket.kt deleted file mode 100644 index 6ec585d78c69150b961c618b6f9d9aaacd81ab82..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/commonMain/kotlin/socket/tls/TLSSocket.kt +++ /dev/null @@ -1,5 +0,0 @@ -package socket.tls - -import socket.tcp.Socket - -public expect open class TLSSocket : Socket \ No newline at end of file diff --git a/kmqtt-common/src/commonTest/kotlin/mqtt/CommonUtilsTest.kt b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/CommonUtilsTest.kt similarity index 93% rename from kmqtt-common/src/commonTest/kotlin/mqtt/CommonUtilsTest.kt rename to kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/CommonUtilsTest.kt index 9a9a02473705321755054f42194deefa19b8f443..7efdf90e2c39f959f67db8409a6c0752a0b4aaa2 100644 --- a/kmqtt-common/src/commonTest/kotlin/mqtt/CommonUtilsTest.kt +++ b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/CommonUtilsTest.kt @@ -1,8 +1,8 @@ -package mqtt +package io.github.davidepianca98.mqtt -import sha1 -import toBase64 -import validateUTF8String +import io.github.davidepianca98.sha1 +import io.github.davidepianca98.toBase64 +import io.github.davidepianca98.validateUTF8String import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFalse diff --git a/kmqtt-common/src/commonTest/kotlin/mqtt/TopicUtilsTest.kt b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/TopicUtilsTest.kt similarity index 98% rename from kmqtt-common/src/commonTest/kotlin/mqtt/TopicUtilsTest.kt rename to kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/TopicUtilsTest.kt index 22b10ff4d9223a698f50f8d232fe7bc6adfa4980..2bc71cfed28c9669702ed213420c5e9e1714eeaa 100644 --- a/kmqtt-common/src/commonTest/kotlin/mqtt/TopicUtilsTest.kt +++ b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/TopicUtilsTest.kt @@ -1,6 +1,5 @@ -package mqtt +package io.github.davidepianca98.mqtt -import mqtt.* import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFalse diff --git a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTAuthTest.kt b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTAuthTest.kt similarity index 89% rename from kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTAuthTest.kt rename to kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTAuthTest.kt index b591f8677229c435f411fef6683cc3160ca55055..63b69e49aff358193851107a1e6e77268b545a3a 100644 --- a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTAuthTest.kt +++ b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTAuthTest.kt @@ -1,8 +1,5 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.packets.mqttv5.MQTT5Auth -import mqtt.packets.mqttv5.MQTT5Properties -import mqtt.packets.mqttv5.ReasonCode import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue diff --git a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTConnackTest.kt b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTConnackTest.kt similarity index 88% rename from kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTConnackTest.kt rename to kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTConnackTest.kt index 59c001962486d55ad4becf807461b32c8721cd73..0a83bc33c82dbc0b0307b09323fdeb0e975007f8 100644 --- a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTConnackTest.kt +++ b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTConnackTest.kt @@ -1,9 +1,6 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.packets.ConnectAcknowledgeFlags -import mqtt.packets.mqttv5.MQTT5Connack -import mqtt.packets.mqttv5.MQTT5Properties -import mqtt.packets.mqttv5.ReasonCode +import io.github.davidepianca98.mqtt.packets.ConnectAcknowledgeFlags import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue diff --git a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTConnectTest.kt b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTConnectTest.kt similarity index 92% rename from kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTConnectTest.kt rename to kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTConnectTest.kt index cda2de1d85993d16c71849364fd0dd2ca85ca459..d14003a9f59ccd363c8a1d47d9aae2600cfbfb34 100644 --- a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTConnectTest.kt +++ b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTConnectTest.kt @@ -1,8 +1,7 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.packets.ConnectFlags -import mqtt.packets.Qos -import mqtt.packets.mqttv5.MQTT5Connect +import io.github.davidepianca98.mqtt.packets.ConnectFlags +import io.github.davidepianca98.mqtt.packets.Qos import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue diff --git a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTDisconnectTest.kt b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTDisconnectTest.kt similarity index 83% rename from kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTDisconnectTest.kt rename to kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTDisconnectTest.kt index b1e2ee148474fe7daeecf15ac5a4001ee0470409..6bd86ad642440d084a143e6505c1c1b9fe75bf3b 100644 --- a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTDisconnectTest.kt +++ b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTDisconnectTest.kt @@ -1,7 +1,5 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.packets.mqttv5.MQTT5Disconnect -import mqtt.packets.mqttv5.ReasonCode import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue diff --git a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPingreqTest.kt b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPingreqTest.kt similarity index 85% rename from kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPingreqTest.kt rename to kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPingreqTest.kt index b45a862eac00955b1ff334e146898afb69c9cbb9..c54f1fae78d3bce999b224ca232e50bd49c33e37 100644 --- a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPingreqTest.kt +++ b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPingreqTest.kt @@ -1,6 +1,5 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.packets.mqttv5.MQTT5Pingreq import kotlin.test.Test import kotlin.test.assertTrue diff --git a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPingrespTest.kt b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPingrespTest.kt similarity index 85% rename from kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPingrespTest.kt rename to kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPingrespTest.kt index f294d42c9cae1bc34f44945bfd4a2c5400455b18..4da7635443cb620b14f12fb9ba5fbfbb2bd7a4a0 100644 --- a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPingrespTest.kt +++ b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPingrespTest.kt @@ -1,6 +1,5 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.packets.mqttv5.MQTT5Pingresp import kotlin.test.Test import kotlin.test.assertTrue diff --git a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPubackTest.kt b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPubackTest.kt similarity index 89% rename from kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPubackTest.kt rename to kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPubackTest.kt index 4e7ec56bdf4ca743ac8774a3e3e0cb228981e7cc..d4374727a1e154f55b0d08b4c2ef7c8c95a0f60f 100644 --- a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPubackTest.kt +++ b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPubackTest.kt @@ -1,6 +1,5 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.packets.mqttv5.MQTT5Puback import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue diff --git a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPubcompTest.kt b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPubcompTest.kt similarity index 89% rename from kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPubcompTest.kt rename to kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPubcompTest.kt index e4167a884f0d257026d42db079d049ca3b429d61..8e3ea2b83f4a6adc166f416759a3fd382df91244 100644 --- a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPubcompTest.kt +++ b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPubcompTest.kt @@ -1,6 +1,5 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.packets.mqttv5.MQTT5Pubcomp import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue diff --git a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPublishTest.kt b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPublishTest.kt similarity index 91% rename from kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPublishTest.kt rename to kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPublishTest.kt index 4a4198fe3b63890ea790933c3997ab5b516623eb..78e923731790470d0dcf8937867b404c41e6c52a 100644 --- a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPublishTest.kt +++ b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPublishTest.kt @@ -1,7 +1,6 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.packets.Qos -import mqtt.packets.mqttv5.MQTT5Publish +import io.github.davidepianca98.mqtt.packets.Qos import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue diff --git a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPubrecTest.kt b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPubrecTest.kt similarity index 88% rename from kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPubrecTest.kt rename to kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPubrecTest.kt index 4911f1965f4a2fd817459da2ca20175488c73089..801e24abb01b02d593673fc41eb0b8273d4fadfc 100644 --- a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPubrecTest.kt +++ b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPubrecTest.kt @@ -1,6 +1,5 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.packets.mqttv5.MQTT5Pubrec import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue diff --git a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPubrelTest.kt b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPubrelTest.kt similarity index 88% rename from kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPubrelTest.kt rename to kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPubrelTest.kt index 708f2f38c5e5861ebb536fb0fd9305e8702740ad..0efc2bb10b83682df1ea83dc0d0c6c0f2645cc3e 100644 --- a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTPubrelTest.kt +++ b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTPubrelTest.kt @@ -1,6 +1,5 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.packets.mqttv5.MQTT5Pubrel import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue diff --git a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTSubackTest.kt b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTSubackTest.kt similarity index 87% rename from kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTSubackTest.kt rename to kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTSubackTest.kt index 8e1c8d522709418747f5008bb8f08ac91c57509b..4d6a06a5883c6481bffea286bb9697aedceb2293 100644 --- a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTSubackTest.kt +++ b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTSubackTest.kt @@ -1,7 +1,5 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.packets.mqttv5.MQTT5Suback -import mqtt.packets.mqttv5.ReasonCode import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue diff --git a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTSubscribeTest.kt b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTSubscribeTest.kt similarity index 87% rename from kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTSubscribeTest.kt rename to kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTSubscribeTest.kt index 9c93c75e8df1e6aec343927a8e683d6e1c48c466..3bb3d2fb33573f32aac0b399951b5a656b14d1b4 100644 --- a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTSubscribeTest.kt +++ b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTSubscribeTest.kt @@ -1,9 +1,7 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.Subscription -import mqtt.packets.Qos -import mqtt.packets.mqttv5.MQTT5Subscribe -import mqtt.packets.mqttv5.SubscriptionOptions +import io.github.davidepianca98.mqtt.Subscription +import io.github.davidepianca98.mqtt.packets.Qos import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue diff --git a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTUnsubackTest.kt b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTUnsubackTest.kt similarity index 87% rename from kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTUnsubackTest.kt rename to kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTUnsubackTest.kt index e03ae53ba4e084382fd471b04f715874bd77375e..2fb46e83bef8716f9a4eaffa56e544518c120962 100644 --- a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTUnsubackTest.kt +++ b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTUnsubackTest.kt @@ -1,7 +1,5 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.packets.mqttv5.MQTT5Unsuback -import mqtt.packets.mqttv5.ReasonCode import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue diff --git a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTUnsubscribeTest.kt b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTUnsubscribeTest.kt similarity index 94% rename from kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTUnsubscribeTest.kt rename to kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTUnsubscribeTest.kt index 26c0b612a6350b1bb452b6f6989c37f7b6da86ce..a11b91c512cb05dc4151c77045163202f473c55d 100644 --- a/kmqtt-common/src/commonTest/kotlin/mqtt/packets/mqttv5/MQTTUnsubscribeTest.kt +++ b/kmqtt-common/src/commonTest/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTTUnsubscribeTest.kt @@ -1,6 +1,5 @@ -package mqtt.packets.mqttv5 +package io.github.davidepianca98.mqtt.packets.mqttv5 -import mqtt.packets.mqttv5.MQTT5Unsubscribe import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue diff --git a/kmqtt-common/src/iosArm64Main/kotlin/Posix.kt b/kmqtt-common/src/iosArm64Main/kotlin/io/github/davidepianca98/Posix.kt similarity index 99% rename from kmqtt-common/src/iosArm64Main/kotlin/Posix.kt rename to kmqtt-common/src/iosArm64Main/kotlin/io/github/davidepianca98/Posix.kt index ed515404b3948d6acb505b30e3c0ac6e8e0c28ff..c1fe27635dec023d886c6a06d750db25818386ce 100644 --- a/kmqtt-common/src/iosArm64Main/kotlin/Posix.kt +++ b/kmqtt-common/src/iosArm64Main/kotlin/io/github/davidepianca98/Posix.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import platform.posix.* diff --git a/kmqtt-common/src/iosSimulatorArm64Main/kotlin/Posix.kt b/kmqtt-common/src/iosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt similarity index 99% rename from kmqtt-common/src/iosSimulatorArm64Main/kotlin/Posix.kt rename to kmqtt-common/src/iosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt index ed515404b3948d6acb505b30e3c0ac6e8e0c28ff..c1fe27635dec023d886c6a06d750db25818386ce 100644 --- a/kmqtt-common/src/iosSimulatorArm64Main/kotlin/Posix.kt +++ b/kmqtt-common/src/iosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import platform.posix.* diff --git a/kmqtt-common/src/iosX64Main/kotlin/Posix.kt b/kmqtt-common/src/iosX64Main/kotlin/io/github/davidepianca98/Posix.kt similarity index 99% rename from kmqtt-common/src/iosX64Main/kotlin/Posix.kt rename to kmqtt-common/src/iosX64Main/kotlin/io/github/davidepianca98/Posix.kt index ed515404b3948d6acb505b30e3c0ac6e8e0c28ff..c1fe27635dec023d886c6a06d750db25818386ce 100644 --- a/kmqtt-common/src/iosX64Main/kotlin/Posix.kt +++ b/kmqtt-common/src/iosX64Main/kotlin/io/github/davidepianca98/Posix.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import platform.posix.* diff --git a/kmqtt-common/src/jsMain/kotlin/IgnoreJs.kt b/kmqtt-common/src/jsMain/kotlin/IgnoreJs.kt deleted file mode 100644 index 4cc375a72e31d96765282f40c733f54b143f2f49..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/jsMain/kotlin/IgnoreJs.kt +++ /dev/null @@ -1 +0,0 @@ -public actual typealias IgnoreJs = kotlin.test.Ignore \ No newline at end of file diff --git a/kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/IgnoreJs.kt b/kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/IgnoreJs.kt new file mode 100644 index 0000000000000000000000000000000000000000..a06f9507dc81ada17a290601c9582b257c6d74a9 --- /dev/null +++ b/kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/IgnoreJs.kt @@ -0,0 +1,5 @@ +package io.github.davidepianca98 + +import kotlin.test.Ignore + +public actual typealias IgnoreJs = Ignore \ No newline at end of file diff --git a/kmqtt-common/src/jsMain/kotlin/currentTimeMillis.kt b/kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/currentTimeMillis.kt similarity index 72% rename from kmqtt-common/src/jsMain/kotlin/currentTimeMillis.kt rename to kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/currentTimeMillis.kt index 6683b4f7884caa2197344bea11130d66b1bec07b..fb4c53b905c6f2651628d8486d0d50cbb97b9f98 100644 --- a/kmqtt-common/src/jsMain/kotlin/currentTimeMillis.kt +++ b/kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/currentTimeMillis.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlin.js.Date public actual fun currentTimeMillis(): Long = Date.now().toLong() \ No newline at end of file diff --git a/kmqtt-common/src/jsMain/kotlin/socket/tcp/Socket.kt b/kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/socket/tcp/Socket.kt similarity index 87% rename from kmqtt-common/src/jsMain/kotlin/socket/tcp/Socket.kt rename to kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/socket/tcp/Socket.kt index 944220b4accfce9bdbcbb81cca6508fcb7d25609..93542ce93353fe8a727f55fbb74387e996def5d9 100644 --- a/kmqtt-common/src/jsMain/kotlin/socket/tcp/Socket.kt +++ b/kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/socket/tcp/Socket.kt @@ -1,11 +1,11 @@ -package socket.tcp +package io.github.davidepianca98.socket.tcp import node.buffer.Buffer import node.net.Socket import node.net.SocketEvent -import socket.SocketInterface -import socket.SocketState -import toBuffer +import io.github.davidepianca98.socket.SocketInterface +import io.github.davidepianca98.socket.SocketState +import io.github.davidepianca98.toBuffer public actual open class Socket( protected val socket: Socket, diff --git a/kmqtt-common/src/jsMain/kotlin/socket/tls/NodeTls.kt b/kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/socket/tls/NodeTls.kt similarity index 94% rename from kmqtt-common/src/jsMain/kotlin/socket/tls/NodeTls.kt rename to kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/socket/tls/NodeTls.kt index d2d56c034a356d61a9e640e70a70272553e2f138..760911585f3fe5e63b6e0cf24d25444e7e159bf9 100644 --- a/kmqtt-common/src/jsMain/kotlin/socket/tls/NodeTls.kt +++ b/kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/socket/tls/NodeTls.kt @@ -1,7 +1,7 @@ @file:JsModule("node:tls") -package socket.tls +package io.github.davidepianca98.socket.tls import node.buffer.Buffer import node.net.Server diff --git a/kmqtt-common/src/jsMain/kotlin/socket/tls/TLSSocket.kt b/kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/socket/tls/TLSSocket.kt similarity index 54% rename from kmqtt-common/src/jsMain/kotlin/socket/tls/TLSSocket.kt rename to kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/socket/tls/TLSSocket.kt index 33aa7d51c42f9816da14772a9775d79841a542a6..74f99f85101c6312a0693005cc6df85ffad568dd 100644 --- a/kmqtt-common/src/jsMain/kotlin/socket/tls/TLSSocket.kt +++ b/kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/socket/tls/TLSSocket.kt @@ -1,7 +1,7 @@ -package socket.tls +package io.github.davidepianca98.socket.tls -import socket.SocketState -import socket.tcp.Socket +import io.github.davidepianca98.socket.SocketState +import io.github.davidepianca98.socket.tcp.Socket public actual open class TLSSocket( socket: node.net.Socket, diff --git a/kmqtt-common/src/jsMain/kotlin/utils.kt b/kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/utils.kt similarity index 92% rename from kmqtt-common/src/jsMain/kotlin/utils.kt rename to kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/utils.kt index 43eab3c17ffd62e426f8236985cde874edd91f6b..6bef999cb3b20f69191cd5cfa93c9978de6a33fd 100644 --- a/kmqtt-common/src/jsMain/kotlin/utils.kt +++ b/kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/utils.kt @@ -1,4 +1,4 @@ - +package io.github.davidepianca98 import node.buffer.Buffer public fun UByteArray.toBuffer(): Buffer { diff --git a/kmqtt-common/src/jvmMain/kotlin/IgnoreJs.kt b/kmqtt-common/src/jvmMain/kotlin/io/github/davidepianca98/IgnoreJs.kt similarity index 74% rename from kmqtt-common/src/jvmMain/kotlin/IgnoreJs.kt rename to kmqtt-common/src/jvmMain/kotlin/io/github/davidepianca98/IgnoreJs.kt index cc5d7d5c1ec2c2fd09e5aba5186496b15368dd93..a7be2064239f4013c86f69dd2eefeca6ae0c84b2 100644 --- a/kmqtt-common/src/jvmMain/kotlin/IgnoreJs.kt +++ b/kmqtt-common/src/jvmMain/kotlin/io/github/davidepianca98/IgnoreJs.kt @@ -1,2 +1,4 @@ +package io.github.davidepianca98 + @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) public actual annotation class IgnoreJs \ No newline at end of file diff --git a/kmqtt-common/src/jvmMain/kotlin/currentTimeMillis.kt b/kmqtt-common/src/jvmMain/kotlin/io/github/davidepianca98/currentTimeMillis.kt similarity index 71% rename from kmqtt-common/src/jvmMain/kotlin/currentTimeMillis.kt rename to kmqtt-common/src/jvmMain/kotlin/io/github/davidepianca98/currentTimeMillis.kt index 866de71f256e8ba7965390b591885e25430d0d15..a73112fbc3ccaf694bdaa0853c3627b5bc5a6c5a 100644 --- a/kmqtt-common/src/jvmMain/kotlin/currentTimeMillis.kt +++ b/kmqtt-common/src/jvmMain/kotlin/io/github/davidepianca98/currentTimeMillis.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + public actual fun currentTimeMillis(): Long { return System.currentTimeMillis() } \ No newline at end of file diff --git a/kmqtt-common/src/jvmMain/kotlin/socket/tcp/Socket.kt b/kmqtt-common/src/jvmMain/kotlin/io/github/davidepianca98/socket/tcp/Socket.kt similarity index 90% rename from kmqtt-common/src/jvmMain/kotlin/socket/tcp/Socket.kt rename to kmqtt-common/src/jvmMain/kotlin/io/github/davidepianca98/socket/tcp/Socket.kt index 45da3463203373dcde7815f8e18c535858289a9c..e040290aed8577a397415799443af85fbc8d025e 100644 --- a/kmqtt-common/src/jvmMain/kotlin/socket/tcp/Socket.kt +++ b/kmqtt-common/src/jvmMain/kotlin/io/github/davidepianca98/socket/tcp/Socket.kt @@ -1,9 +1,9 @@ -package socket.tcp +package io.github.davidepianca98.socket.tcp -import socket.IOException -import socket.SocketClosedException -import socket.SocketInterface -import toUByteArray +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.SocketClosedException +import io.github.davidepianca98.socket.SocketInterface +import io.github.davidepianca98.toUByteArray import java.nio.BufferOverflowException import java.nio.ByteBuffer import java.nio.channels.SelectionKey diff --git a/kmqtt-common/src/jvmMain/kotlin/socket/tls/TLSSocket.kt b/kmqtt-common/src/jvmMain/kotlin/io/github/davidepianca98/socket/tls/TLSSocket.kt similarity index 96% rename from kmqtt-common/src/jvmMain/kotlin/socket/tls/TLSSocket.kt rename to kmqtt-common/src/jvmMain/kotlin/io/github/davidepianca98/socket/tls/TLSSocket.kt index 62ec6a0bf7962096179805609380d3ee01556f1b..930ed67978ad57c589201601faf0016c6f8bfab8 100644 --- a/kmqtt-common/src/jvmMain/kotlin/socket/tls/TLSSocket.kt +++ b/kmqtt-common/src/jvmMain/kotlin/io/github/davidepianca98/socket/tls/TLSSocket.kt @@ -1,9 +1,9 @@ -package socket.tls +package io.github.davidepianca98.socket.tls -import socket.IOException -import socket.SocketClosedException -import socket.tcp.Socket -import toUByteArray +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.SocketClosedException +import io.github.davidepianca98.socket.tcp.Socket +import io.github.davidepianca98.toUByteArray import java.nio.BufferOverflowException import java.nio.ByteBuffer import java.nio.channels.SelectionKey diff --git a/kmqtt-common/src/jvmMain/kotlin/utils.kt b/kmqtt-common/src/jvmMain/kotlin/io/github/davidepianca98/utils.kt similarity index 86% rename from kmqtt-common/src/jvmMain/kotlin/utils.kt rename to kmqtt-common/src/jvmMain/kotlin/io/github/davidepianca98/utils.kt index f74998f5b8da0736e26ba688ec1827ef305f5b0e..f1634622c8106582af8c8d78e192265723d153e9 100644 --- a/kmqtt-common/src/jvmMain/kotlin/utils.kt +++ b/kmqtt-common/src/jvmMain/kotlin/io/github/davidepianca98/utils.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import java.nio.ByteBuffer public fun ByteBuffer.toUByteArray(): UByteArray { diff --git a/kmqtt-common/src/linuxArm64Main/kotlin/Posix.kt b/kmqtt-common/src/linuxArm64Main/kotlin/io/github/davidepianca98/Posix.kt similarity index 99% rename from kmqtt-common/src/linuxArm64Main/kotlin/Posix.kt rename to kmqtt-common/src/linuxArm64Main/kotlin/io/github/davidepianca98/Posix.kt index 9a1d5f1511273b1603e35da417966f5d4a6d03f5..2fa6eeb7d73863f31722128958e29f74b6bd29a2 100644 --- a/kmqtt-common/src/linuxArm64Main/kotlin/Posix.kt +++ b/kmqtt-common/src/linuxArm64Main/kotlin/io/github/davidepianca98/Posix.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import platform.posix.* diff --git a/kmqtt-common/src/linuxX64Main/kotlin/Posix.kt b/kmqtt-common/src/linuxX64Main/kotlin/io/github/davidepianca98/Posix.kt similarity index 99% rename from kmqtt-common/src/linuxX64Main/kotlin/Posix.kt rename to kmqtt-common/src/linuxX64Main/kotlin/io/github/davidepianca98/Posix.kt index 1afd4dfb8357c318e60dd3308515e89695b63a3f..5135fd5535fc96c8b14bf4c0ca5b0b90b6708b27 100644 --- a/kmqtt-common/src/linuxX64Main/kotlin/Posix.kt +++ b/kmqtt-common/src/linuxX64Main/kotlin/io/github/davidepianca98/Posix.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import platform.posix.* diff --git a/kmqtt-common/src/macosArm64Main/kotlin/Posix.kt b/kmqtt-common/src/macosArm64Main/kotlin/io/github/davidepianca98/Posix.kt similarity index 99% rename from kmqtt-common/src/macosArm64Main/kotlin/Posix.kt rename to kmqtt-common/src/macosArm64Main/kotlin/io/github/davidepianca98/Posix.kt index ed515404b3948d6acb505b30e3c0ac6e8e0c28ff..c1fe27635dec023d886c6a06d750db25818386ce 100644 --- a/kmqtt-common/src/macosArm64Main/kotlin/Posix.kt +++ b/kmqtt-common/src/macosArm64Main/kotlin/io/github/davidepianca98/Posix.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import platform.posix.* diff --git a/kmqtt-common/src/macosX64Main/kotlin/Posix.kt b/kmqtt-common/src/macosX64Main/kotlin/Posix.kt deleted file mode 100644 index ed515404b3948d6acb505b30e3c0ac6e8e0c28ff..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/macosX64Main/kotlin/Posix.kt +++ /dev/null @@ -1,173 +0,0 @@ -import kotlinx.cinterop.* -import platform.posix.* - -public actual fun send(socket: Int, buf: CValuesRef<ByteVar>?, len: Int, flags: Int): Int { - return platform.posix.send(socket.convert(), buf, len.convert(), flags or MSG_NOSIGNAL).convert() -} - -public actual fun recv(socket: Int, buf: CValuesRef<ByteVar>?, len: Int, flags: Int): Int { - return platform.posix.recv(socket, buf, len.convert(), flags).convert() -} - -public actual fun shutdown(socket: Int): Int { - return shutdown(socket, SHUT_WR) -} - -public actual fun close(socket: Int): Int { - return platform.posix.close(socket) -} - -public actual fun memset(__s: CValuesRef<*>?, __c: Int, __n: ULong): CPointer<out CPointed>? { - return platform.posix.memset(__s, __c, __n) -} - -public actual fun sendto( - __fd: Int, - __buf: CValuesRef<*>?, - __n: ULong, - __flags: Int, - __addr: CValuesRef<sockaddr>?, - __addr_len: UInt -): Long { - return platform.posix.sendto(__fd, __buf, __n, __flags, __addr, __addr_len) -} - -public actual fun recvfrom( - __fd: Int, - __buf: CValuesRef<*>?, - __n: ULong, - __flags: Int, - __addr: CValuesRef<sockaddr>?, - __addr_len: CValuesRef<UIntVarOf<UInt>>? -): Long { - return platform.posix.recvfrom(__fd, __buf, __n, __flags, __addr, __addr_len) -} - -public actual fun inet_ntop( - __af: Int, - __cp: CValuesRef<*>?, - __buf: CValuesRef<ByteVarOf<Byte>>?, - __len: UInt -): CPointer<ByteVarOf<Byte>>? { - return platform.darwin.inet_ntop(__af, __cp, __buf, __len) -} - -public actual fun inet_pton(__af: Int, __cp: String?, __buf: CValuesRef<*>?): Int { - return platform.darwin.inet_pton(__af, __cp, __buf) -} - -private fun htons(value: UShort): UShort { - return if (BYTE_ORDER == BIG_ENDIAN) { - value - } else { - platform.builtin.builtin_bswap16(value.convert()).convert() - } -} - -public actual fun MemScope.sockaddrIn(sin_family: UShort, sin_port: UShort): sockaddr_in { - val sockaddr = alloc<sockaddr_in>() - platform.posix.memset(sockaddr.ptr, 0, sizeOf<sockaddr_in>().convert()) - sockaddr.sin_family = sin_family.toUByte() - sockaddr.sin_port = htons(sin_port) - return sockaddr -} - -public actual fun MemScope.getPortFromSockaddrIn(sockaddr: sockaddr_in): UShort { - return sockaddr.sin_port -} - -public actual fun setsockopt(__fd: Int, __level: Int, __optname: Int, __optval: CValuesRef<*>?, __optlen: UInt): Int { - return platform.posix.setsockopt(__fd.convert(), __level, __optname, __optval, __optlen.convert()) -} - -public actual fun bind(__fd: Int, __addr: CValuesRef<sockaddr>?, __len: UInt): Int { - return platform.posix.bind(__fd, __addr, __len) -} - -public actual fun set_non_blocking(__fd: Int): Int { - return fcntl(__fd, F_SETFL, O_NONBLOCK) -} - -public actual fun socket(__domain: Int, __type: Int, __protocol: Int): Int { - return platform.posix.socket(__domain, __type, __protocol) -} - -public actual fun connect(__fd: Int, __addr: CValuesRef<sockaddr>?, __len: UInt): Int { - return platform.posix.connect(__fd, __addr, __len) -} - -public actual fun accept(__fd: Int, __addr: CValuesRef<sockaddr>?, __addr_len: CValuesRef<UIntVarOf<UInt>>?): Int { - return platform.posix.accept(__fd, __addr, __addr_len) -} - -public actual fun listen(__fd: Int, __n: Int): Int { - return platform.posix.listen(__fd, __n) -} - -public actual fun MemScope.select( - __nfds: Int, - __readfds: CValuesRef<fd_set>?, - __writefds: CValuesRef<fd_set>?, - __exceptfds: CValuesRef<fd_set>?, - timeout: Long -): Int { - val timeoutStruct = alloc<timeval>() - timeoutStruct.tv_sec = 0 - timeoutStruct.tv_usec = timeout.toInt() * 1000 - return select(__nfds, __readfds, __writefds, __exceptfds, timeoutStruct.ptr) -} - -public actual fun socketsInit() {} - -public actual fun socketsCleanup() {} - -public actual fun getErrno(): Int = errno - -public actual fun getEagain(): Int = EAGAIN - -public actual fun getEwouldblock(): Int = EWOULDBLOCK - -public actual fun MemScope.set_send_socket_timeout(__fd: Int, timeout: Long): Int { - val timeoutStruct = alloc<timeval>() - val seconds = timeout / 1000 - timeoutStruct.tv_sec = seconds.convert() - timeoutStruct.tv_usec = ((timeout - seconds * 1000) * 1000).convert() - return setsockopt(__fd, SOL_SOCKET, SO_SNDTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt()) -} - -public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): Int { - val timeoutStruct = alloc<timeval>() - val seconds = timeout / 1000 - timeoutStruct.tv_sec = seconds.convert() - timeoutStruct.tv_usec = ((timeout - seconds * 1000) * 1000).convert() - return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt()) -} - -public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? { - val hints = alloc<addrinfo>() - platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert()) - hints.ai_family = platform.posix.AF_UNSPEC - hints.ai_socktype = platform.posix.SOCK_STREAM - hints.ai_protocol = platform.posix.IPPROTO_TCP - val result = alloc<CPointerVar<addrinfo>>() - if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) { - return result.pointed?.ai_addr - } - return null -} - -public actual fun fdSet(fd: Int, fdSet: CValuesRef<fd_set>) { - __darwin_fd_set(fd, fdSet) -} - -public actual fun fdZero(fdSet: CValuesRef<fd_set>) { - memset(fdSet, 0, sizeOf<fd_set>().convert()) -} - -public actual fun fdIsSet(fd: Int, fdSet: CValuesRef<fd_set>): Int { - return __darwin_fd_isset(fd, fdSet) -} - -public actual fun gettimeofday(timeval: timeval) { - gettimeofday(timeval.ptr, null) -} diff --git a/kmqtt-common/src/macosX64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/macosX64Main/kotlin/io/github/davidepianca98/Posix.kt new file mode 100644 index 0000000000000000000000000000000000000000..c1fe27635dec023d886c6a06d750db25818386ce --- /dev/null +++ b/kmqtt-common/src/macosX64Main/kotlin/io/github/davidepianca98/Posix.kt @@ -0,0 +1,175 @@ +package io.github.davidepianca98 + +import kotlinx.cinterop.* +import platform.posix.* + +public actual fun send(socket: Int, buf: CValuesRef<ByteVar>?, len: Int, flags: Int): Int { + return platform.posix.send(socket.convert(), buf, len.convert(), flags or MSG_NOSIGNAL).convert() +} + +public actual fun recv(socket: Int, buf: CValuesRef<ByteVar>?, len: Int, flags: Int): Int { + return platform.posix.recv(socket, buf, len.convert(), flags).convert() +} + +public actual fun shutdown(socket: Int): Int { + return shutdown(socket, SHUT_WR) +} + +public actual fun close(socket: Int): Int { + return platform.posix.close(socket) +} + +public actual fun memset(__s: CValuesRef<*>?, __c: Int, __n: ULong): CPointer<out CPointed>? { + return platform.posix.memset(__s, __c, __n) +} + +public actual fun sendto( + __fd: Int, + __buf: CValuesRef<*>?, + __n: ULong, + __flags: Int, + __addr: CValuesRef<sockaddr>?, + __addr_len: UInt +): Long { + return platform.posix.sendto(__fd, __buf, __n, __flags, __addr, __addr_len) +} + +public actual fun recvfrom( + __fd: Int, + __buf: CValuesRef<*>?, + __n: ULong, + __flags: Int, + __addr: CValuesRef<sockaddr>?, + __addr_len: CValuesRef<UIntVarOf<UInt>>? +): Long { + return platform.posix.recvfrom(__fd, __buf, __n, __flags, __addr, __addr_len) +} + +public actual fun inet_ntop( + __af: Int, + __cp: CValuesRef<*>?, + __buf: CValuesRef<ByteVarOf<Byte>>?, + __len: UInt +): CPointer<ByteVarOf<Byte>>? { + return platform.darwin.inet_ntop(__af, __cp, __buf, __len) +} + +public actual fun inet_pton(__af: Int, __cp: String?, __buf: CValuesRef<*>?): Int { + return platform.darwin.inet_pton(__af, __cp, __buf) +} + +private fun htons(value: UShort): UShort { + return if (BYTE_ORDER == BIG_ENDIAN) { + value + } else { + platform.builtin.builtin_bswap16(value.convert()).convert() + } +} + +public actual fun MemScope.sockaddrIn(sin_family: UShort, sin_port: UShort): sockaddr_in { + val sockaddr = alloc<sockaddr_in>() + platform.posix.memset(sockaddr.ptr, 0, sizeOf<sockaddr_in>().convert()) + sockaddr.sin_family = sin_family.toUByte() + sockaddr.sin_port = htons(sin_port) + return sockaddr +} + +public actual fun MemScope.getPortFromSockaddrIn(sockaddr: sockaddr_in): UShort { + return sockaddr.sin_port +} + +public actual fun setsockopt(__fd: Int, __level: Int, __optname: Int, __optval: CValuesRef<*>?, __optlen: UInt): Int { + return platform.posix.setsockopt(__fd.convert(), __level, __optname, __optval, __optlen.convert()) +} + +public actual fun bind(__fd: Int, __addr: CValuesRef<sockaddr>?, __len: UInt): Int { + return platform.posix.bind(__fd, __addr, __len) +} + +public actual fun set_non_blocking(__fd: Int): Int { + return fcntl(__fd, F_SETFL, O_NONBLOCK) +} + +public actual fun socket(__domain: Int, __type: Int, __protocol: Int): Int { + return platform.posix.socket(__domain, __type, __protocol) +} + +public actual fun connect(__fd: Int, __addr: CValuesRef<sockaddr>?, __len: UInt): Int { + return platform.posix.connect(__fd, __addr, __len) +} + +public actual fun accept(__fd: Int, __addr: CValuesRef<sockaddr>?, __addr_len: CValuesRef<UIntVarOf<UInt>>?): Int { + return platform.posix.accept(__fd, __addr, __addr_len) +} + +public actual fun listen(__fd: Int, __n: Int): Int { + return platform.posix.listen(__fd, __n) +} + +public actual fun MemScope.select( + __nfds: Int, + __readfds: CValuesRef<fd_set>?, + __writefds: CValuesRef<fd_set>?, + __exceptfds: CValuesRef<fd_set>?, + timeout: Long +): Int { + val timeoutStruct = alloc<timeval>() + timeoutStruct.tv_sec = 0 + timeoutStruct.tv_usec = timeout.toInt() * 1000 + return select(__nfds, __readfds, __writefds, __exceptfds, timeoutStruct.ptr) +} + +public actual fun socketsInit() {} + +public actual fun socketsCleanup() {} + +public actual fun getErrno(): Int = errno + +public actual fun getEagain(): Int = EAGAIN + +public actual fun getEwouldblock(): Int = EWOULDBLOCK + +public actual fun MemScope.set_send_socket_timeout(__fd: Int, timeout: Long): Int { + val timeoutStruct = alloc<timeval>() + val seconds = timeout / 1000 + timeoutStruct.tv_sec = seconds.convert() + timeoutStruct.tv_usec = ((timeout - seconds * 1000) * 1000).convert() + return setsockopt(__fd, SOL_SOCKET, SO_SNDTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt()) +} + +public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): Int { + val timeoutStruct = alloc<timeval>() + val seconds = timeout / 1000 + timeoutStruct.tv_sec = seconds.convert() + timeoutStruct.tv_usec = ((timeout - seconds * 1000) * 1000).convert() + return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt()) +} + +public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? { + val hints = alloc<addrinfo>() + platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert()) + hints.ai_family = platform.posix.AF_UNSPEC + hints.ai_socktype = platform.posix.SOCK_STREAM + hints.ai_protocol = platform.posix.IPPROTO_TCP + val result = alloc<CPointerVar<addrinfo>>() + if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) { + return result.pointed?.ai_addr + } + return null +} + +public actual fun fdSet(fd: Int, fdSet: CValuesRef<fd_set>) { + __darwin_fd_set(fd, fdSet) +} + +public actual fun fdZero(fdSet: CValuesRef<fd_set>) { + memset(fdSet, 0, sizeOf<fd_set>().convert()) +} + +public actual fun fdIsSet(fd: Int, fdSet: CValuesRef<fd_set>): Int { + return __darwin_fd_isset(fd, fdSet) +} + +public actual fun gettimeofday(timeval: timeval) { + gettimeofday(timeval.ptr, null) +} diff --git a/kmqtt-common/src/mingwX64Main/kotlin/Posix.kt b/kmqtt-common/src/mingwX64Main/kotlin/io/github/davidepianca98/Posix.kt similarity index 98% rename from kmqtt-common/src/mingwX64Main/kotlin/Posix.kt rename to kmqtt-common/src/mingwX64Main/kotlin/io/github/davidepianca98/Posix.kt index a5b939aa2dff27c5503d96510338229cf05f55c5..981d73f95f4e7ada793c875efe19cef13a01f3d8 100644 --- a/kmqtt-common/src/mingwX64Main/kotlin/Posix.kt +++ b/kmqtt-common/src/mingwX64Main/kotlin/io/github/davidepianca98/Posix.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import platform.posix.* import platform.posix.SOL_SOCKET @@ -5,7 +7,7 @@ import platform.posix.SO_RCVTIMEO import platform.windows.* import platform.windows.WSAEWOULDBLOCK import platform.windows.WSAGetLastError -import socket.IOException +import io.github.davidepianca98.socket.IOException public actual fun send(socket: Int, buf: CValuesRef<ByteVar>?, len: Int, flags: Int): Int { return platform.posix.send(socket.convert(), buf, len, flags) diff --git a/kmqtt-common/src/posixMain/kotlin/IgnoreJs.kt b/kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/IgnoreJs.kt similarity index 75% rename from kmqtt-common/src/posixMain/kotlin/IgnoreJs.kt rename to kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/IgnoreJs.kt index fb466159772848c2a278c4049cfeb009598dcdb8..76cb411b699f567894c1bfc9bef934eff97675ef 100644 --- a/kmqtt-common/src/posixMain/kotlin/IgnoreJs.kt +++ b/kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/IgnoreJs.kt @@ -1,3 +1,3 @@ - +package io.github.davidepianca98 @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) public actual annotation class IgnoreJs diff --git a/kmqtt-common/src/posixMain/kotlin/Posix.kt b/kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/Posix.kt similarity index 98% rename from kmqtt-common/src/posixMain/kotlin/Posix.kt rename to kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/Posix.kt index 97e6a41a3b62f51b81bd4d6177fa0f4bb5ab77d8..a2f680cf471b32636fa2cc9b1383728e2ab6e8d0 100644 --- a/kmqtt-common/src/posixMain/kotlin/Posix.kt +++ b/kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/Posix.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import platform.posix.fd_set import platform.posix.sockaddr diff --git a/kmqtt-common/src/posixMain/kotlin/currentTimeMillis.kt b/kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/currentTimeMillis.kt similarity index 92% rename from kmqtt-common/src/posixMain/kotlin/currentTimeMillis.kt rename to kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/currentTimeMillis.kt index 2e08294b6365307a9a5f38aed2459dcd4ee4b63f..8675e91452013b649b6d573cace6b62d07d53d52 100644 --- a/kmqtt-common/src/posixMain/kotlin/currentTimeMillis.kt +++ b/kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/currentTimeMillis.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.UnsafeNumber import kotlinx.cinterop.alloc import kotlinx.cinterop.memScoped diff --git a/kmqtt-common/src/posixMain/kotlin/socket/tcp/Socket.kt b/kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/socket/tcp/Socket.kt similarity index 81% rename from kmqtt-common/src/posixMain/kotlin/socket/tcp/Socket.kt rename to kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/socket/tcp/Socket.kt index a0a138dc6809fd7dad0638ea0b7e45c5d583eca7..6a565dd4ac934a11a0e4fdf374fe7503bffa2767 100644 --- a/kmqtt-common/src/posixMain/kotlin/socket/tcp/Socket.kt +++ b/kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/socket/tcp/Socket.kt @@ -1,18 +1,18 @@ -package socket.tcp +package io.github.davidepianca98.socket.tcp -import close -import getEagain -import getErrno -import getEwouldblock +import io.github.davidepianca98.close +import io.github.davidepianca98.getEagain +import io.github.davidepianca98.getErrno +import io.github.davidepianca98.getEwouldblock +import io.github.davidepianca98.recv +import io.github.davidepianca98.shutdown import kotlinx.cinterop.addressOf import kotlinx.cinterop.convert import kotlinx.cinterop.usePinned -import recv -import send -import shutdown -import socket.IOException -import socket.SocketClosedException -import socket.SocketInterface +import io.github.davidepianca98.send +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.SocketClosedException +import io.github.davidepianca98.socket.SocketInterface public actual open class Socket( protected val socket: Int, diff --git a/kmqtt-common/src/posixMain/kotlin/socket/tls/TLSEngine.kt b/kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/socket/tls/TLSEngine.kt similarity index 92% rename from kmqtt-common/src/posixMain/kotlin/socket/tls/TLSEngine.kt rename to kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/socket/tls/TLSEngine.kt index 35bd2b6c48ce42f85a2aceac58802c2bfaf03f4f..36fd9e82efff8d64319c96b3961b238249e7c291 100644 --- a/kmqtt-common/src/posixMain/kotlin/socket/tls/TLSEngine.kt +++ b/kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/socket/tls/TLSEngine.kt @@ -1,4 +1,4 @@ -package socket.tls +package io.github.davidepianca98.socket.tls import kotlinx.cinterop.ByteVar import kotlinx.cinterop.CPointer diff --git a/kmqtt-common/src/posixMain/kotlin/socket/tls/TLSSocket.kt b/kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/socket/tls/TLSSocket.kt similarity index 94% rename from kmqtt-common/src/posixMain/kotlin/socket/tls/TLSSocket.kt rename to kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/socket/tls/TLSSocket.kt index c7246952c81be1d1550f7d1e2cce032fc79bd05d..eefb65f1cd46a5f06125a09f3f39ff42dd3a76d2 100644 --- a/kmqtt-common/src/posixMain/kotlin/socket/tls/TLSSocket.kt +++ b/kmqtt-common/src/posixMain/kotlin/io/github/davidepianca98/socket/tls/TLSSocket.kt @@ -1,11 +1,11 @@ -package socket.tls +package io.github.davidepianca98.socket.tls import kotlinx.cinterop.addressOf import kotlinx.cinterop.usePinned -import socket.IOException -import socket.SocketClosedException -import socket.streams.ByteArrayOutputStream -import socket.tcp.Socket +import io.github.davidepianca98.socket.IOException +import io.github.davidepianca98.socket.SocketClosedException +import io.github.davidepianca98.socket.streams.ByteArrayOutputStream +import io.github.davidepianca98.socket.tcp.Socket public actual open class TLSSocket( socket: Int, diff --git a/kmqtt-common/src/tvosArm64Main/kotlin/Posix.kt b/kmqtt-common/src/tvosArm64Main/kotlin/Posix.kt deleted file mode 100644 index ed515404b3948d6acb505b30e3c0ac6e8e0c28ff..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/tvosArm64Main/kotlin/Posix.kt +++ /dev/null @@ -1,173 +0,0 @@ -import kotlinx.cinterop.* -import platform.posix.* - -public actual fun send(socket: Int, buf: CValuesRef<ByteVar>?, len: Int, flags: Int): Int { - return platform.posix.send(socket.convert(), buf, len.convert(), flags or MSG_NOSIGNAL).convert() -} - -public actual fun recv(socket: Int, buf: CValuesRef<ByteVar>?, len: Int, flags: Int): Int { - return platform.posix.recv(socket, buf, len.convert(), flags).convert() -} - -public actual fun shutdown(socket: Int): Int { - return shutdown(socket, SHUT_WR) -} - -public actual fun close(socket: Int): Int { - return platform.posix.close(socket) -} - -public actual fun memset(__s: CValuesRef<*>?, __c: Int, __n: ULong): CPointer<out CPointed>? { - return platform.posix.memset(__s, __c, __n) -} - -public actual fun sendto( - __fd: Int, - __buf: CValuesRef<*>?, - __n: ULong, - __flags: Int, - __addr: CValuesRef<sockaddr>?, - __addr_len: UInt -): Long { - return platform.posix.sendto(__fd, __buf, __n, __flags, __addr, __addr_len) -} - -public actual fun recvfrom( - __fd: Int, - __buf: CValuesRef<*>?, - __n: ULong, - __flags: Int, - __addr: CValuesRef<sockaddr>?, - __addr_len: CValuesRef<UIntVarOf<UInt>>? -): Long { - return platform.posix.recvfrom(__fd, __buf, __n, __flags, __addr, __addr_len) -} - -public actual fun inet_ntop( - __af: Int, - __cp: CValuesRef<*>?, - __buf: CValuesRef<ByteVarOf<Byte>>?, - __len: UInt -): CPointer<ByteVarOf<Byte>>? { - return platform.darwin.inet_ntop(__af, __cp, __buf, __len) -} - -public actual fun inet_pton(__af: Int, __cp: String?, __buf: CValuesRef<*>?): Int { - return platform.darwin.inet_pton(__af, __cp, __buf) -} - -private fun htons(value: UShort): UShort { - return if (BYTE_ORDER == BIG_ENDIAN) { - value - } else { - platform.builtin.builtin_bswap16(value.convert()).convert() - } -} - -public actual fun MemScope.sockaddrIn(sin_family: UShort, sin_port: UShort): sockaddr_in { - val sockaddr = alloc<sockaddr_in>() - platform.posix.memset(sockaddr.ptr, 0, sizeOf<sockaddr_in>().convert()) - sockaddr.sin_family = sin_family.toUByte() - sockaddr.sin_port = htons(sin_port) - return sockaddr -} - -public actual fun MemScope.getPortFromSockaddrIn(sockaddr: sockaddr_in): UShort { - return sockaddr.sin_port -} - -public actual fun setsockopt(__fd: Int, __level: Int, __optname: Int, __optval: CValuesRef<*>?, __optlen: UInt): Int { - return platform.posix.setsockopt(__fd.convert(), __level, __optname, __optval, __optlen.convert()) -} - -public actual fun bind(__fd: Int, __addr: CValuesRef<sockaddr>?, __len: UInt): Int { - return platform.posix.bind(__fd, __addr, __len) -} - -public actual fun set_non_blocking(__fd: Int): Int { - return fcntl(__fd, F_SETFL, O_NONBLOCK) -} - -public actual fun socket(__domain: Int, __type: Int, __protocol: Int): Int { - return platform.posix.socket(__domain, __type, __protocol) -} - -public actual fun connect(__fd: Int, __addr: CValuesRef<sockaddr>?, __len: UInt): Int { - return platform.posix.connect(__fd, __addr, __len) -} - -public actual fun accept(__fd: Int, __addr: CValuesRef<sockaddr>?, __addr_len: CValuesRef<UIntVarOf<UInt>>?): Int { - return platform.posix.accept(__fd, __addr, __addr_len) -} - -public actual fun listen(__fd: Int, __n: Int): Int { - return platform.posix.listen(__fd, __n) -} - -public actual fun MemScope.select( - __nfds: Int, - __readfds: CValuesRef<fd_set>?, - __writefds: CValuesRef<fd_set>?, - __exceptfds: CValuesRef<fd_set>?, - timeout: Long -): Int { - val timeoutStruct = alloc<timeval>() - timeoutStruct.tv_sec = 0 - timeoutStruct.tv_usec = timeout.toInt() * 1000 - return select(__nfds, __readfds, __writefds, __exceptfds, timeoutStruct.ptr) -} - -public actual fun socketsInit() {} - -public actual fun socketsCleanup() {} - -public actual fun getErrno(): Int = errno - -public actual fun getEagain(): Int = EAGAIN - -public actual fun getEwouldblock(): Int = EWOULDBLOCK - -public actual fun MemScope.set_send_socket_timeout(__fd: Int, timeout: Long): Int { - val timeoutStruct = alloc<timeval>() - val seconds = timeout / 1000 - timeoutStruct.tv_sec = seconds.convert() - timeoutStruct.tv_usec = ((timeout - seconds * 1000) * 1000).convert() - return setsockopt(__fd, SOL_SOCKET, SO_SNDTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt()) -} - -public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): Int { - val timeoutStruct = alloc<timeval>() - val seconds = timeout / 1000 - timeoutStruct.tv_sec = seconds.convert() - timeoutStruct.tv_usec = ((timeout - seconds * 1000) * 1000).convert() - return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt()) -} - -public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? { - val hints = alloc<addrinfo>() - platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert()) - hints.ai_family = platform.posix.AF_UNSPEC - hints.ai_socktype = platform.posix.SOCK_STREAM - hints.ai_protocol = platform.posix.IPPROTO_TCP - val result = alloc<CPointerVar<addrinfo>>() - if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) { - return result.pointed?.ai_addr - } - return null -} - -public actual fun fdSet(fd: Int, fdSet: CValuesRef<fd_set>) { - __darwin_fd_set(fd, fdSet) -} - -public actual fun fdZero(fdSet: CValuesRef<fd_set>) { - memset(fdSet, 0, sizeOf<fd_set>().convert()) -} - -public actual fun fdIsSet(fd: Int, fdSet: CValuesRef<fd_set>): Int { - return __darwin_fd_isset(fd, fdSet) -} - -public actual fun gettimeofday(timeval: timeval) { - gettimeofday(timeval.ptr, null) -} diff --git a/kmqtt-common/src/tvosArm64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/tvosArm64Main/kotlin/io/github/davidepianca98/Posix.kt new file mode 100644 index 0000000000000000000000000000000000000000..c1fe27635dec023d886c6a06d750db25818386ce --- /dev/null +++ b/kmqtt-common/src/tvosArm64Main/kotlin/io/github/davidepianca98/Posix.kt @@ -0,0 +1,175 @@ +package io.github.davidepianca98 + +import kotlinx.cinterop.* +import platform.posix.* + +public actual fun send(socket: Int, buf: CValuesRef<ByteVar>?, len: Int, flags: Int): Int { + return platform.posix.send(socket.convert(), buf, len.convert(), flags or MSG_NOSIGNAL).convert() +} + +public actual fun recv(socket: Int, buf: CValuesRef<ByteVar>?, len: Int, flags: Int): Int { + return platform.posix.recv(socket, buf, len.convert(), flags).convert() +} + +public actual fun shutdown(socket: Int): Int { + return shutdown(socket, SHUT_WR) +} + +public actual fun close(socket: Int): Int { + return platform.posix.close(socket) +} + +public actual fun memset(__s: CValuesRef<*>?, __c: Int, __n: ULong): CPointer<out CPointed>? { + return platform.posix.memset(__s, __c, __n) +} + +public actual fun sendto( + __fd: Int, + __buf: CValuesRef<*>?, + __n: ULong, + __flags: Int, + __addr: CValuesRef<sockaddr>?, + __addr_len: UInt +): Long { + return platform.posix.sendto(__fd, __buf, __n, __flags, __addr, __addr_len) +} + +public actual fun recvfrom( + __fd: Int, + __buf: CValuesRef<*>?, + __n: ULong, + __flags: Int, + __addr: CValuesRef<sockaddr>?, + __addr_len: CValuesRef<UIntVarOf<UInt>>? +): Long { + return platform.posix.recvfrom(__fd, __buf, __n, __flags, __addr, __addr_len) +} + +public actual fun inet_ntop( + __af: Int, + __cp: CValuesRef<*>?, + __buf: CValuesRef<ByteVarOf<Byte>>?, + __len: UInt +): CPointer<ByteVarOf<Byte>>? { + return platform.darwin.inet_ntop(__af, __cp, __buf, __len) +} + +public actual fun inet_pton(__af: Int, __cp: String?, __buf: CValuesRef<*>?): Int { + return platform.darwin.inet_pton(__af, __cp, __buf) +} + +private fun htons(value: UShort): UShort { + return if (BYTE_ORDER == BIG_ENDIAN) { + value + } else { + platform.builtin.builtin_bswap16(value.convert()).convert() + } +} + +public actual fun MemScope.sockaddrIn(sin_family: UShort, sin_port: UShort): sockaddr_in { + val sockaddr = alloc<sockaddr_in>() + platform.posix.memset(sockaddr.ptr, 0, sizeOf<sockaddr_in>().convert()) + sockaddr.sin_family = sin_family.toUByte() + sockaddr.sin_port = htons(sin_port) + return sockaddr +} + +public actual fun MemScope.getPortFromSockaddrIn(sockaddr: sockaddr_in): UShort { + return sockaddr.sin_port +} + +public actual fun setsockopt(__fd: Int, __level: Int, __optname: Int, __optval: CValuesRef<*>?, __optlen: UInt): Int { + return platform.posix.setsockopt(__fd.convert(), __level, __optname, __optval, __optlen.convert()) +} + +public actual fun bind(__fd: Int, __addr: CValuesRef<sockaddr>?, __len: UInt): Int { + return platform.posix.bind(__fd, __addr, __len) +} + +public actual fun set_non_blocking(__fd: Int): Int { + return fcntl(__fd, F_SETFL, O_NONBLOCK) +} + +public actual fun socket(__domain: Int, __type: Int, __protocol: Int): Int { + return platform.posix.socket(__domain, __type, __protocol) +} + +public actual fun connect(__fd: Int, __addr: CValuesRef<sockaddr>?, __len: UInt): Int { + return platform.posix.connect(__fd, __addr, __len) +} + +public actual fun accept(__fd: Int, __addr: CValuesRef<sockaddr>?, __addr_len: CValuesRef<UIntVarOf<UInt>>?): Int { + return platform.posix.accept(__fd, __addr, __addr_len) +} + +public actual fun listen(__fd: Int, __n: Int): Int { + return platform.posix.listen(__fd, __n) +} + +public actual fun MemScope.select( + __nfds: Int, + __readfds: CValuesRef<fd_set>?, + __writefds: CValuesRef<fd_set>?, + __exceptfds: CValuesRef<fd_set>?, + timeout: Long +): Int { + val timeoutStruct = alloc<timeval>() + timeoutStruct.tv_sec = 0 + timeoutStruct.tv_usec = timeout.toInt() * 1000 + return select(__nfds, __readfds, __writefds, __exceptfds, timeoutStruct.ptr) +} + +public actual fun socketsInit() {} + +public actual fun socketsCleanup() {} + +public actual fun getErrno(): Int = errno + +public actual fun getEagain(): Int = EAGAIN + +public actual fun getEwouldblock(): Int = EWOULDBLOCK + +public actual fun MemScope.set_send_socket_timeout(__fd: Int, timeout: Long): Int { + val timeoutStruct = alloc<timeval>() + val seconds = timeout / 1000 + timeoutStruct.tv_sec = seconds.convert() + timeoutStruct.tv_usec = ((timeout - seconds * 1000) * 1000).convert() + return setsockopt(__fd, SOL_SOCKET, SO_SNDTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt()) +} + +public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): Int { + val timeoutStruct = alloc<timeval>() + val seconds = timeout / 1000 + timeoutStruct.tv_sec = seconds.convert() + timeoutStruct.tv_usec = ((timeout - seconds * 1000) * 1000).convert() + return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt()) +} + +public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? { + val hints = alloc<addrinfo>() + platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert()) + hints.ai_family = platform.posix.AF_UNSPEC + hints.ai_socktype = platform.posix.SOCK_STREAM + hints.ai_protocol = platform.posix.IPPROTO_TCP + val result = alloc<CPointerVar<addrinfo>>() + if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) { + return result.pointed?.ai_addr + } + return null +} + +public actual fun fdSet(fd: Int, fdSet: CValuesRef<fd_set>) { + __darwin_fd_set(fd, fdSet) +} + +public actual fun fdZero(fdSet: CValuesRef<fd_set>) { + memset(fdSet, 0, sizeOf<fd_set>().convert()) +} + +public actual fun fdIsSet(fd: Int, fdSet: CValuesRef<fd_set>): Int { + return __darwin_fd_isset(fd, fdSet) +} + +public actual fun gettimeofday(timeval: timeval) { + gettimeofday(timeval.ptr, null) +} diff --git a/kmqtt-common/src/tvosSimulatorArm64Main/kotlin/Posix.kt b/kmqtt-common/src/tvosSimulatorArm64Main/kotlin/Posix.kt deleted file mode 100644 index ed515404b3948d6acb505b30e3c0ac6e8e0c28ff..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/tvosSimulatorArm64Main/kotlin/Posix.kt +++ /dev/null @@ -1,173 +0,0 @@ -import kotlinx.cinterop.* -import platform.posix.* - -public actual fun send(socket: Int, buf: CValuesRef<ByteVar>?, len: Int, flags: Int): Int { - return platform.posix.send(socket.convert(), buf, len.convert(), flags or MSG_NOSIGNAL).convert() -} - -public actual fun recv(socket: Int, buf: CValuesRef<ByteVar>?, len: Int, flags: Int): Int { - return platform.posix.recv(socket, buf, len.convert(), flags).convert() -} - -public actual fun shutdown(socket: Int): Int { - return shutdown(socket, SHUT_WR) -} - -public actual fun close(socket: Int): Int { - return platform.posix.close(socket) -} - -public actual fun memset(__s: CValuesRef<*>?, __c: Int, __n: ULong): CPointer<out CPointed>? { - return platform.posix.memset(__s, __c, __n) -} - -public actual fun sendto( - __fd: Int, - __buf: CValuesRef<*>?, - __n: ULong, - __flags: Int, - __addr: CValuesRef<sockaddr>?, - __addr_len: UInt -): Long { - return platform.posix.sendto(__fd, __buf, __n, __flags, __addr, __addr_len) -} - -public actual fun recvfrom( - __fd: Int, - __buf: CValuesRef<*>?, - __n: ULong, - __flags: Int, - __addr: CValuesRef<sockaddr>?, - __addr_len: CValuesRef<UIntVarOf<UInt>>? -): Long { - return platform.posix.recvfrom(__fd, __buf, __n, __flags, __addr, __addr_len) -} - -public actual fun inet_ntop( - __af: Int, - __cp: CValuesRef<*>?, - __buf: CValuesRef<ByteVarOf<Byte>>?, - __len: UInt -): CPointer<ByteVarOf<Byte>>? { - return platform.darwin.inet_ntop(__af, __cp, __buf, __len) -} - -public actual fun inet_pton(__af: Int, __cp: String?, __buf: CValuesRef<*>?): Int { - return platform.darwin.inet_pton(__af, __cp, __buf) -} - -private fun htons(value: UShort): UShort { - return if (BYTE_ORDER == BIG_ENDIAN) { - value - } else { - platform.builtin.builtin_bswap16(value.convert()).convert() - } -} - -public actual fun MemScope.sockaddrIn(sin_family: UShort, sin_port: UShort): sockaddr_in { - val sockaddr = alloc<sockaddr_in>() - platform.posix.memset(sockaddr.ptr, 0, sizeOf<sockaddr_in>().convert()) - sockaddr.sin_family = sin_family.toUByte() - sockaddr.sin_port = htons(sin_port) - return sockaddr -} - -public actual fun MemScope.getPortFromSockaddrIn(sockaddr: sockaddr_in): UShort { - return sockaddr.sin_port -} - -public actual fun setsockopt(__fd: Int, __level: Int, __optname: Int, __optval: CValuesRef<*>?, __optlen: UInt): Int { - return platform.posix.setsockopt(__fd.convert(), __level, __optname, __optval, __optlen.convert()) -} - -public actual fun bind(__fd: Int, __addr: CValuesRef<sockaddr>?, __len: UInt): Int { - return platform.posix.bind(__fd, __addr, __len) -} - -public actual fun set_non_blocking(__fd: Int): Int { - return fcntl(__fd, F_SETFL, O_NONBLOCK) -} - -public actual fun socket(__domain: Int, __type: Int, __protocol: Int): Int { - return platform.posix.socket(__domain, __type, __protocol) -} - -public actual fun connect(__fd: Int, __addr: CValuesRef<sockaddr>?, __len: UInt): Int { - return platform.posix.connect(__fd, __addr, __len) -} - -public actual fun accept(__fd: Int, __addr: CValuesRef<sockaddr>?, __addr_len: CValuesRef<UIntVarOf<UInt>>?): Int { - return platform.posix.accept(__fd, __addr, __addr_len) -} - -public actual fun listen(__fd: Int, __n: Int): Int { - return platform.posix.listen(__fd, __n) -} - -public actual fun MemScope.select( - __nfds: Int, - __readfds: CValuesRef<fd_set>?, - __writefds: CValuesRef<fd_set>?, - __exceptfds: CValuesRef<fd_set>?, - timeout: Long -): Int { - val timeoutStruct = alloc<timeval>() - timeoutStruct.tv_sec = 0 - timeoutStruct.tv_usec = timeout.toInt() * 1000 - return select(__nfds, __readfds, __writefds, __exceptfds, timeoutStruct.ptr) -} - -public actual fun socketsInit() {} - -public actual fun socketsCleanup() {} - -public actual fun getErrno(): Int = errno - -public actual fun getEagain(): Int = EAGAIN - -public actual fun getEwouldblock(): Int = EWOULDBLOCK - -public actual fun MemScope.set_send_socket_timeout(__fd: Int, timeout: Long): Int { - val timeoutStruct = alloc<timeval>() - val seconds = timeout / 1000 - timeoutStruct.tv_sec = seconds.convert() - timeoutStruct.tv_usec = ((timeout - seconds * 1000) * 1000).convert() - return setsockopt(__fd, SOL_SOCKET, SO_SNDTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt()) -} - -public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): Int { - val timeoutStruct = alloc<timeval>() - val seconds = timeout / 1000 - timeoutStruct.tv_sec = seconds.convert() - timeoutStruct.tv_usec = ((timeout - seconds * 1000) * 1000).convert() - return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt()) -} - -public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? { - val hints = alloc<addrinfo>() - platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert()) - hints.ai_family = platform.posix.AF_UNSPEC - hints.ai_socktype = platform.posix.SOCK_STREAM - hints.ai_protocol = platform.posix.IPPROTO_TCP - val result = alloc<CPointerVar<addrinfo>>() - if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) { - return result.pointed?.ai_addr - } - return null -} - -public actual fun fdSet(fd: Int, fdSet: CValuesRef<fd_set>) { - __darwin_fd_set(fd, fdSet) -} - -public actual fun fdZero(fdSet: CValuesRef<fd_set>) { - memset(fdSet, 0, sizeOf<fd_set>().convert()) -} - -public actual fun fdIsSet(fd: Int, fdSet: CValuesRef<fd_set>): Int { - return __darwin_fd_isset(fd, fdSet) -} - -public actual fun gettimeofday(timeval: timeval) { - gettimeofday(timeval.ptr, null) -} diff --git a/kmqtt-common/src/tvosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/tvosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt new file mode 100644 index 0000000000000000000000000000000000000000..c1fe27635dec023d886c6a06d750db25818386ce --- /dev/null +++ b/kmqtt-common/src/tvosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt @@ -0,0 +1,175 @@ +package io.github.davidepianca98 + +import kotlinx.cinterop.* +import platform.posix.* + +public actual fun send(socket: Int, buf: CValuesRef<ByteVar>?, len: Int, flags: Int): Int { + return platform.posix.send(socket.convert(), buf, len.convert(), flags or MSG_NOSIGNAL).convert() +} + +public actual fun recv(socket: Int, buf: CValuesRef<ByteVar>?, len: Int, flags: Int): Int { + return platform.posix.recv(socket, buf, len.convert(), flags).convert() +} + +public actual fun shutdown(socket: Int): Int { + return shutdown(socket, SHUT_WR) +} + +public actual fun close(socket: Int): Int { + return platform.posix.close(socket) +} + +public actual fun memset(__s: CValuesRef<*>?, __c: Int, __n: ULong): CPointer<out CPointed>? { + return platform.posix.memset(__s, __c, __n) +} + +public actual fun sendto( + __fd: Int, + __buf: CValuesRef<*>?, + __n: ULong, + __flags: Int, + __addr: CValuesRef<sockaddr>?, + __addr_len: UInt +): Long { + return platform.posix.sendto(__fd, __buf, __n, __flags, __addr, __addr_len) +} + +public actual fun recvfrom( + __fd: Int, + __buf: CValuesRef<*>?, + __n: ULong, + __flags: Int, + __addr: CValuesRef<sockaddr>?, + __addr_len: CValuesRef<UIntVarOf<UInt>>? +): Long { + return platform.posix.recvfrom(__fd, __buf, __n, __flags, __addr, __addr_len) +} + +public actual fun inet_ntop( + __af: Int, + __cp: CValuesRef<*>?, + __buf: CValuesRef<ByteVarOf<Byte>>?, + __len: UInt +): CPointer<ByteVarOf<Byte>>? { + return platform.darwin.inet_ntop(__af, __cp, __buf, __len) +} + +public actual fun inet_pton(__af: Int, __cp: String?, __buf: CValuesRef<*>?): Int { + return platform.darwin.inet_pton(__af, __cp, __buf) +} + +private fun htons(value: UShort): UShort { + return if (BYTE_ORDER == BIG_ENDIAN) { + value + } else { + platform.builtin.builtin_bswap16(value.convert()).convert() + } +} + +public actual fun MemScope.sockaddrIn(sin_family: UShort, sin_port: UShort): sockaddr_in { + val sockaddr = alloc<sockaddr_in>() + platform.posix.memset(sockaddr.ptr, 0, sizeOf<sockaddr_in>().convert()) + sockaddr.sin_family = sin_family.toUByte() + sockaddr.sin_port = htons(sin_port) + return sockaddr +} + +public actual fun MemScope.getPortFromSockaddrIn(sockaddr: sockaddr_in): UShort { + return sockaddr.sin_port +} + +public actual fun setsockopt(__fd: Int, __level: Int, __optname: Int, __optval: CValuesRef<*>?, __optlen: UInt): Int { + return platform.posix.setsockopt(__fd.convert(), __level, __optname, __optval, __optlen.convert()) +} + +public actual fun bind(__fd: Int, __addr: CValuesRef<sockaddr>?, __len: UInt): Int { + return platform.posix.bind(__fd, __addr, __len) +} + +public actual fun set_non_blocking(__fd: Int): Int { + return fcntl(__fd, F_SETFL, O_NONBLOCK) +} + +public actual fun socket(__domain: Int, __type: Int, __protocol: Int): Int { + return platform.posix.socket(__domain, __type, __protocol) +} + +public actual fun connect(__fd: Int, __addr: CValuesRef<sockaddr>?, __len: UInt): Int { + return platform.posix.connect(__fd, __addr, __len) +} + +public actual fun accept(__fd: Int, __addr: CValuesRef<sockaddr>?, __addr_len: CValuesRef<UIntVarOf<UInt>>?): Int { + return platform.posix.accept(__fd, __addr, __addr_len) +} + +public actual fun listen(__fd: Int, __n: Int): Int { + return platform.posix.listen(__fd, __n) +} + +public actual fun MemScope.select( + __nfds: Int, + __readfds: CValuesRef<fd_set>?, + __writefds: CValuesRef<fd_set>?, + __exceptfds: CValuesRef<fd_set>?, + timeout: Long +): Int { + val timeoutStruct = alloc<timeval>() + timeoutStruct.tv_sec = 0 + timeoutStruct.tv_usec = timeout.toInt() * 1000 + return select(__nfds, __readfds, __writefds, __exceptfds, timeoutStruct.ptr) +} + +public actual fun socketsInit() {} + +public actual fun socketsCleanup() {} + +public actual fun getErrno(): Int = errno + +public actual fun getEagain(): Int = EAGAIN + +public actual fun getEwouldblock(): Int = EWOULDBLOCK + +public actual fun MemScope.set_send_socket_timeout(__fd: Int, timeout: Long): Int { + val timeoutStruct = alloc<timeval>() + val seconds = timeout / 1000 + timeoutStruct.tv_sec = seconds.convert() + timeoutStruct.tv_usec = ((timeout - seconds * 1000) * 1000).convert() + return setsockopt(__fd, SOL_SOCKET, SO_SNDTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt()) +} + +public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): Int { + val timeoutStruct = alloc<timeval>() + val seconds = timeout / 1000 + timeoutStruct.tv_sec = seconds.convert() + timeoutStruct.tv_usec = ((timeout - seconds * 1000) * 1000).convert() + return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt()) +} + +public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? { + val hints = alloc<addrinfo>() + platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert()) + hints.ai_family = platform.posix.AF_UNSPEC + hints.ai_socktype = platform.posix.SOCK_STREAM + hints.ai_protocol = platform.posix.IPPROTO_TCP + val result = alloc<CPointerVar<addrinfo>>() + if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) { + return result.pointed?.ai_addr + } + return null +} + +public actual fun fdSet(fd: Int, fdSet: CValuesRef<fd_set>) { + __darwin_fd_set(fd, fdSet) +} + +public actual fun fdZero(fdSet: CValuesRef<fd_set>) { + memset(fdSet, 0, sizeOf<fd_set>().convert()) +} + +public actual fun fdIsSet(fd: Int, fdSet: CValuesRef<fd_set>): Int { + return __darwin_fd_isset(fd, fdSet) +} + +public actual fun gettimeofday(timeval: timeval) { + gettimeofday(timeval.ptr, null) +} diff --git a/kmqtt-common/src/tvosX64Main/kotlin/Posix.kt b/kmqtt-common/src/tvosX64Main/kotlin/Posix.kt deleted file mode 100644 index ed515404b3948d6acb505b30e3c0ac6e8e0c28ff..0000000000000000000000000000000000000000 --- a/kmqtt-common/src/tvosX64Main/kotlin/Posix.kt +++ /dev/null @@ -1,173 +0,0 @@ -import kotlinx.cinterop.* -import platform.posix.* - -public actual fun send(socket: Int, buf: CValuesRef<ByteVar>?, len: Int, flags: Int): Int { - return platform.posix.send(socket.convert(), buf, len.convert(), flags or MSG_NOSIGNAL).convert() -} - -public actual fun recv(socket: Int, buf: CValuesRef<ByteVar>?, len: Int, flags: Int): Int { - return platform.posix.recv(socket, buf, len.convert(), flags).convert() -} - -public actual fun shutdown(socket: Int): Int { - return shutdown(socket, SHUT_WR) -} - -public actual fun close(socket: Int): Int { - return platform.posix.close(socket) -} - -public actual fun memset(__s: CValuesRef<*>?, __c: Int, __n: ULong): CPointer<out CPointed>? { - return platform.posix.memset(__s, __c, __n) -} - -public actual fun sendto( - __fd: Int, - __buf: CValuesRef<*>?, - __n: ULong, - __flags: Int, - __addr: CValuesRef<sockaddr>?, - __addr_len: UInt -): Long { - return platform.posix.sendto(__fd, __buf, __n, __flags, __addr, __addr_len) -} - -public actual fun recvfrom( - __fd: Int, - __buf: CValuesRef<*>?, - __n: ULong, - __flags: Int, - __addr: CValuesRef<sockaddr>?, - __addr_len: CValuesRef<UIntVarOf<UInt>>? -): Long { - return platform.posix.recvfrom(__fd, __buf, __n, __flags, __addr, __addr_len) -} - -public actual fun inet_ntop( - __af: Int, - __cp: CValuesRef<*>?, - __buf: CValuesRef<ByteVarOf<Byte>>?, - __len: UInt -): CPointer<ByteVarOf<Byte>>? { - return platform.darwin.inet_ntop(__af, __cp, __buf, __len) -} - -public actual fun inet_pton(__af: Int, __cp: String?, __buf: CValuesRef<*>?): Int { - return platform.darwin.inet_pton(__af, __cp, __buf) -} - -private fun htons(value: UShort): UShort { - return if (BYTE_ORDER == BIG_ENDIAN) { - value - } else { - platform.builtin.builtin_bswap16(value.convert()).convert() - } -} - -public actual fun MemScope.sockaddrIn(sin_family: UShort, sin_port: UShort): sockaddr_in { - val sockaddr = alloc<sockaddr_in>() - platform.posix.memset(sockaddr.ptr, 0, sizeOf<sockaddr_in>().convert()) - sockaddr.sin_family = sin_family.toUByte() - sockaddr.sin_port = htons(sin_port) - return sockaddr -} - -public actual fun MemScope.getPortFromSockaddrIn(sockaddr: sockaddr_in): UShort { - return sockaddr.sin_port -} - -public actual fun setsockopt(__fd: Int, __level: Int, __optname: Int, __optval: CValuesRef<*>?, __optlen: UInt): Int { - return platform.posix.setsockopt(__fd.convert(), __level, __optname, __optval, __optlen.convert()) -} - -public actual fun bind(__fd: Int, __addr: CValuesRef<sockaddr>?, __len: UInt): Int { - return platform.posix.bind(__fd, __addr, __len) -} - -public actual fun set_non_blocking(__fd: Int): Int { - return fcntl(__fd, F_SETFL, O_NONBLOCK) -} - -public actual fun socket(__domain: Int, __type: Int, __protocol: Int): Int { - return platform.posix.socket(__domain, __type, __protocol) -} - -public actual fun connect(__fd: Int, __addr: CValuesRef<sockaddr>?, __len: UInt): Int { - return platform.posix.connect(__fd, __addr, __len) -} - -public actual fun accept(__fd: Int, __addr: CValuesRef<sockaddr>?, __addr_len: CValuesRef<UIntVarOf<UInt>>?): Int { - return platform.posix.accept(__fd, __addr, __addr_len) -} - -public actual fun listen(__fd: Int, __n: Int): Int { - return platform.posix.listen(__fd, __n) -} - -public actual fun MemScope.select( - __nfds: Int, - __readfds: CValuesRef<fd_set>?, - __writefds: CValuesRef<fd_set>?, - __exceptfds: CValuesRef<fd_set>?, - timeout: Long -): Int { - val timeoutStruct = alloc<timeval>() - timeoutStruct.tv_sec = 0 - timeoutStruct.tv_usec = timeout.toInt() * 1000 - return select(__nfds, __readfds, __writefds, __exceptfds, timeoutStruct.ptr) -} - -public actual fun socketsInit() {} - -public actual fun socketsCleanup() {} - -public actual fun getErrno(): Int = errno - -public actual fun getEagain(): Int = EAGAIN - -public actual fun getEwouldblock(): Int = EWOULDBLOCK - -public actual fun MemScope.set_send_socket_timeout(__fd: Int, timeout: Long): Int { - val timeoutStruct = alloc<timeval>() - val seconds = timeout / 1000 - timeoutStruct.tv_sec = seconds.convert() - timeoutStruct.tv_usec = ((timeout - seconds * 1000) * 1000).convert() - return setsockopt(__fd, SOL_SOCKET, SO_SNDTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt()) -} - -public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): Int { - val timeoutStruct = alloc<timeval>() - val seconds = timeout / 1000 - timeoutStruct.tv_sec = seconds.convert() - timeoutStruct.tv_usec = ((timeout - seconds * 1000) * 1000).convert() - return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt()) -} - -public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? { - val hints = alloc<addrinfo>() - platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert()) - hints.ai_family = platform.posix.AF_UNSPEC - hints.ai_socktype = platform.posix.SOCK_STREAM - hints.ai_protocol = platform.posix.IPPROTO_TCP - val result = alloc<CPointerVar<addrinfo>>() - if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) { - return result.pointed?.ai_addr - } - return null -} - -public actual fun fdSet(fd: Int, fdSet: CValuesRef<fd_set>) { - __darwin_fd_set(fd, fdSet) -} - -public actual fun fdZero(fdSet: CValuesRef<fd_set>) { - memset(fdSet, 0, sizeOf<fd_set>().convert()) -} - -public actual fun fdIsSet(fd: Int, fdSet: CValuesRef<fd_set>): Int { - return __darwin_fd_isset(fd, fdSet) -} - -public actual fun gettimeofday(timeval: timeval) { - gettimeofday(timeval.ptr, null) -} diff --git a/kmqtt-common/src/tvosX64Main/kotlin/io/github/davidepianca98/Posix.kt b/kmqtt-common/src/tvosX64Main/kotlin/io/github/davidepianca98/Posix.kt new file mode 100644 index 0000000000000000000000000000000000000000..c1fe27635dec023d886c6a06d750db25818386ce --- /dev/null +++ b/kmqtt-common/src/tvosX64Main/kotlin/io/github/davidepianca98/Posix.kt @@ -0,0 +1,175 @@ +package io.github.davidepianca98 + +import kotlinx.cinterop.* +import platform.posix.* + +public actual fun send(socket: Int, buf: CValuesRef<ByteVar>?, len: Int, flags: Int): Int { + return platform.posix.send(socket.convert(), buf, len.convert(), flags or MSG_NOSIGNAL).convert() +} + +public actual fun recv(socket: Int, buf: CValuesRef<ByteVar>?, len: Int, flags: Int): Int { + return platform.posix.recv(socket, buf, len.convert(), flags).convert() +} + +public actual fun shutdown(socket: Int): Int { + return shutdown(socket, SHUT_WR) +} + +public actual fun close(socket: Int): Int { + return platform.posix.close(socket) +} + +public actual fun memset(__s: CValuesRef<*>?, __c: Int, __n: ULong): CPointer<out CPointed>? { + return platform.posix.memset(__s, __c, __n) +} + +public actual fun sendto( + __fd: Int, + __buf: CValuesRef<*>?, + __n: ULong, + __flags: Int, + __addr: CValuesRef<sockaddr>?, + __addr_len: UInt +): Long { + return platform.posix.sendto(__fd, __buf, __n, __flags, __addr, __addr_len) +} + +public actual fun recvfrom( + __fd: Int, + __buf: CValuesRef<*>?, + __n: ULong, + __flags: Int, + __addr: CValuesRef<sockaddr>?, + __addr_len: CValuesRef<UIntVarOf<UInt>>? +): Long { + return platform.posix.recvfrom(__fd, __buf, __n, __flags, __addr, __addr_len) +} + +public actual fun inet_ntop( + __af: Int, + __cp: CValuesRef<*>?, + __buf: CValuesRef<ByteVarOf<Byte>>?, + __len: UInt +): CPointer<ByteVarOf<Byte>>? { + return platform.darwin.inet_ntop(__af, __cp, __buf, __len) +} + +public actual fun inet_pton(__af: Int, __cp: String?, __buf: CValuesRef<*>?): Int { + return platform.darwin.inet_pton(__af, __cp, __buf) +} + +private fun htons(value: UShort): UShort { + return if (BYTE_ORDER == BIG_ENDIAN) { + value + } else { + platform.builtin.builtin_bswap16(value.convert()).convert() + } +} + +public actual fun MemScope.sockaddrIn(sin_family: UShort, sin_port: UShort): sockaddr_in { + val sockaddr = alloc<sockaddr_in>() + platform.posix.memset(sockaddr.ptr, 0, sizeOf<sockaddr_in>().convert()) + sockaddr.sin_family = sin_family.toUByte() + sockaddr.sin_port = htons(sin_port) + return sockaddr +} + +public actual fun MemScope.getPortFromSockaddrIn(sockaddr: sockaddr_in): UShort { + return sockaddr.sin_port +} + +public actual fun setsockopt(__fd: Int, __level: Int, __optname: Int, __optval: CValuesRef<*>?, __optlen: UInt): Int { + return platform.posix.setsockopt(__fd.convert(), __level, __optname, __optval, __optlen.convert()) +} + +public actual fun bind(__fd: Int, __addr: CValuesRef<sockaddr>?, __len: UInt): Int { + return platform.posix.bind(__fd, __addr, __len) +} + +public actual fun set_non_blocking(__fd: Int): Int { + return fcntl(__fd, F_SETFL, O_NONBLOCK) +} + +public actual fun socket(__domain: Int, __type: Int, __protocol: Int): Int { + return platform.posix.socket(__domain, __type, __protocol) +} + +public actual fun connect(__fd: Int, __addr: CValuesRef<sockaddr>?, __len: UInt): Int { + return platform.posix.connect(__fd, __addr, __len) +} + +public actual fun accept(__fd: Int, __addr: CValuesRef<sockaddr>?, __addr_len: CValuesRef<UIntVarOf<UInt>>?): Int { + return platform.posix.accept(__fd, __addr, __addr_len) +} + +public actual fun listen(__fd: Int, __n: Int): Int { + return platform.posix.listen(__fd, __n) +} + +public actual fun MemScope.select( + __nfds: Int, + __readfds: CValuesRef<fd_set>?, + __writefds: CValuesRef<fd_set>?, + __exceptfds: CValuesRef<fd_set>?, + timeout: Long +): Int { + val timeoutStruct = alloc<timeval>() + timeoutStruct.tv_sec = 0 + timeoutStruct.tv_usec = timeout.toInt() * 1000 + return select(__nfds, __readfds, __writefds, __exceptfds, timeoutStruct.ptr) +} + +public actual fun socketsInit() {} + +public actual fun socketsCleanup() {} + +public actual fun getErrno(): Int = errno + +public actual fun getEagain(): Int = EAGAIN + +public actual fun getEwouldblock(): Int = EWOULDBLOCK + +public actual fun MemScope.set_send_socket_timeout(__fd: Int, timeout: Long): Int { + val timeoutStruct = alloc<timeval>() + val seconds = timeout / 1000 + timeoutStruct.tv_sec = seconds.convert() + timeoutStruct.tv_usec = ((timeout - seconds * 1000) * 1000).convert() + return setsockopt(__fd, SOL_SOCKET, SO_SNDTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt()) +} + +public actual fun MemScope.set_recv_socket_timeout(__fd: Int, timeout: Long): Int { + val timeoutStruct = alloc<timeval>() + val seconds = timeout / 1000 + timeoutStruct.tv_sec = seconds.convert() + timeoutStruct.tv_usec = ((timeout - seconds * 1000) * 1000).convert() + return setsockopt(__fd, SOL_SOCKET, SO_RCVTIMEO, timeoutStruct.ptr, sizeOf<timeval>().toUInt()) +} + +public actual fun MemScope.getaddrinfo(name: String, service: String?): CPointer<sockaddr>? { + val hints = alloc<addrinfo>() + platform.posix.memset(hints.ptr, 0, sizeOf<addrinfo>().convert()) + hints.ai_family = platform.posix.AF_UNSPEC + hints.ai_socktype = platform.posix.SOCK_STREAM + hints.ai_protocol = platform.posix.IPPROTO_TCP + val result = alloc<CPointerVar<addrinfo>>() + if (getaddrinfo(name, service, hints.ptr, result.ptr) == 0) { + return result.pointed?.ai_addr + } + return null +} + +public actual fun fdSet(fd: Int, fdSet: CValuesRef<fd_set>) { + __darwin_fd_set(fd, fdSet) +} + +public actual fun fdZero(fdSet: CValuesRef<fd_set>) { + memset(fdSet, 0, sizeOf<fd_set>().convert()) +} + +public actual fun fdIsSet(fd: Int, fdSet: CValuesRef<fd_set>): Int { + return __darwin_fd_isset(fd, fdSet) +} + +public actual fun gettimeofday(timeval: timeval) { + gettimeofday(timeval.ptr, null) +} diff --git a/kmqtt-common/src/watchosArm32Main/kotlin/Posix.kt b/kmqtt-common/src/watchosArm32Main/kotlin/io/github/davidepianca98/Posix.kt similarity index 99% rename from kmqtt-common/src/watchosArm32Main/kotlin/Posix.kt rename to kmqtt-common/src/watchosArm32Main/kotlin/io/github/davidepianca98/Posix.kt index 5d13333de4536de09b5b7304d8ab6494975bdb6b..ee623301dca3bd92a2131dc57d621a76ca9a9b5b 100644 --- a/kmqtt-common/src/watchosArm32Main/kotlin/Posix.kt +++ b/kmqtt-common/src/watchosArm32Main/kotlin/io/github/davidepianca98/Posix.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import platform.posix.* diff --git a/kmqtt-common/src/watchosArm64Main/kotlin/Posix.kt b/kmqtt-common/src/watchosArm64Main/kotlin/io/github/davidepianca98/Posix.kt similarity index 99% rename from kmqtt-common/src/watchosArm64Main/kotlin/Posix.kt rename to kmqtt-common/src/watchosArm64Main/kotlin/io/github/davidepianca98/Posix.kt index 5d13333de4536de09b5b7304d8ab6494975bdb6b..ee623301dca3bd92a2131dc57d621a76ca9a9b5b 100644 --- a/kmqtt-common/src/watchosArm64Main/kotlin/Posix.kt +++ b/kmqtt-common/src/watchosArm64Main/kotlin/io/github/davidepianca98/Posix.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import platform.posix.* diff --git a/kmqtt-common/src/watchosSimulatorArm64Main/kotlin/Posix.kt b/kmqtt-common/src/watchosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt similarity index 99% rename from kmqtt-common/src/watchosSimulatorArm64Main/kotlin/Posix.kt rename to kmqtt-common/src/watchosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt index 5d13333de4536de09b5b7304d8ab6494975bdb6b..ee623301dca3bd92a2131dc57d621a76ca9a9b5b 100644 --- a/kmqtt-common/src/watchosSimulatorArm64Main/kotlin/Posix.kt +++ b/kmqtt-common/src/watchosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import platform.posix.* diff --git a/kmqtt-common/src/watchosX64Main/kotlin/Posix.kt b/kmqtt-common/src/watchosX64Main/kotlin/io/github/davidepianca98/Posix.kt similarity index 99% rename from kmqtt-common/src/watchosX64Main/kotlin/Posix.kt rename to kmqtt-common/src/watchosX64Main/kotlin/io/github/davidepianca98/Posix.kt index 5d13333de4536de09b5b7304d8ab6494975bdb6b..ee623301dca3bd92a2131dc57d621a76ca9a9b5b 100644 --- a/kmqtt-common/src/watchosX64Main/kotlin/Posix.kt +++ b/kmqtt-common/src/watchosX64Main/kotlin/io/github/davidepianca98/Posix.kt @@ -1,3 +1,5 @@ +package io.github.davidepianca98 + import kotlinx.cinterop.* import platform.posix.*