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