void UIGlobalSettingsNetwork::appendCacheItem(const CHostNetworkInterface &iface) { /* Get DHCP server (create if necessary): */ CDHCPServer dhcp = vboxGlobal().virtualBox().FindDHCPServerByNetworkName(iface.GetNetworkName()); if (dhcp.isNull()) { vboxGlobal().virtualBox().CreateDHCPServer(iface.GetNetworkName()); dhcp = vboxGlobal().virtualBox().FindDHCPServerByNetworkName(iface.GetNetworkName()); } AssertMsg(!dhcp.isNull(), ("DHCP server creation failed!\n")); /* Prepare cache item: */ UIHostNetworkData data; /* Host-only interface settings */ data.m_interface.m_strName = iface.GetName(); data.m_interface.m_fDhcpClientEnabled = iface.GetDHCPEnabled(); data.m_interface.m_strInterfaceAddress = iface.GetIPAddress(); data.m_interface.m_strInterfaceMask = iface.GetNetworkMask(); data.m_interface.m_fIpv6Supported = iface.GetIPV6Supported(); data.m_interface.m_strInterfaceAddress6 = iface.GetIPV6Address(); data.m_interface.m_strInterfaceMaskLength6 = QString::number(iface.GetIPV6NetworkMaskPrefixLength()); /* DHCP server settings: */ data.m_dhcpserver.m_fDhcpServerEnabled = dhcp.GetEnabled(); data.m_dhcpserver.m_strDhcpServerAddress = dhcp.GetIPAddress(); data.m_dhcpserver.m_strDhcpServerMask = dhcp.GetNetworkMask(); data.m_dhcpserver.m_strDhcpLowerAddress = dhcp.GetLowerIP(); data.m_dhcpserver.m_strDhcpUpperAddress = dhcp.GetUpperIP(); /* Append cache item: */ m_cache.m_items << data; }
void UIHostNetworkManagerWidget::loadHostNetwork(const CHostNetworkInterface &comInterface, UIDataHostNetwork &data) { /* Gather interface settings: */ if (comInterface.isOk()) data.m_interface.m_strName = comInterface.GetName(); if (comInterface.isOk()) data.m_interface.m_fDHCPEnabled = comInterface.GetDHCPEnabled(); if (comInterface.isOk()) data.m_interface.m_strAddress = comInterface.GetIPAddress(); if (comInterface.isOk()) data.m_interface.m_strMask = comInterface.GetNetworkMask(); if (comInterface.isOk()) data.m_interface.m_fSupportedIPv6 = comInterface.GetIPV6Supported(); if (comInterface.isOk()) data.m_interface.m_strAddress6 = comInterface.GetIPV6Address(); if (comInterface.isOk()) data.m_interface.m_strPrefixLength6 = QString::number(comInterface.GetIPV6NetworkMaskPrefixLength()); /* Get host interface network name for further activities: */ QString strNetworkName; if (comInterface.isOk()) strNetworkName = comInterface.GetNetworkName(); /* Show error message if necessary: */ if (!comInterface.isOk()) msgCenter().cannotAcquireHostNetworkInterfaceParameter(comInterface, this); /* Get VBox for further activities: */ CVirtualBox comVBox = vboxGlobal().virtualBox(); /* Find corresponding DHCP server (create if necessary): */ CDHCPServer comServer = comVBox.FindDHCPServerByNetworkName(strNetworkName); if (!comVBox.isOk() || comServer.isNull()) comServer = comVBox.CreateDHCPServer(strNetworkName); /* Show error message if necessary: */ if (!comVBox.isOk() || comServer.isNull()) msgCenter().cannotCreateDHCPServer(comVBox, strNetworkName, this); else { /* Gather DHCP server settings: */ if (comServer.isOk()) data.m_dhcpserver.m_fEnabled = comServer.GetEnabled(); if (comServer.isOk()) data.m_dhcpserver.m_strAddress = comServer.GetIPAddress(); if (comServer.isOk()) data.m_dhcpserver.m_strMask = comServer.GetNetworkMask(); if (comServer.isOk()) data.m_dhcpserver.m_strLowerAddress = comServer.GetLowerIP(); if (comServer.isOk()) data.m_dhcpserver.m_strUpperAddress = comServer.GetUpperIP(); /* Show error message if necessary: */ if (!comServer.isOk()) return msgCenter().cannotAcquireDHCPServerParameter(comServer, this); } }
/* Save data from cache to corresponding external object(s), * this task COULD be performed in other than GUI thread: */ void UIGlobalSettingsNetwork::saveFromCacheTo(QVariant &data) { /* Ensure settings were changed: */ if (!m_fChanged) return; /* Fetch data to properties & settings: */ UISettingsPageGlobal::fetchData(data); /* Prepare useful variables: */ CVirtualBox vbox = vboxGlobal().virtualBox(); CHost host = vboxGlobal().host(); /* Update all the host-only interfaces: */ for (int iNetworkIndex = 0; iNetworkIndex < m_cache.m_items.size(); ++iNetworkIndex) { /* Get iterated data: */ const UIHostNetworkData &data = m_cache.m_items[iNetworkIndex]; /* Find corresponding interface: */ CHostNetworkInterface iface = host.FindHostNetworkInterfaceByName(data.m_interface.m_strName); if (!iface.isNull()) { /* Host-only interface configuring: */ if (data.m_interface.m_fDhcpClientEnabled) { iface.EnableDynamicIPConfig(); } else { AssertMsg(data.m_interface.m_strInterfaceAddress.isEmpty() || QHostAddress(data.m_interface.m_strInterfaceAddress).protocol() == QAbstractSocket::IPv4Protocol, ("Interface IPv4 address must be empty or IPv4-valid!\n")); AssertMsg(data.m_interface.m_strInterfaceMask.isEmpty() || QHostAddress(data.m_interface.m_strInterfaceMask).protocol() == QAbstractSocket::IPv4Protocol, ("Interface IPv4 network mask must be empty or IPv4-valid!\n")); iface.EnableStaticIPConfig(data.m_interface.m_strInterfaceAddress, data.m_interface.m_strInterfaceMask); if (iface.GetIPV6Supported()) { AssertMsg(data.m_interface.m_strInterfaceAddress6.isEmpty() || QHostAddress(data.m_interface.m_strInterfaceAddress6).protocol() == QAbstractSocket::IPv6Protocol, ("Interface IPv6 address must be empty or IPv6-valid!\n")); iface.EnableStaticIPConfigV6(data.m_interface.m_strInterfaceAddress6, data.m_interface.m_strInterfaceMaskLength6.toULong()); } } /* Find corresponding DHCP server: */ CDHCPServer dhcp = vbox.FindDHCPServerByNetworkName(iface.GetNetworkName()); if (!dhcp.isNull()) { /* DHCP server configuring: */ dhcp.SetEnabled(data.m_dhcpserver.m_fDhcpServerEnabled); AssertMsg(QHostAddress(data.m_dhcpserver.m_strDhcpServerAddress).protocol() == QAbstractSocket::IPv4Protocol, ("DHCP server IPv4 address must be IPv4-valid!\n")); AssertMsg(QHostAddress(data.m_dhcpserver.m_strDhcpServerMask).protocol() == QAbstractSocket::IPv4Protocol, ("DHCP server IPv4 network mask must be IPv4-valid!\n")); AssertMsg(QHostAddress(data.m_dhcpserver.m_strDhcpLowerAddress).protocol() == QAbstractSocket::IPv4Protocol, ("DHCP server IPv4 lower bound must be IPv4-valid!\n")); AssertMsg(QHostAddress(data.m_dhcpserver.m_strDhcpUpperAddress).protocol() == QAbstractSocket::IPv4Protocol, ("DHCP server IPv4 upper bound must be IPv4-valid!\n")); if (QHostAddress(data.m_dhcpserver.m_strDhcpServerAddress).protocol() == QAbstractSocket::IPv4Protocol && QHostAddress(data.m_dhcpserver.m_strDhcpServerMask).protocol() == QAbstractSocket::IPv4Protocol && QHostAddress(data.m_dhcpserver.m_strDhcpLowerAddress).protocol() == QAbstractSocket::IPv4Protocol && QHostAddress(data.m_dhcpserver.m_strDhcpUpperAddress).protocol() == QAbstractSocket::IPv4Protocol) dhcp.SetConfiguration(data.m_dhcpserver.m_strDhcpServerAddress, data.m_dhcpserver.m_strDhcpServerMask, data.m_dhcpserver.m_strDhcpLowerAddress, data.m_dhcpserver.m_strDhcpUpperAddress); } } } /* Upload properties & settings to data: */ UISettingsPageGlobal::uploadData(data); }