Process RSSI breach event in L2 connect state; protect from
crash that can occur when it comes in Disconnected state.
Bug: 23847831
Change-Id: I693384c61d43ad377c30ef2797937d1dfd48eeb3
diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java
index 4fdc4b2..2862822 100644
--- a/service/java/com/android/server/wifi/WifiStateMachine.java
+++ b/service/java/com/android/server/wifi/WifiStateMachine.java
@@ -281,10 +281,14 @@
}
public void processRssiThreshold(byte curRssi) {
+ if (curRssi == Byte.MAX_VALUE || curRssi == Byte.MIN_VALUE) {
+ Log.wtf(TAG, "processRssiThreshold: Invalid rssi " + curRssi);
+ return;
+ }
for (int i = 0; i < mRssiRanges.length; i++) {
if (curRssi < mRssiRanges[i]) {
// Assume sorted values(ascending order) for rssi,
- // bounded by high(127) and low(-127) at extremeties
+ // bounded by high(127) and low(-128) at extremeties
byte maxRssi = mRssiRanges[i];
byte minRssi = mRssiRanges[i-1];
Log.d(TAG, "Re-program rssi thresholds" + "maxRssi=" + maxRssi
@@ -7930,10 +7934,6 @@
case CMD_PNO_NETWORK_FOUND:
processPnoNetworkFound((ScanResult[])message.obj);
break;
- case CMD_RSSI_THRESHOLD_BREACH:
- byte curRssi = (byte)message.arg1;
- processRssiThreshold(curRssi);
- break;
default:
return NOT_HANDLED;
}
@@ -8532,6 +8532,17 @@
sendNetworkStateChangeBroadcast(mLastBssid);
}
break;
+ case CMD_START_RSSI_MONITORING_OFFLOAD:
+ byte currRssi = (byte)message.arg1;
+ processRssiThreshold(currRssi);
+ break;
+ case CMD_STOP_RSSI_MONITORING_OFFLOAD:
+ stopRssiMonitoringOffload();
+ break;
+ case CMD_RSSI_THRESHOLD_BREACH:
+ byte curRssi = (byte)message.arg1;
+ processRssiThreshold(curRssi);
+ break;
default:
return NOT_HANDLED;
}
@@ -9171,13 +9182,6 @@
mNetworkAgent.onPacketKeepaliveEvent(slot, result);
break;
}
- case CMD_START_RSSI_MONITORING_OFFLOAD:
- byte currRssi = (byte)message.arg1;
- processRssiThreshold(currRssi);
- break;
- case CMD_STOP_RSSI_MONITORING_OFFLOAD:
- stopRssiMonitoringOffload();
- break;
default:
return NOT_HANDLED;
}