diff options
author | Roshan Pius <rpius@google.com> | 2018-11-08 09:08:23 -0800 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2018-11-16 16:30:41 -0800 |
commit | 26672dba37034ce8ffdaa1350e9fb1529e2f0b70 (patch) | |
tree | e7fc53e586bffcc0966119de22438ee4961fdc2a /service/java/com/android/server/wifi | |
parent | ca7e72ad7fb48243cf0f00cec05c4d03d984d7ed (diff) | |
download | android_frameworks_opt_net_wifi-26672dba37034ce8ffdaa1350e9fb1529e2f0b70.tar.gz android_frameworks_opt_net_wifi-26672dba37034ce8ffdaa1350e9fb1529e2f0b70.tar.bz2 android_frameworks_opt_net_wifi-26672dba37034ce8ffdaa1350e9fb1529e2f0b70.zip |
ClientModeImpl: Attach WifiNetworkAgentSpecifier
This is needed for matching the specific network request with the
network agent created for servicing it.
Note: WifiNetworkAgentSpecifier will continue to match any generic
requests. So, we can always send the specifier. The requestorUid will be
-1 if there is no specific request active.
Bug: 113878056
Test: ./frameworks/opt/net/wifi/tests/wifitests/runtests.sh
Test: act.py -c wifi_manager.config -tb dut-name -tc WifiManagerTest
Change-Id: I0c8b4b3a552b7765069520f1fc57fa70c9ade8b7
Diffstat (limited to 'service/java/com/android/server/wifi')
-rw-r--r-- | service/java/com/android/server/wifi/ClientModeImpl.java | 14 | ||||
-rw-r--r-- | service/java/com/android/server/wifi/WifiNetworkFactory.java | 19 |
2 files changed, 33 insertions, 0 deletions
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java index a122d5db0..2c103d56f 100644 --- a/service/java/com/android/server/wifi/ClientModeImpl.java +++ b/service/java/com/android/server/wifi/ClientModeImpl.java @@ -59,6 +59,7 @@ import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiEnterpriseConfig; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; +import android.net.wifi.WifiNetworkAgentSpecifier; import android.net.wifi.WifiSsid; import android.net.wifi.hotspot2.IProvisioningCallback; import android.net.wifi.hotspot2.OsuProvider; @@ -4331,6 +4332,15 @@ public class ClientModeImpl extends StateMachine { } } + private WifiNetworkAgentSpecifier getNetworkAgentSpecifier() { + WifiConfiguration currentWifiConfiguration = getCurrentWifiConfiguration(); + if (currentWifiConfiguration == null) return null; + currentWifiConfiguration.BSSID = getCurrentBSSID(); + WifiNetworkAgentSpecifier wns = new WifiNetworkAgentSpecifier(currentWifiConfiguration, + mNetworkFactory.getActiveSpecificNetworkRequestUid(currentWifiConfiguration)); + return wns; + } + /** * Method to update network capabilities from the current WifiConfiguration. */ @@ -4368,6 +4378,8 @@ public class ClientModeImpl extends StateMachine { } else { result.setSSID(null); } + // Fill up the network specifier for this connection. + result.setNetworkSpecifier(getNetworkAgentSpecifier()); mNetworkAgent.sendNetworkCapabilities(result); } @@ -4596,6 +4608,8 @@ public class ClientModeImpl extends StateMachine { } else { nc = mNetworkCapabilitiesFilter; } + // Fill up the network specifier for this connection. + nc.setNetworkSpecifier(getNetworkAgentSpecifier()); mNetworkAgent = new WifiNetworkAgent(getHandler().getLooper(), mContext, "WifiNetworkAgent", mNetworkInfo, nc, mLinkProperties, 60, mNetworkMisc); diff --git a/service/java/com/android/server/wifi/WifiNetworkFactory.java b/service/java/com/android/server/wifi/WifiNetworkFactory.java index 01453fa33..1c1d5e57c 100644 --- a/service/java/com/android/server/wifi/WifiNetworkFactory.java +++ b/service/java/com/android/server/wifi/WifiNetworkFactory.java @@ -40,6 +40,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.Messenger; +import android.os.Process; import android.os.RemoteException; import android.os.WorkSource; import android.text.TextUtils; @@ -429,6 +430,24 @@ public class WifiNetworkFactory extends NetworkFactory { return mGenericConnectionReqCount > 0 || mActiveSpecificNetworkRequest != null; } + /** + * Return the uid of the specific network request being processed if connected to the requested + * network. + * + * @param connectedNetwork WifiConfiguration corresponding to the connected network. + * @return uid of the specific request (if any), else -1. + */ + public int getActiveSpecificNetworkRequestUid(@NonNull WifiConfiguration connectedNetwork) { + if (mUserSelectedNetwork == null || connectedNetwork == null) return Process.INVALID_UID; + if (!isUserSelectedNetwork(connectedNetwork)) { + Log.w(TAG, "Connected to unknown network " + connectedNetwork + ". Ignoring..."); + return Process.INVALID_UID; + } + return mActiveSpecificNetworkRequestSpecifier != null + ? mActiveSpecificNetworkRequestSpecifier.requestorUid + : Process.INVALID_UID; + } + private void handleConnectToNetworkUserSelection(WifiConfiguration network) { Log.d(TAG, "User initiated connect to network: " + network.SSID); |