VirtualBox

source: vbox/trunk/src/VBox/NetworkServices/NetLib/utils.h@ 49819

Last change on this file since 49819 was 49819, checked in by vboxsync, 11 years ago

extracts Main-helper functions and listener declaration for sharing between network services.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.7 KB
Line 
1/* $Id: utils.h 49819 2013-12-09 06:22:16Z vboxsync $ */
2/** @file
3 * ComHostUtils.cpp
4 */
5
6/*
7 * Copyright (C) 2013 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18/*******************************************************************************
19* Header Files *
20*******************************************************************************/
21#ifndef _NETLIB_UTILS_H_
22#define _NETLIB_UTILS_H_
23
24#include "cpp/utils.h"
25
26typedef ComPtr<IVirtualBox> ComVirtualBoxPtr;
27typedef ComPtr<IDHCPServer> ComDhcpServerPtr;
28typedef ComPtr<IHost> ComHostPtr;
29typedef ComPtr<INATNetwork> ComNatPtr;
30typedef com::SafeArray<BSTR> ComBstrArray;
31
32typedef std::vector<RTNETADDRIPV4> AddressList;
33typedef std::map<RTNETADDRIPV4, int> AddressToOffsetMapping;
34
35
36inline bool isDhcpRequired(const ComNatPtr& nat)
37{
38 BOOL fNeedDhcpServer = false;
39 if (FAILED(nat->COMGETTER(NeedDhcpServer)(&fNeedDhcpServer)))
40 return false;
41
42 return fNeedDhcpServer;
43}
44
45
46inline int findDhcpServer(const ComVirtualBoxPtr& vbox, const std::string& name, ComDhcpServerPtr& dhcp)
47{
48 HRESULT hrc = vbox->FindDHCPServerByNetworkName(com::Bstr(name.c_str()).raw(),
49 dhcp.asOutParam());
50 AssertComRCReturn(hrc, VERR_NOT_FOUND);
51
52 return VINF_SUCCESS;
53}
54
55
56inline int findNatNetwork(const ComVirtualBoxPtr& vbox, const std::string& name, ComNatPtr& nat)
57{
58 HRESULT hrc = vbox->FindNATNetworkByName(com::Bstr(name.c_str()).raw(),
59 nat.asOutParam());
60
61 AssertComRCReturn(hrc, VERR_NOT_FOUND);
62
63 return VINF_SUCCESS;
64}
65
66
67inline RTNETADDRIPV4 networkid(const RTNETADDRIPV4& addr, const RTNETADDRIPV4& netmask)
68{
69 RTNETADDRIPV4 netid;
70 netid.u = addr.u & netmask.u;
71 return netid;
72}
73
74
75int localMappings(const ComNatPtr&, AddressToOffsetMapping&);
76int hostDnsServers(const ComHostPtr&, const RTNETADDRIPV4&,/* const */ AddressToOffsetMapping&, AddressList&);
77int hostDnsSearchList(const ComHostPtr&, std::vector<std::string>&);
78int hostDnsDomain(const ComHostPtr&, std::string& domainStr);
79
80
81class NATNetworkEventAdapter
82{
83 public:
84 virtual HRESULT HandleEvent(VBoxEventType_T aEventType, IEvent *pEvent) = 0;
85};
86
87
88class NATNetworkListener
89{
90 public:
91 NATNetworkListener():m_pNAT(NULL){}
92
93 HRESULT init(NATNetworkEventAdapter *pNAT)
94 {
95 AssertPtrReturn(pNAT, E_INVALIDARG);
96
97 m_pNAT = pNAT;
98 return S_OK;
99 }
100
101 HRESULT init()
102 {
103 m_pNAT = NULL;
104 return S_OK;
105 }
106
107 void uninit() { m_pNAT = NULL; }
108
109 HRESULT HandleEvent(VBoxEventType_T aEventType, IEvent *pEvent)
110 {
111 if (m_pNAT)
112 return m_pNAT->HandleEvent(aEventType, pEvent);
113 else
114 return E_FAIL;
115 }
116
117 private:
118 NATNetworkEventAdapter *m_pNAT;
119};
120typedef ListenerImpl<NATNetworkListener, NATNetworkEventAdapter*> NATNetworkListenerImpl;
121
122# if VBOX_WITH_XPCOM
123class NS_CLASSINFO_NAME(NATNetworkListenerImpl);
124# endif
125
126typedef ComPtr<NATNetworkListenerImpl> ComNatListenerPtr;
127typedef com::SafeArray<VBoxEventType_T> ComEventTypeArray;
128
129int createNatListener(ComNatListenerPtr& listener, const ComVirtualBoxPtr& vboxptr,
130 NATNetworkEventAdapter *adapter, const ComEventTypeArray& events);
131#endif
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