VPN: temporarily disable the default proxy when VPN is active.

Bug: 5361858
Change-Id: I99e84cce9c99ff1f5fdccbfd3bfb9cf496ac541c
This commit is contained in:
Chia-chi Yeh
2011-10-03 15:34:04 -07:00
parent ae16661808
commit 763a11c5bd

View File

@@ -284,6 +284,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
// track the current default http proxy - tell the world if we get a new one (real change) // track the current default http proxy - tell the world if we get a new one (real change)
private ProxyProperties mDefaultProxy = null; private ProxyProperties mDefaultProxy = null;
private Object mDefaultProxyLock = new Object();
private boolean mDefaultProxyDisabled = false;
// track the global proxy. // track the global proxy.
private ProxyProperties mGlobalProxy = null; private ProxyProperties mGlobalProxy = null;
private final Object mGlobalProxyLock = new Object(); private final Object mGlobalProxyLock = new Object();
@@ -1770,7 +1773,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
} }
} }
if (mNetConfigs[netType].isDefault()) { if (mNetConfigs[netType].isDefault()) {
handleApplyDefaultProxy(netType); handleApplyDefaultProxy(newLp.getHttpProxy());
} }
} else { } else {
if (VDBG) { if (VDBG) {
@@ -2549,8 +2552,10 @@ public class ConnectivityService extends IConnectivityManager.Stub {
return; return;
} }
public synchronized ProxyProperties getProxy() { public ProxyProperties getProxy() {
return mDefaultProxy; synchronized (mDefaultProxyLock) {
return mDefaultProxyDisabled ? null : mDefaultProxy;
}
} }
public void setGlobalProxy(ProxyProperties proxyProperties) { public void setGlobalProxy(ProxyProperties proxyProperties) {
@@ -2604,21 +2609,20 @@ public class ConnectivityService extends IConnectivityManager.Stub {
} }
} }
private void handleApplyDefaultProxy(int type) { private void handleApplyDefaultProxy(ProxyProperties proxy) {
// check if new default - push it out to all VM if so if (proxy != null && TextUtils.isEmpty(proxy.getHost())) {
ProxyProperties proxy = mNetTrackers[type].getLinkProperties().getHttpProxy(); proxy = null;
synchronized (this) { }
synchronized (mDefaultProxyLock) {
if (mDefaultProxy != null && mDefaultProxy.equals(proxy)) return; if (mDefaultProxy != null && mDefaultProxy.equals(proxy)) return;
if (mDefaultProxy == proxy) return; if (mDefaultProxy == proxy) return;
if (proxy != null && !TextUtils.isEmpty(proxy.getHost())) {
mDefaultProxy = proxy; mDefaultProxy = proxy;
} else {
mDefaultProxy = null; if (!mDefaultProxyDisabled) {
}
}
if (VDBG) log("changing default proxy to " + proxy);
sendProxyBroadcast(proxy); sendProxyBroadcast(proxy);
} }
}
}
private void handleDeprecatedGlobalHttpProxy() { private void handleDeprecatedGlobalHttpProxy() {
String proxy = Settings.Secure.getString(mContext.getContentResolver(), String proxy = Settings.Secure.getString(mContext.getContentResolver(),
@@ -2845,17 +2849,30 @@ public class ConnectivityService extends IConnectivityManager.Stub {
bumpDns(); bumpDns();
} }
// TODO: temporarily remove http proxy? // Temporarily disable the default proxy.
synchronized (mDefaultProxyLock) {
mDefaultProxyDisabled = true;
if (mDefaultProxy != null) {
sendProxyBroadcast(null);
}
}
// TODO: support proxy per network.
} }
public void restore() { public void restore() {
synchronized (mDnsLock) { synchronized (mDnsLock) {
if (!mDnsOverridden) { if (mDnsOverridden) {
return;
}
mDnsOverridden = false; mDnsOverridden = false;
}
mHandler.sendEmptyMessage(EVENT_RESTORE_DNS); mHandler.sendEmptyMessage(EVENT_RESTORE_DNS);
} }
} }
synchronized (mDefaultProxyLock) {
mDefaultProxyDisabled = false;
if (mDefaultProxy != null) {
sendProxyBroadcast(mDefaultProxy);
}
}
}
}
} }