VBoxNetBaseService.h revision 7cfa8a9bf6560b261a92c25fe36ad470af76a48e
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync/* $Id$ */
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync/** @file
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync * VBoxNetUDP - IntNet Client Library.
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync */
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync/*
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2009-2011 Oracle Corporation
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync *
82bcaaf8077ba892f39afb721dca149353c63d2cvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
82bcaaf8077ba892f39afb721dca149353c63d2cvboxsync * available from http://www.virtualbox.org. This file is free software;
82bcaaf8077ba892f39afb721dca149353c63d2cvboxsync * you can redistribute it and/or modify it under the terms of the GNU
82bcaaf8077ba892f39afb721dca149353c63d2cvboxsync * General Public License (GPL) as published by the Free Software
82bcaaf8077ba892f39afb721dca149353c63d2cvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
82bcaaf8077ba892f39afb721dca149353c63d2cvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
82bcaaf8077ba892f39afb721dca149353c63d2cvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync */
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync#ifndef ___VBoxNetBaseService_h___
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync#define ___VBoxNetBaseService_h___
2e2dec6e64c09dd7e3fe4ad0ee8bb5cf7d63762evboxsync
2622c26c6b4105d944a29c5e2c77b6ef26e10101vboxsync#include <iprt/critsect.h>
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsyncclass VBoxNetBaseService
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync{
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsyncpublic:
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync VBoxNetBaseService();
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync virtual ~VBoxNetBaseService();
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync int parseArgs(int argc, char **argv);
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync int tryGoOnline(void);
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync void shutdown(void);
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync int syncEnter() { return RTCritSectEnter(&this->m_csThis);}
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync int syncLeave() { return RTCritSectLeave(&this->m_csThis);}
b73558f2e00416e86d24d6704100021758131e9bvboxsync int waitForIntNetEvent(int cMillis);
b73558f2e00416e86d24d6704100021758131e9bvboxsync int sendBufferOnWire(PCINTNETSEG pSg, int cSg, size_t cbBuffer);
b73558f2e00416e86d24d6704100021758131e9bvboxsync void flushWire();
b73558f2e00416e86d24d6704100021758131e9bvboxsync
b73558f2e00416e86d24d6704100021758131e9bvboxsync virtual void usage(void) = 0;
b73558f2e00416e86d24d6704100021758131e9bvboxsync virtual int run(void) = 0;
b73558f2e00416e86d24d6704100021758131e9bvboxsync virtual int parseOpt(int rc, const RTGETOPTUNION& getOptVal) = 0;
b73558f2e00416e86d24d6704100021758131e9bvboxsync
b73558f2e00416e86d24d6704100021758131e9bvboxsync virtual int init(void);
b73558f2e00416e86d24d6704100021758131e9bvboxsync virtual bool isMainNeeded() const { return m_fNeedMain; }
b73558f2e00416e86d24d6704100021758131e9bvboxsync /* VirtualBox instance */
b73558f2e00416e86d24d6704100021758131e9bvboxsync ComPtr<IVirtualBox> virtualbox;
b73558f2e00416e86d24d6704100021758131e9bvboxsync
b73558f2e00416e86d24d6704100021758131e9bvboxsyncprotected:
b73558f2e00416e86d24d6704100021758131e9bvboxsync /**
b73558f2e00416e86d24d6704100021758131e9bvboxsync * Print debug message depending on the m_cVerbosity level.
b73558f2e00416e86d24d6704100021758131e9bvboxsync *
b73558f2e00416e86d24d6704100021758131e9bvboxsync * @param iMinLevel The minimum m_cVerbosity level for this message.
b73558f2e00416e86d24d6704100021758131e9bvboxsync * @param fMsg Whether to dump parts for the current DHCP message.
b73558f2e00416e86d24d6704100021758131e9bvboxsync * @param pszFmt The message format string.
b73558f2e00416e86d24d6704100021758131e9bvboxsync * @param ... Optional arguments.
b73558f2e00416e86d24d6704100021758131e9bvboxsync */
b73558f2e00416e86d24d6704100021758131e9bvboxsync void debugPrint(int32_t iMinLevel, bool fMsg, const char *pszFmt, ...) const
b73558f2e00416e86d24d6704100021758131e9bvboxsync {
b73558f2e00416e86d24d6704100021758131e9bvboxsync if (iMinLevel <= m_cVerbosity)
b73558f2e00416e86d24d6704100021758131e9bvboxsync {
b73558f2e00416e86d24d6704100021758131e9bvboxsync va_list va;
0d49a2fbc9857ad8dd29542de7fb37202f1a283fvboxsync va_start(va, pszFmt);
b73558f2e00416e86d24d6704100021758131e9bvboxsync debugPrintV(iMinLevel, fMsg, pszFmt, va);
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync va_end(va);
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync }
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync }
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync virtual void debugPrintV(int32_t iMinLevel, bool fMsg, const char *pszFmt, va_list va) const;
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync /** @name The server configuration data members.
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync * @{ */
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync std::string m_Name;
2622c26c6b4105d944a29c5e2c77b6ef26e10101vboxsync std::string m_Network;
1b8fb9123956247b778a8aee821295b360b41e6fvboxsync std::string m_TrunkName;
2622c26c6b4105d944a29c5e2c77b6ef26e10101vboxsync INTNETTRUNKTYPE m_enmTrunkType;
2622c26c6b4105d944a29c5e2c77b6ef26e10101vboxsync RTMAC m_MacAddress;
2e2dec6e64c09dd7e3fe4ad0ee8bb5cf7d63762evboxsync RTNETADDRIPV4 m_Ipv4Address;
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync RTNETADDRIPV4 m_Ipv4Netmask;
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync /** @} */
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync /** @name The network interface
0f70ed40798198e1d9099c6ae3bdb239d2b8cf0dvboxsync * @{ */
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync PSUPDRVSESSION m_pSession;
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync uint32_t m_cbSendBuf;
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync uint32_t m_cbRecvBuf;
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync INTNETIFHANDLE m_hIf; /**< The handle to the network interface. */
1af704e0ccef76a9d375efc06d2a5eba6d679809vboxsync PINTNETBUF m_pIfBuf; /**< Interface buffer. */
2e2dec6e64c09dd7e3fe4ad0ee8bb5cf7d63762evboxsync std::vector<PRTGETOPTDEF> m_vecOptionDefs;
b73558f2e00416e86d24d6704100021758131e9bvboxsync /** @} */
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync /** @name Debug stuff
2e2dec6e64c09dd7e3fe4ad0ee8bb5cf7d63762evboxsync * @{ */
2e2dec6e64c09dd7e3fe4ad0ee8bb5cf7d63762evboxsync int32_t m_cVerbosity;
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsyncprivate:
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync PRTGETOPTDEF getOptionsPtr();
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync /* cs for syncing */
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync RTCRITSECT m_csThis;
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync /* Controls whether service will connect SVC for runtime needs */
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync bool m_fNeedMain;
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync /** @} */
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync};
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync#endif
0e1eea910a209a7a8edeed71c9be066a02f59202vboxsync