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