Changeset 66566 in vbox
- Timestamp:
- Apr 13, 2017 4:44:34 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 114593
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp
r66552 r66566 58 58 /* COM includes: */ 59 59 # include "CAudioAdapter.h" 60 # include "CNATEngine.h" 60 61 # include "CParallelPort.h" 61 62 # include "CSerialPort.h" … … 1228 1229 tr("Cannot save network adapter settings."), 1229 1230 formatErrorInfo(comAdapter)); 1231 } 1232 1233 void UIMessageCenter::cannotSaveNATEngineSettings(const CNATEngine &comEngine, QWidget *pParent /* = 0 */) 1234 { 1235 error(pParent, MessageType_Error, 1236 tr("Cannot save NAT engine settings."), 1237 formatErrorInfo(comEngine)); 1230 1238 } 1231 1239 -
trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h
r66552 r66566 249 249 void cannotSaveNetworkSettings(const CMachine &comMachine, QWidget *pParent = 0); 250 250 void cannotSaveNetworkAdapterSettings(const CNetworkAdapter &comAdapter, QWidget *pParent = 0); 251 void cannotSaveNATEngineSettings(const CNATEngine &comEngine, QWidget *pParent = 0); 251 252 void cannotSaveParallelSettings(const CMachine &comMachine, QWidget *pParent = 0); 252 253 void cannotSaveParallelPortSettings(const CParallelPort &comPort, QWidget *pParent = 0); -
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp
r66562 r66566 74 74 , m_strMACAddress(QString()) 75 75 , m_fCableConnected(false) 76 , m_redirects(UIPortForwardingDataList())77 76 {} 78 77 … … 94 93 && (m_strMACAddress == other.m_strMACAddress) 95 94 && (m_fCableConnected == other.m_fCableConnected) 96 && (m_redirects == other.m_redirects)97 95 ; 98 96 } … … 129 127 /** Holds whether the network adapter is connected. */ 130 128 bool m_fCableConnected; 131 /** Holds the set of network redirection rules. */132 UIPortForwardingDataList m_redirects;133 129 }; 134 130 … … 159 155 160 156 /* Load / Save API: */ 161 void loadAdapterData(const UIDataSettingsMachineNetworkAdapter &adapterData);162 void saveAdapterData(UIDataSettingsMachineNetworkAdapter &adapterData);157 void getAdapterDataFromCache(const UISettingsCacheMachineNetworkAdapter &adapterCache); 158 void putAdapterDataToCache(UISettingsCacheMachineNetworkAdapter &adapterCache); 163 159 164 160 /** Performs validation, updates @a messages list if something is wrong. */ … … 274 270 } 275 271 276 void UIMachineSettingsNetwork::loadAdapterData(const UIDataSettingsMachineNetworkAdapter &adapterData) 277 { 272 void UIMachineSettingsNetwork::getAdapterDataFromCache(const UISettingsCacheMachineNetworkAdapter &adapterCache) 273 { 274 /* Get old adapter data: */ 275 const UIDataSettingsMachineNetworkAdapter &oldAdapterData = adapterCache.base(); 276 278 277 /* Load slot number: */ 279 m_iSlot = adapterData.m_iSlot;278 m_iSlot = oldAdapterData.m_iSlot; 280 279 281 280 /* Load adapter activity state: */ 282 m_pEnableAdapterCheckBox->setChecked( adapterData.m_fAdapterEnabled);281 m_pEnableAdapterCheckBox->setChecked(oldAdapterData.m_fAdapterEnabled); 283 282 /* Handle adapter activity change: */ 284 283 sltHandleAdapterActivityChange(); 285 284 286 285 /* Load attachment type: */ 287 m_pAttachmentTypeComboBox->setCurrentIndex(position(m_pAttachmentTypeComboBox, adapterData.m_attachmentType));286 m_pAttachmentTypeComboBox->setCurrentIndex(position(m_pAttachmentTypeComboBox, oldAdapterData.m_attachmentType)); 288 287 /* Load alternative name: */ 289 m_strBridgedAdapterName = wipedOutString( adapterData.m_strBridgedAdapterName);290 m_strInternalNetworkName = wipedOutString( adapterData.m_strInternalNetworkName);291 m_strHostInterfaceName = wipedOutString( adapterData.m_strHostInterfaceName);292 m_strGenericDriverName = wipedOutString( adapterData.m_strGenericDriverName);293 m_strNATNetworkName = wipedOutString( adapterData.m_strNATNetworkName);288 m_strBridgedAdapterName = wipedOutString(oldAdapterData.m_strBridgedAdapterName); 289 m_strInternalNetworkName = wipedOutString(oldAdapterData.m_strInternalNetworkName); 290 m_strHostInterfaceName = wipedOutString(oldAdapterData.m_strHostInterfaceName); 291 m_strGenericDriverName = wipedOutString(oldAdapterData.m_strGenericDriverName); 292 m_strNATNetworkName = wipedOutString(oldAdapterData.m_strNATNetworkName); 294 293 /* Handle attachment type change: */ 295 294 sltHandleAttachmentTypeChange(); 296 295 297 296 /* Load adapter type: */ 298 m_pAdapterTypeCombo->setCurrentIndex(position(m_pAdapterTypeCombo, adapterData.m_adapterType));297 m_pAdapterTypeCombo->setCurrentIndex(position(m_pAdapterTypeCombo, oldAdapterData.m_adapterType)); 299 298 300 299 /* Load promiscuous mode type: */ 301 m_pPromiscuousModeCombo->setCurrentIndex(position(m_pPromiscuousModeCombo, adapterData.m_promiscuousMode));300 m_pPromiscuousModeCombo->setCurrentIndex(position(m_pPromiscuousModeCombo, oldAdapterData.m_promiscuousMode)); 302 301 303 302 /* Other options: */ 304 m_pMACEditor->setText( adapterData.m_strMACAddress);305 m_pGenericPropertiesTextEdit->setText( adapterData.m_strGenericProperties);306 m_pCableConnectedCheckBox->setChecked( adapterData.m_fCableConnected);303 m_pMACEditor->setText(oldAdapterData.m_strMACAddress); 304 m_pGenericPropertiesTextEdit->setText(oldAdapterData.m_strGenericProperties); 305 m_pCableConnectedCheckBox->setChecked(oldAdapterData.m_fCableConnected); 307 306 308 307 /* Load port forwarding rules: */ 309 m_portForwardingRules = adapterData.m_redirects; 310 } 311 312 void UIMachineSettingsNetwork::saveAdapterData(UIDataSettingsMachineNetworkAdapter &adapterData) 313 { 308 m_portForwardingRules.clear(); 309 for (int i = 0; i < adapterCache.childCount(); ++i) 310 m_portForwardingRules << adapterCache.child(i).base(); 311 } 312 313 void UIMachineSettingsNetwork::putAdapterDataToCache(UISettingsCacheMachineNetworkAdapter &adapterCache) 314 { 315 /* Prepare new adapter data: */ 316 UIDataSettingsMachineNetworkAdapter newAdapterData; 317 314 318 /* Save adapter activity state: */ 315 adapterData.m_fAdapterEnabled = m_pEnableAdapterCheckBox->isChecked();319 newAdapterData.m_fAdapterEnabled = m_pEnableAdapterCheckBox->isChecked(); 316 320 317 321 /* Save attachment type & alternative name: */ 318 adapterData.m_attachmentType = attachmentType();319 switch ( adapterData.m_attachmentType)322 newAdapterData.m_attachmentType = attachmentType(); 323 switch (newAdapterData.m_attachmentType) 320 324 { 321 325 case KNetworkAttachmentType_Null: … … 324 328 break; 325 329 case KNetworkAttachmentType_Bridged: 326 adapterData.m_strBridgedAdapterName = alternativeName();330 newAdapterData.m_strBridgedAdapterName = alternativeName(); 327 331 break; 328 332 case KNetworkAttachmentType_Internal: 329 adapterData.m_strInternalNetworkName = alternativeName();333 newAdapterData.m_strInternalNetworkName = alternativeName(); 330 334 break; 331 335 case KNetworkAttachmentType_HostOnly: 332 adapterData.m_strHostInterfaceName = alternativeName();336 newAdapterData.m_strHostInterfaceName = alternativeName(); 333 337 break; 334 338 case KNetworkAttachmentType_Generic: 335 adapterData.m_strGenericDriverName = alternativeName();336 adapterData.m_strGenericProperties = m_pGenericPropertiesTextEdit->toPlainText();339 newAdapterData.m_strGenericDriverName = alternativeName(); 340 newAdapterData.m_strGenericProperties = m_pGenericPropertiesTextEdit->toPlainText(); 337 341 break; 338 342 case KNetworkAttachmentType_NATNetwork: 339 adapterData.m_strNATNetworkName = alternativeName();343 newAdapterData.m_strNATNetworkName = alternativeName(); 340 344 break; 341 345 default: … … 344 348 345 349 /* Save adapter type: */ 346 adapterData.m_adapterType = (KNetworkAdapterType)m_pAdapterTypeCombo->itemData(m_pAdapterTypeCombo->currentIndex()).toInt();350 newAdapterData.m_adapterType = (KNetworkAdapterType)m_pAdapterTypeCombo->itemData(m_pAdapterTypeCombo->currentIndex()).toInt(); 347 351 348 352 /* Save promiscuous mode type: */ 349 adapterData.m_promiscuousMode = (KNetworkAdapterPromiscModePolicy)m_pPromiscuousModeCombo->itemData(m_pPromiscuousModeCombo->currentIndex()).toInt();353 newAdapterData.m_promiscuousMode = (KNetworkAdapterPromiscModePolicy)m_pPromiscuousModeCombo->itemData(m_pPromiscuousModeCombo->currentIndex()).toInt(); 350 354 351 355 /* Other options: */ 352 adapterData.m_strMACAddress = m_pMACEditor->text().isEmpty() ? QString() : m_pMACEditor->text();353 adapterData.m_fCableConnected = m_pCableConnectedCheckBox->isChecked();356 newAdapterData.m_strMACAddress = m_pMACEditor->text().isEmpty() ? QString() : m_pMACEditor->text(); 357 newAdapterData.m_fCableConnected = m_pCableConnectedCheckBox->isChecked(); 354 358 355 359 /* Save port forwarding rules: */ 356 adapterData.m_redirects = m_portForwardingRules; 360 foreach (const UIDataPortForwardingRule &rule, m_portForwardingRules) 361 adapterCache.child(rule.name).cacheCurrentData(rule); 362 363 /* Cache new adapter data: */ 364 adapterCache.cacheCurrentData(newAdapterData); 357 365 } 358 366 … … 605 613 m_pGenericPropertiesTextEdit->setVisible(attachmentType() == KNetworkAttachmentType_Generic && 606 614 m_pAdvancedArrow->isExpanded()); 607 /* Update forwarding -rules button availability: */615 /* Update forwarding rules button availability: */ 608 616 m_pPortForwardingButton->setEnabled(attachmentType() == KNetworkAttachmentType_NAT); 609 617 /* Update alternative-name combo-box whats-this and editable state: */ … … 1054 1062 oldAdapterData.m_strGenericProperties = loadGenericProperties(comAdapter); 1055 1063 oldAdapterData.m_fCableConnected = comAdapter.GetCableConnected(); 1056 foreach (const QString &redirect, comAdapter.GetNATEngine().GetRedirects()) 1057 { 1058 const QStringList redirectData = redirect.split(','); 1059 AssertMsg(redirectData.size() == 6, ("Redirect rule should be composed of 6 parts!\n")); 1060 oldAdapterData.m_redirects << UIDataPortForwardingRule(redirectData.at(0), 1061 (KNATProtocol)redirectData.at(1).toUInt(), 1062 redirectData.at(2), 1063 redirectData.at(3).toUInt(), 1064 redirectData.at(4), 1065 redirectData.at(5).toUInt()); 1064 foreach (const QString &strRedirect, comAdapter.GetNATEngine().GetRedirects()) 1065 { 1066 /* Gather old forwarding data & cache key: */ 1067 const QStringList &forwardingData = strRedirect.split(','); 1068 AssertMsg(forwardingData.size() == 6, ("Redirect rule should be composed of 6 parts!\n")); 1069 const UIDataPortForwardingRule oldForwardingData(forwardingData.at(0), 1070 (KNATProtocol)forwardingData.at(1).toUInt(), 1071 forwardingData.at(2), 1072 forwardingData.at(3).toUInt(), 1073 forwardingData.at(4), 1074 forwardingData.at(5).toUInt()); 1075 1076 const QString &strForwardingKey = forwardingData.at(0); 1077 /* Cache old forwarding data: */ 1078 m_pCache->child(iSlot).child(strForwardingKey).cacheInitialData(oldForwardingData); 1066 1079 } 1067 1080 } … … 1092 1105 1093 1106 /* Load old adapter data from the cache: */ 1094 pTab-> loadAdapterData(m_pCache->child(iSlot).base());1107 pTab->getAdapterDataFromCache(m_pCache->child(iSlot)); 1095 1108 1096 1109 /* Setup tab order: */ … … 1119 1132 UIMachineSettingsNetwork *pTab = qobject_cast<UIMachineSettingsNetwork*>(m_pTabWidget->widget(iSlot)); 1120 1133 1121 /* Prepare new adapter data: */1122 UIDataSettingsMachineNetworkAdapter newAdapterData;1123 1124 1134 /* Gather new adapter data: */ 1125 pTab->saveAdapterData(newAdapterData); 1126 1127 /* Cache new adapter data: */ 1128 m_pCache->child(iSlot).cacheCurrentData(newAdapterData); 1135 pTab->putAdapterDataToCache(m_pCache->child(iSlot)); 1129 1136 } 1130 1137 … … 1583 1590 fSuccess = comAdapter.isOk(); 1584 1591 } 1585 /* Save adapter redirect options: */ 1586 if ( fSuccess && newAdapterData.m_redirects != oldAdapterData.m_redirects 1587 && ( oldAdapterData.m_attachmentType == KNetworkAttachmentType_NAT 1588 || newAdapterData.m_attachmentType == KNetworkAttachmentType_NAT)) 1589 { 1590 foreach (const QString &strOldRedirect, comAdapter.GetNATEngine().GetRedirects()) 1591 comAdapter.GetNATEngine().RemoveRedirect(strOldRedirect.section(',', 0, 0)); 1592 foreach (const UIDataPortForwardingRule &newRedirect, newAdapterData.m_redirects) 1593 comAdapter.GetNATEngine().AddRedirect(newRedirect.name, newRedirect.protocol, 1594 newRedirect.hostIp, newRedirect.hostPort.value(), 1595 newRedirect.guestIp, newRedirect.guestPort.value()); 1592 1593 /* Get NAT engine for further activities: */ 1594 CNATEngine comEngine; 1595 if (fSuccess) 1596 { 1597 comEngine = comAdapter.GetNATEngine(); 1598 fSuccess = comAdapter.isOk() && comEngine.isNotNull(); 1596 1599 } 1597 1600 … … 1599 1602 if (!fSuccess) 1600 1603 msgCenter().cannotSaveNetworkAdapterSettings(comAdapter, this); 1604 else 1605 { 1606 /* Save adapter port forwarding rules: */ 1607 if ( oldAdapterData.m_attachmentType == KNetworkAttachmentType_NAT 1608 || newAdapterData.m_attachmentType == KNetworkAttachmentType_NAT) 1609 { 1610 /* For each rule: */ 1611 for (int iRule = 0; fSuccess && iRule < m_pCache->child(iSlot).childCount(); ++iRule) 1612 { 1613 /* Get rule cache: */ 1614 const UISettingsCachePortForwardingRule &ruleCache = m_pCache->child(iSlot).child(iRule); 1615 1616 /* Remove rule marked for 'remove' or 'update': */ 1617 if (fSuccess && (ruleCache.wasRemoved() || ruleCache.wasUpdated())) 1618 { 1619 comEngine.RemoveRedirect(ruleCache.base().name); 1620 fSuccess = comEngine.isOk(); 1621 } 1622 1623 /* Create rule marked for 'create' or 'update': */ 1624 if (fSuccess && (ruleCache.wasCreated() || ruleCache.wasUpdated())) 1625 { 1626 comEngine.AddRedirect(ruleCache.data().name, ruleCache.data().protocol, 1627 ruleCache.data().hostIp, ruleCache.data().hostPort.value(), 1628 ruleCache.data().guestIp, ruleCache.data().guestPort.value()); 1629 fSuccess = comEngine.isOk(); 1630 } 1631 1632 /* Show error message if necessary: */ 1633 if (!fSuccess) 1634 msgCenter().cannotSaveNATEngineSettings(comEngine, this); 1635 } 1636 } 1637 } 1601 1638 } 1602 1639 } -
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.h
r66559 r66566 28 28 struct UIDataSettingsMachineNetwork; 29 29 struct UIDataSettingsMachineNetworkAdapter; 30 typedef UISettingsCache<UIDataSettingsMachineNetworkAdapter> UISettingsCacheMachineNetworkAdapter; 30 typedef UISettingsCache<UIDataPortForwardingRule> UISettingsCachePortForwardingRule; 31 typedef UISettingsCachePool<UIDataSettingsMachineNetworkAdapter, UISettingsCachePortForwardingRule> UISettingsCacheMachineNetworkAdapter; 31 32 typedef UISettingsCachePool<UIDataSettingsMachineNetwork, UISettingsCacheMachineNetworkAdapter> UISettingsCacheMachineNetwork; 32 33
Note:
See TracChangeset
for help on using the changeset viewer.