HostDnsService.h revision 01bceecc7f7484a8820c77b884bb91cdefc97390
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync/* $Id$ */
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync/** @file
01bceecc7f7484a8820c77b884bb91cdefc97390vboxsync * Host DNS listener.
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync */
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync/*
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync * Copyright (C) 2005-2012 Oracle Corporation
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync *
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync * available from http://www.virtualbox.org. This file is free software;
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync * you can redistribute it and/or modify it under the terms of the GNU
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync * General Public License (GPL) as published by the Free Software
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync */
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync#ifndef ___H_DNSHOSTSERVICE
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync#define ___H_DNSHOSTSERVICE
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync#include <iprt/cdefs.h>
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync#include <iprt/critsect.h>
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync#include <iprt/types.h>
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync#include <list>
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsynctypedef std::list<com::Utf8Str> Utf8StrList;
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsynctypedef Utf8StrList::iterator Utf8StrListIterator;
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncclass HostDnsService
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync{
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncpublic:
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync HostDnsService();
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual ~HostDnsService();
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual HRESULT init(void);
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual HRESULT start(void);
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual void stop(void);
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync STDMETHOD(COMGETTER(NameServers))(ComSafeArrayOut(BSTR, aNameServers));
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync STDMETHOD(COMGETTER(DomainName))(BSTR *aDomainName);
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync STDMETHOD(COMGETTER(SearchStrings))(ComSafeArrayOut(BSTR, aSearchStrings));
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncprotected:
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual HRESULT update(void);
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync /* XXX: hide it with struct Data together with <list> */
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync Utf8StrList m_llNameServers;
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync Utf8StrList m_llSearchStrings;
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync com::Utf8Str m_DomainName;
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync RTCRITSECT m_hCritSect;
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncprivate:
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync HostDnsService(const HostDnsService& service){ NOREF(service); }
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync HostDnsService& operator =(const HostDnsService& service){ NOREF(service); return *this; }
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync};
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync# ifdef RT_OS_DARWIN
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncclass HostDnsServiceDarwin: public HostDnsService
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync{
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncpublic:
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync HostDnsServiceDarwin();
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual ~HostDnsServiceDarwin();
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual HRESULT init(void);
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual HRESULT start(void);
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual void stop(void);
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual HRESULT update();
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncprivate:
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync static void hostDnsServiceStoreCallback(void *store, void *arrayRef, void *info);
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync};
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync# endif
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync# ifdef RT_OS_WINDOWS
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncclass HostDnsServiceWin: public HostDnsService
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync{
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncpublic:
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync HostDnsServiceWin();
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual ~HostDnsServiceWin();
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual HRESULT init(void);
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual HRESULT start(void);
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual void stop(void);
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual HRESULT update();
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncprivate:
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync void strList2List(Utf8StrList& lst, char *strLst);
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync};
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync# endif
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync#if defined(RT_OS_SOLARIS) || defined(RT_OS_LINUX) || defined(RT_OS_OS2)
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncclass HostDnsServiceResolvConf: public HostDnsService
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync{
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncpublic:
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync HostDnsServiceResolvConf(const char *aResolvConfFileName = "/etc/resolv.conf");
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual ~HostDnsServiceResolvConf();
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual HRESULT init(void);
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual HRESULT update();
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncprotected:
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync com::Utf8Str m_ResolvConfFilename;
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync RTFILE m_ResolvConfFile;
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync};
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync# if defined(RT_OS_SOLARIS)
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync/**
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync * XXX: https://blogs.oracle.com/praks/entry/file_events_notification
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync */
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncclass HostDnsServiceSolaris: public HostDnsServiceResolvConf
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync{
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncpublic:
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync HostDnsServiceSolaris(){}
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual ~HostDnsServiceSolaris(){}
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync};
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync# elif defined(RT_OS_LINUX)
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync/**
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync * XXX: http://www.ibm.com/developerworks/linux/library/l-ubuntu-inotify/index.html
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync */
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncclass HostDnsServiceLinux: public HostDnsServiceResolvConf
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync{
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncpublic:
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync HostDnsServiceLinux(){}
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual ~HostDnsServiceLinux(){}
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync};
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync# elif defined(RT_OS_OS2)
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncclass HostDnsServiceOs2: public HostDnsServiceResolvConf
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync{
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsyncpublic:
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync HostDnsServiceOs2()
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync {
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync /* XXX: \\MPTN\\ETC should be taken from environment variable ETC */
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync ::HostDnsServiceResolvConf("\\MPTN\\ETC\\RESOLV2");
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync }
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync virtual ~HostDnsServiceOs2(){}
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync};
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync# endif
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync#endif
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync
18b1f1bb3429f8bfc1a52cfaeb2445e9fb1f55cdvboxsync#endif /* !___H_DNSHOSTSERVICE */