VirtualBox

Changeset 66440 in vbox


Ignore:
Timestamp:
Apr 5, 2017 2:00:35 PM (8 years ago)
Author:
vboxsync
Message:

FE/Qt: Machine settings: Network page: Proper loading, caching, saving (2nd iteration, s.a. r114300).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp

    r66375 r66440  
    10381038    refreshNATNetworkList();
    10391039
    1040     /* Prepare initial data: */
    1041     UIDataSettingsMachineNetwork initialData;
     1040    /* Prepare old network data: */
     1041    UIDataSettingsMachineNetwork oldNetworkData;
    10421042
    10431043    /* For each network adapter: */
    10441044    for (int iSlot = 0; iSlot < m_pTabWidget->count(); ++iSlot)
    10451045    {
    1046         /* Prepare initial adapter data: */
    1047         UIDataSettingsMachineNetworkAdapter initialAdapterData;
    1048 
    1049         /* Check if adapter is valid: */
    1050         const CNetworkAdapter &adapter = m_machine.GetNetworkAdapter(iSlot);
    1051         if (!adapter.isNull())
    1052         {
    1053             /* Gather main options: */
    1054             initialAdapterData.m_iSlot = iSlot;
    1055             initialAdapterData.m_fAdapterEnabled = adapter.GetEnabled();
    1056             initialAdapterData.m_attachmentType = adapter.GetAttachmentType();
    1057             initialAdapterData.m_strBridgedAdapterName = wipedOutString(adapter.GetBridgedInterface());
    1058             initialAdapterData.m_strInternalNetworkName = wipedOutString(adapter.GetInternalNetwork());
    1059             initialAdapterData.m_strHostInterfaceName = wipedOutString(adapter.GetHostOnlyInterface());
    1060             initialAdapterData.m_strGenericDriverName = wipedOutString(adapter.GetGenericDriver());
    1061             initialAdapterData.m_strNATNetworkName = wipedOutString(adapter.GetNATNetwork());
    1062 
    1063             /* Gather advanced options: */
    1064             initialAdapterData.m_adapterType = adapter.GetAdapterType();
    1065             initialAdapterData.m_promiscuousMode = adapter.GetPromiscModePolicy();
    1066             initialAdapterData.m_strMACAddress = adapter.GetMACAddress();
    1067             initialAdapterData.m_strGenericProperties = loadGenericProperties(adapter);
    1068             initialAdapterData.m_fCableConnected = adapter.GetCableConnected();
    1069 
    1070             /* Gather redirect options: */
    1071             foreach (const QString &redirect, adapter.GetNATEngine().GetRedirects())
     1046        /* Prepare old adapter data: */
     1047        UIDataSettingsMachineNetworkAdapter oldAdapterData;
     1048
     1049        /* Check whether adapter is valid: */
     1050        const CNetworkAdapter &comAdapter = m_machine.GetNetworkAdapter(iSlot);
     1051        if (!comAdapter.isNull())
     1052        {
     1053            /* Gather old adapter data: */
     1054            oldAdapterData.m_iSlot = iSlot;
     1055            oldAdapterData.m_fAdapterEnabled = comAdapter.GetEnabled();
     1056            oldAdapterData.m_attachmentType = comAdapter.GetAttachmentType();
     1057            oldAdapterData.m_strBridgedAdapterName = wipedOutString(comAdapter.GetBridgedInterface());
     1058            oldAdapterData.m_strInternalNetworkName = wipedOutString(comAdapter.GetInternalNetwork());
     1059            oldAdapterData.m_strHostInterfaceName = wipedOutString(comAdapter.GetHostOnlyInterface());
     1060            oldAdapterData.m_strGenericDriverName = wipedOutString(comAdapter.GetGenericDriver());
     1061            oldAdapterData.m_strNATNetworkName = wipedOutString(comAdapter.GetNATNetwork());
     1062            oldAdapterData.m_adapterType = comAdapter.GetAdapterType();
     1063            oldAdapterData.m_promiscuousMode = comAdapter.GetPromiscModePolicy();
     1064            oldAdapterData.m_strMACAddress = comAdapter.GetMACAddress();
     1065            oldAdapterData.m_strGenericProperties = loadGenericProperties(comAdapter);
     1066            oldAdapterData.m_fCableConnected = comAdapter.GetCableConnected();
     1067            foreach (const QString &redirect, comAdapter.GetNATEngine().GetRedirects())
    10721068            {
    10731069                const QStringList redirectData = redirect.split(',');
    10741070                AssertMsg(redirectData.size() == 6, ("Redirect rule should be composed of 6 parts!\n"));
    1075                 initialAdapterData.m_redirects << UIPortForwardingData(redirectData[0],
    1076                                                                        (KNATProtocol)redirectData[1].toUInt(),
    1077                                                                        redirectData[2],
    1078                                                                        redirectData[3].toUInt(),
    1079                                                                        redirectData[4],
    1080                                                                        redirectData[5].toUInt());
     1071                oldAdapterData.m_redirects << UIPortForwardingData(redirectData.at(0),
     1072                                                                   (KNATProtocol)redirectData.at(1).toUInt(),
     1073                                                                   redirectData.at(2),
     1074                                                                   redirectData.at(3).toUInt(),
     1075                                                                   redirectData.at(4),
     1076                                                                   redirectData.at(5).toUInt());
    10811077            }
    10821078        }
    10831079
    1084         /* Append initial adapter data: */
    1085         initialData.m_adapters << initialAdapterData;
    1086     }
    1087 
    1088     /* Cache initial data: */
    1089     m_pCache->cacheInitialData(initialData);
     1080        /* Cache old adapter data: */
     1081        oldNetworkData.m_adapters << oldAdapterData;
     1082    }
     1083
     1084    /* Cache old network data: */
     1085    m_pCache->cacheInitialData(oldNetworkData);
    10901086
    10911087    /* Upload machine to data: */
     
    11001096    QWidget *pLastFocusWidget = m_pTabWidget->focusProxy();
    11011097
    1102     /* For each network adapter: */
     1098    /* For each adapter: */
    11031099    for (int iSlot = 0; iSlot < m_pTabWidget->count(); ++iSlot)
    11041100    {
     
    11061102        UIMachineSettingsNetwork *pTab = qobject_cast<UIMachineSettingsNetwork*>(m_pTabWidget->widget(iSlot));
    11071103
    1108         /* Load initial adapter data to page: */
     1104        /* Load old adapter data to the page: */
    11091105        pTab->loadAdapterData(m_pCache->base().m_adapters.at(iSlot));
    11101106
     
    11251121void UIMachineSettingsNetworkPage::putToCache()
    11261122{
    1127     /* Prepare current data: */
    1128     UIDataSettingsMachineNetwork currentData;
    1129 
    1130     /* For each network adapter: */
     1123    /* Prepare new network data: */
     1124    UIDataSettingsMachineNetwork newNetworkData;
     1125
     1126    /* For each adapter: */
    11311127    for (int iSlot = 0; iSlot < m_pTabWidget->count(); ++iSlot)
    11321128    {
     
    11341130        UIMachineSettingsNetwork *pTab = qobject_cast<UIMachineSettingsNetwork*>(m_pTabWidget->widget(iSlot));
    11351131
    1136         /* Prepare current adapter data: */
    1137         UIDataSettingsMachineNetworkAdapter currentAdapterData;
    1138 
    1139         /* Gather current adapter data: */
    1140         pTab->saveAdapterData(currentAdapterData);
    1141 
    1142         /* Cache current adapter data: */
    1143         currentData.m_adapters << currentAdapterData;
    1144     }
    1145 
    1146     /* Cache current data: */
    1147     m_pCache->cacheCurrentData(currentData);
     1132        /* Prepare new adapter data: */
     1133        UIDataSettingsMachineNetworkAdapter newAdapterData;
     1134
     1135        /* Gather new adapter data: */
     1136        pTab->saveAdapterData(newAdapterData);
     1137
     1138        /* Cache new adapter data: */
     1139        newNetworkData.m_adapters << newAdapterData;
     1140    }
     1141
     1142    /* Cache new network data: */
     1143    m_pCache->cacheCurrentData(newNetworkData);
    11481144}
    11491145
     
    11531149    UISettingsPageMachine::fetchData(data);
    11541150
    1155     /* Check if network data was changed: */
    1156     if (m_pCache->wasChanged())
    1157     {
    1158         /* For each network adapter: */
     1151    /* Make sure machine is in valid mode & network data was changed: */
     1152    if (isMachineInValidMode() && m_pCache->wasChanged())
     1153    {
     1154        /* For each adapter: */
    11591155        for (int iSlot = 0; iSlot < m_pTabWidget->count(); ++iSlot)
    11601156        {
    1161             /* Check if adapter data was changed: */
    1162             const UIDataSettingsMachineNetworkAdapter &initialAdapterData = m_pCache->base().m_adapters.at(iSlot);
    1163             const UIDataSettingsMachineNetworkAdapter &currentAdapterData = m_pCache->data().m_adapters.at(iSlot);
    1164             if (currentAdapterData != initialAdapterData)
     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)
    11651164            {
    11661165                /* Check if adapter still valid: */
    1167                 CNetworkAdapter adapter = m_machine.GetNetworkAdapter(iSlot);
    1168                 if (!adapter.isNull())
     1166                CNetworkAdapter comAdapter = m_machine.GetNetworkAdapter(iSlot);
     1167                if (!comAdapter.isNull())
    11691168                {
    1170                     /* Store adapter data: */
     1169                    /* Store new adapter data: */
    11711170                    if (isMachineOffline())
    11721171                    {
    11731172                        /* Whether the adapter is enabled: */
    1174                         if (   adapter.isOk()
    1175                             && currentAdapterData.m_fAdapterEnabled != initialAdapterData.m_fAdapterEnabled)
    1176                             adapter.SetEnabled(currentAdapterData.m_fAdapterEnabled);
     1173                        if (   comAdapter.isOk()
     1174                            && newAdapterData.m_fAdapterEnabled != oldAdapterData.m_fAdapterEnabled)
     1175                            comAdapter.SetEnabled(newAdapterData.m_fAdapterEnabled);
    11771176                        /* Adapter type: */
    1178                         if (   adapter.isOk()
    1179                             && currentAdapterData.m_adapterType != initialAdapterData.m_adapterType)
    1180                             adapter.SetAdapterType(currentAdapterData.m_adapterType);
     1177                        if (   comAdapter.isOk()
     1178                            && newAdapterData.m_adapterType != oldAdapterData.m_adapterType)
     1179                            comAdapter.SetAdapterType(newAdapterData.m_adapterType);
    11811180                        /* Adapter MAC address: */
    1182                         if (   adapter.isOk()
    1183                             && currentAdapterData.m_strMACAddress != initialAdapterData.m_strMACAddress)
    1184                             adapter.SetMACAddress(currentAdapterData.m_strMACAddress);
     1181                        if (   comAdapter.isOk()
     1182                            && newAdapterData.m_strMACAddress != oldAdapterData.m_strMACAddress)
     1183                            comAdapter.SetMACAddress(newAdapterData.m_strMACAddress);
    11851184                    }
    11861185                    if (isMachineInValidMode())
    11871186                    {
    11881187                        /* Adapter attachment type: */
    1189                         switch (currentAdapterData.m_attachmentType)
     1188                        switch (newAdapterData.m_attachmentType)
    11901189                        {
    11911190                            case KNetworkAttachmentType_Bridged:
    11921191                            {
    1193                                 if (   adapter.isOk()
    1194                                     && currentAdapterData.m_strBridgedAdapterName != initialAdapterData.m_strBridgedAdapterName)
    1195                                     adapter.SetBridgedInterface(currentAdapterData.m_strBridgedAdapterName);
     1192                                if (   comAdapter.isOk()
     1193                                    && newAdapterData.m_strBridgedAdapterName != oldAdapterData.m_strBridgedAdapterName)
     1194                                    comAdapter.SetBridgedInterface(newAdapterData.m_strBridgedAdapterName);
    11961195                                break;
    11971196                            }
    11981197                            case KNetworkAttachmentType_Internal:
    11991198                            {
    1200                                 if (   adapter.isOk()
    1201                                     && currentAdapterData.m_strInternalNetworkName != initialAdapterData.m_strInternalNetworkName)
    1202                                     adapter.SetInternalNetwork(currentAdapterData.m_strInternalNetworkName);
     1199                                if (   comAdapter.isOk()
     1200                                    && newAdapterData.m_strInternalNetworkName != oldAdapterData.m_strInternalNetworkName)
     1201                                    comAdapter.SetInternalNetwork(newAdapterData.m_strInternalNetworkName);
    12031202                                break;
    12041203                            }
    12051204                            case KNetworkAttachmentType_HostOnly:
    12061205                            {
    1207                                 if (   adapter.isOk()
    1208                                     && currentAdapterData.m_strHostInterfaceName != initialAdapterData.m_strHostInterfaceName)
    1209                                     adapter.SetHostOnlyInterface(currentAdapterData.m_strHostInterfaceName);
     1206                                if (   comAdapter.isOk()
     1207                                    && newAdapterData.m_strHostInterfaceName != oldAdapterData.m_strHostInterfaceName)
     1208                                    comAdapter.SetHostOnlyInterface(newAdapterData.m_strHostInterfaceName);
    12101209                                break;
    12111210                            }
    12121211                            case KNetworkAttachmentType_Generic:
    12131212                            {
    1214                                 if (   adapter.isOk()
    1215                                     && currentAdapterData.m_strGenericDriverName != initialAdapterData.m_strGenericDriverName)
    1216                                     adapter.SetGenericDriver(currentAdapterData.m_strGenericDriverName);
    1217                                 if (   adapter.isOk()
    1218                                     && currentAdapterData.m_strGenericProperties != initialAdapterData.m_strGenericProperties)
    1219                                     saveGenericProperties(adapter, currentAdapterData.m_strGenericProperties);
     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);
    12201219                                break;
    12211220                            }
    12221221                            case KNetworkAttachmentType_NATNetwork:
    12231222                            {
    1224                                 if (   adapter.isOk()
    1225                                     && currentAdapterData.m_strNATNetworkName != initialAdapterData.m_strNATNetworkName)
    1226                                     adapter.SetNATNetwork(currentAdapterData.m_strNATNetworkName);
     1223                                if (   comAdapter.isOk()
     1224                                    && newAdapterData.m_strNATNetworkName != oldAdapterData.m_strNATNetworkName)
     1225                                    comAdapter.SetNATNetwork(newAdapterData.m_strNATNetworkName);
    12271226                                break;
    12281227                            }
     
    12301229                                break;
    12311230                        }
    1232                         if (   adapter.isOk()
    1233                             && currentAdapterData.m_attachmentType != initialAdapterData.m_attachmentType)
    1234                             adapter.SetAttachmentType(currentAdapterData.m_attachmentType);
     1231                        if (   comAdapter.isOk()
     1232                            && newAdapterData.m_attachmentType != oldAdapterData.m_attachmentType)
     1233                            comAdapter.SetAttachmentType(newAdapterData.m_attachmentType);
    12351234                        /* Adapter promiscuous mode: */
    1236                         if (   adapter.isOk()
    1237                             && currentAdapterData.m_promiscuousMode != initialAdapterData.m_promiscuousMode)
    1238                             adapter.SetPromiscModePolicy(currentAdapterData.m_promiscuousMode);
     1235                        if (   comAdapter.isOk()
     1236                            && newAdapterData.m_promiscuousMode != oldAdapterData.m_promiscuousMode)
     1237                            comAdapter.SetPromiscModePolicy(newAdapterData.m_promiscuousMode);
    12391238                        /* Whether the adapter cable connected: */
    1240                         if (   adapter.isOk()
    1241                             && currentAdapterData.m_fCableConnected != initialAdapterData.m_fCableConnected)
    1242                             adapter.SetCableConnected(currentAdapterData.m_fCableConnected);
     1239                        if (   comAdapter.isOk()
     1240                            && newAdapterData.m_fCableConnected != oldAdapterData.m_fCableConnected)
     1241                            comAdapter.SetCableConnected(newAdapterData.m_fCableConnected);
    12431242                        /* Adapter redirect options: */
    1244                         if (   adapter.isOk()
    1245                             && currentAdapterData.m_redirects != initialAdapterData.m_redirects
    1246                             && (   initialAdapterData.m_attachmentType == KNetworkAttachmentType_NAT
    1247                                 || currentAdapterData.m_attachmentType == KNetworkAttachmentType_NAT))
     1243                        if (   comAdapter.isOk()
     1244                            && newAdapterData.m_redirects != oldAdapterData.m_redirects
     1245                            && (   oldAdapterData.m_attachmentType == KNetworkAttachmentType_NAT
     1246                                || newAdapterData.m_attachmentType == KNetworkAttachmentType_NAT))
    12481247                        {
    1249                             foreach (const QString &strOldRedirect, adapter.GetNATEngine().GetRedirects())
    1250                                 adapter.GetNATEngine().RemoveRedirect(strOldRedirect.section(',', 0, 0));
    1251                             foreach (const UIPortForwardingData &newRedirect, currentAdapterData.m_redirects)
    1252                                 adapter.GetNATEngine().AddRedirect(newRedirect.name, newRedirect.protocol,
     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,
    12531252                                                                   newRedirect.hostIp, newRedirect.hostPort.value(),
    12541253                                                                   newRedirect.guestIp, newRedirect.guestPort.value());
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