• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 &paramJson)
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