Sesame-Server/Sources/App/API/MessageResult.swift

101 lines
2.9 KiB
Swift
Raw Normal View History

2022-01-24 17:17:06 +01:00
import Foundation
/**
A result from sending a key to the device.
*/
2023-11-10 13:45:42 +01:00
enum MessageResult: UInt8, Error {
2022-01-24 17:17:06 +01:00
/// Text content was received, although binary data was expected
case textReceived = 1
2022-01-24 17:17:06 +01:00
/// A socket event on the device was unexpected (not binary data)
case unexpectedSocketEvent = 2
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-07 23:53:25 +02:00
/// The message time was not within the acceptable bounds
case messageTimeMismatch = 5
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-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
case noBodyData = 10
2022-01-24 17:17:06 +01:00
/// The device is not connected
case deviceNotConnected = 12
/// The device did not respond within the timeout
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
2023-11-10 13:45:42 +01:00
case invalidDeviceResponse = 22
}
2022-04-07 23:53:25 +02:00
extension MessageResult: CustomStringConvertible {
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"
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"
2023-11-10 13:45:42 +01:00
case .invalidDeviceResponse:
return "The device responded with invalid data"
}
}
2022-01-24 17:17:06 +01:00
}
2023-08-09 16:26:07 +02:00
extension MessageResult {
var encoded: Data {
Data([rawValue])
}
}