288 lines
7.7 KiB
Swift
288 lines
7.7 KiB
Swift
//
|
|
// Copyright © 2024 osy. All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
|
|
import Foundation
|
|
import SwiftConnect
|
|
|
|
enum UTMRemoteMessageServer: UInt8, MessageID {
|
|
static let version = 1
|
|
case serverHandshake
|
|
case listVirtualMachines
|
|
case reorderVirtualMachines
|
|
case getQEMUConfiguration
|
|
case getPackageSize
|
|
case getPackageDataFile
|
|
case startVirtualMachine
|
|
case stopVirtualMachine
|
|
case restartVirtualMachine
|
|
case pauseVirtualMachine
|
|
case resumeVirtualMachine
|
|
case saveSnapshotVirtualMachine
|
|
case deleteSnapshotVirtualMachine
|
|
case restoreSnapshotVirtualMachine
|
|
case changePointerTypeVirtualMachine
|
|
}
|
|
|
|
|
|
enum UTMRemoteMessageClient: UInt8, MessageID {
|
|
static let version = 1
|
|
case clientHandshake
|
|
case listHasChangedOrder
|
|
case QEMUConfigurationHasChanged
|
|
case packageDataFileHasChanged
|
|
case virtualMachineDidTransition
|
|
case virtualMachineDidError
|
|
}
|
|
|
|
extension UTMRemoteMessageServer {
|
|
struct ServerHandshake: Message {
|
|
static let id = UTMRemoteMessageServer.serverHandshake
|
|
|
|
struct Request: Serializable, Codable {
|
|
let version: Int
|
|
let password: String?
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {
|
|
let version: Int
|
|
let isAuthenticated: Bool
|
|
let capabilities: UTMCapabilities
|
|
let model: String
|
|
}
|
|
}
|
|
|
|
struct ListVirtualMachines: Message {
|
|
static let id = UTMRemoteMessageServer.listVirtualMachines
|
|
|
|
struct Request: Serializable, Codable {}
|
|
|
|
struct Information: Serializable, Codable {
|
|
let id: UUID
|
|
let name: String
|
|
let path: String
|
|
let isShortcut: Bool
|
|
let isSuspended: Bool
|
|
let backend: UTMBackend
|
|
let state: UTMVirtualMachineState
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {
|
|
let items: [Information]
|
|
}
|
|
}
|
|
|
|
struct ReorderVirtualMachines: Message {
|
|
static let id = UTMRemoteMessageServer.reorderVirtualMachines
|
|
|
|
struct Request: Serializable, Codable {
|
|
let ids: [UUID]
|
|
let offset: Int
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {}
|
|
}
|
|
|
|
struct GetQEMUConfiguration: Message {
|
|
static let id = UTMRemoteMessageServer.getQEMUConfiguration
|
|
|
|
struct Request: Serializable, Codable {
|
|
let id: UUID
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {
|
|
let configuration: UTMQemuConfiguration
|
|
}
|
|
}
|
|
|
|
struct GetPackageSize: Message {
|
|
static let id = UTMRemoteMessageServer.getPackageSize
|
|
|
|
struct Request: Serializable, Codable {
|
|
let id: UUID
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {
|
|
let size: Int64
|
|
}
|
|
}
|
|
|
|
struct GetPackageDataFile: Message {
|
|
static let id = UTMRemoteMessageServer.getPackageDataFile
|
|
|
|
struct Request: Serializable, Codable {
|
|
let id: UUID
|
|
let name: String
|
|
let lastModified: Date?
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {
|
|
let data: Data?
|
|
let lastModified: Date
|
|
}
|
|
}
|
|
|
|
struct StartVirtualMachine: Message {
|
|
static let id = UTMRemoteMessageServer.startVirtualMachine
|
|
|
|
struct Request: Serializable, Codable {
|
|
let id: UUID
|
|
let options: UTMVirtualMachineStartOptions
|
|
}
|
|
|
|
struct ServerInformation: Serializable, Codable {
|
|
let spicePortInternal: UInt16
|
|
let spicePortExternal: UInt16?
|
|
let spiceHostExternal: String?
|
|
let spicePublicKey: Data
|
|
let spicePassword: String
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {
|
|
let serverInfo: ServerInformation
|
|
}
|
|
}
|
|
|
|
struct StopVirtualMachine: Message {
|
|
static let id = UTMRemoteMessageServer.stopVirtualMachine
|
|
|
|
struct Request: Serializable, Codable {
|
|
let id: UUID
|
|
let method: UTMVirtualMachineStopMethod
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {}
|
|
}
|
|
|
|
struct RestartVirtualMachine: Message {
|
|
static let id = UTMRemoteMessageServer.restartVirtualMachine
|
|
|
|
struct Request: Serializable, Codable {
|
|
let id: UUID
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {}
|
|
}
|
|
|
|
struct PauseVirtualMachine: Message {
|
|
static let id = UTMRemoteMessageServer.pauseVirtualMachine
|
|
|
|
struct Request: Serializable, Codable {
|
|
let id: UUID
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {}
|
|
}
|
|
|
|
struct ResumeVirtualMachine: Message {
|
|
static let id = UTMRemoteMessageServer.resumeVirtualMachine
|
|
|
|
struct Request: Serializable, Codable {
|
|
let id: UUID
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {}
|
|
}
|
|
|
|
struct SaveSnapshotVirtualMachine: Message {
|
|
static let id = UTMRemoteMessageServer.saveSnapshotVirtualMachine
|
|
|
|
struct Request: Serializable, Codable {
|
|
let id: UUID
|
|
let name: String?
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {}
|
|
}
|
|
|
|
struct DeleteSnapshotVirtualMachine: Message {
|
|
static let id = UTMRemoteMessageServer.deleteSnapshotVirtualMachine
|
|
|
|
struct Request: Serializable, Codable {
|
|
let id: UUID
|
|
let name: String?
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {}
|
|
}
|
|
|
|
struct RestoreSnapshotVirtualMachine: Message {
|
|
static let id = UTMRemoteMessageServer.restoreSnapshotVirtualMachine
|
|
|
|
struct Request: Serializable, Codable {
|
|
let id: UUID
|
|
let name: String?
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {}
|
|
}
|
|
|
|
struct ChangePointerTypeVirtualMachine: Message {
|
|
static let id = UTMRemoteMessageServer.changePointerTypeVirtualMachine
|
|
|
|
struct Request: Serializable, Codable {
|
|
let id: UUID
|
|
let isTabletMode: Bool
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {}
|
|
}
|
|
}
|
|
|
|
extension Serializable where Self == UTMRemoteMessageServer.GetQEMUConfiguration.Reply {
|
|
static func decode(_ data: Data) throws -> Self {
|
|
let decoder = Decoder()
|
|
decoder.userInfo[.dataURL] = URL(fileURLWithPath: "/")
|
|
return try decoder.decode(Self.self, from: data)
|
|
}
|
|
}
|
|
|
|
extension UTMRemoteMessageClient {
|
|
struct ClientHandshake: Message {
|
|
static let id = UTMRemoteMessageClient.clientHandshake
|
|
|
|
struct Request: Serializable, Codable {
|
|
let version: Int
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {
|
|
let version: Int
|
|
let capabilities: UTMCapabilities
|
|
}
|
|
}
|
|
|
|
struct VirtualMachineDidTransition: Message {
|
|
static let id = UTMRemoteMessageClient.virtualMachineDidTransition
|
|
|
|
struct Request: Serializable, Codable {
|
|
let id: UUID
|
|
let state: UTMVirtualMachineState
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {}
|
|
}
|
|
|
|
struct VirtualMachineDidError: Message {
|
|
static let id = UTMRemoteMessageClient.virtualMachineDidError
|
|
|
|
struct Request: Serializable, Codable {
|
|
let id: UUID
|
|
let errorMessage: String
|
|
}
|
|
|
|
struct Reply: Serializable, Codable {}
|
|
}
|
|
}
|