diff options
author | kejun.zhou <kejun.zhou@linaro.org> | 2012-09-04 16:59:28 +0800 |
---|---|---|
committer | kejun.zhou <kejun.zhou@linaro.org> | 2012-09-04 18:42:07 +0800 |
commit | ec3c51bd260bee9342a4a1a9543e2e5304cd2977 (patch) | |
tree | 7872dba06cf6fac9a41bcb63c95a914547b265c7 | |
parent | 67e71a6da70e346d2174b7a905eafcd80df3e8e4 (diff) | |
download | base-ec3c51bd260bee9342a4a1a9543e2e5304cd2977.tar.gz |
For bug #1042239 ECM doesn't work on Android Jelly Bean
Change-Id: I507059dc843c5d505c44907f003c158002bb2129
Signed-off-by: kejun.zhou <kejun.zhou@linaro.org>
3 files changed, 112 insertions, 139 deletions
diff --git a/ethernet/java/android/net/ethernet/EthernetMonitor.java b/ethernet/java/android/net/ethernet/EthernetMonitor.java index a5c7d6297d8a..ec577df85aa3 100644 --- a/ethernet/java/android/net/ethernet/EthernetMonitor.java +++ b/ethernet/java/android/net/ethernet/EthernetMonitor.java @@ -42,7 +42,7 @@ public class EthernetMonitor { private static final int RM_ADDR = 21; private static final int NEW_LINK = 16; private static final int DEL_LINK = 17; - private static final boolean localLOGV = false; + private static final boolean localLOGV = true; private EthernetStateTracker mEthernetStateTracker; diff --git a/ethernet/java/android/net/ethernet/EthernetStateMachine.java b/ethernet/java/android/net/ethernet/EthernetStateMachine.java index da6370e9fd8f..3a13de05d656 100644 --- a/ethernet/java/android/net/ethernet/EthernetStateMachine.java +++ b/ethernet/java/android/net/ethernet/EthernetStateMachine.java @@ -91,7 +91,6 @@ public class EthernetStateMachine extends StateMachine { private ConnectivityManager mCm; private DhcpHandler mDhcpTarget; - private Handler mTrackerTarget; private String mInterfaceName; private LinkCapabilities mLinkCapabilities; @@ -252,7 +251,8 @@ public class EthernetStateMachine extends StateMachine { "dhcp." + mInterfaceName + ".dns2" }; - mDhcpTarget.sendEmptyMessage(EVENT_DHCP_START); + if (mDhcpTarget != null) + mDhcpTarget.sendEmptyMessage(EVENT_DHCP_START); } else { int event; sDnsPropNames = new String[] { @@ -328,7 +328,8 @@ public class EthernetStateMachine extends StateMachine { synchronized (mDhcpTarget) { mInterfaceStopped = true; Slog.i(TAG, "stop dhcp and interface"); - mDhcpTarget.removeMessages(EVENT_DHCP_START); + if (mDhcpTarget != null) + mDhcpTarget.removeMessages(EVENT_DHCP_START); String ifname = info.getIfName(); if (!NetworkUtils.stopDhcp(ifname)) { @@ -365,10 +366,31 @@ public class EthernetStateMachine extends StateMachine { } } - public void handleMessage(Message msg) { + private class DhcpHandler extends Handler { + public DhcpHandler(Looper looper) { + super(looper); + } + public void handleMessage(Message msg) { synchronized (this) { switch (msg.what) { + case EVENT_DHCP_START: + int event; + if (!mInterfaceStopped) { + if (localLOGV) Slog.d(TAG, "DhcpHandler: DHCP request started"); + + if (NetworkUtils.runDhcp(mInterfaceName, mDhcpInfoInternal)) { + event = EVENT_INTERFACE_CONFIGURATION_SUCCEEDED; + if (localLOGV) Slog.d(TAG, "DhcpHandler: DHCP request succeeded: " + mDhcpInfoInternal.toString()); + } else { + event = EVENT_INTERFACE_CONFIGURATION_FAILED; + Slog.e(TAG, "DhcpHandler: DHCP request failed: " + NetworkUtils.getDhcpError()); + } + } else { + mInterfaceStopped = false; + } + mStartingDhcp = false; + break; case EVENT_INTERFACE_CONFIGURATION_SUCCEEDED: if (localLOGV) Slog.i(TAG, "received configured succeeded, stack=" + mStackConnected + " HW=" + mHWConnected); mStackConnected = true; @@ -410,38 +432,6 @@ public class EthernetStateMachine extends StateMachine { } } } - - private class DhcpHandler extends Handler { - public DhcpHandler(Looper looper) { - super(looper); - } - - public void handleMessage(Message msg) { - int event; - - switch (msg.what) { - case EVENT_DHCP_START: - synchronized (mDhcpTarget) { - if (!mInterfaceStopped) { - Slog.d(TAG, "DhcpHandler: DHCP request started"); - DhcpInfoInternal dhcpInfoInternal = new DhcpInfoInternal(); - if (NetworkUtils.runDhcp(mInterfaceName, dhcpInfoInternal)) { - SystemProperties.set("net.dns1", dhcpInfoInternal.dns1); - event = EVENT_INTERFACE_CONFIGURATION_SUCCEEDED; - Slog.d(TAG, "DhcpHandler: DHCP request succeeded: " + dhcpInfoInternal.toString()); - } else { - event = EVENT_INTERFACE_CONFIGURATION_FAILED; - Slog.e(TAG, "DhcpHandler: DHCP request failed: " + NetworkUtils.getDhcpError()); - } - // sendMessage(event); - } else { - mInterfaceStopped = false; - } - mStartingDhcp = false; - } - break; - } - } } static LinkProperties getLinkProperties() { diff --git a/ethernet/java/android/net/ethernet/EthernetStateTracker.java b/ethernet/java/android/net/ethernet/EthernetStateTracker.java index afcb119eb7bc..8f17fda8fd6f 100644 --- a/ethernet/java/android/net/ethernet/EthernetStateTracker.java +++ b/ethernet/java/android/net/ethernet/EthernetStateTracker.java @@ -97,7 +97,6 @@ public class EthernetStateTracker implements NetworkStateTracker { private NotificationManager mNotificationManager; private Notification mNotification; - private Handler mTrackerTarget; public static EthernetStateTracker sInstance; /* For sending events to connectivity service handler */ @@ -115,7 +114,7 @@ public class EthernetStateTracker implements NetworkStateTracker { if (localLOGV) Slog.v(TAG,"Successed"); HandlerThread dhcpThread = new HandlerThread("DHCP Handler Thread"); dhcpThread.start(); -// mDhcpTarget = new DhcpHandler(dhcpThread.getLooper(), this); + mDhcpTarget = new DhcpHandler(dhcpThread.getLooper()); mMonitor = new EthernetMonitor(this); mNetworkInfo = new NetworkInfo(netType, 0, networkName, ""); @@ -157,6 +156,7 @@ public class EthernetStateTracker implements NetworkStateTracker { } IntentFilter filter = new IntentFilter(); filter.addAction(EthernetManager.NETWORK_STATE_CHANGED_ACTION); + mMonitor.startMonitoring(); } /** @@ -170,16 +170,6 @@ public class EthernetStateTracker implements NetworkStateTracker { } /** - * Re-enable connectivity to a network after a {@link #teardown()}. - */ - public boolean reconnect() { - mTeardownRequested.set(false); - mEthernetManager.startEthernet(); - return true; - } - - - /** * Stop etherent interface * @param suspend {@code false} disable the interface {@code true} only reset the connection without disable the interface * @return true @@ -188,7 +178,7 @@ public class EthernetStateTracker implements NetworkStateTracker { if (mEthernetManager != null) { EthernetDevInfo info = mEthernetManager.getSavedConfig(); if (info != null && mEthernetManager.isConfigured()) { -/* synchronized (mDhcpTarget) { + synchronized (mDhcpTarget) { mInterfaceStopped = true; if (localLOGV) Slog.i(TAG, "stop dhcp and interface"); mDhcpTarget.removeMessages(EVENT_DHCP_START); @@ -201,7 +191,7 @@ public class EthernetStateTracker implements NetworkStateTracker { if (!suspend) NetworkUtils.disableInterface(ifname); } -*/ + } } return true; @@ -265,7 +255,8 @@ public class EthernetStateTracker implements NetworkStateTracker { event = EVENT_INTERFACE_CONFIGURATION_FAILED; if (localLOGV) Slog.w(TAG, "Static IP configuration failed"); } -// this.sendEmptyMessage(event); + if (mDhcpTarget != null) + mDhcpTarget.sendEmptyMessage(event); } return true; } @@ -287,9 +278,9 @@ public class EthernetStateTracker implements NetworkStateTracker { if (localLOGV) Slog.i(TAG, "reset device " + mInterfaceName); NetworkUtils.resetConnections(mInterfaceName, NetworkUtils.RESET_ALL_ADDRESSES); // Stop DHCP -// if (mDhcpTarget != null) { -// mDhcpTarget.removeMessages(EVENT_DHCP_START); -// } + if (mDhcpTarget != null) { + mDhcpTarget.removeMessages(EVENT_DHCP_START); + } if (!NetworkUtils.stopDhcp(mInterfaceName)) { if (localLOGV) Slog.w(TAG, "Could not stop DHCP"); } @@ -319,7 +310,7 @@ public class EthernetStateTracker implements NetworkStateTracker { Slog.w(TAG, "ignoring setPolicyDataEnable(" + enabled + ")"); } -/* @Override + @Override public boolean reconnect() { try { synchronized (this) { @@ -340,17 +331,12 @@ public class EthernetStateTracker implements NetworkStateTracker { return false; } -*/ + // @Override public boolean setRadio(boolean turnOn) { return false; } -/* - public boolean teardown() { - return (mEthernetManager != null) ? stopInterface(false) : false; - } -*/ private void postNotification(int event) { String ns = Context.NOTIFICATION_SERVICE; Intent intent = new Intent(EthernetManager.ETHERNET_STATE_CHANGED_ACTION); @@ -373,99 +359,96 @@ public class EthernetStateTracker implements NetworkStateTracker { } } - public void handleMessage(Message msg) { - - synchronized (this) { - switch (msg.what) { - case EVENT_INTERFACE_CONFIGURATION_SUCCEEDED: - if (localLOGV) Slog.i(TAG, "received configured succeeded, stack=" + mStackConnected + " HW=" + mHWConnected); - mStackConnected = true; - if (mHWConnected) - setState(true, msg.what); - break; - case EVENT_INTERFACE_CONFIGURATION_FAILED: - mStackConnected = false; - //start to retry ? - break; - case EVENT_HW_CONNECTED: - if (localLOGV) Slog.i(TAG, "received HW connected, stack=" + mStackConnected + " HW=" + mHWConnected); - mHWConnected = true; - if (mStackConnected) - setState(true, msg.what); - break; - case EVENT_HW_DISCONNECTED: - if (localLOGV) Slog.i(TAG, "received disconnected events, stack=" + mStackConnected + " HW=" + mHWConnected); - setState(mHWConnected = false, msg.what); - break; - case EVENT_HW_PHYCONNECTED: - if (localLOGV) Slog.i(TAG, "interface up event, kick off connection request"); - if (!mStartingDhcp) { - int state = mEthernetManager.getState(); - if (state != mEthernetManager.ETHERNET_STATE_DISABLED) { - EthernetDevInfo info = mEthernetManager.getSavedConfig(); - if (info != null && mEthernetManager.isConfigured()) { - try { - configureInterface(info); - } catch (UnknownHostException e) { - // TODO Auto-generated catch block - //e.printStackTrace(); - Slog.e(TAG, "Cannot configure interface"); + private class DhcpHandler extends Handler { + public DhcpHandler(Looper looper) { + super(looper); + } + + public void handleMessage(Message msg) { + + synchronized (this) { + switch (msg.what) { + case EVENT_DHCP_START: + int event; + if (!mInterfaceStopped) { + if (localLOGV) Slog.d(TAG, "DhcpHandler: DHCP request started"); + DhcpInfoInternal dhcpInfoInternal = new DhcpInfoInternal(); + if (NetworkUtils.runDhcp(mInterfaceName, dhcpInfoInternal)) { + event = EVENT_INTERFACE_CONFIGURATION_SUCCEEDED; + if (localLOGV) Slog.d(TAG, "DhcpHandler: DHCP request succeeded: " + dhcpInfoInternal.toString()); + } else { + event = EVENT_INTERFACE_CONFIGURATION_FAILED; + Slog.e(TAG, "DhcpHandler: DHCP request failed: " + NetworkUtils.getDhcpError()); + } + } else { + mInterfaceStopped = false; + } + mStartingDhcp = false; + break; + case EVENT_INTERFACE_CONFIGURATION_SUCCEEDED: + if (localLOGV) Slog.i(TAG, "received configured succeeded, stack=" + mStackConnected + " HW=" + mHWConnected); + mStackConnected = true; + if (mHWConnected) + setState(true, msg.what); + break; + case EVENT_INTERFACE_CONFIGURATION_FAILED: + mStackConnected = false; + //start to retry ? + break; + case EVENT_HW_CONNECTED: + if (localLOGV) Slog.i(TAG, "received HW connected, stack=" + mStackConnected + " HW=" + mHWConnected); + mHWConnected = true; + if (mStackConnected) + setState(true, msg.what); + break; + case EVENT_HW_DISCONNECTED: + if (localLOGV) Slog.i(TAG, "received disconnected events, stack=" + mStackConnected + " HW=" + mHWConnected); + setState(mHWConnected = false, msg.what); + break; + case EVENT_HW_PHYCONNECTED: + if (localLOGV) Slog.i(TAG, "interface up event, kick off connection request"); + if (!mStartingDhcp) { + int state = mEthernetManager.getState(); + if (state != mEthernetManager.ETHERNET_STATE_DISABLED) { + EthernetDevInfo info = mEthernetManager.getSavedConfig(); + if (info != null && mEthernetManager.isConfigured()) { + try { + configureInterface(info); + } catch (UnknownHostException e) { + // TODO Auto-generated catch block + //e.printStackTrace(); + Slog.e(TAG, "Cannot configure interface"); + } } } } + break; } - break; } } } - private class DhcpHandler extends Handler { - public DhcpHandler(Looper looper, Handler target) { - super(looper); - mTrackerTarget = target; - } - - public void handleMessage(Message msg) { - int event; - - switch (msg.what) { - case EVENT_DHCP_START: - if (!mInterfaceStopped) { - if (localLOGV) Slog.d(TAG, "DhcpHandler: DHCP request started"); - - DhcpInfoInternal dhcpInfoInternal = new DhcpInfoInternal(); - if (NetworkUtils.runDhcp(mInterfaceName, dhcpInfoInternal)) { - event = EVENT_INTERFACE_CONFIGURATION_SUCCEEDED; - if (localLOGV) Slog.d(TAG, "DhcpHandler: DHCP request succeeded: " + mDhcpInfoInternal.toString()); - } else { - event = EVENT_INTERFACE_CONFIGURATION_FAILED; - Slog.e(TAG, "DhcpHandler: DHCP request failed: " + NetworkUtils.getDhcpError()); - } - } else { - mInterfaceStopped = false; - } - mStartingDhcp = false; - break; - } - } - } - public void notifyPhyConnected(String ifname) { if (localLOGV) Slog.v(TAG, "report interface is up for " + ifname); - synchronized(this) { -// this.sendEmptyMessage(EVENT_HW_PHYCONNECTED); - } - + if (mDhcpTarget != null) + mDhcpTarget.sendEmptyMessage(EVENT_HW_PHYCONNECTED); } public void notifyStateChange(String ifname,DetailedState state) { if (localLOGV) Slog.i(TAG, "report new state " + state.toString() + " on dev " + ifname); if (ifname.equals(mInterfaceName)) { if (localLOGV) Slog.v(TAG, "update network state tracker"); - synchronized(this) { - // this.sendEmptyMessage(state.equals(DetailedState.CONNECTED, null, null) - // ? EVENT_HW_CONNECTED : EVENT_HW_DISCONNECTED); - + if (mNetworkInfo.getDetailedState() != state) { + if (mNetworkInfo.getDetailedState() == DetailedState.CONNECTED) { + mNetworkInfo.setDetailedState(DetailedState.CONNECTED, null, null); + if (mDhcpTarget != null) + mDhcpTarget.sendEmptyMessage(EVENT_HW_CONNECTED); + } else { + mNetworkInfo.setDetailedState(DetailedState.DISCONNECTED, null, null); + stopInterface(true); + if (mDhcpTarget != null) + mDhcpTarget.sendEmptyMessage(EVENT_HW_DISCONNECTED); + } } } } |