diff --git a/wifi/frameworks/js/napi/src/wifi_napi_device.cpp b/wifi/frameworks/js/napi/src/wifi_napi_device.cpp index 83d782ad927e82e00c0431fa624fa596148546d2..25bef6935b2f7061baabc28eaab3d34b03d83dbd 100644 --- a/wifi/frameworks/js/napi/src/wifi_napi_device.cpp +++ b/wifi/frameworks/js/napi/src/wifi_napi_device.cpp @@ -401,7 +401,7 @@ napi_value AddUntrustedConfig(napi_env env, napi_callback_info info) asyncContext->executeFunc = [&](void* data) -> void { DeviceConfigContext *context = static_cast(data); TRACE_FUNC_CALL_NAME("wifiDevicePtr->AddUntrustedConfig"); - ErrCode ret = wifiDevicePtr->AddDeviceConfig(*context->config, context->networkId); + ErrCode ret = wifiDevicePtr->AddCandidateConfig(*context->config, context->networkId); if (context->networkId < 0 || ret != WIFI_OPT_SUCCESS) { context->networkId = -1; } @@ -422,21 +422,6 @@ napi_value AddUntrustedConfig(napi_env env, napi_callback_info info) return DoAsyncWork(env, asyncContext, argc, argv, nonCallbackArgNum); } -static int GetDeviceConfigId(WifiDeviceConfig *config) -{ - std::vector vecConfigs; - ErrCode ret = wifiDevicePtr->GetDeviceConfigs(vecConfigs); - if (ret != WIFI_OPT_SUCCESS) { - return INVALID_NETWORK_ID; - } - for (auto& each : vecConfigs) { - if (each.ssid == config->ssid) { - return each.networkId; - } - } - return INVALID_NETWORK_ID; -} - napi_value RemoveUntrustedConfig(napi_env env, napi_callback_info info) { TRACE_FUNC_CALL; @@ -466,21 +451,8 @@ napi_value RemoveUntrustedConfig(napi_env env, napi_callback_info info) asyncContext->executeFunc = [&](void* data) -> void { DeviceConfigContext *context = static_cast(data); - if (context->config == nullptr) { - return; - } - TRACE_FUNC_CALL_NAME("wifiDevicePtr->RemoveUntrustedConfig"); - int networkId = context->config->networkId; - if (networkId < 0) { - networkId = GetDeviceConfigId(context->config); - } - if (networkId < 0) { - WIFI_LOGE("RemoveUntrustedConfig parameter is invalid."); - context->errorCode = WIFI_OPT_INVALID_PARAM; - return; - } - WIFI_LOGI("RemoveUntrustedConfig: %{public}d", networkId); - context->errorCode = wifiDevicePtr->RemoveDevice(networkId); + TRACE_FUNC_CALL_NAME("wifiDevicePtr->RemoveCandidateConfig"); + context->errorCode = wifiDevicePtr->RemoveCandidateConfig(*context->config); }; asyncContext->completeFunc = [&](void* data) -> void { diff --git a/wifi/frameworks/native/include/wifi_device.h b/wifi/frameworks/native/include/wifi_device.h index 3205d2dc734eea674268c18b032856644c34f5b0..5b18abd36c9c4f499fe75c56e10e4b9958133673 100644 --- a/wifi/frameworks/native/include/wifi_device.h +++ b/wifi/frameworks/native/include/wifi_device.h @@ -85,6 +85,14 @@ public: */ virtual ErrCode RemoveCandidateConfig(int networkId) = 0; + /** + * @Description Remove a specified candidate hotspot configuration. + * + * @param config - WifiDeviceConfig object + * @return ErrCode - operation result + */ + virtual ErrCode RemoveCandidateConfig(const WifiDeviceConfig &config) = 0; + /** * @Description Connect to a candidate specified network. * diff --git a/wifi/frameworks/native/interfaces/i_wifi_device.h b/wifi/frameworks/native/interfaces/i_wifi_device.h index 19d81d93b6b07f75bc9f22419ba825e3a905e60e..4f526469b02ea5714ffb27158c68d7a813942e12 100644 --- a/wifi/frameworks/native/interfaces/i_wifi_device.h +++ b/wifi/frameworks/native/interfaces/i_wifi_device.h @@ -92,6 +92,14 @@ public: */ virtual ErrCode RemoveCandidateConfig(int networkId) = 0; + /** + * @Description Remove the wifi candidate device config by WifiDeviceConfig + * + * @param config - the candidate config to be removed + * @return ErrCode - operation result + */ + virtual ErrCode RemoveCandidateConfig(const WifiDeviceConfig &config) = 0; + /** * @Description Connect to a candidate specified network. * diff --git a/wifi/frameworks/native/src/wifi_device_impl.cpp b/wifi/frameworks/native/src/wifi_device_impl.cpp index 29b80ef15f55d09fa90a8161e50c94bf05586130..58180360aa579d4e21ebdd7efbfc8e232b3e91de 100644 --- a/wifi/frameworks/native/src/wifi_device_impl.cpp +++ b/wifi/frameworks/native/src/wifi_device_impl.cpp @@ -121,6 +121,12 @@ ErrCode WifiDeviceImpl::RemoveCandidateConfig(int networkId) return client_->RemoveCandidateConfig(networkId); } +ErrCode WifiDeviceImpl::RemoveCandidateConfig(const WifiDeviceConfig &config) +{ + RETURN_IF_FAIL(client_); + return client_->RemoveCandidateConfig(config); +} + ErrCode WifiDeviceImpl::ConnectToCandidateConfig(int networkId) { RETURN_IF_FAIL(client_); diff --git a/wifi/frameworks/native/src/wifi_device_impl.h b/wifi/frameworks/native/src/wifi_device_impl.h index 781a0961869c45813123924dffcc28e5a3d149b2..dd532023fc0512cd5b4e71e0c639e311aa304388 100644 --- a/wifi/frameworks/native/src/wifi_device_impl.h +++ b/wifi/frameworks/native/src/wifi_device_impl.h @@ -84,6 +84,14 @@ public: */ virtual ErrCode RemoveCandidateConfig(int networkId) override; + /** + * @Description Remove a specified candidate hotspot configuration. + * + * @param config - WifiDeviceConfig object + * @return ErrCode - operation result + */ + virtual ErrCode RemoveCandidateConfig(const WifiDeviceConfig &config) override; + /** * @Description Connect to a candidate specified network. * diff --git a/wifi/frameworks/native/src/wifi_device_proxy.cpp b/wifi/frameworks/native/src/wifi_device_proxy.cpp index 3841bae5afdb37a091e22298500ee2274154c117..78c5d7ab859b7ac97594d3d10c5cd41bae3ca4c2 100644 --- a/wifi/frameworks/native/src/wifi_device_proxy.cpp +++ b/wifi/frameworks/native/src/wifi_device_proxy.cpp @@ -277,6 +277,39 @@ ErrCode WifiDeviceProxy::AddCandidateConfig(const WifiDeviceConfig &config, int return WIFI_OPT_SUCCESS; } +ErrCode WifiDeviceProxy::RemoveCandidateConfig(const WifiDeviceConfig &config) +{ + if (mRemoteDied) { + WIFI_LOGE("failed to `%{public}s`,remote service is died!", __func__); + return WIFI_OPT_FAILED; + } + MessageOption option; + MessageParcel data, reply; + if (!data.WriteInterfaceToken(GetDescriptor())) { + WIFI_LOGE("Write interface token error: %{public}s", __func__); + return WIFI_OPT_FAILED; + } + data.WriteInt32(0); + /* Write a flag: 1-remove config by networkId, 2-remove config by WifiDeviceConfig */ + data.WriteInt32(2); + WriteDeviceConfig(config, data); + int error = Remote()->SendRequest(WIFI_SVR_CMD_REMOVE_CANDIDATE_CONFIG, data, reply, option); + if (error != ERR_NONE) { + WIFI_LOGE("Set Attr(%{public}d) failed,error=%{public}d", WIFI_SVR_CMD_REMOVE_CANDIDATE_CONFIG, error); + return WIFI_OPT_FAILED; + } + int exception = reply.ReadInt32(); + if (exception) { + return WIFI_OPT_FAILED; + } + int ret = reply.ReadInt32(); + if (ret != WIFI_OPT_SUCCESS) { + return ErrCode(ret); + } + + return WIFI_OPT_SUCCESS; +} + ErrCode WifiDeviceProxy::RemoveCandidateConfig(int networkId) { if (mRemoteDied) { @@ -290,6 +323,8 @@ ErrCode WifiDeviceProxy::RemoveCandidateConfig(int networkId) return WIFI_OPT_FAILED; } data.WriteInt32(0); + /* Write a flag: 1-remove config by networkId, 2-remove config by WifiDeviceConfig */ + data.WriteInt32(1); data.WriteInt32(networkId); int error = Remote()->SendRequest(WIFI_SVR_CMD_REMOVE_CANDIDATE_CONFIG, data, reply, option); if (error != ERR_NONE) { diff --git a/wifi/frameworks/native/src/wifi_device_proxy.h b/wifi/frameworks/native/src/wifi_device_proxy.h index d0f8dde882b09eb378b2d247db1967895d17015f..98dc27ce83f9505f725b78e83bbb5f97b7520219 100644 --- a/wifi/frameworks/native/src/wifi_device_proxy.h +++ b/wifi/frameworks/native/src/wifi_device_proxy.h @@ -81,6 +81,14 @@ public: */ ErrCode PutWifiProtectRef(const std::string &protectName) override; + /** + * @Description Remove a specified untrusted hotspot configuration. + * + * @param config - WifiDeviceConfig object + * @return ErrCode - operation result + */ + ErrCode RemoveCandidateConfig(const WifiDeviceConfig &config) override; + /** * @Description Adds a specified untrusted hotspot configuration. * diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_service_impl.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_service_impl.cpp index 7d810de239c96e6e666d6bbfec01e68181aa330f..632f97dff0c86d4490c16683533f373dc50e55af 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_service_impl.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_service_impl.cpp @@ -455,34 +455,77 @@ ErrCode WifiDeviceServiceImpl::ConnectToCandidateConfig(int networkId) return pService->ConnectToCandidateConfig(uid, networkId); } -ErrCode WifiDeviceServiceImpl::RemoveCandidateConfig(int networkId) +ErrCode WifiDeviceServiceImpl::CheckRemoveCandidateConfig(void) { if (WifiPermissionUtils::VerifySetWifiInfoPermission() == PERMISSION_DENIED) { - WIFI_LOGE("RemoveCandidateConfig:VerifySetWifiInfoPermission PERMISSION_DENIED!"); + WIFI_LOGE("CheckRemoveCandidateConfig:VerifySetWifiInfoPermission PERMISSION_DENIED!"); return WIFI_OPT_PERMISSION_DENIED; } - if (networkId < INVALID_NETWORK_ID) { - WIFI_LOGE("RemoveCandidateConfig networkId invalid param!"); - return WIFI_OPT_INVALID_PARAM; - } - if (!IsStaServiceRunning()) { - WIFI_LOGE("RemoveCandidateConfig:IsStaServiceRunning not running!"); + WIFI_LOGE("CheckRemoveCandidateConfig:IsStaServiceRunning not running!"); return WIFI_OPT_STA_NOT_OPENED; } + return WIFI_OPT_SUCCESS; +} + +ErrCode WifiDeviceServiceImpl::RemoveCandidateConfig(const WifiDeviceConfig &config) +{ + ErrCode ret = CheckRemoveCandidateConfig(); + if (ret != WIFI_OPT_SUCCESS) { + return ret; + } + /* check the caller's uid */ int uid = 0; if (CheckCallingUid(uid) != WIFI_OPT_SUCCESS) { WIFI_LOGE("CheckCallingUid failed!"); return WIFI_OPT_INVALID_PARAM; } - IStaService *pService = WifiServiceManager::GetInstance().GetStaServiceInst(); if (pService == nullptr) { + WIFI_LOGE("pService is nullptr!"); return WIFI_OPT_STA_NOT_OPENED; } + /* get all candidate configs */ + std::vector configs; + if (WifiConfigCenter::GetInstance().GetCandidateConfigs(uid, configs) != 0) { + WIFI_LOGE("NOT find the caller's configs!"); + return WIFI_OPT_INVALID_CONFIG; + } + /* find the networkId of the removed config */ + int networkId = INVALID_NETWORK_ID; + size_t size = configs.size(); + for (size_t i = 0; i < size; i++) { + if (configs[i].ssid == config.ssid) { + networkId = configs[i].networkId; + WIFI_LOGI("find the removed config, networkId:%{public}d!", networkId); + break; + } + } + /* removed the config */ + if (networkId != INVALID_NETWORK_ID) { + return pService->RemoveCandidateConfig(uid, networkId); + } + return WIFI_OPT_INVALID_CONFIG; +} +ErrCode WifiDeviceServiceImpl::RemoveCandidateConfig(int networkId) +{ + ErrCode ret = CheckRemoveCandidateConfig(); + if (ret != WIFI_OPT_SUCCESS) { + return ret; + } + int uid = 0; + if (CheckCallingUid(uid) != WIFI_OPT_SUCCESS) { + WIFI_LOGE("CheckCallingUid failed!"); + return WIFI_OPT_INVALID_PARAM; + } + IStaService *pService = WifiServiceManager::GetInstance().GetStaServiceInst(); + if (pService == nullptr) { + WIFI_LOGE("pService is nullptr!"); + return WIFI_OPT_STA_NOT_OPENED; + } if (networkId == INVALID_NETWORK_ID) { return pService->RemoveAllCandidateConfig(uid); } else { diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_service_impl.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_service_impl.h index db8fa4737b0c7f23242f1c18446f86d5112ec04a..a3c4bde80865b1fb8a97d97437e493dbe8a9aae0 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_service_impl.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_service_impl.h @@ -143,6 +143,8 @@ public: ErrCode RemoveCandidateConfig(int networkId) override; + ErrCode RemoveCandidateConfig(const WifiDeviceConfig &config) override; + ErrCode GetCandidateConfigs(std::vector &result) override; #ifndef OHOS_ARCH_LITE @@ -160,6 +162,7 @@ private: static void SaBasicDump(std::string& result); static void SigHandler(int sig); static bool IsProcessNeedToRestart(); + ErrCode CheckRemoveCandidateConfig(void); #ifndef OHOS_ARCH_LITE void RegisterAppRemoved(); void UnRegisterAppRemoved(); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_stub.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_stub.cpp index 18eee3b775f308f56069e0f45a31e556b7eab74e..a2e0e7da73396858d53b085cf5e0b0e5e62903d3 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_stub.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_device_stub.cpp @@ -673,9 +673,19 @@ void WifiDeviceStub::OnConnectToCandidateConfig(uint32_t code, MessageParcel &da void WifiDeviceStub::OnRemoveCandidateConfig(uint32_t code, MessageParcel &data, MessageParcel &reply) { WIFI_LOGD("run %{public}s code %{public}u, datasize %{public}zu", __func__, code, data.GetRawDataSize()); - int networkId = data.ReadInt32(); - ErrCode ret = RemoveCandidateConfig(networkId); - + ErrCode ret = WIFI_OPT_FAILED; + int flag = data.ReadInt32(); + /* Read a flag: 1-remove config by networkId, 2-remove config by WifiDeviceConfig */ + if (flag == 1) { + int networkId = data.ReadInt32(); + WIFI_LOGI("Remove candidate config by networkId: %{public}d", networkId); + ret = RemoveCandidateConfig(networkId); + } else { + WifiDeviceConfig config; + ReadWifiDeviceConfig(data, config); + WIFI_LOGD("Remove candidate config by config: %{private}s", config.ssid.c_str()); + ret = RemoveCandidateConfig(config); + } reply.WriteInt32(0); reply.WriteInt32(ret); return;