41 lines
1 KiB
Swift
41 lines
1 KiB
Swift
import Foundation
|
|
|
|
struct SRVRecord: Codable & Equatable {
|
|
let priority: Int
|
|
let weight: Int
|
|
let port: Int
|
|
let target: String
|
|
let isSecure: Bool
|
|
|
|
init?(data: Data) {
|
|
guard data.count > 6 else {
|
|
return nil
|
|
}
|
|
priority = Int(data[0]) * 256 + Int(data[1])
|
|
weight = Int(data[2]) * 256 + Int(data[3])
|
|
port = Int(data[4]) * 256 + Int(data[5])
|
|
|
|
var workingTarget = ""
|
|
for byte in data[7 ... (data.count - 1)] {
|
|
var symbol = byte
|
|
symbol = symbol < 33 ? 46 : symbol
|
|
let char = String(decoding: Data([symbol]), as: UTF8.self)
|
|
workingTarget += char
|
|
}
|
|
target = workingTarget
|
|
isSecure = target.starts(with: "xmpps")
|
|
}
|
|
|
|
init(fallbackTarget: String) {
|
|
target = fallbackTarget
|
|
port = 5222
|
|
priority = 0
|
|
weight = 0
|
|
isSecure = false
|
|
}
|
|
|
|
var description: String {
|
|
"target: \(target) port: \(port) priority: \(priority) weight: \(weight)"
|
|
}
|
|
}
|