| 1249 | } |
| 1250 | |
| 1251 | void Engine::setSettingsImpl(const types::EngineSettings &engineSettings) |
| 1252 | { |
| 1253 | if (engineSettings_ == engineSettings) |
| 1254 | return; |
| 1255 | |
| 1256 | bool isAllowLanTrafficChanged = engineSettings_.isAllowLanTraffic() != engineSettings.isAllowLanTraffic(); |
| 1257 | bool isUpdateChannelChanged = engineSettings_.updateChannel() != engineSettings.updateChannel(); |
| 1258 | bool isTerminateSocketsChanged = engineSettings_.isTerminateSockets() != engineSettings.isTerminateSockets(); |
| 1259 | bool isDnsPolicyChanged = engineSettings_.dnsPolicy() != engineSettings.dnsPolicy(); |
| 1260 | bool isCustomOvpnConfigsPathChanged = engineSettings_.customOvpnConfigsPath() != engineSettings.customOvpnConfigsPath(); |
| 1261 | bool isMACSpoofingChanged = engineSettings_.macAddrSpoofing() != engineSettings.macAddrSpoofing(); |
| 1262 | bool isPacketSizeChanged = engineSettings_.packetSize() != engineSettings.packetSize(); |
| 1263 | bool isDnsWhileConnectedChanged = engineSettings_.connectedDnsInfo() != engineSettings.connectedDnsInfo(); |
| 1264 | bool isDecoyTrafficSettingsChanged = engineSettings_.decoyTrafficSettings() != engineSettings.decoyTrafficSettings(); |
| 1265 | bool isFirewallSettingsChanged = engineSettings_.firewallSettings() != engineSettings.firewallSettings(); |
| 1266 | bool isServerRoutingMethodChanged = engineSettings_.serverRoutingMethod() != engineSettings.serverRoutingMethod(); |
| 1267 | bool isLanguageChanged = engineSettings_.language() != engineSettings.language(); |
| 1268 | |
| 1269 | engineSettings_ = engineSettings; |
| 1270 | engineSettings_.saveToSettings(); |
| 1271 | |
| 1272 | updateFirewallOnBoot(); |
| 1273 | |
| 1274 | #ifdef Q_OS_LINUX |
| 1275 | DnsScripts_linux::instance().setDnsManager(engineSettings.dnsManager()); |
| 1276 | #endif |
| 1277 | |
| 1278 | if (isDnsPolicyChanged) { |
| 1279 | firewallExceptions_.setDnsPolicy(engineSettings_.dnsPolicy()); |
| 1280 | if (connectStateController_->currentState() != CONNECT_STATE_CONNECTED && emergencyConnectStateController_->currentState() != CONNECT_STATE_CONNECTED) { |
| 1281 | DnsServersConfiguration::instance().setDnsServersPolicy(engineSettings_.dnsPolicy()); |
| 1282 | WSNet::instance()->dnsResolver()->setDnsServers(DnsServersConfiguration::instance().getCurrentDnsServers()); |
| 1283 | } |
| 1284 | } |
| 1285 | |
| 1286 | if (isDnsWhileConnectedChanged) { |
| 1287 | // tell connection manager about new settings (it will use them onConnect) |
| 1288 | connectionManager_->setConnectedDnsInfo(engineSettings.connectedDnsInfo()); |
| 1289 | } |
| 1290 | |
| 1291 | connectionManager_->setFirewallAlwaysOnPlusEnabled(engineSettings.firewallSettings().mode == FIREWALL_MODE_ALWAYS_ON_PLUS); |
| 1292 | |
| 1293 | if (isAllowLanTrafficChanged || isDnsPolicyChanged || isFirewallSettingsChanged) |
| 1294 | updateFirewallSettings(); |
| 1295 | |
| 1296 | if (isFirewallSettingsChanged) { |
| 1297 | // Always On+ blocks API access, so a firewall mode change can flip the effective connectivity |
| 1298 | // that wsnet sees. |
| 1299 | updateWsnetConnectivityState(); |
| 1300 | |
| 1301 | // If a login was deferred because the Always On+ firewall was blocking API access, retry it now |
| 1302 | // that the firewall settings changed and access is no longer blocked. |
| 1303 | if (tryLoginNextConnectOrDisconnect_ && !isApiAccessBlockedByAlwaysOnPlusFirewall()) { |
| 1304 | tryLoginNextConnectOrDisconnect_ = false; |
| 1305 | loginImpl(true, QString(), QString(), QString()); |
| 1306 | } |
| 1307 | } |
| 1308 |
nothing calls this directly
no test coverage detected