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
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