VirtualBox

source: vbox/trunk/src/VBox/Main/src-server/HostDnsServiceResolvConf.cpp@ 52901

Last change on this file since 52901 was 52901, checked in by vboxsync, 10 years ago

Main: trailing spaces + warning

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.4 KB
Line 
1/* -*- indent-tabs-mode: nil; -*- */
2#include <VBox/com/string.h>
3#include <VBox/com/ptr.h>
4
5
6#ifdef RT_OS_OS2
7# include <sys/socket.h>
8typedef int socklen_t;
9#endif
10
11#include <stdio.h>
12#include <sys/socket.h>
13#include <netinet/in.h>
14#include <arpa/inet.h>
15
16
17#include <iprt/assert.h>
18#include <iprt/err.h>
19#include <iprt/file.h>
20#include <iprt/critsect.h>
21
22#include <VBox/log.h>
23
24#include <string>
25
26#include "HostDnsService.h"
27#include "../../Devices/Network/slirp/resolv_conf_parser.h"
28
29
30struct HostDnsServiceResolvConf::Data
31{
32 Data(const char *fileName):resolvConfFilename(fileName){};
33
34 std::string resolvConfFilename;
35};
36
37const std::string& HostDnsServiceResolvConf::resolvConf() const
38{
39 return m->resolvConfFilename;
40}
41
42
43HostDnsServiceResolvConf::~HostDnsServiceResolvConf()
44{
45 if (m)
46 {
47 delete m;
48 m = NULL;
49 }
50}
51
52HRESULT HostDnsServiceResolvConf::init(const char *aResolvConfFileName)
53{
54 m = new Data(aResolvConfFileName);
55
56 HostDnsMonitor::init();
57
58 readResolvConf();
59
60 return S_OK;
61}
62
63HRESULT HostDnsServiceResolvConf::readResolvConf()
64{
65 struct rcp_state st;
66 wchar_t *pwczTmpStr;
67
68 st.rcps_flags = RCPSF_NO_STR2IPCONV;
69 int rc = rcp_parse(&st, m->resolvConfFilename.c_str());
70 if (rc == -1)
71 return S_OK;
72
73 HostDnsInformation info;
74 for (unsigned i = 0; i != st.rcps_num_nameserver; ++i)
75 {
76 AssertBreak(st.rcps_str_nameserver[i]);
77
78 pwczTmpStr = NULL;
79 rc = RTStrToUtf16(st.rcps_str_nameserver[i], (RTUTF16 **)&pwczTmpStr);
80 if (RT_SUCCESS(rc) && pwczTmpStr)
81 {
82 info.servers.push_back(std::wstring(pwczTmpStr));
83 RTUtf16Free((RTUTF16 *)pwczTmpStr);
84 }
85 }
86
87 if (st.rcps_domain)
88 {
89 pwczTmpStr = NULL;
90 rc = RTStrToUtf16(st.rcps_domain, (RTUTF16 **)&pwczTmpStr);
91 if (RT_SUCCESS(rc) && pwczTmpStr)
92 {
93 info.domain = std::wstring(pwczTmpStr);
94 RTUtf16Free((RTUTF16 *)pwczTmpStr);
95 }
96 }
97
98 for (unsigned i = 0; i != st.rcps_num_searchlist; ++i)
99 {
100 AssertBreak(st.rcps_searchlist[i]);
101 pwczTmpStr = NULL;
102 rc = RTStrToUtf16(st.rcps_searchlist[i], (RTUTF16 **)&pwczTmpStr);
103 if (RT_SUCCESS(rc) && pwczTmpStr)
104 {
105 info.searchList.push_back(std::wstring(pwczTmpStr));
106 RTUtf16Free((RTUTF16 *)pwczTmpStr);
107 }
108 }
109 setInfo(info);
110
111 return S_OK;
112}
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette