diff options
author | Rebecca Silberstein <silberst@google.com> | 2017-03-23 01:49:14 -0700 |
---|---|---|
committer | Rebecca Silberstein <silberst@google.com> | 2017-04-20 22:29:38 +0000 |
commit | edabcd4004fe1ad46e58ee973906913cc3edc79e (patch) | |
tree | 7ec968595861ad0904019aa489319243c250e286 /service | |
parent | 3871ff67f4a6970f1831fc8951392746c9e2bfa2 (diff) |
WifiServiceImpl: add new methods to start softap
Add the implementations for two new methods to control softap mode.
These methods will be called by other methods in WifiServiceImpl and
also by ConnectivityService. The calls are not intended to be called by
applications and will be protected by the NETWORK_STACK permission.
Note: this CL is adding the calls, they will be used in an upcoming CL.
Bug: 36540346
Test: frameworks/opt/net/wifi/tests/wifitests/runtests.sh
Test: frameworks/base/wifi/tests/runtests.sh
Change-Id: I6bc664a32c5df03db1dffb8db20330d9dc904113
Merged-In: I6bc664a32c5df03db1dffb8db20330d9dc904113
Merged-In: If1ab98324b4f860efa93286637a4fdcec7d8f775
Diffstat (limited to 'service')
-rw-r--r-- | service/java/com/android/server/wifi/WifiServiceImpl.java | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java index f83923979..a738ff026 100644 --- a/service/java/com/android/server/wifi/WifiServiceImpl.java +++ b/service/java/com/android/server/wifi/WifiServiceImpl.java @@ -16,6 +16,7 @@ package com.android.server.wifi; +import static com.android.server.connectivity.tethering.IControlsTethering.STATE_TETHERED; import static com.android.server.wifi.WifiController.CMD_AIRPLANE_TOGGLED; import static com.android.server.wifi.WifiController.CMD_BATTERY_CHANGED; import static com.android.server.wifi.WifiController.CMD_EMERGENCY_CALL_STATE_CHANGED; @@ -544,6 +545,11 @@ public class WifiServiceImpl extends IWifiManager.Stub { } } + private void enforceNetworkStackPermission() { + mContext.enforceCallingOrSelfPermission(android.Manifest.permission.NETWORK_STACK, + "WifiService"); + } + private void enforceAccessPermission() { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.ACCESS_WIFI_STATE, "WifiService"); @@ -700,6 +706,66 @@ public class WifiServiceImpl extends IWifiManager.Stub { } /** + * see {@link android.net.wifi.WifiManager#startSoftAp(WifiConfiguration)} + * @param wifiConfig SSID, security and channel details as + * part of WifiConfiguration + * @return {@code true} if softap start was triggered + * @throws SecurityException if the caller does not have permission to start softap + */ + @Override + public boolean startSoftAp(WifiConfiguration wifiConfig) { + // NETWORK_STACK is a signature only permission. + enforceNetworkStackPermission(); + + mLog.trace("startSoftAp uid=%").c(Binder.getCallingUid()).flush(); + + return startSoftApInternal(wifiConfig, STATE_TETHERED); + } + + private boolean startSoftApInternal(WifiConfiguration wifiConfig, int mode) { + mLog.trace("startSoftApInternal uid=% mode=%") + .c(Binder.getCallingUid()).c(mode).flush(); + + // null wifiConfig is a meaningful input for CMD_SET_AP + if (wifiConfig == null || isValid(wifiConfig)) { + // TODO: need a way to set the mode + mWifiController.sendMessage(CMD_SET_AP, 1, 0, wifiConfig); + return true; + } + Slog.e(TAG, "Invalid WifiConfiguration"); + return false; + } + + /** + * see {@link android.net.wifi.WifiManager#stopSoftAp()} + * @return {@code true} if softap stop was triggered + * @throws SecurityException if the caller does not have permission to stop softap + */ + @Override + public boolean stopSoftAp() { + // NETWORK_STACK is a signature only permission. + enforceNetworkStackPermission(); + + mLog.trace("stopSoftAp uid=%").c(Binder.getCallingUid()).flush(); + + // add checks here to make sure this is the proper caller - apps can't disable tethering or + // instances of local only hotspot that they didn't start. return false for those cases + + return stopSoftApInternal(); + } + + /** + * Internal method to stop softap mode. Callers of this method should have already checked + * proper permissions beyond the NetworkStack permission. + */ + private boolean stopSoftApInternal() { + mLog.trace("stopSoftApInternal uid=%").c(Binder.getCallingUid()).flush(); + + mWifiController.sendMessage(CMD_SET_AP, 0, 0); + return true; + } + + /** * see {@link WifiManager#getWifiApConfiguration()} * @return soft access point configuration * @throws SecurityException if the caller does not have permission to retrieve the softap |