| | | |
Offset 1, 107 lines modified | Offset 1, 150 lines modified |
| |
1 | package·com.android.server.wifi; | 1 | package·com.android.server.wifi; |
| |
2 | import·java.util.Collection; | |
3 | import·java.util.function.Supplier; | 2 | import·java.util.function.Supplier; |
4 | import·java.util.Comparator; | 3 | import·java.util.Comparator; |
5 | import·java.util.ArrayList; | 4 | import·java.util.ArrayList; |
| 5 | import·android.net.wifi.ScanResult; |
| 6 | import·java.util.List; |
6 | import·java.util.stream.Collector; | 7 | import·java.util.stream.Collector; |
7 | import·java.util.stream.Collectors; | 8 | import·java.util.stream.Collectors; |
8 | import·java.util.function.Function; | 9 | import·java.util.function.Function; |
9 | import·java.util.Set; | 10 | import·java.util.Collections; |
10 | import·java.util.function.Consumer; | 11 | import·java.util.function.Consumer; |
11 | import·java.io.FileDescriptor; | 12 | import·java.io.FileDescriptor; |
12 | import·java.util.Iterator; | 13 | import·java.util.Iterator; |
13 | import·java.util.function.Predicate; | |
14 | import·java.util.stream.Stream; | 14 | import·java.util.stream.Stream; |
15 | import·java.io.PrintWriter; | 15 | import·java.io.PrintWriter; |
16 | import·android.util.Log; | 16 | import·android.util.Log; |
| 17 | import·java.util.function.Predicate; |
17 | import·android.util.ArrayMap; | 18 | import·android.util.ArrayMap; |
18 | import·java.util.concurrent.TimeUnit; | 19 | import·java.util.concurrent.TimeUnit; |
| 20 | import·java.util.Collection; |
| 21 | import·android.util.ArraySet; |
| 22 | import·java.util.Arrays; |
19 | import·com.android.wifi.x.android.util.LocalLog; | 23 | import·com.android.wifi.x.android.util.LocalLog; |
20 | import·android.content.Context; | 24 | import·android.content.Context; |
21 | import·java.util.Calendar; | 25 | import·java.util.Calendar; |
22 | import·java.util.Map; | 26 | import·java.util.Map; |
| 27 | import·java.util.Set; |
| |
23 | public·class·BssidBlocklistMonitor | 28 | public·class·BssidBlocklistMonitor |
24 | { | 29 | { |
25 | ····private·static·final·long·ABNORMAL_DISCONNECT_RESET_TIME_MS·=·0L; | 30 | ····private·static·final·long·ABNORMAL_DISCONNECT_RESET_TIME_MS·=·0L; |
26 | ····private·static·final·String·FAILURE_BSSID_BLOCKED_BY_FRAMEWORK_REASON_STRING·=·"BlockedByFramework"; | |
27 | ····private·static·final·int[]·FAILURE_COUNT_DISABLE_THRESHOLD; | 31 | ····private·static·final·int[]·FAILURE_COUNT_DISABLE_THRESHOLD; |
28 | ····private·static·final·String[]·FAILURE_REASON_STRINGS; | 32 | ····private·static·final·String[]·FAILURE_REASON_STRINGS; |
29 | ····public·static·final·int·NUMBER_REASON_CODES·=·9; | 33 | ····public·static·final·int·INVALID_REASON·=·255; |
| 34 | ····private·static·final·Set·LOW_RSSI_SENSITIVE_FAILURES; |
| 35 | ····private·static·final·int·MIN_RSSI_DIFF_TO_UNBLOCK_BSSID·=·5; |
| 36 | ····public·static·final·int·NUMBER_REASON_CODES·=·12; |
30 | ····public·static·final·int·REASON_ABNORMAL_DISCONNECT·=·8; | 37 | ····public·static·final·int·REASON_ABNORMAL_DISCONNECT·=·8; |
31 | ····public·static·final·int·REASON_AP_UNABLE_TO_HANDLE_NEW_STA·=·0; | 38 | ····public·static·final·int·REASON_AP_UNABLE_TO_HANDLE_NEW_STA·=·0; |
32 | ····public·static·final·int·REASON_ASSOCIATION_REJECTION·=·4; | 39 | ····public·static·final·int·REASON_ASSOCIATION_REJECTION·=·4; |
33 | ····public·static·final·int·REASON_ASSOCIATION_TIMEOUT·=·5; | 40 | ····public·static·final·int·REASON_ASSOCIATION_TIMEOUT·=·5; |
34 | ····public·static·final·int·REASON_AUTHENTICATION_FAILURE·=·6; | 41 | ····public·static·final·int·REASON_AUTHENTICATION_FAILURE·=·6; |
35 | ····public·static·final·int·REASON_DHCP_FAILURE·=·7; | 42 | ····public·static·final·int·REASON_DHCP_FAILURE·=·7; |
36 | ····public·static·final·int·REASON_EAP_FAILURE·=·3; | 43 | ····public·static·final·int·REASON_EAP_FAILURE·=·3; |
| 44 | ····public·static·final·int·REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE·=·11; |
| 45 | ····public·static·final·int·REASON_FRAMEWORK_DISCONNECT_FAST_RECONNECT·=·10; |
| 46 | ····public·static·final·int·REASON_FRAMEWORK_DISCONNECT_MBO_OCE·=·9; |
37 | ····public·static·final·int·REASON_NETWORK_VALIDATION_FAILURE·=·1; | 47 | ····public·static·final·int·REASON_NETWORK_VALIDATION_FAILURE·=·1; |
38 | ····public·static·final·int·REASON_WRONG_PASSWORD·=·2; | 48 | ····public·static·final·int·REASON_WRONG_PASSWORD·=·2; |
39 | ····private·static·final·String·TAG·=·"BssidBlocklistMonitor"; | 49 | ····private·static·final·String·TAG·=·"BssidBlocklistMonitor"; |
40 | ····private·BssidBlocklistMonitor$BssidStatusHistoryLogger·mBssidStatusHistoryLogger; | 50 | ····private·BssidBlocklistMonitor$BssidStatusHistoryLogger·mBssidStatusHistoryLogger; |
41 | ····private·Map·mBssidStatusMap; | 51 | ····private·Map·mBssidStatusMap; |
42 | ····private·final·Calendar·mCalendar; | 52 | ····private·final·Calendar·mCalendar; |
43 | ····private·final·Clock·mClock; | 53 | ····private·final·Clock·mClock; |
44 | ····private·final·WifiConnectivityHelper·mConnectivityHelper; | 54 | ····private·final·WifiConnectivityHelper·mConnectivityHelper; |
45 | ····private·final·Context·mContext; | 55 | ····private·final·Context·mContext; |
46 | ····private·boolean·mFailureCountDisableThresholdArrayInitialized; | 56 | ····private·boolean·mFailureCountDisableThresholdArrayInitialized; |
47 | ····private·final·LocalLog·mLocalLog; | 57 | ····private·final·LocalLog·mLocalLog; |
| 58 | ····private·final·ScoringParams·mScoringParams; |
48 | ····private·final·WifiLastResortWatchdog·mWifiLastResortWatchdog; | 59 | ····private·final·WifiLastResortWatchdog·mWifiLastResortWatchdog; |
49 | ····private·final·WifiScoreCard·mWifiScoreCard; | 60 | ····private·final·WifiScoreCard·mWifiScoreCard; |
50 | ···· | 61 | ···· |
51 | ····static·{ | 62 | ····static·{ |
52 | ········FAILURE_COUNT_DISABLE_THRESHOLD·=·new·int[9]; | 63 | ········FAILURE_COUNT_DISABLE_THRESHOLD·=·new·int[12]; |
53 | ········FAILURE_REASON_STRINGS·=·new·String[]·{·"REASON_AP_UNABLE_TO_HANDLE_NEW_STA",·"REASON_NETWORK_VALIDATION_FAILURE",·"REASON_WRONG_PASSWORD",·"REASON_EAP_FAILURE",·"REASON_ASSOCIATION_REJECTION",·"REASON_ASSOCIATION_TIMEOUT",·"REASON_AUTHENTICATION_FAILURE",·"REASON_DHCP_FAILURE",·"REASON_ABNORMAL_DISCONNECT"·}; | 64 | ········FAILURE_REASON_STRINGS·=·new·String[]·{·"REASON_AP_UNABLE_TO_HANDLE_NEW_STA",·"REASON_NETWORK_VALIDATION_FAILURE",·"REASON_WRONG_PASSWORD",·"REASON_EAP_FAILURE",·"REASON_ASSOCIATION_REJECTION",·"REASON_ASSOCIATION_TIMEOUT",·"REASON_AUTHENTICATION_FAILURE",·"REASON_DHCP_FAILURE",·"REASON_ABNORMAL_DISCONNECT",·"REASON_FRAMEWORK_DISCONNECT_MBO_OCE",·"REASON_FRAMEWORK_DISCONNECT_FAST_RECONNECT",·"REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE"·}; |
| 65 | ········final·int·n·=·8; |
| 66 | ········final·Integer[]·array·=·new·Integer[n]; |
| 67 | ········final·int·n2·=·1; |
| 68 | ········array[0]·=·n2; |
| 69 | ········final·int·n3·=·3; |
| 70 | ········array[n2]·=·n3; |
| 71 | ········final·int·n4·=·4; |
| 72 | ········array[2]·=·n4; |
| 73 | ········final·int·n5·=·5; |
| 74 | ········array[n3]·=·n5; |
| 75 | ········final·int·n6·=·6; |
| 76 | ········array[n4]·=·n6; |
| 77 | ········final·int·n7·=·7; |
| 78 | ········array[n5]·=·n7; |
| 79 | ········array[n6]·=·n; |
| 80 | ········array[n7]·=·11; |
| 81 | ········LOW_RSSI_SENSITIVE_FAILURES·=·(Set)new·ArraySet((Collection)Arrays.asList(array)); |
54 | ····} | 82 | ····} |
55 | ···· | 83 | ···· |
56 | ····BssidBlocklistMonitor(final·Context·mContext,·final·WifiConnectivityHelper·mConnectivityHelper,·final·WifiLastResortWatchdog·mWifiLastResortWatchdog,·final·Clock·mClock,·final·LocalLog·mLocalLog,·final·WifiScoreCard·mWifiScoreCard)·{ | 84 | ····BssidBlocklistMonitor(final·Context·mContext,·final·WifiConnectivityHelper·mConnectivityHelper,·final·WifiLastResortWatchdog·mWifiLastResortWatchdog,·final·Clock·mClock,·final·LocalLog·mLocalLog,·final·WifiScoreCard·mWifiScoreCard,·final·ScoringParams·mScoringParams)·{ |
57 | ········this.mFailureCountDisableThresholdArrayInitialized·=·false; | 85 | ········this.mFailureCountDisableThresholdArrayInitialized·=·false; |
58 | ········this.mBssidStatusMap·=·(Map)new·ArrayMap(); | 86 | ········this.mBssidStatusMap·=·(Map)new·ArrayMap(); |
59 | ········this.mBssidStatusHistoryLogger·=·new·BssidBlocklistMonitor$BssidStatusHistoryLogger(this,·30); | 87 | ········this.mBssidStatusHistoryLogger·=·new·BssidBlocklistMonitor$BssidStatusHistoryLogger(this,·30); |
60 | ········this.mContext·=·mContext; | 88 | ········this.mContext·=·mContext; |
61 | ········this.mConnectivityHelper·=·mConnectivityHelper; | 89 | ········this.mConnectivityHelper·=·mConnectivityHelper; |
62 | ········this.mWifiLastResortWatchdog·=·mWifiLastResortWatchdog; | 90 | ········this.mWifiLastResortWatchdog·=·mWifiLastResortWatchdog; |
63 | ········this.mClock·=·mClock; | 91 | ········this.mClock·=·mClock; |
64 | ········this.mLocalLog·=·mLocalLog; | 92 | ········this.mLocalLog·=·mLocalLog; |
65 | ········this.mCalendar·=·Calendar.getInstance(); | 93 | ········this.mCalendar·=·Calendar.getInstance(); |
66 | ········this.mWifiScoreCard·=·mWifiScoreCard; | 94 | ········this.mWifiScoreCard·=·mWifiScoreCard; |
| 95 | ········this.mScoringParams·=·mScoringParams; |
67 | ····} | 96 | ····} |
68 | ···· | 97 | ···· |
69 | ····private·void·addToBlocklist(final·BssidBlocklistMonitor$BssidStatus·bssidBlocklistMonitor$BssidStatus,·final·long·n,·final·String·s)·{ | 98 | ····private·void·addToBlocklist(final·BssidBlocklistMonitor$BssidStatus·bssidBlocklistMonitor$BssidStatus,·final·long·n,·final·int·n2,·final·int·n3)·{ |
70 | ········bssidBlocklistMonitor$BssidStatus.addToBlocklist(n,·s); | 99 | ········bssidBlocklistMonitor$BssidStatus.setAsBlocked(n,·n2,·n3); |
71 | ········final·StringBuilder·sb·=·new·StringBuilder(); | 100 | ········final·StringBuilder·sb·=·new·StringBuilder(); |
72 | ········sb.append("BssidBlocklistMonitor·addToBlocklist:·bssid="); | 101 | ········sb.append("BssidBlocklistMonitor·addToBlocklist:·bssid="); |
73 | ········sb.append(bssidBlocklistMonitor$BssidStatus.bssid); | 102 | ········sb.append(bssidBlocklistMonitor$BssidStatus.bssid); |
74 | ········sb.append(",·ssid="); | 103 | ········sb.append(",·ssid="); |
75 | ········sb.append(bssidBlocklistMonitor$BssidStatus.ssid); | 104 | ········sb.append(bssidBlocklistMonitor$BssidStatus.ssid); |
76 | ········sb.append(",·durationMs="); | 105 | ········sb.append(",·durationMs="); |
77 | ········sb.append(n); | 106 | ········sb.append(n); |
78 | ········sb.append(",·reason="); | 107 | ········sb.append(",·reason="); |
79 | ········sb.append(s); | 108 | ········sb.append(this.getFailureReasonString(n2)); |
| 109 | ········sb.append(",·rssi="); |
| 110 | ········sb.append(n3); |
80 | ········this.localLog(sb.toString()); | 111 | ········this.localLog(sb.toString()); |
81 | ····} | 112 | ····} |
82 | ···· | 113 | ···· |
| 114 | ····private·int·getBaseBlockDurationForReason(final·int·n)·{ |
| 115 | ········if·(n·!=·11)·{ |
| 116 | ············return·this.mContext.getResources().getInteger(2131034118); |
| 117 | ········} |
| 118 | ········return·this.mContext.getResources().getInteger(2131034119); |
| 119 | ····} |
| 120 | ···· |
83 | ····private·long·getBlocklistDurationWithExponentialBackoff(int·n,·final·int·n2)·{ | 121 | ····private·long·getBlocklistDurationWithExponentialBackoff(int·n,·final·int·n2)·{ |
84 | ········final·int·min·=·Math.min(n,·this.mContext.getResources().getInteger(2131034122)); | 122 | ········final·int·min·=·Math.min(n,·this.mContext.getResources().getInteger(2131034122)); |
85 | ········n·=·1; | 123 | ········n·=·1; |
86 | ········if·(min·<·n)·{ | 124 | ········if·(min·<·n)·{ |
87 | ············return·n2; | 125 | ············return·n2; |
88 | ········} | 126 | ········} |
89 | ········return·(long)(Math.pow(2.0,·min)·*·n2); | 127 | ········return·(long)(Math.pow(2.0,·min)·*·n2); |
90 | ····} | 128 | ····} |
91 | ···· | 129 | ···· |
92 | ····private·String·getFailureReasonString(final·int·n)·{ | 130 | ····private·String·getFailureReasonString(final·int·n)·{ |
93 | ········final·String[]·failure_REASON_STRINGS·=·BssidBlocklistMonitor.FAILURE_REASON_STRINGS; | 131 | ········if·(n·==·-1)·{ |
94 | ········if·(n·>=·failure_REASON_STRINGS.length)·{ | 132 | ············return·"INVALID_REASON"; |
95 | ············return·"REASON_UNKNOWN"; | 133 | ········} |
| 134 | ········if·(n·>=·0)·{ |
| 135 | ············final·String[]·failure_REASON_STRINGS·=·BssidBlocklistMonitor.FAILURE_REASON_STRINGS; |
| 136 | ············if·(n·<·failure_REASON_STRINGS.length)·{ |
| 137 | ················return·failure_REASON_STRINGS[n]; |
| 138 | ············} |
96 | ········} | 139 | ········} |
97 | ········return·failure_REASON_STRINGS[n]; | 140 | ········return·"REASON_UNKNOWN"; |
98 | ····} | 141 | ····} |
99 | ···· | 142 | ···· |
100 | ····private·int·getFailureThresholdForReason(final·int·n)·{ | 143 | ····private·int·getFailureThresholdForReason(final·int·n)·{ |
101 | ········if·(this.mFailureCountDisableThresholdArrayInitialized)·{ | 144 | ········if·(this.mFailureCountDisableThresholdArrayInitialized)·{ |
102 | ············return·BssidBlocklistMonitor.FAILURE_COUNT_DISABLE_THRESHOLD[n]; | 145 | ············return·BssidBlocklistMonitor.FAILURE_COUNT_DISABLE_THRESHOLD[n]; |
103 | ········} | 146 | ········} |
104 | ········BssidBlocklistMonitor.FAILURE_COUNT_DISABLE_THRESHOLD[0]·=·this.mContext.getResources().getInteger(2131034114); | 147 | ········BssidBlocklistMonitor.FAILURE_COUNT_DISABLE_THRESHOLD[0]·=·this.mContext.getResources().getInteger(2131034114); |
Offset 116, 14 lines modified | Offset 159, 21 lines modified |
116 | ········BssidBlocklistMonitor.FAILURE_COUNT_DISABLE_THRESHOLD[6]·=·this.mContext.getResources().getInteger(2131034117); | 159 | ········BssidBlocklistMonitor.FAILURE_COUNT_DISABLE_THRESHOLD[6]·=·this.mContext.getResources().getInteger(2131034117); |
117 | ········BssidBlocklistMonitor.FAILURE_COUNT_DISABLE_THRESHOLD[7]·=·this.mContext.getResources().getInteger(2131034120); | 160 | ········BssidBlocklistMonitor.FAILURE_COUNT_DISABLE_THRESHOLD[7]·=·this.mContext.getResources().getInteger(2131034120); |
118 | ········BssidBlocklistMonitor.FAILURE_COUNT_DISABLE_THRESHOLD[8]·=·this.mContext.getResources().getInteger(2131034113); | 161 | ········BssidBlocklistMonitor.FAILURE_COUNT_DISABLE_THRESHOLD[8]·=·this.mContext.getResources().getInteger(2131034113); |
119 | ········this.mFailureCountDisableThresholdArrayInitialized·=·(mFailureCountDisableThresholdArrayInitialized·!=·0); | 162 | ········this.mFailureCountDisableThresholdArrayInitialized·=·(mFailureCountDisableThresholdArrayInitialized·!=·0); |
120 | ········return·BssidBlocklistMonitor.FAILURE_COUNT_DISABLE_THRESHOLD[n]; | 163 | ········return·BssidBlocklistMonitor.FAILURE_COUNT_DISABLE_THRESHOLD[n]; |
121 | ····} | 164 | ····} |
122 | ···· | 165 | ···· |
| 166 | ····private·int·getNumBlockedBssidsForSsid(final·String·s)·{ |
| 167 | ········if·(s·==·null)·{ |
| 168 | ············return·0; |
| 169 | ········} |
| 170 | ········return·(int)this.mBssidStatusMap.values().stream().filter((Predicate)new·-$$Lambda$BssidBlocklistMonitor$Ncn6tOVItshIBiKzZ-r2SnBwnfw(s)).count(); |
| 171 | ····} |
| 172 | ···· |
123 | ····private·BssidBlocklistMonitor$BssidStatus·getOrCreateBssidStatus(final·String·s,·final·String·s2)·{ | 173 | ····private·BssidBlocklistMonitor$BssidStatus·getOrCreateBssidStatus(final·String·s,·final·String·s2)·{ |
124 | ········BssidBlocklistMonitor$BssidStatus·bssidBlocklistMonitor$BssidStatus·=·(BssidBlocklistMonitor$BssidStatus)this.mBssidStatusMap.get(s); | 174 | ········BssidBlocklistMonitor$BssidStatus·bssidBlocklistMonitor$BssidStatus·=·(BssidBlocklistMonitor$BssidStatus)this.mBssidStatusMap.get(s); |
125 | ········if·(bssidBlocklistMonitor$BssidStatus·==·null·||·!s2.equals(bssidBlocklistMonitor$BssidStatus.ssid))·{ | 175 | ········if·(bssidBlocklistMonitor$BssidStatus·==·null·||·!s2.equals(bssidBlocklistMonitor$BssidStatus.ssid))·{ |
126 | ············if·(bssidBlocklistMonitor$BssidStatus·!=·null)·{ | 176 | ············if·(bssidBlocklistMonitor$BssidStatus·!=·null)·{ |
127 | ················final·StringBuilder·sb·=·new·StringBuilder(); | 177 | ················final·StringBuilder·sb·=·new·StringBuilder(); |
128 | ················sb.append("getOrCreateBssidStatus:·BSSID="); | 178 | ················sb.append("getOrCreateBssidStatus:·BSSID="); |
129 | ················sb.append(s); | 179 | ················sb.append(s); |
Offset 135, 41 lines modified | Offset 185, 37 lines modified |
135 | ············} | 185 | ············} |
136 | ············bssidBlocklistMonitor$BssidStatus·=·new·BssidBlocklistMonitor$BssidStatus(this,·s,·s2); | 186 | ············bssidBlocklistMonitor$BssidStatus·=·new·BssidBlocklistMonitor$BssidStatus(this,·s,·s2); |
137 | ············this.mBssidStatusMap.put(s,·bssidBlocklistMonitor$BssidStatus); | 187 | ············this.mBssidStatusMap.put(s,·bssidBlocklistMonitor$BssidStatus); |
138 | ········} | 188 | ········} |
139 | ········return·bssidBlocklistMonitor$BssidStatus; | 189 | ········return·bssidBlocklistMonitor$BssidStatus; |
140 | ····} | 190 | ····} |
141 | ···· | 191 | ···· |
142 | ····private·boolean·handleBssidConnectionFailureInternal(final·String·s,·final·String·s2,·final·int·n,·final·boolean·b)·{ | 192 | ····private·boolean·handleBssidConnectionFailureInternal(final·String·s,·final·String·s2,·final·int·n,·final·int·n2)·{ |
143 | ········final·BssidBlocklistMonitor$BssidStatus·incrementFailureCountForBssid·=·this.incrementFailureCountForBssid(s,·s2,·n); | 193 | ········final·BssidBlocklistMonitor$BssidStatus·incrementFailureCountForBssid·=·this.incrementFailureCountForBssid(s,·s2,·n); |
144 | ········final·int·failureThresholdForReason·=·this.getFailureThresholdForReason(n); | 194 | ········final·int·failureThresholdForReason·=·this.getFailureThresholdForReason(n); |
145 | ········final·int·bssidBlocklistStreak·=·this.mWifiScoreCard.getBssidBlocklistStreak(s2,·s,·n); | 195 | ········final·int·bssidBlocklistStreak·=·this.mWifiScoreCard.getBssidBlocklistStreak(s2,·s,·n); |
146 | ········if·(bssidBlocklistStreak·<=·0·&&·incrementFailureCountForBssid.failureCount[n]·<·failureThresholdForReason)·{ | 196 | ········if·(bssidBlocklistStreak·<=·0·&&·incrementFailureCountForBssid.failureCount[n]·<·failureThresholdForReason)·{ |
147 | ············return·false; | 197 | ············return·false; |
148 | ········} | 198 | ········} |
149 | ········if·(this.shouldWaitForWatchdogToTriggerFirst(s,·n))·{ | 199 | ········if·(this.shouldWaitForWatchdogToTriggerFirst(s,·n))·{ |
150 | ············return·false; | 200 | ············return·false; |
151 | ········} | 201 | ········} |
152 | ········int·n2·=·this.mContext.getResources().getInteger(2131034118); | 202 | ········this.addToBlocklist(incrementFailureCountForBssid,·this.getBlocklistDurationWithExponentialBackoff(bssidBlocklistStreak,·this.getBaseBlockDurationForReason(n)),·n,·n2); |
153 | ········if·((n·==·5·||·n·==·8)·&&·b)·{ | |
154 | ············n2·=·this.mContext.getResources().getInteger(2131034119); | |
155 | ········} | |
156 | ········this.addToBlocklist(incrementFailureCountForBssid,·this.getBlocklistDurationWithExponentialBackoff(bssidBlocklistStreak,·n2),·this.getFailureReasonString(n)); | |
157 | ········this.mWifiScoreCard.incrementBssidBlocklistStreak(s2,·s,·n); | 203 | ········this.mWifiScoreCard.incrementBssidBlocklistStreak(s2,·s,·n); |
158 | ········return·true; | 204 | ········return·true; |
159 | ····} | 205 | ····} |
160 | ···· | 206 | ···· |
161 | ····private·BssidBlocklistMonitor$BssidStatus·incrementFailureCountForBssid(final·String·s,·final·String·s2,·final·int·n)·{ | 207 | ····private·BssidBlocklistMonitor$BssidStatus·incrementFailureCountForBssid(final·String·s,·final·String·s2,·final·int·n)·{ |
162 | ········final·BssidBlocklistMonitor$BssidStatus·orCreateBssidStatus·=·this.getOrCreateBssidStatus(s,·s2); | 208 | ········final·BssidBlocklistMonitor$BssidStatus·orCreateBssidStatus·=·this.getOrCreateBssidStatus(s,·s2); |
163 | ········orCreateBssidStatus.incrementFailureCount(n); | 209 | ········orCreateBssidStatus.incrementFailureCount(n); |
164 | ········return·orCreateBssidStatus; | 210 | ········return·orCreateBssidStatus; |
165 | ····} | 211 | ····} |
166 | ···· | 212 | ···· |
167 | ····private·boolean·isValidNetworkAndFailureReason(final·String·s,·final·String·s2,·final·int·n)·{ | 213 | ····private·boolean·isValidNetworkAndFailureReason(final·String·s,·final·String·s2,·final·int·n)·{ |
168 | ········if·(s·!=·null·&&·s2·!=·null·&&·!"<unknown·ssid>".equals(s2)·&&·!s.equals("any")·&&·n·>=·0·&&·n·<·9)·{ | 214 | ········if·(s·!=·null·&&·s2·!=·null·&&·!"<unknown·ssid>".equals(s2)·&&·!s.equals("any")·&&·n·>=·0·&&·n·<·12)·{ |
169 | ············return·true; | 215 | ············return·true; |
170 | ········} | 216 | ········} |
171 | ········final·StringBuilder·sb·=·new·StringBuilder(); | 217 | ········final·StringBuilder·sb·=·new·StringBuilder(); |
172 | ········sb.append("Invalid·input:·BSSID="); | 218 | ········sb.append("Invalid·input:·BSSID="); |
173 | ········sb.append(s); | 219 | ········sb.append(s); |
174 | ········sb.append(",·SSID="); | 220 | ········sb.append(",·SSID="); |
175 | ········sb.append(s2); | 221 | ········sb.append(s2); |
Offset 191, 35 lines modified | Offset 237, 39 lines modified |
191 | ············b·=·b2; | 237 | ············b·=·b2; |
192 | ········} | 238 | ········} |
193 | ········return·b; | 239 | ········return·b; |
194 | ····} | 240 | ····} |
195 | ···· | 241 | ···· |
196 | ····private·Stream·updateAndGetBssidBlocklistInternal()·{ | 242 | ····private·Stream·updateAndGetBssidBlocklistInternal()·{ |
197 | ········final·Stream.Builder<Object>·builder·=·Stream.builder(); | 243 | ········final·Stream.Builder<Object>·builder·=·Stream.builder(); |
198 | ········this.mBssidStatusMap.entrySet().removeIf((Predicate)new·-$$Lambda$BssidBlocklistMonitor$vhAcFFsSj5nGpzwlPOvUvRBPb6k(this,·this.mClock.getWallClockMillis(),·(Stream.Builder)builder)); | 244 | ········this.mBssidStatusMap.entrySet().removeIf((Predicate)new·-$$Lambda$BssidBlocklistMonitor$I2EPZj0K8dvxVGynj3cc2j_QR1s(this,·this.mClock.getWallClockMillis(),·(Stream.Builder)builder)); |
199 | ········return·builder.build(); | 245 | ········return·builder.build(); |
200 | ····} | 246 | ····} |
201 | ···· | 247 | ···· |
202 | ····public·void·blockBssidForDurationMs(final·String·s,·final·String·s2,·final·long·n)·{ | 248 | ····public·void·blockBssidForDurationMs(final·String·s,·final·String·s2,·final·long·n,·final·int·n2,·final·int·n3)·{ |
203 | ········if·(s·==·null·||·s2·==·null·||·"<unknown·ssid>".equals(s2)·||·s.equals("any")·||·n·<=·0L)·{ | 249 | ········if·(n·<=·0L·||·this.isValidNetworkAndFailureReason(s,·s2,·n2))·{ |
204 | ············final·StringBuilder·sb·=·new·StringBuilder(); | 250 | ············final·StringBuilder·sb·=·new·StringBuilder(); |
205 | ············sb.append("Invalid·input:·BSSID="); | 251 | ············sb.append("Invalid·input:·BSSID="); |
206 | ············sb.append(s); | 252 | ············sb.append(s); |
207 | ············sb.append(",·SSID="); | 253 | ············sb.append(",·SSID="); |
208 | ············sb.append(s2); | 254 | ············sb.append(s2); |
209 | ············sb.append(",·durationMs="); | 255 | ············sb.append(",·durationMs="); |
210 | ············sb.append(n); | 256 | ············sb.append(n); |
| 257 | ············sb.append(",·blockReason="); |
| 258 | ············sb.append(n2); |
| 259 | ············sb.append(",·rssi="); |
| 260 | ············sb.append(n3); |
211 | ············Log.e("BssidBlocklistMonitor",·sb.toString()); | 261 | ············Log.e("BssidBlocklistMonitor",·sb.toString()); |
212 | ············return; | 262 | ············return; |
213 | ········} | 263 | ········} |
214 | ········final·BssidBlocklistMonitor$BssidStatus·orCreateBssidStatus·=·this.getOrCreateBssidStatus(s,·s2); | 264 | ········final·BssidBlocklistMonitor$BssidStatus·orCreateBssidStatus·=·this.getOrCreateBssidStatus(s,·s2); |
215 | ········if·(orCreateBssidStatus.isInBlocklist·&&·orCreateBssidStatus.blocklistEndTimeMs·-·this.mClock.getWallClockMillis()·>·n)·{ | 265 | ········if·(orCreateBssidStatus.isInBlocklist·&&·orCreateBssidStatus.blocklistEndTimeMs·-·this.mClock.getWallClockMillis()·>·n)·{ |
216 | ············return; | 266 | ············return; |
217 | ········} | 267 | ········} |
218 | ········this.addToBlocklist(orCreateBssidStatus,·n,·"BlockedByFramework"); | 268 | ········this.addToBlocklist(orCreateBssidStatus,·n,·n2,·n3); |
219 | ····} | 269 | ····} |
220 | ···· | 270 | ···· |
221 | ····public·void·clearBssidBlocklist()·{ | 271 | ····public·void·clearBssidBlocklist()·{ |
222 | ········if·(this.mBssidStatusMap.size()·>·0)·{ | 272 | ········if·(this.mBssidStatusMap.size()·>·0)·{ |
223 | ············final·int·size·=·this.mBssidStatusMap.size(); | 273 | ············final·int·size·=·this.mBssidStatusMap.size(); |
224 | ············final·Iterator<BssidBlocklistMonitor$BssidStatus>·iterator·=·this.mBssidStatusMap.values().iterator(); | 274 | ············final·Iterator<BssidBlocklistMonitor$BssidStatus>·iterator·=·this.mBssidStatusMap.values().iterator(); |
225 | ············while·(iterator.hasNext())·{ | 275 | ············while·(iterator.hasNext())·{ |
Offset 256, 20 lines modified | Offset 306, 23 lines modified |
256 | ········this.mBssidStatusHistoryLogger.dump(printWriter); | 306 | ········this.mBssidStatusHistoryLogger.dump(printWriter); |
257 | ····} | 307 | ····} |
258 | ···· | 308 | ···· |
259 | ····public·int·getBssidStatusHistoryLoggerSize()·{ | 309 | ····public·int·getBssidStatusHistoryLoggerSize()·{ |
260 | ········return·this.mBssidStatusHistoryLogger.size(); | 310 | ········return·this.mBssidStatusHistoryLogger.size(); |
261 | ····} | 311 | ····} |
262 | ···· | 312 | ···· |
263 | ····public·int·getNumBlockedBssidsForSsid(final·String·s)·{ | 313 | ····public·Set·getFailureReasonsForSsid(final·String·s)·{ |
264 | ········return·(int)this.updateAndGetBssidBlocklistInternal().filter((Predicate)new·-$$Lambda$BssidBlocklistMonitor$ZVbr9oSV2aA_MGjIFf8LUK7Kz1E(s)).count(); | 314 | ········if·(s·==·null)·{ |
| 315 | ············return·Collections.emptySet(); |
| 316 | ········} |
| 317 | ········return·this.mBssidStatusMap.values().stream().filter((Predicate<?·super·Object>)new·-$$Lambda$BssidBlocklistMonitor$Mg2ZjValmGZuzQbBHBGHCp_UiKY(s)).map((Function<?·super·Object,·?>)-$$Lambda$BssidBlocklistMonitor$n_aQ5ms9qITu5S1AT92r3rwlwxc.INSTANCE).collect((Collector<?·super·Object,·Object,·Set<?·super·Object>>)Collectors.toSet()); |
265 | ····} | 318 | ····} |
266 | ···· | 319 | ···· |
267 | ····public·boolean·handleBssidConnectionFailure(final·String·s,·final·String·s2,·final·int·n,·final·boolean·b)·{ | 320 | ····public·boolean·handleBssidConnectionFailure(final·String·s,·final·String·s2,·final·int·n,·final·int·n2)·{ |
268 | ········return·this.isValidNetworkAndFailureReason(s,·s2,·n)·&&·(n·!=·8·||·this.mClock.getWallClockMillis()·-·this.mWifiScoreCard.getBssidConnectionTimestampMs(s2,·s)·<=·this.mContext.getResources().getInteger(2131034112))·&&·this.handleBssidConnectionFailureInternal(s,·s2,·n,·b); | 321 | ········return·this.isValidNetworkAndFailureReason(s,·s2,·n)·&&·(n·!=·8·||·this.mClock.getWallClockMillis()·-·this.mWifiScoreCard.getBssidConnectionTimestampMs(s2,·s)·<=·this.mContext.getResources().getInteger(2131034112))·&&·this.handleBssidConnectionFailureInternal(s,·s2,·n,·n2); |
269 | ····} | 322 | ····} |
270 | ···· | 323 | ···· |
271 | ····public·void·handleBssidConnectionSuccess(final·String·s,·final·String·s2)·{ | 324 | ····public·void·handleBssidConnectionSuccess(final·String·s,·final·String·s2)·{ |
272 | ········this.mWifiScoreCard.resetBssidBlocklistStreak(s2,·s,·0); | 325 | ········this.mWifiScoreCard.resetBssidBlocklistStreak(s2,·s,·0); |
273 | ········final·WifiScoreCard·mWifiScoreCard·=·this.mWifiScoreCard; | 326 | ········final·WifiScoreCard·mWifiScoreCard·=·this.mWifiScoreCard; |
274 | ········final·int·n·=·2; | 327 | ········final·int·n·=·2; |
275 | ········mWifiScoreCard.resetBssidBlocklistStreak(s2,·s,·n); | 328 | ········mWifiScoreCard.resetBssidBlocklistStreak(s2,·s,·n); |
Offset 287, 14 lines modified | Offset 340, 15 lines modified |
287 | ········mWifiScoreCard5.resetBssidBlocklistStreak(s2,·s,·n5); | 340 | ········mWifiScoreCard5.resetBssidBlocklistStreak(s2,·s,·n5); |
288 | ········final·long·wallClockMillis·=·this.mClock.getWallClockMillis(); | 341 | ········final·long·wallClockMillis·=·this.mClock.getWallClockMillis(); |
289 | ········final·long·n6·=·wallClockMillis·-·this.mWifiScoreCard.setBssidConnectionTimestampMs(s2,·s,·wallClockMillis); | 342 | ········final·long·n6·=·wallClockMillis·-·this.mWifiScoreCard.setBssidConnectionTimestampMs(s2,·s,·wallClockMillis); |
290 | ········final·long·n7·=·lcmp(n6,·BssidBlocklistMonitor.ABNORMAL_DISCONNECT_RESET_TIME_MS); | 343 | ········final·long·n7·=·lcmp(n6,·BssidBlocklistMonitor.ABNORMAL_DISCONNECT_RESET_TIME_MS); |
291 | ········final·int·n8·=·8; | 344 | ········final·int·n8·=·8; |
292 | ········if·(n7·>·0)·{ | 345 | ········if·(n7·>·0)·{ |
293 | ············this.mWifiScoreCard.resetBssidBlocklistStreak(s2,·s,·n8); | 346 | ············this.mWifiScoreCard.resetBssidBlocklistStreak(s2,·s,·n8); |
| 347 | ············this.mWifiScoreCard.resetBssidBlocklistStreak(s2,·s,·11); |
294 | ········} | 348 | ········} |
295 | ········final·BssidBlocklistMonitor$BssidStatus·bssidBlocklistMonitor$BssidStatus·=·(BssidBlocklistMonitor$BssidStatus)this.mBssidStatusMap.get(s); | 349 | ········final·BssidBlocklistMonitor$BssidStatus·bssidBlocklistMonitor$BssidStatus·=·(BssidBlocklistMonitor$BssidStatus)this.mBssidStatusMap.get(s); |
296 | ········if·(bssidBlocklistMonitor$BssidStatus·==·null)·{ | 350 | ········if·(bssidBlocklistMonitor$BssidStatus·==·null)·{ |
297 | ············return; | 351 | ············return; |
298 | ········} | 352 | ········} |
299 | ········final·int[]·failureCount·=·bssidBlocklistMonitor$BssidStatus.failureCount; | 353 | ········final·int[]·failureCount·=·bssidBlocklistMonitor$BssidStatus.failureCount; |
300 | ········failureCount[n]·=·(failureCount[0]·=·0); | 354 | ········failureCount[n]·=·(failureCount[0]·=·0); |
Offset 326, 26 lines modified | Offset 380, 73 lines modified |
326 | ········final·int·n·=·1; | 380 | ········final·int·n·=·1; |
327 | ········mWifiScoreCard.resetBssidBlocklistStreak(s2,·s,·n); | 381 | ········mWifiScoreCard.resetBssidBlocklistStreak(s2,·s,·n); |
328 | ········final·BssidBlocklistMonitor$BssidStatus·bssidBlocklistMonitor$BssidStatus·=·(BssidBlocklistMonitor$BssidStatus)this.mBssidStatusMap.get(s); | 382 | ········final·BssidBlocklistMonitor$BssidStatus·bssidBlocklistMonitor$BssidStatus·=·(BssidBlocklistMonitor$BssidStatus)this.mBssidStatusMap.get(s); |
329 | ········if·(bssidBlocklistMonitor$BssidStatus·==·null)·{ | 383 | ········if·(bssidBlocklistMonitor$BssidStatus·==·null)·{ |
330 | ············return; | 384 | ············return; |
331 | ········} | 385 | ········} |
332 | ········bssidBlocklistMonitor$BssidStatus.failureCount[n]·=·0; | 386 | ········bssidBlocklistMonitor$BssidStatus.failureCount[n]·=·0; |
333 | ········bssidBlocklistMonitor$BssidStatus.removeFromBlocklist(); | 387 | ········if·(bssidBlocklistMonitor$BssidStatus.isInBlocklist)·{ |
| 388 | ············this.mBssidStatusHistoryLogger.add(bssidBlocklistMonitor$BssidStatus,·"Network·validation·success"); |
| 389 | ············this.mBssidStatusMap.remove(s); |
| 390 | ········} |
| 391 | ····} |
| 392 | ···· |
| 393 | ····public·void·tryEnablingBlockedBssids(final·List·list)·{ |
| 394 | ········if·(list·==·null)·{ |
| 395 | ············return; |
| 396 | ········} |
| 397 | ········final·Iterator<ScanDetail>·iterator·=·list.iterator(); |
| 398 | ········while·(iterator.hasNext())·{ |
| 399 | ············final·ScanResult·scanResult·=·((ScanDetail)iterator.next()).getScanResult(); |
| 400 | ············if·(scanResult·==·null)·{ |
| 401 | ················continue; |
| 402 | ············} |
| 403 | ············final·BssidBlocklistMonitor$BssidStatus·bssidBlocklistMonitor$BssidStatus·=·(BssidBlocklistMonitor$BssidStatus)this.mBssidStatusMap.get(scanResult.BSSID); |
| 404 | ············if·(bssidBlocklistMonitor$BssidStatus·==·null·||·!bssidBlocklistMonitor$BssidStatus.isInBlocklist)·{ |
| 405 | ················continue; |
| 406 | ············} |
| 407 | ············if·(!BssidBlocklistMonitor.LOW_RSSI_SENSITIVE_FAILURES.contains(bssidBlocklistMonitor$BssidStatus.blockReason))·{ |
| 408 | ················continue; |
| 409 | ············} |
| 410 | ············final·int·sufficientRssi·=·this.mScoringParams.getSufficientRssi(scanResult.frequency); |
| 411 | ············final·int·lastRssi·=·bssidBlocklistMonitor$BssidStatus.lastRssi; |
| 412 | ············if·(lastRssi·>=·sufficientRssi)·{ |
| 413 | ················continue; |
| 414 | ············} |
| 415 | ············final·int·level·=·scanResult.level; |
| 416 | ············if·(level·<·sufficientRssi·||·level·-·lastRssi·<·5)·{ |
| 417 | ················continue; |
| 418 | ············} |
| 419 | ············this.mBssidStatusHistoryLogger.add(bssidBlocklistMonitor$BssidStatus,·"rssi·significantly·improved"); |
| 420 | ············this.mBssidStatusMap.remove(bssidBlocklistMonitor$BssidStatus.bssid); |
| 421 | ········} |
334 | ····} | 422 | ····} |
335 | ···· | 423 | ···· |
336 | ····public·Set·updateAndGetBssidBlocklist()·{ | 424 | ····public·Set·updateAndGetBssidBlocklist()·{ |
337 | ········return·this.updateAndGetBssidBlocklistInternal().map((Function<?·super·Object,·?>)-$$Lambda$BssidBlocklistMonitor$IR5MLmoeNxDQ40KX7ud_PwD_e4M.INSTANCE).collect((Collector<?·super·Object,·Object,·Set<?·super·Object>>)Collectors.toSet()); | 425 | ········return·this.updateAndGetBssidBlocklistInternal().map((Function<?·super·Object,·?>)-$$Lambda$BssidBlocklistMonitor$y10i9Sv7__b6uz6ooLuITOo4q3A.INSTANCE).collect((Collector<?·super·Object,·Object,·Set<?·super·Object>>)Collectors.toSet()); |
| 426 | ····} |
| 427 | ···· |
| 428 | ····public·Set·updateAndGetBssidBlocklistForSsid(final·String·s)·{ |
| 429 | ········final·int·numBlockedBssidsForSsid·=·this.getNumBlockedBssidsForSsid(s); |
| 430 | ········final·Set·updateAndGetBssidBlocklist·=·this.updateAndGetBssidBlocklist(); |
| 431 | ········if·(this.getNumBlockedBssidsForSsid(s)·!=·numBlockedBssidsForSsid)·{ |
| 432 | ············this.updateFirmwareRoamingConfiguration(s); |
| 433 | ········} |
| 434 | ········return·updateAndGetBssidBlocklist; |
| 435 | ····} |
| 436 | ···· |
| 437 | ····public·int·updateAndGetNumBlockedBssidsForSsid(final·String·s)·{ |
| 438 | ········return·(int)this.updateAndGetBssidBlocklistInternal().filter((Predicate)new·-$$Lambda$BssidBlocklistMonitor$Sxk-cTBQCk_0SHkn4kYvzNh0-9I(s)).count(); |
338 | ····} | 439 | ····} |
339 | ···· | 440 | ···· |
340 | ····public·void·updateFirmwareRoamingConfiguration(final·String·s)·{ | 441 | ····public·void·updateFirmwareRoamingConfiguration(final·String·s)·{ |
341 | ········if·(!this.mConnectivityHelper.isFirmwareRoamingSupported())·{ | 442 | ········if·(!this.mConnectivityHelper.isFirmwareRoamingSupported())·{ |
342 | ············return; | 443 | ············return; |
343 | ········} | 444 | ········} |
344 | ········ArrayList<?>·list·=·(ArrayList<?>)this.updateAndGetBssidBlocklistInternal().filter((Predicate<?·super·Object>)new·-$$Lambda$BssidBlocklistMonitor$0kWHBEDMDwyFhtpdfzfhoXfS5rs(s)).sorted((Comparator<?·super·Object>)-$$Lambda$BssidBlocklistMonitor$N7MQuU-tDrYrPJo28yGDfhw_YgQ.INSTANCE).map((Function<?·super·Object,·?>)-$$Lambda$BssidBlocklistMonitor$CbqxqKCQkWJBWBwmO_hgFa9w7e8.INSTANCE).collect(Collectors.toCollection((Supplier<ArrayList<?>>)-$$Lambda$OGSS2qx6njxlnp0dnKb4lA3jnw8.INSTANCE)); | 445 | ········ArrayList<?>·list·=·(ArrayList<?>)this.updateAndGetBssidBlocklistInternal().filter((Predicate<?·super·Object>)new·-$$Lambda$BssidBlocklistMonitor$5goGSdaC6NEACYS7wbOaLCCxYCY(s)).sorted((Comparator<?·super·Object>)-$$Lambda$BssidBlocklistMonitor$kGzSfU6wcZ_IZhPmnAT9ry9_M3s.INSTANCE).map((Function<?·super·Object,·?>)-$$Lambda$BssidBlocklistMonitor$dxai51gBeXZGiG3dnDxmTMvlzcM.INSTANCE).collect(Collectors.toCollection((Supplier<ArrayList<?>>)-$$Lambda$OGSS2qx6njxlnp0dnKb4lA3jnw8.INSTANCE)); |
345 | ········final·int·maxNumBlacklistBssid·=·this.mConnectivityHelper.getMaxNumBlacklistBssid(); | 446 | ········final·int·maxNumBlacklistBssid·=·this.mConnectivityHelper.getMaxNumBlacklistBssid(); |
346 | ········if·(maxNumBlacklistBssid·<=·0)·{ | 447 | ········if·(maxNumBlacklistBssid·<=·0)·{ |
347 | ············final·StringBuilder·sb·=·new·StringBuilder(); | 448 | ············final·StringBuilder·sb·=·new·StringBuilder(); |
348 | ············sb.append("Invalid·max·BSSID·blocklist·size:··"); | 449 | ············sb.append("Invalid·max·BSSID·blocklist·size:··"); |
349 | ············sb.append(maxNumBlacklistBssid); | 450 | ············sb.append(maxNumBlacklistBssid); |
350 | ············Log.e("BssidBlocklistMonitor",·sb.toString()); | 451 | ············Log.e("BssidBlocklistMonitor",·sb.toString()); |
351 | ············return; | 452 | ············return; |