aboutsummaryrefslogtreecommitdiff
path: root/Hotline/Utility
diff options
context:
space:
mode:
authorDustin Mierau <dustin@mierau.me>2024-01-13 19:12:12 -0800
committerDustin Mierau <dustin@mierau.me>2024-01-13 19:12:12 -0800
commit3f4e2c33a4c2719388d9378def981688fcaed210 (patch)
tree01928a9347ca2dc18478da4107365a968637ccf5 /Hotline/Utility
parent2f210991684c87073dd7534d2d0416d91cf50275 (diff)
Rewrite HotlineClient to use new simpler NetSocket stream based socket lib. Seems to be working well and has fixed some connection issues with certain servers. This does away with Apple's NWConnection for everything but file transfers which I still want to be processing on another thread so will keep NWConnection for now.
Diffstat (limited to 'Hotline/Utility')
-rw-r--r--Hotline/Utility/FoundationExtensions.swift71
1 files changed, 52 insertions, 19 deletions
diff --git a/Hotline/Utility/FoundationExtensions.swift b/Hotline/Utility/FoundationExtensions.swift
index edb8bee..a1df815 100644
--- a/Hotline/Utility/FoundationExtensions.swift
+++ b/Hotline/Utility/FoundationExtensions.swift
@@ -62,8 +62,26 @@ extension Array where Element == UInt8 {
return val
}
+ mutating func consume(_ length: Int) -> Bool {
+ guard length <= self.count else {
+ return false
+ }
+
+ self.removeFirst(length)
+ return true
+ }
+
mutating func consumeBytes(_ length: Int) -> Data? {
- guard let val = self.readData(at: 0, length: length) else {
+ guard let val: Data = self.readData(at: 0, length: length) else {
+ return nil
+ }
+
+ self.removeFirst(length)
+ return val
+ }
+
+ mutating func consumeBytes(_ length: Int) -> [UInt8]? {
+ guard let val: [UInt8] = self.readData(at: 0, length: length) else {
return nil
}
@@ -130,17 +148,17 @@ extension Array where Element == UInt8 {
return nil
}
- let leftSide: UInt64 = (UInt64(self[offset]) << 56) +
+ let a: UInt64 = (UInt64(self[offset]) << 56) +
(UInt64(self[offset + 1]) << 48) +
(UInt64(self[offset + 2]) << 40) +
(UInt64(self[offset + 3]) << 32)
- let rightSide: UInt64 = (UInt64(self[offset + 4]) << 24) +
+ let b: UInt64 = (UInt64(self[offset + 4]) << 24) +
(UInt64(self[offset + 5]) << 16) +
(UInt64(self[offset + 6]) << 8) +
UInt64(self[offset + 7])
- return leftSide + rightSide
+ return a + b
}
func readDate(at offset: Int) -> Date? {
@@ -165,8 +183,15 @@ extension Array where Element == UInt8 {
return Data(self[offset..<(offset + length)])
}
+ func readData(at offset: Int, length: Int) -> [UInt8]? {
+ guard offset >= 0, offset + length <= self.count else {
+ return nil
+ }
+ return Array(self[offset..<(offset + length)])
+ }
+
func readString(at offset: Int, length: Int) -> String? {
- guard let subdata = self.readData(at: offset, length: length) else {
+ guard let subdata: Data = self.readData(at: offset, length: length) else {
return nil
}
@@ -233,8 +258,8 @@ extension Array where Element == UInt8 {
mutating func appendUInt16(_ value: UInt16, endianness: Endianness = .big) {
let val = endianness == .big ? value.bigEndian : value.littleEndian
let bytes: [UInt8] = [
- UInt8((val >> 8) & 0xFF),
- UInt8(val & 0xFF)
+ UInt8(val & 0x00FF),
+ UInt8((val >> 8) & 0x00FF),
]
self.append(contentsOf: bytes)
}
@@ -242,10 +267,10 @@ extension Array where Element == UInt8 {
mutating func appendUInt32(_ value: UInt32, endianness: Endianness = .big) {
let val = endianness == .big ? value.bigEndian : value.littleEndian
let bytes: [UInt8] = [
- UInt8((val >> 24) & 0xFF),
- UInt8((val >> 16) & 0xFF),
- UInt8((val >> 8) & 0xFF),
- UInt8(val & 0xFF)
+ UInt8(val & 0x000000FF),
+ UInt8((val >> 8) & 0x000000FF),
+ UInt8((val >> 16) & 0x000000FF),
+ UInt8((val >> 24) & 0x000000FF),
]
self.append(contentsOf: bytes)
}
@@ -253,17 +278,25 @@ extension Array where Element == UInt8 {
mutating func appendUInt64(_ value: UInt64, endianness: Endianness = .big) {
let val: UInt64 = endianness == .big ? value.bigEndian : value.littleEndian
let bytes: [UInt8] = [
- UInt8((val >> 56) & 0xFF),
- UInt8((val >> 48) & 0xFF),
- UInt8((val >> 40) & 0xFF),
- UInt8((val >> 32) & 0xFF),
- UInt8((val >> 24) & 0xFF),
- UInt8((val >> 16) & 0xFF),
- UInt8((val >> 8) & 0xFF),
- UInt8(val & 0xFF)
+ UInt8(val & 0x00000000000000FF),
+ UInt8((val >> 8) & 0x00000000000000FF),
+ UInt8((val >> 16) & 0x00000000000000FF),
+ UInt8((val >> 24) & 0x00000000000000FF),
+ UInt8((val >> 32) & 0x00000000000000FF),
+ UInt8((val >> 40) & 0x00000000000000FF),
+ UInt8((val >> 48) & 0x00000000000000FF),
+ UInt8((val >> 56) & 0x00000000000000FF),
]
self.append(contentsOf: bytes)
}
+
+ mutating func appendData(_ data: Data) {
+ self.append(contentsOf: data)
+ }
+
+ mutating func appendData(_ data: [UInt8]) {
+ self.append(contentsOf: data)
+ }
}
extension Data {