public void EnableIncludeMode(IEnumerable <string> apps, IPAddress internetLocalIp, IPAddress vpnLocalIp) { Create(); _ipFilter.Session.StartTransaction(); try { var callout = _ipFilter.CreateCallout( new DisplayData { Name = "ProtonVPN Split Tunnel callout", Description = "Redirects network connections", }, WfpCalloutKey, Layer.AppConnectRedirectV4 ); var providerContext = _ipFilter.CreateProviderContext( new DisplayData { Name = "ProtonVPN Split Tunnel redirect context", Description = "Instructs the callout driver where to redirect network connections", }, new ConnectRedirectData(internetLocalIp)); _subLayer.CreateLayerCalloutFilter( new DisplayData { Name = "ProtonVPN Split Tunnel redirect", Description = "Redirects network connections" }, Layer.AppConnectRedirectV4, 14, callout, providerContext); providerContext = _ipFilter.CreateProviderContext( new DisplayData { Name = "ProtonVPN Split Tunnel redirect context", Description = "Instructs the callout driver where to redirect network connections", }, new ConnectRedirectData(vpnLocalIp)); CreateAppFilters(apps, callout, providerContext); _ipFilter.Session.CommitTransaction(); } catch { _ipFilter.Session.AbortTransaction(); throw; } }
public void EnableIncludeMode(string[] apps, string[] ips, IPAddress internetLocalIp, IPAddress vpnLocalIp) { Create(); _ipFilter.Session.StartTransaction(); try { var connectRedirectCallout = CreateConnectRedirectCallout(); var redirectUDPCallout = CreateUDPRedirectCallout(); var providerContext = _ipFilter.CreateProviderContext( new DisplayData { Name = "Time4VPS VPN Split Tunnel redirect context", Description = "Instructs the callout driver where to redirect network connections", }, new ConnectRedirectData(internetLocalIp)); _subLayer.CreateLayerCalloutFilter( new DisplayData { Name = "Time4VPS VPN Split Tunnel redirect", Description = "Redirects network connections" }, Layer.AppConnectRedirectV4, 14, connectRedirectCallout, providerContext); _subLayer.CreateLayerCalloutFilter( new DisplayData { Name = "Time4VPS VPN Split Tunnel redirect", Description = "Redirects network connections" }, Layer.BindRedirectV4, 14, redirectUDPCallout, providerContext); providerContext = _ipFilter.CreateProviderContext( new DisplayData { Name = "Time4VPS VPN Split Tunnel redirect context", Description = "Instructs the callout driver where to redirect network connections", }, new ConnectRedirectData(vpnLocalIp)); CreateAppFilters(apps, connectRedirectCallout, Layer.AppConnectRedirectV4, providerContext); CreateIPFilters(ips, connectRedirectCallout, Layer.AppConnectRedirectV4, providerContext); CreateAppFilters(apps, redirectUDPCallout, Layer.BindRedirectV4, providerContext); _ipFilter.Session.CommitTransaction(); } catch { _ipFilter.Session.AbortTransaction(); throw; } }