From be3610451541d46711c27cd299f8d3fac5557464 Mon Sep 17 00:00:00 2001 From: Davide Pianca <davidepianca98@gmail.com> Date: Wed, 11 Dec 2024 12:20:58 +0100 Subject: [PATCH] Move files from root package to io.github.davidepianca98 --- kmqtt-broker/src/commonMain/kotlin/Main.kt | 5 +- .../github/davidepianca98}/ShutdownHook.kt | 2 + .../davidepianca98}/datastructures/Trie.kt | 6 +- .../github/davidepianca98}/mqtt/Will.kt | 12 +- .../davidepianca98}/mqtt/broker/Broker.kt | 39 +-- .../mqtt/broker/ClientConnection.kt | 78 ++++-- .../davidepianca98}/mqtt/broker/ISession.kt | 12 +- .../davidepianca98}/mqtt/broker/Session.kt | 26 +- .../mqtt/broker/cluster/ClusterConnection.kt | 28 ++- .../broker/cluster/ClusterCurrentPacket.kt | 19 +- .../cluster/ClusterDiscoveryConnection.kt | 8 +- .../mqtt/broker/cluster/ClusterExtensions.kt | 9 +- .../mqtt/broker/cluster/ClusterSettings.kt | 2 +- .../mqtt/broker/cluster/DiscoveryPacket.kt | 2 +- .../mqtt/broker/cluster/RemoteSession.kt | 22 +- .../cluster/packets/AddSessionPacket.kt | 8 +- .../cluster/packets/AddSubscriptionPacket.kt | 16 +- .../broker/cluster/packets/ClusterPacket.kt | 5 + .../packets/ClusterPacketDeserializer.kt | 10 +- .../broker/cluster/packets/PublishPacket.kt | 10 +- .../packets/RemoveSubscriptionPacket.kt | 8 +- .../cluster/packets/SessionTakenOverPacket.kt | 8 +- .../cluster/packets/SessionUpdatePacket.kt | 8 +- .../cluster/packets/SetRetainedPacket.kt | 10 +- .../mqtt/broker/interfaces/Authentication.kt | 2 +- .../mqtt/broker/interfaces/Authorization.kt | 2 +- .../mqtt/broker/interfaces/BytesMetrics.kt | 2 +- .../broker/interfaces/ConnectionCallbacks.kt | 2 +- .../interfaces/EnhancedAuthentication.kt | 2 +- .../mqtt/broker/interfaces/MiscCallbacks.kt | 2 +- .../broker/interfaces/PacketInterceptor.kt | 4 +- .../mqtt/broker/interfaces/Persistence.kt | 8 +- .../mqtt/broker/udp/UDPConnectionsMap.kt | 12 +- .../davidepianca98}/socket/ServerSocket.kt | 6 +- .../socket/ServerSocketInterface.kt | 4 +- .../socket/ServerSocketLoop.kt | 12 +- .../socket/tcp/TCPEventHandler.kt | 2 +- .../davidepianca98}/socket/tcp/WebSocket.kt | 18 +- .../socket/tls/TLSServerSocket.kt | 10 + .../davidepianca98}/socket/tls/TLSSettings.kt | 2 +- .../socket/udp/UDPEventHandler.kt | 2 +- .../davidepianca98}/socket/udp/UDPReadData.kt | 2 +- .../davidepianca98}/socket/udp/UDPSocket.kt | 2 +- .../broker/cluster/packets/ClusterPacket.kt | 5 - .../kotlin/socket/tls/TLSServerSocket.kt | 11 - .../datastructures/TrieTest.kt | 4 +- .../integration/AuthenticationTest.kt | 16 +- .../PublishSubscribeMultipleClientsTest.kt | 16 +- .../PublishSubscribeSingleClientTest.kt | 18 +- .../integration/RetainedPublishTest.kt | 18 +- .../davidepianca98}/integration/TLSTest.kt | 22 +- .../mqtt/MQTTCurrentPacketTest.kt | 4 +- .../github/davidepianca98/setShutdownHook.kt | 10 + .../davidepianca98}/socket/ServerSocket.kt | 19 +- .../socket/tls/TLSServerSocket.kt | 19 +- .../davidepianca98}/socket/udp/UDPSocket.kt | 12 +- .../src/jsMain/kotlin/setShutdownHook.kt | 7 - .../github/davidepianca98}/setShutdownHook.kt | 2 + .../davidepianca98}/socket/ServerSocket.kt | 18 +- .../socket/tls/TLSServerSocket.kt | 10 +- .../davidepianca98}/socket/udp/UDPSocket.kt | 4 +- kmqtt-broker/src/jvmTest/kotlin/RunLocal.kt | 6 +- .../github/davidepianca98}/setShutdownHook.kt | 2 + .../socket.tls/TLSServerContext.kt | 2 +- .../socket.tls/TLSServerEngine.kt | 4 +- .../github/davidepianca98}/setShutdownHook.kt | 2 + .../socket/tls/TLSServerContext.kt | 3 +- .../socket/tls/TLSServerEngine.kt | 4 +- .../github/davidepianca98}/setShutdownHook.kt | 2 + .../socket/tls/TLSServerContext.kt | 3 +- .../socket/tls/TLSServerEngine.kt | 4 +- .../github/davidepianca98}/setShutdownHook.kt | 2 + .../socket/tls/TLSServerContext.kt | 3 +- .../socket/tls/TLSServerEngine.kt | 4 +- .../github/davidepianca98}/setShutdownHook.kt | 2 + .../socket/tls/TLSServerContext.kt | 3 +- .../socket/tls/TLSServerEngine.kt | 4 +- .../davidepianca98}/socket/ServerSocket.kt | 52 ++-- .../socket/tls/TLSServerContext.kt | 2 +- .../socket/tls/TLSServerEngine.kt | 2 +- .../socket/tls/TLSServerSocket.kt | 16 +- .../davidepianca98}/socket/udp/UDPSocket.kt | 30 +-- .../github/davidepianca98}/ClientSocket.kt | 4 +- .../github/davidepianca98}/MQTTClient.kt | 100 ++++++-- .../github/davidepianca98}/TLSClientSocket.kt | 6 +- .../github/davidepianca98}/WebSocket.kt | 12 +- .../github/davidepianca98/TLSClientEngine.kt | 235 ++++++++++++++++++ .../github/davidepianca98/TLSClientEngine.kt | 235 ++++++++++++++++++ .../github/davidepianca98}/TLSClientEngine.kt | 8 +- .../github/davidepianca98}/ClientSocket.kt | 6 +- .../github/davidepianca98}/TLSClientSocket.kt | 19 +- .../github/davidepianca98}/ClientSocket.kt | 4 +- .../github/davidepianca98}/TLSClientSocket.kt | 6 +- .../github/davidepianca98}/TLSClientEngine.kt | 8 +- .../linuxX64Main/kotlin/TLSClientEngine.kt | 183 -------------- .../github/davidepianca98}/TLSClientEngine.kt | 8 +- .../macosArm64Main/kotlin/TLSClientEngine.kt | 183 -------------- .../github/davidepianca98}/TLSClientEngine.kt | 8 +- .../macosX64Main/kotlin/TLSClientEngine.kt | 183 -------------- .../github/davidepianca98/TLSClientEngine.kt | 185 ++++++++++++++ .../mingwX64Main/kotlin/TLSClientEngine.kt | 183 -------------- .../github/davidepianca98/TLSClientEngine.kt | 185 ++++++++++++++ .../github/davidepianca98}/ClientSocket.kt | 6 +- .../github/davidepianca98}/TLSClientEngine.kt | 6 +- .../github/davidepianca98}/TLSClientSocket.kt | 8 +- .../tvosArm64Main/kotlin/TLSClientEngine.kt | 183 -------------- .../github/davidepianca98/TLSClientEngine.kt | 185 ++++++++++++++ .../kotlin/TLSClientEngine.kt | 183 -------------- .../github/davidepianca98/TLSClientEngine.kt | 185 ++++++++++++++ .../src/tvosX64Main/kotlin/TLSClientEngine.kt | 183 -------------- .../github/davidepianca98/TLSClientEngine.kt | 185 ++++++++++++++ .../kotlin/TLSClientEngine.kt | 183 -------------- .../github/davidepianca98/TLSClientEngine.kt | 185 ++++++++++++++ .../kotlin/TLSClientEngine.kt | 183 -------------- .../github/davidepianca98/TLSClientEngine.kt | 185 ++++++++++++++ .../kotlin/TLSClientEngine.kt | 183 -------------- .../github/davidepianca98/TLSClientEngine.kt | 185 ++++++++++++++ .../watchosX64Main/kotlin/TLSClientEngine.kt | 183 -------------- .../github/davidepianca98/TLSClientEngine.kt | 235 ++++++++++++++++++ .../github/davidepianca98}/CommonUtils.kt | 4 +- .../github/davidepianca98}/IgnoreJs.kt | 2 + .../davidepianca98}/mqtt/MQTTCurrentPacket.kt | 53 +++- .../davidepianca98/mqtt/MQTTException.kt | 5 + .../davidepianca98}/mqtt/MQTTVersion.kt | 2 +- .../davidepianca98}/mqtt/Subscription.kt | 4 +- .../github/davidepianca98}/mqtt/TopicUtils.kt | 2 +- .../mqtt/packets/ConnectAcknowledgeFlags.kt | 2 +- .../mqtt/packets/ConnectFlags.kt | 6 +- .../mqtt/packets/MQTTControlPacketType.kt | 2 +- .../mqtt/packets/MQTTDeserializer.kt | 18 +- .../mqtt/packets/MQTTPacket.kt | 4 +- .../davidepianca98}/mqtt/packets/Qos.kt | 4 +- .../mqtt/packets/mqtt/MQTTAuth.kt | 5 + .../mqtt/packets/mqtt/MQTTConnack.kt | 6 + .../mqtt/packets/mqtt/MQTTConnect.kt | 6 +- .../mqtt/packets/mqtt/MQTTDisconnect.kt | 5 + .../mqtt/packets/mqtt/MQTTPingreq.kt | 5 + .../mqtt/packets/mqtt/MQTTPingresp.kt | 5 + .../mqtt/packets/mqtt/MQTTPuback.kt | 5 + .../mqtt/packets/mqtt/MQTTPubcomp.kt | 5 + .../mqtt/packets/mqtt/MQTTPublish.kt | 20 +- .../mqtt/packets/mqtt/MQTTPubrec.kt | 5 + .../mqtt/packets/mqtt/MQTTPubrel.kt | 5 + .../mqtt/packets/mqtt/MQTTSuback.kt | 5 + .../mqtt/packets/mqtt/MQTTSubscribe.kt | 9 + .../mqtt/packets/mqtt/MQTTUnsuback.kt | 5 + .../mqtt/packets/mqtt/MQTTUnsubscribe.kt | 4 +- .../mqtt/packets/mqttv4/ConnectReturnCode.kt | 2 +- .../mqtt/packets/mqttv4/MQTT4Connack.kt | 20 +- .../mqtt/packets/mqttv4/MQTT4Connect.kt | 20 +- .../mqtt/packets/mqttv4/MQTT4Disconnect.kt | 10 +- .../mqtt/packets/mqttv4/MQTT4Packet.kt | 5 + .../mqtt/packets/mqttv4/MQTT4Pingreq.kt | 10 +- .../mqtt/packets/mqttv4/MQTT4Pingresp.kt | 10 +- .../mqtt/packets/mqttv4/MQTT4Puback.kt | 12 +- .../mqtt/packets/mqttv4/MQTT4Pubcomp.kt | 12 +- .../mqtt/packets/mqttv4/MQTT4Publish.kt | 24 +- .../mqtt/packets/mqttv4/MQTT4Pubrec.kt | 12 +- .../mqtt/packets/mqttv4/MQTT4Pubrel.kt | 18 +- .../mqtt/packets/mqttv4/MQTT4Suback.kt | 18 +- .../mqtt/packets/mqttv4/MQTT4Subscribe.kt | 22 +- .../mqtt/packets/mqttv4/MQTT4Unsuback.kt | 12 +- .../mqtt/packets/mqttv4/MQTT4Unsubscribe.kt | 18 +- .../mqtt/packets/mqttv4/SubackReturnCode.kt | 4 +- .../mqtt/packets/mqttv5/MQTT5Auth.kt | 14 +- .../mqtt/packets/mqttv5/MQTT5Connack.kt | 16 +- .../mqtt/packets/mqttv5/MQTT5Connect.kt | 20 +- .../mqtt/packets/mqttv5/MQTT5Disconnect.kt | 14 +- .../mqtt/packets/mqttv5/MQTT5Packet.kt | 5 + .../mqtt/packets/mqttv5/MQTT5Pingreq.kt | 12 +- .../mqtt/packets/mqttv5/MQTT5Pingresp.kt | 12 +- .../mqtt/packets/mqttv5/MQTT5Properties.kt | 2 +- .../mqtt/packets/mqttv5/MQTT5Puback.kt | 14 +- .../mqtt/packets/mqttv5/MQTT5Pubcomp.kt | 14 +- .../mqtt/packets/mqttv5/MQTT5Publish.kt | 24 +- .../mqtt/packets/mqttv5/MQTT5Pubrec.kt | 14 +- .../mqtt/packets/mqttv5/MQTT5Pubrel.kt | 14 +- .../mqtt/packets/mqttv5/MQTT5Suback.kt | 14 +- .../mqtt/packets/mqttv5/MQTT5Subscribe.kt | 20 +- .../mqtt/packets/mqttv5/MQTT5Unsuback.kt | 14 +- .../mqtt/packets/mqttv5/MQTT5Unsubscribe.kt | 16 +- .../mqtt/packets/mqttv5/MQTTSerializer.kt | 12 +- .../mqtt/packets/mqttv5/Property.kt | 2 +- .../mqtt/packets/mqttv5/ReasonCode.kt | 2 +- .../packets/mqttv5/SubscriptionOptions.kt | 6 +- .../davidepianca98}/socket/IOException.kt | 2 +- .../socket/SocketClosedException.kt | 2 +- .../davidepianca98}/socket/SocketInterface.kt | 2 +- .../davidepianca98}/socket/SocketState.kt | 2 +- .../socket/streams/ByteArrayInputStream.kt | 2 +- .../socket/streams/ByteArrayOutputStream.kt | 2 +- .../socket/streams/DynamicByteBuffer.kt | 2 +- .../socket/streams/EOFException.kt | 5 + .../socket/streams/InputStream.kt | 2 +- .../socket/streams/OutputStream.kt | 2 +- .../socket/streams/StreamExtensions.kt | 2 +- .../davidepianca98}/socket/tcp/Socket.kt | 4 +- .../socket/tls/TLSClientSettings.kt | 2 +- .../davidepianca98/socket/tls/TLSSocket.kt | 5 + .../commonMain/kotlin/mqtt/MQTTException.kt | 5 - .../kotlin/mqtt/packets/mqtt/MQTTAuth.kt | 5 - .../kotlin/mqtt/packets/mqtt/MQTTConnack.kt | 6 - .../mqtt/packets/mqtt/MQTTDisconnect.kt | 5 - .../kotlin/mqtt/packets/mqtt/MQTTPingreq.kt | 5 - .../kotlin/mqtt/packets/mqtt/MQTTPingresp.kt | 5 - .../kotlin/mqtt/packets/mqtt/MQTTPuback.kt | 5 - .../kotlin/mqtt/packets/mqtt/MQTTPubcomp.kt | 5 - .../kotlin/mqtt/packets/mqtt/MQTTPubrec.kt | 5 - .../kotlin/mqtt/packets/mqtt/MQTTPubrel.kt | 5 - .../kotlin/mqtt/packets/mqtt/MQTTSuback.kt | 5 - .../kotlin/mqtt/packets/mqtt/MQTTSubscribe.kt | 9 - .../kotlin/mqtt/packets/mqtt/MQTTUnsuback.kt | 5 - .../kotlin/mqtt/packets/mqttv4/MQTT4Packet.kt | 5 - .../kotlin/mqtt/packets/mqttv5/MQTT5Packet.kt | 5 - .../kotlin/socket/streams/EOFException.kt | 5 - .../commonMain/kotlin/socket/tls/TLSSocket.kt | 5 - .../davidepianca98}/mqtt/CommonUtilsTest.kt | 8 +- .../davidepianca98}/mqtt/TopicUtilsTest.kt | 3 +- .../mqtt/packets/mqttv5/MQTTAuthTest.kt | 5 +- .../mqtt/packets/mqttv5/MQTTConnackTest.kt | 7 +- .../mqtt/packets/mqttv5/MQTTConnectTest.kt | 7 +- .../mqtt/packets/mqttv5/MQTTDisconnectTest.kt | 4 +- .../mqtt/packets/mqttv5/MQTTPingreqTest.kt | 3 +- .../mqtt/packets/mqttv5/MQTTPingrespTest.kt | 3 +- .../mqtt/packets/mqttv5/MQTTPubackTest.kt | 3 +- .../mqtt/packets/mqttv5/MQTTPubcompTest.kt | 3 +- .../mqtt/packets/mqttv5/MQTTPublishTest.kt | 5 +- .../mqtt/packets/mqttv5/MQTTPubrecTest.kt | 3 +- .../mqtt/packets/mqttv5/MQTTPubrelTest.kt | 3 +- .../mqtt/packets/mqttv5/MQTTSubackTest.kt | 4 +- .../mqtt/packets/mqttv5/MQTTSubscribeTest.kt | 8 +- .../mqtt/packets/mqttv5/MQTTUnsubackTest.kt | 4 +- .../packets/mqttv5/MQTTUnsubscribeTest.kt | 3 +- .../{ => io/github/davidepianca98}/Posix.kt | 2 + .../{ => io/github/davidepianca98}/Posix.kt | 2 + .../{ => io/github/davidepianca98}/Posix.kt | 2 + kmqtt-common/src/jsMain/kotlin/IgnoreJs.kt | 1 - .../io/github/davidepianca98/IgnoreJs.kt | 5 + .../davidepianca98}/currentTimeMillis.kt | 2 + .../davidepianca98}/socket/tcp/Socket.kt | 8 +- .../davidepianca98}/socket/tls/NodeTls.kt | 2 +- .../davidepianca98}/socket/tls/TLSSocket.kt | 6 +- .../{ => io/github/davidepianca98}/utils.kt | 2 +- .../github/davidepianca98}/IgnoreJs.kt | 2 + .../davidepianca98}/currentTimeMillis.kt | 2 + .../davidepianca98}/socket/tcp/Socket.kt | 10 +- .../davidepianca98}/socket/tls/TLSSocket.kt | 10 +- .../{ => io/github/davidepianca98}/utils.kt | 2 + .../{ => io/github/davidepianca98}/Posix.kt | 2 + .../{ => io/github/davidepianca98}/Posix.kt | 2 + .../{ => io/github/davidepianca98}/Posix.kt | 2 + kmqtt-common/src/macosX64Main/kotlin/Posix.kt | 173 ------------- .../kotlin/io/github/davidepianca98/Posix.kt | 175 +++++++++++++ .../{ => io/github/davidepianca98}/Posix.kt | 4 +- .../github/davidepianca98}/IgnoreJs.kt | 2 +- .../{ => io/github/davidepianca98}/Posix.kt | 2 + .../davidepianca98}/currentTimeMillis.kt | 2 + .../davidepianca98}/socket/tcp/Socket.kt | 22 +- .../davidepianca98}/socket/tls/TLSEngine.kt | 2 +- .../davidepianca98}/socket/tls/TLSSocket.kt | 10 +- .../src/tvosArm64Main/kotlin/Posix.kt | 173 ------------- .../kotlin/io/github/davidepianca98/Posix.kt | 175 +++++++++++++ .../tvosSimulatorArm64Main/kotlin/Posix.kt | 173 ------------- .../kotlin/io/github/davidepianca98/Posix.kt | 175 +++++++++++++ kmqtt-common/src/tvosX64Main/kotlin/Posix.kt | 173 ------------- .../kotlin/io/github/davidepianca98/Posix.kt | 175 +++++++++++++ .../{ => io/github/davidepianca98}/Posix.kt | 2 + .../{ => io/github/davidepianca98}/Posix.kt | 2 + .../{ => io/github/davidepianca98}/Posix.kt | 2 + .../{ => io/github/davidepianca98}/Posix.kt | 2 + 270 files changed, 4008 insertions(+), 3618 deletions(-) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/ShutdownHook.kt (61%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/datastructures/Trie.kt (96%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/Will.kt (80%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/Broker.kt (93%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/ClientConnection.kt (89%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/ISession.kt (75%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/Session.kt (90%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/cluster/ClusterConnection.kt (73%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/cluster/ClusterCurrentPacket.kt (66%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/cluster/ClusterDiscoveryConnection.kt (77%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/cluster/ClusterExtensions.kt (75%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/cluster/ClusterSettings.kt (83%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/cluster/DiscoveryPacket.kt (78%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/cluster/RemoteSession.kt (75%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/cluster/packets/AddSessionPacket.kt (80%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/cluster/packets/AddSubscriptionPacket.kt (82%) create mode 100644 kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/mqtt/broker/cluster/packets/ClusterPacket.kt rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/cluster/packets/ClusterPacketDeserializer.kt (72%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/cluster/packets/PublishPacket.kt (72%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/cluster/packets/RemoveSubscriptionPacket.kt (79%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/cluster/packets/SessionTakenOverPacket.kt (75%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/cluster/packets/SessionUpdatePacket.kt (86%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/cluster/packets/SetRetainedPacket.kt (76%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/interfaces/Authentication.kt (89%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/interfaces/Authorization.kt (94%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/interfaces/BytesMetrics.kt (90%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/interfaces/ConnectionCallbacks.kt (85%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/interfaces/EnhancedAuthentication.kt (93%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/interfaces/MiscCallbacks.kt (80%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/interfaces/PacketInterceptor.kt (84%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/interfaces/Persistence.kt (90%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/broker/udp/UDPConnectionsMap.kt (74%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/ServerSocket.kt (66%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/ServerSocketInterface.kt (50%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/ServerSocketLoop.kt (88%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/tcp/TCPEventHandler.kt (81%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/tcp/WebSocket.kt (92%) create mode 100644 kmqtt-broker/src/commonMain/kotlin/io/github/davidepianca98/socket/tls/TLSServerSocket.kt rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/tls/TLSSettings.kt (83%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/udp/UDPEventHandler.kt (59%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/udp/UDPReadData.kt (70%) rename kmqtt-broker/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/udp/UDPSocket.kt (74%) delete mode 100644 kmqtt-broker/src/commonMain/kotlin/mqtt/broker/cluster/packets/ClusterPacket.kt delete mode 100644 kmqtt-broker/src/commonMain/kotlin/socket/tls/TLSServerSocket.kt rename kmqtt-broker/src/commonTest/kotlin/{ => io/github/davidepianca98}/datastructures/TrieTest.kt (97%) rename kmqtt-broker/src/commonTest/kotlin/{ => io/github/davidepianca98}/integration/AuthenticationTest.kt (86%) rename kmqtt-broker/src/commonTest/kotlin/{ => io/github/davidepianca98}/integration/PublishSubscribeMultipleClientsTest.kt (84%) rename kmqtt-broker/src/commonTest/kotlin/{ => io/github/davidepianca98}/integration/PublishSubscribeSingleClientTest.kt (74%) rename kmqtt-broker/src/commonTest/kotlin/{ => io/github/davidepianca98}/integration/RetainedPublishTest.kt (82%) rename kmqtt-broker/src/commonTest/kotlin/{ => io/github/davidepianca98}/integration/TLSTest.kt (77%) rename kmqtt-broker/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/MQTTCurrentPacketTest.kt (96%) create mode 100644 kmqtt-broker/src/jsMain/kotlin/io/github/davidepianca98/setShutdownHook.kt rename kmqtt-broker/src/jsMain/kotlin/{ => io/github/davidepianca98}/socket/ServerSocket.kt (82%) rename kmqtt-broker/src/jsMain/kotlin/{ => io/github/davidepianca98}/socket/tls/TLSServerSocket.kt (76%) rename kmqtt-broker/src/jsMain/kotlin/{ => io/github/davidepianca98}/socket/udp/UDPSocket.kt (73%) delete mode 100644 kmqtt-broker/src/jsMain/kotlin/setShutdownHook.kt rename kmqtt-broker/src/jvmMain/kotlin/{ => io/github/davidepianca98}/setShutdownHook.kt (84%) rename kmqtt-broker/src/jvmMain/kotlin/{ => io/github/davidepianca98}/socket/ServerSocket.kt (92%) rename kmqtt-broker/src/jvmMain/kotlin/{ => io/github/davidepianca98}/socket/tls/TLSServerSocket.kt (93%) rename kmqtt-broker/src/jvmMain/kotlin/{ => io/github/davidepianca98}/socket/udp/UDPSocket.kt (91%) rename kmqtt-broker/src/{macosX64Main/kotlin => linuxArm64Main/kotlin/io/github/davidepianca98}/setShutdownHook.kt (92%) rename kmqtt-broker/src/linuxArm64Main/kotlin/{ => io/github/davidepianca98}/socket.tls/TLSServerContext.kt (97%) rename kmqtt-broker/src/linuxArm64Main/kotlin/{ => io/github/davidepianca98}/socket.tls/TLSServerEngine.kt (95%) rename kmqtt-broker/src/{macosArm64Main/kotlin => linuxX64Main/kotlin/io/github/davidepianca98}/setShutdownHook.kt (92%) rename kmqtt-broker/src/{macosArm64Main/kotlin => linuxX64Main/kotlin/io/github/davidepianca98}/socket/tls/TLSServerContext.kt (97%) rename kmqtt-broker/src/{macosX64Main/kotlin => linuxX64Main/kotlin/io/github/davidepianca98}/socket/tls/TLSServerEngine.kt (95%) rename kmqtt-broker/src/{linuxArm64Main/kotlin => macosArm64Main/kotlin/io/github/davidepianca98}/setShutdownHook.kt (92%) rename kmqtt-broker/src/{linuxX64Main/kotlin => macosArm64Main/kotlin/io/github/davidepianca98}/socket/tls/TLSServerContext.kt (97%) rename kmqtt-broker/src/macosArm64Main/kotlin/{ => io/github/davidepianca98}/socket/tls/TLSServerEngine.kt (95%) rename kmqtt-broker/src/{linuxX64Main/kotlin => macosX64Main/kotlin/io/github/davidepianca98}/setShutdownHook.kt (92%) rename kmqtt-broker/src/{mingwX64Main/kotlin => macosX64Main/kotlin/io/github/davidepianca98}/socket/tls/TLSServerContext.kt (97%) rename kmqtt-broker/src/{linuxX64Main/kotlin => macosX64Main/kotlin/io/github/davidepianca98}/socket/tls/TLSServerEngine.kt (95%) rename kmqtt-broker/src/mingwX64Main/kotlin/{ => io/github/davidepianca98}/setShutdownHook.kt (92%) rename kmqtt-broker/src/{macosX64Main/kotlin => mingwX64Main/kotlin/io/github/davidepianca98}/socket/tls/TLSServerContext.kt (97%) rename kmqtt-broker/src/mingwX64Main/kotlin/{ => io/github/davidepianca98}/socket/tls/TLSServerEngine.kt (95%) rename kmqtt-broker/src/posixMain/kotlin/{ => io/github/davidepianca98}/socket/ServerSocket.kt (89%) rename kmqtt-broker/src/posixMain/kotlin/{ => io/github/davidepianca98}/socket/tls/TLSServerContext.kt (65%) rename kmqtt-broker/src/posixMain/kotlin/{ => io/github/davidepianca98}/socket/tls/TLSServerEngine.kt (93%) rename kmqtt-broker/src/posixMain/kotlin/{ => io/github/davidepianca98}/socket/tls/TLSServerSocket.kt (76%) rename kmqtt-broker/src/posixMain/kotlin/{ => io/github/davidepianca98}/socket/udp/UDPSocket.kt (80%) rename kmqtt-client/src/commonMain/kotlin/{ => io/github/davidepianca98}/ClientSocket.kt (69%) rename kmqtt-client/src/commonMain/kotlin/{ => io/github/davidepianca98}/MQTTClient.kt (86%) rename kmqtt-client/src/commonMain/kotlin/{ => io/github/davidepianca98}/TLSClientSocket.kt (65%) rename kmqtt-client/src/commonMain/kotlin/{ => io/github/davidepianca98}/WebSocket.kt (95%) create mode 100644 kmqtt-client/src/iosArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt create mode 100644 kmqtt-client/src/iosSimulatorArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt rename kmqtt-client/src/{iosArm64Main/kotlin => iosX64Main/kotlin/io/github/davidepianca98}/TLSClientEngine.kt (97%) rename kmqtt-client/src/jsMain/kotlin/{ => io/github/davidepianca98}/ClientSocket.kt (88%) rename kmqtt-client/src/jsMain/kotlin/{ => io/github/davidepianca98}/TLSClientSocket.kt (75%) rename kmqtt-client/src/jvmMain/kotlin/{ => io/github/davidepianca98}/ClientSocket.kt (92%) rename kmqtt-client/src/jvmMain/kotlin/{ => io/github/davidepianca98}/TLSClientSocket.kt (97%) rename kmqtt-client/src/linuxArm64Main/kotlin/{ => io/github/davidepianca98}/TLSClientEngine.kt (97%) delete mode 100644 kmqtt-client/src/linuxX64Main/kotlin/TLSClientEngine.kt rename kmqtt-client/src/{iosSimulatorArm64Main/kotlin => linuxX64Main/kotlin/io/github/davidepianca98}/TLSClientEngine.kt (97%) delete mode 100644 kmqtt-client/src/macosArm64Main/kotlin/TLSClientEngine.kt rename kmqtt-client/src/{iosX64Main/kotlin => macosArm64Main/kotlin/io/github/davidepianca98}/TLSClientEngine.kt (97%) delete mode 100644 kmqtt-client/src/macosX64Main/kotlin/TLSClientEngine.kt create mode 100644 kmqtt-client/src/macosX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt delete mode 100644 kmqtt-client/src/mingwX64Main/kotlin/TLSClientEngine.kt create mode 100644 kmqtt-client/src/mingwX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt rename kmqtt-client/src/posixMain/kotlin/{ => io/github/davidepianca98}/ClientSocket.kt (92%) rename kmqtt-client/src/posixMain/kotlin/{ => io/github/davidepianca98}/TLSClientEngine.kt (79%) rename kmqtt-client/src/posixMain/kotlin/{ => io/github/davidepianca98}/TLSClientSocket.kt (90%) delete mode 100644 kmqtt-client/src/tvosArm64Main/kotlin/TLSClientEngine.kt create mode 100644 kmqtt-client/src/tvosArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt delete mode 100644 kmqtt-client/src/tvosSimulatorArm64Main/kotlin/TLSClientEngine.kt create mode 100644 kmqtt-client/src/tvosSimulatorArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt delete mode 100644 kmqtt-client/src/tvosX64Main/kotlin/TLSClientEngine.kt create mode 100644 kmqtt-client/src/tvosX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt delete mode 100644 kmqtt-client/src/watchosArm32Main/kotlin/TLSClientEngine.kt create mode 100644 kmqtt-client/src/watchosArm32Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt delete mode 100644 kmqtt-client/src/watchosArm64Main/kotlin/TLSClientEngine.kt create mode 100644 kmqtt-client/src/watchosArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt delete mode 100644 kmqtt-client/src/watchosSimulatorArm64Main/kotlin/TLSClientEngine.kt create mode 100644 kmqtt-client/src/watchosSimulatorArm64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt delete mode 100644 kmqtt-client/src/watchosX64Main/kotlin/TLSClientEngine.kt create mode 100644 kmqtt-client/src/watchosX64Main/kotlin/io/github/davidepianca98/TLSClientEngine.kt rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/CommonUtils.kt (98%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/IgnoreJs.kt (74%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/MQTTCurrentPacket.kt (65%) create mode 100644 kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/MQTTException.kt rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/MQTTVersion.kt (69%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/Subscription.kt (81%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/TopicUtils.kt (98%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/ConnectAcknowledgeFlags.kt (62%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/ConnectFlags.kt (91%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/MQTTControlPacketType.kt (91%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/MQTTDeserializer.kt (94%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/MQTTPacket.kt (52%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/Qos.kt (65%) create mode 100644 kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTAuth.kt create mode 100644 kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTConnack.kt rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqtt/MQTTConnect.kt (71%) create mode 100644 kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTDisconnect.kt create mode 100644 kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPingreq.kt create mode 100644 kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPingresp.kt create mode 100644 kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPuback.kt create mode 100644 kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPubcomp.kt rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqtt/MQTTPublish.kt (72%) create mode 100644 kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPubrec.kt create mode 100644 kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTPubrel.kt create mode 100644 kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTSuback.kt create mode 100644 kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTSubscribe.kt create mode 100644 kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqtt/MQTTUnsuback.kt rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqtt/MQTTUnsubscribe.kt (56%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv4/ConnectReturnCode.kt (87%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv4/MQTT4Connack.kt (72%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv4/MQTT4Connect.kt (83%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv4/MQTT4Disconnect.kt (57%) create mode 100644 kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv4/MQTT4Packet.kt rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv4/MQTT4Pingreq.kt (57%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv4/MQTT4Pingresp.kt (57%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv4/MQTT4Puback.kt (62%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv4/MQTT4Pubcomp.kt (63%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv4/MQTT4Publish.kt (78%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv4/MQTT4Pubrec.kt (62%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv4/MQTT4Pubrel.kt (65%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv4/MQTT4Suback.kt (70%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv4/MQTT4Subscribe.kt (76%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv4/MQTT4Unsuback.kt (64%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv4/MQTT4Unsubscribe.kt (72%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv4/SubackReturnCode.kt (85%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTT5Auth.kt (82%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTT5Connack.kt (88%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTT5Connect.kt (89%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTT5Disconnect.kt (88%) create mode 100644 kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/mqtt/packets/mqttv5/MQTT5Packet.kt rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTT5Pingreq.kt (58%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTT5Pingresp.kt (58%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTT5Properties.kt (96%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTT5Puback.kt (85%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTT5Pubcomp.kt (84%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTT5Publish.kt (86%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTT5Pubrec.kt (85%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTT5Pubrel.kt (85%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTT5Suback.kt (86%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTT5Subscribe.kt (87%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTT5Unsuback.kt (85%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTT5Unsubscribe.kt (78%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTTSerializer.kt (95%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/Property.kt (95%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/ReasonCode.kt (96%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/SubscriptionOptions.kt (81%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/IOException.kt (65%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/SocketClosedException.kt (67%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/SocketInterface.kt (80%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/SocketState.kt (57%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/streams/ByteArrayInputStream.kt (93%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/streams/ByteArrayOutputStream.kt (95%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/streams/DynamicByteBuffer.kt (96%) create mode 100644 kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/streams/EOFException.kt rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/streams/InputStream.kt (92%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/streams/OutputStream.kt (91%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/streams/StreamExtensions.kt (94%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/tcp/Socket.kt (66%) rename kmqtt-common/src/commonMain/kotlin/{ => io/github/davidepianca98}/socket/tls/TLSClientSettings.kt (96%) create mode 100644 kmqtt-common/src/commonMain/kotlin/io/github/davidepianca98/socket/tls/TLSSocket.kt delete mode 100644 kmqtt-common/src/commonMain/kotlin/mqtt/MQTTException.kt delete mode 100644 kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTAuth.kt delete mode 100644 kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTConnack.kt delete mode 100644 kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTDisconnect.kt delete mode 100644 kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPingreq.kt delete mode 100644 kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPingresp.kt delete mode 100644 kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPuback.kt delete mode 100644 kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPubcomp.kt delete mode 100644 kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPubrec.kt delete mode 100644 kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTPubrel.kt delete mode 100644 kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTSuback.kt delete mode 100644 kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTSubscribe.kt delete mode 100644 kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqtt/MQTTUnsuback.kt delete mode 100644 kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv4/MQTT4Packet.kt delete mode 100644 kmqtt-common/src/commonMain/kotlin/mqtt/packets/mqttv5/MQTT5Packet.kt delete mode 100644 kmqtt-common/src/commonMain/kotlin/socket/streams/EOFException.kt delete mode 100644 kmqtt-common/src/commonMain/kotlin/socket/tls/TLSSocket.kt rename kmqtt-common/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/CommonUtilsTest.kt (93%) rename kmqtt-common/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/TopicUtilsTest.kt (98%) rename kmqtt-common/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTTAuthTest.kt (89%) rename kmqtt-common/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTTConnackTest.kt (88%) rename kmqtt-common/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTTConnectTest.kt (92%) rename kmqtt-common/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTTDisconnectTest.kt (83%) rename kmqtt-common/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTTPingreqTest.kt (85%) rename kmqtt-common/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTTPingrespTest.kt (85%) rename kmqtt-common/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTTPubackTest.kt (89%) rename kmqtt-common/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTTPubcompTest.kt (89%) rename kmqtt-common/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTTPublishTest.kt (91%) rename kmqtt-common/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTTPubrecTest.kt (88%) rename kmqtt-common/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTTPubrelTest.kt (88%) rename kmqtt-common/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTTSubackTest.kt (87%) rename kmqtt-common/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTTSubscribeTest.kt (87%) rename kmqtt-common/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTTUnsubackTest.kt (87%) rename kmqtt-common/src/commonTest/kotlin/{ => io/github/davidepianca98}/mqtt/packets/mqttv5/MQTTUnsubscribeTest.kt (94%) rename kmqtt-common/src/iosArm64Main/kotlin/{ => io/github/davidepianca98}/Posix.kt (99%) rename kmqtt-common/src/iosSimulatorArm64Main/kotlin/{ => io/github/davidepianca98}/Posix.kt (99%) rename kmqtt-common/src/iosX64Main/kotlin/{ => io/github/davidepianca98}/Posix.kt (99%) delete mode 100644 kmqtt-common/src/jsMain/kotlin/IgnoreJs.kt create mode 100644 kmqtt-common/src/jsMain/kotlin/io/github/davidepianca98/IgnoreJs.kt rename kmqtt-common/src/jsMain/kotlin/{ => io/github/davidepianca98}/currentTimeMillis.kt (72%) rename kmqtt-common/src/jsMain/kotlin/{ => io/github/davidepianca98}/socket/tcp/Socket.kt (87%) rename kmqtt-common/src/jsMain/kotlin/{ => io/github/davidepianca98}/socket/tls/NodeTls.kt (94%) rename kmqtt-common/src/jsMain/kotlin/{ => io/github/davidepianca98}/socket/tls/TLSSocket.kt (54%) rename kmqtt-common/src/jsMain/kotlin/{ => io/github/davidepianca98}/utils.kt (92%) rename kmqtt-common/src/jvmMain/kotlin/{ => io/github/davidepianca98}/IgnoreJs.kt (74%) rename kmqtt-common/src/jvmMain/kotlin/{ => io/github/davidepianca98}/currentTimeMillis.kt (71%) rename kmqtt-common/src/jvmMain/kotlin/{ => io/github/davidepianca98}/socket/tcp/Socket.kt (90%) rename kmqtt-common/src/jvmMain/kotlin/{ => io/github/davidepianca98}/socket/tls/TLSSocket.kt (96%) rename kmqtt-common/src/jvmMain/kotlin/{ => io/github/davidepianca98}/utils.kt (86%) rename kmqtt-common/src/linuxArm64Main/kotlin/{ => io/github/davidepianca98}/Posix.kt (99%) rename kmqtt-common/src/linuxX64Main/kotlin/{ => io/github/davidepianca98}/Posix.kt (99%) rename kmqtt-common/src/macosArm64Main/kotlin/{ => io/github/davidepianca98}/Posix.kt (99%) delete mode 100644 kmqtt-common/src/macosX64Main/kotlin/Posix.kt create mode 100644 kmqtt-common/src/macosX64Main/kotlin/io/github/davidepianca98/Posix.kt rename kmqtt-common/src/mingwX64Main/kotlin/{ => io/github/davidepianca98}/Posix.kt (98%) rename kmqtt-common/src/posixMain/kotlin/{ => io/github/davidepianca98}/IgnoreJs.kt (75%) rename kmqtt-common/src/posixMain/kotlin/{ => io/github/davidepianca98}/Posix.kt (98%) rename kmqtt-common/src/posixMain/kotlin/{ => io/github/davidepianca98}/currentTimeMillis.kt (92%) rename kmqtt-common/src/posixMain/kotlin/{ => io/github/davidepianca98}/socket/tcp/Socket.kt (81%) rename kmqtt-common/src/posixMain/kotlin/{ => io/github/davidepianca98}/socket/tls/TLSEngine.kt (92%) rename kmqtt-common/src/posixMain/kotlin/{ => io/github/davidepianca98}/socket/tls/TLSSocket.kt (94%) delete mode 100644 kmqtt-common/src/tvosArm64Main/kotlin/Posix.kt create mode 100644 kmqtt-common/src/tvosArm64Main/kotlin/io/github/davidepianca98/Posix.kt delete mode 100644 kmqtt-common/src/tvosSimulatorArm64Main/kotlin/Posix.kt create mode 100644 kmqtt-common/src/tvosSimulatorArm64Main/kotlin/io/github/davidepianca98/Posix.kt delete mode 100644 kmqtt-common/src/tvosX64Main/kotlin/Posix.kt create mode 100644 kmqtt-common/src/tvosX64Main/kotlin/io/github/davidepianca98/Posix.kt rename kmqtt-common/src/watchosArm32Main/kotlin/{ => io/github/davidepianca98}/Posix.kt (99%) rename kmqtt-common/src/watchosArm64Main/kotlin/{ => io/github/davidepianca98}/Posix.kt (99%) rename kmqtt-common/src/watchosSimulatorArm64Main/kotlin/{ => io/github/davidepianca98}/Posix.kt (99%) rename kmqtt-common/src/watchosX64Main/kotlin/{ => io/github/davidepianca98}/Posix.kt (99%) diff --git a/kmqtt-broker/src/commonMain/kotlin/Main.kt b/kmqtt-broker/src/commonMain/kotlin/Main.kt index 5fa61d3..02071db 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 82616b0..4d8edcf 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 2fc9e56..02b6b01 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 3b3a75e..76906ee 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 3e2fe0c..72be9db 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 57f0b64..6019c94 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 e91bde1..84de90a 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 f8118a4..ce6af4c 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 b9eb409..24f319b 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 2a75b8a..22a72b3 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 d05d7fe..a209845 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 6f393d9..3d60807 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 d7b9e50..cca0fb4 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 b3d019c..c128763 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 41fad0a..50c6d63 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 75d47ab..8e9af10 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 2c5bbb1..e126fee 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 0000000..55a0393 --- /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 b8e06d8..ad222f0 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 4cbbbf6..a9fd9c4 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 dd197c2..0c96bca 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 0ee7b0b..171e2e9 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 36d9429..3e26798 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 adbeb5d..48a67e6 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 09d0f55..a08a9ae 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 3262347..40858bc 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 743b2f5..5c13213 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 ee1899b..2960baa 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 736e2c6..01e3495 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 f549e59..ebdac94 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 4fe3348..05f281d 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 0d546c3..162b041 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 f1c3d91..9d9bc24 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 17e6849..550c5c9 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 88d72a6..5115abe 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 e351ff6..4d9aa59 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 f3b98b2..a1f5ef9 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 124b0e9..c1a4ba8 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 0000000..35a2dc1 --- /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 b744230..e287239 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 29a56c4..da56113 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 d315b19..546ee81 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 24864c3..b737d35 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 96a2761..0000000 --- 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 bdf6ab0..0000000 --- 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 7710b14..2cab901 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 67c98d6..884233b 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 2e4a460..36ff0c2 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 28b255e..5fd23bd 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 79b0d5f..4a89bd5 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 077b5cc..aab3fe9 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 3774afa..82f9720 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 0000000..05a5e80 --- /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 6784551..40515bc 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 fad911c..c4cebb0 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 fac7aa2..63b721b 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 f408c18..0000000 --- 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 c07a9a5..70ba797 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 dee547f..285c589 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 7d252a7..42b2fd9 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 a08a678..39589d2 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 d9a6718..e3e6b08 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 f8ec7b8..6fd0753 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 d55a78f..29106e7 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 0dc5def..62574c5 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 f8ec7b8..6fd0753 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 afbbd66..3b7f599 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 3c08335..d8a8e6c 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 f8ec7b8..6fd0753 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 afbbd66..3b7f599 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 3c08335..d8a8e6c 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 f8ec7b8..6fd0753 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 afbbd66..3b7f599 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 3c08335..d8a8e6c 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 801378a..3b206f3 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 afbbd66..3b7f599 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 3c08335..d8a8e6c 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 f73b772..5524be8 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 0e2a7f7..4fd9633 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 dee0771..3f1d306 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 7291574..bff7d0e 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 6a75a8f..a3eb9a9 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 46d4841..d242be1 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 218fd46..6ec25e4 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 1964002..f7a20b4 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 9d599bd..a81c6b1 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 0000000..6a7fddc --- /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 0000000..6a7fddc --- /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 b180dea..3521467 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 86c8521..df89e3f 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 a72f491..4cfa354 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 6aaf823..881b028 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 d01d03d..49b53f0 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 b180dea..3521467 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 b180dea..0000000 --- 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 b180dea..3521467 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 b180dea..0000000 --- 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 b180dea..3521467 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 b180dea..0000000 --- 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 0000000..3521467 --- /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 b180dea..0000000 --- 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 0000000..3521467 --- /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 6fcf934..ea1f393 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 f6fa7a9..d16c003 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 bb1629b..ce4fca9 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 b180dea..0000000 --- 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 0000000..3521467 --- /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 b180dea..0000000 --- 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 0000000..3521467 --- /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 b180dea..0000000 --- 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 0000000..3521467 --- /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 b180dea..0000000 --- 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 0000000..3521467 --- /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 b180dea..0000000 --- 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 0000000..3521467 --- /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 b180dea..0000000 --- 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 0000000..3521467 --- /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 b180dea..0000000 --- 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 0000000..6a7fddc --- /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 a155695..574cac1 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 74df6db..e4f9ff5 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 89d2a59..d6987e5 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 0000000..eaf4504 --- /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 f1f9b55..dfda197 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 4d35a37..9445601 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 88e4b58..c5da6be 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 e305693..a362ba3 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 afe23bf..8fdd28a 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 57b6dce..cfcb9b7 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 92310b4..85abe2c 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 59e66fd..ccb482b 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 46e3c68..4b3b506 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 0000000..2735a48 --- /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 0000000..bf99c9b --- /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 e2423bd..e031c22 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 0000000..3b34fff --- /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 0000000..0ef0a64 --- /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 0000000..f0233d9 --- /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 0000000..8603413 --- /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 0000000..dac0e73 --- /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 3c5d632..f46e24d 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 0000000..b353026 --- /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 0000000..6f93737 --- /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 0000000..a62fd0f --- /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 0000000..f2b0fc3 --- /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 0000000..22a2e55 --- /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 0332f01..367f1ac 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 647dc7f..8346c22 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 e7805ef..74dbc02 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 27e7f25..64d7067 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 66f3078..878aeb4 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 0000000..d89f638 --- /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 82e2730..bd38e72 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 0f8a0c7..a7a0cea 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 4a9ba66..0d4e06b 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 7606989..cfa9d72 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 f28ec77..bfa8839 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 1ce6844..2059561 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 f9df2b8..b04dd64 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 45cf1d5..6df7f08 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 c64ba5a..af2d735 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 cad93c2..da3d263 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 02926b0..4394c05 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 8446dd3..0c8331f 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 3777803..10971c1 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 9f5028d..b27e785 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 56f7ecd..fce84d0 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 9307ba5..ee8893d 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 0000000..eceeb66 --- /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 3404329..d5305ff 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 778a0c3..955768c 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 3bf034f..5546887 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 b424310..54f79a9 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 eff0994..7188fa5 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 9ee4340..92a9f51 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 3bd48d1..53ced26 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 80c9dca..105c8a5 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 c5f06e7..aa350b7 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 3984933..4de366f 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 13c0e59..57d3f4e 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 eebfd1e..23729a0 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 9942ef2..8ad882d 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 7b10129..a62bd4e 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 05bed9a..dfba46b 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 3e72d36..c4d1cfc 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 dbf173e..009100c 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 c1d92e1..5e028fc 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 49de172..032c99e 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 e5f078f..be78893 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 796ef24..b5bd189 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 4f79ddb..2496f3c 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 13bf16f..c2e4c7d 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 0000000..c25bee7 --- /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 bbf8575..5be09f7 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 b3049b5..ec39e1e 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 39abe02..2fd6076 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 6da9c65..81b2bda 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 9537a62..7aa1f58 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 0000000..1ed4e6f --- /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 80774e0..0000000 --- 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 3873a95..0000000 --- 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 9153ca2..0000000 --- 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 2f40b11..0000000 --- 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 497c20e..0000000 --- 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 102132d..0000000 --- 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 3e3138b..0000000 --- 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 f07a742..0000000 --- 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 c295f9e..0000000 --- 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 9f4ab71..0000000 --- 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 46dcdd1..0000000 --- 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 bd399c5..0000000 --- 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 939a3b8..0000000 --- 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 1b43340..0000000 --- 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 5f5ac5a..0000000 --- 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 5a26fe9..0000000 --- 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 6ec585d..0000000 --- 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 9a9a024..7efdf90 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 22b10ff..2bc71cf 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 b591f86..63b69e4 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 59c0019..0a83bc3 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 cda2de1..d14003a 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 b1e2ee1..6bd86ad 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 b45a862..c54f1fa 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 f294d42..4da7635 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 4e7ec56..d437472 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 e4167a8..8e3ea2b 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 4a4198f..78e9237 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 4911f19..801e24a 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 708f2f3..0efc2bb 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 8e1c8d5..4d6a06a 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 9c93c75..3bb3d2f 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 e03ae53..2fb46e8 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 26c0b61..a11b91c 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 ed51540..c1fe276 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 ed51540..c1fe276 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 ed51540..c1fe276 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 4cc375a..0000000 --- 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 0000000..a06f950 --- /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 6683b4f..fb4c53b 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 944220b..93542ce 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 d2d56c0..7609115 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 33aa7d5..74f99f8 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 43eab3c..6bef999 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 cc5d7d5..a7be206 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 866de71..a73112f 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 45da346..e040290 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 62ec6a0..930ed67 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 f74998f..f163462 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 9a1d5f1..2fa6eeb 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 1afd4df..5135fd5 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 ed51540..c1fe276 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 ed51540..0000000 --- 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 0000000..c1fe276 --- /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 a5b939a..981d73f 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 fb46615..76cb411 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 97e6a41..a2f680c 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 2e08294..8675e91 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 a0a138d..6a565dd 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 35bd2b6..36fd9e8 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 c724695..eefb65f 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 ed51540..0000000 --- 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 0000000..c1fe276 --- /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 ed51540..0000000 --- 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 0000000..c1fe276 --- /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 ed51540..0000000 --- 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 0000000..c1fe276 --- /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 5d13333..ee62330 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 5d13333..ee62330 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 5d13333..ee62330 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 5d13333..ee62330 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.* -- GitLab