• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-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 <thread>
17 #include <pthread.h>
18 
19 #include "dns_resolv_listen.h"
20 #include "netnative_log_wrapper.h"
21 #include "singleton.h"
22 
23 #include "dns_manager.h"
24 
25 namespace OHOS {
26 namespace nmd {
StartListen()27 void StartListen()
28 {
29     NETNATIVE_LOG_D("Enter threadStart");
30     DnsResolvListen().StartListen();
31 }
32 
DnsManager()33 DnsManager::DnsManager() : dnsProxyListen_(std::make_shared<DnsProxyListen>())
34 {
35     std::thread t(StartListen);
36     std::string threadName = "DnsMgerListen";
37     pthread_setname_np(t.native_handle(), threadName.c_str());
38     t.detach();
39 }
40 
SetResolverConfig(uint16_t netId,uint16_t baseTimeoutMillis,uint8_t retryCount,const std::vector<std::string> & servers,const std::vector<std::string> & domains)41 int32_t DnsManager::SetResolverConfig(uint16_t netId, uint16_t baseTimeoutMillis, uint8_t retryCount,
42                                       const std::vector<std::string> &servers, const std::vector<std::string> &domains)
43 {
44     NETNATIVE_LOG_D("manager_SetResolverConfig netId[%{public}d]", netId);
45     return DelayedSingleton<DnsParamCache>::GetInstance()->SetResolverConfig(netId, baseTimeoutMillis, retryCount,
46                                                                              servers, domains);
47 }
48 
GetResolverConfig(uint16_t netId,std::vector<std::string> & servers,std::vector<std::string> & domains,uint16_t & baseTimeoutMillis,uint8_t & retryCount)49 int32_t DnsManager::GetResolverConfig(uint16_t netId, std::vector<std::string> &servers,
50                                       std::vector<std::string> &domains, uint16_t &baseTimeoutMillis,
51                                       uint8_t &retryCount)
52 {
53     NETNATIVE_LOG_D("manager_GetResolverConfig netId[%{public}d]", netId);
54     return DelayedSingleton<DnsParamCache>::GetInstance()->GetResolverConfig(netId, servers, domains, baseTimeoutMillis,
55                                                                              retryCount);
56 }
57 
CreateNetworkCache(uint16_t netId)58 int32_t DnsManager::CreateNetworkCache(uint16_t netId)
59 {
60     NETNATIVE_LOG_D("manager_CreateNetworkCache netId[%{public}d]", netId);
61     return DelayedSingleton<DnsParamCache>::GetInstance()->CreateCacheForNet(netId);
62 }
63 
DestroyNetworkCache(uint16_t netId)64 int32_t DnsManager::DestroyNetworkCache(uint16_t netId)
65 {
66     return DelayedSingleton<DnsParamCache>::GetInstance()->DestroyNetworkCache(netId);
67 }
68 
SetDefaultNetwork(uint16_t netId)69 void DnsManager::SetDefaultNetwork(uint16_t netId)
70 {
71     DelayedSingleton<DnsParamCache>::GetInstance()->SetDefaultNetwork(netId);
72 }
73 
StartProxyListen()74 void StartProxyListen()
75 {
76     NETNATIVE_LOG_D("begin StartProxyListen");
77     DnsProxyListen().StartListen();
78 }
79 
ShareDnsSet(uint16_t netId)80 void DnsManager::ShareDnsSet(uint16_t netId)
81 {
82     dnsProxyListen_->SetParseNetId(netId);
83 }
84 
StartDnsProxyListen()85 void DnsManager::StartDnsProxyListen()
86 {
87     dnsProxyListen_->OnListen();
88     std::thread t(StartProxyListen);
89     std::string threadName = "DnsPxyListen";
90     pthread_setname_np(t.native_handle(), threadName.c_str());
91     t.detach();
92 }
93 
StopDnsProxyListen()94 void DnsManager::StopDnsProxyListen()
95 {
96     dnsProxyListen_->OffListen();
97 }
98 
GetDumpInfo(std::string & info)99 void DnsManager::GetDumpInfo(std::string &info)
100 {
101     NETNATIVE_LOG_D("Get dump info");
102     DelayedSingleton<DnsParamCache>::GetInstance()->GetDumpInfo(info);
103 }
104 
GetAddrInfo(const std::string & hostName,const std::string & serverName,const AddrInfo & hints,uint16_t netId,std::vector<AddrInfo> & res)105 int32_t DnsManager::GetAddrInfo(const std::string &hostName, const std::string &serverName, const AddrInfo &hints,
106                                 uint16_t netId, std::vector<AddrInfo> &res)
107 {
108     if (netId == 0) {
109         netId = DelayedSingleton<DnsParamCache>::GetInstance()->GetDefaultNetwork();
110         NETNATIVE_LOG_D("DnsManager DnsGetaddrinfo netId == 0 defaultNetId_ : %{public}d", netId);
111     }
112     return dnsGetAddrInfo_->GetAddrInfo(hostName, serverName, hints, netId, res);
113 }
114 } // namespace nmd
115 } // namespace OHOS
116