Skip to content

Commit fb40c4c

Browse files
Merge branch 'release/1.20.3'
2 parents 98d34cd + c28cd4e commit fb40c4c

File tree

7 files changed

+93
-54
lines changed

7 files changed

+93
-54
lines changed

Setup/ProtonVPN.aip

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@
2525
<ROW Property="Manufacturer" Value="Proton Technologies AG"/>
2626
<ROW Property="MsiLogging" MultiBuildValue="DefaultBuild:vp"/>
2727
<ROW Property="PENDING_REBOOT" Value="0"/>
28-
<ROW Property="ProductCode" Value="1031:{43B895EF-2E68-43A5-AF20-6FBAFDD52E05} 1033:{43B895EF-2E68-43A5-AF20-6FBAFDD52E05} 1036:{43B895EF-2E68-43A5-AF20-6FBAFDD52E05} 1040:{43B895EF-2E68-43A5-AF20-6FBAFDD52E05} 1043:{43B895EF-2E68-43A5-AF20-6FBAFDD52E05} 1045:{43B895EF-2E68-43A5-AF20-6FBAFDD52E05} 1046:{43B895EF-2E68-43A5-AF20-6FBAFDD52E05} 1049:{43B895EF-2E68-43A5-AF20-6FBAFDD52E05} 1065:{43B895EF-2E68-43A5-AF20-6FBAFDD52E05} 2070:{43B895EF-2E68-43A5-AF20-6FBAFDD52E05} 3082:{43B895EF-2E68-43A5-AF20-6FBAFDD52E05} " Type="16"/>
28+
<ROW Property="ProductCode" Value="1031:{F9E5055B-A5F1-4E15-821C-EE35DD62A676} 1033:{F9E5055B-A5F1-4E15-821C-EE35DD62A676} 1036:{F9E5055B-A5F1-4E15-821C-EE35DD62A676} 1040:{F9E5055B-A5F1-4E15-821C-EE35DD62A676} 1043:{F9E5055B-A5F1-4E15-821C-EE35DD62A676} 1045:{F9E5055B-A5F1-4E15-821C-EE35DD62A676} 1046:{F9E5055B-A5F1-4E15-821C-EE35DD62A676} 1049:{F9E5055B-A5F1-4E15-821C-EE35DD62A676} 1065:{F9E5055B-A5F1-4E15-821C-EE35DD62A676} 2070:{F9E5055B-A5F1-4E15-821C-EE35DD62A676} 3082:{F9E5055B-A5F1-4E15-821C-EE35DD62A676} " Type="16"/>
2929
<ROW Property="ProductLanguage" Value="1033"/>
3030
<ROW Property="ProductName" Value="ProtonVPN"/>
31-
<ROW Property="ProductVersion" Value="1.20.1" Type="32"/>
31+
<ROW Property="ProductVersion" Value="1.20.3" Type="32"/>
3232
<ROW Property="REBOOT" MultiBuildValue="DefaultBuild:ReallySuppress"/>
3333
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/>
3434
<ROW Property="SelectedLanguage" Value="This will be set by custom action"/>
@@ -74,7 +74,7 @@
7474
</COMPONENT>
7575
<COMPONENT cid="caphyon.advinst.msicomp.MsiCompsComponent">
7676
<ROW Component="A7C0318B44EF690B391D753065B05" ComponentId="{8DFC0212-F989-444F-81FB-9D221A745FE8}" Directory_="APPDIR" Attributes="0" Options="2"/>
77-
<ROW Component="AI_CustomARPName" ComponentId="{3A8F1636-9E2F-4964-9BBE-C5F736CDD656}" Directory_="APPDIR" Attributes="4" KeyPath="DisplayName" Options="1"/>
77+
<ROW Component="AI_CustomARPName" ComponentId="{F9B406DA-18A1-412C-889B-24995C55CDD6}" Directory_="APPDIR" Attributes="4" KeyPath="DisplayName" Options="1"/>
7878
<ROW Component="AI_ExePath" ComponentId="{47427A21-60A2-43B4-A150-6CBA74CF4A07}" Directory_="APPDIR" Attributes="4" KeyPath="AI_ExePath"/>
7979
<ROW Component="APPDIR" ComponentId="{75DDD993-CDFE-4D39-8C1A-07484ADD1A4E}" Directory_="APPDIR" Attributes="0"/>
8080
<ROW Component="ARSoft.Tools.Net.dll" ComponentId="{05CE9A73-14A8-494D-B2D3-8438A2A16DDB}" Directory_="APPDIR" Attributes="0" KeyPath="ARSoft.Tools.Net.dll"/>

src/GlobalAssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
[assembly: AssemblyTrademark("")]
1414
[assembly: AssemblyCulture("")]
1515

16-
[assembly: AssemblyVersion("1.20.1.0")]
17-
[assembly: AssemblyFileVersion("1.20.1.0")]
16+
[assembly: AssemblyVersion("1.20.3.0")]
17+
[assembly: AssemblyFileVersion("1.20.3.0")]
1818
[assembly: ComVisible(false)]
1919
[assembly: AssemblyInformationalVersion("$AssemblyVersion")]

src/ProtonVPN.App/Modals/KillSwitchConfirmationModalViewModel.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
* along with ProtonVPN. If not, see <https://www.gnu.org/licenses/>.
1818
*/
1919

20+
using System.ComponentModel;
2021
using System.Windows.Input;
2122
using GalaSoft.MvvmLight.CommandWpf;
2223
using ProtonVPN.Core.Settings;
@@ -33,8 +34,6 @@ public KillSwitchConfirmationModalViewModel(IAppSettings appSettings)
3334
{
3435
_appSettings = appSettings;
3536

36-
IsToNotShowThisMessageAgain = _appSettings.DoNotShowKillSwitchConfirmationDialog;
37-
3837
CancelCommand = new RelayCommand(CancelAction);
3938
EnableCommand = new RelayCommand(EnableAction);
4039
}
@@ -53,6 +52,16 @@ public override void CloseAction()
5352
CancelAction();
5453
}
5554

55+
public override void OnAppSettingsChanged(PropertyChangedEventArgs e)
56+
{
57+
base.OnAppSettingsChanged(e);
58+
59+
if (e.PropertyName == nameof(IAppSettings.DoNotShowKillSwitchConfirmationDialog))
60+
{
61+
IsToNotShowThisMessageAgain = _appSettings.DoNotShowKillSwitchConfirmationDialog;
62+
}
63+
}
64+
5665
private void CancelAction()
5766
{
5867
_isToNotShowThisMessageAgain = false;

src/ProtonVPN.InstallActions/dllmain.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ extern "C" EXPORT long RemoveWfpObjects(MSIHANDLE hInstall)
4848
SetMsiHandle(hInstall);
4949

5050
IPFilterSessionHandle h = nullptr;
51-
UINT status = IPFilterCreateDynamicSession(&h);
51+
UINT status = IPFilterCreateSession(&h);
5252
if (status != NO_ERROR)
5353
{
5454
return status;

src/ProtonVPN.Service/Firewall/Firewall.cs

Lines changed: 50 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,13 @@ private void ApplyChange(FirewallParams firewallParams)
144144

145145
if (firewallParams.SessionType != _lastParams.SessionType)
146146
{
147-
_serverAddressFilters.Clear();
148-
List<Guid> previousGuids = GetFirewallGuidsByType(FirewallItemType.VariableFilter);
147+
List<Guid> previousVariableFilters = GetFirewallGuidsByType(FirewallItemType.VariableFilter);
148+
List<Guid> previousInterfaceFilters = GetFirewallGuidsByType(FirewallItemType.PermitInterfaceFilter);
149+
149150
ApplyFilters(firewallParams);
150-
RemoveItems(previousGuids, _lastParams.SessionType);
151+
152+
RemoveItems(previousVariableFilters, _lastParams.SessionType);
153+
RemoveItems(previousInterfaceFilters, _lastParams.SessionType);
151154
}
152155

153156
if (firewallParams.InterfaceIndex != _lastParams.InterfaceIndex)
@@ -322,68 +325,90 @@ private void PermitDhcp(uint weight, FirewallParams firewallParams)
322325

323326
private void PermitFromNetworkInterface(uint weight, FirewallParams firewallParams)
324327
{
328+
//Create the following filters dynamically on permanent or dynamic sublayer,
329+
//but prevent keeping them after reboot, as interface index might be changed.
325330
_ipLayer.ApplyToIpv4(layer =>
326331
{
327-
Guid guid = _ipFilter.DynamicSublayer.CreateNetInterfaceFilter(
332+
Guid guid = _ipFilter.GetSublayer(firewallParams.SessionType).CreateNetInterfaceFilter(
328333
new DisplayData("ProtonVPN permit VPN tunnel", "Permit TAP adapter traffic"),
329-
Action.HardPermit,
334+
Action.SoftPermit,
330335
layer,
331336
firewallParams.InterfaceIndex,
332-
weight);
337+
weight,
338+
persistent: false);
333339
_firewallItems.Add(new FirewallItem(FirewallItemType.PermitInterfaceFilter, guid));
334340
});
335341

336342
_ipLayer.ApplyToIpv6(layer =>
337343
{
338-
Guid guid = _ipFilter.DynamicSublayer.CreateNetInterfaceFilter(
344+
Guid guid = _ipFilter.GetSublayer(firewallParams.SessionType).CreateNetInterfaceFilter(
339345
new DisplayData("ProtonVPN permit VPN tunnel", "Permit TAP adapter traffic"),
340-
Action.HardPermit,
346+
Action.SoftPermit,
341347
layer,
342348
firewallParams.InterfaceIndex,
343-
weight);
349+
weight,
350+
persistent: false);
344351
_firewallItems.Add(new FirewallItem(FirewallItemType.PermitInterfaceFilter, guid));
345352
});
346353
}
347354

348-
private void PermitOpenVpnServerAddress(FirewallParams firewallParams, SessionType? sessionType = null)
355+
private void PermitOpenVpnServerAddress(FirewallParams firewallParams)
349356
{
350357
if (string.IsNullOrEmpty(firewallParams.ServerIp))
351358
{
352359
return;
353360
}
354361

355-
(string ip, List<Guid> guids) = _serverAddressFilters.FirstOrDefault();
356-
if (ip != null && ip == firewallParams.ServerIp)
357-
{
358-
_serverAddressFilters.RemoveAt(0);
359-
_serverAddressFilters.Add((ip, guids));
360-
return;
361-
}
362+
ReorderServerPermitFilters(firewallParams.ServerIp);
362363

363364
var filterGuids = new List<Guid>();
364365

365366
_ipLayer.ApplyToIpv4(layer =>
366367
{
367-
filterGuids.Add(_ipFilter.DynamicSublayer.CreateRemoteIPv4Filter(
368+
filterGuids.Add(_ipFilter.GetSublayer(firewallParams.SessionType).CreateRemoteIPv4Filter(
368369
new DisplayData("ProtonVPN permit OpenVPN server", "Permit server ip"),
369370
Action.HardPermit,
370371
layer,
371372
1,
372-
firewallParams.ServerIp));
373+
firewallParams.ServerIp,
374+
persistent: false));
373375
});
374376

375377
_serverAddressFilters.Add((firewallParams.ServerIp, filterGuids));
376378

377-
DeletePreviousFilters(sessionType);
379+
DeletePreviousServerPermitFilters();
378380
}
379381

380-
private void DeletePreviousFilters(SessionType? sessionType = null)
382+
private void ReorderServerPermitFilters(string serverIp)
381383
{
382-
if (sessionType == null)
384+
if (_serverAddressFilters.Count == 0)
383385
{
384386
return;
385387
}
386388

389+
int index = 0;
390+
(string, List<Guid>)? item = null;
391+
392+
foreach ((string, List<Guid>) filter in _serverAddressFilters)
393+
{
394+
if (filter.Item1 == serverIp)
395+
{
396+
item = filter;
397+
break;
398+
}
399+
400+
index++;
401+
}
402+
403+
if (item != null)
404+
{
405+
_serverAddressFilters.RemoveAt(index);
406+
_serverAddressFilters.Add(item.Value);
407+
}
408+
}
409+
410+
private void DeletePreviousServerPermitFilters()
411+
{
387412
if (_serverAddressFilters.Count >= 3)
388413
{
389414
(string oldAddress, List<Guid> guids) = _serverAddressFilters.FirstOrDefault();
@@ -392,7 +417,9 @@ private void DeletePreviousFilters(SessionType? sessionType = null)
392417
return;
393418
}
394419

395-
DeleteIpFilters(guids, sessionType.Value);
420+
//Use permanent session here to be able to remove filters created
421+
//on both dynamic and permanent sublayers.
422+
DeleteIpFilters(guids, SessionType.Permanent);
396423
_serverAddressFilters.RemoveAll(tuple => tuple.Item1 == oldAddress);
397424
}
398425
}

src/ProtonVPN.Service/Vpn/NetworkSettings.cs

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020 Proton Technologies AG
2+
* Copyright (c) 2021 Proton Technologies AG
33
*
44
* This file is part of ProtonVPN.
55
*
@@ -35,25 +35,39 @@ public NetworkSettings(ILogger logger, ICurrentNetworkInterface currentNetworkIn
3535
_currentNetworkInterface = currentNetworkInterface;
3636
}
3737

38-
public bool ApplyNetworkSettings()
38+
public bool IsNetworkAdapterAvailable()
39+
{
40+
return _currentNetworkInterface.Index != 0;
41+
}
42+
43+
public void OnVpnDisconnected(VpnState state)
44+
{
45+
RestoreNetworkSettings();
46+
}
47+
48+
public void OnVpnConnected(VpnState state)
49+
{
50+
}
51+
52+
public void OnVpnConnecting(VpnState state)
53+
{
54+
ApplyNetworkSettings();
55+
}
56+
57+
private void ApplyNetworkSettings()
3958
{
4059
uint interfaceIndex = _currentNetworkInterface.Index;
41-
if (interfaceIndex == 0)
42-
{
43-
return false;
44-
}
4560

4661
try
4762
{
63+
_logger.Info("Setting interface metric...");
4864
NetworkUtil.SetLowestTapMetric(interfaceIndex);
65+
_logger.Info("Interface metric set.");
4966
}
5067
catch (NetworkUtilException e)
5168
{
5269
_logger.Error("Failed to apply network settings. Error code: " + e.Code);
53-
return false;
5470
}
55-
56-
return true;
5771
}
5872

5973
private void RestoreNetworkSettings()
@@ -66,25 +80,14 @@ private void RestoreNetworkSettings()
6680

6781
try
6882
{
83+
_logger.Info("Restoring interface metric...");
6984
NetworkUtil.RestoreDefaultTapMetric(interfaceIndex);
85+
_logger.Info("Interface metric restored.");
7086
}
7187
catch (NetworkUtilException e)
7288
{
7389
_logger.Error("Failed restore network settings. Error code: " + e.Code);
7490
}
7591
}
76-
77-
public void OnVpnDisconnected(VpnState state)
78-
{
79-
RestoreNetworkSettings();
80-
}
81-
82-
public void OnVpnConnected(VpnState state)
83-
{
84-
}
85-
86-
public void OnVpnConnecting(VpnState state)
87-
{
88-
}
8992
}
9093
}

src/ProtonVPN.Service/VpnConnectionHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public Task Connect(VpnConnectionRequestContract connectionRequest)
8585
VpnCredentials credentials = Map(connectionRequest.Credentials);
8686
VpnConfig config = Map(connectionRequest.VpnConfig);
8787

88-
if (_networkSettings.ApplyNetworkSettings())
88+
if (_networkSettings.IsNetworkAdapterAvailable())
8989
{
9090
_vpnConnection.Connect(
9191
endpoints,

0 commit comments

Comments
 (0)