Merge "Refactor TISM add/remove code"
This commit is contained in:
@@ -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) {
|
||||||
|
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)));
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user