14
14
15
15
#if canImport(Darwin)
16
16
import dnssd
17
- import NIOCore
18
17
19
18
/// ``DNSResolver`` implementation backed by dnssd framework.
20
19
public struct DNSSDDNSResolver : DNSResolver {
@@ -267,7 +266,7 @@ extension DNSSD {
267
266
}
268
267
269
268
let bufferPtr = UnsafeBufferPointer ( start: ptr, count: Int ( length) )
270
- var buffer = ByteBuffer ( bytes : bufferPtr)
269
+ var buffer = Array ( bufferPtr) [ ... ]
271
270
272
271
guard let nameserver = self . readName ( & buffer) else {
273
272
throw AsyncDNSResolver . Error. badResponse ( " failed to read name " )
@@ -290,7 +289,7 @@ extension DNSSD {
290
289
}
291
290
292
291
let bufferPtr = UnsafeBufferPointer ( start: ptr, count: Int ( length) )
293
- var buffer = ByteBuffer ( bytes : bufferPtr)
292
+ var buffer = Array ( bufferPtr) [ ... ]
294
293
295
294
guard let cname = self . readName ( & buffer) else {
296
295
throw AsyncDNSResolver . Error. badResponse ( " failed to read name " )
@@ -313,7 +312,7 @@ extension DNSSD {
313
312
}
314
313
315
314
let bufferPtr = UnsafeBufferPointer ( start: ptr, count: Int ( length) )
316
- var buffer = ByteBuffer ( bytes : bufferPtr)
315
+ var buffer = Array ( bufferPtr) [ ... ]
317
316
318
317
guard let mname = self . readName ( & buffer) ,
319
318
let rname = self . readName ( & buffer) ,
@@ -350,7 +349,7 @@ extension DNSSD {
350
349
}
351
350
352
351
let bufferPtr = UnsafeBufferPointer ( start: ptr, count: Int ( length) )
353
- var buffer = ByteBuffer ( bytes : bufferPtr)
352
+ var buffer = Array ( bufferPtr) [ ... ]
354
353
355
354
guard let name = self . readName ( & buffer) else {
356
355
throw AsyncDNSResolver . Error. badResponse ( " failed to read name " )
@@ -373,7 +372,7 @@ extension DNSSD {
373
372
}
374
373
375
374
let bufferPtr = UnsafeBufferPointer ( start: ptr, count: Int ( length) )
376
- var buffer = ByteBuffer ( bytes : bufferPtr)
375
+ var buffer = Array ( bufferPtr) [ ... ]
377
376
378
377
guard let priority = buffer. readInteger ( as: UInt16 . self) ,
379
378
let host = self . readName ( & buffer) else {
@@ -416,7 +415,7 @@ extension DNSSD {
416
415
}
417
416
418
417
let bufferPtr = UnsafeBufferPointer ( start: ptr, count: Int ( length) )
419
- var buffer = ByteBuffer ( bytes : bufferPtr)
418
+ var buffer = Array ( bufferPtr) [ ... ]
420
419
421
420
guard let priority = buffer. readInteger ( as: UInt16 . self) ,
422
421
let weight = buffer. readInteger ( as: UInt16 . self) ,
@@ -440,13 +439,14 @@ extension DNSSD {
440
439
}
441
440
442
441
extension DNSSDQueryReplyHandler {
443
- func readName( _ buffer: inout ByteBuffer ) -> String ? {
442
+ func readName( _ buffer: inout ArraySlice < UInt8 > ) -> String ? {
444
443
var parts : [ String ] = [ ]
445
444
while let length = buffer. readInteger ( as: UInt8 . self) ,
446
445
length > 0 ,
447
446
let part = buffer. readString ( length: Int ( length) ) {
448
447
parts. append ( part)
449
448
}
449
+
450
450
return parts. isEmpty ? nil : parts. joined ( separator: " . " )
451
451
}
452
452
@@ -460,4 +460,30 @@ extension DNSSDQueryReplyHandler {
460
460
return record
461
461
}
462
462
}
463
+
464
+ extension ArraySlice < UInt8 > {
465
+ mutating func readInteger< T: FixedWidthInteger > ( as: T . Type = T . self) -> T ? {
466
+ let size = MemoryLayout< T> . size
467
+ guard self . count >= size else { return nil }
468
+
469
+ let value = self . withUnsafeBytes { pointer in
470
+ var value = T . zero
471
+ Swift . withUnsafeMutableBytes ( of: & value) { valuePointer in
472
+ valuePointer. copyMemory ( from: UnsafeRawBufferPointer ( rebasing: pointer [ ..< size] ) )
473
+ }
474
+ return value. bigEndian
475
+ }
476
+
477
+ self = self . dropFirst ( size)
478
+ return value
479
+ }
480
+
481
+ mutating func readString( length: Int ) -> String ? {
482
+ guard self . count >= length else { return nil }
483
+
484
+ let prefix = self . prefix ( length)
485
+ self = self . dropFirst ( length)
486
+ return String ( decoding: prefix, as: UTF8 . self)
487
+ }
488
+ }
463
489
#endif
0 commit comments