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_notify.h"
17
18 #include "device_manager.h"
19 #include "dm_anonymous.h"
20 #include "dm_constants.h"
21 #include "dm_log.h"
22
23 namespace OHOS {
24 namespace DistributedHardware {
25 IMPLEMENT_SINGLE_INSTANCE(DeviceManagerNotify);
26
RegisterDeathRecipientCallback(const std::string & pkgName,std::shared_ptr<DmInitCallback> dmInitCallback)27 void DeviceManagerNotify::RegisterDeathRecipientCallback(const std::string &pkgName,
28 std::shared_ptr<DmInitCallback> dmInitCallback)
29 {
30 if (pkgName.empty() || dmInitCallback == nullptr) {
31 LOGE("Invalid parameter, pkgName is empty or callback is nullptr.");
32 return;
33 }
34 std::lock_guard<std::mutex> autoLock(lock_);
35 dmInitCallback_[pkgName] = dmInitCallback;
36 }
37
UnRegisterDeathRecipientCallback(const std::string & pkgName)38 void DeviceManagerNotify::UnRegisterDeathRecipientCallback(const std::string &pkgName)
39 {
40 if (pkgName.empty()) {
41 LOGE("Invalid parameter, pkgName is empty.");
42 return;
43 }
44 std::lock_guard<std::mutex> autoLock(lock_);
45 dmInitCallback_.erase(pkgName);
46 }
47
RegisterDeviceStateCallback(const std::string & pkgName,std::shared_ptr<DeviceStateCallback> callback)48 void DeviceManagerNotify::RegisterDeviceStateCallback(const std::string &pkgName,
49 std::shared_ptr<DeviceStateCallback> callback)
50 {
51 if (pkgName.empty() || callback == nullptr) {
52 LOGE("Invalid parameter, pkgName is empty or callback is nullptr.");
53 return;
54 }
55 std::lock_guard<std::mutex> autoLock(lock_);
56 deviceStateCallback_[pkgName] = callback;
57 }
58
UnRegisterDeviceStateCallback(const std::string & pkgName)59 void DeviceManagerNotify::UnRegisterDeviceStateCallback(const std::string &pkgName)
60 {
61 if (pkgName.empty()) {
62 LOGE("Invalid parameter, pkgName is empty.");
63 return;
64 }
65 std::lock_guard<std::mutex> autoLock(lock_);
66 deviceStateCallback_.erase(pkgName);
67 }
68
UnRegisterDeviceStatusCallback(const std::string & pkgName)69 void DeviceManagerNotify::UnRegisterDeviceStatusCallback(const std::string &pkgName)
70 {
71 if (pkgName.empty()) {
72 LOGE("Invalid parameter, pkgName is empty.");
73 return;
74 }
75 std::lock_guard<std::mutex> autoLock(lock_);
76 deviceStatusCallback_.erase(pkgName);
77 }
78
RegisterDeviceStatusCallback(const std::string & pkgName,std::shared_ptr<DeviceStatusCallback> callback)79 void DeviceManagerNotify::RegisterDeviceStatusCallback(const std::string &pkgName,
80 std::shared_ptr<DeviceStatusCallback> callback)
81 {
82 if (pkgName.empty() || callback == nullptr) {
83 LOGE("Invalid parameter, pkgName is empty or callback is nullptr.");
84 return;
85 }
86 std::lock_guard<std::mutex> autoLock(lock_);
87 deviceStatusCallback_[pkgName] = callback;
88 }
89
RegisterDiscoveryCallback(const std::string & pkgName,uint16_t subscribeId,std::shared_ptr<DiscoveryCallback> callback)90 void DeviceManagerNotify::RegisterDiscoveryCallback(const std::string &pkgName, uint16_t subscribeId,
91 std::shared_ptr<DiscoveryCallback> callback)
92 {
93 if (pkgName.empty() || callback == nullptr) {
94 LOGE("Invalid parameter, pkgName is empty or callback is nullptr.");
95 return;
96 }
97 std::lock_guard<std::mutex> autoLock(lock_);
98 if (deviceDiscoveryCallbacks_.count(pkgName) == 0) {
99 deviceDiscoveryCallbacks_[pkgName] = std::map<uint16_t, std::shared_ptr<DiscoveryCallback>>();
100 }
101 deviceDiscoveryCallbacks_[pkgName][subscribeId] = callback;
102 }
103
UnRegisterDiscoveryCallback(const std::string & pkgName,uint16_t subscribeId)104 void DeviceManagerNotify::UnRegisterDiscoveryCallback(const std::string &pkgName, uint16_t subscribeId)
105 {
106 if (pkgName.empty()) {
107 LOGE("Invalid parameter, pkgName is empty.");
108 return;
109 }
110 std::lock_guard<std::mutex> autoLock(lock_);
111 if (deviceDiscoveryCallbacks_.count(pkgName) > 0) {
112 deviceDiscoveryCallbacks_[pkgName].erase(subscribeId);
113 if (deviceDiscoveryCallbacks_[pkgName].empty()) {
114 deviceDiscoveryCallbacks_.erase(pkgName);
115 }
116 }
117 }
118
RegisterPublishCallback(const std::string & pkgName,int32_t publishId,std::shared_ptr<PublishCallback> callback)119 void DeviceManagerNotify::RegisterPublishCallback(const std::string &pkgName,
120 int32_t publishId,
121 std::shared_ptr<PublishCallback> callback)
122 {
123 if (pkgName.empty() || callback == nullptr) {
124 LOGE("Invalid parameter, pkgName is empty or callback is nullptr.");
125 return;
126 }
127 std::lock_guard<std::mutex> autoLock(lock_);
128 if (devicePublishCallbacks_.count(pkgName) == 0) {
129 devicePublishCallbacks_[pkgName] = std::map<int32_t, std::shared_ptr<PublishCallback>>();
130 }
131 devicePublishCallbacks_[pkgName][publishId] = callback;
132 }
133
UnRegisterPublishCallback(const std::string & pkgName,int32_t publishId)134 void DeviceManagerNotify::UnRegisterPublishCallback(const std::string &pkgName, int32_t publishId)
135 {
136 if (pkgName.empty()) {
137 LOGE("Invalid parameter, pkgName is empty.");
138 return;
139 }
140 std::lock_guard<std::mutex> autoLock(lock_);
141 if (devicePublishCallbacks_.count(pkgName) > 0) {
142 devicePublishCallbacks_[pkgName].erase(publishId);
143 if (devicePublishCallbacks_[pkgName].empty()) {
144 devicePublishCallbacks_.erase(pkgName);
145 }
146 }
147 }
148
RegisterAuthenticateCallback(const std::string & pkgName,const std::string & deviceId,std::shared_ptr<AuthenticateCallback> callback)149 void DeviceManagerNotify::RegisterAuthenticateCallback(const std::string &pkgName, const std::string &deviceId,
150 std::shared_ptr<AuthenticateCallback> callback)
151 {
152 if (pkgName.empty() || deviceId.empty() || callback == nullptr) {
153 LOGE("DeviceManagerNotify::RegisterAuthenticateCallback error: Invalid parameter, pkgName: %s, deviceId: %s",
154 pkgName.c_str(), GetAnonyString(deviceId).c_str());
155 return;
156 }
157 std::lock_guard<std::mutex> autoLock(lock_);
158 if (authenticateCallback_.count(pkgName) == 0) {
159 authenticateCallback_[pkgName] = std::map<std::string, std::shared_ptr<AuthenticateCallback>>();
160 }
161 authenticateCallback_[pkgName][deviceId] = callback;
162 }
163
UnRegisterAuthenticateCallback(const std::string & pkgName,const std::string & deviceId)164 void DeviceManagerNotify::UnRegisterAuthenticateCallback(const std::string &pkgName, const std::string &deviceId)
165 {
166 if (pkgName.empty() || deviceId.empty()) {
167 LOGE("DeviceManagerNotify::UnRegisterAuthenticateCallback error: Invalid parameter, pkgName: %s, deviceId: %s",
168 pkgName.c_str(), GetAnonyString(deviceId).c_str());
169 return;
170 }
171 std::lock_guard<std::mutex> autoLock(lock_);
172 if (authenticateCallback_.count(pkgName) > 0) {
173 authenticateCallback_[pkgName].erase(deviceId);
174 if (authenticateCallback_[pkgName].empty()) {
175 authenticateCallback_.erase(pkgName);
176 }
177 }
178 }
179
UnRegisterPackageCallback(const std::string & pkgName)180 void DeviceManagerNotify::UnRegisterPackageCallback(const std::string &pkgName)
181 {
182 if (pkgName.empty()) {
183 LOGE("Invalid parameter, pkgName is empty.");
184 return;
185 }
186 std::lock_guard<std::mutex> autoLock(lock_);
187 deviceStateCallback_.erase(pkgName);
188 deviceStatusCallback_.erase(pkgName);
189 deviceDiscoveryCallbacks_.erase(pkgName);
190 devicePublishCallbacks_.erase(pkgName);
191 authenticateCallback_.erase(pkgName);
192 dmInitCallback_.erase(pkgName);
193 }
194
RegisterVerifyAuthenticationCallback(const std::string & pkgName,const std::string & authPara,std::shared_ptr<VerifyAuthCallback> callback)195 void DeviceManagerNotify::RegisterVerifyAuthenticationCallback(const std::string &pkgName, const std::string &authPara,
196 std::shared_ptr<VerifyAuthCallback> callback)
197 {
198 if (pkgName.empty() || callback == nullptr) {
199 LOGE("Invalid parameter, pkgName is empty or callback is nullptr.");
200 return;
201 }
202 (void)authPara;
203 std::lock_guard<std::mutex> autoLock(lock_);
204 verifyAuthCallback_[pkgName] = callback;
205 }
206
UnRegisterVerifyAuthenticationCallback(const std::string & pkgName)207 void DeviceManagerNotify::UnRegisterVerifyAuthenticationCallback(const std::string &pkgName)
208 {
209 if (pkgName.empty()) {
210 LOGE("Invalid parameter, pkgName is empty.");
211 return;
212 }
213 std::lock_guard<std::mutex> autoLock(lock_);
214 verifyAuthCallback_.erase(pkgName);
215 }
216
RegisterDeviceManagerFaCallback(const std::string & pkgName,std::shared_ptr<DeviceManagerUiCallback> callback)217 void DeviceManagerNotify::RegisterDeviceManagerFaCallback(const std::string &pkgName,
218 std::shared_ptr<DeviceManagerUiCallback> callback)
219 {
220 std::lock_guard<std::mutex> autoLock(lock_);
221 dmUiCallback_[pkgName] = callback;
222 }
223
UnRegisterDeviceManagerFaCallback(const std::string & pkgName)224 void DeviceManagerNotify::UnRegisterDeviceManagerFaCallback(const std::string &pkgName)
225 {
226 if (pkgName.empty()) {
227 LOGE("Invalid parameter, pkgName is empty.");
228 return;
229 }
230 std::lock_guard<std::mutex> autoLock(lock_);
231 dmUiCallback_.erase(pkgName);
232 }
233
RegisterCredentialCallback(const std::string & pkgName,std::shared_ptr<CredentialCallback> callback)234 void DeviceManagerNotify::RegisterCredentialCallback(const std::string &pkgName,
235 std::shared_ptr<CredentialCallback> callback)
236 {
237 if (pkgName.empty() || callback == nullptr) {
238 LOGE("Invalid parameter, pkgName is empty or callback is nullptr.");
239 return;
240 }
241 std::lock_guard<std::mutex> autoLock(lock_);
242 credentialCallback_[pkgName] = callback;
243 }
244
UnRegisterCredentialCallback(const std::string & pkgName)245 void DeviceManagerNotify::UnRegisterCredentialCallback(const std::string &pkgName)
246 {
247 if (pkgName.empty()) {
248 LOGE("Invalid parameter, pkgName is empty.");
249 return;
250 }
251 std::lock_guard<std::mutex> autoLock(lock_);
252 credentialCallback_.erase(pkgName);
253 }
254
OnRemoteDied()255 void DeviceManagerNotify::OnRemoteDied()
256 {
257 LOGW("DeviceManagerNotify::OnRemoteDied");
258 std::lock_guard<std::mutex> autoLock(lock_);
259 for (auto iter : dmInitCallback_) {
260 LOGI("DeviceManagerNotify::OnRemoteDied, pkgName:%s", iter.first.c_str());
261 if (iter.second != nullptr) {
262 iter.second->OnRemoteDied();
263 }
264 }
265 }
266
OnDeviceOnline(const std::string & pkgName,const DmDeviceInfo & deviceInfo)267 void DeviceManagerNotify::OnDeviceOnline(const std::string &pkgName, const DmDeviceInfo &deviceInfo)
268 {
269 if (pkgName.empty()) {
270 LOGE("Invalid parameter, pkgName is empty.");
271 return;
272 }
273 LOGI("DeviceManagerNotify::OnDeviceOnline in, pkgName:%s", pkgName.c_str());
274 std::shared_ptr<DeviceStateCallback> tempCbk;
275 {
276 std::lock_guard<std::mutex> autoLock(lock_);
277 if (deviceStateCallback_.count(pkgName) == 0) {
278 LOGE("OnDeviceOnline error, device state callback not register.");
279 return;
280 }
281 tempCbk = deviceStateCallback_[pkgName];
282 }
283 if (tempCbk == nullptr) {
284 LOGE("OnDeviceOnline error, registered device state callback is nullptr.");
285 return;
286 }
287 tempCbk->OnDeviceOnline(deviceInfo);
288 }
289
OnDeviceOnline(const std::string & pkgName,const DmDeviceBasicInfo & deviceBasicInfo)290 void DeviceManagerNotify::OnDeviceOnline(const std::string &pkgName, const DmDeviceBasicInfo &deviceBasicInfo)
291 {
292 if (pkgName.empty()) {
293 LOGE("Invalid parameter, pkgName is empty.");
294 return;
295 }
296 LOGI("DeviceManagerNotify::OnDeviceOnline in, pkgName:%s", pkgName.c_str());
297 std::shared_ptr<DeviceStatusCallback> tempCbk;
298 {
299 std::lock_guard<std::mutex> autoLock(lock_);
300 if (deviceStatusCallback_.count(pkgName) == 0) {
301 LOGE("OnDeviceOnline error, device status callback not register.");
302 return;
303 }
304 tempCbk = deviceStatusCallback_[pkgName];
305 }
306 if (tempCbk == nullptr) {
307 LOGE("OnDeviceOnline error, registered device status callback is nullptr.");
308 return;
309 }
310 tempCbk->OnDeviceOnline(deviceBasicInfo);
311 }
312
OnDeviceOffline(const std::string & pkgName,const DmDeviceInfo & deviceInfo)313 void DeviceManagerNotify::OnDeviceOffline(const std::string &pkgName, const DmDeviceInfo &deviceInfo)
314 {
315 if (pkgName.empty()) {
316 LOGE("Invalid parameter, pkgName is empty.");
317 return;
318 }
319 LOGI("DeviceManagerNotify::OnDeviceOffline in, pkgName:%s", pkgName.c_str());
320 std::shared_ptr<DeviceStateCallback> tempCbk;
321 {
322 std::lock_guard<std::mutex> autoLock(lock_);
323 if (deviceStateCallback_.count(pkgName) == 0) {
324 LOGE("OnDeviceOffline error, device state callback not register.");
325 return;
326 }
327 tempCbk = deviceStateCallback_[pkgName];
328 }
329 if (tempCbk == nullptr) {
330 LOGE("OnDeviceOffline error, registered device state callback is nullptr.");
331 return;
332 }
333 tempCbk->OnDeviceOffline(deviceInfo);
334 }
335
OnDeviceOffline(const std::string & pkgName,const DmDeviceBasicInfo & deviceBasicInfo)336 void DeviceManagerNotify::OnDeviceOffline(const std::string &pkgName, const DmDeviceBasicInfo &deviceBasicInfo)
337 {
338 if (pkgName.empty()) {
339 LOGE("Invalid parameter, pkgName is empty.");
340 return;
341 }
342 LOGI("DeviceManagerNotify::OnDeviceOffline in, pkgName:%s", pkgName.c_str());
343 std::shared_ptr<DeviceStatusCallback> tempCbk;
344 {
345 std::lock_guard<std::mutex> autoLock(lock_);
346 if (deviceStatusCallback_.count(pkgName) == 0) {
347 LOGE("OnDeviceOffline error, device status callback not register.");
348 return;
349 }
350 tempCbk = deviceStatusCallback_[pkgName];
351 }
352 if (tempCbk == nullptr) {
353 LOGE("OnDeviceOffline error, registered device status callback is nullptr.");
354 return;
355 }
356 tempCbk->OnDeviceOffline(deviceBasicInfo);
357 }
358
OnDeviceChanged(const std::string & pkgName,const DmDeviceInfo & deviceInfo)359 void DeviceManagerNotify::OnDeviceChanged(const std::string &pkgName, const DmDeviceInfo &deviceInfo)
360 {
361 if (pkgName.empty()) {
362 LOGE("Invalid parameter, pkgName is empty.");
363 return;
364 }
365 LOGI("DeviceManagerNotify::OnDeviceChanged in, pkgName:%s", pkgName.c_str());
366 std::shared_ptr<DeviceStateCallback> tempCbk;
367 {
368 std::lock_guard<std::mutex> autoLock(lock_);
369 if (deviceStateCallback_.count(pkgName) == 0) {
370 LOGE("OnDeviceChanged error, device state callback not register.");
371 return;
372 }
373 tempCbk = deviceStateCallback_[pkgName];
374 }
375 if (tempCbk == nullptr) {
376 LOGE("OnDeviceChanged error, registered device state callback is nullptr.");
377 return;
378 }
379 tempCbk->OnDeviceChanged(deviceInfo);
380 }
381
OnDeviceChanged(const std::string & pkgName,const DmDeviceBasicInfo & deviceBasicInfo)382 void DeviceManagerNotify::OnDeviceChanged(const std::string &pkgName, const DmDeviceBasicInfo &deviceBasicInfo)
383 {
384 if (pkgName.empty()) {
385 LOGE("Invalid parameter, pkgName is empty.");
386 return;
387 }
388 LOGI("DeviceManagerNotify::OnDeviceChanged in, pkgName:%s", pkgName.c_str());
389 std::shared_ptr<DeviceStatusCallback> tempCbk;
390 {
391 std::lock_guard<std::mutex> autoLock(lock_);
392 if (deviceStatusCallback_.count(pkgName) == 0) {
393 LOGE("OnDeviceChanged error, device state callback not register.");
394 return;
395 }
396 tempCbk = deviceStatusCallback_[pkgName];
397 }
398 if (tempCbk == nullptr) {
399 LOGE("OnDeviceChanged error, registered device state callback is nullptr.");
400 return;
401 }
402 tempCbk->OnDeviceChanged(deviceBasicInfo);
403 }
404
OnDeviceReady(const std::string & pkgName,const DmDeviceInfo & deviceInfo)405 void DeviceManagerNotify::OnDeviceReady(const std::string &pkgName, const DmDeviceInfo &deviceInfo)
406 {
407 if (pkgName.empty()) {
408 LOGE("Invalid parameter, pkgName is empty.");
409 return;
410 }
411 LOGI("DeviceManagerNotify::OnDeviceReady in, pkgName:%s", pkgName.c_str());
412 std::shared_ptr<DeviceStateCallback> tempCbk;
413 {
414 std::lock_guard<std::mutex> autoLock(lock_);
415 if (deviceStateCallback_.count(pkgName) == 0) {
416 LOGE("OnDeviceReady error, device state callback not register.");
417 return;
418 }
419 tempCbk = deviceStateCallback_[pkgName];
420 }
421 if (tempCbk == nullptr) {
422 LOGE("OnDeviceReady error, registered device state callback is nullptr.");
423 return;
424 }
425 tempCbk->OnDeviceReady(deviceInfo);
426 }
427
OnDeviceReady(const std::string & pkgName,const DmDeviceBasicInfo & deviceBasicInfo)428 void DeviceManagerNotify::OnDeviceReady(const std::string &pkgName, const DmDeviceBasicInfo &deviceBasicInfo)
429 {
430 if (pkgName.empty()) {
431 LOGE("Invalid parameter, pkgName is empty.");
432 return;
433 }
434 LOGI("DeviceManagerNotify::OnDeviceReady in, pkgName:%s", pkgName.c_str());
435 std::shared_ptr<DeviceStatusCallback> tempCbk;
436 {
437 std::lock_guard<std::mutex> autoLock(lock_);
438 if (deviceStatusCallback_.count(pkgName) == 0) {
439 LOGE("OnDeviceReady error, device status callback not register.");
440 return;
441 }
442 tempCbk = deviceStatusCallback_[pkgName];
443 }
444 if (tempCbk == nullptr) {
445 LOGE("OnDeviceReady error, registered device status callback is nullptr.");
446 return;
447 }
448 tempCbk->OnDeviceReady(deviceBasicInfo);
449 }
450
OnDeviceFound(const std::string & pkgName,uint16_t subscribeId,const DmDeviceInfo & deviceInfo)451 void DeviceManagerNotify::OnDeviceFound(const std::string &pkgName, uint16_t subscribeId,
452 const DmDeviceInfo &deviceInfo)
453 {
454 if (pkgName.empty()) {
455 LOGE("Invalid parameter, pkgName is empty.");
456 return;
457 }
458 std::shared_ptr<DiscoveryCallback> tempCbk;
459 {
460 std::lock_guard<std::mutex> autoLock(lock_);
461 if (deviceDiscoveryCallbacks_.count(pkgName) == 0) {
462 LOGE("DeviceManagerNotify::OnDeviceFound error, device discovery callback not register for pkgName %s.",
463 pkgName.c_str());
464 return;
465 }
466 std::map<uint16_t, std::shared_ptr<DiscoveryCallback>> &discoverCallMap = deviceDiscoveryCallbacks_[pkgName];
467 auto iter = discoverCallMap.find(subscribeId);
468 if (iter == discoverCallMap.end()) {
469 LOGE("OnDeviceFound error, device discovery callback not register for subscribeId %d.", subscribeId);
470 return;
471 }
472 tempCbk = iter->second;
473 }
474 if (tempCbk == nullptr) {
475 LOGE("OnDeviceFound error, registered device discovery callback is nullptr.");
476 return;
477 }
478 tempCbk->OnDeviceFound(subscribeId, deviceInfo);
479 }
480
OnDeviceFound(const std::string & pkgName,uint16_t subscribeId,const DmDeviceBasicInfo & deviceBasicInfo)481 void DeviceManagerNotify::OnDeviceFound(const std::string &pkgName, uint16_t subscribeId,
482 const DmDeviceBasicInfo &deviceBasicInfo)
483 {
484 if (pkgName.empty()) {
485 LOGE("Invalid parameter, pkgName is empty.");
486 return;
487 }
488 LOGI("DeviceManagerNotify::OnDeviceFound in, pkgName:%s, subscribeId:%d.", pkgName.c_str(), (int32_t)subscribeId);
489 std::shared_ptr<DiscoveryCallback> tempCbk;
490 {
491 std::lock_guard<std::mutex> autoLock(lock_);
492 if (deviceDiscoveryCallbacks_.count(pkgName) == 0) {
493 LOGE("DeviceManagerNotify::OnDeviceFound error, device discovery callback not register for pkgName %s.",
494 pkgName.c_str());
495 return;
496 }
497 std::map<uint16_t, std::shared_ptr<DiscoveryCallback>> &discoverCallMap = deviceDiscoveryCallbacks_[pkgName];
498 auto iter = discoverCallMap.find(subscribeId);
499 if (iter == discoverCallMap.end()) {
500 LOGE("OnDeviceFound error, device discovery callback not register for subscribeId %d.", subscribeId);
501 return;
502 }
503 tempCbk = iter->second;
504 }
505 if (tempCbk == nullptr) {
506 LOGE("OnDeviceFound error, registered device discovery callback is nullptr.");
507 return;
508 }
509 tempCbk->OnDeviceFound(subscribeId, deviceBasicInfo);
510 }
511
OnDiscoveryFailed(const std::string & pkgName,uint16_t subscribeId,int32_t failedReason)512 void DeviceManagerNotify::OnDiscoveryFailed(const std::string &pkgName, uint16_t subscribeId, int32_t failedReason)
513 {
514 if (pkgName.empty()) {
515 LOGE("Invalid parameter, pkgName is empty.");
516 return;
517 }
518 LOGI("DeviceManagerNotify::OnDiscoveryFailed in, pkgName:%s, subscribeId %d, failed reason %d", pkgName.c_str(),
519 subscribeId, failedReason);
520 std::shared_ptr<DiscoveryCallback> tempCbk;
521 {
522 std::lock_guard<std::mutex> autoLock(lock_);
523 if (deviceDiscoveryCallbacks_.count(pkgName) == 0) {
524 LOGE("DeviceManagerNotify::OnDiscoveryFailed error, device discovery callback not register for pkgName %s.",
525 pkgName.c_str());
526 return;
527 }
528 std::map<uint16_t, std::shared_ptr<DiscoveryCallback>> &discoverCallMap = deviceDiscoveryCallbacks_[pkgName];
529 auto iter = discoverCallMap.find(subscribeId);
530 if (iter == discoverCallMap.end()) {
531 LOGE("OnDiscoveryFailed error, device discovery callback not register for subscribeId %d.", subscribeId);
532 return;
533 }
534 tempCbk = iter->second;
535 }
536 if (tempCbk == nullptr) {
537 LOGE("OnDiscoveryFailed error, registered device discovery callback is nullptr.");
538 return;
539 }
540 tempCbk->OnDiscoveryFailed(subscribeId, failedReason);
541 }
542
OnDiscoverySuccess(const std::string & pkgName,uint16_t subscribeId)543 void DeviceManagerNotify::OnDiscoverySuccess(const std::string &pkgName, uint16_t subscribeId)
544 {
545 if (pkgName.empty()) {
546 LOGE("Invalid parameter, pkgName is empty.");
547 return;
548 }
549 LOGI("DeviceManagerNotify::OnDiscoverySuccess in, pkgName:%s, subscribeId:%d.", pkgName.c_str(), subscribeId);
550 std::shared_ptr<DiscoveryCallback> tempCbk;
551 {
552 std::lock_guard<std::mutex> autoLock(lock_);
553 if (deviceDiscoveryCallbacks_.count(pkgName) == 0) {
554 LOGE("OnDiscoverySuccess error, device discovery callback not register for pkgName %s.", pkgName.c_str());
555 return;
556 }
557 std::map<uint16_t, std::shared_ptr<DiscoveryCallback>> &discoverCallMap = deviceDiscoveryCallbacks_[pkgName];
558 auto iter = discoverCallMap.find(subscribeId);
559 if (iter == discoverCallMap.end()) {
560 LOGE("OnDiscoverySuccess error, device discovery callback not register for subscribeId %d.", subscribeId);
561 return;
562 }
563 tempCbk = iter->second;
564 }
565 if (tempCbk == nullptr) {
566 LOGE("OnDiscoverySuccess error, registered device discovery callback is nullptr.");
567 return;
568 }
569 tempCbk->OnDiscoverySuccess(subscribeId);
570 }
571
OnPublishResult(const std::string & pkgName,int32_t publishId,int32_t publishResult)572 void DeviceManagerNotify::OnPublishResult(const std::string &pkgName, int32_t publishId, int32_t publishResult)
573 {
574 if (pkgName.empty()) {
575 LOGE("Invalid parameter, pkgName is empty.");
576 return;
577 }
578 LOGI("DeviceManagerNotify::OnPublishResult in, pkgName:%s, publishId %d, publishResult %d", pkgName.c_str(),
579 publishId, publishResult);
580 std::shared_ptr<PublishCallback> tempCbk;
581 {
582 std::lock_guard<std::mutex> autoLock(lock_);
583 if (devicePublishCallbacks_.count(pkgName) == 0) {
584 LOGE("DeviceManagerNotify::OnPublishResult error, device publish callback not register for pkgName %s.",
585 pkgName.c_str());
586 return;
587 }
588 std::map<int32_t, std::shared_ptr<PublishCallback>> &publishCallMap = devicePublishCallbacks_[pkgName];
589 auto iter = publishCallMap.find(publishId);
590 if (iter == publishCallMap.end()) {
591 LOGE("OnPublishResult error, device publish callback not register for publishId %d.", publishId);
592 return;
593 }
594 tempCbk = iter->second;
595 }
596 if (tempCbk == nullptr) {
597 LOGE("OnPublishResult error, registered device publish callback is nullptr.");
598 return;
599 }
600 tempCbk->OnPublishResult(publishId, publishResult);
601 }
602
OnAuthResult(const std::string & pkgName,const std::string & deviceId,const std::string & token,uint32_t status,uint32_t reason)603 void DeviceManagerNotify::OnAuthResult(const std::string &pkgName, const std::string &deviceId,
604 const std::string &token, uint32_t status, uint32_t reason)
605 {
606 if (pkgName.empty() || token.empty() || deviceId.empty()) {
607 LOGE("Invalid para, pkgName: %s, token: %s", pkgName.c_str(), token.c_str());
608 return;
609 }
610 LOGI("DeviceManagerNotify::OnAuthResult in, pkgName:%s, status:%d, reason:%u", pkgName.c_str(), status, reason);
611 std::shared_ptr<AuthenticateCallback> tempCbk;
612 {
613 std::lock_guard<std::mutex> autoLock(lock_);
614 if (authenticateCallback_.count(pkgName) == 0) {
615 LOGE("DeviceManagerNotify::OnAuthResult error, authenticate callback not register for pkgName %s.",
616 pkgName.c_str());
617 return;
618 }
619 std::map<std::string, std::shared_ptr<AuthenticateCallback>> &authCallMap = authenticateCallback_[pkgName];
620 auto iter = authCallMap.find(deviceId);
621 if (iter == authCallMap.end()) {
622 LOGE("OnAuthResult error, authenticate callback not register.");
623 return;
624 }
625 tempCbk = iter->second;
626 }
627 if (tempCbk == nullptr) {
628 LOGE("OnAuthResult error, registered authenticate callback is nullptr.");
629 return;
630 }
631 tempCbk->OnAuthResult(deviceId, token, status, (int32_t)reason);
632 {
633 std::lock_guard<std::mutex> autoLock(lock_);
634 authenticateCallback_[pkgName].erase(deviceId);
635 if (authenticateCallback_[pkgName].empty()) {
636 authenticateCallback_.erase(pkgName);
637 }
638 }
639 }
640
OnVerifyAuthResult(const std::string & pkgName,const std::string & deviceId,int32_t resultCode,int32_t flag)641 void DeviceManagerNotify::OnVerifyAuthResult(const std::string &pkgName, const std::string &deviceId,
642 int32_t resultCode, int32_t flag)
643 {
644 if (pkgName.empty()) {
645 LOGE("Invalid parameter, pkgName is empty.");
646 return;
647 }
648 LOGI("DeviceManagerNotify::OnVerifyAuthResult in, pkgName:%s, resultCode:%d, flag:%d", pkgName.c_str(),
649 resultCode, flag);
650 std::shared_ptr<VerifyAuthCallback> tempCbk;
651 {
652 std::lock_guard<std::mutex> autoLock(lock_);
653 if (verifyAuthCallback_.count(pkgName) == 0) {
654 LOGE("DeviceManagerNotify::OnVerifyAuthResult error, verify auth callback not register for pkgName %s.",
655 pkgName.c_str());
656 return;
657 }
658 tempCbk = verifyAuthCallback_[pkgName];
659 }
660 if (tempCbk == nullptr) {
661 LOGE("OnVerifyAuthResult error, registered verify auth callback is nullptr.");
662 return;
663 }
664 tempCbk->OnVerifyAuthResult(deviceId, resultCode, flag);
665 {
666 std::lock_guard<std::mutex> autoLock(lock_);
667 verifyAuthCallback_.erase(pkgName);
668 }
669 }
670
OnUiCall(std::string & pkgName,std::string & paramJson)671 void DeviceManagerNotify::OnUiCall(std::string &pkgName, std::string ¶mJson)
672 {
673 if (pkgName.empty()) {
674 LOGE("DeviceManagerNotify::OnUiCall error: Invalid parameter, pkgName: %s", pkgName.c_str());
675 return;
676 }
677 LOGI("DeviceManagerNotify::OnUiCall in, pkgName:%s", pkgName.c_str());
678 std::shared_ptr<DeviceManagerUiCallback> tempCbk;
679 {
680 std::lock_guard<std::mutex> autoLock(lock_);
681 if (dmUiCallback_.count(pkgName) == 0) {
682 LOGE("OnUiCall error, dm Ui callback not register for pkgName %d.", pkgName.c_str());
683 return;
684 }
685 tempCbk = dmUiCallback_[pkgName];
686 }
687 if (tempCbk == nullptr) {
688 LOGE("OnUiCall error, registered dm Ui callback is nullptr.");
689 return;
690 }
691 tempCbk->OnCall(paramJson);
692 }
693
OnCredentialResult(const std::string & pkgName,int32_t & action,const std::string & credentialResult)694 void DeviceManagerNotify::OnCredentialResult(const std::string &pkgName, int32_t &action,
695 const std::string &credentialResult)
696 {
697 if (pkgName.empty()) {
698 LOGE("DeviceManagerNotify::OnCredentialResult error: Invalid parameter, pkgName: %s", pkgName.c_str());
699 return;
700 }
701 LOGI("DeviceManagerNotify::OnCredentialResult in, pkgName:%s, action:%d", pkgName.c_str(), action);
702 std::shared_ptr<CredentialCallback> tempCbk;
703 {
704 std::lock_guard<std::mutex> autoLock(lock_);
705 if (credentialCallback_.count(pkgName) == 0) {
706 LOGE("DeviceManagerNotify::OnCredentialResult error, credential callback not register for pkgName %s.",
707 pkgName.c_str());
708 return;
709 }
710 tempCbk = credentialCallback_[pkgName];
711 }
712 if (tempCbk == nullptr) {
713 LOGE("OnCredentialResult error, registered credential callback is nullptr.");
714 return;
715 }
716 tempCbk->OnCredentialResult(action, credentialResult);
717 }
718 } // namespace DistributedHardware
719 } // namespace OHOS
720