Skip to content

Commit

Permalink
disconnect packet
Browse files Browse the repository at this point in the history
  • Loading branch information
sbSteveK committed May 3, 2024
1 parent 8559c63 commit 1b8a5f4
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 33 deletions.
11 changes: 6 additions & 5 deletions Source/AwsCommonRuntimeKit/mqtt/Mqtt5Client.swift
Original file line number Diff line number Diff line change
Expand Up @@ -280,12 +280,14 @@ public class Mqtt5Client {
/// Handles lifecycle events from native Mqtt Client
internal func MqttClientHandleLifecycleEvent(_ lifecycleEvent: UnsafePointer<aws_mqtt5_client_lifecycle_event>?) {

// todo simplify?
guard let lifecycleEvent: UnsafePointer<aws_mqtt5_client_lifecycle_event> = lifecycleEvent else {
fatalError("MqttClientLifecycleEvents was called from native without an aws_mqtt5_client_lifecycle_event.")
}

let crtError = CRTError(code: lifecycleEvent.pointee.error_code)

// todo simplify?
if let userData = lifecycleEvent.pointee.user_data {
let callbackCore: MqttCallbackCore = Unmanaged<MqttCallbackCore>.fromOpaque(userData).takeUnretainedValue()

Expand Down Expand Up @@ -325,10 +327,10 @@ internal func MqttClientHandleLifecycleEvent(_ lifecycleEvent: UnsafePointer<aws

case AWS_MQTT5_CLET_DISCONNECTION:

guard let disconnectPacket = DisconnectPacket.convertFromNative(lifecycleEvent.pointee.disconnect_data) else {
let lifecycleDisconnectData = LifecycleDisconnectData(crtError: crtError)
callbackCore.onLifecycleEventDisconnection(lifecycleDisconnectData)
return
var disconnectPacket: DisconnectPacket?

if let disconnectView: UnsafePointer<aws_mqtt5_packet_disconnect_view> = lifecycleEvent.pointee.disconnect_data {
disconnectPacket = DisconnectPacket(disconnectView)
}

let lifecycleDisconnectData = LifecycleDisconnectData(
Expand All @@ -344,7 +346,6 @@ internal func MqttClientHandleLifecycleEvent(_ lifecycleEvent: UnsafePointer<aws
fatalError("A lifecycle event with an invalid event type was encountered.")
}
}

}
}

Expand Down
49 changes: 21 additions & 28 deletions Source/AwsCommonRuntimeKit/mqtt/Mqtt5Packets.swift
Original file line number Diff line number Diff line change
Expand Up @@ -650,7 +650,28 @@ public class DisconnectPacket: CStruct {
self.reasonString = reasonString
self.serverReference = serverReference
self.userProperties = userProperties
}

internal convenience init(_ from: UnsafePointer<aws_mqtt5_packet_disconnect_view>){
let disconnectView = from.pointee
guard let reasonCode = DisconnectReasonCode(rawValue: Int(disconnectView.reason_code.rawValue)) else {
fatalError("aws_mqtt5_packet_disconnect_view from native missing a reason code.")
}
let sessionExpiryInterval = convertOptionalUInt32(disconnectView.session_expiry_interval_seconds)
let sessionExpiryIntervalSeconds: TimeInterval? = sessionExpiryInterval.map { TimeInterval($0) }
let reasonString = convertAwsByteCursorToOptionalString(disconnectView.reason_string)
let serverReference = convertAwsByteCursorToOptionalString(disconnectView.reason_string)
let userProperties = convertOptionalUserProperties(
count: disconnectView.user_property_count,
userPropertiesPointer: disconnectView.user_properties)

self.init(reasonCode: reasonCode,
sessionExpiryInterval: sessionExpiryIntervalSeconds,
reasonString: reasonString,
serverReference: serverReference,
userProperties: userProperties)
}

func validateConversionToNative() throws {
if let sessionExpiryInterval {
if sessionExpiryInterval < 0 || sessionExpiryInterval > Double(UInt32.max) {
Expand Down Expand Up @@ -691,34 +712,6 @@ public class DisconnectPacket: CStruct {
}
}
}

static func convertFromNative(_ from: UnsafePointer<aws_mqtt5_packet_disconnect_view>?) -> DisconnectPacket? {
guard let from else {
return nil
}
let disconnectView = from.pointee
guard let reasonCode = DisconnectReasonCode(rawValue: Int(disconnectView.reason_code.rawValue)) else {
fatalError("aws_mqtt5_packet_disconnect_view from native missing a reason code.")
}

let sessionExpiryInterval = convertOptionalUInt32(disconnectView.session_expiry_interval_seconds)
let sessionExpiryIntervalSeconds: TimeInterval? = sessionExpiryInterval.map { TimeInterval($0) }
let reasonString = convertAwsByteCursorToOptionalString(disconnectView.reason_string)
let serverReference = convertAwsByteCursorToOptionalString(disconnectView.reason_string)
let userProperties = convertOptionalUserProperties(
count: disconnectView.user_property_count,
userPropertiesPointer: disconnectView.user_properties)

let disconnectPacket = DisconnectPacket(
reasonCode: reasonCode,
sessionExpiryInterval: sessionExpiryIntervalSeconds,
reasonString: reasonString,
serverReference: serverReference,
userProperties: userProperties
)
return disconnectPacket

}
}

/// Data model of an `MQTT5 CONNACK <https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901074>`_ packet.
Expand Down

0 comments on commit 1b8a5f4

Please sign in to comment.