VirtualBox

Changeset 66497 in vbox


Ignore:
Timestamp:
Apr 10, 2017 1:00:12 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
114495
Message:

FE/Qt: Machine settings: Network page: Error handling (settings save).

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  
    12071207          tr("Cannot save user interface settings."),
    12081208          formatErrorInfo(comMachine));
     1209}
     1210
     1211void 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
     1218void UIMessageCenter::cannotSaveNetworkAdapterSettings(const CNetworkAdapter &comAdapter, QWidget *pParent /* = 0 */)
     1219{
     1220    error(pParent, MessageType_Error,
     1221          tr("Cannot save network adapter settings."),
     1222          formatErrorInfo(comAdapter));
    12091223}
    12101224
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h

    r66490 r66497  
    247247    void cannotSaveStorageMediumSettings(const CMedium &comMedium, QWidget *pParent = 0);
    248248    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);
    249251    void cannotAttachDevice(const CMachine &machine, UIMediumType type, const QString &strLocation, const StorageSlot &storageSlot, QWidget *pParent = 0);
    250252    bool warnAboutIncorrectPort(QWidget *pParent = 0) const;
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp

    r66460 r66497  
    2727# include "UIIconPool.h"
    2828# include "UIMachineSettingsNetwork.h"
     29# include "UIMessageCenter.h"
    2930# include "VBoxGlobal.h"
    3031
     
    11491150    UISettingsPageMachine::fetchData(data);
    11501151
    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());
    12601154
    12611155    /* Upload machine to data: */
     
    15221416
    15231417/* 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);
     1418bool 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();
    15401441            hash[strKey] = strVal;
    15411442        }
    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
     1473bool 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
     1488bool 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;
    15551617}
    15561618
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.h

    r66359 r66497  
    114114    static QString loadGenericProperties(const CNetworkAdapter &adapter);
    115115    /** 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);
    117122
    118123    /** Holds the tab-widget instance. */
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette