diff options
Diffstat (limited to 'service')
-rw-r--r-- | service/java/com/android/server/wifi/WifiServiceImpl.java | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java index 0772b4c80..9d12aa000 100644 --- a/service/java/com/android/server/wifi/WifiServiceImpl.java +++ b/service/java/com/android/server/wifi/WifiServiceImpl.java @@ -879,6 +879,14 @@ public class WifiServiceImpl extends BaseWifiService { mLog.info("startSoftAp uid=%").c(Binder.getCallingUid()).flush(); + SoftApConfiguration softApConfig = null; + if (wifiConfig != null) { + softApConfig = ApConfigUtil.fromWifiConfiguration(wifiConfig); + if (softApConfig == null) { + return false; + } + } + if (!mTetheredSoftApTracker.setEnablingIfAllowed()) { mLog.err("Tethering is already active.").flush(); return false; @@ -890,17 +898,14 @@ public class WifiServiceImpl extends BaseWifiService { mLohsSoftApTracker.stopAll(); } - if (wifiConfig != null) { - SoftApConfiguration softApConfig = ApConfigUtil.fromWifiConfiguration(wifiConfig); - if (softApConfig == null) return false; - return startSoftApInternal(new SoftApModeConfiguration( - WifiManager.IFACE_IP_MODE_TETHERED, - softApConfig, mTetheredSoftApTracker.getSoftApCapability())); - } else { - return startSoftApInternal(new SoftApModeConfiguration( - WifiManager.IFACE_IP_MODE_TETHERED, null, - mTetheredSoftApTracker.getSoftApCapability())); + if (!startSoftApInternal(new SoftApModeConfiguration( + WifiManager.IFACE_IP_MODE_TETHERED, softApConfig, + mTetheredSoftApTracker.getSoftApCapability()))) { + mTetheredSoftApTracker.setFailedWhileEnabling(); + return false; } + + return true; } private boolean validateSoftApBand(int apBand) { @@ -951,11 +956,15 @@ public class WifiServiceImpl extends BaseWifiService { mLohsSoftApTracker.stopAll(); } - return startSoftApInternal(new SoftApModeConfiguration( + if (!startSoftApInternal(new SoftApModeConfiguration( WifiManager.IFACE_IP_MODE_TETHERED, softApConfig, - mTetheredSoftApTracker.getSoftApCapability())); - } + mTetheredSoftApTracker.getSoftApCapability()))) { + mTetheredSoftApTracker.setFailedWhileEnabling(); + return false; + } + return true; + } /** * Internal method to start softap mode. Callers of this method should have already checked @@ -1053,6 +1062,14 @@ public class WifiServiceImpl extends BaseWifiService { } } + public void setFailedWhileEnabling() { + synchronized (mLock) { + if (mTetheredSoftApState == WIFI_AP_STATE_ENABLING) { + mTetheredSoftApState = WIFI_AP_STATE_FAILED; + } + } + } + public List<WifiClient> getConnectedClients() { synchronized (mLock) { return mTetheredSoftApConnectedClients; |