diff --git a/services/frameworks/inc/net_observer/net_observer.h b/services/frameworks/inc/net_observer/net_observer.h index 7d16708ff974bb9da62c9636beee63c6905a76bc..f228ebc26bb1c44133d11c60e95f7c603c33af20 100644 --- a/services/frameworks/inc/net_observer/net_observer.h +++ b/services/frameworks/inc/net_observer/net_observer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 Huawei Device Co., Ltd. + * Copyright (C) 2024-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -16,7 +16,6 @@ #ifndef NET_OBSERVER_H #define NET_OBSERVER_H -#include #include "net_all_capabilities.h" #include "net_conn_callback_stub.h" #include "net_specifier.h" @@ -29,11 +28,9 @@ public: const OHOS::sptr &netAllCap) final; int32_t NetLost(OHOS::sptr &netHandle) final; int32_t NetAvailable(OHOS::sptr &netHandle) final; - bool IsObserverStarted(); private: - std::thread regThread_; - bool isObserverStarted_; + OHOS::sptr netConnCallback_; int32_t HandleNetAllCap(const OHOS::NetManagerStandard::NetAllCapabilities &netAllCap); }; diff --git a/services/frameworks/src/net_observer/net_observer.cpp b/services/frameworks/src/net_observer/net_observer.cpp index 7fafd5134477c63587d708af29b3780410a4cd3c..b69d43fcf6bc691ff2d0432d72709a07a42a5979 100644 --- a/services/frameworks/src/net_observer/net_observer.cpp +++ b/services/frameworks/src/net_observer/net_observer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 Huawei Device Co., Ltd. + * Copyright (C) 2024-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -15,9 +15,6 @@ #include "net_observer.h" -#include -#include - #include "account_task_manager.h" #include "common_defs.h" #include "device_auth.h" @@ -29,49 +26,29 @@ using namespace OHOS; using namespace OHOS::NetManagerStandard; -static sptr g_netCallback = nullptr; - void NetObserver::StartObserver() { LOGI("[NetObserver]: Start to register net connection callback."); - if (isObserverStarted_) { - LOGI("[NetObserver]: Observer already started."); + NetSpecifier netSpecifier; + NetAllCapabilities netAllCapabilities; + netAllCapabilities.netCaps_.insert(NetManagerStandard::NetCap::NET_CAPABILITY_INTERNET); + netSpecifier.ident_ = ""; + netSpecifier.netCapabilities_ = netAllCapabilities; + sptr specifier = new NetSpecifier(netSpecifier); + int32_t ret = NetConnClient::GetInstance().RegisterNetConnCallback(specifier, this, 0); + if (ret == NetConnResultCode::NET_CONN_SUCCESS) { + LOGI("[NetObserver]: Register net connection callback succeeded."); + netConnCallback_ = this; return; } - isObserverStarted_ = true; - NetObserver *observer = static_cast(this); - regThread_ = std::thread([observer]() { - NetSpecifier netSpecifier; - NetAllCapabilities netAllCapabilities; - netAllCapabilities.netCaps_.insert(NetManagerStandard::NetCap::NET_CAPABILITY_INTERNET); - netSpecifier.ident_ = ""; - netSpecifier.netCapabilities_ = netAllCapabilities; - sptr specifier = new NetSpecifier(netSpecifier); - constexpr uint32_t RETRY_MAX_TIMES = 10; - uint32_t retryCount = 0; - do { - if (!observer->IsObserverStarted()) { - LOGW("[NetObserver]: observer stopped, can not register!"); - return; - } - int32_t ret = NetConnClient::GetInstance().RegisterNetConnCallback(specifier, observer, 0); - if (ret == NetConnResultCode::NET_CONN_SUCCESS) { - LOGI("[NetMgrSubsysterm][RegisterNetConnCallback]: Register net connection callback succeeded."); - g_netCallback = observer; - return; - } - retryCount++; - LOGW("[NetMgrSubsysterm][RegisterNetConnCallback]: Register failed, errCode = %" LOG_PUB "d, retry.", ret); - sleep(1); - } while (retryCount < RETRY_MAX_TIMES); - LOGE("[NetMgrSubsysterm][RegisterNetConnCallback]: Register net connection callback failed!"); - }); + LOGE("[NetObserver]: Register net connection callback failed, errCode = %" LOG_PUB "d.", ret); } int32_t NetObserver::NetCapabilitiesChange(sptr &netHandle, const sptr &netAllCap) { LOGI("[NetObserver]: Net capabilities change."); if (netAllCap == nullptr) { + LOGE("[NetObserver]: netAllCap is null!"); return 0; } return HandleNetAllCap(*netAllCap); @@ -98,35 +75,20 @@ int32_t NetObserver::HandleNetAllCap(const NetAllCapabilities &netAllCap) } return 0; } - LOGI("[NetObserver]: Net available."); + LOGI("[NetObserver]: Net available, reload credential manager."); int32_t res = ExecuteAccountAuthCmd(DEFAULT_OS_ACCOUNT, RELOAD_CRED_MGR, nullptr, nullptr); - LOGI("[NetObserver]: Reload credential manager res: %" LOG_PUB "d", res); + LOGI("[NetObserver]: Reload credential manager res: %" LOG_PUB "d.", res); return 0; } -bool NetObserver::IsObserverStarted() -{ - return isObserverStarted_; -} - void NetObserver::StopObserver() { LOGI("[NetObserver]: Start to unregister net connection callback."); - if (!isObserverStarted_) { - LOGI("[NetObserver]: Observer already stopped."); + if (netConnCallback_ == nullptr) { + LOGW("[NetObserver]: Net connection callback is null."); return; } - isObserverStarted_ = false; - if (regThread_.joinable()) { - regThread_.join(); - } - if (g_netCallback == nullptr) { - LOGI("[NetObserver]: Net connection callback is null."); - return; - } - int32_t ret = NetConnClient::GetInstance().UnregisterNetConnCallback(g_netCallback); - if (ret == 0) { - LOGI("[NetMgrSubsysterm][UnregisterNetConnCallback]: unregister net connection callback succeeded."); - g_netCallback = nullptr; - } + int32_t ret = NetConnClient::GetInstance().UnregisterNetConnCallback(netConnCallback_); + LOGI("[NetObserver]: unregister net connection callback res: %" LOG_PUB "d.", ret); + netConnCallback_ = nullptr; } \ No newline at end of file diff --git a/services/frameworks/src/os_account_adapter/os_account_adapter.cpp b/services/frameworks/src/os_account_adapter/os_account_adapter.cpp index 7e41a083ec49eed7254134a54e7ba5121992f16b..3e739ac3a1eefabc469d4af9530e4567303bbc88 100644 --- a/services/frameworks/src/os_account_adapter/os_account_adapter.cpp +++ b/services/frameworks/src/os_account_adapter/os_account_adapter.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022-2023 Huawei Device Co., Ltd. + * Copyright (C) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -44,6 +44,7 @@ static OHOS::sptr g_netSaSubscriber = nullptr; static EventCallbackVec g_callbackVec; static bool g_isInitialized = false; static bool g_isCommonEventSubscribed = false; +static bool g_isNetObserverSubscribed = false; static bool g_isEventSaSubscribed = false; static bool g_isNetSaSubscribed = false; static const int32_t SYSTEM_DEFAULT_USER = 100; @@ -143,20 +144,26 @@ static void UnSubscribeSystemAbility(void) static void StartNetObserver(void) { - if (g_observer != nullptr) { + if (g_isNetObserverSubscribed) { + return; + } + g_observer = new(std::nothrow) NetObserver(); + if (g_observer == nullptr) { + LOGE("[OsAccountAdapter]: failed to create net observer!"); return; } - g_observer = new NetObserver(); g_observer->StartObserver(); + g_isNetObserverSubscribed = true; } static void StopNetObserver(void) { - if (g_observer == nullptr) { + if (!g_isNetObserverSubscribed) { return; } g_observer->StopObserver(); g_observer = nullptr; + g_isNetObserverSubscribed = false; } static void NotifySystemAbilityAdded(int32_t systemAbilityId)