Changeset 66497 in vbox
- Timestamp:
- Apr 10, 2017 1:00:12 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 114495
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp
r66490 r66497 1207 1207 tr("Cannot save user interface settings."), 1208 1208 formatErrorInfo(comMachine)); 1209 } 1210 1211 void UIMessageCenter::cannotSaveNetworkSettings(const CMachine &comMachine, QWidget *pParent /* = 0 */) 1212 { 1213 error(pParent, MessageType_Error, 1214 tr("Cannot save network settings."), 1215 formatErrorInfo(comMachine)); 1216 } 1217 1218 void UIMessageCenter::cannotSaveNetworkAdapterSettings(const CNetworkAdapter &comAdapter, QWidget *pParent /* = 0 */) 1219 { 1220 error(pParent, MessageType_Error, 1221 tr("Cannot save network adapter settings."), 1222 formatErrorInfo(comAdapter)); 1209 1223 } 1210 1224 -
trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h
r66490 r66497 247 247 void cannotSaveStorageMediumSettings(const CMedium &comMedium, QWidget *pParent = 0); 248 248 void cannotSaveInterfaceSettings(const CMachine &comMachine, QWidget *pParent = 0); 249 void cannotSaveNetworkSettings(const CMachine &comMachine, QWidget *pParent = 0); 250 void cannotSaveNetworkAdapterSettings(const CNetworkAdapter &comAdapter, QWidget *pParent = 0); 249 251 void cannotAttachDevice(const CMachine &machine, UIMediumType type, const QString &strLocation, const StorageSlot &storageSlot, QWidget *pParent = 0); 250 252 bool warnAboutIncorrectPort(QWidget *pParent = 0) const; -
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp
r66460 r66497 27 27 # include "UIIconPool.h" 28 28 # include "UIMachineSettingsNetwork.h" 29 # include "UIMessageCenter.h" 29 30 # include "VBoxGlobal.h" 30 31 … … 1149 1150 UISettingsPageMachine::fetchData(data); 1150 1151 1151 /* Make sure machine is in valid mode & network data was changed: */ 1152 if (isMachineInValidMode() && m_pCache->wasChanged()) 1153 { 1154 /* For each adapter: */ 1155 for (int iSlot = 0; iSlot < m_pTabWidget->count(); ++iSlot) 1156 { 1157 /* Get old network data from the cache: */ 1158 const UIDataSettingsMachineNetworkAdapter &oldAdapterData = m_pCache->base().m_adapters.at(iSlot); 1159 /* Get new network data from the cache: */ 1160 const UIDataSettingsMachineNetworkAdapter &newAdapterData = m_pCache->data().m_adapters.at(iSlot); 1161 1162 /* Make sure adapter data was changed: */ 1163 if (newAdapterData != oldAdapterData) 1164 { 1165 /* Check if adapter still valid: */ 1166 CNetworkAdapter comAdapter = m_machine.GetNetworkAdapter(iSlot); 1167 if (!comAdapter.isNull()) 1168 { 1169 /* Store new adapter data: */ 1170 if (isMachineOffline()) 1171 { 1172 /* Whether the adapter is enabled: */ 1173 if ( comAdapter.isOk() 1174 && newAdapterData.m_fAdapterEnabled != oldAdapterData.m_fAdapterEnabled) 1175 comAdapter.SetEnabled(newAdapterData.m_fAdapterEnabled); 1176 /* Adapter type: */ 1177 if ( comAdapter.isOk() 1178 && newAdapterData.m_adapterType != oldAdapterData.m_adapterType) 1179 comAdapter.SetAdapterType(newAdapterData.m_adapterType); 1180 /* Adapter MAC address: */ 1181 if ( comAdapter.isOk() 1182 && newAdapterData.m_strMACAddress != oldAdapterData.m_strMACAddress) 1183 comAdapter.SetMACAddress(newAdapterData.m_strMACAddress); 1184 } 1185 if (isMachineInValidMode()) 1186 { 1187 /* Adapter attachment type: */ 1188 switch (newAdapterData.m_attachmentType) 1189 { 1190 case KNetworkAttachmentType_Bridged: 1191 { 1192 if ( comAdapter.isOk() 1193 && newAdapterData.m_strBridgedAdapterName != oldAdapterData.m_strBridgedAdapterName) 1194 comAdapter.SetBridgedInterface(newAdapterData.m_strBridgedAdapterName); 1195 break; 1196 } 1197 case KNetworkAttachmentType_Internal: 1198 { 1199 if ( comAdapter.isOk() 1200 && newAdapterData.m_strInternalNetworkName != oldAdapterData.m_strInternalNetworkName) 1201 comAdapter.SetInternalNetwork(newAdapterData.m_strInternalNetworkName); 1202 break; 1203 } 1204 case KNetworkAttachmentType_HostOnly: 1205 { 1206 if ( comAdapter.isOk() 1207 && newAdapterData.m_strHostInterfaceName != oldAdapterData.m_strHostInterfaceName) 1208 comAdapter.SetHostOnlyInterface(newAdapterData.m_strHostInterfaceName); 1209 break; 1210 } 1211 case KNetworkAttachmentType_Generic: 1212 { 1213 if ( comAdapter.isOk() 1214 && newAdapterData.m_strGenericDriverName != oldAdapterData.m_strGenericDriverName) 1215 comAdapter.SetGenericDriver(newAdapterData.m_strGenericDriverName); 1216 if ( comAdapter.isOk() 1217 && newAdapterData.m_strGenericProperties != oldAdapterData.m_strGenericProperties) 1218 saveGenericProperties(comAdapter, newAdapterData.m_strGenericProperties); 1219 break; 1220 } 1221 case KNetworkAttachmentType_NATNetwork: 1222 { 1223 if ( comAdapter.isOk() 1224 && newAdapterData.m_strNATNetworkName != oldAdapterData.m_strNATNetworkName) 1225 comAdapter.SetNATNetwork(newAdapterData.m_strNATNetworkName); 1226 break; 1227 } 1228 default: 1229 break; 1230 } 1231 if ( comAdapter.isOk() 1232 && newAdapterData.m_attachmentType != oldAdapterData.m_attachmentType) 1233 comAdapter.SetAttachmentType(newAdapterData.m_attachmentType); 1234 /* Adapter promiscuous mode: */ 1235 if ( comAdapter.isOk() 1236 && newAdapterData.m_promiscuousMode != oldAdapterData.m_promiscuousMode) 1237 comAdapter.SetPromiscModePolicy(newAdapterData.m_promiscuousMode); 1238 /* Whether the adapter cable connected: */ 1239 if ( comAdapter.isOk() 1240 && newAdapterData.m_fCableConnected != oldAdapterData.m_fCableConnected) 1241 comAdapter.SetCableConnected(newAdapterData.m_fCableConnected); 1242 /* Adapter redirect options: */ 1243 if ( comAdapter.isOk() 1244 && newAdapterData.m_redirects != oldAdapterData.m_redirects 1245 && ( oldAdapterData.m_attachmentType == KNetworkAttachmentType_NAT 1246 || newAdapterData.m_attachmentType == KNetworkAttachmentType_NAT)) 1247 { 1248 foreach (const QString &strOldRedirect, comAdapter.GetNATEngine().GetRedirects()) 1249 comAdapter.GetNATEngine().RemoveRedirect(strOldRedirect.section(',', 0, 0)); 1250 foreach (const UIPortForwardingData &newRedirect, newAdapterData.m_redirects) 1251 comAdapter.GetNATEngine().AddRedirect(newRedirect.name, newRedirect.protocol, 1252 newRedirect.hostIp, newRedirect.hostPort.value(), 1253 newRedirect.guestIp, newRedirect.guestPort.value()); 1254 } 1255 } 1256 } 1257 } 1258 } 1259 } 1152 /* Update network data and failing state: */ 1153 setFailed(!saveNetworkData()); 1260 1154 1261 1155 /* Upload machine to data: */ … … 1522 1416 1523 1417 /* static */ 1524 void UIMachineSettingsNetworkPage::saveGenericProperties(CNetworkAdapter &adapter, const QString &strProperties) 1525 { 1526 /* Parse new properties: */ 1527 const QStringList newProps = strProperties.split("\n"); 1528 QHash<QString, QString> hash; 1529 1530 /* Save new properties: */ 1531 for (int i = 0; i < newProps.size(); ++i) 1532 { 1533 const QString strLine = newProps[i]; 1534 const int iSplitPos = strLine.indexOf("="); 1535 if (iSplitPos) 1536 { 1537 const QString strKey = strLine.left(iSplitPos); 1538 const QString strVal = strLine.mid(iSplitPos + 1); 1539 adapter.SetProperty(strKey, strVal); 1418 bool UIMachineSettingsNetworkPage::saveGenericProperties(CNetworkAdapter &comAdapter, const QString &strProperties) 1419 { 1420 /* Prepare result: */ 1421 bool fSuccess = true; 1422 /* Save generic properties: */ 1423 if (fSuccess) 1424 { 1425 /* Acquire 'added' properties: */ 1426 const QStringList newProps = strProperties.split("\n"); 1427 1428 /* Insert 'added' properties: */ 1429 QHash<QString, QString> hash; 1430 for (int i = 0; fSuccess && i < newProps.size(); ++i) 1431 { 1432 /* Parse property line: */ 1433 const QString strLine = newProps.at(i); 1434 const QString strKey = strLine.section('=', 0, 0); 1435 const QString strVal = strLine.section('=', 1, -1); 1436 if (strKey.isEmpty() || strVal.isEmpty()) 1437 continue; 1438 /* Save property in the adapter and the hash: */ 1439 comAdapter.SetProperty(strKey, strVal); 1440 fSuccess = comAdapter.isOk(); 1540 1441 hash[strKey] = strVal; 1541 1442 } 1542 } 1543 1544 /* Removing deleted properties: */ 1545 QVector<QString> names; 1546 QVector<QString> props; 1547 props = adapter.GetProperties(QString(), names); 1548 for (int i = 0; i < names.size(); ++i) 1549 { 1550 const QString strName = names[i]; 1551 const QString strValue = props[i]; 1552 if (strValue != hash[strName]) 1553 adapter.SetProperty(strName, hash[strName]); 1554 } 1443 1444 /* Acquire actual properties ('added' and 'removed'): */ 1445 QVector<QString> names; 1446 QVector<QString> props; 1447 if (fSuccess) 1448 { 1449 props = comAdapter.GetProperties(QString(), names); 1450 fSuccess = comAdapter.isOk(); 1451 } 1452 1453 /* Exclude 'removed' properties: */ 1454 for (int i = 0; fSuccess && i < names.size(); ++i) 1455 { 1456 /* Get property name and value: */ 1457 const QString strKey = names.at(i); 1458 const QString strVal = props.at(i); 1459 if (strVal == hash.value(strKey)) 1460 continue; 1461 /* Remove property from the adapter: */ 1462 // Actually we are _replacing_ property value, 1463 // not _removing_ it at all, but we are replacing it 1464 // with default constructed value, which is QString(). 1465 comAdapter.SetProperty(strKey, hash.value(strKey)); 1466 fSuccess = comAdapter.isOk(); 1467 } 1468 } 1469 /* Return result: */ 1470 return fSuccess; 1471 } 1472 1473 bool UIMachineSettingsNetworkPage::saveNetworkData() 1474 { 1475 /* Prepare result: */ 1476 bool fSuccess = true; 1477 /* Save network settings from the cache: */ 1478 if (fSuccess && isMachineInValidMode() && m_pCache->wasChanged()) 1479 { 1480 /* For each adapter: */ 1481 for (int iSlot = 0; fSuccess && iSlot < m_pTabWidget->count(); ++iSlot) 1482 fSuccess = saveAdapterData(iSlot); 1483 } 1484 /* Return result: */ 1485 return fSuccess; 1486 } 1487 1488 bool UIMachineSettingsNetworkPage::saveAdapterData(int iSlot) 1489 { 1490 /* Prepare result: */ 1491 bool fSuccess = true; 1492 /* Save adapter settings from the cache: */ 1493 if (fSuccess) 1494 { 1495 /* Get old network data from the cache: */ 1496 const UIDataSettingsMachineNetworkAdapter &oldAdapterData = m_pCache->base().m_adapters.at(iSlot); 1497 /* Get new network data from the cache: */ 1498 const UIDataSettingsMachineNetworkAdapter &newAdapterData = m_pCache->data().m_adapters.at(iSlot); 1499 1500 /* Make sure adapter data was changed: */ 1501 if (newAdapterData != oldAdapterData) 1502 { 1503 /* Get audio adapter for further activities: */ 1504 CNetworkAdapter comAdapter = m_machine.GetNetworkAdapter(iSlot); 1505 fSuccess = m_machine.isOk() && comAdapter.isNotNull(); 1506 /* Show error message if necessary: */ 1507 if (!fSuccess) 1508 msgCenter().cannotSaveNetworkSettings(m_machine, this); 1509 1510 /* Save whether the adapter is enabled: */ 1511 if (fSuccess && isMachineOffline() && newAdapterData.m_fAdapterEnabled != oldAdapterData.m_fAdapterEnabled) 1512 { 1513 comAdapter.SetEnabled(newAdapterData.m_fAdapterEnabled); 1514 fSuccess = comAdapter.isOk(); 1515 } 1516 /* Save adapter type: */ 1517 if (fSuccess && isMachineOffline() && newAdapterData.m_adapterType != oldAdapterData.m_adapterType) 1518 { 1519 comAdapter.SetAdapterType(newAdapterData.m_adapterType); 1520 fSuccess = comAdapter.isOk(); 1521 } 1522 /* Save adapter MAC address: */ 1523 if (fSuccess && isMachineOffline() && newAdapterData.m_strMACAddress != oldAdapterData.m_strMACAddress) 1524 { 1525 comAdapter.SetMACAddress(newAdapterData.m_strMACAddress); 1526 fSuccess = comAdapter.isOk(); 1527 } 1528 /* Save adapter attachment type: */ 1529 switch (newAdapterData.m_attachmentType) 1530 { 1531 case KNetworkAttachmentType_Bridged: 1532 { 1533 if (fSuccess && newAdapterData.m_strBridgedAdapterName != oldAdapterData.m_strBridgedAdapterName) 1534 { 1535 comAdapter.SetBridgedInterface(newAdapterData.m_strBridgedAdapterName); 1536 fSuccess = comAdapter.isOk(); 1537 } 1538 break; 1539 } 1540 case KNetworkAttachmentType_Internal: 1541 { 1542 if (fSuccess && newAdapterData.m_strInternalNetworkName != oldAdapterData.m_strInternalNetworkName) 1543 { 1544 comAdapter.SetInternalNetwork(newAdapterData.m_strInternalNetworkName); 1545 fSuccess = comAdapter.isOk(); 1546 } 1547 break; 1548 } 1549 case KNetworkAttachmentType_HostOnly: 1550 { 1551 if (fSuccess && newAdapterData.m_strHostInterfaceName != oldAdapterData.m_strHostInterfaceName) 1552 { 1553 comAdapter.SetHostOnlyInterface(newAdapterData.m_strHostInterfaceName); 1554 fSuccess = comAdapter.isOk(); 1555 } 1556 break; 1557 } 1558 case KNetworkAttachmentType_Generic: 1559 { 1560 if (fSuccess && newAdapterData.m_strGenericDriverName != oldAdapterData.m_strGenericDriverName) 1561 { 1562 comAdapter.SetGenericDriver(newAdapterData.m_strGenericDriverName); 1563 fSuccess = comAdapter.isOk(); 1564 } 1565 if (fSuccess && newAdapterData.m_strGenericProperties != oldAdapterData.m_strGenericProperties) 1566 fSuccess = saveGenericProperties(comAdapter, newAdapterData.m_strGenericProperties); 1567 break; 1568 } 1569 case KNetworkAttachmentType_NATNetwork: 1570 { 1571 if (fSuccess && newAdapterData.m_strNATNetworkName != oldAdapterData.m_strNATNetworkName) 1572 { 1573 comAdapter.SetNATNetwork(newAdapterData.m_strNATNetworkName); 1574 fSuccess = comAdapter.isOk(); 1575 } 1576 break; 1577 } 1578 default: 1579 break; 1580 } 1581 if (fSuccess && newAdapterData.m_attachmentType != oldAdapterData.m_attachmentType) 1582 { 1583 comAdapter.SetAttachmentType(newAdapterData.m_attachmentType); 1584 fSuccess = comAdapter.isOk(); 1585 } 1586 /* Save adapter promiscuous mode: */ 1587 if (fSuccess && newAdapterData.m_promiscuousMode != oldAdapterData.m_promiscuousMode) 1588 { 1589 comAdapter.SetPromiscModePolicy(newAdapterData.m_promiscuousMode); 1590 fSuccess = comAdapter.isOk(); 1591 } 1592 /* Save whether the adapter cable connected: */ 1593 if (fSuccess && newAdapterData.m_fCableConnected != oldAdapterData.m_fCableConnected) 1594 { 1595 comAdapter.SetCableConnected(newAdapterData.m_fCableConnected); 1596 fSuccess = comAdapter.isOk(); 1597 } 1598 /* Save adapter redirect options: */ 1599 if ( fSuccess && newAdapterData.m_redirects != oldAdapterData.m_redirects 1600 && ( oldAdapterData.m_attachmentType == KNetworkAttachmentType_NAT 1601 || newAdapterData.m_attachmentType == KNetworkAttachmentType_NAT)) 1602 { 1603 foreach (const QString &strOldRedirect, comAdapter.GetNATEngine().GetRedirects()) 1604 comAdapter.GetNATEngine().RemoveRedirect(strOldRedirect.section(',', 0, 0)); 1605 foreach (const UIPortForwardingData &newRedirect, newAdapterData.m_redirects) 1606 comAdapter.GetNATEngine().AddRedirect(newRedirect.name, newRedirect.protocol, 1607 newRedirect.hostIp, newRedirect.hostPort.value(), 1608 newRedirect.guestIp, newRedirect.guestPort.value()); 1609 } 1610 /* Show error message if necessary: */ 1611 if (!fSuccess) 1612 msgCenter().cannotSaveNetworkAdapterSettings(comAdapter, this); 1613 } 1614 } 1615 /* Return result: */ 1616 return fSuccess; 1555 1617 } 1556 1618 -
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.h
r66359 r66497 114 114 static QString loadGenericProperties(const CNetworkAdapter &adapter); 115 115 /** Saves generic @a strProperties to passed @a adapter. */ 116 static void saveGenericProperties(CNetworkAdapter &adapter, const QString &strProperties); 116 static bool saveGenericProperties(CNetworkAdapter &comAdapter, const QString &strProperties); 117 118 /** Saves existing network data from the cache. */ 119 bool saveNetworkData(); 120 /** Saves existing adapter data from the cache. */ 121 bool saveAdapterData(int iSlot); 117 122 118 123 /** Holds the tab-widget instance. */
Note:
See TracChangeset
for help on using the changeset viewer.