HostDnsService.h revision 7ebf6d185474ed3aa5368a5d93649303ab481ef5
/* $Id$ */
/** @file
* Host DNS listener.
*/
/*
* Copyright (C) 2005-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*/
#ifndef ___H_DNSHOSTSERVICE
#define ___H_DNSHOSTSERVICE
#include "VirtualBoxBase.h"
#include <iprt/critsect.h>
#include <list>
#include <vector>
typedef const HostDnsMonitorProxy *PCHostDnsMonitorProxy;
{
Lockee();
const RTCRITSECT* lock() const;
};
{
~ALock();
};
{
bool equals(const HostDnsInformation &) const;
};
/**
* This class supposed to be a real DNS monitor object it should be singleton,
* it lifecycle starts and ends together with VBoxSVC.
*/
{
static const HostDnsMonitor *getHostDnsMonitor();
static void shutdown();
void addMonitorProxy(PCHostDnsMonitorProxy) const;
void releaseMonitorProxy(PCHostDnsMonitorProxy) const;
const HostDnsInformation &getInfo() const;
/* @note: method will wait till client call
HostDnsService::monitorThreadInitializationDone() */
void setInfo(const HostDnsInformation &);
/* this function used only if HostDnsMonitor::HostDnsMonitor(true) */
void monitorThreadInitializationDone();
virtual void monitorThreadShutdown() = 0;
virtual int monitorWorker() = 0;
HostDnsMonitor(const HostDnsMonitor &);
static int threadMonitoringRoutine(RTTHREAD, void *);
struct Data;
Data *m;
};
/**
* This class supposed to be a proxy for events on changing Host Name Resolving configurations.
*/
{
void notify() const;
bool operator==(PCHostDnsMonitorProxy&);
void updateInfo();
struct Data;
Data *m;
};
# ifdef RT_OS_DARWIN
{
virtual void monitorThreadShutdown();
virtual int monitorWorker();
struct Data;
Data *m;
};
# endif
# ifdef RT_OS_WINDOWS
{
virtual void monitorThreadShutdown();
virtual int monitorWorker();
struct Data;
Data *m;
};
# endif
{
/* While not all hosts supports Hosts DNS change notifiaction
* default implementation offers return VERR_IGNORE.
*/
virtual void monitorThreadShutdown() {}
struct Data;
Data *m;
};
# if defined(RT_OS_SOLARIS)
/**
*/
{
};
# elif defined(RT_OS_LINUX)
{
HostDnsServiceLinux():HostDnsServiceResolvConf(true){}
virtual void monitorThreadShutdown();
virtual int monitorWorker();
};
# elif defined(RT_OS_FREEBSD)
{
};
{
~HostDnsServiceOs2(){}
/* XXX: \\MPTN\\ETC should be taken from environment variable ETC */
};
# endif
# endif
#endif /* !___H_DNSHOSTSERVICE */