1 /*
2 * Copyright (c) 2022 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()) {
31 LOGE("Invalid parameter, pkgName is empty.");
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()) {
52 LOGE("Invalid parameter, pkgName is empty.");
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()) {
83 LOGE("Invalid parameter, pkgName is empty.");
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()) {
94 LOGE("Invalid parameter, pkgName is empty.");
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()) {
124 LOGE("Invalid parameter, pkgName is empty.");
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()) {
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 (void)authPara;
199 std::lock_guard<std::mutex> autoLock(lock_);
200 verifyAuthCallback_[pkgName] = callback;
201 }
202
UnRegisterVerifyAuthenticationCallback(const std::string & pkgName)203 void DeviceManagerNotify::UnRegisterVerifyAuthenticationCallback(const std::string &pkgName)
204 {
205 if (pkgName.empty()) {
206 LOGE("Invalid parameter, pkgName is empty.");
207 return;
208 }
209 std::lock_guard<std::mutex> autoLock(lock_);
210 verifyAuthCallback_.erase(pkgName);
211 }
212
RegisterDeviceManagerFaCallback(const std::string & pkgName,std::shared_ptr<DeviceManagerUiCallback> callback)213 void DeviceManagerNotify::RegisterDeviceManagerFaCallback(const std::string &pkgName,
214 std::shared_ptr<DeviceManagerUiCallback> callback)
215 {
216 std::lock_guard<std::mutex> autoLock(lock_);
217 dmUiCallback_[pkgName] = callback;
218 }
219
UnRegisterDeviceManagerFaCallback(const std::string & pkgName)220 void DeviceManagerNotify::UnRegisterDeviceManagerFaCallback(const std::string &pkgName)
221 {
222 if (pkgName.empty()) {
223 LOGE("Invalid parameter, pkgName is empty.");
224 return;
225 }
226 std::lock_guard<std::mutex> autoLock(lock_);
227 dmUiCallback_.erase(pkgName);
228 }
229
RegisterCredentialCallback(const std::string & pkgName,std::shared_ptr<CredentialCallback> callback)230 void DeviceManagerNotify::RegisterCredentialCallback(const std::string &pkgName,
231 std::shared_ptr<CredentialCallback> callback)
232 {
233 std::lock_guard<std::mutex> autoLock(lock_);
234 credentialCallback_[pkgName] = callback;
235 }
236
UnRegisterCredentialCallback(const std::string & pkgName)237 void DeviceManagerNotify::UnRegisterCredentialCallback(const std::string &pkgName)
238 {
239 std::lock_guard<std::mutex> autoLock(lock_);
240 credentialCallback_.erase(pkgName);
241 }
242
OnRemoteDied()243 void DeviceManagerNotify::OnRemoteDied()
244 {
245 LOGW("DeviceManagerNotify::OnRemoteDied");
246 std::lock_guard<std::mutex> autoLock(lock_);
247 for (auto iter : dmInitCallback_) {
248 LOGI("DeviceManagerNotify::OnRemoteDied, pkgName:%s", iter.first.c_str());
249 if (iter.second != nullptr) {
250 iter.second->OnRemoteDied();
251 }
252 }
253 }
254
OnDeviceOnline(const std::string & pkgName,const DmDeviceInfo & deviceInfo)255 void DeviceManagerNotify::OnDeviceOnline(const std::string &pkgName, const DmDeviceInfo &deviceInfo)
256 {
257 if (pkgName.empty()) {
258 LOGE("Invalid parameter, pkgName is empty.");
259 return;
260 }
261 LOGI("DeviceManagerNotify::OnDeviceOnline in, pkgName:%s", pkgName.c_str());
262 std::shared_ptr<DeviceStateCallback> tempCbk;
263 {
264 std::lock_guard<std::mutex> autoLock(lock_);
265 if (deviceStateCallback_.count(pkgName) == 0) {
266 LOGE("OnDeviceOnline error, device state callback not register.");
267 return;
268 }
269 tempCbk = deviceStateCallback_[pkgName];
270 }
271 if (tempCbk == nullptr) {
272 LOGE("OnDeviceOnline error, registered device state callback is nullptr.");
273 return;
274 }
275 tempCbk->OnDeviceOnline(deviceInfo);
276 }
277
OnDeviceOnline(const std::string & pkgName,const DmDeviceBasicInfo & deviceBasicInfo)278 void DeviceManagerNotify::OnDeviceOnline(const std::string &pkgName, const DmDeviceBasicInfo &deviceBasicInfo)
279 {
280 if (pkgName.empty()) {
281 LOGE("Invalid parameter, pkgName is empty.");
282 return;
283 }
284 LOGI("DeviceManagerNotify::OnDeviceOnline in, pkgName:%s", pkgName.c_str());
285 std::shared_ptr<DeviceStatusCallback> tempCbk;
286 {
287 std::lock_guard<std::mutex> autoLock(lock_);
288 if (deviceStatusCallback_.count(pkgName) == 0) {
289 LOGE("OnDeviceOnline error, device status callback not register.");
290 return;
291 }
292 tempCbk = deviceStatusCallback_[pkgName];
293 }
294 if (tempCbk == nullptr) {
295 LOGE("OnDeviceOnline error, registered device status callback is nullptr.");
296 return;
297 }
298 tempCbk->OnDeviceOnline(deviceBasicInfo);
299 }
300
OnDeviceOffline(const std::string & pkgName,const DmDeviceInfo & deviceInfo)301 void DeviceManagerNotify::OnDeviceOffline(const std::string &pkgName, const DmDeviceInfo &deviceInfo)
302 {
303 if (pkgName.empty()) {
304 LOGE("Invalid parameter, pkgName is empty.");
305 return;
306 }
307 LOGI("DeviceManagerNotify::OnDeviceOffline in, pkgName:%s", pkgName.c_str());
308 std::shared_ptr<DeviceStateCallback> tempCbk;
309 {
310 std::lock_guard<std::mutex> autoLock(lock_);
311 if (deviceStateCallback_.count(pkgName) == 0) {
312 LOGE("OnDeviceOffline error, device state callback not register.");
313 return;
314 }
315 tempCbk = deviceStateCallback_[pkgName];
316 }
317 if (tempCbk == nullptr) {
318 LOGE("OnDeviceOffline error, registered device state callback is nullptr.");
319 return;
320 }
321 tempCbk->OnDeviceOffline(deviceInfo);
322 }
323
OnDeviceOffline(const std::string & pkgName,const DmDeviceBasicInfo & deviceBasicInfo)324 void DeviceManagerNotify::OnDeviceOffline(const std::string &pkgName, const DmDeviceBasicInfo &deviceBasicInfo)
325 {
326 if (pkgName.empty()) {
327 LOGE("Invalid parameter, pkgName is empty.");
328 return;
329 }
330 LOGI("DeviceManagerNotify::OnDeviceOffline in, pkgName:%s", pkgName.c_str());
331 std::shared_ptr<DeviceStatusCallback> tempCbk;
332 {
333 std::lock_guard<std::mutex> autoLock(lock_);
334 if (deviceStatusCallback_.count(pkgName) == 0) {
335 LOGE("OnDeviceOffline error, device status callback not register.");
336 return;
337 }
338 tempCbk = deviceStatusCallback_[pkgName];
339 }
340 if (tempCbk == nullptr) {
341 LOGE("OnDeviceOffline error, registered device status callback is nullptr.");
342 return;
343 }
344 tempCbk->OnDeviceOffline(deviceBasicInfo);
345 }
346
OnDeviceChanged(const std::string & pkgName,const DmDeviceInfo & deviceInfo)347 void DeviceManagerNotify::OnDeviceChanged(const std::string &pkgName, const DmDeviceInfo &deviceInfo)
348 {
349 if (pkgName.empty()) {
350 LOGE("Invalid parameter, pkgName is empty.");
351 return;
352 }
353 LOGI("DeviceManagerNotify::OnDeviceChanged in, pkgName:%s", pkgName.c_str());
354 std::shared_ptr<DeviceStateCallback> tempCbk;
355 {
356 std::lock_guard<std::mutex> autoLock(lock_);
357 if (deviceStateCallback_.count(pkgName) == 0) {
358 LOGE("OnDeviceChanged error, device state callback not register.");
359 return;
360 }
361 tempCbk = deviceStateCallback_[pkgName];
362 }
363 if (tempCbk == nullptr) {
364 LOGE("OnDeviceChanged error, registered device state callback is nullptr.");
365 return;
366 }
367 tempCbk->OnDeviceChanged(deviceInfo);
368 }
369
OnDeviceChanged(const std::string & pkgName,const DmDeviceBasicInfo & deviceBasicInfo)370 void DeviceManagerNotify::OnDeviceChanged(const std::string &pkgName, const DmDeviceBasicInfo &deviceBasicInfo)
371 {
372 if (pkgName.empty()) {
373 LOGE("Invalid parameter, pkgName is empty.");
374 return;
375 }
376 LOGI("DeviceManagerNotify::OnDeviceChanged in, pkgName:%s", pkgName.c_str());
377 std::shared_ptr<DeviceStatusCallback> tempCbk;
378 {
379 std::lock_guard<std::mutex> autoLock(lock_);
380 if (deviceStatusCallback_.count(pkgName) == 0) {
381 LOGE("OnDeviceChanged error, device state callback not register.");
382 return;
383 }
384 tempCbk = deviceStatusCallback_[pkgName];
385 }
386 if (tempCbk == nullptr) {
387 LOGE("OnDeviceChanged error, registered device state callback is nullptr.");
388 return;
389 }
390 tempCbk->OnDeviceChanged(deviceBasicInfo);
391 }
392
OnDeviceReady(const std::string & pkgName,const DmDeviceInfo & deviceInfo)393 void DeviceManagerNotify::OnDeviceReady(const std::string &pkgName, const DmDeviceInfo &deviceInfo)
394 {
395 if (pkgName.empty()) {
396 LOGE("Invalid parameter, pkgName is empty.");
397 return;
398 }
399 LOGI("DeviceManagerNotify::OnDeviceReady in, pkgName:%s", pkgName.c_str());
400 std::shared_ptr<DeviceStateCallback> tempCbk;
401 {
402 std::lock_guard<std::mutex> autoLock(lock_);
403 if (deviceStateCallback_.count(pkgName) == 0) {
404 LOGE("OnDeviceReady error, device state callback not register.");
405 return;
406 }
407 tempCbk = deviceStateCallback_[pkgName];
408 }
409 if (tempCbk == nullptr) {
410 LOGE("OnDeviceReady error, registered device state callback is nullptr.");
411 return;
412 }
413 tempCbk->OnDeviceReady(deviceInfo);
414 }
415
OnDeviceReady(const std::string & pkgName,const DmDeviceBasicInfo & deviceBasicInfo)416 void DeviceManagerNotify::OnDeviceReady(const std::string &pkgName, const DmDeviceBasicInfo &deviceBasicInfo)
417 {
418 if (pkgName.empty()) {
419 LOGE("Invalid parameter, pkgName is empty.");
420 return;
421 }
422 LOGI("DeviceManagerNotify::OnDeviceReady in, pkgName:%s", pkgName.c_str());
423 std::shared_ptr<DeviceStatusCallback> tempCbk;
424 {
425 std::lock_guard<std::mutex> autoLock(lock_);
426 if (deviceStatusCallback_.count(pkgName) == 0) {
427 LOGE("OnDeviceReady error, device status callback not register.");
428 return;
429 }
430 tempCbk = deviceStatusCallback_[pkgName];
431 }
432 if (tempCbk == nullptr) {
433 LOGE("OnDeviceReady error, registered device status callback is nullptr.");
434 return;
435 }
436 tempCbk->OnDeviceReady(deviceBasicInfo);
437 }
438
OnDeviceFound(const std::string & pkgName,uint16_t subscribeId,const DmDeviceInfo & deviceInfo)439 void DeviceManagerNotify::OnDeviceFound(const std::string &pkgName, uint16_t subscribeId,
440 const DmDeviceInfo &deviceInfo)
441 {
442 if (pkgName.empty()) {
443 LOGE("Invalid parameter, pkgName is empty.");
444 return;
445 }
446 std::shared_ptr<DiscoveryCallback> tempCbk;
447 {
448 std::lock_guard<std::mutex> autoLock(lock_);
449 if (deviceDiscoveryCallbacks_.count(pkgName) == 0) {
450 LOGE("DeviceManagerNotify::OnDeviceFound error, device discovery callback not register for pkgName %s.",
451 pkgName.c_str());
452 return;
453 }
454 std::map<uint16_t, std::shared_ptr<DiscoveryCallback>> &discoverCallMap = deviceDiscoveryCallbacks_[pkgName];
455 auto iter = discoverCallMap.find(subscribeId);
456 if (iter == discoverCallMap.end()) {
457 LOGE("OnDeviceFound error, device discovery callback not register for subscribeId %d.", subscribeId);
458 return;
459 }
460 tempCbk = iter->second;
461 }
462 if (tempCbk == nullptr) {
463 LOGE("OnDeviceFound error, registered device discovery callback is nullptr.");
464 return;
465 }
466 tempCbk->OnDeviceFound(subscribeId, deviceInfo);
467 }
468
OnDeviceFound(const std::string & pkgName,uint16_t subscribeId,const DmDeviceBasicInfo & deviceBasicInfo)469 void DeviceManagerNotify::OnDeviceFound(const std::string &pkgName, uint16_t subscribeId,
470 const DmDeviceBasicInfo &deviceBasicInfo)
471 {
472 if (pkgName.empty()) {
473 LOGE("Invalid parameter, pkgName is empty.");
474 return;
475 }
476 LOGI("DeviceManagerNotify::OnDeviceFound in, pkgName:%s, subscribeId:%d.", pkgName.c_str(), (int32_t)subscribeId);
477 std::shared_ptr<DiscoveryCallback> tempCbk;
478 {
479 std::lock_guard<std::mutex> autoLock(lock_);
480 if (deviceDiscoveryCallbacks_.count(pkgName) == 0) {
481 LOGE("DeviceManagerNotify::OnDeviceFound error, device discovery callback not register for pkgName %s.",
482 pkgName.c_str());
483 return;
484 }
485 std::map<uint16_t, std::shared_ptr<DiscoveryCallback>> &discoverCallMap = deviceDiscoveryCallbacks_[pkgName];
486 auto iter = discoverCallMap.find(subscribeId);
487 if (iter == discoverCallMap.end()) {
488 LOGE("OnDeviceFound error, device discovery callback not register for subscribeId %d.", subscribeId);
489 return;
490 }
491 tempCbk = iter->second;
492 }
493 if (tempCbk == nullptr) {
494 LOGE("OnDeviceFound error, registered device discovery callback is nullptr.");
495 return;
496 }
497 tempCbk->OnDeviceFound(subscribeId, deviceBasicInfo);
498 }
499
OnDiscoveryFailed(const std::string & pkgName,uint16_t subscribeId,int32_t failedReason)500 void DeviceManagerNotify::OnDiscoveryFailed(const std::string &pkgName, uint16_t subscribeId, int32_t failedReason)
501 {
502 if (pkgName.empty()) {
503 LOGE("Invalid parameter, pkgName is empty.");
504 return;
505 }
506 LOGI("DeviceManagerNotify::OnDiscoveryFailed in, pkgName:%s, subscribeId %d, failed reason %d", pkgName.c_str(),
507 subscribeId, failedReason);
508 std::shared_ptr<DiscoveryCallback> tempCbk;
509 {
510 std::lock_guard<std::mutex> autoLock(lock_);
511 if (deviceDiscoveryCallbacks_.count(pkgName) == 0) {
512 LOGE("DeviceManagerNotify::OnDiscoveryFailed error, device discovery callback not register for pkgName %s.",
513 pkgName.c_str());
514 return;
515 }
516 std::map<uint16_t, std::shared_ptr<DiscoveryCallback>> &discoverCallMap = deviceDiscoveryCallbacks_[pkgName];
517 auto iter = discoverCallMap.find(subscribeId);
518 if (iter == discoverCallMap.end()) {
519 LOGE("OnDiscoveryFailed error, device discovery callback not register for subscribeId %d.", subscribeId);
520 return;
521 }
522 tempCbk = iter->second;
523 }
524 if (tempCbk == nullptr) {
525 LOGE("OnDiscoveryFailed error, registered device discovery callback is nullptr.");
526 return;
527 }
528 tempCbk->OnDiscoveryFailed(subscribeId, failedReason);
529 }
530
OnDiscoverySuccess(const std::string & pkgName,uint16_t subscribeId)531 void DeviceManagerNotify::OnDiscoverySuccess(const std::string &pkgName, uint16_t subscribeId)
532 {
533 if (pkgName.empty()) {
534 LOGE("Invalid parameter, pkgName is empty.");
535 return;
536 }
537 LOGI("DeviceManagerNotify::OnDiscoverySuccess in, pkgName:%s, subscribeId:%d.", pkgName.c_str(), subscribeId);
538 std::shared_ptr<DiscoveryCallback> tempCbk;
539 {
540 std::lock_guard<std::mutex> autoLock(lock_);
541 if (deviceDiscoveryCallbacks_.count(pkgName) == 0) {
542 LOGE("OnDiscoverySuccess error, device discovery callback not register for pkgName %s.", pkgName.c_str());
543 return;
544 }
545 std::map<uint16_t, std::shared_ptr<DiscoveryCallback>> &discoverCallMap = deviceDiscoveryCallbacks_[pkgName];
546 auto iter = discoverCallMap.find(subscribeId);
547 if (iter == discoverCallMap.end()) {
548 LOGE("OnDiscoverySuccess error, device discovery callback not register for subscribeId %d.", subscribeId);
549 return;
550 }
551 tempCbk = iter->second;
552 }
553 if (tempCbk == nullptr) {
554 LOGE("OnDiscoverySuccess error, registered device discovery callback is nullptr.");
555 return;
556 }
557 tempCbk->OnDiscoverySuccess(subscribeId);
558 }
559
OnPublishResult(const std::string & pkgName,int32_t publishId,int32_t publishResult)560 void DeviceManagerNotify::OnPublishResult(const std::string &pkgName, int32_t publishId, int32_t publishResult)
561 {
562 if (pkgName.empty()) {
563 LOGE("Invalid parameter, pkgName is empty.");
564 return;
565 }
566 LOGI("DeviceManagerNotify::OnPublishResult in, pkgName:%s, publishId %d, publishResult %d", pkgName.c_str(),
567 publishId, publishResult);
568 std::shared_ptr<PublishCallback> tempCbk;
569 {
570 std::lock_guard<std::mutex> autoLock(lock_);
571 if (devicePublishCallbacks_.count(pkgName) == 0) {
572 LOGE("DeviceManagerNotify::OnPublishResult error, device publish callback not register for pkgName %s.",
573 pkgName.c_str());
574 return;
575 }
576 std::map<int32_t, std::shared_ptr<PublishCallback>> &publishCallMap = devicePublishCallbacks_[pkgName];
577 auto iter = publishCallMap.find(publishId);
578 if (iter == publishCallMap.end()) {
579 LOGE("OnPublishResult error, device publish callback not register for publishId %d.", publishId);
580 return;
581 }
582 tempCbk = iter->second;
583 }
584 if (tempCbk == nullptr) {
585 LOGE("OnPublishResult error, registered device publish callback is nullptr.");
586 return;
587 }
588 tempCbk->OnPublishResult(publishId, publishResult);
589 }
590
OnAuthResult(const std::string & pkgName,const std::string & deviceId,const std::string & token,uint32_t status,uint32_t reason)591 void DeviceManagerNotify::OnAuthResult(const std::string &pkgName, const std::string &deviceId,
592 const std::string &token, uint32_t status, uint32_t reason)
593 {
594 if (pkgName.empty() || token.empty() || deviceId.empty()) {
595 LOGE("Invalid para, pkgName: %s, token: %s", pkgName.c_str(), token.c_str());
596 return;
597 }
598 LOGI("DeviceManagerNotify::OnAuthResult in, pkgName:%s, status:%d, reason:%u", pkgName.c_str(), status, reason);
599 std::shared_ptr<AuthenticateCallback> tempCbk;
600 {
601 std::lock_guard<std::mutex> autoLock(lock_);
602 if (authenticateCallback_.count(pkgName) == 0) {
603 LOGE("DeviceManagerNotify::OnAuthResult error, authenticate callback not register for pkgName %s.",
604 pkgName.c_str());
605 return;
606 }
607 std::map<std::string, std::shared_ptr<AuthenticateCallback>> &authCallMap = authenticateCallback_[pkgName];
608 auto iter = authCallMap.find(deviceId);
609 if (iter == authCallMap.end()) {
610 LOGE("OnAuthResult error, authenticate callback not register.");
611 return;
612 }
613 tempCbk = iter->second;
614 }
615 if (tempCbk == nullptr) {
616 LOGE("OnAuthResult error, registered authenticate callback is nullptr.");
617 return;
618 }
619 tempCbk->OnAuthResult(deviceId, token, status, (int32_t)reason);
620 {
621 std::lock_guard<std::mutex> autoLock(lock_);
622 authenticateCallback_[pkgName].erase(deviceId);
623 if (authenticateCallback_[pkgName].empty()) {
624 authenticateCallback_.erase(pkgName);
625 }
626 }
627 }
628
OnVerifyAuthResult(const std::string & pkgName,const std::string & deviceId,int32_t resultCode,int32_t flag)629 void DeviceManagerNotify::OnVerifyAuthResult(const std::string &pkgName, const std::string &deviceId,
630 int32_t resultCode, int32_t flag)
631 {
632 if (pkgName.empty()) {
633 LOGE("Invalid parameter, pkgName is empty.");
634 return;
635 }
636 LOGI("DeviceManagerNotify::OnVerifyAuthResult in, pkgName:%s, resultCode:%d, flag:%d", pkgName.c_str(),
637 resultCode, flag);
638 std::shared_ptr<VerifyAuthCallback> tempCbk;
639 {
640 std::lock_guard<std::mutex> autoLock(lock_);
641 if (verifyAuthCallback_.count(pkgName) == 0) {
642 LOGE("DeviceManagerNotify::OnVerifyAuthResult error, verify auth callback not register for pkgName %s.",
643 pkgName.c_str());
644 return;
645 }
646 tempCbk = verifyAuthCallback_[pkgName];
647 }
648 if (tempCbk == nullptr) {
649 LOGE("OnVerifyAuthResult error, registered verify auth callback is nullptr.");
650 return;
651 }
652 tempCbk->OnVerifyAuthResult(deviceId, resultCode, flag);
653 {
654 std::lock_guard<std::mutex> autoLock(lock_);
655 verifyAuthCallback_.erase(pkgName);
656 }
657 }
658
OnUiCall(std::string & pkgName,std::string & paramJson)659 void DeviceManagerNotify::OnUiCall(std::string &pkgName, std::string ¶mJson)
660 {
661 if (pkgName.empty()) {
662 LOGE("DeviceManagerNotify::OnUiCall error: Invalid parameter, pkgName: %s", pkgName.c_str());
663 return;
664 }
665 LOGI("DeviceManagerNotify::OnUiCall in, pkgName:%s", pkgName.c_str());
666 std::shared_ptr<DeviceManagerUiCallback> tempCbk;
667 {
668 std::lock_guard<std::mutex> autoLock(lock_);
669 if (dmUiCallback_.count(pkgName) == 0) {
670 LOGE("OnUiCall error, dm Ui callback not register for pkgName %d.", pkgName.c_str());
671 return;
672 }
673 tempCbk = dmUiCallback_[pkgName];
674 }
675 if (tempCbk == nullptr) {
676 LOGE("OnUiCall error, registered dm Ui callback is nullptr.");
677 return;
678 }
679 tempCbk->OnCall(paramJson);
680 }
681
OnCredentialResult(const std::string & pkgName,int32_t & action,const std::string & credentialResult)682 void DeviceManagerNotify::OnCredentialResult(const std::string &pkgName, int32_t &action,
683 const std::string &credentialResult)
684 {
685 if (pkgName.empty()) {
686 LOGE("DeviceManagerNotify::OnCredentialResult error: Invalid parameter, pkgName: %s", pkgName.c_str());
687 return;
688 }
689 LOGI("DeviceManagerNotify::OnCredentialResult in, pkgName:%s, action:%d", pkgName.c_str(), action);
690 std::shared_ptr<CredentialCallback> tempCbk;
691 {
692 std::lock_guard<std::mutex> autoLock(lock_);
693 if (credentialCallback_.count(pkgName) == 0) {
694 LOGE("DeviceManagerNotify::OnCredentialResult error, credential callback not register for pkgName %s.",
695 pkgName.c_str());
696 return;
697 }
698 tempCbk = credentialCallback_[pkgName];
699 }
700 if (tempCbk == nullptr) {
701 LOGE("OnCredentialResult error, registered credential callback is nullptr.");
702 return;
703 }
704 tempCbk->OnCredentialResult(action, credentialResult);
705 }
706 } // namespace DistributedHardware
707 } // namespace OHOS
708