Skip to content

Commit

Permalink
Merge pull request #38 from Bouke/remove-kCFSocketReadCallBack
Browse files Browse the repository at this point in the history
kCFSocketReadCallBack is no longer defined
  • Loading branch information
Bouke committed Nov 29, 2020
2 parents 8d43882 + 81f3b87 commit 276ca1c
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 21 deletions.
10 changes: 10 additions & 0 deletions Sources/NetService/FoundationCompat.swift
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import CoreFoundation

#if os(Linux) && !compiler(>=5.0)
import class Foundation.RunLoop
import struct Foundation.RunLoopMode
Expand All @@ -12,3 +14,11 @@ extension RunLoopMode {
}
}
#endif

#if os(Linux)
extension CFRunLoopMode {
static var commonModes: CFRunLoopMode {
return kCFRunLoopCommonModes
}
}
#endif
18 changes: 9 additions & 9 deletions Sources/NetService/NetService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import struct Foundation.TimeInterval

import Cdns_sd

private let _registerCallback: DNSServiceRegisterReply = { (sdRef, flags, errorCode, name, regtype, domain, context) in
private let _registerCallback: DNSServiceRegisterReply = { (_, flags, errorCode, name, _, _, context) in
let service: NetService = Unmanaged.fromOpaque(context!).takeUnretainedValue()
guard errorCode == kDNSServiceErr_NoError else {
service.didNotPublish(error: Int(errorCode))
Expand All @@ -33,7 +33,7 @@ private let _registerCallback: DNSServiceRegisterReply = { (sdRef, flags, errorC
#endif
}

private let _resolveReply: DNSServiceResolveReply = { sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtLen, txtRecord, context in
private let _resolveReply: DNSServiceResolveReply = { _, _, _, errorCode, _, hosttarget, port, txtLen, txtRecord, context in
let service: NetService = Unmanaged.fromOpaque(context!).takeUnretainedValue()
guard errorCode == kDNSServiceErr_NoError else {
service.didNotResolve(error: Int(errorCode))
Expand All @@ -48,7 +48,7 @@ private let _resolveReply: DNSServiceResolveReply = { sdRef, flags, interfaceInd
textRecord: textRecord)
}

private let _processResult: CFSocketCallBack = { (s, type, address, data, info) in
private let _processResult: CFSocketCallBack = { (_, _, _, _, info) in
let service: NetService = Unmanaged.fromOpaque(info!).takeUnretainedValue()
service.processResult()
}
Expand Down Expand Up @@ -222,9 +222,9 @@ public class NetService {
public func setTXTRecord(_ recordData: Data?) -> Bool {
textRecord = recordData
if let serviceRef = serviceRef {
var record = textRecord ?? Data([0])
let record = textRecord ?? Data([0])
let error = record.withUnsafeBytes { txtRecordPtr in
DNSServiceUpdateRecord(serviceRef, nil, 0, UInt16(record.count), txtRecordPtr, 0)
DNSServiceUpdateRecord(serviceRef, nil, 0, UInt16(record.count), txtRecordPtr.baseAddress!, 0)
}
guard error == 0 else {
return false
Expand Down Expand Up @@ -300,10 +300,10 @@ public class NetService {
// TODO: map flags

let regtype = self.type
var record = textRecord ?? Data([0])
let record = textRecord ?? Data([0])

let error = record.withUnsafeBytes { txtRecordPtr in
DNSServiceRegister(&serviceRef, 0, 0, name, regtype, nil, nil, UInt16(port).bigEndian, UInt16(record.count), txtRecordPtr, _registerCallback, Unmanaged.passUnretained(self).toOpaque())
DNSServiceRegister(&serviceRef, 0, 0, name, regtype, nil, nil, UInt16(port).bigEndian, UInt16(record.count), txtRecordPtr.baseAddress!, _registerCallback, Unmanaged.passUnretained(self).toOpaque())
}
guard error == 0 else {
didNotPublish(error: Int(error))
Expand Down Expand Up @@ -356,15 +356,15 @@ public class NetService {

var context = CFSocketContext(version: 0, info: info, retain: nil, release: nil, copyDescription: nil)

socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(kCFSocketReadCallBack), _processResult, &context)
socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(CFSocketCallBackType.readCallBack.rawValue), _processResult, &context)

// Don't close the underlying socket on invalidate, as it is owned by dns_sd.
var socketFlags = CFSocketGetSocketFlags(socket)
socketFlags &= ~CFOptionFlags(kCFSocketCloseOnInvalidate)
CFSocketSetSocketFlags(socket, socketFlags)

source = CFSocketCreateRunLoopSource(nil, socket, 0)
CFRunLoopAddSource(CFRunLoopGetCurrent(), source, kCFRunLoopCommonModes)
CFRunLoopAddSource(CFRunLoopGetCurrent(), source, CFRunLoopMode.commonModes)
}

/// The port on which the service is listening for connections.
Expand Down
10 changes: 5 additions & 5 deletions Sources/NetService/NetServiceBrowser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import struct Foundation.RunLoopMode

import Cdns_sd

private let _browseCallback: DNSServiceBrowseReply = { (sdRef, flags, interfaceIndex, errorCode, name, regtype, domain, context) in
private let _browseCallback: DNSServiceBrowseReply = { (_, flags, _, errorCode, name, regtype, domain, context) in
let browser: NetServiceBrowser = Unmanaged.fromOpaque(context!).takeUnretainedValue()
guard errorCode == kDNSServiceErr_NoError else {
browser.didNotSearch(error: Int(errorCode))
Expand All @@ -29,12 +29,12 @@ private let _browseCallback: DNSServiceBrowseReply = { (sdRef, flags, interfaceI
}
}

private let _processResult: CFSocketCallBack = { (s, type, address, data, info) in
private let _processResult: CFSocketCallBack = { (_, _, _, _, info) in
let browser: NetServiceBrowser = Unmanaged.fromOpaque(info!).takeUnretainedValue()
browser.processResult()
}

private let _enumDomainsReply: DNSServiceDomainEnumReply = { (sdRef, flags, interfaceIndex, errorCode, replyDomain, context) in
private let _enumDomainsReply: DNSServiceDomainEnumReply = { (_, flags, _, errorCode, replyDomain, context) in
let browser: NetServiceBrowser = Unmanaged.fromOpaque(context!).takeUnretainedValue()
guard errorCode == kDNSServiceErr_NoError else {
browser.didNotSearch(error: Int(errorCode))
Expand Down Expand Up @@ -178,15 +178,15 @@ public class NetServiceBrowser {
let info = Unmanaged.passUnretained(self).toOpaque()

var context = CFSocketContext(version: 0, info: info, retain: nil, release: nil, copyDescription: nil)
socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(kCFSocketReadCallBack), _processResult, &context)
socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(CFSocketCallBackType.readCallBack.rawValue), _processResult, &context)

// Don't close the underlying socket on invalidate, as it is owned by dns_sd.
var socketFlags = CFSocketGetSocketFlags(socket)
socketFlags &= ~CFOptionFlags(kCFSocketCloseOnInvalidate)
CFSocketSetSocketFlags(socket, socketFlags)

source = CFSocketCreateRunLoopSource(nil, socket, 0)
CFRunLoopAddSource(CFRunLoopGetCurrent(), source, kCFRunLoopCommonModes)
CFRunLoopAddSource(CFRunLoopGetCurrent(), source, CFRunLoopMode.commonModes)
}

/// Halts a currently running search or resolution.
Expand Down
5 changes: 0 additions & 5 deletions Sources/NetService/ServiceFlags.swift
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
import CoreFoundation
import Cdns_sd

#if !os(Linux)
internal let kCFSocketReadCallBack = CFSocketCallBackType.readCallBack.rawValue
internal let kCFRunLoopCommonModes = CFRunLoopMode.commonModes
#endif

struct ServiceFlags: OptionSet {
public let rawValue: DNSServiceFlags
init(rawValue: DNSServiceFlags) {
Expand Down
2 changes: 1 addition & 1 deletion Sources/dns-sd/Delegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ class ResolveServiceDelegate: BaseDelegate, NetServiceDelegate {
for memory in addresses {
var ss = sockaddr_storage()
_ = memory.withUnsafeBytes {
memcpy(&ss, $0, memory.count)
memcpy(&ss, $0.baseAddress!, memory.count)
}
let buffer = UnsafeMutablePointer<CChar>.allocate(capacity: Int(NI_MAXHOST))

Expand Down
2 changes: 1 addition & 1 deletion Sources/dns-sd/main.swift
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ case "-R":
let service = NetService(domain: register[2], type: register[1], name: register[0], port: port)
var keyvalues = [String: Data]()
for keyvalue in register.dropFirst(4) {
var components = keyvalue.split(separator: "=", maxSplits: 1, omittingEmptySubsequences: false)
let components = keyvalue.split(separator: "=", maxSplits: 1, omittingEmptySubsequences: false)
if components.count != 2 {
print("Invalid key value pair")
exit(-1)
Expand Down

1 comment on commit 276ca1c

@robreuss
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I updated to 0.8.0 and I'm getting a serious of errors that I think might be related to this change:

/home/pi/Development/PanTilt/.build/checkouts/NetService/Sources/NetService/NetService.swift:359:87: error: type 'CFSocketCallBackType' (aka 'UInt') has no member 'readCallBack' socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(CFSocketCallBackType.readCallBack.rawValue), _processResult, &context) ~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~ /home/pi/Development/PanTilt/.build/checkouts/NetService/Sources/NetService/NetServiceBrowser.swift:181:87: error: type 'CFSocketCallBackType' (aka 'UInt') has no member 'readCallBack' socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(CFSocketCallBackType.readCallBack.rawValue), _processResult, &context) ~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~ /home/pi/Development/PanTilt/.build/checkouts/NetService/Sources/NetService/NetService.swift:359:87: error: type 'CFSocketCallBackType' (aka 'UInt') has no member 'readCallBack' socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(CFSocketCallBackType.readCallBack.rawValue), _processResult, &context) ~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~ /home/pi/Development/PanTilt/.build/checkouts/NetService/Sources/NetService/NetServiceBrowser.swift:181:87: error: type 'CFSocketCallBackType' (aka 'UInt') has no member 'readCallBack' socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(CFSocketCallBackType.readCallBack.rawValue), _processResult, &context) ~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~ /home/pi/Development/PanTilt/.build/checkouts/NetService/Sources/NetService/NetService.swift:359:87: error: type 'CFSocketCallBackType' (aka 'UInt') has no member 'readCallBack' socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(CFSocketCallBackType.readCallBack.rawValue), _processResult, &context) ~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~ /home/pi/Development/PanTilt/.build/checkouts/NetService/Sources/NetService/NetServiceBrowser.swift:181:87: error: type 'CFSocketCallBackType' (aka 'UInt') has no member 'readCallBack' socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(CFSocketCallBackType.readCallBack.rawValue), _processResult, &context) ~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~ /home/pi/Development/PanTilt/.build/checkouts/NetService/Sources/NetService/NetService.swift:359:87: error: type 'CFSocketCallBackType' (aka 'UInt') has no member 'readCallBack' socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(CFSocketCallBackType.readCallBack.rawValue), _processResult, &context) ~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~ /home/pi/Development/PanTilt/.build/checkouts/NetService/Sources/NetService/NetServiceBrowser.swift:181:87: error: type 'CFSocketCallBackType' (aka 'UInt') has no member 'readCallBack' socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(CFSocketCallBackType.readCallBack.rawValue), _processResult, &context) ~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~ /home/pi/Development/PanTilt/.build/checkouts/NetService/Sources/NetService/NetService.swift:359:87: error: type 'CFSocketCallBackType' (aka 'UInt') has no member 'readCallBack' socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(CFSocketCallBackType.readCallBack.rawValue), _processResult, &context) ~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~ /home/pi/Development/PanTilt/.build/checkouts/NetService/Sources/NetService/NetServiceBrowser.swift:181:87: error: type 'CFSocketCallBackType' (aka 'UInt') has no member 'readCallBack' socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(CFSocketCallBackType.readCallBack.rawValue), _processResult, &context) ~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~ /home/pi/Development/PanTilt/.build/checkouts/NetService/Sources/NetService/NetService.swift:359:87: error: type 'CFSocketCallBackType' (aka 'UInt') has no member 'readCallBack' socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(CFSocketCallBackType.readCallBack.rawValue), _processResult, &context) ~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~ /home/pi/Development/PanTilt/.build/checkouts/NetService/Sources/NetService/NetServiceBrowser.swift:181:87: error: type 'CFSocketCallBackType' (aka 'UInt') has no member 'readCallBack' socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(CFSocketCallBackType.readCallBack.rawValue), _processResult, &context) ~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~ /home/pi/Development/PanTilt/.build/checkouts/NetService/Sources/NetService/NetService.swift:359:87: error: type 'CFSocketCallBackType' (aka 'UInt') has no member 'readCallBack' socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(CFSocketCallBackType.readCallBack.rawValue), _processResult, &context) ~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~ /home/pi/Development/PanTilt/.build/checkouts/NetService/Sources/NetService/NetServiceBrowser.swift:181:87: error: type 'CFSocketCallBackType' (aka 'UInt') has no member 'readCallBack' socket = CFSocketCreateWithNative(nil, fd, CFOptionFlags(CFSocketCallBackType.readCallBack.rawValue), _processResult, &context) ~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~

Please sign in to comment.