1 /*
2  * Copyright (C) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <mutex>
17 
18 #include "mdns_instances.h"
19 #include "net_manager_constants.h"
20 #include "netmanager_ext_log.h"
21 
22 namespace OHOS::NetManagerStandard {
23 std::map<MDnsDiscoveryObserver *, MDnsDiscoveryInstance *> MDnsDiscoveryInstance::discoverInstanceMap_;
24 std::mutex g_mDNSDiscoverMutex;
25 
MDnsDiscoveryInstance(EventManager * eventManager)26 MDnsDiscoveryInstance::MDnsDiscoveryInstance(EventManager *eventManager)
27     : observer_(new (std::nothrow) MDnsDiscoveryObserver), manager_(eventManager)
28 {
29 }
30 
MakeMDnsDiscovery(EventManager * eventManager)31 MDnsDiscoveryInstance *MDnsDiscoveryInstance::MakeMDnsDiscovery(EventManager *eventManager)
32 {
33     std::lock_guard<std::mutex> lock(g_mDNSDiscoverMutex);
34     auto mdnsDiscovery = new MDnsDiscoveryInstance(eventManager);
35     if (mdnsDiscovery->observer_ == nullptr) {
36         NETMANAGER_EXT_LOGE("mdnsDiscovery->observer_ is nullptr");
37         delete mdnsDiscovery;
38         return nullptr;
39     }
40     discoverInstanceMap_[mdnsDiscovery->observer_.GetRefPtr()] = mdnsDiscovery;
41     return mdnsDiscovery;
42 }
43 
DeleteMDnsDiscovery(MDnsDiscoveryInstance * mdnsDiscovery)44 void MDnsDiscoveryInstance::DeleteMDnsDiscovery(MDnsDiscoveryInstance *mdnsDiscovery)
45 {
46     std::lock_guard<std::mutex> lock(g_mDNSDiscoverMutex);
47     if (mdnsDiscovery->observer_ == nullptr) {
48         NETMANAGER_EXT_LOGE("mdnsDiscovery->observer_ is nullptr");
49         return;
50     }
51     discoverInstanceMap_.erase(mdnsDiscovery->observer_.GetRefPtr());
52     delete mdnsDiscovery;
53 }
54 
GetObserver() const55 sptr<MDnsDiscoveryObserver> MDnsDiscoveryInstance::GetObserver() const
56 {
57     return observer_;
58 }
59 
GetEventManager() const60 EventManager *MDnsDiscoveryInstance::GetEventManager() const
61 {
62     return manager_;
63 }
64 } // namespace OHOS::NetManagerStandard
65