• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 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_impl.h"
17 
18 #include <functional>
19 
20 #include "dm_anonymous.h"
21 #include "dm_constants.h"
22 #include "dm_crypto.h"
23 #include "dm_distributed_hardware_load.h"
24 #include "dm_log.h"
25 #include "multiple_user_connector.h"
26 #include "app_manager.h"
27 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
28 #include "dm_common_event_manager.h"
29 #include "common_event_support.h"
30 using namespace OHOS::EventFwk;
31 #endif
32 
33 namespace OHOS {
34 namespace DistributedHardware {
DeviceManagerServiceImpl()35 DeviceManagerServiceImpl::DeviceManagerServiceImpl()
36 {
37     LOGI("DeviceManagerServiceImpl constructor");
38 }
39 
~DeviceManagerServiceImpl()40 DeviceManagerServiceImpl::~DeviceManagerServiceImpl()
41 {
42     LOGI("DeviceManagerServiceImpl destructor");
43 }
44 
Initialize(const std::shared_ptr<IDeviceManagerServiceListener> & listener)45 int32_t DeviceManagerServiceImpl::Initialize(const std::shared_ptr<IDeviceManagerServiceListener> &listener)
46 {
47     LOGI("DeviceManagerServiceImpl Initialize");
48     if (softbusConnector_ == nullptr) {
49         softbusConnector_ = std::make_shared<SoftbusConnector>();
50     }
51     if (hiChainConnector_ == nullptr) {
52         hiChainConnector_ = std::make_shared<HiChainConnector>();
53     }
54     if (deviceStateMgr_ == nullptr) {
55         deviceStateMgr_ = std::make_shared<DmDeviceStateManager>(softbusConnector_, listener, hiChainConnector_);
56         deviceStateMgr_->RegisterSoftbusStateCallback();
57     }
58     if (discoveryMgr_ == nullptr) {
59         discoveryMgr_ = std::make_shared<DmDiscoveryManager>(softbusConnector_, listener, hiChainConnector_);
60     }
61     if (publishMgr_ == nullptr) {
62         publishMgr_ = std::make_shared<DmPublishManager>(softbusConnector_, listener);
63     }
64     if (authMgr_ == nullptr) {
65         authMgr_ = std::make_shared<DmAuthManager>(softbusConnector_, listener, hiChainConnector_);
66         softbusConnector_->GetSoftbusSession()->RegisterSessionCallback(authMgr_);
67         hiChainConnector_->RegisterHiChainCallback(authMgr_);
68     }
69     if (credentialMgr_ == nullptr) {
70         credentialMgr_ = std::make_shared<DmCredentialManager>(hiChainConnector_, listener);
71     }
72 
73     int32_t userId = MultipleUserConnector::GetCurrentAccountUserID();
74     if (userId > 0) {
75         LOGI("get current account user id success");
76         MultipleUserConnector::SetSwitchOldUserId(userId);
77     }
78 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
79     if (commonEventManager_ == nullptr) {
80         commonEventManager_ = std::make_shared<DmCommonEventManager>();
81     }
82     CommomEventCallback callback = std::bind(&DmAuthManager::UserSwitchEventCallback, *authMgr_.get(),
83         std::placeholders::_1);
84     if (commonEventManager_->SubscribeServiceEvent(CommonEventSupport::COMMON_EVENT_USER_SWITCHED, callback)) {
85         LOGI("subscribe service user switch common event success");
86     }
87 #endif
88     LOGI("Init success, singleton initialized");
89     return DM_OK;
90 }
91 
Release()92 void DeviceManagerServiceImpl::Release()
93 {
94     LOGI("DeviceManagerServiceImpl Release");
95 #if !(defined(__LITEOS_M__) || defined(LITE_DEVICE))
96     commonEventManager_ = nullptr;
97 #endif
98     softbusConnector_->GetSoftbusSession()->UnRegisterSessionCallback();
99     hiChainConnector_->UnRegisterHiChainCallback();
100     authMgr_ = nullptr;
101     deviceStateMgr_ = nullptr;
102     discoveryMgr_ = nullptr;
103     publishMgr_ = nullptr;
104     softbusConnector_ = nullptr;
105     abilityMgr_ = nullptr;
106     hiChainConnector_ = nullptr;
107 }
108 
StartDeviceDiscovery(const std::string & pkgName,const DmSubscribeInfo & subscribeInfo,const std::string & extra)109 int32_t DeviceManagerServiceImpl::StartDeviceDiscovery(const std::string &pkgName, const DmSubscribeInfo &subscribeInfo,
110     const std::string &extra)
111 {
112     if (pkgName.empty()) {
113         LOGE("StartDeviceDiscovery failed, pkgName is empty");
114         return ERR_DM_INPUT_PARA_INVALID;
115     }
116     return discoveryMgr_->StartDeviceDiscovery(pkgName, subscribeInfo, extra);
117 }
118 
StartDeviceDiscovery(const std::string & pkgName,const uint16_t subscribeId,const std::string & filterOptions)119 int32_t DeviceManagerServiceImpl::StartDeviceDiscovery(const std::string &pkgName, const uint16_t subscribeId,
120     const std::string &filterOptions)
121 {
122     if (pkgName.empty()) {
123         LOGE("StartDeviceDiscovery failed, pkgName is empty");
124         return ERR_DM_INPUT_PARA_INVALID;
125     }
126     return discoveryMgr_->StartDeviceDiscovery(pkgName, subscribeId, filterOptions);
127 }
128 
StopDeviceDiscovery(const std::string & pkgName,uint16_t subscribeId)129 int32_t DeviceManagerServiceImpl::StopDeviceDiscovery(const std::string &pkgName, uint16_t subscribeId)
130 {
131     if (pkgName.empty()) {
132         LOGE("StopDeviceDiscovery failed, pkgName is empty");
133         return ERR_DM_INPUT_PARA_INVALID;
134     }
135     return discoveryMgr_->StopDeviceDiscovery(pkgName, subscribeId);
136 }
137 
PublishDeviceDiscovery(const std::string & pkgName,const DmPublishInfo & publishInfo)138 int32_t DeviceManagerServiceImpl::PublishDeviceDiscovery(const std::string &pkgName, const DmPublishInfo &publishInfo)
139 {
140     if (pkgName.empty()) {
141         LOGE("PublishDeviceDiscovery failed, pkgName is empty");
142         return ERR_DM_INPUT_PARA_INVALID;
143     }
144     return publishMgr_->PublishDeviceDiscovery(pkgName, publishInfo);
145 }
146 
UnPublishDeviceDiscovery(const std::string & pkgName,int32_t publishId)147 int32_t DeviceManagerServiceImpl::UnPublishDeviceDiscovery(const std::string &pkgName, int32_t publishId)
148 {
149     if (pkgName.empty()) {
150         LOGE("UnPublishDeviceDiscovery failed, pkgName is empty");
151         return ERR_DM_INPUT_PARA_INVALID;
152     }
153     return publishMgr_->UnPublishDeviceDiscovery(pkgName, publishId);
154 }
155 
AuthenticateDevice(const std::string & pkgName,int32_t authType,const std::string & deviceId,const std::string & extra)156 int32_t DeviceManagerServiceImpl::AuthenticateDevice(const std::string &pkgName, int32_t authType,
157     const std::string &deviceId, const std::string &extra)
158 {
159     if (pkgName.empty() || deviceId.empty()) {
160         LOGE("DeviceManagerServiceImpl::AuthenticateDevice failed, pkgName is %s, deviceId is %s, extra is %s",
161              pkgName.c_str(), GetAnonyString(deviceId).c_str(), extra.c_str());
162         return ERR_DM_INPUT_PARA_INVALID;
163     }
164     return authMgr_->AuthenticateDevice(pkgName, authType, deviceId, extra);
165 }
166 
UnAuthenticateDevice(const std::string & pkgName,const std::string & networkId)167 int32_t DeviceManagerServiceImpl::UnAuthenticateDevice(const std::string &pkgName, const std::string &networkId)
168 {
169     if (pkgName.empty() || networkId.empty()) {
170         LOGE("DeviceManagerServiceImpl::AuthenticateDevice failed, pkgName is %s, networkId is %s",
171             pkgName.c_str(), GetAnonyString(networkId).c_str());
172         return ERR_DM_INPUT_PARA_INVALID;
173     }
174     return authMgr_->UnAuthenticateDevice(pkgName, networkId);
175 }
176 
BindDevice(const std::string & pkgName,int32_t authType,const std::string & udidHash,const std::string & bindParam)177 int32_t DeviceManagerServiceImpl::BindDevice(const std::string &pkgName, int32_t authType, const std::string &udidHash,
178     const std::string &bindParam)
179 {
180     if (pkgName.empty() || udidHash.empty()) {
181         LOGE("DeviceManagerServiceImpl::AuthenticateDevice failed, pkgName is %s, udidHash is %s, bindParam is %s",
182              pkgName.c_str(), GetAnonyString(udidHash).c_str(), bindParam.c_str());
183         return ERR_DM_INPUT_PARA_INVALID;
184     }
185 
186     return authMgr_->AuthenticateDevice(pkgName, authType, udidHash, bindParam);
187 }
188 
UnBindDevice(const std::string & pkgName,const std::string & udidHash)189 int32_t DeviceManagerServiceImpl::UnBindDevice(const std::string &pkgName, const std::string &udidHash)
190 {
191     if (pkgName.empty() || udidHash.empty()) {
192         LOGE("DeviceManagerServiceImpl::UnBindDevice failed, pkgName is %s, udidHash is %s",
193             pkgName.c_str(), GetAnonyString(udidHash).c_str());
194         return ERR_DM_INPUT_PARA_INVALID;
195     }
196     return authMgr_->UnBindDevice(pkgName, udidHash);
197 }
198 
VerifyAuthentication(const std::string & authParam)199 int32_t DeviceManagerServiceImpl::VerifyAuthentication(const std::string &authParam)
200 {
201     return authMgr_->VerifyAuthentication(authParam);
202 }
203 
GetFaParam(std::string & pkgName,DmAuthParam & authParam)204 int32_t DeviceManagerServiceImpl::GetFaParam(std::string &pkgName, DmAuthParam &authParam)
205 {
206     if (pkgName.empty()) {
207         LOGE("GetFaParam failed, pkgName is empty");
208         return ERR_DM_INPUT_PARA_INVALID;
209     }
210     if (authMgr_ != nullptr) {
211         authMgr_->GetAuthenticationParam(authParam);
212     }
213     return DM_OK;
214 }
215 
SetUserOperation(std::string & pkgName,int32_t action,const std::string & params)216 int32_t DeviceManagerServiceImpl::SetUserOperation(std::string &pkgName, int32_t action,
217     const std::string &params)
218 {
219     if (pkgName.empty() || params.empty()) {
220         LOGE("DeviceManagerServiceImpl::SetUserOperation error: Invalid parameter, pkgName: %s, extra: %s",
221             pkgName.c_str(), params.c_str());
222         return ERR_DM_INPUT_PARA_INVALID;
223     }
224     if (authMgr_ != nullptr) {
225         authMgr_->OnUserOperation(action, params);
226     }
227     return DM_OK;
228 }
229 
RegisterDevStateCallback(const std::string & pkgName,const std::string & extra)230 int32_t DeviceManagerServiceImpl::RegisterDevStateCallback(const std::string &pkgName, const std::string &extra)
231 {
232     if (pkgName.empty()) {
233         LOGE("DeviceManagerServiceImpl::RegisterDevStateCallback error: Invalid parameter, pkgName: %s, extra: %s",
234             pkgName.c_str(), extra.c_str());
235         return ERR_DM_INPUT_PARA_INVALID;
236     }
237     if (deviceStateMgr_ != nullptr) {
238         deviceStateMgr_->RegisterDevStateCallback(pkgName, extra);
239     }
240     return DM_OK;
241 }
242 
UnRegisterDevStateCallback(const std::string & pkgName,const std::string & extra)243 int32_t DeviceManagerServiceImpl::UnRegisterDevStateCallback(const std::string &pkgName, const std::string &extra)
244 {
245     if (pkgName.empty()) {
246         LOGE("UnRegisterDevStateCallback failed, pkgName is empty");
247         return ERR_DM_INPUT_PARA_INVALID;
248     }
249     if (deviceStateMgr_!= nullptr) {
250         deviceStateMgr_->UnRegisterDevStateCallback(pkgName, extra);
251     }
252     return DM_OK;
253 }
254 
HandleDeviceOnline(DmDeviceInfo & info)255 void DeviceManagerServiceImpl::HandleDeviceOnline(DmDeviceInfo &info)
256 {
257     if (softbusConnector_ == nullptr) {
258         LOGE("softbusConnector_ is nullpter!");
259         return;
260     }
261 
262     std::string deviceId = GetUdidHashByNetworkId(info.networkId);
263     if (memcpy_s(info.deviceId, DM_MAX_DEVICE_ID_LEN, deviceId.c_str(),
264         deviceId.length()) != 0) {
265         LOGE("get deviceId: %s failed", GetAnonyString(deviceId).c_str());
266     }
267     softbusConnector_->HandleDeviceOnline(info);
268 }
269 
HandleDeviceOffline(DmDeviceInfo & info)270 void DeviceManagerServiceImpl::HandleDeviceOffline(DmDeviceInfo &info)
271 {
272     if (softbusConnector_ == nullptr) {
273         LOGE("softbusConnector_ is nullpter!");
274         return;
275     }
276 
277     std::string deviceId = GetUdidHashByNetworkId(info.networkId);
278     if (memcpy_s(info.deviceId, DM_MAX_DEVICE_ID_LEN, deviceId.c_str(),
279         deviceId.length()) != 0) {
280         LOGE("get deviceId: %s failed", GetAnonyString(deviceId).c_str());
281     }
282     softbusConnector_->HandleDeviceOffline(info);
283 
284     std::string udid;
285     int32_t ret = softbusConnector_->GetUdidByNetworkId(info.networkId, udid);
286     if (ret == DM_OK) {
287         softbusConnector_->EraseUdidFromMap(udid);
288     }
289 }
290 
HandleDeviceNameChange(DmDeviceInfo & info)291 void DeviceManagerServiceImpl::HandleDeviceNameChange(DmDeviceInfo &info)
292 {
293     if (softbusConnector_ == nullptr) {
294         LOGE("softbusConnector_ is nullpter!");
295         return;
296     }
297     std::string deviceId = GetUdidHashByNetworkId(info.networkId);
298     if (memcpy_s(info.deviceId, DM_MAX_DEVICE_ID_LEN, deviceId.c_str(),
299         deviceId.length()) != 0) {
300         LOGE("get deviceId: %s failed", GetAnonyString(deviceId).c_str());
301     }
302     softbusConnector_->HandleDeviceNameChange(info);
303 }
304 
GetUdidHashByNetworkId(const std::string & networkId)305 std::string DeviceManagerServiceImpl::GetUdidHashByNetworkId(const std::string &networkId)
306 {
307     if (softbusConnector_ == nullptr) {
308         LOGE("softbusConnector_ is nullpter!");
309         return "";
310     }
311     std::string udid = "";
312     int32_t ret = softbusConnector_->GetUdidByNetworkId(networkId.c_str(), udid);
313     if (ret != DM_OK) {
314         LOGE("GetUdidByNetworkId failed ret: %d", ret);
315         return "";
316     }
317     return softbusConnector_->GetDeviceUdidHashByUdid(udid);
318 }
319 
OnSessionOpened(int sessionId,int result)320 int DeviceManagerServiceImpl::OnSessionOpened(int sessionId, int result)
321 {
322     return SoftbusSession::OnSessionOpened(sessionId, result);
323 }
324 
OnSessionClosed(int sessionId)325 void DeviceManagerServiceImpl::OnSessionClosed(int sessionId)
326 {
327     SoftbusSession::OnSessionClosed(sessionId);
328 }
329 
OnBytesReceived(int sessionId,const void * data,unsigned int dataLen)330 void DeviceManagerServiceImpl::OnBytesReceived(int sessionId, const void *data, unsigned int dataLen)
331 {
332     SoftbusSession::OnBytesReceived(sessionId, data, dataLen);
333 }
334 
RequestCredential(const std::string & reqJsonStr,std::string & returnJsonStr)335 int32_t DeviceManagerServiceImpl::RequestCredential(const std::string &reqJsonStr, std::string &returnJsonStr)
336 {
337     if (reqJsonStr.empty()) {
338         LOGE("reqJsonStr is empty");
339         return ERR_DM_INPUT_PARA_INVALID;
340     }
341     if (credentialMgr_== nullptr) {
342         LOGE("credentialMgr_ is nullptr");
343         return ERR_DM_POINT_NULL;
344     }
345     return credentialMgr_->RequestCredential(reqJsonStr, returnJsonStr);
346 }
347 
ImportCredential(const std::string & pkgName,const std::string & credentialInfo)348 int32_t DeviceManagerServiceImpl::ImportCredential(const std::string &pkgName, const std::string &credentialInfo)
349 {
350     if (pkgName.empty() || credentialInfo.empty()) {
351         LOGE("DeviceManagerServiceImpl::ImportCredential failed, pkgName is %s, credentialInfo is %s",
352             pkgName.c_str(), credentialInfo.c_str());
353         return ERR_DM_INPUT_PARA_INVALID;
354     }
355     if (credentialMgr_== nullptr) {
356         LOGE("credentialMgr_ is nullptr");
357         return ERR_DM_POINT_NULL;
358     }
359     return credentialMgr_->ImportCredential(pkgName, credentialInfo);
360 }
361 
DeleteCredential(const std::string & pkgName,const std::string & deleteInfo)362 int32_t DeviceManagerServiceImpl::DeleteCredential(const std::string &pkgName, const std::string &deleteInfo)
363 {
364     if (pkgName.empty() || deleteInfo.empty()) {
365         LOGE("DeviceManagerServiceImpl::DeleteCredential failed, pkgName is %s, deleteInfo is %s",
366             pkgName.c_str(), deleteInfo.c_str());
367         return ERR_DM_INPUT_PARA_INVALID;
368     }
369     if (credentialMgr_== nullptr) {
370         LOGE("credentialMgr_ is nullptr");
371         return ERR_DM_POINT_NULL;
372     }
373     return credentialMgr_->DeleteCredential(pkgName, deleteInfo);
374 }
375 
RegisterCredentialCallback(const std::string & pkgName)376 int32_t DeviceManagerServiceImpl::RegisterCredentialCallback(const std::string &pkgName)
377 {
378     if (pkgName.empty()) {
379         LOGE("RegisterCredentialCallback failed, pkgName is empty");
380         return ERR_DM_INPUT_PARA_INVALID;
381     }
382     if (credentialMgr_ == nullptr) {
383         LOGE("credentialMgr_ is nullptr");
384         return ERR_DM_POINT_NULL;
385     }
386     return credentialMgr_->RegisterCredentialCallback(pkgName);
387 }
388 
UnRegisterCredentialCallback(const std::string & pkgName)389 int32_t DeviceManagerServiceImpl::UnRegisterCredentialCallback(const std::string &pkgName)
390 {
391     if (pkgName.empty()) {
392         LOGE("UnRegisterCredentialCallback failed, pkgName is empty");
393         return ERR_DM_INPUT_PARA_INVALID;
394     }
395     if (credentialMgr_== nullptr) {
396         LOGE("credentialMgr_ is nullptr");
397         return ERR_DM_POINT_NULL;
398     }
399     return credentialMgr_->UnRegisterCredentialCallback(pkgName);
400 }
401 
RegisterUiStateCallback(const std::string & pkgName)402 int32_t DeviceManagerServiceImpl::RegisterUiStateCallback(const std::string &pkgName)
403 {
404     if (pkgName.empty()) {
405         LOGE("RegisterUiStateCallback failed, pkgName is empty");
406         return ERR_DM_INPUT_PARA_INVALID;
407     }
408     if (authMgr_ == nullptr) {
409         LOGE("authMgr_ is nullptr");
410         return ERR_DM_POINT_NULL;
411     }
412     return authMgr_->RegisterUiStateCallback(pkgName);
413 }
414 
UnRegisterUiStateCallback(const std::string & pkgName)415 int32_t DeviceManagerServiceImpl::UnRegisterUiStateCallback(const std::string &pkgName)
416 {
417     if (pkgName.empty()) {
418         LOGE("RegisterUiStateCallback failed, pkgName is empty");
419         return ERR_DM_INPUT_PARA_INVALID;
420     }
421     if (authMgr_ == nullptr) {
422         LOGE("authMgr_ is nullptr");
423         return ERR_DM_POINT_NULL;
424     }
425     return authMgr_->UnRegisterUiStateCallback(pkgName);
426 }
427 
PraseNotifyEventJson(const std::string & event,nlohmann::json & jsonObject)428 int32_t DeviceManagerServiceImpl::PraseNotifyEventJson(const std::string &event, nlohmann::json &jsonObject)
429 {
430     jsonObject = nlohmann::json::parse(event, nullptr, false);
431     if (jsonObject.is_discarded()) {
432         LOGE("event prase error.");
433         return ERR_DM_FAILED;
434     }
435     if ((!jsonObject.contains("extra")) || (!jsonObject["extra"].is_object())) {
436         LOGE("extra error");
437         return ERR_DM_FAILED;
438     }
439     if ((!jsonObject["extra"].contains("deviceId")) || (!jsonObject["extra"]["deviceId"].is_string())) {
440         LOGE("NotifyEvent deviceId invalid");
441         return ERR_DM_FAILED;
442     }
443     return DM_OK;
444 }
445 
NotifyEvent(const std::string & pkgName,const int32_t eventId,const std::string & event)446 int32_t DeviceManagerServiceImpl::NotifyEvent(const std::string &pkgName, const int32_t eventId,
447     const std::string &event)
448 {
449     LOGI("NotifyEvent begin, pkgName : %s, eventId : %d", pkgName.c_str(), eventId);
450     if ((eventId <= DM_NOTIFY_EVENT_START) || (eventId >= DM_NOTIFY_EVENT_BUTT)) {
451         LOGE("NotifyEvent eventId invalid");
452         return ERR_DM_INPUT_PARA_INVALID;
453     }
454     if (eventId == DM_NOTIFY_EVENT_ONDEVICEREADY) {
455         nlohmann::json jsonObject;
456         if (PraseNotifyEventJson(event, jsonObject) != DM_OK) {
457             LOGE("NotifyEvent json invalid");
458             return ERR_DM_INPUT_PARA_INVALID;
459         }
460         std::string deviceId;
461         jsonObject["extra"]["deviceId"].get_to(deviceId);
462         if (deviceStateMgr_== nullptr) {
463             LOGE("deviceStateMgr_ is nullptr");
464             return ERR_DM_POINT_NULL;
465         }
466         if (deviceStateMgr_->ProcNotifyEvent(pkgName, eventId, deviceId) != DM_OK) {
467             LOGE("NotifyEvent failed");
468             return ERR_DM_INPUT_PARA_INVALID;
469         };
470     }
471     return DM_OK;
472 }
473 
GetGroupType(std::vector<DmDeviceInfo> & deviceList)474 int32_t DeviceManagerServiceImpl::GetGroupType(std::vector<DmDeviceInfo> &deviceList)
475 {
476     LOGI("GetGroupType begin");
477     if (softbusConnector_ == nullptr || hiChainConnector_ == nullptr) {
478         LOGE("softbusConnector_ or hiChainConnector_ is nullptr");
479         return ERR_DM_POINT_NULL;
480     }
481 
482     for (auto it = deviceList.begin(); it != deviceList.end(); ++it) {
483         std::string udid = "";
484         int32_t ret = softbusConnector_->GetUdidByNetworkId(it->networkId, udid);
485         if (ret != DM_OK) {
486             LOGE("GetUdidByNetworkId failed ret: %d", ret);
487             return ERR_DM_FAILED;
488         }
489         std::string deviceId = softbusConnector_->GetDeviceUdidHashByUdid(udid);
490         if (memcpy_s(it->deviceId, DM_MAX_DEVICE_ID_LEN, deviceId.c_str(),
491             deviceId.length()) != 0) {
492             LOGE("get deviceId: %s failed", GetAnonyString(deviceId).c_str());
493         }
494         it->authForm = hiChainConnector_->GetGroupType(udid);
495     }
496     return DM_OK;
497 }
498 
GetUdidHashByNetWorkId(const char * networkId,std::string & deviceId)499 int32_t DeviceManagerServiceImpl::GetUdidHashByNetWorkId(const char *networkId, std::string &deviceId)
500 {
501     if (softbusConnector_ == nullptr || hiChainConnector_ == nullptr) {
502         LOGE("softbusConnector_ or hiChainConnector_ is nullptr");
503         return ERR_DM_POINT_NULL;
504     }
505     std::string udid = "";
506     int32_t ret = softbusConnector_->GetUdidByNetworkId(networkId, udid);
507     if (ret != DM_OK) {
508         LOGE("GetUdidByNetworkId failed ret: %d", ret);
509         return ERR_DM_FAILED;
510     }
511     deviceId = softbusConnector_->GetDeviceUdidHashByUdid(udid);
512     return DM_OK;
513 }
514 
LoadHardwareFwkService()515 void DeviceManagerServiceImpl::LoadHardwareFwkService()
516 {
517     DmDistributedHardwareLoad::GetInstance().LoadDistributedHardwareFwk();
518 }
519 
GetEncryptedUuidByNetworkId(const std::string & pkgName,const std::string & networkId,std::string & uuid)520 int32_t DeviceManagerServiceImpl::GetEncryptedUuidByNetworkId(const std::string &pkgName, const std::string &networkId,
521     std::string &uuid)
522 {
523     if (softbusConnector_ == nullptr) {
524         LOGE("softbusConnector_ is nullptr");
525         return ERR_DM_POINT_NULL;
526     }
527     if (pkgName.empty()) {
528         LOGE("Invalid parameter, pkgName is empty.");
529         return ERR_DM_INPUT_PARA_INVALID;
530     }
531     LOGI("DeviceManagerService::GetEncryptedUuid for pkgName = %s", pkgName.c_str());
532     int32_t ret = softbusConnector_->GetUuidByNetworkId(networkId.c_str(), uuid);
533     if (ret != DM_OK) {
534         LOGE("GetUdidByNetworkId failed, ret : %d", ret);
535         return ret;
536     }
537 
538     std::string appId = Crypto::Sha256(AppManager::GetInstance().GetAppId());
539     LOGI("appId = %s, uuid = %s.", GetAnonyString(appId).c_str(), GetAnonyString(uuid).c_str());
540     uuid = Crypto::Sha256(appId + "_" + uuid);
541     LOGI("encryptedUuid = %s.", GetAnonyString(uuid).c_str());
542     return DM_OK;
543 }
544 
GenerateEncryptedUuid(const std::string & pkgName,const std::string & uuid,const std::string & appId,std::string & encryptedUuid)545 int32_t DeviceManagerServiceImpl::GenerateEncryptedUuid(const std::string &pkgName, const std::string &uuid,
546     const std::string &appId, std::string &encryptedUuid)
547 {
548     if (pkgName.empty()) {
549         LOGE("Invalid parameter, pkgName is empty.");
550         return ERR_DM_INPUT_PARA_INVALID;
551     }
552     encryptedUuid = Crypto::Sha256(appId + "_" + uuid);
553     LOGI("encryptedUuid = %s.", GetAnonyString(encryptedUuid).c_str());
554     return DM_OK;
555 }
556 
CreateDMServiceObject(void)557 extern "C" IDeviceManagerServiceImpl *CreateDMServiceObject(void)
558 {
559     return new DeviceManagerServiceImpl;
560 }
561 } // namespace DistributedHardware
562 } // namespace OHOS
563