Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitd311dda

Browse files
authored
feat: add enrichment of StartRequest with OS, device ID, version (#123)
Enriches `StartRequest` protocol message with device ID, OS, and version, for Coder Desktop telemetry.
1 parentf53a99f commitd311dda

File tree

7 files changed

+608
-4
lines changed

7 files changed

+608
-4
lines changed

‎Coder-Desktop/VPN/Manager.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import VPNLib
66
actorManager{
77
letptp:PacketTunnelProvider
88
letcfg:ManagerConfig
9+
lettelemetryEnricher:TelemetryEnricher
910

1011
lettunnelHandle:TunnelHandle
1112
letspeaker:Speaker<Vpn_ManagerMessage,Vpn_TunnelMessage>
@@ -19,6 +20,7 @@ actor Manager {
1920
init(with:PacketTunnelProvider, cfg:ManagerConfig)asyncthrows(ManagerError){
2021
ptp= with
2122
self.cfg= cfg
23+
telemetryEnricher=TelemetryEnricher()
2224
#if arch(arm64)
2325
letdylibPath= cfg.serverUrl.appending(path:"bin/coder-vpn-darwin-arm64.dylib")
2426
#elseif arch(x86_64)
@@ -176,6 +178,7 @@ actor Manager {
176178
req.value= header.value
177179
}
178180
}
181+
req= telemetryEnricher.enrich(req)
179182
}
180183
})
181184
}catch{

‎Coder-Desktop/VPNLib/Speaker.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,11 @@ public actor Speaker<SendMsg: RPCMessage & Message, RecvMsg: RPCMessage & Messag
8888

8989
/// Does the VPN Protocol handshake and validates the result
9090
publicfunc handshake()asyncthrows(HandshakeError){
91-
lethndsh=Handshaker(writeFD: writeFD, dispatch: dispatch, queue: queue, role: role)
92-
// ignore the version for now because we know it can only be 1.0
91+
lethndsh=Handshaker(writeFD: writeFD, dispatch: dispatch, queue: queue, role: role,
92+
versions:[ProtoVersion(1,1)])
93+
// ignore the version for now because we know it can only be 1.0 or 1.1.
94+
// 1.1 adds support for telemetry to StartRequest, but since setting these
95+
// fields won't adversely affect a 1.0 speaker, we set them regardless.
9396
try _=await hndsh.handshake()
9497
}
9598

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import Foundation
2+
3+
publicstructTelemetryEnricher{
4+
privateletdeviceID:String
5+
privateletversion:String?
6+
7+
publicinit(){
8+
version=Bundle.main.infoDictionary?["CFBundleShortVersionString"]as?String
9+
10+
letuserDefaults=UserDefaults.standard
11+
letkey="deviceID"
12+
13+
iflet existingID= userDefaults.string(forKey: key){
14+
deviceID= existingID
15+
}else{
16+
letnewID=UUID().uuidString
17+
userDefaults.set(newID, forKey: key)
18+
deviceID= newID
19+
}
20+
}
21+
22+
publicfunc enrich(_ original:Vpn_StartRequest)->Vpn_StartRequest{
23+
varreq= original
24+
req.deviceOs="macOS"
25+
req.deviceID= deviceID
26+
iflet version{
27+
req.coderDesktopVersion= version
28+
}
29+
return req
30+
}
31+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp