summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lorenzo Colitti <lorenzo@google.com> 2019-01-31 13:08:24 +0900
committer Lorenzo Colitti <lorenzo@google.com> 2019-01-31 13:08:24 +0900
commite5ca11604ec6db5c704ec4114f828ed0a50e99f8 (patch)
treeda80b123d94e03229f2de675231c303039bc8eb6
parent65ceeb4db23ddacd2cbd4ebacb3e66b00af956dd (diff)
Allow use of bindProcessToNetwork only to change private DNS bypass.
Currently it is not possible to change private DNS bypass by doing: setProcessDefaultNetwork(network.getPrivateDnsBypassingCopy()); setProcessDefaultNetwork(network); because the code will ignore the change. Fix this by ensuring that we always call bindProcessToNetwork (which does not have side effects) and then only performing the expensive operations (flushing DNS cache, upating socket pools) if the netId changed. Bug: 112869080 Test: None Change-Id: I5e8999cb11d8b8c1e9eb583fa8b3932f212accff
-rw-r--r--core/java/android/net/ConnectivityManager.java17
1 files changed, 10 insertions, 7 deletions
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index 41a32a1df902..160157771b18 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -3970,13 +3970,17 @@ public class ConnectivityManager {
@Deprecated
public static boolean setProcessDefaultNetwork(@Nullable Network network) {
int netId = (network == null) ? NETID_UNSET : network.netId;
- if (netId == NetworkUtils.getBoundNetworkForProcess()) {
- return true;
- }
+ boolean isSameNetId = (netId == NetworkUtils.getBoundNetworkForProcess());
+
if (netId != NETID_UNSET) {
netId = network.getNetIdForResolv();
}
- if (NetworkUtils.bindProcessToNetwork(netId)) {
+
+ if (!NetworkUtils.bindProcessToNetwork(netId)) {
+ return false;
+ }
+
+ if (!isSameNetId) {
// Set HTTP proxy system properties to match network.
// TODO: Deprecate this static method and replace it with a non-static version.
try {
@@ -3990,10 +3994,9 @@ public class ConnectivityManager {
// Must flush socket pool as idle sockets will be bound to previous network and may
// cause subsequent fetches to be performed on old network.
NetworkEventDispatcher.getInstance().onNetworkConfigurationChanged();
- return true;
- } else {
- return false;
}
+
+ return true;
}
/**