Use more IpManager features
- WaitForProvisioningCallback
- setHttpProxy
- setTcpBufferSizes
Bug: 26991160
Change-Id: I5e02039a35006f0466fb40c43805f0443cd758c2
diff --git a/java/com/android/server/ethernet/EthernetNetworkFactory.java b/java/com/android/server/ethernet/EthernetNetworkFactory.java
index 3c230fb..7186863 100644
--- a/java/com/android/server/ethernet/EthernetNetworkFactory.java
+++ b/java/com/android/server/ethernet/EthernetNetworkFactory.java
@@ -33,6 +33,7 @@
import android.net.NetworkInfo.DetailedState;
import android.net.StaticIpConfiguration;
import android.net.ip.IpManager;
+import android.net.ip.IpManager.WaitForProvisioningCallback;
import android.os.Handler;
import android.os.IBinder;
import android.os.INetworkManagementService;
@@ -274,36 +275,6 @@
}
}
- private class IpManagerCallback extends IpManager.Callback {
- private LinkProperties mCallbackLinkProperties;
-
- public LinkProperties waitForProvisioning() {
- synchronized (this) {
- try {
- wait();
- } catch (InterruptedException e) {}
- return mCallbackLinkProperties;
- }
- }
-
- @Override
- public void onProvisioningSuccess(LinkProperties newLp) {
- synchronized (this) {
- mCallbackLinkProperties = newLp;
- notify();
- }
- }
-
- @Override
- public void onProvisioningFailure(LinkProperties newLp) {
- synchronized (this) {
- mCallbackLinkProperties = null;
- notify();
- }
- }
- }
-
-
/* Called by the NetworkFactory on the handler thread. */
public void onRequestNetwork() {
synchronized(EthernetNetworkFactory.this) {
@@ -332,13 +303,36 @@
linkProperties = config.getStaticIpConfiguration().toLinkProperties(mIface);
} else {
mNetworkInfo.setDetailedState(DetailedState.OBTAINING_IPADDR, null, mHwAddr);
- IpManagerCallback blockingCallback = new IpManagerCallback();
+ WaitForProvisioningCallback ipmCallback = new WaitForProvisioningCallback() {
+ @Override
+ public void onLinkPropertiesChange(LinkProperties newLp) {
+ synchronized(EthernetNetworkFactory.this) {
+ if (mNetworkAgent != null && mNetworkInfo.isConnected()) {
+ mNetworkAgent.sendLinkProperties(newLp);
+ }
+ }
+ }
+ };
+
synchronized(EthernetNetworkFactory.this) {
stopIpManagerLocked();
- mIpManager = new IpManager(mContext, mIface, blockingCallback);
+ mIpManager = new IpManager(mContext, mIface, ipmCallback);
+
+ if (config.getProxySettings() == ProxySettings.STATIC ||
+ config.getProxySettings() == ProxySettings.PAC) {
+ mIpManager.setHttpProxy(config.getHttpProxy());
+ }
+
+ final String tcpBufferSizes = mContext.getResources().getString(
+ com.android.internal.R.string.config_ethernet_tcp_buffers);
+ if (!TextUtils.isEmpty(tcpBufferSizes)) {
+ mIpManager.setTcpBufferSizes(tcpBufferSizes);
+ }
+
mIpManager.startProvisioning();
}
- linkProperties = blockingCallback.waitForProvisioning();
+
+ linkProperties = ipmCallback.waitForProvisioning();
if (linkProperties == null) {
Log.e(TAG, "IP provisioning error");
// set our score lower than any network could go
@@ -351,17 +345,6 @@
}
}
- if (config.getProxySettings() == ProxySettings.STATIC ||
- config.getProxySettings() == ProxySettings.PAC) {
- linkProperties.setHttpProxy(config.getHttpProxy());
- }
-
- final String tcpBufferSizes = mContext.getResources().getString(
- com.android.internal.R.string.config_ethernet_tcp_buffers);
- if (!TextUtils.isEmpty(tcpBufferSizes)) {
- linkProperties.setTcpBufferSizes(tcpBufferSizes);
- }
-
synchronized(EthernetNetworkFactory.this) {
if (mNetworkAgent != null) {
Log.e(TAG, "Already have a NetworkAgent - aborting new request");