Merge "Refactor TISM add/remove code"

am: 5041bbde19

Change-Id: I2475a3cbff37248509e21dd058ed8f3d827fefd0
This commit is contained in:
Erik Kline
2017-05-23 04:56:40 +00:00
committed by android-build-merger

View File

@@ -241,21 +241,11 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
// See NetlinkHandler.cpp:71. // See NetlinkHandler.cpp:71.
if (VDBG) Log.d(TAG, "interfaceStatusChanged " + iface + ", " + up); if (VDBG) Log.d(TAG, "interfaceStatusChanged " + iface + ", " + up);
synchronized (mPublicSync) { synchronized (mPublicSync) {
int interfaceType = ifaceNameToType(iface);
if (interfaceType == ConnectivityManager.TETHERING_INVALID) {
return;
}
TetherState tetherState = mTetherStates.get(iface);
if (up) { if (up) {
if (tetherState == null) { maybeTrackNewInterfaceLocked(iface);
trackNewTetherableInterface(iface, interfaceType);
}
} else { } else {
if (interfaceType == ConnectivityManager.TETHERING_BLUETOOTH) { if (ifaceNameToType(iface) == ConnectivityManager.TETHERING_BLUETOOTH) {
tetherState.stateMachine.sendMessage( stopTrackingInterfaceLocked(iface);
TetherInterfaceStateMachine.CMD_INTERFACE_DOWN);
mTetherStates.remove(iface);
} else { } else {
// Ignore usb0 down after enabling RNDIS. // Ignore usb0 down after enabling RNDIS.
// We will handle disconnect in interfaceRemoved. // We will handle disconnect in interfaceRemoved.
@@ -289,18 +279,7 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
public void interfaceAdded(String iface) { public void interfaceAdded(String iface) {
if (VDBG) Log.d(TAG, "interfaceAdded " + iface); if (VDBG) Log.d(TAG, "interfaceAdded " + iface);
synchronized (mPublicSync) { synchronized (mPublicSync) {
int interfaceType = ifaceNameToType(iface); maybeTrackNewInterfaceLocked(iface);
if (interfaceType == ConnectivityManager.TETHERING_INVALID) {
if (VDBG) Log.d(TAG, iface + " is not a tetherable iface, ignoring");
return;
}
TetherState tetherState = mTetherStates.get(iface);
if (tetherState == null) {
trackNewTetherableInterface(iface, interfaceType);
} else {
if (VDBG) Log.d(TAG, "active iface (" + iface + ") reported as added, ignoring");
}
} }
} }
@@ -308,15 +287,7 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
public void interfaceRemoved(String iface) { public void interfaceRemoved(String iface) {
if (VDBG) Log.d(TAG, "interfaceRemoved " + iface); if (VDBG) Log.d(TAG, "interfaceRemoved " + iface);
synchronized (mPublicSync) { synchronized (mPublicSync) {
TetherState tetherState = mTetherStates.get(iface); stopTrackingInterfaceLocked(iface);
if (tetherState == null) {
if (VDBG) {
Log.e(TAG, "attempting to remove unknown iface (" + iface + "), ignoring");
}
return;
}
tetherState.stateMachine.sendMessage(TetherInterfaceStateMachine.CMD_INTERFACE_DOWN);
mTetherStates.remove(iface);
} }
} }
@@ -1774,15 +1745,40 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
sendTetherStateChangedBroadcast(); sendTetherStateChangedBroadcast();
} }
private void trackNewTetherableInterface(String iface, int interfaceType) { private void maybeTrackNewInterfaceLocked(final String iface) {
TetherState tetherState; // If we don't care about this type of interface, ignore.
tetherState = new TetherState(new TetherInterfaceStateMachine(iface, mLooper, final int interfaceType = ifaceNameToType(iface);
interfaceType, mLog, mNMService, mStatsService, this, if (interfaceType == ConnectivityManager.TETHERING_INVALID) {
new IPv6TetheringInterfaceServices(iface, mNMService, mLog))); mLog.log(iface + " is not a tetherable iface, ignoring");
return;
}
// If we have already started a TISM for this interface, skip.
if (mTetherStates.containsKey(iface)) {
mLog.log("active iface (" + iface + ") reported as added, ignoring");
return;
}
mLog.log("adding TetheringInterfaceStateMachine for: " + iface);
final TetherState tetherState = new TetherState(
new TetherInterfaceStateMachine(
iface, mLooper, interfaceType, mLog, mNMService, mStatsService, this,
new IPv6TetheringInterfaceServices(iface, mNMService, mLog)));
mTetherStates.put(iface, tetherState); mTetherStates.put(iface, tetherState);
tetherState.stateMachine.start(); tetherState.stateMachine.start();
} }
private void stopTrackingInterfaceLocked(final String iface) {
final TetherState tetherState = mTetherStates.get(iface);
if (tetherState == null) {
mLog.log("attempting to remove unknown iface (" + iface + "), ignoring");
return;
}
tetherState.stateMachine.sendMessage(TetherInterfaceStateMachine.CMD_INTERFACE_DOWN);
mLog.log("removing TetheringInterfaceStateMachine for: " + iface);
mTetherStates.remove(iface);
}
private static String[] copy(String[] strarray) { private static String[] copy(String[] strarray) {
return Arrays.copyOf(strarray, strarray.length); return Arrays.copyOf(strarray, strarray.length);
} }