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