Skip to content

Commit e3e6222

Browse files
committed
Deliver block untunneled traffic prefs to tunnel service
1 parent 4f49677 commit e3e6222

20 files changed

Lines changed: 152 additions & 105 deletions

browser/brave_vpn/win/brave_vpn_wireguard_service/service/brave_wireguard_manager.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ HRESULT BraveWireguardManager::EnableVpn(const BSTR public_key,
2020
const BSTR private_key,
2121
const BSTR address,
2222
const BSTR endpoint,
23+
BOOL block_untunneled_traffic,
2324
DWORD* last_error) {
2425
// if all params are empty, reconnect using last known good config.
2526
// browser/brave_vpn/win/brave_vpn_wireguard_service/service/wireguard_tunnel_service.cc
@@ -81,7 +82,8 @@ HRESULT BraveWireguardManager::EnableVpn(const BSTR public_key,
8182

8283
auto config = brave_vpn::wireguard::CreateWireguardConfig(
8384
validated_private_key.value(), validated_public_key.value(),
84-
validated_endpoint.value(), validated_address.value());
85+
validated_endpoint.value(), validated_address.value(),
86+
block_untunneled_traffic);
8587
if (!config.has_value()) {
8688
VLOG(1) << __func__ << " : failed to get correct credentials";
8789
return E_INVALIDARG;

browser/brave_vpn/win/brave_vpn_wireguard_service/service/brave_wireguard_manager.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class BraveWireguardManager
2828
BSTR private_key,
2929
BSTR address,
3030
BSTR endpoint,
31+
BOOL block_untunneled_traffic,
3132
DWORD* last_error) override;
3233
IFACEMETHODIMP DisableVpn(DWORD* last_error) override;
3334

browser/brave_vpn/win/brave_vpn_wireguard_service/status_tray/status_tray_runner.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ void StatusTrayRunner::ConnectVPN() {
121121
// passing empty params will reconnect using last known good config.
122122
// TODO(https://github.com/brave/brave-browser/issues/47115): fetch
123123
// actual server details. See issue for more info.
124-
"", "", "", "", std::nullopt,
124+
"", "", "", "", false, std::nullopt,
125125
base::BindOnce(&StatusTrayRunner::OnConnected,
126126
weak_factory_.GetWeakPtr()));
127127
} else {

browser/brave_vpn/win/wireguard_connection_api_impl_win.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "base/memory/scoped_refptr.h"
1515
#include "brave/browser/brave_vpn/win/service_details.h"
1616
#include "brave/browser/brave_vpn/win/wireguard_utils_win.h"
17+
#include "brave/components/brave_vpn/browser/connection/brave_vpn_connection_manager.h"
1718
#include "brave/components/brave_vpn/common/brave_vpn_constants.h"
1819
#include "brave/components/brave_vpn/common/win/utils.h"
1920
#include "services/network/public/cpp/shared_url_loader_factory.h"
@@ -65,7 +66,7 @@ void WireguardConnectionAPIImplWin::PlatformConnectImpl(
6566
brave_vpn::wireguard::EnableBraveVpnWireguardService(
6667
credentials.server_public_key, credentials.client_private_key,
6768
credentials.mapped_ip4_address, vpn_server_hostname,
68-
std::move(smart_proxy_url),
69+
manager_->ShouldBlockUntunneledTraffic(), std::move(smart_proxy_url),
6970
base::BindOnce(&WireguardConnectionAPIImplWin::OnWireguardServiceLaunched,
7071
weak_factory_.GetWeakPtr()));
7172
}

browser/brave_vpn/win/wireguard_utils_win.cc

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -149,11 +149,11 @@ bool IsBraveVPNWireguardTunnelServiceRunning() {
149149
status.value() == SERVICE_START_PENDING;
150150
}
151151

152-
bool EnableBraveVpnWireguardServiceImpl(
153-
const std::string& server_public_key,
154-
const std::string& client_private_key,
155-
const std::string& mapped_ip4_address,
156-
const std::string& vpn_server_hostname) {
152+
bool EnableBraveVpnWireguardServiceImpl(const std::string& server_public_key,
153+
const std::string& client_private_key,
154+
const std::string& mapped_ip4_address,
155+
const std::string& vpn_server_hostname,
156+
const bool block_untunneled_traffic) {
157157
base::win::AssertComInitialized();
158158
MaybeEnableSystemProxy();
159159

@@ -184,10 +184,10 @@ bool EnableBraveVpnWireguardServiceImpl(
184184
base::UTF8ToWide(vpn_server_hostname));
185185

186186
DWORD last_error = ERROR_SUCCESS;
187-
HRESULT res = service->EnableVpn(server_public_key_data.Get(),
188-
client_private_key_data.Get(),
189-
mapped_ip4_address_data.Get(),
190-
vpn_server_hostname_data.Get(), &last_error);
187+
HRESULT res = service->EnableVpn(
188+
server_public_key_data.Get(), client_private_key_data.Get(),
189+
mapped_ip4_address_data.Get(), vpn_server_hostname_data.Get(),
190+
block_untunneled_traffic, &last_error);
191191

192192
if (!SUCCEEDED(res)) {
193193
VLOG(1) << "Failure calling EnableVpn. Result: "
@@ -203,6 +203,7 @@ void EnableBraveVpnWireguardService(const std::string& server_public_key,
203203
const std::string& client_private_key,
204204
const std::string& mapped_ip4_address,
205205
const std::string& vpn_server_hostname,
206+
const bool block_untunneled_traffic,
206207
std::optional<std::string> smart_proxy_url,
207208
wireguard::BooleanCallback callback) {
208209
// If all params are empty this is a reconnect (using last known good config).
@@ -226,7 +227,7 @@ void EnableBraveVpnWireguardService(const std::string& server_public_key,
226227
FROM_HERE,
227228
base::BindOnce(&EnableBraveVpnWireguardServiceImpl, server_public_key,
228229
client_private_key, mapped_ip4_address,
229-
vpn_server_hostname),
230+
vpn_server_hostname, block_untunneled_traffic),
230231
std::move(callback));
231232
}
232233

browser/brave_vpn/win/wireguard_utils_win.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ void EnableBraveVpnWireguardService(const std::string& server_public_key,
2323
const std::string& client_private_key,
2424
const std::string& mapped_ip4_address,
2525
const std::string& vpn_server_hostname,
26+
const bool block_untunneled_traffic,
2627
std::optional<std::string> smart_proxy_url,
2728
BooleanCallback callback);
2829
void DisableBraveVpnWireguardService(BooleanCallback callback);

components/brave_vpn/browser/connection/brave_vpn_connection_manager.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,16 @@ void BraveVPNConnectionManager::SetSelectedRegion(const std::string& name) {
178178
}
179179
}
180180

181+
bool BraveVPNConnectionManager::ShouldBlockUntunneledTraffic() {
182+
#if BUILDFLAG(ENABLE_BRAVE_VPN_WIREGUARD)
183+
return local_prefs_->GetBoolean(
184+
prefs::kBraveVPNWireguardBlockUntunneledTraffic) &&
185+
local_prefs_->GetBoolean(prefs::kBraveVPNWireguardEnabled);
186+
#else
187+
NOTREACHED();
188+
#endif
189+
}
190+
181191
std::string BraveVPNConnectionManager::GetHostname() const {
182192
if (connection_api_impl_) {
183193
return connection_api_impl_->GetHostname();

components/brave_vpn/browser/connection/brave_vpn_connection_manager.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ class BraveVPNConnectionManager {
8282
void CheckConnection();
8383

8484
void SetSelectedRegion(const std::string& name);
85+
bool ShouldBlockUntunneledTraffic();
8586

8687
// Returns user friendly error string if existed.
8788
// Otherwise returns empty.

components/brave_vpn/common/wireguard/win/brave_wireguard_manager_idl.idl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ interface IBraveVpnWireguardManager : IUnknown
1414
[in] BSTR private_key,
1515
[in] BSTR address,
1616
[in] BSTR endpoint,
17+
[in] BOOL block_untunneled_traffic,
1718
[out] DWORD* last_error);
1819

1920
HRESULT DisableVpn([out] DWORD* last_error);

components/brave_vpn/common/wireguard/wireguard_utils.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ std::optional<std::string> CreateWireguardConfig(
6060
const std::string& client_private_key,
6161
const std::string& server_public_key,
6262
const std::string& vpn_server_hostname,
63-
const std::string& mapped_ipv4_address) {
63+
const std::string& mapped_ipv4_address,
64+
const bool block_untunneled_traffic) {
6465
if (client_private_key.empty() || server_public_key.empty() ||
6566
vpn_server_hostname.empty() || mapped_ipv4_address.empty()) {
6667
return std::nullopt;

0 commit comments

Comments
 (0)