Skip to content

Commit 0999089

Browse files
committed
renames
1 parent ae078d7 commit 0999089

File tree

11 files changed

+127
-129
lines changed

11 files changed

+127
-129
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-
@objcfinalclassAppXPCListener:NSObject,AppXPCInterface,@uncheckedSendable{
6+
// This is the client for the app to communicate with the privileged helper.
7+
@objcfinalclassHelperXPCClient:NSObject,@uncheckedSendable{
78
privatevarsvc:CoderVPNService
8-
privateletlogger=Logger(subsystem:Bundle.main.bundleIdentifier!, category:"AppXPCListener")
9+
privateletlogger=Logger(subsystem:Bundle.main.bundleIdentifier!, category:"HelperXPCClient")
910
privatevarconnection: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-
letreply=CompletionWrapper(reply)
46-
Task{@MainActorin
47-
svc.onExtensionPeerUpdate(diff)
48-
reply()
49-
}
50-
}
51-
52-
func onProgress(stage:ProgressStage, downloadProgress:DownloadProgress?, reply:@escaping()->Void){
53-
letreply=CompletionWrapper(reply)
54-
Task{@MainActorin
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-
extensionAppXPCListener{
45+
// Establishes a connection to the Helper, so it can send messages back.
6346
func ping()asyncthrows{
6447
letconn=connect()
6548
returntryawaitwithCheckedThrowingContinuation{ continuation in
@@ -98,3 +81,22 @@ extension AppXPCListener{
9881
}
9982
}
10083
}
84+
85+
// These methods are called by the Helper over XPC
86+
extensionHelperXPCClient:AppXPCInterface{
87+
func onPeerUpdate(_ diff:Data, reply:@escaping()->Void){
88+
letreply=CompletionWrapper(reply)
89+
Task{@MainActorin
90+
svc.onExtensionPeerUpdate(diff)
91+
reply()
92+
}
93+
}
94+
95+
func onProgress(stage:ProgressStage, downloadProgress:DownloadProgress?, reply:@escaping()->Void){
96+
letreply=CompletionWrapper(reply)
97+
Task{@MainActorin
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
finalclassCoderVPNService:NSObject,VPNService{
5656
varlogger=Logger(subsystem:Bundle.main.bundleIdentifier!, category:"vpn")
57-
lazy varxpc:AppXPCListener=.init(vpn:self)
57+
lazy varxpc:HelperXPCClient=.init(vpn:self)
5858

5959
@PublishedvartunnelState: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-
guardSignatureValidator.minimumCoderVersion.compare(semver, options:.numeric)!=.orderedDescending else{
93+
guardValidator.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
caselet.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-
classHelperNEXPCListener:NSObject,NSXPCListenerDelegate,HelperNEXPCInterface,@uncheckedSendable{
9-
privatevarlogger=Logger(subsystem:Bundle.main.bundleIdentifier!, category:"HelperNEXPCListener")
8+
classHelperNEXPCServer:NSObject,NSXPCListenerDelegate,@uncheckedSendable{
9+
privatevarlogger=Logger(subsystem:Bundle.main.bundleIdentifier!, category:"HelperNEXPCServer")
1010
privatevarconns:[NSXPCConnection]=[]
1111

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

40+
func cancelProvider(error:Error?)asyncthrows{
41+
tryawaitwithCheckedThrowingContinuation{ continuation in
42+
guardlet 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?NEXPCInterfaceelse{
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+
}asVoid
55+
}
56+
57+
func applyTunnelNetworkSettings(diff:Vpn_NetworkSettingsRequest)asyncthrows{
58+
letbytes=try diff.serializedData()
59+
returntryawaitwithCheckedThrowingContinuation{ continuation in
60+
guardlet 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?NEXPCInterfaceelse{
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+
extensionHelperNEXPCServer: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-
extensionHelperNEXPCListener{
94-
func cancelProvider(error:Error?)asyncthrows{
95-
tryawaitwithCheckedThrowingContinuation{ continuation in
96-
guardlet 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?NEXPCInterfaceelse{
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-
}asVoid
109-
}
110-
111-
func applyTunnelNetworkSettings(diff:Vpn_NetworkSettingsRequest)asyncthrows{
112-
letbytes=try diff.serializedData()
113-
returntryawaitwithCheckedThrowingContinuation{ continuation in
114-
guardlet 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?NEXPCInterfaceelse{
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-
classHelperAppXPCListener:NSObject,NSXPCListenerDelegate,HelperAppXPCInterface,@uncheckedSendable{
133-
privatevarlogger=Logger(subsystem:Bundle.main.bundleIdentifier!, category:"HelperAppXPCListener")
130+
classHelperAppXPCServer:NSObject,NSXPCListenerDelegate,@uncheckedSendable{
131+
privatevarlogger=Logger(subsystem:Bundle.main.bundleIdentifier!, category:"HelperAppXPCServer")
134132
privatevarconns:[NSXPCConnection]=[]
135133

136134
overrideinit(){
@@ -152,22 +150,6 @@ class HelperAppXPCListener: NSObject, NSXPCListenerDelegate, HelperAppXPCInterfa
152150
returntrue
153151
}
154152

155-
func getPeerState(with reply:@escaping(Data?)->Void){
156-
logger.info("getPeerState called")
157-
letreply=CallbackWrapper(reply)
158-
Task{@MainActorin
159-
letdata=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-
extensionHelperAppXPCListener{
171153
func onPeerUpdate(update:Vpn_PeerUpdate)asyncthrows{
172154
letbytes=try update.serializedData()
173155
returntryawaitwithCheckedThrowingContinuation{ continuation in
@@ -203,3 +185,18 @@ extension HelperAppXPCListener{
203185
}asVoid
204186
}
205187
}
188+
189+
extensionHelperAppXPCServer:HelperAppXPCInterface{
190+
func getPeerState(with reply:@escaping(Data?)->Void){
191+
logger.info("getPeerState called")
192+
letreply=CallbackWrapper(reply)
193+
Task{@MainActorin
194+
letdata=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-
trySignatureValidator.validate(path: dest, expectedVersion: semver)
59+
tryValidator.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
tryawait tunnelHandle.close()
103-
tryawaitNEXPCListenerDelegate.cancelProvider(error:
103+
tryawaitNEXPCServerDelegate.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
tryawait tunnelHandle.close()
110-
tryawaitNEXPCListenerDelegate.cancelProvider(error:nil)
110+
tryawaitNEXPCServerDelegate.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?awaitappXPCListenerDelegate.onPeerUpdate(update: msg.peerUpdate)}
120+
Task{try?awaitappXPCServerDelegate.onPeerUpdate(update: msg.peerUpdate)}
121121
caselet.log(logMsg):
122122
writeVpnLog(logMsg)
123123
case.networkSettings,.start,.stop:
@@ -133,7 +133,7 @@ actor Manager{
133133
switch msgType {
134134
caselet.networkSettings(ns):
135135
do{
136-
tryawaitNEXPCListenerDelegate.applyTunnelNetworkSettings(diff: ns)
136+
tryawaitNEXPCServerDelegate.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?awaitappXPCListenerDelegate.onProgress(stage: stage, downloadProgress: downloadProgress)}
230+
Task{try?awaitappXPCServerDelegate.onProgress(stage: stage, downloadProgress: downloadProgress)}
231231
}
232232

233233
structManagerConfig{

‎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
varglobalManager:Manager?
77

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

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

1818
RunLoop.main.run()
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-
finalclassHelperXPCSpeaker:NEXPCInterface,@uncheckedSendable{
5+
finalclassHelperXPCClient:@uncheckedSendable{
66
varptp:PacketTunnelProvider?
77
privatevarlogger=Logger(subsystem:Bundle.main.bundleIdentifier!, category:"HelperXPCSpeaker")
88
privatevarconnection: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-
letreply=CompletionWrapper(reply)
39-
guardlet 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-
letreply=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-
extensionHelperXPCSpeaker{
6037
func startDaemon(accessURL:URL, token:String, tun:FileHandle, headers:Data?)asyncthrows{
6138
letconn=connect()
6239
returntryawaitwithCheckedThrowingContinuation{ continuation in
@@ -103,3 +80,26 @@ extension HelperXPCSpeaker{
10380
}
10481
}
10582
}
83+
84+
// These methods are called over XPC by the helper.
85+
extensionHelperXPCClient:NEXPCInterface{
86+
func applyTunnelNetworkSettings(diff:Data, reply:@escaping()->Void){
87+
letreply=CompletionWrapper(reply)
88+
guardlet 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+
letreply=CompletionWrapper(reply)
100+
Task{
101+
ptp?.cancelTunnelWithError(error)
102+
reply()
103+
}
104+
}
105+
}

0 commit comments

Comments
(0)