summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/java/com/android/server/ConnectivityService.java6
-rw-r--r--services/java/com/android/server/connectivity/Tethering.java159
2 files changed, 54 insertions, 111 deletions
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index a9a7af459bb7..db831c79b29e 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -41,6 +41,7 @@ import android.os.Binder;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
+import android.os.INetworkManagementService;
import android.os.Looper;
import android.os.Message;
import android.os.PowerManager;
@@ -425,7 +426,10 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
}
- mTethering = new Tethering(mContext, mHandler.getLooper());
+ IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
+ INetworkManagementService nmService = INetworkManagementService.Stub.asInterface(b);
+
+ mTethering = new Tethering(mContext, nmService, mHandler.getLooper());
mTetheringConfigValid = (((mNetTrackers[ConnectivityManager.TYPE_MOBILE_DUN] != null) ||
!mTethering.isDunRequired()) &&
(mTethering.getTetherableUsbRegexs().length != 0 ||
diff --git a/services/java/com/android/server/connectivity/Tethering.java b/services/java/com/android/server/connectivity/Tethering.java
index 9ff52339499b..316db2e73569 100644
--- a/services/java/com/android/server/connectivity/Tethering.java
+++ b/services/java/com/android/server/connectivity/Tethering.java
@@ -84,6 +84,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
private String[] mTetherableBluetoothRegexs;
private String[] mUpstreamIfaceRegexs;
+ private INetworkManagementService mNMService;
private Looper mLooper;
private HandlerThread mThread;
@@ -100,21 +101,12 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
// with 255.255.255.0
private String[] mDhcpRange;
- private static final String DHCP_DEFAULT_RANGE1_START = "192.168.42.2";
- private static final String DHCP_DEFAULT_RANGE1_STOP = "192.168.42.254";
- private static final String DHCP_DEFAULT_RANGE2_START = "192.168.43.2";
- private static final String DHCP_DEFAULT_RANGE2_STOP = "192.168.43.254";
- private static final String DHCP_DEFAULT_RANGE3_START = "192.168.44.2";
- private static final String DHCP_DEFAULT_RANGE3_STOP = "192.168.44.254";
- private static final String DHCP_DEFAULT_RANGE4_START = "192.168.45.2";
- private static final String DHCP_DEFAULT_RANGE4_STOP = "192.168.45.254";
- private static final String DHCP_DEFAULT_RANGE5_START = "192.168.46.2";
- private static final String DHCP_DEFAULT_RANGE5_STOP = "192.168.46.254";
- private static final String DHCP_DEFAULT_RANGE6_START = "192.168.47.2";
- private static final String DHCP_DEFAULT_RANGE6_STOP = "192.168.47.254";
- private static final String DHCP_DEFAULT_RANGE7_START = "192.168.48.2";
- private static final String DHCP_DEFAULT_RANGE7_STOP = "192.168.48.254";
-
+ private static final String[] DHCP_DEFAULT_RANGE = {
+ "192.168.42.2", "192.168.42.254", "192.168.43.2", "192.168.43.254",
+ "192.168.44.2", "192.168.44.254", "192.168.45.2", "192.168.45.254",
+ "192.168.46.2", "192.168.46.254", "192.168.47.2", "192.168.47.254",
+ "192.168.48.2", "192.168.48.254",
+ };
private String[] mDnsServers;
private static final String DNS_DEFAULT_SERVER1 = "8.8.8.8";
@@ -132,15 +124,14 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
private boolean mUsbMassStorageOff; // track the status of USB Mass Storage
private boolean mUsbConnected; // track the status of USB connection
- public Tethering(Context context, Looper looper) {
+ public Tethering(Context context, INetworkManagementService nmService, Looper looper) {
mContext = context;
+ mNMService = nmService;
mLooper = looper;
// register for notifications from NetworkManagement Service
- IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
- INetworkManagementService service = INetworkManagementService.Stub.asInterface(b);
try {
- service.registerObserver(this);
+ mNMService.registerObserver(this);
} catch (RemoteException e) {
Log.e(TAG, "Error registering observer :" + e);
}
@@ -173,21 +164,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
mDhcpRange = context.getResources().getStringArray(
com.android.internal.R.array.config_tether_dhcp_range);
if ((mDhcpRange.length == 0) || (mDhcpRange.length % 2 ==1)) {
- mDhcpRange = new String[14];
- mDhcpRange[0] = DHCP_DEFAULT_RANGE1_START;
- mDhcpRange[1] = DHCP_DEFAULT_RANGE1_STOP;
- mDhcpRange[2] = DHCP_DEFAULT_RANGE2_START;
- mDhcpRange[3] = DHCP_DEFAULT_RANGE2_STOP;
- mDhcpRange[4] = DHCP_DEFAULT_RANGE3_START;
- mDhcpRange[5] = DHCP_DEFAULT_RANGE3_STOP;
- mDhcpRange[6] = DHCP_DEFAULT_RANGE4_START;
- mDhcpRange[7] = DHCP_DEFAULT_RANGE4_STOP;
- mDhcpRange[8] = DHCP_DEFAULT_RANGE5_START;
- mDhcpRange[9] = DHCP_DEFAULT_RANGE5_STOP;
- mDhcpRange[10] = DHCP_DEFAULT_RANGE6_START;
- mDhcpRange[11] = DHCP_DEFAULT_RANGE6_STOP;
- mDhcpRange[12] = DHCP_DEFAULT_RANGE7_START;
- mDhcpRange[13] = DHCP_DEFAULT_RANGE7_STOP;
+ mDhcpRange = DHCP_DEFAULT_RANGE;
}
mDunRequired = false; // resample when we turn on
@@ -258,8 +235,6 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
return false;
}
public void interfaceAdded(String iface) {
- IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
- INetworkManagementService service = INetworkManagementService.Stub.asInterface(b);
boolean found = false;
boolean usb = false;
if (isWifi(iface)) {
@@ -354,9 +329,9 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
private void sendTetherStateChangedBroadcast() {
IBinder b = ServiceManager.getService(Context.CONNECTIVITY_SERVICE);
- IConnectivityManager service = IConnectivityManager.Stub.asInterface(b);
+ IConnectivityManager cm = IConnectivityManager.Stub.asInterface(b);
try {
- if (!service.isTetheringSupported()) return;
+ if (!cm.isTetheringSupported()) return;
} catch (RemoteException e) {
return;
}
@@ -503,11 +478,9 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
// used on cable insert/remove
private void enableUsbIfaces(boolean enable) {
- IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
- INetworkManagementService service = INetworkManagementService.Stub.asInterface(b);
String[] ifaces = new String[0];
try {
- ifaces = service.listInterfaces();
+ ifaces = mNMService.listInterfaces();
} catch (Exception e) {
Log.e(TAG, "Error listing Interfaces :" + e);
return;
@@ -526,19 +499,17 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
// toggled when we enter/leave the fully tethered state
private boolean enableUsbRndis(boolean enabled) {
if (DEBUG) Log.d(TAG, "enableUsbRndis(" + enabled + ")");
- IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
- INetworkManagementService service = INetworkManagementService.Stub.asInterface(b);
try {
if (enabled) {
synchronized (this) {
- if (!service.isUsbRNDISStarted()) {
- service.startUsbRNDIS();
+ if (!mNMService.isUsbRNDISStarted()) {
+ mNMService.startUsbRNDIS();
}
}
} else {
- if (service.isUsbRNDISStarted()) {
- service.stopUsbRNDIS();
+ if (mNMService.isUsbRNDISStarted()) {
+ mNMService.stopUsbRNDIS();
}
}
} catch (Exception e) {
@@ -552,13 +523,10 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
private boolean configureUsbIface(boolean enabled) {
if (DEBUG) Log.d(TAG, "configureUsbIface(" + enabled + ")");
- IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
- INetworkManagementService service = INetworkManagementService.Stub.asInterface(b);
-
// bring toggle the interfaces
String[] ifaces = new String[0];
try {
- ifaces = service.listInterfaces();
+ ifaces = mNMService.listInterfaces();
} catch (Exception e) {
Log.e(TAG, "Error listing Interfaces :" + e);
return false;
@@ -567,7 +535,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
if (isUsb(iface)) {
InterfaceConfiguration ifcg = null;
try {
- ifcg = service.getInterfaceConfig(iface);
+ ifcg = mNMService.getInterfaceConfig(iface);
if (ifcg != null) {
InetAddress addr = NetworkUtils.numericToInetAddress(USB_NEAR_IFACE_ADDR);
ifcg.addr = new LinkAddress(addr, USB_PREFIX_LENGTH);
@@ -578,7 +546,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
ifcg.interfaceFlags = ifcg.interfaceFlags.replace("running", "");
ifcg.interfaceFlags = ifcg.interfaceFlags.replace(" "," ");
- service.setInterfaceConfig(iface, ifcg);
+ mNMService.setInterfaceConfig(iface, ifcg);
}
} catch (Exception e) {
Log.e(TAG, "Error configuring interface " + iface + ", :" + e);
@@ -874,11 +842,8 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
class TetheredState extends State {
@Override
public void enter() {
- IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
- INetworkManagementService service =
- INetworkManagementService.Stub.asInterface(b);
try {
- service.tetherInterface(mIfaceName);
+ mNMService.tetherInterface(mIfaceName);
} catch (Exception e) {
setLastError(ConnectivityManager.TETHER_ERROR_TETHER_IFACE_ERROR);
@@ -903,16 +868,13 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
switch (message.what) {
case CMD_TETHER_UNREQUESTED:
case CMD_INTERFACE_DOWN:
- IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
- INetworkManagementService service =
- INetworkManagementService.Stub.asInterface(b);
if (mMyUpstreamIfaceName != null) {
try {
- service.disableNat(mIfaceName, mMyUpstreamIfaceName);
+ mNMService.disableNat(mIfaceName, mMyUpstreamIfaceName);
mMyUpstreamIfaceName = null;
} catch (Exception e) {
try {
- service.untetherInterface(mIfaceName);
+ mNMService.untetherInterface(mIfaceName);
} catch (Exception ee) {}
setLastErrorAndTransitionToInitialState(
@@ -921,7 +883,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
}
try {
- service.untetherInterface(mIfaceName);
+ mNMService.untetherInterface(mIfaceName);
} catch (Exception e) {
setLastErrorAndTransitionToInitialState(
ConnectivityManager.TETHER_ERROR_UNTETHER_IFACE_ERROR);
@@ -944,8 +906,6 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
break;
case CMD_TETHER_CONNECTION_CHANGED:
String newUpstreamIfaceName = (String)(message.obj);
- b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
- service = INetworkManagementService.Stub.asInterface(b);
if ((mMyUpstreamIfaceName == null && newUpstreamIfaceName == null) ||
(mMyUpstreamIfaceName != null &&
mMyUpstreamIfaceName.equals(newUpstreamIfaceName))) {
@@ -954,11 +914,11 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
if (mMyUpstreamIfaceName != null) {
try {
- service.disableNat(mIfaceName, mMyUpstreamIfaceName);
+ mNMService.disableNat(mIfaceName, mMyUpstreamIfaceName);
mMyUpstreamIfaceName = null;
} catch (Exception e) {
try {
- service.untetherInterface(mIfaceName);
+ mNMService.untetherInterface(mIfaceName);
} catch (Exception ee) {}
setLastErrorAndTransitionToInitialState(
@@ -968,10 +928,10 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
if (newUpstreamIfaceName != null) {
try {
- service.enableNat(mIfaceName, newUpstreamIfaceName);
+ mNMService.enableNat(mIfaceName, newUpstreamIfaceName);
} catch (Exception e) {
try {
- service.untetherInterface(mIfaceName);
+ mNMService.untetherInterface(mIfaceName);
} catch (Exception ee) {}
setLastError(ConnectivityManager.TETHER_ERROR_ENABLE_NAT_ERROR);
@@ -990,15 +950,13 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
error = true;
// fall through
case CMD_TETHER_MODE_DEAD:
- b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
- service = INetworkManagementService.Stub.asInterface(b);
if (mMyUpstreamIfaceName != null) {
try {
- service.disableNat(mIfaceName, mMyUpstreamIfaceName);
+ mNMService.disableNat(mIfaceName, mMyUpstreamIfaceName);
mMyUpstreamIfaceName = null;
} catch (Exception e) {
try {
- service.untetherInterface(mIfaceName);
+ mNMService.untetherInterface(mIfaceName);
} catch (Exception ee) {}
setLastErrorAndTransitionToInitialState(
@@ -1007,7 +965,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
}
try {
- service.untetherInterface(mIfaceName);
+ mNMService.untetherInterface(mIfaceName);
} catch (Exception e) {
setLastErrorAndTransitionToInitialState(
ConnectivityManager.TETHER_ERROR_UNTETHER_IFACE_ERROR);
@@ -1138,10 +1096,10 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
boolean retValue = true;
if (mMobileReserved) return retValue;
IBinder b = ServiceManager.getService(Context.CONNECTIVITY_SERVICE);
- IConnectivityManager service = IConnectivityManager.Stub.asInterface(b);
+ IConnectivityManager cm = IConnectivityManager.Stub.asInterface(b);
int result = Phone.APN_REQUEST_FAILED;
try {
- result = service.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
+ result = cm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
(mDunRequired ? Phone.FEATURE_ENABLE_DUN_ALWAYS :
Phone.FEATURE_ENABLE_HIPRI), new Binder());
} catch (Exception e) {
@@ -1165,10 +1123,9 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
protected boolean turnOffMobileConnection() {
if (mMobileReserved) {
IBinder b = ServiceManager.getService(Context.CONNECTIVITY_SERVICE);
- IConnectivityManager service =
- IConnectivityManager.Stub.asInterface(b);
+ IConnectivityManager cm = IConnectivityManager.Stub.asInterface(b);
try {
- service.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
+ cm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
(mDunRequired? Phone.FEATURE_ENABLE_DUN_ALWAYS :
Phone.FEATURE_ENABLE_HIPRI));
} catch (Exception e) {
@@ -1179,28 +1136,25 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
return true;
}
protected boolean turnOnMasterTetherSettings() {
- IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
- INetworkManagementService service =
- INetworkManagementService.Stub.asInterface(b);
try {
- service.setIpForwardingEnabled(true);
+ mNMService.setIpForwardingEnabled(true);
} catch (Exception e) {
transitionTo(mSetIpForwardingEnabledErrorState);
return false;
}
try {
- service.startTethering(mDhcpRange);
+ mNMService.startTethering(mDhcpRange);
} catch (Exception e) {
try {
- service.stopTethering();
- service.startTethering(mDhcpRange);
+ mNMService.stopTethering();
+ mNMService.startTethering(mDhcpRange);
} catch (Exception ee) {
transitionTo(mStartTetheringErrorState);
return false;
}
}
try {
- service.setDnsForwarders(mDnsServers);
+ mNMService.setDnsForwarders(mDnsServers);
} catch (Exception e) {
transitionTo(mSetDnsForwardersErrorState);
return false;
@@ -1208,17 +1162,14 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
return true;
}
protected boolean turnOffMasterTetherSettings() {
- IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
- INetworkManagementService service =
- INetworkManagementService.Stub.asInterface(b);
try {
- service.stopTethering();
+ mNMService.stopTethering();
} catch (Exception e) {
transitionTo(mStopTetheringErrorState);
return false;
}
try {
- service.setIpForwardingEnabled(false);
+ mNMService.setIpForwardingEnabled(false);
} catch (Exception e) {
transitionTo(mSetIpForwardingDisabledErrorState);
return false;
@@ -1241,12 +1192,9 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
} catch (RemoteException e) { }
- b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
- INetworkManagementService service = INetworkManagementService.Stub.asInterface(b);
-
String[] ifaces = new String[0];
try {
- ifaces = service.listInterfaces();
+ ifaces = mNMService.listInterfaces();
} catch (Exception e) {
Log.e(TAG, "Error listing Interfaces :" + e);
return null;
@@ -1258,7 +1206,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
// verify it is active
InterfaceConfiguration ifcg = null;
try {
- ifcg = service.getInterfaceConfig(iface);
+ ifcg = mNMService.getInterfaceConfig(iface);
if (ifcg.isActive()) {
return iface;
}
@@ -1486,11 +1434,8 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
public void enter() {
Log.e(TAG, "Error in startTethering");
notify(TetherInterfaceSM.CMD_START_TETHERING_ERROR);
- IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
- INetworkManagementService service =
- INetworkManagementService.Stub.asInterface(b);
try {
- service.setIpForwardingEnabled(false);
+ mNMService.setIpForwardingEnabled(false);
} catch (Exception e) {}
}
}
@@ -1500,11 +1445,8 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
public void enter() {
Log.e(TAG, "Error in stopTethering");
notify(TetherInterfaceSM.CMD_STOP_TETHERING_ERROR);
- IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
- INetworkManagementService service =
- INetworkManagementService.Stub.asInterface(b);
try {
- service.setIpForwardingEnabled(false);
+ mNMService.setIpForwardingEnabled(false);
} catch (Exception e) {}
}
}
@@ -1514,14 +1456,11 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
public void enter() {
Log.e(TAG, "Error in setDnsForwarders");
notify(TetherInterfaceSM.CMD_SET_DNS_FORWARDERS_ERROR);
- IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
- INetworkManagementService service =
- INetworkManagementService.Stub.asInterface(b);
try {
- service.stopTethering();
+ mNMService.stopTethering();
} catch (Exception e) {}
try {
- service.setIpForwardingEnabled(false);
+ mNMService.setIpForwardingEnabled(false);
} catch (Exception e) {}
}
}