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); } }
void UIHostNetworkManagerWidget::sltHandleItemChange(QTreeWidgetItem *pItem) { /* Get network item: */ UIItemHostNetwork *pChangedItem = static_cast<UIItemHostNetwork*>(pItem); AssertMsgReturnVoid(pChangedItem, ("Changed item must not be null!\n")); /* Get item data: */ UIDataHostNetwork oldData = *pChangedItem; /* Make sure dhcp server status changed: */ if ( ( oldData.m_dhcpserver.m_fEnabled && pChangedItem->checkState(Column_DHCP) == Qt::Checked) || ( !oldData.m_dhcpserver.m_fEnabled && pChangedItem->checkState(Column_DHCP) == Qt::Unchecked)) return; /* Get host for further activities: */ CHost comHost = vboxGlobal().host(); /* Find corresponding interface: */ CHostNetworkInterface comInterface = comHost.FindHostNetworkInterfaceByName(oldData.m_interface.m_strName); /* Show error message if necessary: */ if (!comHost.isOk() || comInterface.isNull()) msgCenter().cannotFindHostNetworkInterface(comHost, oldData.m_interface.m_strName, this); else { /* Get network name for further activities: */ const QString strNetworkName = comInterface.GetNetworkName(); /* Show error message if necessary: */ if (!comInterface.isOk()) msgCenter().cannotAcquireHostNetworkInterfaceParameter(comInterface, this); else { /* 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 { /* Save whether DHCP server is enabled: */ if (comServer.isOk()) comServer.SetEnabled(!oldData.m_dhcpserver.m_fEnabled); /* Save default DHCP server configuration if current is invalid: */ if ( comServer.isOk() && !oldData.m_dhcpserver.m_fEnabled && ( oldData.m_dhcpserver.m_strAddress == "0.0.0.0" || oldData.m_dhcpserver.m_strMask == "0.0.0.0" || oldData.m_dhcpserver.m_strLowerAddress == "0.0.0.0" || oldData.m_dhcpserver.m_strUpperAddress == "0.0.0.0")) { const QStringList &proposal = makeDhcpServerProposal(oldData.m_interface.m_strAddress, oldData.m_interface.m_strMask); comServer.SetConfiguration(proposal.at(0), proposal.at(1), proposal.at(2), proposal.at(3)); } /* Show error message if necessary: */ if (!comServer.isOk()) msgCenter().cannotSaveDHCPServerParameter(comServer, this); { /* Update interface in the tree: */ UIDataHostNetwork data; loadHostNetwork(comInterface, data); updateItemForNetworkHost(data, true, pChangedItem); /* Make sure current item fetched: */ sltHandleCurrentItemChange(); /* Adjust tree-widget: */ sltAdjustTreeWidget(); } } } } }
void UIHostNetworkManagerWidget::sltApplyHostNetworkDetailsChanges() { /* Get network item: */ UIItemHostNetwork *pItem = static_cast<UIItemHostNetwork*>(m_pTreeWidget->currentItem()); AssertMsgReturnVoid(pItem, ("Current item must not be null!\n")); /* Get item data: */ UIDataHostNetwork oldData = *pItem; UIDataHostNetwork newData = m_pDetailsWidget->data(); /* Get host for further activities: */ CHost comHost = vboxGlobal().host(); /* Find corresponding interface: */ CHostNetworkInterface comInterface = comHost.FindHostNetworkInterfaceByName(oldData.m_interface.m_strName); /* Show error message if necessary: */ if (!comHost.isOk() || comInterface.isNull()) msgCenter().cannotFindHostNetworkInterface(comHost, oldData.m_interface.m_strName, this); else { /* Save automatic interface configuration: */ if (newData.m_interface.m_fDHCPEnabled) { if ( comInterface.isOk() && !oldData.m_interface.m_fDHCPEnabled) comInterface.EnableDynamicIPConfig(); } /* Save manual interface configuration: */ else { /* Save IPv4 interface configuration: */ if ( comInterface.isOk() && ( oldData.m_interface.m_fDHCPEnabled || newData.m_interface.m_strAddress != oldData.m_interface.m_strAddress || newData.m_interface.m_strMask != oldData.m_interface.m_strMask)) comInterface.EnableStaticIPConfig(newData.m_interface.m_strAddress, newData.m_interface.m_strMask); /* Save IPv6 interface configuration: */ if ( comInterface.isOk() && newData.m_interface.m_fSupportedIPv6 && ( oldData.m_interface.m_fDHCPEnabled || newData.m_interface.m_strAddress6 != oldData.m_interface.m_strAddress6 || newData.m_interface.m_strPrefixLength6 != oldData.m_interface.m_strPrefixLength6)) comInterface.EnableStaticIPConfigV6(newData.m_interface.m_strAddress6, newData.m_interface.m_strPrefixLength6.toULong()); } /* Show error message if necessary: */ if (!comInterface.isOk()) msgCenter().cannotSaveHostNetworkInterfaceParameter(comInterface, this); else { /* Get network name for further activities: */ const QString strNetworkName = comInterface.GetNetworkName(); /* Show error message if necessary: */ if (!comInterface.isOk()) msgCenter().cannotAcquireHostNetworkInterfaceParameter(comInterface, this); else { /* 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 { /* Save whether DHCP server is enabled: */ if ( comServer.isOk() && newData.m_dhcpserver.m_fEnabled != oldData.m_dhcpserver.m_fEnabled) comServer.SetEnabled(newData.m_dhcpserver.m_fEnabled); /* Save DHCP server configuration: */ if ( comServer.isOk() && newData.m_dhcpserver.m_fEnabled && ( newData.m_dhcpserver.m_strAddress != oldData.m_dhcpserver.m_strAddress || newData.m_dhcpserver.m_strMask != oldData.m_dhcpserver.m_strMask || newData.m_dhcpserver.m_strLowerAddress != oldData.m_dhcpserver.m_strLowerAddress || newData.m_dhcpserver.m_strUpperAddress != oldData.m_dhcpserver.m_strUpperAddress)) comServer.SetConfiguration(newData.m_dhcpserver.m_strAddress, newData.m_dhcpserver.m_strMask, newData.m_dhcpserver.m_strLowerAddress, newData.m_dhcpserver.m_strUpperAddress); /* Show error message if necessary: */ if (!comServer.isOk()) msgCenter().cannotSaveDHCPServerParameter(comServer, this); } } } /* Find corresponding interface again (if necessary): */ if (!comInterface.isOk()) { comInterface = comHost.FindHostNetworkInterfaceByName(oldData.m_interface.m_strName); /* Show error message if necessary: */ if (!comHost.isOk() || comInterface.isNull()) msgCenter().cannotFindHostNetworkInterface(comHost, oldData.m_interface.m_strName, this); } /* If interface is Ok now: */ if (comInterface.isNotNull() && comInterface.isOk()) { /* Update interface in the tree: */ UIDataHostNetwork data; loadHostNetwork(comInterface, data); updateItemForNetworkHost(data, true, pItem); /* Make sure current item fetched: */ sltHandleCurrentItemChange(); /* Adjust tree-widget: */ sltAdjustTreeWidget(); } } }