Skip to content

Commit e96075e

Browse files
committed
renames
1 parent d80d709 commit e96075e

File tree

10 files changed

+127
-128
lines changed

10 files changed

+127
-128
lines changed

Coder-Desktop/Coder-Desktop/XPCInterface.swift renamed to Coder-Desktop/Coder-Desktop/AppHelperXPCClient.swift

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ import NetworkExtension
33
import os
44
import VPNLib
55

6-
@objc final class AppXPCListener: NSObject, AppXPCInterface, @unchecked Sendable {
6+
// This is the client for the app to communicate with the privileged helper.
7+
@objc final class HelperXPCClient: NSObject, @unchecked Sendable {
78
private var svc: CoderVPNService
8-
private let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "AppXPCListener")
9+
private let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "HelperXPCClient")
910
private var connection: NSXPCConnection?
1011

1112
init(vpn: CoderVPNService) {
@@ -41,25 +42,7 @@ import VPNLib
4142
return connection
4243
}
4344

44-
func onPeerUpdate(_ diff: Data, reply: @escaping () -> Void) {
45-
let reply = CompletionWrapper(reply)
46-
Task { @MainActor in
47-
svc.onExtensionPeerUpdate(diff)
48-
reply()
49-
}
50-
}
51-
52-
func onProgress(stage: ProgressStage, downloadProgress: DownloadProgress?, reply: @escaping () -> Void) {
53-
let reply = CompletionWrapper(reply)
54-
Task { @MainActor in
55-
svc.onProgress(stage: stage, downloadProgress: downloadProgress)
56-
reply()
57-
}
58-
}
59-
}
60-
61-
// These methods are called to request updatess from the Helper.
62-
extension AppXPCListener {
45+
// Establishes a connection to the Helper, so it can send messages back.
6346
func ping() async throws {
6447
let conn = connect()
6548
return try await withCheckedThrowingContinuation { continuation in
@@ -98,3 +81,22 @@ extension AppXPCListener {
9881
}
9982
}
10083
}
84+
85+
// These methods by the Helper over XPC
86+
extension HelperXPCClient: AppXPCInterface {
87+
func onPeerUpdate(_ diff: Data, reply: @escaping () -> Void) {
88+
let reply = CompletionWrapper(reply)
89+
Task { @MainActor in
90+
svc.onExtensionPeerUpdate(diff)
91+
reply()
92+
}
93+
}
94+
95+
func onProgress(stage: ProgressStage, downloadProgress: DownloadProgress?, reply: @escaping () -> Void) {
96+
let reply = CompletionWrapper(reply)
97+
Task { @MainActor in
98+
svc.onProgress(stage: stage, downloadProgress: downloadProgress)
99+
reply()
100+
}
101+
}
102+
}

Coder-Desktop/Coder-Desktop/VPN/VPNService.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ enum VPNServiceError: Error, Equatable {
5454
@MainActor
5555
final class CoderVPNService: NSObject, VPNService {
5656
var logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "vpn")
57-
lazy var xpc: AppXPCListener = .init(vpn: self)
57+
lazy var xpc: HelperXPCClient = .init(vpn: self)
5858

5959
@Published var tunnelState: VPNServiceState = .disabled {
6060
didSet {

Coder-Desktop/Coder-Desktop/Views/LoginForm.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ struct LoginForm: View {
9090
return
9191
}
9292
// x.compare(y) is .orderedDescending if x > y
93-
guard SignatureValidator.minimumCoderVersion.compare(semver, options: .numeric) != .orderedDescending else {
93+
guard Validator.minimumCoderVersion.compare(semver, options: .numeric) != .orderedDescending else {
9494
loginError = .outdatedCoderVersion
9595
return
9696
}
@@ -221,7 +221,7 @@ enum LoginError: Error {
221221
"Invalid URL"
222222
case .outdatedCoderVersion:
223223
"""
224-
The Coder deployment must be version \(SignatureValidator.minimumCoderVersion)
224+
The Coder deployment must be version \(Validator.minimumCoderVersion)
225225
or higher to use Coder Desktop.
226226
"""
227227
case let .failedAuth(err):

Coder-Desktop/Coder-DesktopHelper/HelperXPCListeners.swift

Lines changed: 56 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import VPNLib
55

66
// This listener handles XPC connections from the Coder Desktop System Network
77
// Extension (`com.coder.Coder-Desktop.VPN`).
8-
class HelperNEXPCListener: NSObject, NSXPCListenerDelegate, HelperNEXPCInterface, @unchecked Sendable {
9-
private var logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "HelperNEXPCListener")
8+
class HelperNEXPCServer: NSObject, NSXPCListenerDelegate, @unchecked Sendable {
9+
private var logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "HelperNEXPCServer")
1010
private var conns: [NSXPCConnection] = []
1111

1212
// Hold a reference to the tun file handle
@@ -37,6 +37,43 @@ class HelperNEXPCListener: NSObject, NSXPCListenerDelegate, HelperNEXPCInterface
3737
return true
3838
}
3939

40+
func cancelProvider(error: Error?) async throws {
41+
try await withCheckedThrowingContinuation { continuation in
42+
guard let proxy = conns.last?.remoteObjectProxyWithErrorHandler({ err in
43+
self.logger.error("failed to connect to HelperNEXPC \(err.localizedDescription, privacy: .public)")
44+
continuation.resume(throwing: err)
45+
}) as? NEXPCInterface else {
46+
self.logger.error("failed to get proxy for HelperNEXPCInterface")
47+
continuation.resume(throwing: XPCError.wrongProxyType)
48+
return
49+
}
50+
proxy.cancelProvider(error: error) {
51+
self.logger.info("provider cancelled")
52+
continuation.resume()
53+
}
54+
} as Void
55+
}
56+
57+
func applyTunnelNetworkSettings(diff: Vpn_NetworkSettingsRequest) async throws {
58+
let bytes = try diff.serializedData()
59+
return try await withCheckedThrowingContinuation { continuation in
60+
guard let proxy = conns.last?.remoteObjectProxyWithErrorHandler({ err in
61+
self.logger.error("failed to connect to HelperNEXPC \(err.localizedDescription, privacy: .public)")
62+
continuation.resume(throwing: err)
63+
}) as? NEXPCInterface else {
64+
self.logger.error("failed to get proxy for HelperNEXPCInterface")
65+
continuation.resume(throwing: XPCError.wrongProxyType)
66+
return
67+
}
68+
proxy.applyTunnelNetworkSettings(diff: bytes) {
69+
self.logger.info("applied tunnel network setting")
70+
continuation.resume()
71+
}
72+
}
73+
}
74+
}
75+
76+
extension HelperNEXPCServer: HelperNEXPCInterface {
4077
func startDaemon(
4178
accessURL: URL,
4279
token: String,
@@ -88,49 +125,10 @@ class HelperNEXPCListener: NSObject, NSXPCListenerDelegate, HelperNEXPCInterface
88125
}
89126
}
90127

91-
// These methods are called to send updates to the Coder Desktop System Network
92-
// Extension.
93-
extension HelperNEXPCListener {
94-
func cancelProvider(error: Error?) async throws {
95-
try await withCheckedThrowingContinuation { continuation in
96-
guard let proxy = conns.last?.remoteObjectProxyWithErrorHandler({ err in
97-
self.logger.error("failed to connect to HelperNEXPC \(err.localizedDescription, privacy: .public)")
98-
continuation.resume(throwing: err)
99-
}) as? NEXPCInterface else {
100-
self.logger.error("failed to get proxy for HelperNEXPCInterface")
101-
continuation.resume(throwing: XPCError.wrongProxyType)
102-
return
103-
}
104-
proxy.cancelProvider(error: error) {
105-
self.logger.info("provider cancelled")
106-
continuation.resume()
107-
}
108-
} as Void
109-
}
110-
111-
func applyTunnelNetworkSettings(diff: Vpn_NetworkSettingsRequest) async throws {
112-
let bytes = try diff.serializedData()
113-
return try await withCheckedThrowingContinuation { continuation in
114-
guard let proxy = conns.last?.remoteObjectProxyWithErrorHandler({ err in
115-
self.logger.error("failed to connect to HelperNEXPC \(err.localizedDescription, privacy: .public)")
116-
continuation.resume(throwing: err)
117-
}) as? NEXPCInterface else {
118-
self.logger.error("failed to get proxy for HelperNEXPCInterface")
119-
continuation.resume(throwing: XPCError.wrongProxyType)
120-
return
121-
}
122-
proxy.applyTunnelNetworkSettings(diff: bytes) {
123-
self.logger.info("applied tunnel network setting")
124-
continuation.resume()
125-
}
126-
}
127-
}
128-
}
129-
130128
// This listener handles XPC connections from the Coder Desktop App
131129
// (`com.coder.Coder-Desktop`).
132-
class HelperAppXPCListener: NSObject, NSXPCListenerDelegate, HelperAppXPCInterface, @unchecked Sendable {
133-
private var logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "HelperAppXPCListener")
130+
class HelperAppXPCServer: NSObject, NSXPCListenerDelegate, @unchecked Sendable {
131+
private var logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "HelperAppXPCServer")
134132
private var conns: [NSXPCConnection] = []
135133

136134
override init() {
@@ -152,22 +150,6 @@ class HelperAppXPCListener: NSObject, NSXPCListenerDelegate, HelperAppXPCInterfa
152150
return true
153151
}
154152

155-
func getPeerState(with reply: @escaping (Data?) -> Void) {
156-
logger.info("getPeerState called")
157-
let reply = CallbackWrapper(reply)
158-
Task { @MainActor in
159-
let data = try? await globalManager?.getPeerState().serializedData()
160-
reply(data)
161-
}
162-
}
163-
164-
func ping(reply: @escaping () -> Void) {
165-
reply()
166-
}
167-
}
168-
169-
// These methods are called to send updates to the Coder Desktop App.
170-
extension HelperAppXPCListener {
171153
func onPeerUpdate(update: Vpn_PeerUpdate) async throws {
172154
let bytes = try update.serializedData()
173155
return try await withCheckedThrowingContinuation { continuation in
@@ -203,3 +185,18 @@ extension HelperAppXPCListener {
203185
} as Void
204186
}
205187
}
188+
189+
extension HelperAppXPCServer: HelperAppXPCInterface {
190+
func getPeerState(with reply: @escaping (Data?) -> Void) {
191+
logger.info("getPeerState called")
192+
let reply = CallbackWrapper(reply)
193+
Task { @MainActor in
194+
let data = try? await globalManager?.getPeerState().serializedData()
195+
reply(data)
196+
}
197+
}
198+
199+
func ping(reply: @escaping () -> Void) {
200+
reply()
201+
}
202+
}

Coder-Desktop/Coder-DesktopHelper/Manager.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ actor Manager {
5656
throw .serverInfo("invalid version: \(buildInfo.version)")
5757
}
5858
do {
59-
try SignatureValidator.validate(path: dest, expectedVersion: semver)
59+
try Validator.validate(path: dest, expectedVersion: semver)
6060
} catch {
6161
throw .validation(error)
6262
}
@@ -100,14 +100,14 @@ actor Manager {
100100
} catch {
101101
logger.error("tunnel read loop failed: \(error.localizedDescription, privacy: .public)")
102102
try await tunnelHandle.close()
103-
try await NEXPCListenerDelegate.cancelProvider(error:
103+
try await NEXPCServerDelegate.cancelProvider(error:
104104
makeNSError(suffix: "Manager", desc: "Tunnel read loop failed: \(error.localizedDescription)")
105105
)
106106
return
107107
}
108108
logger.info("tunnel read loop exited")
109109
try await tunnelHandle.close()
110-
try await NEXPCListenerDelegate.cancelProvider(error: nil)
110+
try await NEXPCServerDelegate.cancelProvider(error: nil)
111111
}
112112

113113
func handleMessage(_ msg: Vpn_TunnelMessage) {
@@ -117,7 +117,7 @@ actor Manager {
117117
}
118118
switch msgType {
119119
case .peerUpdate:
120-
Task { try? await appXPCListenerDelegate.onPeerUpdate(update: msg.peerUpdate) }
120+
Task { try? await appXPCServerDelegate.onPeerUpdate(update: msg.peerUpdate) }
121121
case let .log(logMsg):
122122
writeVpnLog(logMsg)
123123
case .networkSettings, .start, .stop:
@@ -133,7 +133,7 @@ actor Manager {
133133
switch msgType {
134134
case let .networkSettings(ns):
135135
do {
136-
try await NEXPCListenerDelegate.applyTunnelNetworkSettings(diff: ns)
136+
try await NEXPCServerDelegate.applyTunnelNetworkSettings(diff: ns)
137137
try? await rpc.sendReply(.with { resp in
138138
resp.networkSettings = .with { settings in
139139
settings.success = true
@@ -227,7 +227,7 @@ actor Manager {
227227
}
228228

229229
func pushProgress(stage: ProgressStage, downloadProgress: DownloadProgress? = nil) {
230-
Task { try? await appXPCListenerDelegate.onProgress(stage: stage, downloadProgress: downloadProgress) }
230+
Task { try? await appXPCServerDelegate.onProgress(stage: stage, downloadProgress: downloadProgress) }
231231
}
232232

233233
struct ManagerConfig {

Coder-Desktop/Coder-DesktopHelper/main.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ import VPNLib
55

66
var globalManager: Manager?
77

8-
let NEXPCListenerDelegate = HelperNEXPCListener()
9-
let NEXPCListener = NSXPCListener(machServiceName: helperNEMachServiceName)
10-
NEXPCListener.delegate = NEXPCListenerDelegate
11-
NEXPCListener.resume()
8+
let NEXPCServerDelegate = HelperNEXPCServer()
9+
let NEXPCServer = NSXPCListener(machServiceName: helperNEMachServiceName)
10+
NEXPCServer.delegate = NEXPCServerDelegate
11+
NEXPCServer.resume()
1212

13-
let appXPCListenerDelegate = HelperAppXPCListener()
14-
let appXPCListener = NSXPCListener(machServiceName: helperAppMachServiceName)
15-
appXPCListener.delegate = appXPCListenerDelegate
16-
appXPCListener.resume()
13+
let appXPCServerDelegate = HelperAppXPCServer()
14+
let appXPCServer = NSXPCListener(machServiceName: helperAppMachServiceName)
15+
appXPCServer.delegate = appXPCServerDelegate
16+
appXPCServer.resume()
1717

1818
RunLoop.main.run()

Coder-Desktop/VPN/HelperXPCSpeaker.swift renamed to Coder-Desktop/VPN/NEHelperXPCClient.swift

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import Foundation
22
import os
33
import VPNLib
44

5-
final class HelperXPCSpeaker: NEXPCInterface, @unchecked Sendable {
5+
final class HelperXPCClient: @unchecked Sendable {
66
var ptp: PacketTunnelProvider?
77
private var logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "HelperXPCSpeaker")
88
private var connection: NSXPCConnection?
@@ -34,29 +34,6 @@ final class HelperXPCSpeaker: NEXPCInterface, @unchecked Sendable {
3434
return connection
3535
}
3636

37-
func applyTunnelNetworkSettings(diff: Data, reply: @escaping () -> Void) {
38-
let reply = CompletionWrapper(reply)
39-
guard let diff = try? Vpn_NetworkSettingsRequest(serializedBytes: diff) else {
40-
reply()
41-
return
42-
}
43-
Task {
44-
try? await ptp?.applyTunnelNetworkSettings(diff)
45-
reply()
46-
}
47-
}
48-
49-
func cancelProvider(error: Error?, reply: @escaping () -> Void) {
50-
let reply = CompletionWrapper(reply)
51-
Task {
52-
ptp?.cancelTunnelWithError(error)
53-
reply()
54-
}
55-
}
56-
}
57-
58-
// These methods are called to start and stop the daemon run by the Helper.
59-
extension HelperXPCSpeaker {
6037
func startDaemon(accessURL: URL, token: String, tun: FileHandle, headers: Data?) async throws {
6138
let conn = connect()
6239
return try await withCheckedThrowingContinuation { continuation in
@@ -103,3 +80,26 @@ extension HelperXPCSpeaker {
10380
}
10481
}
10582
}
83+
84+
// These methods are called over XPC by the helper.
85+
extension HelperXPCClient: NEXPCInterface {
86+
func applyTunnelNetworkSettings(diff: Data, reply: @escaping () -> Void) {
87+
let reply = CompletionWrapper(reply)
88+
guard let diff = try? Vpn_NetworkSettingsRequest(serializedBytes: diff) else {
89+
reply()
90+
return
91+
}
92+
Task {
93+
try? await ptp?.applyTunnelNetworkSettings(diff)
94+
reply()
95+
}
96+
}
97+
98+
func cancelProvider(error: Error?, reply: @escaping () -> Void) {
99+
let reply = CompletionWrapper(reply)
100+
Task {
101+
ptp?.cancelTunnelWithError(error)
102+
reply()
103+
}
104+
}
105+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy