chore(android): prevent from calling setDns and reconnect redundantly (#4278)

Related to changes in #4263
This commit is contained in:
Gabi
2024-03-22 23:32:14 -03:00
committed by GitHub
parent 8c1500d03e
commit 703f07fed5
2 changed files with 18 additions and 2 deletions

View File

@@ -2,16 +2,30 @@
import android.net.ConnectivityManager
import android.net.LinkProperties
import android.net.Network
import android.util.Log
import com.google.gson.Gson
import dev.firezone.android.tunnel.ConnlibSession
import java.net.InetAddress
class NetworkMonitor(private val connlibSessionPtr: Long) : ConnectivityManager.NetworkCallback() {
private var lastNetwork: Network? = null
private var lastDns: List<InetAddress>? = null
override fun onLinkPropertiesChanged(
network: Network,
linkProperties: LinkProperties,
) {
ConnlibSession.setDns(connlibSessionPtr, Gson().toJson(linkProperties.dnsServers))
ConnlibSession.reconnect(connlibSessionPtr)
Log.d("NetworkMonitor", "OnLinkPropertiesChanged: $network: $linkProperties")
if (lastDns != linkProperties.dnsServers) {
lastDns = linkProperties.dnsServers
ConnlibSession.setDns(connlibSessionPtr, Gson().toJson(linkProperties.dnsServers))
}
if (lastNetwork != network) {
lastNetwork = network
ConnlibSession.reconnect(connlibSessionPtr)
}
super.onLinkPropertiesChanged(network, linkProperties)
}
}

View File

@@ -843,6 +843,7 @@ impl ClientState {
return;
}
tracing::info!("Found new system resolvers: {new_dns:?}");
self.next_system_resolver_refresh = Some(now + std::time::Duration::from_millis(500));
self.system_resolvers = new_dns;
}
@@ -923,6 +924,7 @@ impl ClientState {
}
pub(crate) fn reconnect(&mut self, now: Instant) {
tracing::info!("Network change detected, refreshing connections");
self.node.reconnect(now)
}