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 ¶ms)
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