1 /*
2  * Copyright (c) 2022-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "device_manager_service.h"
17 
18 #include <dlfcn.h>
19 #include <functional>
20 
21 #include "app_manager.h"
22 #include "dm_anonymous.h"
23 #include "dm_constants.h"
24 #include "dm_crypto.h"
25 #include "dm_hidumper.h"
26 #include "dm_log.h"
27 #include "dm_softbus_cache.h"
28 #include "parameter.h"
29 #include "permission_manager.h"
30 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
31 #include "common_event_support.h"
32 #include "datetime_ex.h"
33 #include "iservice_registry.h"
34 #include "kv_adapter_manager.h"
35 #include "multiple_user_connector.h"
36 #if defined(SUPPORT_POWER_MANAGER)
37 #include "power_mgr_client.h"
38 #endif // SUPPORT_POWER_MANAGER
39 #if defined(SUPPORT_BLUETOOTH)
40 #include "softbus_publish.h"
41 #include "bluetooth_def.h"
42 #include "bluetooth_host.h"
43 #endif // SUPPORT_BLUETOOTH
44 #if defined(SUPPORT_WIFI)
45 #include "softbus_publish.h"
46 #include "wifi_device.h"
47 #include "wifi_msg.h"
48 #endif // SUPPORT_WIFI
49 #endif
50 
51 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
52 constexpr const char* LIB_IMPL_NAME = "libdevicemanagerserviceimpl.z.so";
53 using namespace OHOS::EventFwk;
54 #else
55 constexpr const char* LIB_IMPL_NAME = "libdevicemanagerserviceimpl.so";
56 #endif
57 constexpr const char* LIB_DM_ADAPTER_NAME = "libdevicemanageradapter.z.so";
58 
59 namespace OHOS {
60 namespace DistributedHardware {
61 DM_IMPLEMENT_SINGLE_INSTANCE(DeviceManagerService);
62 const int32_t NORMAL = 0;
63 const int32_t SYSTEM_BASIC = 1;
64 const int32_t SYSTEM_CORE = 2;
65 constexpr const char* ALL_PKGNAME = "";
66 constexpr const char* NETWORKID = "NETWORK_ID";
~DeviceManagerService()67 DeviceManagerService::~DeviceManagerService()
68 {
69     LOGI("DeviceManagerService destructor");
70     UnloadDMServiceImplSo();
71     UnloadDMServiceAdapter();
72 }
73 
Init()74 int32_t DeviceManagerService::Init()
75 {
76     InitSoftbusListener();
77     InitDMServiceListener();
78     LOGI("Init success, dm service single instance initialized.");
79     return DM_OK;
80 }
81 
InitSoftbusListener()82 int32_t DeviceManagerService::InitSoftbusListener()
83 {
84     if (softbusListener_ == nullptr) {
85         softbusListener_ = std::make_shared<SoftbusListener>();
86     }
87     SoftbusCache::GetInstance().UpdateDeviceInfoCache();
88 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
89 #if defined(SUPPORT_BLUETOOTH) || defined(SUPPORT_WIFI)
90     SubscribePublishCommonEvent();
91     QueryDependsSwitchState();
92 #endif // SUPPORT_BLUETOOTH SUPPORT_WIFI
93 #endif
94     LOGI("SoftbusListener init success.");
95     return DM_OK;
96 }
97 
98 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
99 #if defined(SUPPORT_BLUETOOTH) || defined(SUPPORT_WIFI)
SubscribePublishCommonEvent()100 void DeviceManagerService::SubscribePublishCommonEvent()
101 {
102     LOGI("DeviceManagerServiceImpl::SubscribeCommonEvent");
103     if (publshCommonEventManager_ == nullptr) {
104         publshCommonEventManager_ = std::make_shared<DmPublishCommonEventManager>();
105     }
106     PublishEventCallback callback = [=](const auto &arg1, const auto &arg2, const auto &arg3) {
107         OHOS::DistributedHardware::PublishCommonEventCallback(arg1, arg2, arg3);
108     };
109     std::vector<std::string> PublishCommonEventVec;
110 #ifdef SUPPORT_BLUETOOTH
111     PublishCommonEventVec.emplace_back(CommonEventSupport::COMMON_EVENT_BLUETOOTH_HOST_STATE_UPDATE);
112 #endif // SUPPORT_BLUETOOTH
113 
114 #ifdef SUPPORT_WIFI
115     PublishCommonEventVec.emplace_back(CommonEventSupport::COMMON_EVENT_WIFI_POWER_STATE);
116 #endif // SUPPORT_WIFI
117     PublishCommonEventVec.emplace_back(CommonEventSupport::COMMON_EVENT_SCREEN_ON);
118     PublishCommonEventVec.emplace_back(CommonEventSupport::COMMON_EVENT_SCREEN_OFF);
119     if (publshCommonEventManager_->SubscribePublishCommonEvent(PublishCommonEventVec, callback)) {
120         LOGI("subscribe ble and wifi and screen common event success");
121     }
122     return;
123 }
124 #endif // SUPPORT_BLUETOOTH SUPPORT_WIFI
125 #endif
126 
127 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
128 #if defined(SUPPORT_BLUETOOTH) || defined(SUPPORT_WIFI)
QueryDependsSwitchState()129 void DeviceManagerService::QueryDependsSwitchState()
130 {
131     LOGI("DeviceManagerService::QueryDependsSwitchState start.");
132     std::shared_ptr<DmPublishEventSubscriber> publishSubScriber = publshCommonEventManager_->GetSubscriber();
133     CHECK_NULL_VOID(publishSubScriber);
134     auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
135     CHECK_NULL_VOID(samgr);
136 #ifdef SUPPORT_BLUETOOTH
137     if (samgr->CheckSystemAbility(BLUETOOTH_HOST_SYS_ABILITY_ID) == nullptr) {
138         publishSubScriber->SetBluetoothState(static_cast<int32_t>(Bluetooth::BTStateID::STATE_TURN_OFF));
139     } else {
140         if (Bluetooth::BluetoothHost::GetDefaultHost().IsBleEnabled()) {
141             publishSubScriber->SetBluetoothState(static_cast<int32_t>(Bluetooth::BTStateID::STATE_TURN_ON));
142         } else {
143             publishSubScriber->SetBluetoothState(static_cast<int32_t>(Bluetooth::BTStateID::STATE_TURN_OFF));
144         }
145     }
146 #endif // SUPPORT_BLUETOOTH
147 
148 #ifdef SUPPORT_WIFI
149     if (samgr->CheckSystemAbility(WIFI_DEVICE_SYS_ABILITY_ID) == nullptr) {
150         publishSubScriber->SetWifiState(static_cast<int32_t>(OHOS::Wifi::WifiState::DISABLED));
151     } else {
152         bool isWifiActive = false;
153         auto wifiMgr = Wifi::WifiDevice::GetInstance(WIFI_DEVICE_ABILITY_ID);
154         CHECK_NULL_VOID(wifiMgr);
155         wifiMgr->IsWifiActive(isWifiActive);
156         if (isWifiActive) {
157             publishSubScriber->SetWifiState(static_cast<int32_t>(OHOS::Wifi::WifiState::ENABLED));
158         } else {
159             publishSubScriber->SetWifiState(static_cast<int32_t>(OHOS::Wifi::WifiState::DISABLED));
160         }
161     }
162 #endif // SUPPORT_WIFI
163 
164 #ifdef SUPPORT_POWER_MANAGER
165     if (samgr->CheckSystemAbility(POWER_MANAGER_SERVICE_ID) == nullptr) {
166         publishSubScriber->SetScreenState(DM_SCREEN_OFF);
167     } else {
168         if (OHOS::PowerMgr::PowerMgrClient::GetInstance().IsScreenOn()) {
169             publishSubScriber->SetScreenState(DM_SCREEN_ON);
170         } else {
171             publishSubScriber->SetScreenState(DM_SCREEN_OFF);
172         }
173     }
174 #else
175     publishSubScriber->SetScreenState(DM_SCREEN_ON);
176 #endif // SUPPORT_POWER_MANAGER
177     OHOS::DistributedHardware::PublishCommonEventCallback(publishSubScriber->GetBluetoothState(),
178         publishSubScriber->GetWifiState(), publishSubScriber->GetScreenState());
179 }
180 #endif // SUPPORT_BLUETOOTH  SUPPORT_WIFI
181 #endif
182 
UninitSoftbusListener()183 void DeviceManagerService::UninitSoftbusListener()
184 {
185     softbusListener_ = nullptr;
186     LOGI("SoftbusListener uninit.");
187 }
188 
InitDMServiceListener()189 int32_t DeviceManagerService::InitDMServiceListener()
190 {
191     if (listener_ == nullptr) {
192         listener_ = std::make_shared<DeviceManagerServiceListener>();
193     }
194     if (advertiseMgr_ == nullptr) {
195         advertiseMgr_ = std::make_shared<AdvertiseManager>(softbusListener_);
196     }
197     if (discoveryMgr_ == nullptr) {
198         discoveryMgr_ = std::make_shared<DiscoveryManager>(softbusListener_, listener_);
199     }
200     if (pinHolder_ == nullptr) {
201         pinHolder_ = std::make_shared<PinHolder>(listener_);
202     }
203     LOGI("Init success.");
204     return DM_OK;
205 }
206 
UninitDMServiceListener()207 void DeviceManagerService::UninitDMServiceListener()
208 {
209     listener_ = nullptr;
210     advertiseMgr_ = nullptr;
211     discoveryMgr_ = nullptr;
212 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
213     KVAdapterManager::GetInstance().UnInit();
214 #endif
215     LOGI("Uninit.");
216 }
217 
RegisterCallerAppId(const std::string & pkgName)218 void DeviceManagerService::RegisterCallerAppId(const std::string &pkgName)
219 {
220     AppManager::GetInstance().RegisterCallerAppId(pkgName);
221 }
222 
UnRegisterCallerAppId(const std::string & pkgName)223 void DeviceManagerService::UnRegisterCallerAppId(const std::string &pkgName)
224 {
225     AppManager::GetInstance().UnRegisterCallerAppId(pkgName);
226 }
227 
GetTrustedDeviceList(const std::string & pkgName,const std::string & extra,std::vector<DmDeviceInfo> & deviceList)228 int32_t DeviceManagerService::GetTrustedDeviceList(const std::string &pkgName, const std::string &extra,
229                                                    std::vector<DmDeviceInfo> &deviceList)
230 {
231     LOGI("Begin for pkgName = %{public}s.", pkgName.c_str());
232     if (pkgName.empty()) {
233         LOGE("Invalid parameter, pkgName is empty.");
234         return ERR_DM_INPUT_PARA_INVALID;
235     }
236     bool isOnlyShowNetworkId = false;
237     if (!PermissionManager::GetInstance().CheckNewPermission()) {
238         LOGE("The caller: %{public}s does not have permission to call GetTrustedDeviceList.", pkgName.c_str());
239         isOnlyShowNetworkId = true;
240     }
241     std::vector<DmDeviceInfo> onlineDeviceList;
242     CHECK_NULL_RETURN(softbusListener_, ERR_DM_POINT_NULL);
243     int32_t ret = softbusListener_->GetTrustedDeviceList(onlineDeviceList);
244     if (ret != DM_OK) {
245         LOGE("GetTrustedDeviceList failed");
246         return ret;
247     }
248     if (isOnlyShowNetworkId && !onlineDeviceList.empty()) {
249         for (auto item : onlineDeviceList) {
250             DmDeviceInfo tempInfo;
251             if (memcpy_s(tempInfo.networkId, DM_MAX_DEVICE_ID_LEN, item.networkId, sizeof(item.networkId)) != 0) {
252                 LOGE("get networkId: %{public}s failed", GetAnonyString(item.networkId).c_str());
253             }
254             deviceList.push_back(tempInfo);
255         }
256         return DM_OK;
257     }
258     if (onlineDeviceList.size() > 0 && IsDMServiceImplReady()) {
259         std::unordered_map<std::string, DmAuthForm> udidMap;
260         if (PermissionManager::GetInstance().CheckSystemSA(pkgName)) {
261             udidMap = dmServiceImpl_->GetAppTrustDeviceIdList(std::string(ALL_PKGNAME));
262         } else {
263             udidMap = dmServiceImpl_->GetAppTrustDeviceIdList(pkgName);
264         }
265         for (auto item : onlineDeviceList) {
266 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
267             ConvertUdidHashToAnoyDeviceId(item);
268 #endif
269             std::string udid = "";
270             SoftbusListener::GetUdidByNetworkId(item.networkId, udid);
271             if (udidMap.find(udid) != udidMap.end()) {
272                 item.authForm = udidMap[udid];
273                 deviceList.push_back(item);
274             }
275         }
276     }
277     return DM_OK;
278 }
279 
ShiftLNNGear(const std::string & pkgName,const std::string & callerId,bool isRefresh,bool isWakeUp)280 int32_t DeviceManagerService::ShiftLNNGear(const std::string &pkgName, const std::string &callerId, bool isRefresh,
281                                            bool isWakeUp)
282 {
283     LOGD("Begin for pkgName = %{public}s, callerId = %{public}s, isRefresh ="
284         "%{public}d, isWakeUp = %{public}d", pkgName.c_str(), GetAnonyString(callerId).c_str(), isRefresh, isWakeUp);
285     if (!PermissionManager::GetInstance().CheckNewPermission()) {
286         LOGE("The caller does not have permission to call ShiftLNNGear, pkgName = %{public}s", pkgName.c_str());
287         return ERR_DM_NO_PERMISSION;
288     }
289     if (pkgName.empty() || callerId.empty()) {
290         LOGE("Invalid parameter, parameter is empty.");
291         return ERR_DM_INPUT_PARA_INVALID;
292     }
293     if (isRefresh) {
294         CHECK_NULL_RETURN(softbusListener_, ERR_DM_POINT_NULL);
295         int32_t ret = softbusListener_->ShiftLNNGear(isWakeUp, callerId);
296         if (ret != DM_OK) {
297             LOGE("ShiftLNNGear error, failed ret: %{public}d", ret);
298             return ret;
299         }
300     }
301     return DM_OK;
302 }
303 
GetDeviceInfo(const std::string & networkId,DmDeviceInfo & info)304 int32_t DeviceManagerService::GetDeviceInfo(const std::string &networkId, DmDeviceInfo &info)
305 {
306     LOGI("Begin networkId %{public}s.", GetAnonyString(networkId).c_str());
307     if (!PermissionManager::GetInstance().CheckPermission() &&
308         !PermissionManager::GetInstance().CheckNewPermission()) {
309         LOGE("The caller does not have permission to call GetDeviceInfo.");
310         return ERR_DM_NO_PERMISSION;
311     }
312     if (networkId.empty()) {
313         LOGE("Invalid parameter, networkId is empty.");
314         return ERR_DM_INPUT_PARA_INVALID;
315     }
316     CHECK_NULL_RETURN(softbusListener_, ERR_DM_POINT_NULL);
317     int32_t ret = softbusListener_->GetDeviceInfo(networkId, info);
318     if (ret != DM_OK) {
319         LOGE("Get DeviceInfo By NetworkId failed, ret : %{public}d", ret);
320     }
321     return ret;
322 }
323 
GetLocalDeviceInfo(DmDeviceInfo & info)324 int32_t DeviceManagerService::GetLocalDeviceInfo(DmDeviceInfo &info)
325 {
326     LOGI("Begin.");
327     bool isOnlyShowNetworkId = false;
328     if (!PermissionManager::GetInstance().CheckNewPermission()) {
329         LOGE("The caller does not have permission to call GetLocalDeviceInfo.");
330         isOnlyShowNetworkId = true;
331     }
332     CHECK_NULL_RETURN(softbusListener_, ERR_DM_POINT_NULL);
333     int32_t ret = softbusListener_->GetLocalDeviceInfo(info);
334     if (ret != DM_OK) {
335         LOGE("GetLocalDeviceInfo failed");
336         return ret;
337     }
338     if (isOnlyShowNetworkId) {
339         DmDeviceInfo tempInfo;
340         if (memcpy_s(tempInfo.networkId, DM_MAX_DEVICE_ID_LEN, info.networkId, sizeof(info.networkId)) != 0) {
341             LOGE("get networkId: %{public}s failed", GetAnonyString(info.networkId).c_str());
342         }
343         info = tempInfo;
344         return DM_OK;
345     }
346     if (localDeviceId_.empty()) {
347         char localDeviceId[DEVICE_UUID_LENGTH] = {0};
348         char udidHash[DEVICE_UUID_LENGTH] = {0};
349         GetDevUdid(localDeviceId, DEVICE_UUID_LENGTH);
350         if (Crypto::GetUdidHash(localDeviceId, reinterpret_cast<uint8_t *>(udidHash)) == DM_OK) {
351             localDeviceId_ = udidHash;
352         }
353     }
354 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
355     std::string udidHashTemp = "";
356     if (ConvertUdidHashToAnoyDeviceId(localDeviceId_, udidHashTemp) == DM_OK) {
357         (void)memset_s(info.deviceId, DM_MAX_DEVICE_ID_LEN, 0, DM_MAX_DEVICE_ID_LEN);
358         if (memcpy_s(info.deviceId, DM_MAX_DEVICE_ID_LEN, udidHashTemp.c_str(), udidHashTemp.length()) != 0) {
359             LOGE("get deviceId: %{public}s failed", GetAnonyString(udidHashTemp).c_str());
360             return ERR_DM_FAILED;
361         }
362         return DM_OK;
363     }
364 #endif
365     if (memcpy_s(info.deviceId, DM_MAX_DEVICE_ID_LEN, localDeviceId_.c_str(), localDeviceId_.length()) != 0) {
366         LOGE("get deviceId: %{public}s failed", GetAnonyString(localDeviceId_).c_str());
367     }
368     return DM_OK;
369 }
370 
GetUdidByNetworkId(const std::string & pkgName,const std::string & netWorkId,std::string & udid)371 int32_t DeviceManagerService::GetUdidByNetworkId(const std::string &pkgName, const std::string &netWorkId,
372                                                  std::string &udid)
373 {
374     if (!PermissionManager::GetInstance().CheckPermission()) {
375         LOGE("The caller: %{public}s does not have permission to call GetUdidByNetworkId.", pkgName.c_str());
376         return ERR_DM_NO_PERMISSION;
377     }
378     if (pkgName.empty() || netWorkId.empty()) {
379         LOGE("Invalid parameter, pkgName: %{public}s, netWorkId: %{public}s", pkgName.c_str(),
380             GetAnonyString(netWorkId).c_str());
381         return ERR_DM_INPUT_PARA_INVALID;
382     }
383     return SoftbusListener::GetUdidByNetworkId(netWorkId.c_str(), udid);
384 }
385 
GetUuidByNetworkId(const std::string & pkgName,const std::string & netWorkId,std::string & uuid)386 int32_t DeviceManagerService::GetUuidByNetworkId(const std::string &pkgName, const std::string &netWorkId,
387                                                  std::string &uuid)
388 {
389     if (!PermissionManager::GetInstance().CheckPermission()) {
390         LOGE("The caller: %{public}s does not have permission to call GetUuidByNetworkId.", pkgName.c_str());
391         return ERR_DM_NO_PERMISSION;
392     }
393     if (pkgName.empty() || netWorkId.empty()) {
394         LOGE("Invalid parameter, pkgName: %{public}s, netWorkId: %{public}s", pkgName.c_str(),
395             GetAnonyString(netWorkId).c_str());
396         return ERR_DM_INPUT_PARA_INVALID;
397     }
398     return SoftbusListener::GetUuidByNetworkId(netWorkId.c_str(), uuid);
399 }
400 
StartDeviceDiscovery(const std::string & pkgName,const DmSubscribeInfo & subscribeInfo,const std::string & extra)401 int32_t DeviceManagerService::StartDeviceDiscovery(const std::string &pkgName, const DmSubscribeInfo &subscribeInfo,
402     const std::string &extra)
403 {
404     if (!PermissionManager::GetInstance().CheckPermission()) {
405         LOGE("The caller: %{public}s does not have permission to call StartDeviceDiscovery.", pkgName.c_str());
406         return ERR_DM_NO_PERMISSION;
407     }
408     LOGI("Begin for pkgName = %{public}s, extra = %{public}s",
409         pkgName.c_str(), extra.c_str());
410     if (pkgName.empty()) {
411         LOGE("Invalid parameter, pkgName is empty.");
412         return ERR_DM_INPUT_PARA_INVALID;
413     }
414 
415     SoftbusListener::SetHostPkgName(pkgName);
416     std::map<std::string, std::string> discParam;
417     discParam.insert(std::pair<std::string, std::string>(PARAM_KEY_SUBSCRIBE_ID,
418         std::to_string(subscribeInfo.subscribeId)));
419     discParam.insert(std::pair<std::string, std::string>(PARAM_KEY_DISC_MEDIUM, std::to_string(subscribeInfo.medium)));
420 
421     std::map<std::string, std::string> filterOps;
422     filterOps.insert(std::pair<std::string, std::string>(PARAM_KEY_FILTER_OPTIONS, extra));
423     CHECK_NULL_RETURN(discoveryMgr_, ERR_DM_POINT_NULL);
424     return discoveryMgr_->StartDiscovering(pkgName, discParam, filterOps);
425 }
426 
StartDeviceDiscovery(const std::string & pkgName,const uint16_t subscribeId,const std::string & filterOptions)427 int32_t DeviceManagerService::StartDeviceDiscovery(const std::string &pkgName, const uint16_t subscribeId,
428                                                    const std::string &filterOptions)
429 {
430     if (!PermissionManager::GetInstance().CheckNewPermission()) {
431         LOGE("The caller: %{public}s does not have permission to call StartDeviceDiscovery.", pkgName.c_str());
432         return ERR_DM_NO_PERMISSION;
433     }
434     LOGI("Begin for pkgName = %{public}s, filterOptions = %{public}s, subscribeId = %{public}d",
435         pkgName.c_str(), filterOptions.c_str(), subscribeId);
436     if (pkgName.empty()) {
437         LOGE("Invalid parameter, pkgName is empty.");
438         return ERR_DM_INPUT_PARA_INVALID;
439     }
440 
441     SoftbusListener::SetHostPkgName(pkgName);
442     std::map<std::string, std::string> discParam;
443     discParam.insert(std::pair<std::string, std::string>(PARAM_KEY_SUBSCRIBE_ID, std::to_string(subscribeId)));
444 
445     std::map<std::string, std::string> filterOps;
446     filterOps.insert(std::pair<std::string, std::string>(PARAM_KEY_FILTER_OPTIONS, filterOptions));
447     CHECK_NULL_RETURN(discoveryMgr_, ERR_DM_POINT_NULL);
448     return discoveryMgr_->StartDiscovering(pkgName, discParam, filterOps);
449 }
450 
StopDeviceDiscovery(const std::string & pkgName,uint16_t subscribeId)451 int32_t DeviceManagerService::StopDeviceDiscovery(const std::string &pkgName, uint16_t subscribeId)
452 {
453     if (!PermissionManager::GetInstance().CheckPermission() &&
454         !PermissionManager::GetInstance().CheckNewPermission()) {
455         LOGE("The caller: %{public}s does not have permission to call StopDeviceDiscovery.", pkgName.c_str());
456         return ERR_DM_NO_PERMISSION;
457     }
458     LOGI("Begin for pkgName = %{public}s", pkgName.c_str());
459     if (pkgName.empty()) {
460         LOGE("Invalid parameter, pkgName is empty.");
461         return ERR_DM_INPUT_PARA_INVALID;
462     }
463     CHECK_NULL_RETURN(discoveryMgr_, ERR_DM_POINT_NULL);
464     return discoveryMgr_->StopDiscovering(pkgName, subscribeId);
465 }
466 
PublishDeviceDiscovery(const std::string & pkgName,const DmPublishInfo & publishInfo)467 int32_t DeviceManagerService::PublishDeviceDiscovery(const std::string &pkgName, const DmPublishInfo &publishInfo)
468 {
469     if (!PermissionManager::GetInstance().CheckPermission()) {
470         LOGE("The caller: %{public}s does not have permission to call PublishDeviceDiscovery.", pkgName.c_str());
471         return ERR_DM_NO_PERMISSION;
472     }
473     LOGI("Begin for pkgName = %{public}s", pkgName.c_str());
474     if (pkgName.empty()) {
475         LOGE("Invalid parameter, pkgName is empty.");
476         return ERR_DM_INPUT_PARA_INVALID;
477     }
478 
479     std::map<std::string, std::string> advertiseParam;
480     advertiseParam.insert(std::pair<std::string, std::string>(PARAM_KEY_PUBLISH_ID,
481         std::to_string(publishInfo.publishId)));
482     CHECK_NULL_RETURN(advertiseMgr_, ERR_DM_POINT_NULL);
483     return advertiseMgr_->StartAdvertising(pkgName, advertiseParam);
484 }
485 
UnPublishDeviceDiscovery(const std::string & pkgName,int32_t publishId)486 int32_t DeviceManagerService::UnPublishDeviceDiscovery(const std::string &pkgName, int32_t publishId)
487 {
488     if (!PermissionManager::GetInstance().CheckPermission()) {
489         LOGE("The caller: %{public}s does not have permission to call UnPublishDeviceDiscovery.", pkgName.c_str());
490         return ERR_DM_NO_PERMISSION;
491     }
492     if (pkgName.empty()) {
493         LOGE("Invalid parameter, pkgName is empty.");
494         return ERR_DM_INPUT_PARA_INVALID;
495     }
496     CHECK_NULL_RETURN(advertiseMgr_, ERR_DM_POINT_NULL);
497     return advertiseMgr_->StopAdvertising(pkgName, publishId);
498 }
499 
AuthenticateDevice(const std::string & pkgName,int32_t authType,const std::string & deviceId,const std::string & extra)500 int32_t DeviceManagerService::AuthenticateDevice(const std::string &pkgName, int32_t authType,
501                                                  const std::string &deviceId, const std::string &extra)
502 {
503     if (!PermissionManager::GetInstance().CheckPermission()) {
504         LOGE("The caller: %{public}s does not have permission to call AuthenticateDevice.", pkgName.c_str());
505         return ERR_DM_NO_PERMISSION;
506     }
507     if (pkgName.empty() || deviceId.empty()) {
508         LOGE("DeviceManagerService::AuthenticateDevice error: Invalid parameter, pkgName: %{public}s", pkgName.c_str());
509         return ERR_DM_INPUT_PARA_INVALID;
510     }
511     if (!IsDMServiceImplReady()) {
512         LOGE("AuthenticateDevice failed, instance not init or init failed.");
513         return ERR_DM_NOT_INIT;
514     }
515     std::string queryDeviceId = deviceId;
516 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
517     std::string udidHash = "";
518     if (GetUdidHashByAnoyDeviceId(deviceId, udidHash) == DM_OK) {
519         queryDeviceId = udidHash;
520     }
521 #endif
522     PeerTargetId targetId;
523     ConnectionAddrType addrType;
524     int32_t ret = SoftbusListener::GetTargetInfoFromCache(queryDeviceId, targetId, addrType);
525     if (ret != DM_OK) {
526         LOGE("AuthenticateDevice failed, cannot get target info from cached discovered device map.");
527         return ERR_DM_BIND_INPUT_PARA_INVALID;
528     }
529     std::map<std::string, std::string> bindParam;
530     bindParam.insert(std::pair<std::string, std::string>(PARAM_KEY_AUTH_TYPE, std::to_string(authType)));
531     bindParam.insert(std::pair<std::string, std::string>(PARAM_KEY_BIND_EXTRA_DATA, extra));
532     bindParam.insert(std::pair<std::string, std::string>(PARAM_KEY_CONN_ADDR_TYPE, std::to_string(addrType)));
533     return dmServiceImpl_->BindTarget(pkgName, targetId, bindParam);
534 }
535 
UnAuthenticateDevice(const std::string & pkgName,const std::string & networkId)536 int32_t DeviceManagerService::UnAuthenticateDevice(const std::string &pkgName, const std::string &networkId)
537 {
538     if (!PermissionManager::GetInstance().CheckPermission()) {
539         LOGE("The caller: %{public}s does not have permission to call UnAuthenticateDevice.", pkgName.c_str());
540         return ERR_DM_NO_PERMISSION;
541     }
542     LOGI("Begin for pkgName = %{public}s, networkId = %{public}s",
543         pkgName.c_str(), GetAnonyString(networkId).c_str());
544     if (pkgName.empty() || networkId.empty()) {
545         LOGE("DeviceManagerService::UnAuthenticateDevice error: Invalid parameter, pkgName: %{public}s",
546             pkgName.c_str());
547         return ERR_DM_INPUT_PARA_INVALID;
548     }
549     if (!IsDMServiceImplReady()) {
550         LOGE("UnAuthenticateDevice failed, instance not init or init failed.");
551         return ERR_DM_NOT_INIT;
552     }
553     return dmServiceImpl_->UnAuthenticateDevice(pkgName, networkId);
554 }
555 
StopAuthenticateDevice(const std::string & pkgName)556 int32_t DeviceManagerService::StopAuthenticateDevice(const std::string &pkgName)
557 {
558     if (!PermissionManager::GetInstance().CheckPermission()) {
559         LOGE("The caller: %{public}s does not have permission to call StopAuthenticateDevice.", pkgName.c_str());
560         return ERR_DM_NO_PERMISSION;
561     }
562     if (pkgName.empty()) {
563         LOGE("DeviceManagerService::StopAuthenticateDevice error: Invalid parameter, pkgName: %{public}s",
564             pkgName.c_str());
565         return ERR_DM_INPUT_PARA_INVALID;
566     }
567     LOGI("Begin for pkgName = %{public}s", pkgName.c_str());
568     if (!IsDMServiceImplReady()) {
569         LOGE("StopAuthenticateDevice failed, instance not init or init failed.");
570         return ERR_DM_NOT_INIT;
571     }
572     if (dmServiceImpl_->StopAuthenticateDevice(pkgName) != DM_OK) {
573         LOGE("dmServiceImpl_ StopAuthenticateDevice failed.");
574         return ERR_DM_FAILED;
575     }
576     return DM_OK;
577 }
578 
BindDevice(const std::string & pkgName,int32_t authType,const std::string & deviceId,const std::string & bindParam)579 int32_t DeviceManagerService::BindDevice(const std::string &pkgName, int32_t authType, const std::string &deviceId,
580     const std::string &bindParam)
581 {
582     if (!PermissionManager::GetInstance().CheckNewPermission()) {
583         LOGE("The caller does not have permission to call BindDevice.");
584         return ERR_DM_NO_PERMISSION;
585     }
586     if (pkgName.empty() || deviceId.empty()) {
587         LOGE("DeviceManagerService::BindDevice error: Invalid parameter, pkgName: %{public}s", pkgName.c_str());
588         return ERR_DM_INPUT_PARA_INVALID;
589     }
590     if (!IsDMServiceImplReady()) {
591         LOGE("BindDevice failed, instance not init or init failed.");
592         return ERR_DM_NOT_INIT;
593     }
594     std::string queryDeviceId = deviceId;
595 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
596     std::string udidHash = "";
597     if (GetUdidHashByAnoyDeviceId(deviceId, udidHash) == DM_OK) {
598         queryDeviceId = udidHash;
599     }
600 #endif
601     PeerTargetId targetId;
602     ConnectionAddrType addrType;
603     int32_t ret = SoftbusListener::GetTargetInfoFromCache(queryDeviceId, targetId, addrType);
604     if (ret != DM_OK) {
605         LOGE("BindDevice failed, cannot get target info from cached discovered device map.");
606         return ERR_DM_BIND_INPUT_PARA_INVALID;
607     }
608     std::map<std::string, std::string> bindParamMap;
609     bindParamMap.insert(std::pair<std::string, std::string>(PARAM_KEY_AUTH_TYPE, std::to_string(authType)));
610     bindParamMap.insert(std::pair<std::string, std::string>(PARAM_KEY_BIND_EXTRA_DATA, bindParam));
611     bindParamMap.insert(std::pair<std::string, std::string>(PARAM_KEY_CONN_ADDR_TYPE, std::to_string(addrType)));
612     return dmServiceImpl_->BindTarget(pkgName, targetId, bindParamMap);
613 }
614 
UnBindDevice(const std::string & pkgName,const std::string & deviceId)615 int32_t DeviceManagerService::UnBindDevice(const std::string &pkgName, const std::string &deviceId)
616 {
617     if (!PermissionManager::GetInstance().CheckNewPermission()) {
618         LOGE("The caller does not have permission to call UnBindDevice.");
619         return ERR_DM_NO_PERMISSION;
620     }
621     LOGI("Begin for pkgName = %{public}s, deviceId = %{public}s",
622         pkgName.c_str(), GetAnonyString(deviceId).c_str());
623     if (pkgName.empty() || deviceId.empty()) {
624         LOGE("DeviceManagerService::UnBindDevice error: Invalid parameter, pkgName: %{public}s", pkgName.c_str());
625         return ERR_DM_INPUT_PARA_INVALID;
626     }
627     if (!IsDMServiceImplReady()) {
628         LOGE("UnBindDevice failed, instance not init or init failed.");
629         return ERR_DM_NOT_INIT;
630     }
631     std::string realDeviceId = deviceId;
632 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
633     std::string udidHash = "";
634     if (GetUdidHashByAnoyDeviceId(deviceId, udidHash) == DM_OK) {
635         realDeviceId = udidHash;
636     }
637 #endif
638     return dmServiceImpl_->UnBindDevice(pkgName, realDeviceId);
639 }
640 
SetUserOperation(std::string & pkgName,int32_t action,const std::string & params)641 int32_t DeviceManagerService::SetUserOperation(std::string &pkgName, int32_t action, const std::string &params)
642 {
643     if (!PermissionManager::GetInstance().CheckPermission()) {
644         LOGE("The caller: %{public}s does not have permission to call SetUserOperation.", pkgName.c_str());
645         return ERR_DM_NO_PERMISSION;
646     }
647     if (pkgName.empty() || params.empty()) {
648         LOGE("DeviceManagerService::SetUserOperation error: Invalid parameter, pkgName: %{public}s", pkgName.c_str());
649         return ERR_DM_INPUT_PARA_INVALID;
650     }
651     if (IsDMServiceAdapterLoad()) {
652         dmServiceImplExt_->ReplyUiAction(pkgName, action, params);
653     }
654     if (!IsDMServiceImplReady()) {
655         LOGE("SetUserOperation failed, instance not init or init failed.");
656         return ERR_DM_NOT_INIT;
657     }
658     return dmServiceImpl_->SetUserOperation(pkgName, action, params);
659 }
660 
HandleDeviceStatusChange(DmDeviceState devState,DmDeviceInfo & devInfo)661 void DeviceManagerService::HandleDeviceStatusChange(DmDeviceState devState, DmDeviceInfo &devInfo)
662 {
663     if (IsDMServiceImplReady()) {
664         dmServiceImpl_->HandleDeviceStatusChange(devState, devInfo);
665     }
666     if (IsDMServiceAdapterLoad()) {
667         dmServiceImplExt_->HandleDeviceStatusChange(devState, devInfo);
668     }
669 }
670 
OnSessionOpened(int sessionId,int result)671 int DeviceManagerService::OnSessionOpened(int sessionId, int result)
672 {
673     if (!IsDMServiceImplReady()) {
674         LOGE("OnSessionOpened failed, instance not init or init failed.");
675         return ERR_DM_NOT_INIT;
676     }
677     return dmServiceImpl_->OnSessionOpened(sessionId, result);
678 }
679 
OnSessionClosed(int sessionId)680 void DeviceManagerService::OnSessionClosed(int sessionId)
681 {
682     if (!IsDMServiceImplReady()) {
683         LOGE("OnSessionClosed failed, instance not init or init failed.");
684         return;
685     }
686     dmServiceImpl_->OnSessionClosed(sessionId);
687 }
688 
OnBytesReceived(int sessionId,const void * data,unsigned int dataLen)689 void DeviceManagerService::OnBytesReceived(int sessionId, const void *data, unsigned int dataLen)
690 {
691     if (!IsDMServiceImplReady()) {
692         LOGE("OnBytesReceived failed, instance not init or init failed.");
693         return;
694     }
695     dmServiceImpl_->OnBytesReceived(sessionId, data, dataLen);
696 }
697 
OnPinHolderSessionOpened(int sessionId,int result)698 int DeviceManagerService::OnPinHolderSessionOpened(int sessionId, int result)
699 {
700     LOGI("In");
701     return PinHolderSession::OnSessionOpened(sessionId, result);
702 }
703 
OnPinHolderSessionClosed(int sessionId)704 void DeviceManagerService::OnPinHolderSessionClosed(int sessionId)
705 {
706     LOGI("In");
707     PinHolderSession::OnSessionClosed(sessionId);
708 }
709 
OnPinHolderBytesReceived(int sessionId,const void * data,unsigned int dataLen)710 void DeviceManagerService::OnPinHolderBytesReceived(int sessionId, const void *data, unsigned int dataLen)
711 {
712     LOGI("In");
713     PinHolderSession::OnBytesReceived(sessionId, data, dataLen);
714 }
715 
RequestCredential(const std::string & reqJsonStr,std::string & returnJsonStr)716 int32_t DeviceManagerService::RequestCredential(const std::string &reqJsonStr, std::string &returnJsonStr)
717 {
718     if (!PermissionManager::GetInstance().CheckPermission()) {
719         LOGE("The caller does not have permission to call RequestCredential.");
720         return ERR_DM_NO_PERMISSION;
721     }
722     if (!IsDMServiceImplReady()) {
723         LOGE("RequestCredential failed, instance not init or init failed.");
724         return ERR_DM_NOT_INIT;
725     }
726     return dmServiceImpl_->RequestCredential(reqJsonStr, returnJsonStr);
727 }
728 
ImportCredential(const std::string & pkgName,const std::string & credentialInfo)729 int32_t DeviceManagerService::ImportCredential(const std::string &pkgName, const std::string &credentialInfo)
730 {
731     if (!PermissionManager::GetInstance().CheckPermission()) {
732         LOGE("The caller: %{public}s does not have permission to call ImportCredential.",
733             pkgName.c_str());
734         return ERR_DM_NO_PERMISSION;
735     }
736     if (!IsDMServiceImplReady()) {
737         LOGE("ImportCredential failed, instance not init or init failed.");
738         return ERR_DM_NOT_INIT;
739     }
740     return dmServiceImpl_->ImportCredential(pkgName, credentialInfo);
741 }
742 
DeleteCredential(const std::string & pkgName,const std::string & deleteInfo)743 int32_t DeviceManagerService::DeleteCredential(const std::string &pkgName, const std::string &deleteInfo)
744 {
745     if (!PermissionManager::GetInstance().CheckPermission()) {
746         LOGE("The caller: %{public}s does not have permission to call DeleteCredential.",
747             pkgName.c_str());
748         return ERR_DM_NO_PERMISSION;
749     }
750     if (!IsDMServiceImplReady()) {
751         LOGE("DeleteCredential failed, instance not init or init failed.");
752         return ERR_DM_NOT_INIT;
753     }
754     return dmServiceImpl_->DeleteCredential(pkgName, deleteInfo);
755 }
756 
MineRequestCredential(const std::string & pkgName,std::string & returnJsonStr)757 int32_t DeviceManagerService::MineRequestCredential(const std::string &pkgName, std::string &returnJsonStr)
758 {
759     if (!PermissionManager::GetInstance().CheckPermission()) {
760         LOGE("The caller does not have permission to call RequestCredential.");
761         return ERR_DM_NO_PERMISSION;
762     }
763     if (!IsDMServiceImplReady()) {
764         LOGE("RequestCredential failed, instance not init or init failed.");
765         return ERR_DM_NOT_INIT;
766     }
767     return dmServiceImpl_->MineRequestCredential(pkgName, returnJsonStr);
768 }
769 
CheckCredential(const std::string & pkgName,const std::string & reqJsonStr,std::string & returnJsonStr)770 int32_t DeviceManagerService::CheckCredential(const std::string &pkgName, const std::string &reqJsonStr,
771     std::string &returnJsonStr)
772 {
773     if (!PermissionManager::GetInstance().CheckPermission()) {
774         LOGE("The caller: %{public}s does not have permission to call CheckCredential.",
775             pkgName.c_str());
776         return ERR_DM_NO_PERMISSION;
777     }
778     if (!IsDMServiceImplReady()) {
779         LOGE("CheckCredential failed, instance not init or init failed.");
780         return ERR_DM_NOT_INIT;
781     }
782     return dmServiceImpl_->CheckCredential(pkgName, reqJsonStr, returnJsonStr);
783 }
784 
ImportCredential(const std::string & pkgName,const std::string & reqJsonStr,std::string & returnJsonStr)785 int32_t DeviceManagerService::ImportCredential(const std::string &pkgName, const std::string &reqJsonStr,
786     std::string &returnJsonStr)
787 {
788     if (!PermissionManager::GetInstance().CheckPermission()) {
789         LOGE("The caller: %{public}s does not have permission to call ImportCredential.",
790             pkgName.c_str());
791         return ERR_DM_NO_PERMISSION;
792     }
793     if (!IsDMServiceImplReady()) {
794         LOGE("ImportCredential failed, instance not init or init failed.");
795         return ERR_DM_NOT_INIT;
796     }
797     return dmServiceImpl_->ImportCredential(pkgName, reqJsonStr, returnJsonStr);
798 }
799 
DeleteCredential(const std::string & pkgName,const std::string & reqJsonStr,std::string & returnJsonStr)800 int32_t DeviceManagerService::DeleteCredential(const std::string &pkgName, const std::string &reqJsonStr,
801     std::string &returnJsonStr)
802 {
803     if (!PermissionManager::GetInstance().CheckPermission()) {
804         LOGE("The caller: %{public}s does not have permission to call DeleteCredential.",
805             pkgName.c_str());
806         return ERR_DM_NO_PERMISSION;
807     }
808     if (!IsDMServiceImplReady()) {
809         LOGE("DeleteCredential failed, instance not init or init failed.");
810         return ERR_DM_NOT_INIT;
811     }
812     return dmServiceImpl_->DeleteCredential(pkgName, reqJsonStr, returnJsonStr);
813 }
814 
RegisterCredentialCallback(const std::string & pkgName)815 int32_t DeviceManagerService::RegisterCredentialCallback(const std::string &pkgName)
816 {
817     if (!PermissionManager::GetInstance().CheckPermission()) {
818         LOGE("The caller: %{public}s does not have permission to call RegisterCredentialCallback.", pkgName.c_str());
819         return ERR_DM_NO_PERMISSION;
820     }
821     if (!IsDMServiceImplReady()) {
822         LOGE("RegisterCredentialCallback failed, instance not init or init failed.");
823         return ERR_DM_NOT_INIT;
824     }
825     return dmServiceImpl_->RegisterCredentialCallback(pkgName);
826 }
827 
UnRegisterCredentialCallback(const std::string & pkgName)828 int32_t DeviceManagerService::UnRegisterCredentialCallback(const std::string &pkgName)
829 {
830     if (!PermissionManager::GetInstance().CheckPermission()) {
831         LOGE("The caller: %{public}s does not have permission to call UnRegisterCredentialCallback.",
832             pkgName.c_str());
833         return ERR_DM_NO_PERMISSION;
834     }
835     if (!IsDMServiceImplReady()) {
836         LOGE("UnRegisterCredentialCallback failed, instance not init or init failed.");
837         return ERR_DM_NOT_INIT;
838     }
839     return dmServiceImpl_->UnRegisterCredentialCallback(pkgName);
840 }
841 
RegisterUiStateCallback(const std::string & pkgName)842 int32_t DeviceManagerService::RegisterUiStateCallback(const std::string &pkgName)
843 {
844     if (pkgName.empty()) {
845         LOGE("DeviceManagerService::RegisterUiStateCallback error: Invalid parameter, pkgName: %{public}s",
846             pkgName.c_str());
847         return ERR_DM_INPUT_PARA_INVALID;
848     }
849     if (!PermissionManager::GetInstance().CheckPermission()) {
850         LOGE("The caller: %{public}s does not have permission to call RegisterUiStateCallback.",
851             GetAnonyString(pkgName).c_str());
852         return ERR_DM_NO_PERMISSION;
853     }
854     if (!IsDMServiceImplReady()) {
855         LOGE("RegisterUiStateCallback failed, instance not init or init failed.");
856         return ERR_DM_NOT_INIT;
857     }
858     return dmServiceImpl_->RegisterUiStateCallback(pkgName);
859 }
860 
UnRegisterUiStateCallback(const std::string & pkgName)861 int32_t DeviceManagerService::UnRegisterUiStateCallback(const std::string &pkgName)
862 {
863     if (pkgName.empty()) {
864         LOGE("DeviceManagerService::UnRegisterUiStateCallback error: Invalid parameter, pkgName: %{public}s",
865             pkgName.c_str());
866         return ERR_DM_INPUT_PARA_INVALID;
867     }
868     if (!PermissionManager::GetInstance().CheckPermission()) {
869         LOGE("The caller: %{public}s does not have permission to call UnRegisterUiStateCallback.",
870             GetAnonyString(pkgName).c_str());
871         return ERR_DM_NO_PERMISSION;
872     }
873     if (!IsDMServiceImplReady()) {
874         LOGE("UnRegisterUiStateCallback failed, instance not init or init failed.");
875         return ERR_DM_NOT_INIT;
876     }
877     return dmServiceImpl_->UnRegisterUiStateCallback(pkgName);
878 }
879 
IsDMServiceImplReady()880 bool DeviceManagerService::IsDMServiceImplReady()
881 {
882     std::lock_guard<std::mutex> lock(isImplLoadLock_);
883     if (isImplsoLoaded_ && (dmServiceImpl_ != nullptr)) {
884         return true;
885     }
886     void *so_handle = dlopen(LIB_IMPL_NAME, RTLD_NOW | RTLD_NODELETE);
887     if (so_handle == nullptr) {
888         LOGE("load libdevicemanagerserviceimpl so failed, errMsg: %{public}s.", dlerror());
889         return false;
890     }
891     dlerror();
892     auto func = (CreateDMServiceFuncPtr)dlsym(so_handle, "CreateDMServiceObject");
893     if (dlerror() != nullptr || func == nullptr) {
894         dlclose(so_handle);
895         LOGE("Create object function is not exist.");
896         return false;
897     }
898 
899     dmServiceImpl_ = std::shared_ptr<IDeviceManagerServiceImpl>(func());
900     if (dmServiceImpl_->Initialize(listener_) != DM_OK) {
901         dlclose(so_handle);
902         dmServiceImpl_ = nullptr;
903         isImplsoLoaded_ = false;
904         return false;
905     }
906     isImplsoLoaded_ = true;
907     return true;
908 }
909 
IsDMImplSoLoaded()910 bool DeviceManagerService::IsDMImplSoLoaded()
911 {
912     LOGI("In");
913     std::lock_guard<std::mutex> lock(isImplLoadLock_);
914     return isImplsoLoaded_;
915 }
916 
DmHiDumper(const std::vector<std::string> & args,std::string & result)917 int32_t DeviceManagerService::DmHiDumper(const std::vector<std::string>& args, std::string &result)
918 {
919     LOGI("HiDump GetTrustedDeviceList");
920     std::vector<HidumperFlag> dumpflag;
921     HiDumpHelper::GetInstance().GetArgsType(args, dumpflag);
922 
923     for (unsigned int i = 0; i < dumpflag.size(); i++) {
924         if (dumpflag[i] == HidumperFlag::HIDUMPER_GET_TRUSTED_LIST) {
925             std::vector<DmDeviceInfo> deviceList;
926             CHECK_NULL_RETURN(softbusListener_, ERR_DM_POINT_NULL);
927             int32_t ret = softbusListener_->GetTrustedDeviceList(deviceList);
928             if (ret != DM_OK) {
929                 result.append("HiDumpHelper GetTrustedDeviceList failed");
930                 LOGE("HiDumpHelper GetTrustedDeviceList failed");
931                 return ret;
932             }
933 
934             for (unsigned int j = 0; j < deviceList.size(); j++) {
935                 HiDumpHelper::GetInstance().SetNodeInfo(deviceList[j]);
936                 LOGI("DeviceManagerService::DmHiDumper SetNodeInfo.");
937             }
938         }
939     }
940     HiDumpHelper::GetInstance().HiDump(args, result);
941     return DM_OK;
942 }
943 
NotifyEvent(const std::string & pkgName,const int32_t eventId,const std::string & event)944 int32_t DeviceManagerService::NotifyEvent(const std::string &pkgName, const int32_t eventId, const std::string &event)
945 {
946     if (!PermissionManager::GetInstance().CheckPermission()) {
947         LOGE("The caller: %{public}s does not have permission to call NotifyEvent.", pkgName.c_str());
948         return ERR_DM_NO_PERMISSION;
949     }
950     if (!IsDMServiceImplReady()) {
951         LOGE("NotifyEvent failed, instance not init or init failed.");
952         return ERR_DM_NOT_INIT;
953     }
954     if (eventId == DM_NOTIFY_EVENT_ON_PINHOLDER_EVENT) {
955         LOGI("NotifyEvent on pin holder event start.");
956         CHECK_NULL_RETURN(pinHolder_, ERR_DM_POINT_NULL);
957         return pinHolder_->NotifyPinHolderEvent(pkgName, event);
958     }
959     return dmServiceImpl_->NotifyEvent(pkgName, eventId, event);
960 }
961 
LoadHardwareFwkService()962 void DeviceManagerService::LoadHardwareFwkService()
963 {
964     std::string extra;
965     std::vector<DmDeviceInfo> deviceList;
966     int32_t ret = GetTrustedDeviceList(DM_PKG_NAME, extra, deviceList);
967     if (ret != DM_OK) {
968         LOGE("LoadHardwareFwkService failed, get trusted devicelist failed.");
969         return;
970     }
971     if (deviceList.size() > 0) {
972         dmServiceImpl_->LoadHardwareFwkService();
973     }
974 }
975 
GetEncryptedUuidByNetworkId(const std::string & pkgName,const std::string & networkId,std::string & uuid)976 int32_t DeviceManagerService::GetEncryptedUuidByNetworkId(const std::string &pkgName, const std::string &networkId,
977     std::string &uuid)
978 {
979     if (pkgName.empty()) {
980         LOGE("Invalid parameter, pkgName is empty.");
981         return ERR_DM_INPUT_PARA_INVALID;
982     }
983     LOGI("PkgName = %{public}s", pkgName.c_str());
984     CHECK_NULL_RETURN(softbusListener_, ERR_DM_POINT_NULL);
985     int32_t ret = softbusListener_->GetUuidByNetworkId(networkId.c_str(), uuid);
986     if (ret != DM_OK) {
987         LOGE("GetUuidByNetworkId failed, ret : %{public}d", ret);
988         return ret;
989     }
990 
991     std::string appId = Crypto::Sha256(AppManager::GetInstance().GetAppId());
992     LOGI("appId = %{public}s, uuid = %{public}s.", GetAnonyString(appId).c_str(), GetAnonyString(uuid).c_str());
993     uuid = Crypto::Sha256(appId + "_" + uuid);
994     LOGI("encryptedUuid = %{public}s.", GetAnonyString(uuid).c_str());
995     return DM_OK;
996 }
997 
GenerateEncryptedUuid(const std::string & pkgName,const std::string & uuid,const std::string & appId,std::string & encryptedUuid)998 int32_t DeviceManagerService::GenerateEncryptedUuid(const std::string &pkgName, const std::string &uuid,
999     const std::string &appId, std::string &encryptedUuid)
1000 {
1001     if (pkgName.empty()) {
1002         LOGE("Invalid parameter, pkgName is empty.");
1003         return ERR_DM_INPUT_PARA_INVALID;
1004     }
1005     encryptedUuid = Crypto::Sha256(appId + "_" + uuid);
1006     LOGI("encryptedUuid = %{public}s.", GetAnonyString(encryptedUuid).c_str());
1007     return DM_OK;
1008 }
1009 
CheckApiPermission(int32_t permissionLevel)1010 int32_t DeviceManagerService::CheckApiPermission(int32_t permissionLevel)
1011 {
1012     LOGI("PermissionLevel: %{public}d", permissionLevel);
1013     int32_t ret = ERR_DM_NO_PERMISSION;
1014     switch (permissionLevel) {
1015         case NORMAL:
1016             if (PermissionManager::GetInstance().CheckNewPermission()) {
1017                 LOGI("The caller have permission to call");
1018                 ret = DM_OK;
1019             }
1020             break;
1021         case SYSTEM_BASIC:
1022             if (PermissionManager::GetInstance().CheckPermission()) {
1023                 LOGI("The caller have permission to call");
1024                 ret = DM_OK;
1025             }
1026             break;
1027         case SYSTEM_CORE:
1028             if (PermissionManager::GetInstance().CheckMonitorPermission()) {
1029                 LOGI("The caller have permission to call");
1030                 ret = DM_OK;
1031             }
1032             break;
1033         default:
1034             LOGE("DM have not this permissionLevel.");
1035             break;
1036     }
1037     return ret;
1038 }
1039 
GetNetworkTypeByNetworkId(const std::string & pkgName,const std::string & netWorkId,int32_t & networkType)1040 int32_t DeviceManagerService::GetNetworkTypeByNetworkId(const std::string &pkgName, const std::string &netWorkId,
1041                                                         int32_t &networkType)
1042 {
1043     if (!PermissionManager::GetInstance().CheckPermission()) {
1044         LOGE("The caller: %{public}s does not have permission to call GetNetworkTypeByNetworkId.", pkgName.c_str());
1045         return ERR_DM_NO_PERMISSION;
1046     }
1047     LOGI("Begin for pkgName = %{public}s", pkgName.c_str());
1048     if (pkgName.empty() || netWorkId.empty()) {
1049         LOGE("Invalid parameter, pkgName: %{public}s, netWorkId: %{public}s", pkgName.c_str(),
1050             GetAnonyString(netWorkId).c_str());
1051         return ERR_DM_INPUT_PARA_INVALID;
1052     }
1053     CHECK_NULL_RETURN(softbusListener_, ERR_DM_POINT_NULL);
1054     return softbusListener_->GetNetworkTypeByNetworkId(netWorkId.c_str(), networkType);
1055 }
1056 
ImportAuthCode(const std::string & pkgName,const std::string & authCode)1057 int32_t DeviceManagerService::ImportAuthCode(const std::string &pkgName, const std::string &authCode)
1058 {
1059     if (!PermissionManager::GetInstance().CheckNewPermission()) {
1060         LOGE("The caller: %{public}s does not have permission to call ImportAuthCode.", pkgName.c_str());
1061         return ERR_DM_NO_PERMISSION;
1062     }
1063     std::string processName = "";
1064     if (PermissionManager::GetInstance().GetCallerProcessName(processName) != DM_OK) {
1065         LOGE("Get caller process name failed, pkgname: %{public}s.", pkgName.c_str());
1066         return ERR_DM_FAILED;
1067     }
1068     if (!PermissionManager::GetInstance().CheckProcessNameValidOnAuthCode(processName)) {
1069         LOGE("The caller: %{public}s is not in white list.", processName.c_str());
1070         return ERR_DM_INPUT_PARA_INVALID;
1071     }
1072     LOGI("DeviceManagerService::ImportAuthCode begin.");
1073     if (authCode.empty() || pkgName.empty()) {
1074         LOGE("Invalid parameter, authCode: %{public}s.", GetAnonyString(authCode).c_str());
1075         return ERR_DM_INPUT_PARA_INVALID;
1076     }
1077     if (!IsDMServiceImplReady()) {
1078         LOGE("ImportAuthCode failed, instance not init or init failed.");
1079         return ERR_DM_NOT_INIT;
1080     }
1081     return dmServiceImpl_->ImportAuthCode(pkgName, authCode);
1082 }
1083 
ExportAuthCode(std::string & authCode)1084 int32_t DeviceManagerService::ExportAuthCode(std::string &authCode)
1085 {
1086     if (!PermissionManager::GetInstance().CheckNewPermission()) {
1087         LOGE("The caller does not have permission to call ExportAuthCode.");
1088         return ERR_DM_NO_PERMISSION;
1089     }
1090     std::string processName = "";
1091     if (PermissionManager::GetInstance().GetCallerProcessName(processName) != DM_OK) {
1092         LOGE("Get caller process name failed, processName: %{public}s.", processName.c_str());
1093         return ERR_DM_FAILED;
1094     }
1095     if (!PermissionManager::GetInstance().CheckProcessNameValidOnAuthCode(processName)) {
1096         LOGE("The caller: %{public}s is not in white list.", processName.c_str());
1097         return ERR_DM_INPUT_PARA_INVALID;
1098     }
1099     if (!IsDMServiceImplReady()) {
1100         LOGE("ExportAuthCode failed, instance not init or init failed.");
1101         return ERR_DM_NOT_INIT;
1102     }
1103     LOGI("DeviceManagerService::ExportAuthCode begin.");
1104     return dmServiceImpl_->ExportAuthCode(authCode);
1105 }
1106 
UnloadDMServiceImplSo()1107 void DeviceManagerService::UnloadDMServiceImplSo()
1108 {
1109     LOGI("Start.");
1110     std::lock_guard<std::mutex> lock(isImplLoadLock_);
1111     if (dmServiceImpl_ != nullptr) {
1112         dmServiceImpl_->Release();
1113     }
1114     void *so_handle = dlopen(LIB_IMPL_NAME, RTLD_NOW | RTLD_NOLOAD);
1115     if (so_handle != nullptr) {
1116         LOGI("DeviceManagerService so_handle is not nullptr.");
1117         dlclose(so_handle);
1118     }
1119 }
1120 
IsDMServiceAdapterLoad()1121 bool DeviceManagerService::IsDMServiceAdapterLoad()
1122 {
1123     LOGI("Start.");
1124     if (listener_ == nullptr) {
1125         LOGE("Dm service is not init.");
1126         return false;
1127     }
1128     std::lock_guard<std::mutex> lock(isAdapterLoadLock_);
1129     if (isAdapterSoLoaded_ && (dmServiceImplExt_ != nullptr)) {
1130         return true;
1131     }
1132 
1133     void *so_handle = dlopen(LIB_DM_ADAPTER_NAME, RTLD_NOW | RTLD_NODELETE);
1134     if (so_handle == nullptr) {
1135         LOGE("load dm service adapter so failed.");
1136         return false;
1137     }
1138     dlerror();
1139     auto func = (CreateDMServiceImplExtFuncPtr)dlsym(so_handle, "CreateDMServiceImplExtObject");
1140     if (dlerror() != nullptr || func == nullptr) {
1141         dlclose(so_handle);
1142         LOGE("Create object function is not exist.");
1143         return false;
1144     }
1145 
1146     dmServiceImplExt_ = std::shared_ptr<IDMServiceImplExt>(func());
1147     if (dmServiceImplExt_->Initialize(listener_) != DM_OK) {
1148         dlclose(so_handle);
1149         dmServiceImplExt_ = nullptr;
1150         isAdapterSoLoaded_ = false;
1151         LOGE("dm service adapter impl ext init failed.");
1152         return false;
1153     }
1154     isAdapterSoLoaded_ = true;
1155     LOGI("Success.");
1156     return true;
1157 }
1158 
UnloadDMServiceAdapter()1159 void DeviceManagerService::UnloadDMServiceAdapter()
1160 {
1161     LOGI("Start.");
1162     std::lock_guard<std::mutex> lock(isAdapterLoadLock_);
1163     if (dmServiceImplExt_ != nullptr) {
1164         dmServiceImplExt_->Release();
1165     }
1166     dmServiceImplExt_ = nullptr;
1167 
1168     void *so_handle = dlopen(LIB_DM_ADAPTER_NAME, RTLD_NOW | RTLD_NOLOAD);
1169     if (so_handle != nullptr) {
1170         LOGI("dm service adapter so_handle is not nullptr.");
1171         dlclose(so_handle);
1172     }
1173 }
1174 
StartDiscovering(const std::string & pkgName,const std::map<std::string,std::string> & discoverParam,const std::map<std::string,std::string> & filterOptions)1175 int32_t DeviceManagerService::StartDiscovering(const std::string &pkgName,
1176     const std::map<std::string, std::string> &discoverParam, const std::map<std::string, std::string> &filterOptions)
1177 {
1178     if (!PermissionManager::GetInstance().CheckNewPermission()) {
1179         LOGE("The caller does not have permission to call");
1180         return ERR_DM_NO_PERMISSION;
1181     }
1182     LOGI("Start for pkgName = %{public}s", pkgName.c_str());
1183     if (pkgName.empty()) {
1184         LOGE("Invalid parameter, pkgName is empty.");
1185         return ERR_DM_INPUT_PARA_INVALID;
1186     }
1187     if (discoverParam.find(PARAM_KEY_META_TYPE) != discoverParam.end()) {
1188         LOGI("StartDiscovering input MetaType = %{public}s", (discoverParam.find(PARAM_KEY_META_TYPE)->second).c_str());
1189     }
1190     CHECK_NULL_RETURN(discoveryMgr_, ERR_DM_POINT_NULL);
1191     return discoveryMgr_->StartDiscovering(pkgName, discoverParam, filterOptions);
1192 }
1193 
StopDiscovering(const std::string & pkgName,const std::map<std::string,std::string> & discoverParam)1194 int32_t DeviceManagerService::StopDiscovering(const std::string &pkgName,
1195     const std::map<std::string, std::string> &discoverParam)
1196 {
1197     if (!PermissionManager::GetInstance().CheckNewPermission()) {
1198         LOGE("The caller does not have permission to call");
1199         return ERR_DM_NO_PERMISSION;
1200     }
1201     LOGI("Start for pkgName = %{public}s", pkgName.c_str());
1202     if (pkgName.empty()) {
1203         LOGE("Invalid parameter, pkgName is empty.");
1204         return ERR_DM_INPUT_PARA_INVALID;
1205     }
1206     uint16_t subscribeId = -1;
1207     if (discoverParam.find(PARAM_KEY_SUBSCRIBE_ID) != discoverParam.end()) {
1208         subscribeId = std::atoi((discoverParam.find(PARAM_KEY_SUBSCRIBE_ID)->second).c_str());
1209     }
1210     if (discoverParam.find(PARAM_KEY_META_TYPE) != discoverParam.end()) {
1211         LOGI("StopDiscovering input MetaType = %{public}s", (discoverParam.find(PARAM_KEY_META_TYPE)->second).c_str());
1212     }
1213     CHECK_NULL_RETURN(discoveryMgr_, ERR_DM_POINT_NULL);
1214     return discoveryMgr_->StopDiscovering(pkgName, subscribeId);
1215 }
1216 
EnableDiscoveryListener(const std::string & pkgName,const std::map<std::string,std::string> & discoverParam,const std::map<std::string,std::string> & filterOptions)1217 int32_t DeviceManagerService::EnableDiscoveryListener(const std::string &pkgName,
1218     const std::map<std::string, std::string> &discoverParam, const std::map<std::string, std::string> &filterOptions)
1219 {
1220     if (!PermissionManager::GetInstance().CheckNewPermission()) {
1221         LOGE("The caller does not have permission to call");
1222         return ERR_DM_NO_PERMISSION;
1223     }
1224     LOGI("Start for pkgName = %{public}s", pkgName.c_str());
1225     if (pkgName.empty()) {
1226         LOGE("Invalid parameter, pkgName is empty.");
1227         return ERR_DM_INPUT_PARA_INVALID;
1228     }
1229     SoftbusListener::SetHostPkgName(pkgName);
1230     CHECK_NULL_RETURN(discoveryMgr_, ERR_DM_POINT_NULL);
1231     return discoveryMgr_->EnableDiscoveryListener(pkgName, discoverParam, filterOptions);
1232 }
1233 
DisableDiscoveryListener(const std::string & pkgName,const std::map<std::string,std::string> & extraParam)1234 int32_t DeviceManagerService::DisableDiscoveryListener(const std::string &pkgName,
1235     const std::map<std::string, std::string> &extraParam)
1236 {
1237     if (!PermissionManager::GetInstance().CheckNewPermission()) {
1238         LOGE("The caller does not have permission to call");
1239         return ERR_DM_NO_PERMISSION;
1240     }
1241     LOGI("Start for pkgName = %{public}s", pkgName.c_str());
1242     if (pkgName.empty()) {
1243         LOGE("Invalid parameter, pkgName is empty.");
1244         return ERR_DM_INPUT_PARA_INVALID;
1245     }
1246     CHECK_NULL_RETURN(discoveryMgr_, ERR_DM_POINT_NULL);
1247     return discoveryMgr_->DisableDiscoveryListener(pkgName, extraParam);
1248 }
1249 
StartAdvertising(const std::string & pkgName,const std::map<std::string,std::string> & advertiseParam)1250 int32_t DeviceManagerService::StartAdvertising(const std::string &pkgName,
1251     const std::map<std::string, std::string> &advertiseParam)
1252 {
1253     if (!PermissionManager::GetInstance().CheckNewPermission()) {
1254         LOGE("The caller does not have permission to call");
1255         return ERR_DM_NO_PERMISSION;
1256     }
1257     LOGI("Start for pkgName = %{public}s", pkgName.c_str());
1258     if (pkgName.empty()) {
1259         LOGE("Invalid parameter, pkgName is empty.");
1260         return ERR_DM_INPUT_PARA_INVALID;
1261     }
1262     CHECK_NULL_RETURN(advertiseMgr_, ERR_DM_POINT_NULL);
1263     return advertiseMgr_->StartAdvertising(pkgName, advertiseParam);
1264 }
1265 
StopAdvertising(const std::string & pkgName,const std::map<std::string,std::string> & advertiseParam)1266 int32_t DeviceManagerService::StopAdvertising(const std::string &pkgName,
1267     const std::map<std::string, std::string> &advertiseParam)
1268 {
1269     if (!PermissionManager::GetInstance().CheckNewPermission()) {
1270         LOGE("The caller does not have permission to call");
1271         return ERR_DM_NO_PERMISSION;
1272     }
1273     LOGI("Start for pkgName = %{public}s", pkgName.c_str());
1274     if (pkgName.empty()) {
1275         LOGE("Invalid parameter, pkgName is empty.");
1276         return ERR_DM_INPUT_PARA_INVALID;
1277     }
1278     if (advertiseParam.find(PARAM_KEY_META_TYPE) != advertiseParam.end()) {
1279         LOGI("StopAdvertising input MetaType=%{public}s", (advertiseParam.find(PARAM_KEY_META_TYPE)->second).c_str());
1280     }
1281     int32_t publishId = -1;
1282     if (advertiseParam.find(PARAM_KEY_PUBLISH_ID) != advertiseParam.end()) {
1283         publishId = std::atoi((advertiseParam.find(PARAM_KEY_PUBLISH_ID)->second).c_str());
1284     }
1285     CHECK_NULL_RETURN(advertiseMgr_, ERR_DM_POINT_NULL);
1286     return advertiseMgr_->StopAdvertising(pkgName, publishId);
1287 }
1288 
BindTarget(const std::string & pkgName,const PeerTargetId & targetId,const std::map<std::string,std::string> & bindParam)1289 int32_t DeviceManagerService::BindTarget(const std::string &pkgName, const PeerTargetId &targetId,
1290     const std::map<std::string, std::string> &bindParam)
1291 {
1292     if (!PermissionManager::GetInstance().CheckNewPermission()) {
1293         LOGE("The caller does not have permission to call");
1294         return ERR_DM_NO_PERMISSION;
1295     }
1296     LOGI("Start for pkgName = %{public}s", pkgName.c_str());
1297     if (pkgName.empty()) {
1298         LOGE("Invalid parameter, pkgName is empty.");
1299         return ERR_DM_INPUT_PARA_INVALID;
1300     }
1301     if (!IsDMServiceImplReady()) {
1302         LOGE("BindTarget failed, DMServiceImpl instance not init or init failed.");
1303         return ERR_DM_NOT_INIT;
1304     }
1305     if (bindParam.find(PARAM_KEY_META_TYPE) == bindParam.end()) {
1306         LOGI("BindTarget stardard begin.");
1307         if (targetId.wifiIp.empty() || targetId.wifiIp.length() > IP_STR_MAX_LEN) {
1308             return dmServiceImpl_->BindTarget(pkgName, targetId, bindParam);
1309         }
1310         ConnectionAddrType ipAddrType;
1311         std::map<std::string, std::string> &noConstBindParam =
1312             const_cast<std::map<std::string, std::string> &>(bindParam);
1313         if (SoftbusListener::GetIPAddrTypeFromCache(targetId.deviceId, targetId.wifiIp, ipAddrType) == DM_OK) {
1314             noConstBindParam.insert(std::pair<std::string, std::string>(PARAM_KEY_CONN_ADDR_TYPE,
1315                 std::to_string(ipAddrType)));
1316         }
1317         const std::map<std::string, std::string> &constBindParam =
1318             const_cast<const std::map<std::string, std::string> &>(noConstBindParam);
1319         return dmServiceImpl_->BindTarget(pkgName, targetId, constBindParam);
1320     }
1321     if (!IsDMServiceAdapterLoad()) {
1322         LOGE("BindTarget failed, adapter instance not init or init failed.");
1323         return ERR_DM_UNSUPPORTED_METHOD;
1324     }
1325     LOGI("BindTarget unstardard begin.");
1326     return dmServiceImplExt_->BindTargetExt(pkgName, targetId, bindParam);
1327 }
1328 
UnbindTarget(const std::string & pkgName,const PeerTargetId & targetId,const std::map<std::string,std::string> & unbindParam)1329 int32_t DeviceManagerService::UnbindTarget(const std::string &pkgName, const PeerTargetId &targetId,
1330     const std::map<std::string, std::string> &unbindParam)
1331 {
1332     if (!PermissionManager::GetInstance().CheckNewPermission()) {
1333         LOGE("The caller does not have permission to call");
1334         return ERR_DM_NO_PERMISSION;
1335     }
1336     LOGI("Start for pkgName = %{public}s", pkgName.c_str());
1337     if (pkgName.empty()) {
1338         LOGE("Invalid parameter, pkgName is empty.");
1339         return ERR_DM_INPUT_PARA_INVALID;
1340     }
1341     if (!IsDMServiceAdapterLoad()) {
1342         LOGE("UnbindTarget failed, instance not init or init failed.");
1343         return ERR_DM_UNSUPPORTED_METHOD;
1344     }
1345     if (unbindParam.find(PARAM_KEY_META_TYPE) == unbindParam.end()) {
1346         LOGE("input unbind parameter not contains META_TYPE, dm service adapter not supported.");
1347         return ERR_DM_INPUT_PARA_INVALID;
1348     }
1349     return dmServiceImplExt_->UnbindTargetExt(pkgName, targetId, unbindParam);
1350 }
1351 
RegisterPinHolderCallback(const std::string & pkgName)1352 int32_t DeviceManagerService::RegisterPinHolderCallback(const std::string &pkgName)
1353 {
1354     if (!PermissionManager::GetInstance().CheckPermission()) {
1355         LOGE("The caller: %{public}s does not have permission to call ImportAuthCode.", pkgName.c_str());
1356         return ERR_DM_NO_PERMISSION;
1357     }
1358     std::string processName = "";
1359     if (PermissionManager::GetInstance().GetCallerProcessName(processName) != DM_OK) {
1360         LOGE("Get caller process name failed, pkgname: %{public}s.", pkgName.c_str());
1361         return ERR_DM_FAILED;
1362     }
1363     if (!PermissionManager::GetInstance().CheckProcessNameValidOnPinHolder(processName)) {
1364         LOGE("The caller: %{public}s is not in white list.", processName.c_str());
1365         return ERR_DM_INPUT_PARA_INVALID;
1366     }
1367     LOGI("DeviceManagerService::RegisterPinHolderCallback begin.");
1368     if (pkgName.empty()) {
1369         LOGE("Invalid parameter, pkgName: %{public}s.", pkgName.c_str());
1370         return ERR_DM_INPUT_PARA_INVALID;
1371     }
1372     CHECK_NULL_RETURN(pinHolder_, ERR_DM_POINT_NULL);
1373     return pinHolder_->RegisterPinHolderCallback(pkgName);
1374 }
1375 
CreatePinHolder(const std::string & pkgName,const PeerTargetId & targetId,DmPinType pinType,const std::string & payload)1376 int32_t DeviceManagerService::CreatePinHolder(const std::string &pkgName, const PeerTargetId &targetId,
1377     DmPinType pinType, const std::string &payload)
1378 {
1379     if (!PermissionManager::GetInstance().CheckPermission()) {
1380         LOGE("The caller: %{public}s does not have permission to call CreatePinHolder.", pkgName.c_str());
1381         return ERR_DM_NO_PERMISSION;
1382     }
1383     std::string processName = "";
1384     if (PermissionManager::GetInstance().GetCallerProcessName(processName) != DM_OK) {
1385         LOGE("Get caller process name failed, pkgname: %{public}s.", pkgName.c_str());
1386         return ERR_DM_FAILED;
1387     }
1388     if (!PermissionManager::GetInstance().CheckProcessNameValidOnPinHolder(processName)) {
1389         LOGE("The caller: %{public}s is not in white list.", processName.c_str());
1390         return ERR_DM_INPUT_PARA_INVALID;
1391     }
1392     LOGI("DeviceManagerService::CreatePinHolder begin.");
1393     if (pkgName.empty()) {
1394         LOGE("Invalid parameter, pkgName: %{public}s.", pkgName.c_str());
1395         return ERR_DM_INPUT_PARA_INVALID;
1396     }
1397     CHECK_NULL_RETURN(pinHolder_, ERR_DM_POINT_NULL);
1398     return pinHolder_->CreatePinHolder(pkgName, targetId, pinType, payload);
1399 }
1400 
DestroyPinHolder(const std::string & pkgName,const PeerTargetId & targetId,DmPinType pinType,const std::string & payload)1401 int32_t DeviceManagerService::DestroyPinHolder(const std::string &pkgName, const PeerTargetId &targetId,
1402     DmPinType pinType, const std::string &payload)
1403 {
1404     if (!PermissionManager::GetInstance().CheckPermission()) {
1405         LOGE("The caller: %{public}s does not have permission to call DestroyPinHolder.", pkgName.c_str());
1406         return ERR_DM_NO_PERMISSION;
1407     }
1408     std::string processName = "";
1409     if (PermissionManager::GetInstance().GetCallerProcessName(processName) != DM_OK) {
1410         LOGE("Get caller process name failed, pkgname: %{public}s.", pkgName.c_str());
1411         return ERR_DM_FAILED;
1412     }
1413     if (!PermissionManager::GetInstance().CheckProcessNameValidOnPinHolder(processName)) {
1414         LOGE("The caller: %{public}s is not in white list.", processName.c_str());
1415         return ERR_DM_INPUT_PARA_INVALID;
1416     }
1417     LOGI("Begin.");
1418     if (pkgName.empty()) {
1419         LOGE("Invalid parameter, pkgName: %{public}s.", pkgName.c_str());
1420         return ERR_DM_INPUT_PARA_INVALID;
1421     }
1422     CHECK_NULL_RETURN(pinHolder_, ERR_DM_POINT_NULL);
1423     return pinHolder_->DestroyPinHolder(pkgName, targetId, pinType, payload);
1424 }
1425 
OnUnbindSessionOpened(int32_t socket,PeerSocketInfo info)1426 void DeviceManagerService::OnUnbindSessionOpened(int32_t socket, PeerSocketInfo info)
1427 {
1428     if (!IsDMServiceImplReady()) {
1429         LOGE("OnUnbindSessionOpened failed, instance not init or init failed.");
1430         return;
1431     }
1432     dmServiceImpl_->OnUnbindSessionOpened(socket, info);
1433 }
1434 
OnUnbindSessionCloseed(int32_t socket)1435 void DeviceManagerService::OnUnbindSessionCloseed(int32_t socket)
1436 {
1437     if (!IsDMServiceImplReady()) {
1438         LOGE("OnUnbindSessionCloseed failed, instance not init or init failed.");
1439         return;
1440     }
1441     dmServiceImpl_->OnUnbindSessionCloseed(socket);
1442 }
1443 
OnUnbindBytesReceived(int32_t socket,const void * data,uint32_t dataLen)1444 void DeviceManagerService::OnUnbindBytesReceived(int32_t socket, const void *data, uint32_t dataLen)
1445 {
1446     if (!IsDMServiceImplReady()) {
1447         LOGE("OnUnbindBytesReceived failed, instance not init or init failed.");
1448         return;
1449     }
1450     dmServiceImpl_->OnUnbindBytesReceived(socket, data, dataLen);
1451 }
1452 
DpAclAdd(const std::string & udid)1453 int32_t DeviceManagerService::DpAclAdd(const std::string &udid)
1454 {
1455     if (!PermissionManager::GetInstance().CheckNewPermission()) {
1456         LOGE("The caller does not have permission to call DpAclAdd.");
1457         return ERR_DM_NO_PERMISSION;
1458     }
1459     LOGI("Start.");
1460     if (!IsDMServiceImplReady()) {
1461         LOGE("DpAclAdd failed, instance not init or init failed.");
1462         return ERR_DM_NOT_INIT;
1463     }
1464     dmServiceImpl_->DpAclAdd(udid);
1465     LOGI("DeviceManagerService::DpAclAdd completed");
1466     return DM_OK;
1467 }
1468 
GetDeviceSecurityLevel(const std::string & pkgName,const std::string & networkId,int32_t & securityLevel)1469 int32_t DeviceManagerService::GetDeviceSecurityLevel(const std::string &pkgName, const std::string &networkId,
1470                                                      int32_t &securityLevel)
1471 {
1472     LOGI("Begin pkgName: %{public}s, networkId: %{public}s",
1473         pkgName.c_str(), GetAnonyString(networkId).c_str());
1474     if (!PermissionManager::GetInstance().CheckPermission()) {
1475         LOGE("The caller: %{public}s does not have permission to call GetDeviceSecurityLevel.", pkgName.c_str());
1476         return ERR_DM_NO_PERMISSION;
1477     }
1478     if (pkgName.empty() || networkId.empty()) {
1479         LOGE("Invalid parameter, pkgName: %{public}s, networkId: %{public}s", pkgName.c_str(),
1480             GetAnonyString(networkId).c_str());
1481         return ERR_DM_INPUT_PARA_INVALID;
1482     }
1483     CHECK_NULL_RETURN(softbusListener_, ERR_DM_POINT_NULL);
1484     int32_t ret = softbusListener_->GetDeviceSecurityLevel(networkId.c_str(), securityLevel);
1485     if (ret != DM_OK) {
1486         LOGE("GetDeviceSecurityLevel failed, ret = %{public}d", ret);
1487         return ret;
1488     }
1489     return DM_OK;
1490 }
1491 
IsSameAccount(const std::string & networkId)1492 int32_t DeviceManagerService::IsSameAccount(const std::string &networkId)
1493 {
1494     LOGI("NetworkId %{public}s.", GetAnonyString(networkId).c_str());
1495     if (!PermissionManager::GetInstance().CheckPermission()) {
1496         return ERR_DM_NO_PERMISSION;
1497     }
1498     std::string udid = "";
1499     if (SoftbusListener::GetUdidByNetworkId(networkId.c_str(), udid) != DM_OK) {
1500         LOGE("DeviceManagerService::IsSameAccount error: udid: %{public}s", GetAnonyString(udid).c_str());
1501         return ERR_DM_INPUT_PARA_INVALID;
1502     }
1503     if (!IsDMServiceImplReady()) {
1504         LOGE("IsSameAccount failed, instance not init or init failed.");
1505         return ERR_DM_NOT_INIT;
1506     }
1507     return dmServiceImpl_->IsSameAccount(udid);
1508 }
1509 
CheckAccessControl(const DmAccessCaller & caller,const DmAccessCallee & callee)1510 bool DeviceManagerService::CheckAccessControl(const DmAccessCaller &caller, const DmAccessCallee &callee)
1511 {
1512     if (!PermissionManager::GetInstance().CheckPermission()) {
1513         LOGE("The caller: %{public}s does not have permission to call CheckAccessControl.", caller.pkgName.c_str());
1514         return ERR_DM_NO_PERMISSION;
1515     }
1516     if (!IsDMServiceImplReady()) {
1517         LOGE("CheckAccessControl failed, instance not init or init failed.");
1518         return ERR_DM_NOT_INIT;
1519     }
1520     std::string srcUdid = "";
1521     SoftbusListener::GetUdidByNetworkId(caller.networkId.c_str(), srcUdid);
1522     std::string sinkUdid = "";
1523     SoftbusListener::GetUdidByNetworkId(callee.networkId.c_str(), sinkUdid);
1524     return dmServiceImpl_->CheckAccessControl(caller, srcUdid, callee, sinkUdid);
1525 }
1526 
CheckIsSameAccount(const DmAccessCaller & caller,const DmAccessCallee & callee)1527 bool DeviceManagerService::CheckIsSameAccount(const DmAccessCaller &caller, const DmAccessCallee &callee)
1528 {
1529     if (!PermissionManager::GetInstance().CheckPermission()) {
1530         LOGE("The caller: %{public}s does not have permission to call CheckIsSameAccount.", caller.pkgName.c_str());
1531         return ERR_DM_NO_PERMISSION;
1532     }
1533     if (!IsDMServiceImplReady()) {
1534         LOGE("CheckIsSameAccount failed, instance not init or init failed.");
1535         return ERR_DM_NOT_INIT;
1536     }
1537     std::string srcUdid = "";
1538     SoftbusListener::GetUdidByNetworkId(caller.networkId.c_str(), srcUdid);
1539     std::string sinkUdid = "";
1540     SoftbusListener::GetUdidByNetworkId(callee.networkId.c_str(), sinkUdid);
1541     return dmServiceImpl_->CheckIsSameAccount(caller, srcUdid, callee, sinkUdid);
1542 }
1543 
InitAccountInfo()1544 int32_t DeviceManagerService::InitAccountInfo()
1545 {
1546 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
1547     SubscribeAccountCommonEvent();
1548     LOGI("Success.");
1549 #endif
1550     return DM_OK;
1551 }
1552 
InitScreenLockEvent()1553 int32_t DeviceManagerService::InitScreenLockEvent()
1554 {
1555 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
1556     SubscribeScreenLockEvent();
1557     LOGI("Success.");
1558 #endif
1559     return DM_OK;
1560 }
1561 
1562 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
SubscribeAccountCommonEvent()1563 void DeviceManagerService::SubscribeAccountCommonEvent()
1564 {
1565     LOGI("Start");
1566     if (accountCommonEventManager_ == nullptr) {
1567         accountCommonEventManager_ = std::make_shared<DmAccountCommonEventManager>();
1568     }
1569     AccountEventCallback callback = [=](const auto &arg1, const auto &arg2) {
1570         this->AccountCommonEventCallback(arg1, arg2);
1571     };
1572     std::vector<std::string> AccountCommonEventVec;
1573     AccountCommonEventVec.emplace_back(CommonEventSupport::COMMON_EVENT_USER_SWITCHED);
1574     AccountCommonEventVec.emplace_back(CommonEventSupport::COMMON_EVENT_HWID_LOGOUT);
1575     AccountCommonEventVec.emplace_back(CommonEventSupport::COMMON_EVENT_HWID_LOGIN);
1576     if (accountCommonEventManager_->SubscribeAccountCommonEvent(AccountCommonEventVec, callback)) {
1577         LOGI("Success");
1578     }
1579     return;
1580 }
1581 
SubscribeScreenLockEvent()1582 void DeviceManagerService::SubscribeScreenLockEvent()
1583 {
1584     LOGI("Start");
1585     if (screenCommonEventManager_ == nullptr) {
1586         screenCommonEventManager_ = std::make_shared<DmScreenCommonEventManager>();
1587     }
1588     ScreenEventCallback callback = [=](const auto &arg1) { this->ScreenCommonEventCallback(arg1); };
1589     std::vector<std::string> screenEventVec;
1590     screenEventVec.emplace_back(CommonEventSupport::COMMON_EVENT_SCREEN_LOCKED);
1591     if (screenCommonEventManager_->SubscribeScreenCommonEvent(screenEventVec, callback)) {
1592         LOGI("Success");
1593     }
1594     return;
1595 }
1596 
AccountCommonEventCallback(int32_t userId,std::string commonEventType)1597 void DeviceManagerService::AccountCommonEventCallback(int32_t userId, std::string commonEventType)
1598 {
1599     LOGI("CommonEventType: %{public}s", commonEventType.c_str());
1600     if (commonEventType == CommonEventSupport::COMMON_EVENT_USER_SWITCHED) {
1601         MultipleUserConnector::SetSwitchOldUserId(userId);
1602         MultipleUserConnector::SetSwitchOldAccountId(MultipleUserConnector::GetOhosAccountId());
1603         MultipleUserConnector::SetSwitchOldAccountName(MultipleUserConnector::GetOhosAccountName());
1604         if (IsDMServiceAdapterLoad()) {
1605             dmServiceImplExt_->AccountUserSwitched(userId, MultipleUserConnector::GetOhosAccountId());
1606         }
1607     } else if (commonEventType == CommonEventSupport::COMMON_EVENT_HWID_LOGIN) {
1608         MultipleUserConnector::SetSwitchOldAccountId(MultipleUserConnector::GetOhosAccountId());
1609         MultipleUserConnector::SetSwitchOldAccountName(MultipleUserConnector::GetOhosAccountName());
1610     } else if (commonEventType == CommonEventSupport::COMMON_EVENT_HWID_LOGOUT) {
1611         HandleAccountLogout(MultipleUserConnector::GetCurrentAccountUserID(),
1612             MultipleUserConnector::GetSwitchOldAccountId());
1613     } else if (commonEventType == CommonEventSupport::COMMON_EVENT_USER_REMOVED) {
1614         HandleUserRemoved(userId);
1615     } else {
1616         LOGE("Invalied account common event.");
1617     }
1618     return;
1619 }
1620 
HandleAccountLogout(int32_t userId,const std::string & accountId)1621 void DeviceManagerService::HandleAccountLogout(int32_t userId, const std::string &accountId)
1622 {
1623     LOGI("UserId %{public}d, accountId %{public}s.", userId, GetAnonyString(accountId).c_str());
1624     if (IsDMServiceAdapterLoad()) {
1625         dmServiceImplExt_->AccountIdLogout(userId, accountId);
1626     }
1627     if (!IsDMServiceImplReady()) {
1628         LOGE("Init impl failed.");
1629         return;
1630     }
1631     std::map<std::string, int32_t> deviceMap;
1632     deviceMap = dmServiceImpl_->GetDeviceIdAndBindType(userId, accountId);
1633     for (const auto &item : deviceMap) {
1634         if (item.second == DM_IDENTICAL_ACCOUNT) {
1635             dmServiceImpl_->HandleIdentAccountLogout(item.first, userId, accountId);
1636         }
1637     }
1638 }
1639 
HandleUserRemoved(int32_t preUserId)1640 void DeviceManagerService::HandleUserRemoved(int32_t preUserId)
1641 {
1642     LOGI("PreUserId %{public}d.", preUserId);
1643     if (IsDMServiceImplReady()) {
1644         dmServiceImpl_->HandleUserRemoved(preUserId);
1645     }
1646 }
1647 
ScreenCommonEventCallback(std::string commonEventType)1648 void DeviceManagerService::ScreenCommonEventCallback(std::string commonEventType)
1649 {
1650     if (!IsDMImplSoLoaded()) {
1651         LOGE("ScreenCommonEventCallback failed, instance not init or init failed.");
1652         return;
1653     }
1654     dmServiceImpl_->ScreenCommonEventCallback(commonEventType);
1655 }
1656 #endif
1657 
HandleDeviceNotTrust(const std::string & msg)1658 void DeviceManagerService::HandleDeviceNotTrust(const std::string &msg)
1659 {
1660     LOGI("Start.");
1661     if (msg.empty()) {
1662         LOGE("DeviceManagerService::HandleDeviceNotTrust msg is empty.");
1663         return;
1664     }
1665     nlohmann::json msgJsonObj = nlohmann::json::parse(msg, nullptr, false);
1666     if (msgJsonObj.is_discarded()) {
1667         LOGE("HandleDeviceNotTrust msg prase error.");
1668         return;
1669     }
1670     if (!IsString(msgJsonObj, NETWORKID)) {
1671         LOGE("HandleDeviceNotTrust msg not contain networkId.");
1672         return;
1673     }
1674     std::string networkId = msgJsonObj[NETWORKID].get<std::string>();
1675     std::string udid = "";
1676     SoftbusCache::GetInstance().GetUdidFromCache(networkId.c_str(), udid);
1677     LOGI("NetworkId: %{public}s, udid: %{public}s.",
1678         GetAnonyString(networkId).c_str(), GetAnonyString(udid).c_str());
1679     if (IsDMServiceImplReady()) {
1680         dmServiceImpl_->HandleDeviceNotTrust(udid);
1681     }
1682     if (IsDMServiceAdapterLoad()) {
1683         dmServiceImplExt_->HandleDeviceNotTrust(udid);
1684     }
1685     return;
1686 }
1687 
SetDnPolicy(const std::string & pkgName,std::map<std::string,std::string> & policy)1688 int32_t DeviceManagerService::SetDnPolicy(const std::string &pkgName, std::map<std::string, std::string> &policy)
1689 {
1690     if (!PermissionManager::GetInstance().CheckNewPermission()) {
1691         LOGE("The caller does not have permission to call");
1692         return ERR_DM_NO_PERMISSION;
1693     }
1694     LOGI("Start for pkgName = %{public}s", pkgName.c_str());
1695     if (pkgName.empty()) {
1696         LOGE("Invalid parameter, pkgName is empty.");
1697         return ERR_DM_INPUT_PARA_INVALID;
1698     }
1699     auto policyStrategyIter = policy.find(PARAM_KEY_POLICY_STRATEGY_FOR_BLE);
1700     if (policyStrategyIter == policy.end()) {
1701         LOGE("Invalid parameter, DM_POLICY_STRATEGY_FOR_BLE is empty.");
1702         return ERR_DM_INPUT_PARA_INVALID;
1703     }
1704     auto timeOutIter = policy.find(PARAM_KEY_POLICY_TIME_OUT);
1705     if (timeOutIter == policy.end()) {
1706         LOGE("Invalid parameter, DM_POLICY_TIMEOUT is empty.");
1707         return ERR_DM_INPUT_PARA_INVALID;
1708     }
1709     if (!IsNumberString(policyStrategyIter->second)) {
1710         LOGE("Invalid parameter, DM_POLICY_STRATEGY_FOR_BLE is not number.");
1711         return ERR_DM_INPUT_PARA_INVALID;
1712     }
1713     if (!IsNumberString(timeOutIter->second)) {
1714         LOGE("Invalid parameter, DM_POLICY_TIMEOUT is not number.");
1715         return ERR_DM_INPUT_PARA_INVALID;
1716     }
1717     int32_t policyStrategy = std::atoi(policyStrategyIter->second.c_str());
1718     int32_t timeOut = std::atoi(timeOutIter->second.c_str());
1719     LOGD("strategy: %{public}d, timeOut: %{public}d", policyStrategy, timeOut);
1720     if (!IsDMServiceAdapterLoad()) {
1721         LOGE("SetDnPolicy failed, instance not init or init failed.");
1722         return ERR_DM_UNSUPPORTED_METHOD;
1723     }
1724     return dmServiceImplExt_->SetDnPolicy(policyStrategy, timeOut);
1725 }
1726 
1727 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
ConvertUdidHashToAnoyDeviceId(DmDeviceInfo & deviceInfo)1728 void DeviceManagerService::ConvertUdidHashToAnoyDeviceId(DmDeviceInfo &deviceInfo)
1729 {
1730     std::string udidHashTemp = "";
1731     if (ConvertUdidHashToAnoyDeviceId(deviceInfo.deviceId, udidHashTemp) == DM_OK) {
1732         (void)memset_s(deviceInfo.deviceId, DM_MAX_DEVICE_ID_LEN, 0, DM_MAX_DEVICE_ID_LEN);
1733         if (memcpy_s(deviceInfo.deviceId, DM_MAX_DEVICE_ID_LEN, udidHashTemp.c_str(), udidHashTemp.length()) != 0) {
1734             LOGE("get deviceId: %{public}s failed", GetAnonyString(udidHashTemp).c_str());
1735         }
1736     }
1737 }
1738 
ConvertUdidHashToAnoyDeviceId(const std::string & udidHash,std::string & result)1739 int32_t DeviceManagerService::ConvertUdidHashToAnoyDeviceId(const std::string &udidHash, std::string &result)
1740 {
1741     LOGI("udidHash %{public}s.", GetAnonyString(udidHash).c_str());
1742     std::string appId = AppManager::GetInstance().GetAppId();
1743     if (appId.empty()) {
1744         LOGD("GetAppId failed");
1745         return ERR_DM_FAILED;
1746     }
1747     DmKVValue kvValue;
1748     int32_t ret = Crypto::ConvertUdidHashToAnoyAndSave(appId, udidHash, kvValue);
1749     if (ret != DM_OK) {
1750         return ERR_DM_FAILED;
1751     }
1752     result = kvValue.anoyDeviceId;
1753     return DM_OK;
1754 }
1755 
GetUdidHashByAnoyDeviceId(const std::string & anoyDeviceId,std::string & udidHash)1756 int32_t DeviceManagerService::GetUdidHashByAnoyDeviceId(const std::string &anoyDeviceId, std::string &udidHash)
1757 {
1758     LOGI("anoyDeviceId %{public}s.", GetAnonyString(anoyDeviceId).c_str());
1759     DmKVValue kvValue;
1760     if (KVAdapterManager::GetInstance().Get(anoyDeviceId, kvValue) != DM_OK) {
1761         LOGD("Get kv value from DB failed");
1762         return ERR_DM_FAILED;
1763     }
1764     udidHash = kvValue.udidHash;
1765     LOGI("udidHash %{public}s.", GetAnonyString(udidHash).c_str());
1766     return DM_OK;
1767 }
1768 #endif
1769 
GetNetworkIdByUdid(const std::string & pkgName,const std::string & udid,std::string & networkId)1770 int32_t DeviceManagerService::GetNetworkIdByUdid(const std::string &pkgName, const std::string &udid,
1771                                                  std::string &networkId)
1772 {
1773     if (!PermissionManager::GetInstance().CheckPermission()) {
1774         LOGE("The caller: %{public}s does not have permission to call GetNetworkIdByUdid.", pkgName.c_str());
1775         return ERR_DM_NO_PERMISSION;
1776     }
1777     if (pkgName.empty() || udid.empty()) {
1778         LOGE("Invalid parameter, pkgName: %{public}s, udid: %{public}s", pkgName.c_str(), GetAnonyString(udid).c_str());
1779         return ERR_DM_INPUT_PARA_INVALID;
1780     }
1781     return SoftbusListener::GetNetworkIdByUdid(udid, networkId);
1782 }
1783 
SubscribePackageCommonEvent()1784 void DeviceManagerService::SubscribePackageCommonEvent()
1785 {
1786     LOGI("Start");
1787 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
1788     if (packageCommonEventManager_ == nullptr) {
1789         packageCommonEventManager_ = std::make_shared<DmPackageCommonEventManager>();
1790     }
1791     PackageEventCallback callback = [=](const auto &arg1, const auto &arg2) {
1792         KVAdapterManager::GetInstance().AppUnintall(arg1);
1793     };
1794     std::vector<std::string> commonEventVec;
1795     commonEventVec.emplace_back(CommonEventSupport::COMMON_EVENT_PACKAGE_REMOVED);
1796     commonEventVec.emplace_back(CommonEventSupport::COMMON_EVENT_PACKAGE_FULLY_REMOVED);
1797     if (packageCommonEventManager_->SubscribePackageCommonEvent(commonEventVec, callback)) {
1798         LOGI("Success");
1799     }
1800 #endif
1801 }
1802 
HandleDeviceScreenStatusChange(DmDeviceInfo & deviceInfo)1803 void DeviceManagerService::HandleDeviceScreenStatusChange(DmDeviceInfo &deviceInfo)
1804 {
1805     if (IsDMServiceImplReady()) {
1806         dmServiceImpl_->HandleDeviceScreenStatusChange(deviceInfo);
1807     }
1808 }
1809 
GetDeviceScreenStatus(const std::string & pkgName,const std::string & networkId,int32_t & screenStatus)1810 int32_t DeviceManagerService::GetDeviceScreenStatus(const std::string &pkgName, const std::string &networkId,
1811     int32_t &screenStatus)
1812 {
1813     LOGI("Begin pkgName: %{public}s, networkId: %{public}s", pkgName.c_str(), GetAnonyString(networkId).c_str());
1814     if (!PermissionManager::GetInstance().CheckPermission()) {
1815         LOGE("The caller: %{public}s does not have permission to call GetDeviceScreenStatus.", pkgName.c_str());
1816         return ERR_DM_NO_PERMISSION;
1817     }
1818     if (pkgName.empty() || networkId.empty()) {
1819         LOGE("Invalid parameter, pkgName: %{public}s, networkId: %{public}s", pkgName.c_str(),
1820             GetAnonyString(networkId).c_str());
1821         return ERR_DM_INPUT_PARA_INVALID;
1822     }
1823     CHECK_NULL_RETURN(softbusListener_, ERR_DM_POINT_NULL);
1824     int32_t ret = softbusListener_->GetDeviceScreenStatus(networkId.c_str(), screenStatus);
1825     if (ret != DM_OK) {
1826         LOGE("GetDeviceScreenStatus failed, ret = %{public}d", ret);
1827         return ret;
1828     }
1829     return DM_OK;
1830 }
1831 
HandleCredentialAuthStatus(const std::string & proofInfo,uint16_t deviceTypeId,int32_t errcode)1832 void DeviceManagerService::HandleCredentialAuthStatus(const std::string &proofInfo, uint16_t deviceTypeId,
1833                                                       int32_t errcode)
1834 {
1835     if (IsDMServiceImplReady()) {
1836         dmServiceImpl_->HandleCredentialAuthStatus(proofInfo, deviceTypeId, errcode);
1837     }
1838 }
1839 } // namespace DistributedHardware
1840 } // namespace OHOS