diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
new file mode 100644
index 0000000..6575860
--- /dev/null
+++ b/.github/workflows/ci.yaml
@@ -0,0 +1,60 @@
+name: ci
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ branches:
+ - main
+
+jobs:
+ fmt:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Setup dotnet
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 8.0.x
+ cache: true
+ cache-dependency-path: '**/packages.lock.json'
+ - name: dotnet restore
+ run: dotnet restore --locked-mode
+ - name: dotnet format
+ run: dotnet format --verify-no-changes --no-restore
+
+ test:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Setup dotnet
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 8.0.x
+ cache: true
+ cache-dependency-path: '**/packages.lock.json'
+ - name: dotnet restore
+ run: dotnet restore --locked-mode
+ - name: dotnet test
+ run: dotnet test --no-restore
+
+ build:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Setup dotnet
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 8.0.x
+ cache: true
+ cache-dependency-path: '**/packages.lock.json'
+ - name: dotnet restore
+ run: dotnet restore --locked-mode
+ - name: dotnet publish
+ run: dotnet publish --no-restore --configuration Release --output .\publish
+ - name: Upload artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: publish
+ path: .\publish\
diff --git a/.gitignore b/.gitignore
index 79d0686..d378f88 100644
--- a/.gitignore
+++ b/.gitignore
@@ -186,7 +186,7 @@ publish/
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
-*.pubxml
+#*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
@@ -401,3 +401,5 @@ FodyWeavers.xsd
.idea/**/workspace.xml
.idea/**/usage.statistics.xml
.idea/**/shelf
+
+publish
diff --git a/App/App.csproj b/App/App.csproj
index 7a9ec8f..cae1812 100644
--- a/App/App.csproj
+++ b/App/App.csproj
@@ -7,23 +7,38 @@
app.manifest
x86;x64;ARM64
win-x86;win-x64;win-arm64
+ Properties\PublishProfiles\win-$(Platform).pubxml
true
enable
+ true
+ true
-
+
+ Designer
+
-
+
+
+
+
+
+
+
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
+
+
+
@@ -38,10 +53,33 @@
+
+
+
+
+
+
+
+ true
+
+
+
+ False
False
True
diff --git a/Package/Images/SplashScreen.scale-200.png b/App/Images/SplashScreen.scale-200.png
similarity index 100%
rename from Package/Images/SplashScreen.scale-200.png
rename to App/Images/SplashScreen.scale-200.png
diff --git a/Package/Images/Square150x150Logo.scale-200.png b/App/Images/Square150x150Logo.scale-200.png
similarity index 100%
rename from Package/Images/Square150x150Logo.scale-200.png
rename to App/Images/Square150x150Logo.scale-200.png
diff --git a/Package/Images/Square44x44Logo.scale-200.png b/App/Images/Square44x44Logo.scale-200.png
similarity index 100%
rename from Package/Images/Square44x44Logo.scale-200.png
rename to App/Images/Square44x44Logo.scale-200.png
diff --git a/App/Package.appxmanifest b/App/Package.appxmanifest
new file mode 100644
index 0000000..89a8f87
--- /dev/null
+++ b/App/Package.appxmanifest
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+ Coder Desktop (Package)
+ Coder Technologies Inc.
+ Images\StoreLogo.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/App/Properties/PublishProfiles/win-arm64.pubxml b/App/Properties/PublishProfiles/win-arm64.pubxml
new file mode 100644
index 0000000..8953cce
--- /dev/null
+++ b/App/Properties/PublishProfiles/win-arm64.pubxml
@@ -0,0 +1,14 @@
+
+
+
+
+ FileSystem
+ ARM64
+ win-arm64
+ bin\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\publish\
+ true
+ False
+
+
\ No newline at end of file
diff --git a/App/Properties/PublishProfiles/win-x64.pubxml b/App/Properties/PublishProfiles/win-x64.pubxml
new file mode 100644
index 0000000..cd99561
--- /dev/null
+++ b/App/Properties/PublishProfiles/win-x64.pubxml
@@ -0,0 +1,14 @@
+
+
+
+
+ FileSystem
+ x64
+ win-x64
+ bin\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\publish\
+ true
+ False
+
+
\ No newline at end of file
diff --git a/App/Properties/PublishProfiles/win-x86.pubxml b/App/Properties/PublishProfiles/win-x86.pubxml
new file mode 100644
index 0000000..a70c694
--- /dev/null
+++ b/App/Properties/PublishProfiles/win-x86.pubxml
@@ -0,0 +1,14 @@
+
+
+
+
+ FileSystem
+ x86
+ win-x86
+ bin\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\publish\
+ true
+ False
+
+
\ No newline at end of file
diff --git a/App/Properties/launchSettings.json b/App/Properties/launchSettings.json
new file mode 100644
index 0000000..4a35a11
--- /dev/null
+++ b/App/Properties/launchSettings.json
@@ -0,0 +1,10 @@
+{
+ "profiles": {
+ "App (Package)": {
+ "commandName": "MsixPackage"
+ },
+ "App (Unpackaged)": {
+ "commandName": "Project"
+ }
+ }
+}
diff --git a/App/packages.lock.json b/App/packages.lock.json
new file mode 100644
index 0000000..14115ab
--- /dev/null
+++ b/App/packages.lock.json
@@ -0,0 +1,160 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0-windows10.0.19041": {
+ "CommunityToolkit.Mvvm": {
+ "type": "Direct",
+ "requested": "[8.4.0, )",
+ "resolved": "8.4.0",
+ "contentHash": "tqVU8yc/ADO9oiTRyTnwhFN68hCwvkliMierptWOudIAvWY1mWCh5VFh+guwHJmpMwfg0J0rY+yyd5Oy7ty9Uw=="
+ },
+ "DependencyPropertyGenerator": {
+ "type": "Direct",
+ "requested": "[1.5.0, )",
+ "resolved": "1.5.0",
+ "contentHash": "y9XF3i+U6nnzuVvmwBw7zW+1ztOXT8lMu084Ir4nNeLGVd1308qR2nCR6Yl06FXfjYMKU3+bknZ/otqkz6VEUQ=="
+ },
+ "H.NotifyIcon.WinUI": {
+ "type": "Direct",
+ "requested": "[2.2.0, )",
+ "resolved": "2.2.0",
+ "contentHash": "iWaNX3qbcOWisPygW091RFzY1tl//Nm2HCIzBxFDoz+cpRhdInuV/xelqQ8WQTM0z5PamA9+FgGlSYygzu18Gw==",
+ "dependencies": {
+ "H.NotifyIcon": "2.2.0",
+ "Microsoft.WindowsAppSDK": "1.6.241114003",
+ "System.Collections.Immutable": "9.0.0",
+ "System.Reflection.Metadata": "9.0.0"
+ }
+ },
+ "Microsoft.Windows.SDK.BuildTools": {
+ "type": "Direct",
+ "requested": "[10.0.26100.1742, )",
+ "resolved": "10.0.26100.1742",
+ "contentHash": "ypcHjr4KEi6xQhgClnbXoANHcyyX/QsC4Rky4igs6M4GiDa+weegPo8JuV/VMxqrZCV4zlqDsp2krgkN7ReAAg=="
+ },
+ "Microsoft.WindowsAppSDK": {
+ "type": "Direct",
+ "requested": "[1.6.250108002, )",
+ "resolved": "1.6.250108002",
+ "contentHash": "dOJ3oFeHnehVBAR98lR6YfX0JgDJkrehLqwZQqQE/iZgyye1c1TZu9oj3MBbgWP9xFApWUrb0G49KKnQWEZLtA==",
+ "dependencies": {
+ "Microsoft.Web.WebView2": "1.0.2651.64",
+ "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756"
+ }
+ },
+ "H.GeneratedIcons.System.Drawing": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "KJ/hQZTtW3w8Rw8ktogAwY9AcVzpUldVprTD3eyQ1XyZINLHBQqgtu0ZArmuYlp+lUR0lsqAmaARXZIOFBWmQg==",
+ "dependencies": {
+ "System.Drawing.Common": "9.0.0"
+ }
+ },
+ "H.NotifyIcon": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "x3rk9dLAXpMrfngnC7oHmYF4sULEpEdD9hLMIt0W41MZ8WYeCY63SeyJX1TKcvJ7BI24JciLxhXOuWrSRCEiQA==",
+ "dependencies": {
+ "H.GeneratedIcons.System.Drawing": "2.2.0"
+ }
+ },
+ "Microsoft.Web.WebView2": {
+ "type": "Transitive",
+ "resolved": "1.0.2651.64",
+ "contentHash": "f5sc/vcAoTCTEW7Nqzp4galAuTRguZViw8ksn+Nx2uskEBPm0/ubzy6gVjvXS/P96jLS89C8T9I0hPc417xpNg=="
+ },
+ "Microsoft.Win32.SystemEvents": {
+ "type": "Transitive",
+ "resolved": "9.0.0",
+ "contentHash": "z8FfGIaoeALdD+KF44A2uP8PZIQQtDGiXsOLuN8nohbKhkyKt7zGaZb+fKiCxTuBqG22Q7myIAioSWaIcOOrOw=="
+ },
+ "System.Collections.Immutable": {
+ "type": "Transitive",
+ "resolved": "9.0.0",
+ "contentHash": "QhkXUl2gNrQtvPmtBTQHb0YsUrDiDQ2QS09YbtTTiSjGcf7NBqtYbrG/BE06zcBPCKEwQGzIv13IVdXNOSub2w=="
+ },
+ "System.Drawing.Common": {
+ "type": "Transitive",
+ "resolved": "9.0.0",
+ "contentHash": "uoozjI3+dlgKh2onFJcz8aNLh6TRCPlLSh8Dbuljc8CdvqXrxHOVysJlrHvlsOCqceqGBR1wrMPxlnzzhynktw==",
+ "dependencies": {
+ "Microsoft.Win32.SystemEvents": "9.0.0"
+ }
+ },
+ "System.Reflection.Metadata": {
+ "type": "Transitive",
+ "resolved": "9.0.0",
+ "contentHash": "ANiqLu3DxW9kol/hMmTWbt3414t9ftdIuiIU7j80okq2YzAueo120M442xk1kDJWtmZTqWQn7wHDvMRipVOEOQ==",
+ "dependencies": {
+ "System.Collections.Immutable": "9.0.0"
+ }
+ }
+ },
+ "net8.0-windows10.0.19041/win-arm64": {
+ "Microsoft.WindowsAppSDK": {
+ "type": "Direct",
+ "requested": "[1.6.250108002, )",
+ "resolved": "1.6.250108002",
+ "contentHash": "dOJ3oFeHnehVBAR98lR6YfX0JgDJkrehLqwZQqQE/iZgyye1c1TZu9oj3MBbgWP9xFApWUrb0G49KKnQWEZLtA==",
+ "dependencies": {
+ "Microsoft.Web.WebView2": "1.0.2651.64",
+ "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756"
+ }
+ },
+ "Microsoft.Web.WebView2": {
+ "type": "Transitive",
+ "resolved": "1.0.2651.64",
+ "contentHash": "f5sc/vcAoTCTEW7Nqzp4galAuTRguZViw8ksn+Nx2uskEBPm0/ubzy6gVjvXS/P96jLS89C8T9I0hPc417xpNg=="
+ },
+ "Microsoft.Win32.SystemEvents": {
+ "type": "Transitive",
+ "resolved": "9.0.0",
+ "contentHash": "z8FfGIaoeALdD+KF44A2uP8PZIQQtDGiXsOLuN8nohbKhkyKt7zGaZb+fKiCxTuBqG22Q7myIAioSWaIcOOrOw=="
+ }
+ },
+ "net8.0-windows10.0.19041/win-x64": {
+ "Microsoft.WindowsAppSDK": {
+ "type": "Direct",
+ "requested": "[1.6.250108002, )",
+ "resolved": "1.6.250108002",
+ "contentHash": "dOJ3oFeHnehVBAR98lR6YfX0JgDJkrehLqwZQqQE/iZgyye1c1TZu9oj3MBbgWP9xFApWUrb0G49KKnQWEZLtA==",
+ "dependencies": {
+ "Microsoft.Web.WebView2": "1.0.2651.64",
+ "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756"
+ }
+ },
+ "Microsoft.Web.WebView2": {
+ "type": "Transitive",
+ "resolved": "1.0.2651.64",
+ "contentHash": "f5sc/vcAoTCTEW7Nqzp4galAuTRguZViw8ksn+Nx2uskEBPm0/ubzy6gVjvXS/P96jLS89C8T9I0hPc417xpNg=="
+ },
+ "Microsoft.Win32.SystemEvents": {
+ "type": "Transitive",
+ "resolved": "9.0.0",
+ "contentHash": "z8FfGIaoeALdD+KF44A2uP8PZIQQtDGiXsOLuN8nohbKhkyKt7zGaZb+fKiCxTuBqG22Q7myIAioSWaIcOOrOw=="
+ }
+ },
+ "net8.0-windows10.0.19041/win-x86": {
+ "Microsoft.WindowsAppSDK": {
+ "type": "Direct",
+ "requested": "[1.6.250108002, )",
+ "resolved": "1.6.250108002",
+ "contentHash": "dOJ3oFeHnehVBAR98lR6YfX0JgDJkrehLqwZQqQE/iZgyye1c1TZu9oj3MBbgWP9xFApWUrb0G49KKnQWEZLtA==",
+ "dependencies": {
+ "Microsoft.Web.WebView2": "1.0.2651.64",
+ "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756"
+ }
+ },
+ "Microsoft.Web.WebView2": {
+ "type": "Transitive",
+ "resolved": "1.0.2651.64",
+ "contentHash": "f5sc/vcAoTCTEW7Nqzp4galAuTRguZViw8ksn+Nx2uskEBPm0/ubzy6gVjvXS/P96jLS89C8T9I0hPc417xpNg=="
+ },
+ "Microsoft.Win32.SystemEvents": {
+ "type": "Transitive",
+ "resolved": "9.0.0",
+ "contentHash": "z8FfGIaoeALdD+KF44A2uP8PZIQQtDGiXsOLuN8nohbKhkyKt7zGaZb+fKiCxTuBqG22Q7myIAioSWaIcOOrOw=="
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Coder.Desktop.sln b/Coder.Desktop.sln
index e25c8fa..0e73dc5 100644
--- a/Coder.Desktop.sln
+++ b/Coder.Desktop.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
-VisualStudioVersion = 17.12.35707.178 d17.12
+VisualStudioVersion = 17.12.35707.178
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vpn", "Vpn\Vpn.csproj", "{B342F896-C721-4AA5-A0F6-0BFA8EBAFACB}"
EndProject
@@ -17,8 +17,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests.Vpn.Service", "Tests.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CoderSdk", "CoderSdk\CoderSdk.csproj", "{A3D2B2B3-A051-46BD-A190-5487A9F24C28}"
EndProject
-Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "Package", "Package\Package.wapproj", "{C184988D-56E0-451F-B6A1-E5FE0405C80B}"
-EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "App", "App\App.csproj", "{800C7E2D-0D86-4554-9903-B879DA6FA2CE}"
EndProject
Global
@@ -145,46 +143,30 @@ Global
{A3D2B2B3-A051-46BD-A190-5487A9F24C28}.Release|x64.Build.0 = Release|Any CPU
{A3D2B2B3-A051-46BD-A190-5487A9F24C28}.Release|x86.ActiveCfg = Release|Any CPU
{A3D2B2B3-A051-46BD-A190-5487A9F24C28}.Release|x86.Build.0 = Release|Any CPU
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Debug|Any CPU.ActiveCfg = Debug|x64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Debug|Any CPU.Build.0 = Debug|x64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Debug|Any CPU.Deploy.0 = Debug|x64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Debug|ARM64.ActiveCfg = Debug|ARM64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Debug|ARM64.Build.0 = Debug|ARM64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Debug|ARM64.Deploy.0 = Debug|ARM64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Debug|x64.ActiveCfg = Debug|x64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Debug|x64.Build.0 = Debug|x64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Debug|x64.Deploy.0 = Debug|x64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Debug|x86.ActiveCfg = Debug|x86
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Debug|x86.Build.0 = Debug|x86
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Debug|x86.Deploy.0 = Debug|x86
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Release|Any CPU.ActiveCfg = Release|x64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Release|Any CPU.Build.0 = Release|x64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Release|Any CPU.Deploy.0 = Release|x64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Release|ARM64.ActiveCfg = Release|ARM64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Release|ARM64.Build.0 = Release|ARM64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Release|ARM64.Deploy.0 = Release|ARM64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Release|x64.ActiveCfg = Release|x64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Release|x64.Build.0 = Release|x64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Release|x64.Deploy.0 = Release|x64
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Release|x86.ActiveCfg = Release|x86
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Release|x86.Build.0 = Release|x86
- {C184988D-56E0-451F-B6A1-E5FE0405C80B}.Release|x86.Deploy.0 = Release|x86
{800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Debug|Any CPU.ActiveCfg = Debug|x64
{800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Debug|Any CPU.Build.0 = Debug|x64
+ {800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Debug|Any CPU.Deploy.0 = Debug|x64
{800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Debug|ARM64.ActiveCfg = Debug|ARM64
{800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Debug|ARM64.Build.0 = Debug|ARM64
+ {800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Debug|ARM64.Deploy.0 = Debug|ARM64
{800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Debug|x64.ActiveCfg = Debug|x64
{800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Debug|x64.Build.0 = Debug|x64
+ {800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Debug|x64.Deploy.0 = Debug|x64
{800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Debug|x86.ActiveCfg = Debug|x86
{800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Debug|x86.Build.0 = Debug|x86
+ {800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Debug|x86.Deploy.0 = Debug|x86
{800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Release|Any CPU.ActiveCfg = Release|x64
{800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Release|Any CPU.Build.0 = Release|x64
+ {800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Release|Any CPU.Deploy.0 = Release|x64
{800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Release|ARM64.ActiveCfg = Release|ARM64
{800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Release|ARM64.Build.0 = Release|ARM64
+ {800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Release|ARM64.Deploy.0 = Release|ARM64
{800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Release|x64.ActiveCfg = Release|x64
{800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Release|x64.Build.0 = Release|x64
+ {800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Release|x64.Deploy.0 = Release|x64
{800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Release|x86.ActiveCfg = Release|x86
{800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Release|x86.Build.0 = Release|x86
+ {800C7E2D-0D86-4554-9903-B879DA6FA2CE}.Release|x86.Deploy.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/CoderSdk/CoderApiClient.cs b/CoderSdk/CoderApiClient.cs
index 90343f3..cfcfdb7 100644
--- a/CoderSdk/CoderApiClient.cs
+++ b/CoderSdk/CoderApiClient.cs
@@ -1,4 +1,4 @@
-using System.Text;
+using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
diff --git a/CoderSdk/CoderSdk.csproj b/CoderSdk/CoderSdk.csproj
index 1ca7d3c..87a04a8 100644
--- a/CoderSdk/CoderSdk.csproj
+++ b/CoderSdk/CoderSdk.csproj
@@ -1,10 +1,9 @@
-
Coder.Desktop.CoderSdk
net8.0
enable
enable
+ true
-
diff --git a/CoderSdk/packages.lock.json b/CoderSdk/packages.lock.json
new file mode 100644
index 0000000..807ab82
--- /dev/null
+++ b/CoderSdk/packages.lock.json
@@ -0,0 +1,6 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {}
+ }
+}
\ No newline at end of file
diff --git a/Package/Package.wapproj b/Package/Package.wapproj
index 10fb751..76d48c6 100644
--- a/Package/Package.wapproj
+++ b/Package/Package.wapproj
@@ -64,4 +64,4 @@
-
\ No newline at end of file
+
diff --git a/Tests.Vpn.Proto/Tests.Vpn.Proto.csproj b/Tests.Vpn.Proto/Tests.Vpn.Proto.csproj
index 54b7b33..25b05ce 100644
--- a/Tests.Vpn.Proto/Tests.Vpn.Proto.csproj
+++ b/Tests.Vpn.Proto/Tests.Vpn.Proto.csproj
@@ -5,31 +5,32 @@
net8.0
enable
enable
+ true
false
true
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
-
+
-
+
diff --git a/Tests.Vpn.Proto/packages.lock.json b/Tests.Vpn.Proto/packages.lock.json
new file mode 100644
index 0000000..18a41b2
--- /dev/null
+++ b/Tests.Vpn.Proto/packages.lock.json
@@ -0,0 +1,84 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "coverlet.collector": {
+ "type": "Direct",
+ "requested": "[6.0.4, )",
+ "resolved": "6.0.4",
+ "contentHash": "lkhqpF8Pu2Y7IiN7OntbsTtdbpR1syMsm2F3IgX6ootA4ffRqWL5jF7XipHuZQTdVuWG/gVAAcf8mjk8Tz0xPg=="
+ },
+ "Microsoft.NET.Test.Sdk": {
+ "type": "Direct",
+ "requested": "[17.12.0, )",
+ "resolved": "17.12.0",
+ "contentHash": "kt/PKBZ91rFCWxVIJZSgVLk+YR+4KxTuHf799ho8WNiK5ZQpJNAEZCAWX86vcKrs+DiYjiibpYKdGZP6+/N17w==",
+ "dependencies": {
+ "Microsoft.CodeCoverage": "17.12.0",
+ "Microsoft.TestPlatform.TestHost": "17.12.0"
+ }
+ },
+ "NUnit": {
+ "type": "Direct",
+ "requested": "[4.3.2, )",
+ "resolved": "4.3.2",
+ "contentHash": "puVXayXNmEu7MFQSUswGmUjOy3M3baprMbkLl5PAutpeDoGTr+jPv33qAYsqxywi2wJCq8l/O3EhHoLulPE1iQ=="
+ },
+ "NUnit.Analyzers": {
+ "type": "Direct",
+ "requested": "[4.6.0, )",
+ "resolved": "4.6.0",
+ "contentHash": "uK1TEViVBugOO6uDou1amu7CoNhrd2sEUFr/iaEmVfoeY8qq/zzWCCUZi97aCCSZmjnHKCCWKh3RucU27qPlKg=="
+ },
+ "NUnit3TestAdapter": {
+ "type": "Direct",
+ "requested": "[4.6.0, )",
+ "resolved": "4.6.0",
+ "contentHash": "R7e1+a4vuV/YS+ItfL7f//rG+JBvVeVLX4mHzFEZo4W1qEKl8Zz27AqvQSAqo+BtIzUCo4aAJMYa56VXS4hudw=="
+ },
+ "Google.Protobuf": {
+ "type": "Transitive",
+ "resolved": "3.29.3",
+ "contentHash": "t7nZFFUFwigCwZ+nIXHDLweXvwIpsOXi+P7J7smPT/QjI3EKxnCzTQOhBqyEh6XEzc/pNH+bCFOOSjatrPt6Tw=="
+ },
+ "Microsoft.CodeCoverage": {
+ "type": "Transitive",
+ "resolved": "17.12.0",
+ "contentHash": "4svMznBd5JM21JIG2xZKGNanAHNXplxf/kQDFfLHXQ3OnpJkayRK/TjacFjA+EYmoyuNXHo/sOETEfcYtAzIrA=="
+ },
+ "Microsoft.TestPlatform.ObjectModel": {
+ "type": "Transitive",
+ "resolved": "17.12.0",
+ "contentHash": "TDqkTKLfQuAaPcEb3pDDWnh7b3SyZF+/W9OZvWFp6eJCIiiYFdSB6taE2I6tWrFw5ywhzOb6sreoGJTI6m3rSQ==",
+ "dependencies": {
+ "System.Reflection.Metadata": "1.6.0"
+ }
+ },
+ "Microsoft.TestPlatform.TestHost": {
+ "type": "Transitive",
+ "resolved": "17.12.0",
+ "contentHash": "MiPEJQNyADfwZ4pJNpQex+t9/jOClBGMiCiVVFuELCMSX2nmNfvUor3uFVxNNCg30uxDP8JDYfPnMXQzsfzYyg==",
+ "dependencies": {
+ "Microsoft.TestPlatform.ObjectModel": "17.12.0",
+ "Newtonsoft.Json": "13.0.1"
+ }
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.1",
+ "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A=="
+ },
+ "System.Reflection.Metadata": {
+ "type": "Transitive",
+ "resolved": "1.6.0",
+ "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ=="
+ },
+ "vpn.proto": {
+ "type": "Project",
+ "dependencies": {
+ "Google.Protobuf": "[3.29.3, )"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tests.Vpn.Service/Tests.Vpn.Service.csproj b/Tests.Vpn.Service/Tests.Vpn.Service.csproj
index 2fdfa76..e127a0d 100644
--- a/Tests.Vpn.Service/Tests.Vpn.Service.csproj
+++ b/Tests.Vpn.Service/Tests.Vpn.Service.csproj
@@ -5,31 +5,32 @@
net8.0-windows
enable
enable
+ true
false
true
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
-
+
-
+
diff --git a/Tests.Vpn.Service/packages.lock.json b/Tests.Vpn.Service/packages.lock.json
new file mode 100644
index 0000000..0b0ece4
--- /dev/null
+++ b/Tests.Vpn.Service/packages.lock.json
@@ -0,0 +1,458 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0-windows7.0": {
+ "coverlet.collector": {
+ "type": "Direct",
+ "requested": "[6.0.4, )",
+ "resolved": "6.0.4",
+ "contentHash": "lkhqpF8Pu2Y7IiN7OntbsTtdbpR1syMsm2F3IgX6ootA4ffRqWL5jF7XipHuZQTdVuWG/gVAAcf8mjk8Tz0xPg=="
+ },
+ "Microsoft.NET.Test.Sdk": {
+ "type": "Direct",
+ "requested": "[17.12.0, )",
+ "resolved": "17.12.0",
+ "contentHash": "kt/PKBZ91rFCWxVIJZSgVLk+YR+4KxTuHf799ho8WNiK5ZQpJNAEZCAWX86vcKrs+DiYjiibpYKdGZP6+/N17w==",
+ "dependencies": {
+ "Microsoft.CodeCoverage": "17.12.0",
+ "Microsoft.TestPlatform.TestHost": "17.12.0"
+ }
+ },
+ "NUnit": {
+ "type": "Direct",
+ "requested": "[4.3.2, )",
+ "resolved": "4.3.2",
+ "contentHash": "puVXayXNmEu7MFQSUswGmUjOy3M3baprMbkLl5PAutpeDoGTr+jPv33qAYsqxywi2wJCq8l/O3EhHoLulPE1iQ=="
+ },
+ "NUnit.Analyzers": {
+ "type": "Direct",
+ "requested": "[4.6.0, )",
+ "resolved": "4.6.0",
+ "contentHash": "uK1TEViVBugOO6uDou1amu7CoNhrd2sEUFr/iaEmVfoeY8qq/zzWCCUZi97aCCSZmjnHKCCWKh3RucU27qPlKg=="
+ },
+ "NUnit3TestAdapter": {
+ "type": "Direct",
+ "requested": "[4.6.0, )",
+ "resolved": "4.6.0",
+ "contentHash": "R7e1+a4vuV/YS+ItfL7f//rG+JBvVeVLX4mHzFEZo4W1qEKl8Zz27AqvQSAqo+BtIzUCo4aAJMYa56VXS4hudw=="
+ },
+ "Google.Protobuf": {
+ "type": "Transitive",
+ "resolved": "3.29.3",
+ "contentHash": "t7nZFFUFwigCwZ+nIXHDLweXvwIpsOXi+P7J7smPT/QjI3EKxnCzTQOhBqyEh6XEzc/pNH+bCFOOSjatrPt6Tw=="
+ },
+ "Microsoft.CodeCoverage": {
+ "type": "Transitive",
+ "resolved": "17.12.0",
+ "contentHash": "4svMznBd5JM21JIG2xZKGNanAHNXplxf/kQDFfLHXQ3OnpJkayRK/TjacFjA+EYmoyuNXHo/sOETEfcYtAzIrA=="
+ },
+ "Microsoft.Extensions.Configuration": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "VuthqFS+ju6vT8W4wevdhEFiRi1trvQtkzWLonApfF5USVzzDcTBoY3F24WvN/tffLSrycArVfX1bThm/9xY2A==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Primitives": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "+4hfFIY1UjBCXFTTOd+ojlDPq6mep3h5Vq5SYE3Pjucr7dNXmq4S/6P/LoVnZFz2e/5gWp/om4svUFgznfULcA==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Binder": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "w7kAyu1Mm7eParRV6WvGNNwA8flPTub16fwH49h7b/yqJZFTgYxnOVCuiah3G2bgseJMEq4DLjjsyQRvsdzRgA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Configuration.CommandLine": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "5WC1OsXfljC1KHEyL0yefpAyt1UZjrZ0/xyOqFowc5VntbE79JpCYOTSYFlxEuXm3Oq5xsgU2YXeZLTgAAX+DA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "9.0.1",
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Configuration.EnvironmentVariables": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "5HShUdF8KFAUSzoEu0DOFbX09FlcFtHxEalowyjM7Kji0EjdF0DLjHajb2IBvoqsExAYox+Z2GfbfGF7dH7lKQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "9.0.1",
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Configuration.FileExtensions": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "QBOI8YVAyKqeshYOyxSe6co22oag431vxMu5xQe1EjXMkYE4xK4J71xLCW3/bWKmr9Aoy1VqGUARSLFnotk4Bg==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "9.0.1",
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1",
+ "Microsoft.Extensions.FileProviders.Abstractions": "9.0.1",
+ "Microsoft.Extensions.FileProviders.Physical": "9.0.1",
+ "Microsoft.Extensions.Primitives": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Json": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "z+g+lgPET1JRDjsOkFe51rkkNcnJgvOK5UIpeTfF1iAi0GkBJz5/yUuTa8a9V8HUh4gj4xFT5WGoMoXoSDKfGg==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "9.0.1",
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Configuration.FileExtensions": "9.0.1",
+ "Microsoft.Extensions.FileProviders.Abstractions": "9.0.1",
+ "System.Text.Json": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Configuration.UserSecrets": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "esGPOgLZ1tZddEomexhrU+LJ5YIsuJdkh0tU7r4WVpNZ15dLuMPqPW4Xe4txf3T2PDUX2ILe3nYQEDjZjfSEJg==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Configuration.Json": "9.0.1",
+ "Microsoft.Extensions.FileProviders.Abstractions": "9.0.1",
+ "Microsoft.Extensions.FileProviders.Physical": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "qZI42ASAe3hr2zMSA6UjM92pO1LeDq5DcwkgSowXXPY8I56M76pEKrnmsKKbxagAf39AJxkH2DY4sb72ixyOrg==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "Tr74eP0oQ3AyC24ch17N8PuEkrPbD0JqIfENCYqmgKYNOmL8wQKzLJu3ObxTUDrjnn4rHoR1qKa37/eQyHmCDA=="
+ },
+ "Microsoft.Extensions.Diagnostics": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "4ZmP6turxMFsNwK/MCko2fuIITaYYN/eXyyIRq1FjLDKnptdbn6xMb7u0zfSMzCGpzkx4RxH/g1jKN2IchG7uA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "9.0.1",
+ "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Diagnostics.Abstractions": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "pfAPuVtHvG6dvZtAa0OQbXdDqq6epnr8z0/IIUjdmV0tMeI8Aj9KxDXvdDvqr+qNHTkmA7pZpChNxwNZt4GXVg==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1",
+ "System.Diagnostics.DiagnosticSource": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Abstractions": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "DguZYt1DWL05+8QKWL3b6bW7A2pC5kYFMY5iXM6W2M23jhvcNa8v6AU8PvVJBcysxHwr9/jax0agnwoBumsSwg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Physical": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "TKDMNRS66UTMEVT38/tU9hA63UTMvzI3DyNm5mx8+JCf3BaOtxgrvWLCI1y3J52PzT5yNl/T2KN5Z0KbApLZcg==",
+ "dependencies": {
+ "Microsoft.Extensions.FileProviders.Abstractions": "9.0.1",
+ "Microsoft.Extensions.FileSystemGlobbing": "9.0.1",
+ "Microsoft.Extensions.Primitives": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.FileSystemGlobbing": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "Mxcp9NXuQMvAnudRZcgIb5SqlWrlullQzntBLTwuv0MPIJ5LqiGwbRqiyxgdk+vtCoUkplb0oXy5kAw1t469Ug=="
+ },
+ "Microsoft.Extensions.Hosting": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "3wZNcVvC8RW44HDqqmIq+BqF5pgmTQdbNdR9NyYw33JSMnJuclwoJ2PEkrJ/KvD1U/hmqHVL3l5If+Hn3D1fWA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "9.0.1",
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Configuration.Binder": "9.0.1",
+ "Microsoft.Extensions.Configuration.CommandLine": "9.0.1",
+ "Microsoft.Extensions.Configuration.EnvironmentVariables": "9.0.1",
+ "Microsoft.Extensions.Configuration.FileExtensions": "9.0.1",
+ "Microsoft.Extensions.Configuration.Json": "9.0.1",
+ "Microsoft.Extensions.Configuration.UserSecrets": "9.0.1",
+ "Microsoft.Extensions.DependencyInjection": "9.0.1",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Diagnostics": "9.0.1",
+ "Microsoft.Extensions.FileProviders.Abstractions": "9.0.1",
+ "Microsoft.Extensions.FileProviders.Physical": "9.0.1",
+ "Microsoft.Extensions.Hosting.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging": "9.0.1",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging.Configuration": "9.0.1",
+ "Microsoft.Extensions.Logging.Console": "9.0.1",
+ "Microsoft.Extensions.Logging.Debug": "9.0.1",
+ "Microsoft.Extensions.Logging.EventLog": "9.0.1",
+ "Microsoft.Extensions.Logging.EventSource": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Hosting.Abstractions": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "CwSMhLNe8HLkfbFzdz0CHWJhtWH3TtfZSicLBd/itFD+NqQtfGHmvqXHQbaFFl3mQB5PBb2gxwzWQyW2pIj7PA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.1",
+ "Microsoft.Extensions.FileProviders.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Hosting.WindowsServices": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "FLapgOXQzPjUsbMqjjagCFCiGjroRmrmHQVK3/PEovRIvDU6nLk7KKs4PalzEHaIfqG+PySlY/BeLTyZtjcshg==",
+ "dependencies": {
+ "Microsoft.Extensions.Hosting": "9.0.1",
+ "Microsoft.Extensions.Logging.EventLog": "9.0.1",
+ "System.ServiceProcess.ServiceController": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "E/k5r7S44DOW+08xQPnNbO8DKAQHhkspDboTThNJ6Z3/QBb4LC6gStNWzVmy3IvW7sUD+iJKf4fj0xEkqE7vnQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "9.0.1",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "w2gUqXN/jNIuvqYwX3lbXagsizVNXYyt6LlF57+tMve4JYCEgCMMAjRce6uKcDASJgpMbErRT1PfHy2OhbkqEA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "System.Diagnostics.DiagnosticSource": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Logging.Configuration": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "MeZePlyu3/74Wk4FHYSzXijADJUhWa7gxtaphLxhS8zEPWdJuBCrPo0sezdCSZaKCL+cZLSLobrb7xt2zHOxZQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "9.0.1",
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Configuration.Binder": "9.0.1",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging": "9.0.1",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1",
+ "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Logging.Console": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "YUzguHYlWfp4upfYlpVe3dnY59P25wc+/YLJ9/NQcblT3EvAB1CObQulClll7NtnFbbx4Js0a0UfyS8SbRsWXQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging": "9.0.1",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging.Configuration": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1",
+ "System.Text.Json": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Logging.Debug": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "pzdyibIV8k4sym0Sszcp2MJCuXrpOGs9qfOvY+hCRu8k4HbdVoeKOLnacxHK6vEPITX5o5FjjsZW2zScLXTjYA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging": "9.0.1",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Logging.EventLog": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "+a4RlbwFWjsMujNNhf1Jy9Nm5CpMT+nxXxfgrkRSloPo0OAWhPSPsrFo6VWpvgIPPS41qmfAVWr3DqAmOoVZgQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging": "9.0.1",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1",
+ "System.Diagnostics.EventLog": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Logging.EventSource": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "d47ZRZUOg1dGOX+yisWScQ7w4+92OlR9beS2UXaiadUCA3RFoZzobzVgrzBX7Oo/qefx9LxdRcaeFpWKb3BNBw==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging": "9.0.1",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1",
+ "Microsoft.Extensions.Primitives": "9.0.1",
+ "System.Text.Json": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "nggoNKnWcsBIAaOWHA+53XZWrslC7aGeok+aR+epDPRy7HI7GwMnGZE8yEsL2Onw7kMOHVHwKcsDls1INkNUJQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Primitives": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Options.ConfigurationExtensions": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "8RRKWtuU4fR+8MQLR/8CqZwZ9yc2xCpllw/WPRY7kskIqEq0hMcEI4AfUJO72yGiK2QJkrsDcUvgB5Yc+3+lyg==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Configuration.Binder": "9.0.1",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1",
+ "Microsoft.Extensions.Primitives": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Options.DataAnnotations": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "T16k12gDWOoi9W/oueC7knsZxm3ZjqmrQBFLXx9UH3Kv4fbehMyiOdhi5u1Vw7M4g0uMj21InBfgDE0570byEQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "bHtTesA4lrSGD1ZUaMIx6frU3wyy0vYtTa/hM6gGQu5QNrydObv8T5COiGUWsisflAfmsaFOe9Xvw5NSO99z0g=="
+ },
+ "Microsoft.Security.Extensions": {
+ "type": "Transitive",
+ "resolved": "1.3.0",
+ "contentHash": "xK8WFEo5WMUE8DI8W+GjhRwpVcPrxc4DyTjfxh39+yOyhAtC5TBHDlFEJks5toNZHsUeUuiWELIX25oTWOKPBw=="
+ },
+ "Microsoft.TestPlatform.ObjectModel": {
+ "type": "Transitive",
+ "resolved": "17.12.0",
+ "contentHash": "TDqkTKLfQuAaPcEb3pDDWnh7b3SyZF+/W9OZvWFp6eJCIiiYFdSB6taE2I6tWrFw5ywhzOb6sreoGJTI6m3rSQ==",
+ "dependencies": {
+ "System.Reflection.Metadata": "1.6.0"
+ }
+ },
+ "Microsoft.TestPlatform.TestHost": {
+ "type": "Transitive",
+ "resolved": "17.12.0",
+ "contentHash": "MiPEJQNyADfwZ4pJNpQex+t9/jOClBGMiCiVVFuELCMSX2nmNfvUor3uFVxNNCg30uxDP8JDYfPnMXQzsfzYyg==",
+ "dependencies": {
+ "Microsoft.TestPlatform.ObjectModel": "17.12.0",
+ "Newtonsoft.Json": "13.0.1"
+ }
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.1",
+ "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A=="
+ },
+ "Semver": {
+ "type": "Transitive",
+ "resolved": "3.0.0",
+ "contentHash": "9jZCicsVgTebqkAujRWtC9J1A5EQVlu0TVKHcgoCuv345ve5DYf4D1MjhKEnQjdRZo6x/vdv6QQrYFs7ilGzLA==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "5.0.1"
+ }
+ },
+ "System.Diagnostics.DiagnosticSource": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "yOcDWx4P/s1I83+7gQlgQLmhny2eNcU0cfo1NBWi+en4EAI38Jau+/neT85gUW6w1s7+FUJc2qNOmmwGLIREqA=="
+ },
+ "System.Diagnostics.EventLog": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "iVnDpgYJsRaRFnk77kcLA3+913WfWDtnAKrQl9tQ5ahqKANTaJKmQdsuPWWiAPWE9pk1Kj4Pg9JGXWfFYYyakQ=="
+ },
+ "System.IO.Pipelines": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "uXf5o8eV/gtzDQY4lGROLFMWQvcViKcF8o4Q6KpIOjloAQXrnscQSu6gTxYJMHuNJnh7szIF9AzkaEq+zDLoEg=="
+ },
+ "System.Reflection.Metadata": {
+ "type": "Transitive",
+ "resolved": "1.6.0",
+ "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ=="
+ },
+ "System.ServiceProcess.ServiceController": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "Ghm4yP29P3cC65Qof8CrgU3WO/q3ERtht6/CrvcUl1FgRs6D7exj75GuG4ciRv0sjygtvyd675924DFsxxnEgA==",
+ "dependencies": {
+ "System.Diagnostics.EventLog": "9.0.1"
+ }
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "XkspqduP2t1e1x2vBUAD/xZ5ZDvmywuUwsmB93MvyQLospJfqtX0GsR/kU0vUL2h4kmvf777z3txV2W4NrQ9Qg=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "eqWHDZqYPv1PvuvoIIx5pF74plL3iEOZOl/0kQP+Y0TEbtgNnM2W6k8h8EPYs+LTJZsXuWa92n5W5sHTWvE3VA==",
+ "dependencies": {
+ "System.IO.Pipelines": "9.0.1",
+ "System.Text.Encodings.Web": "9.0.1"
+ }
+ },
+ "codersdk": {
+ "type": "Project"
+ },
+ "vpn": {
+ "type": "Project",
+ "dependencies": {
+ "System.IO.Pipelines": "[9.0.1, )",
+ "Vpn.Proto": "[1.0.0, )"
+ }
+ },
+ "vpn.proto": {
+ "type": "Project",
+ "dependencies": {
+ "Google.Protobuf": "[3.29.3, )"
+ }
+ },
+ "vpn.service": {
+ "type": "Project",
+ "dependencies": {
+ "CoderSdk": "[1.0.0, )",
+ "Microsoft.Extensions.Hosting": "[9.0.1, )",
+ "Microsoft.Extensions.Hosting.WindowsServices": "[9.0.1, )",
+ "Microsoft.Extensions.Options.DataAnnotations": "[9.0.1, )",
+ "Microsoft.Security.Extensions": "[1.3.0, )",
+ "Semver": "[3.0.0, )",
+ "Vpn": "[1.0.0, )"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tests.Vpn/Tests.Vpn.csproj b/Tests.Vpn/Tests.Vpn.csproj
index df00e81..7216a35 100644
--- a/Tests.Vpn/Tests.Vpn.csproj
+++ b/Tests.Vpn/Tests.Vpn.csproj
@@ -5,31 +5,32 @@
net8.0
enable
enable
+ true
false
true
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
-
+
-
+
diff --git a/Tests.Vpn/Utilities/TaskUtilitiesTest.cs b/Tests.Vpn/Utilities/TaskUtilitiesTest.cs
index a6a4583..47f258f 100644
--- a/Tests.Vpn/Utilities/TaskUtilitiesTest.cs
+++ b/Tests.Vpn/Utilities/TaskUtilitiesTest.cs
@@ -6,7 +6,6 @@ namespace Coder.Desktop.Tests.Vpn.Utilities;
public class TaskUtilitiesTest
{
[Test(Description = "CancellableWhenAll with no tasks should complete immediately")]
- [Timeout(30_000)]
public void CancellableWhenAll_NoTasks()
{
var task = TaskUtilities.CancellableWhenAll(new CancellationTokenSource());
@@ -14,7 +13,6 @@ public void CancellableWhenAll_NoTasks()
}
[Test(Description = "CancellableWhenAll with a single task should complete")]
- [Timeout(30_000)]
public async Task CancellableWhenAll_SingleTask()
{
var innerTask = new TaskCompletionSource();
@@ -25,7 +23,6 @@ public async Task CancellableWhenAll_SingleTask()
}
[Test(Description = "CancellableWhenAll with a single task that faults should propagate the exception")]
- [Timeout(30_000)]
public void CancellableWhenAll_SingleTaskFault()
{
var cts = new CancellationTokenSource();
@@ -38,7 +35,6 @@ public void CancellableWhenAll_SingleTaskFault()
}
[Test(Description = "CancellableWhenAll with a single task that is canceled should propagate the cancellation")]
- [Timeout(30_000)]
public void CancellableWhenAll_SingleTaskCanceled()
{
var cts = new CancellationTokenSource();
@@ -51,7 +47,6 @@ public void CancellableWhenAll_SingleTaskCanceled()
}
[Test(Description = "CancellableWhenAll with multiple tasks should complete when all tasks are completed")]
- [Timeout(30_000)]
public async Task CancellableWhenAll_MultipleTasks()
{
var cts = new CancellationTokenSource();
@@ -74,7 +69,6 @@ public async Task CancellableWhenAll_MultipleTasks()
}
[Test(Description = "CancellableWhenAll with multiple tasks that fault should propagate the first exception only")]
- [Timeout(30_000)]
public async Task CancellableWhenAll_MultipleTasksFault()
{
var cts = new CancellationTokenSource();
@@ -95,7 +89,6 @@ public async Task CancellableWhenAll_MultipleTasksFault()
}
[Test(Description = "CancellableWhenAll with an exception and a cancellation should propagate the first thing")]
- [Timeout(30_000)]
public async Task CancellableWhenAll_MultipleTasksFaultAndCanceled()
{
var cts = new CancellationTokenSource();
@@ -118,7 +111,6 @@ public async Task CancellableWhenAll_MultipleTasksFaultAndCanceled()
}
[Test(Description = "CancellableWhenAll with a cancellation and an exception should propagate the first thing")]
- [Timeout(30_000)]
public async Task CancellableWhenAll_MultipleTasksCanceledAndFault()
{
var cts = new CancellationTokenSource();
diff --git a/Tests.Vpn/packages.lock.json b/Tests.Vpn/packages.lock.json
new file mode 100644
index 0000000..63ae6bd
--- /dev/null
+++ b/Tests.Vpn/packages.lock.json
@@ -0,0 +1,96 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "coverlet.collector": {
+ "type": "Direct",
+ "requested": "[6.0.4, )",
+ "resolved": "6.0.4",
+ "contentHash": "lkhqpF8Pu2Y7IiN7OntbsTtdbpR1syMsm2F3IgX6ootA4ffRqWL5jF7XipHuZQTdVuWG/gVAAcf8mjk8Tz0xPg=="
+ },
+ "Microsoft.NET.Test.Sdk": {
+ "type": "Direct",
+ "requested": "[17.12.0, )",
+ "resolved": "17.12.0",
+ "contentHash": "kt/PKBZ91rFCWxVIJZSgVLk+YR+4KxTuHf799ho8WNiK5ZQpJNAEZCAWX86vcKrs+DiYjiibpYKdGZP6+/N17w==",
+ "dependencies": {
+ "Microsoft.CodeCoverage": "17.12.0",
+ "Microsoft.TestPlatform.TestHost": "17.12.0"
+ }
+ },
+ "NUnit": {
+ "type": "Direct",
+ "requested": "[4.3.2, )",
+ "resolved": "4.3.2",
+ "contentHash": "puVXayXNmEu7MFQSUswGmUjOy3M3baprMbkLl5PAutpeDoGTr+jPv33qAYsqxywi2wJCq8l/O3EhHoLulPE1iQ=="
+ },
+ "NUnit.Analyzers": {
+ "type": "Direct",
+ "requested": "[4.6.0, )",
+ "resolved": "4.6.0",
+ "contentHash": "uK1TEViVBugOO6uDou1amu7CoNhrd2sEUFr/iaEmVfoeY8qq/zzWCCUZi97aCCSZmjnHKCCWKh3RucU27qPlKg=="
+ },
+ "NUnit3TestAdapter": {
+ "type": "Direct",
+ "requested": "[4.6.0, )",
+ "resolved": "4.6.0",
+ "contentHash": "R7e1+a4vuV/YS+ItfL7f//rG+JBvVeVLX4mHzFEZo4W1qEKl8Zz27AqvQSAqo+BtIzUCo4aAJMYa56VXS4hudw=="
+ },
+ "Google.Protobuf": {
+ "type": "Transitive",
+ "resolved": "3.29.3",
+ "contentHash": "t7nZFFUFwigCwZ+nIXHDLweXvwIpsOXi+P7J7smPT/QjI3EKxnCzTQOhBqyEh6XEzc/pNH+bCFOOSjatrPt6Tw=="
+ },
+ "Microsoft.CodeCoverage": {
+ "type": "Transitive",
+ "resolved": "17.12.0",
+ "contentHash": "4svMznBd5JM21JIG2xZKGNanAHNXplxf/kQDFfLHXQ3OnpJkayRK/TjacFjA+EYmoyuNXHo/sOETEfcYtAzIrA=="
+ },
+ "Microsoft.TestPlatform.ObjectModel": {
+ "type": "Transitive",
+ "resolved": "17.12.0",
+ "contentHash": "TDqkTKLfQuAaPcEb3pDDWnh7b3SyZF+/W9OZvWFp6eJCIiiYFdSB6taE2I6tWrFw5ywhzOb6sreoGJTI6m3rSQ==",
+ "dependencies": {
+ "System.Reflection.Metadata": "1.6.0"
+ }
+ },
+ "Microsoft.TestPlatform.TestHost": {
+ "type": "Transitive",
+ "resolved": "17.12.0",
+ "contentHash": "MiPEJQNyADfwZ4pJNpQex+t9/jOClBGMiCiVVFuELCMSX2nmNfvUor3uFVxNNCg30uxDP8JDYfPnMXQzsfzYyg==",
+ "dependencies": {
+ "Microsoft.TestPlatform.ObjectModel": "17.12.0",
+ "Newtonsoft.Json": "13.0.1"
+ }
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.1",
+ "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A=="
+ },
+ "System.IO.Pipelines": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "uXf5o8eV/gtzDQY4lGROLFMWQvcViKcF8o4Q6KpIOjloAQXrnscQSu6gTxYJMHuNJnh7szIF9AzkaEq+zDLoEg=="
+ },
+ "System.Reflection.Metadata": {
+ "type": "Transitive",
+ "resolved": "1.6.0",
+ "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ=="
+ },
+ "vpn": {
+ "type": "Project",
+ "dependencies": {
+ "System.IO.Pipelines": "[9.0.1, )",
+ "Vpn.Proto": "[1.0.0, )"
+ }
+ },
+ "vpn.proto": {
+ "type": "Project",
+ "dependencies": {
+ "Google.Protobuf": "[3.29.3, )"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Vpn.Proto/RpcMessage.cs b/Vpn.Proto/RpcMessage.cs
index fc1af11..8a4ea26 100644
--- a/Vpn.Proto/RpcMessage.cs
+++ b/Vpn.Proto/RpcMessage.cs
@@ -1,4 +1,4 @@
-using System.Reflection;
+using System.Reflection;
using Google.Protobuf;
namespace Coder.Desktop.Vpn.Proto;
diff --git a/Vpn.Proto/RpcVersion.cs b/Vpn.Proto/RpcVersion.cs
index 8eb0de0..d5d0520 100644
--- a/Vpn.Proto/RpcVersion.cs
+++ b/Vpn.Proto/RpcVersion.cs
@@ -1,4 +1,4 @@
-namespace Coder.Desktop.Vpn.Proto;
+namespace Coder.Desktop.Vpn.Proto;
///
/// A version of the RPC API. Can be compared other versions to determine compatibility between two peers.
@@ -152,12 +152,12 @@ public void Validate()
{
RpcVersion? bestVersion = null;
foreach (var v1 in this)
- foreach (var v2 in other)
- if (v1.Major == v2.Major && (bestVersion is null || v1.Major > bestVersion.Major))
- {
- var v = v1.IsCompatibleWith(v2);
- if (v is not null) bestVersion = v;
- }
+ foreach (var v2 in other)
+ if (v1.Major == v2.Major && (bestVersion is null || v1.Major > bestVersion.Major))
+ {
+ var v = v1.IsCompatibleWith(v2);
+ if (v is not null) bestVersion = v;
+ }
return bestVersion;
}
diff --git a/Vpn.Proto/Vpn.Proto.csproj b/Vpn.Proto/Vpn.Proto.csproj
index 6acb12e..f1cca78 100644
--- a/Vpn.Proto/Vpn.Proto.csproj
+++ b/Vpn.Proto/Vpn.Proto.csproj
@@ -5,15 +5,16 @@
net8.0
enable
enable
+ true
-
+
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/Vpn.Proto/packages.lock.json b/Vpn.Proto/packages.lock.json
new file mode 100644
index 0000000..3cbfd8e
--- /dev/null
+++ b/Vpn.Proto/packages.lock.json
@@ -0,0 +1,19 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Google.Protobuf": {
+ "type": "Direct",
+ "requested": "[3.29.3, )",
+ "resolved": "3.29.3",
+ "contentHash": "t7nZFFUFwigCwZ+nIXHDLweXvwIpsOXi+P7J7smPT/QjI3EKxnCzTQOhBqyEh6XEzc/pNH+bCFOOSjatrPt6Tw=="
+ },
+ "Grpc.Tools": {
+ "type": "Direct",
+ "requested": "[2.69.0, )",
+ "resolved": "2.69.0",
+ "contentHash": "W5hW4R1h19FCzKb8ToqIJMI5YxnQqGmREEpV8E5XkfCtLPIK5MSHztwQ8gZUfG8qu9fg5MhItjzyPRqQBjnrbA=="
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Vpn.Service/Downloader.cs b/Vpn.Service/Downloader.cs
index ea4c587..a0a1359 100644
--- a/Vpn.Service/Downloader.cs
+++ b/Vpn.Service/Downloader.cs
@@ -40,15 +40,16 @@ public Task ValidateAsync(string path, CancellationToken ct = default)
///
public class AuthenticodeDownloadValidator : IDownloadValidator
{
+ public static readonly AuthenticodeDownloadValidator Coder = new("Coder Technologies Inc.");
+
private readonly string _expectedName;
+ // ReSharper disable once ConvertToPrimaryConstructor
public AuthenticodeDownloadValidator(string expectedName)
{
_expectedName = expectedName;
}
- public static AuthenticodeDownloadValidator Coder => new("Coder Technologies Inc.");
-
public async Task ValidateAsync(string path, CancellationToken ct = default)
{
FileSignatureInfo fileSigInfo;
@@ -79,6 +80,7 @@ public class AssemblyVersionDownloadValidator : IDownloadValidator
{
private readonly string _expectedAssemblyVersion;
+ // ReSharper disable once ConvertToPrimaryConstructor
public AssemblyVersionDownloadValidator(string expectedAssemblyVersion)
{
_expectedAssemblyVersion = expectedAssemblyVersion;
diff --git a/Vpn.Service/ManagerService.cs b/Vpn.Service/ManagerService.cs
index b7b2e34..b7328e9 100644
--- a/Vpn.Service/ManagerService.cs
+++ b/Vpn.Service/ManagerService.cs
@@ -1,4 +1,4 @@
-using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace Coder.Desktop.Vpn.Service;
diff --git a/Vpn.Service/Vpn.Service.csproj b/Vpn.Service/Vpn.Service.csproj
index e6da70d..74e75b9 100644
--- a/Vpn.Service/Vpn.Service.csproj
+++ b/Vpn.Service/Vpn.Service.csproj
@@ -6,19 +6,20 @@
net8.0-windows
enable
enable
+ true
-
-
-
-
-
+
+
+
+
+
-
-
+
+
diff --git a/Vpn.Service/packages.lock.json b/Vpn.Service/packages.lock.json
new file mode 100644
index 0000000..f410885
--- /dev/null
+++ b/Vpn.Service/packages.lock.json
@@ -0,0 +1,385 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0-windows7.0": {
+ "Microsoft.Extensions.Hosting": {
+ "type": "Direct",
+ "requested": "[9.0.1, )",
+ "resolved": "9.0.1",
+ "contentHash": "3wZNcVvC8RW44HDqqmIq+BqF5pgmTQdbNdR9NyYw33JSMnJuclwoJ2PEkrJ/KvD1U/hmqHVL3l5If+Hn3D1fWA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "9.0.1",
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Configuration.Binder": "9.0.1",
+ "Microsoft.Extensions.Configuration.CommandLine": "9.0.1",
+ "Microsoft.Extensions.Configuration.EnvironmentVariables": "9.0.1",
+ "Microsoft.Extensions.Configuration.FileExtensions": "9.0.1",
+ "Microsoft.Extensions.Configuration.Json": "9.0.1",
+ "Microsoft.Extensions.Configuration.UserSecrets": "9.0.1",
+ "Microsoft.Extensions.DependencyInjection": "9.0.1",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Diagnostics": "9.0.1",
+ "Microsoft.Extensions.FileProviders.Abstractions": "9.0.1",
+ "Microsoft.Extensions.FileProviders.Physical": "9.0.1",
+ "Microsoft.Extensions.Hosting.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging": "9.0.1",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging.Configuration": "9.0.1",
+ "Microsoft.Extensions.Logging.Console": "9.0.1",
+ "Microsoft.Extensions.Logging.Debug": "9.0.1",
+ "Microsoft.Extensions.Logging.EventLog": "9.0.1",
+ "Microsoft.Extensions.Logging.EventSource": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Hosting.WindowsServices": {
+ "type": "Direct",
+ "requested": "[9.0.1, )",
+ "resolved": "9.0.1",
+ "contentHash": "FLapgOXQzPjUsbMqjjagCFCiGjroRmrmHQVK3/PEovRIvDU6nLk7KKs4PalzEHaIfqG+PySlY/BeLTyZtjcshg==",
+ "dependencies": {
+ "Microsoft.Extensions.Hosting": "9.0.1",
+ "Microsoft.Extensions.Logging.EventLog": "9.0.1",
+ "System.ServiceProcess.ServiceController": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Options.DataAnnotations": {
+ "type": "Direct",
+ "requested": "[9.0.1, )",
+ "resolved": "9.0.1",
+ "contentHash": "T16k12gDWOoi9W/oueC7knsZxm3ZjqmrQBFLXx9UH3Kv4fbehMyiOdhi5u1Vw7M4g0uMj21InBfgDE0570byEQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1"
+ }
+ },
+ "Microsoft.Security.Extensions": {
+ "type": "Direct",
+ "requested": "[1.3.0, )",
+ "resolved": "1.3.0",
+ "contentHash": "xK8WFEo5WMUE8DI8W+GjhRwpVcPrxc4DyTjfxh39+yOyhAtC5TBHDlFEJks5toNZHsUeUuiWELIX25oTWOKPBw=="
+ },
+ "Semver": {
+ "type": "Direct",
+ "requested": "[3.0.0, )",
+ "resolved": "3.0.0",
+ "contentHash": "9jZCicsVgTebqkAujRWtC9J1A5EQVlu0TVKHcgoCuv345ve5DYf4D1MjhKEnQjdRZo6x/vdv6QQrYFs7ilGzLA==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "5.0.1"
+ }
+ },
+ "Google.Protobuf": {
+ "type": "Transitive",
+ "resolved": "3.29.3",
+ "contentHash": "t7nZFFUFwigCwZ+nIXHDLweXvwIpsOXi+P7J7smPT/QjI3EKxnCzTQOhBqyEh6XEzc/pNH+bCFOOSjatrPt6Tw=="
+ },
+ "Microsoft.Extensions.Configuration": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "VuthqFS+ju6vT8W4wevdhEFiRi1trvQtkzWLonApfF5USVzzDcTBoY3F24WvN/tffLSrycArVfX1bThm/9xY2A==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Primitives": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "+4hfFIY1UjBCXFTTOd+ojlDPq6mep3h5Vq5SYE3Pjucr7dNXmq4S/6P/LoVnZFz2e/5gWp/om4svUFgznfULcA==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Binder": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "w7kAyu1Mm7eParRV6WvGNNwA8flPTub16fwH49h7b/yqJZFTgYxnOVCuiah3G2bgseJMEq4DLjjsyQRvsdzRgA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Configuration.CommandLine": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "5WC1OsXfljC1KHEyL0yefpAyt1UZjrZ0/xyOqFowc5VntbE79JpCYOTSYFlxEuXm3Oq5xsgU2YXeZLTgAAX+DA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "9.0.1",
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Configuration.EnvironmentVariables": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "5HShUdF8KFAUSzoEu0DOFbX09FlcFtHxEalowyjM7Kji0EjdF0DLjHajb2IBvoqsExAYox+Z2GfbfGF7dH7lKQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "9.0.1",
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Configuration.FileExtensions": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "QBOI8YVAyKqeshYOyxSe6co22oag431vxMu5xQe1EjXMkYE4xK4J71xLCW3/bWKmr9Aoy1VqGUARSLFnotk4Bg==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "9.0.1",
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1",
+ "Microsoft.Extensions.FileProviders.Abstractions": "9.0.1",
+ "Microsoft.Extensions.FileProviders.Physical": "9.0.1",
+ "Microsoft.Extensions.Primitives": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Json": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "z+g+lgPET1JRDjsOkFe51rkkNcnJgvOK5UIpeTfF1iAi0GkBJz5/yUuTa8a9V8HUh4gj4xFT5WGoMoXoSDKfGg==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "9.0.1",
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Configuration.FileExtensions": "9.0.1",
+ "Microsoft.Extensions.FileProviders.Abstractions": "9.0.1",
+ "System.Text.Json": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Configuration.UserSecrets": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "esGPOgLZ1tZddEomexhrU+LJ5YIsuJdkh0tU7r4WVpNZ15dLuMPqPW4Xe4txf3T2PDUX2ILe3nYQEDjZjfSEJg==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Configuration.Json": "9.0.1",
+ "Microsoft.Extensions.FileProviders.Abstractions": "9.0.1",
+ "Microsoft.Extensions.FileProviders.Physical": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "qZI42ASAe3hr2zMSA6UjM92pO1LeDq5DcwkgSowXXPY8I56M76pEKrnmsKKbxagAf39AJxkH2DY4sb72ixyOrg==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "Tr74eP0oQ3AyC24ch17N8PuEkrPbD0JqIfENCYqmgKYNOmL8wQKzLJu3ObxTUDrjnn4rHoR1qKa37/eQyHmCDA=="
+ },
+ "Microsoft.Extensions.Diagnostics": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "4ZmP6turxMFsNwK/MCko2fuIITaYYN/eXyyIRq1FjLDKnptdbn6xMb7u0zfSMzCGpzkx4RxH/g1jKN2IchG7uA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "9.0.1",
+ "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Diagnostics.Abstractions": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "pfAPuVtHvG6dvZtAa0OQbXdDqq6epnr8z0/IIUjdmV0tMeI8Aj9KxDXvdDvqr+qNHTkmA7pZpChNxwNZt4GXVg==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1",
+ "System.Diagnostics.DiagnosticSource": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Abstractions": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "DguZYt1DWL05+8QKWL3b6bW7A2pC5kYFMY5iXM6W2M23jhvcNa8v6AU8PvVJBcysxHwr9/jax0agnwoBumsSwg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Physical": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "TKDMNRS66UTMEVT38/tU9hA63UTMvzI3DyNm5mx8+JCf3BaOtxgrvWLCI1y3J52PzT5yNl/T2KN5Z0KbApLZcg==",
+ "dependencies": {
+ "Microsoft.Extensions.FileProviders.Abstractions": "9.0.1",
+ "Microsoft.Extensions.FileSystemGlobbing": "9.0.1",
+ "Microsoft.Extensions.Primitives": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.FileSystemGlobbing": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "Mxcp9NXuQMvAnudRZcgIb5SqlWrlullQzntBLTwuv0MPIJ5LqiGwbRqiyxgdk+vtCoUkplb0oXy5kAw1t469Ug=="
+ },
+ "Microsoft.Extensions.Hosting.Abstractions": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "CwSMhLNe8HLkfbFzdz0CHWJhtWH3TtfZSicLBd/itFD+NqQtfGHmvqXHQbaFFl3mQB5PBb2gxwzWQyW2pIj7PA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.1",
+ "Microsoft.Extensions.FileProviders.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "E/k5r7S44DOW+08xQPnNbO8DKAQHhkspDboTThNJ6Z3/QBb4LC6gStNWzVmy3IvW7sUD+iJKf4fj0xEkqE7vnQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "9.0.1",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "w2gUqXN/jNIuvqYwX3lbXagsizVNXYyt6LlF57+tMve4JYCEgCMMAjRce6uKcDASJgpMbErRT1PfHy2OhbkqEA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "System.Diagnostics.DiagnosticSource": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Logging.Configuration": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "MeZePlyu3/74Wk4FHYSzXijADJUhWa7gxtaphLxhS8zEPWdJuBCrPo0sezdCSZaKCL+cZLSLobrb7xt2zHOxZQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "9.0.1",
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Configuration.Binder": "9.0.1",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging": "9.0.1",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1",
+ "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Logging.Console": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "YUzguHYlWfp4upfYlpVe3dnY59P25wc+/YLJ9/NQcblT3EvAB1CObQulClll7NtnFbbx4Js0a0UfyS8SbRsWXQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging": "9.0.1",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging.Configuration": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1",
+ "System.Text.Json": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Logging.Debug": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "pzdyibIV8k4sym0Sszcp2MJCuXrpOGs9qfOvY+hCRu8k4HbdVoeKOLnacxHK6vEPITX5o5FjjsZW2zScLXTjYA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging": "9.0.1",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Logging.EventLog": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "+a4RlbwFWjsMujNNhf1Jy9Nm5CpMT+nxXxfgrkRSloPo0OAWhPSPsrFo6VWpvgIPPS41qmfAVWr3DqAmOoVZgQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging": "9.0.1",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1",
+ "System.Diagnostics.EventLog": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Logging.EventSource": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "d47ZRZUOg1dGOX+yisWScQ7w4+92OlR9beS2UXaiadUCA3RFoZzobzVgrzBX7Oo/qefx9LxdRcaeFpWKb3BNBw==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Logging": "9.0.1",
+ "Microsoft.Extensions.Logging.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1",
+ "Microsoft.Extensions.Primitives": "9.0.1",
+ "System.Text.Json": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "nggoNKnWcsBIAaOWHA+53XZWrslC7aGeok+aR+epDPRy7HI7GwMnGZE8yEsL2Onw7kMOHVHwKcsDls1INkNUJQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Primitives": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Options.ConfigurationExtensions": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "8RRKWtuU4fR+8MQLR/8CqZwZ9yc2xCpllw/WPRY7kskIqEq0hMcEI4AfUJO72yGiK2QJkrsDcUvgB5Yc+3+lyg==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Configuration.Binder": "9.0.1",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
+ "Microsoft.Extensions.Options": "9.0.1",
+ "Microsoft.Extensions.Primitives": "9.0.1"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "bHtTesA4lrSGD1ZUaMIx6frU3wyy0vYtTa/hM6gGQu5QNrydObv8T5COiGUWsisflAfmsaFOe9Xvw5NSO99z0g=="
+ },
+ "System.Diagnostics.DiagnosticSource": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "yOcDWx4P/s1I83+7gQlgQLmhny2eNcU0cfo1NBWi+en4EAI38Jau+/neT85gUW6w1s7+FUJc2qNOmmwGLIREqA=="
+ },
+ "System.Diagnostics.EventLog": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "iVnDpgYJsRaRFnk77kcLA3+913WfWDtnAKrQl9tQ5ahqKANTaJKmQdsuPWWiAPWE9pk1Kj4Pg9JGXWfFYYyakQ=="
+ },
+ "System.IO.Pipelines": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "uXf5o8eV/gtzDQY4lGROLFMWQvcViKcF8o4Q6KpIOjloAQXrnscQSu6gTxYJMHuNJnh7szIF9AzkaEq+zDLoEg=="
+ },
+ "System.ServiceProcess.ServiceController": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "Ghm4yP29P3cC65Qof8CrgU3WO/q3ERtht6/CrvcUl1FgRs6D7exj75GuG4ciRv0sjygtvyd675924DFsxxnEgA==",
+ "dependencies": {
+ "System.Diagnostics.EventLog": "9.0.1"
+ }
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "XkspqduP2t1e1x2vBUAD/xZ5ZDvmywuUwsmB93MvyQLospJfqtX0GsR/kU0vUL2h4kmvf777z3txV2W4NrQ9Qg=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "9.0.1",
+ "contentHash": "eqWHDZqYPv1PvuvoIIx5pF74plL3iEOZOl/0kQP+Y0TEbtgNnM2W6k8h8EPYs+LTJZsXuWa92n5W5sHTWvE3VA==",
+ "dependencies": {
+ "System.IO.Pipelines": "9.0.1",
+ "System.Text.Encodings.Web": "9.0.1"
+ }
+ },
+ "codersdk": {
+ "type": "Project"
+ },
+ "vpn": {
+ "type": "Project",
+ "dependencies": {
+ "System.IO.Pipelines": "[9.0.1, )",
+ "Vpn.Proto": "[1.0.0, )"
+ }
+ },
+ "vpn.proto": {
+ "type": "Project",
+ "dependencies": {
+ "Google.Protobuf": "[3.29.3, )"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Vpn/Serdes.cs b/Vpn/Serdes.cs
index 00837b7..b266f93 100644
--- a/Vpn/Serdes.cs
+++ b/Vpn/Serdes.cs
@@ -1,4 +1,4 @@
-using System.Buffers.Binary;
+using System.Buffers.Binary;
using Coder.Desktop.Vpn.Proto;
using Coder.Desktop.Vpn.Utilities;
using Google.Protobuf;
diff --git a/Vpn/Speaker.cs b/Vpn/Speaker.cs
index 899c346..f2f2f68 100644
--- a/Vpn/Speaker.cs
+++ b/Vpn/Speaker.cs
@@ -1,4 +1,4 @@
-using System.Collections.Concurrent;
+using System.Collections.Concurrent;
using System.Text;
using Coder.Desktop.Vpn.Proto;
using Coder.Desktop.Vpn.Utilities;
@@ -195,7 +195,7 @@ private async Task ReceiveLoop(CancellationToken ct = default)
while (!ct.IsCancellationRequested)
{
var message = await _serdes.ReadMessage(_conn, ct);
- if (message is { RpcField.ResponseTo : not 0 })
+ if (message is { RpcField.ResponseTo: not 0 })
{
// Look up the TaskCompletionSource for the message ID and
// complete it with the message.
diff --git a/Vpn/Vpn.csproj b/Vpn/Vpn.csproj
index 22b585f..abe75c7 100644
--- a/Vpn/Vpn.csproj
+++ b/Vpn/Vpn.csproj
@@ -5,14 +5,15 @@
net8.0
enable
enable
+ true
-
+
-
+
diff --git a/Vpn/packages.lock.json b/Vpn/packages.lock.json
new file mode 100644
index 0000000..07aef86
--- /dev/null
+++ b/Vpn/packages.lock.json
@@ -0,0 +1,24 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "System.IO.Pipelines": {
+ "type": "Direct",
+ "requested": "[9.0.1, )",
+ "resolved": "9.0.1",
+ "contentHash": "uXf5o8eV/gtzDQY4lGROLFMWQvcViKcF8o4Q6KpIOjloAQXrnscQSu6gTxYJMHuNJnh7szIF9AzkaEq+zDLoEg=="
+ },
+ "Google.Protobuf": {
+ "type": "Transitive",
+ "resolved": "3.29.3",
+ "contentHash": "t7nZFFUFwigCwZ+nIXHDLweXvwIpsOXi+P7J7smPT/QjI3EKxnCzTQOhBqyEh6XEzc/pNH+bCFOOSjatrPt6Tw=="
+ },
+ "vpn.proto": {
+ "type": "Project",
+ "dependencies": {
+ "Google.Protobuf": "[3.29.3, )"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file