2022-01-24 17:17:06 +01:00
|
|
|
import Foundation
|
|
|
|
|
|
|
|
/**
|
|
|
|
A result from sending a key to the device.
|
|
|
|
*/
|
2022-04-07 23:53:25 +02:00
|
|
|
enum MessageResult: UInt8 {
|
2022-04-08 13:33:09 +02:00
|
|
|
|
2022-01-24 17:17:06 +01:00
|
|
|
/// Text content was received, although binary data was expected
|
|
|
|
case textReceived = 1
|
2022-04-08 13:33:09 +02:00
|
|
|
|
2022-01-24 17:17:06 +01:00
|
|
|
/// A socket event on the device was unexpected (not binary data)
|
|
|
|
case unexpectedSocketEvent = 2
|
2022-04-08 13:33:09 +02:00
|
|
|
|
2023-08-09 16:26:07 +02:00
|
|
|
/// The size of the payload (i.e. message) was invalid
|
|
|
|
case invalidMessageSize = 3
|
2022-04-07 23:53:25 +02:00
|
|
|
|
|
|
|
/// The transmitted message could not be authenticated using the key
|
|
|
|
case messageAuthenticationFailed = 4
|
2022-04-08 13:33:09 +02:00
|
|
|
|
2022-04-07 23:53:25 +02:00
|
|
|
/// The message time was not within the acceptable bounds
|
|
|
|
case messageTimeMismatch = 5
|
2022-04-08 13:33:09 +02:00
|
|
|
|
2022-01-24 17:17:06 +01:00
|
|
|
/// A later key has been used, invalidating this key (to prevent replay attacks after blocked communication)
|
2022-04-07 23:53:25 +02:00
|
|
|
case messageCounterInvalid = 6
|
2022-04-08 13:33:09 +02:00
|
|
|
|
2022-01-24 17:17:06 +01:00
|
|
|
/// The key was accepted by the device, and the door will be opened
|
2022-04-07 23:53:25 +02:00
|
|
|
case messageAccepted = 7
|
|
|
|
|
2023-08-08 15:17:59 +02:00
|
|
|
/// The device id is invalid
|
|
|
|
case messageDeviceInvalid = 8
|
|
|
|
|
2022-04-07 23:53:25 +02:00
|
|
|
|
2022-01-24 17:17:06 +01:00
|
|
|
/// The request did not contain body data with the key
|
2022-01-29 10:36:49 +01:00
|
|
|
case noBodyData = 10
|
2022-04-08 13:33:09 +02:00
|
|
|
|
2022-01-24 17:17:06 +01:00
|
|
|
/// The device is not connected
|
2022-01-29 10:36:49 +01:00
|
|
|
case deviceNotConnected = 12
|
2022-04-08 13:33:09 +02:00
|
|
|
|
2022-01-29 10:26:30 +01:00
|
|
|
/// The device did not respond within the timeout
|
2022-01-29 10:36:49 +01:00
|
|
|
case deviceTimedOut = 13
|
2022-04-07 23:53:25 +02:00
|
|
|
|
|
|
|
/// Another message is being processed by the device
|
|
|
|
case operationInProgress = 14
|
2022-05-01 13:12:16 +02:00
|
|
|
|
|
|
|
/// The device is connected
|
|
|
|
case deviceConnected = 15
|
2023-08-09 16:26:07 +02:00
|
|
|
|
|
|
|
case invalidUrlParameter = 20
|
|
|
|
|
|
|
|
case invalidResponseAuthentication = 21
|
2022-01-29 10:36:49 +01:00
|
|
|
}
|
|
|
|
|
2022-04-07 23:53:25 +02:00
|
|
|
extension MessageResult: CustomStringConvertible {
|
2022-04-08 13:33:09 +02:00
|
|
|
|
2022-01-29 10:36:49 +01:00
|
|
|
var description: String {
|
|
|
|
switch self {
|
|
|
|
case .textReceived:
|
|
|
|
return "The device received unexpected text"
|
|
|
|
case .unexpectedSocketEvent:
|
|
|
|
return "Unexpected socket event for the device"
|
2023-08-09 16:26:07 +02:00
|
|
|
case .invalidMessageSize:
|
2022-04-07 23:53:25 +02:00
|
|
|
return "Invalid message data"
|
|
|
|
case .messageAuthenticationFailed:
|
|
|
|
return "Message authentication failed"
|
|
|
|
case .messageTimeMismatch:
|
|
|
|
return "Message time invalid"
|
|
|
|
case .messageCounterInvalid:
|
|
|
|
return "Message counter invalid"
|
|
|
|
case .messageAccepted:
|
|
|
|
return "Message accepted"
|
2023-08-08 15:17:59 +02:00
|
|
|
case .messageDeviceInvalid:
|
|
|
|
return "Invalid device ID"
|
2022-04-07 23:53:25 +02:00
|
|
|
case .noBodyData:
|
|
|
|
return "No body data included in the request"
|
|
|
|
case .deviceNotConnected:
|
|
|
|
return "Device not connected"
|
2022-01-29 10:36:49 +01:00
|
|
|
case .deviceTimedOut:
|
|
|
|
return "The device did not respond"
|
2022-04-07 23:53:25 +02:00
|
|
|
case .operationInProgress:
|
|
|
|
return "Another operation is in progress"
|
2022-05-01 13:12:16 +02:00
|
|
|
case .deviceConnected:
|
|
|
|
return "The device is connected"
|
2023-08-09 16:26:07 +02:00
|
|
|
case .invalidUrlParameter:
|
|
|
|
return "The url parameter could not be found"
|
|
|
|
case .invalidResponseAuthentication:
|
|
|
|
return "The response could not be authenticated"
|
2022-01-29 10:36:49 +01:00
|
|
|
}
|
|
|
|
}
|
2022-01-24 17:17:06 +01:00
|
|
|
}
|
2023-08-09 16:26:07 +02:00
|
|
|
|
|
|
|
extension MessageResult {
|
|
|
|
|
|
|
|
var encoded: Data {
|
|
|
|
Data([rawValue])
|
|
|
|
}
|
|
|
|
}
|