summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkejun.zhou <kejun.zhou@linaro.org>2012-09-04 16:59:28 +0800
committerkejun.zhou <kejun.zhou@linaro.org>2012-09-04 18:42:07 +0800
commitec3c51bd260bee9342a4a1a9543e2e5304cd2977 (patch)
tree7872dba06cf6fac9a41bcb63c95a914547b265c7
parent67e71a6da70e346d2174b7a905eafcd80df3e8e4 (diff)
downloadbase-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>
-rw-r--r--ethernet/java/android/net/ethernet/EthernetMonitor.java2
-rw-r--r--ethernet/java/android/net/ethernet/EthernetStateMachine.java62
-rw-r--r--ethernet/java/android/net/ethernet/EthernetStateTracker.java187
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);
+ }
}
}
}