From 5774ef5328b4db040a582af6533eebc420b33df5 Mon Sep 17 00:00:00 2001 From: Erik Kline Date: Mon, 22 Feb 2016 11:11:38 +0900 Subject: [PATCH] Use more IpManager features - WaitForProvisioningCallback - setHttpProxy - setTcpBufferSizes Bug: 26991160 Change-Id: I5e02039a35006f0466fb40c43805f0443cd758c2 --- .../ethernet/EthernetNetworkFactory.java | 71 +++++++------------ 1 file changed, 27 insertions(+), 44 deletions(-) diff --git a/service-t/src/com/android/server/ethernet/EthernetNetworkFactory.java b/service-t/src/com/android/server/ethernet/EthernetNetworkFactory.java index 3c230fb38a..718686344d 100644 --- a/service-t/src/com/android/server/ethernet/EthernetNetworkFactory.java +++ b/service-t/src/com/android/server/ethernet/EthernetNetworkFactory.java @@ -33,6 +33,7 @@ import android.net.NetworkInfo; 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 @@ class EthernetNetworkFactory { } } - 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 @@ class EthernetNetworkFactory { 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 @@ class EthernetNetworkFactory { } } - 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");