VirtualBox

Ignore:
Timestamp:
Oct 22, 2013 6:56:03 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
90144
Message:

Main/HostDnsService: splits HostDnsService on "singleton" HostDnsMonitor
which monitors host changes and share DnsInformation to per HostImpl/VirtualBoxImpl objects
HostDnsMonitorProxy.

TODO: Win/Darwin parts might burn (not tested)
TODO: find good place to call HostDnsMonitor::shutdown() to stop
monitoring thread. (ref counting could be used on
HostDnsMonitor::addMonitorProxy and HostDnsMonitor::releaseMonitorProxy,
but it better to pausing monitoring on no --auto-shutdown launches of VBoxSVC).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-server/HostDnsServiceResolvConf.cpp

    r48955 r49235  
    33#include <VBox/com/ptr.h>
    44
    5 #include "HostDnsService.h"
    65
    76#ifdef RT_OS_OS2
     
    1918#include <iprt/err.h>
    2019#include <iprt/file.h>
     20#include <iprt/critsect.h>
    2121
    2222#include <VBox/log.h>
     23
     24#include <string>
     25#include <vector>
     26
     27#include "HostDnsService.h"
     28
     29
     30struct HostDnsServiceResolvConf::Data
     31{
     32    Data(const char *fileName):resolvConfFilename(fileName){};
     33
     34    std::string resolvConfFilename;
     35};
     36
     37
     38const std::string& HostDnsServiceResolvConf::resolvConf()
     39{
     40    return m->resolvConfFilename;
     41}
    2342
    2443
     
    5170
    5271
    53 HostDnsServiceResolvConf::HostDnsServiceResolvConf(const char* aResolvConfFilename)
     72HostDnsServiceResolvConf::~HostDnsServiceResolvConf()
    5473{
    55     m_ResolvConfFilename = com::Utf8Str(aResolvConfFilename);
     74    if (m) delete m;
    5675}
    5776
    5877
    59 HostDnsServiceResolvConf::~HostDnsServiceResolvConf()
     78HRESULT HostDnsServiceResolvConf::init(const char *aResolvConfFileName)
    6079{
    61     m_ResolvConfFilename.setNull();
    62     RTFileClose(m_ResolvConfFile);
    63 }
     80    HostDnsMonitor::init();
    6481
    65 HRESULT HostDnsServiceResolvConf::init(const VirtualBox *aParent)
    66 {
    67     HRESULT hrc;
    68 
    69     int rc = RTFileOpen(&m_ResolvConfFile, m_ResolvConfFilename.c_str(),
    70                         RTFILE_O_READ | RTFILE_O_OPEN | RTFILE_O_DENY_NONE);
    71     AssertRCReturn(rc, E_FAIL);
    72 
    73 
    74     hrc = HostDnsService::init(aParent);
    75     AssertComRCReturn(hrc, hrc);
    76 
    77 
    78 
    79     hrc = update();
    80     AssertComRCReturn(hrc, hrc);
     82    m = new Data(aResolvConfFileName);
     83    readResolvConf();
    8184
    8285    return S_OK;
     
    8487
    8588
    86 HRESULT HostDnsServiceResolvConf::update()
     89HRESULT HostDnsServiceResolvConf::readResolvConf()
    8790{
    8891    char buff[256];
     
    9194    bool fWarnTooManyDnsServers = false;
    9295    struct in_addr tmp_addr;
    93     int rc;
    9496    size_t bytes;
     97    HostDnsInformation info;
     98    RTFILE resolvConfFile;
    9599
    96     while (    RT_SUCCESS(rc = fileGets(m_ResolvConfFile, buff, sizeof(buff), &bytes))
     100    int rc = RTFileOpen(&resolvConfFile, m->resolvConfFilename.c_str(),
     101                        RTFILE_O_READ | RTFILE_O_OPEN | RTFILE_O_DENY_NONE);
     102    AssertRCReturn(rc, E_FAIL);
     103
     104    while (    RT_SUCCESS(rc = fileGets(resolvConfFile, buff, sizeof(buff), &bytes))
    97105            && rc != VERR_EOF)
    98106    {
     
    110118                continue;
    111119
    112             m_llNameServers.push_back(com::Utf8Str(buff2));
     120            info.servers.push_back(std::string(buff2));
    113121
    114122            cNameserversFound++;
     
    122130
    123131            if (tok != NULL)
    124                 m_DomainName = com::Utf8Str(tok);
     132                info.domain = std::string(tok);
    125133        }
    126134    }
    127135
     136    RTFileClose(resolvConfFile);
     137
     138    setInfo(info);
     139
    128140    return S_OK;
    129 
    130141}
Note: See TracChangeset for help on using the changeset viewer.

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