VirtualBox

Changeset 49618 in vbox for trunk/src


Ignore:
Timestamp:
Nov 22, 2013 2:05:57 AM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
90836
Message:

Main/DHCPServerImpl: move DHCPServer::Data closer to implementation, because with -std=c++11 DHCPserver::Data::VmSlot2Options cound't be instanciated in-place wwithout full declaration of settings::VmNameSlotKey, because of pair declaraion in STL's <utility> header.

Location:
trunk/src/VBox/Main
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/include/DHCPServerImpl.h

    r49494 r49618  
    125125
    126126private:
     127    struct Data;
     128    Data *m;
    127129    /** weak VirtualBox parent */
    128130    VirtualBox * const      mVirtualBox;
    129 
    130131    const Bstr mName;
    131 
    132     struct Data
    133     {
    134         Data() : enabled(FALSE) {}
    135 
    136         Bstr IPAddress;
    137         Bstr lowerIP;
    138         Bstr upperIP;
    139 
    140         BOOL enabled;
    141         DHCPServerRunner dhcp;
    142 
    143         DhcpOptionMap GlobalDhcpOptions;
    144         VmSlot2OptionsMap VmSlot2Options;
    145     } m;
    146132
    147133    DhcpOptionMap& findOptMapByVmNameSlot(const com::Utf8Str& aVmName,
  • trunk/src/VBox/Main/src-server/DHCPServerImpl.cpp

    r49516 r49618  
    3838
    3939
     40struct DHCPServer::Data
     41{
     42    Data() : enabled(FALSE) {}
     43
     44    Bstr IPAddress;
     45    Bstr lowerIP;
     46    Bstr upperIP;
     47
     48    BOOL enabled;
     49    DHCPServerRunner dhcp;
     50
     51    DhcpOptionMap GlobalDhcpOptions;
     52    VmSlot2OptionsMap VmSlot2Options;
     53};
     54
     55
    4056DHCPServer::DHCPServer()
    41     : mVirtualBox(NULL)
    42 {
     57  : m(NULL), mVirtualBox(NULL)
     58{
     59    m = new DHCPServer::Data();
    4360}
    4461
     
    4663DHCPServer::~DHCPServer()
    4764{
     65    if (m)
     66    {
     67        delete m;
     68        m = NULL;
     69    }
    4870}
    4971
     
    85107
    86108    unconst(mName) = aName;
    87     m.IPAddress = "0.0.0.0";
    88     m.GlobalDhcpOptions.insert(DhcpOptValuePair(DhcpOpt_SubnetMask, Bstr("0.0.0.0")));
    89     m.enabled = FALSE;
    90 
    91     m.lowerIP = "0.0.0.0";
    92     m.upperIP = "0.0.0.0";
     109    m->IPAddress = "0.0.0.0";
     110    m->GlobalDhcpOptions.insert(DhcpOptValuePair(DhcpOpt_SubnetMask, Bstr("0.0.0.0")));
     111    m->enabled = FALSE;
     112
     113    m->lowerIP = "0.0.0.0";
     114    m->upperIP = "0.0.0.0";
    93115
    94116    /* Confirm a successful initialization */
     
    110132
    111133    unconst(mName) = data.strNetworkName;
    112     m.IPAddress = data.strIPAddress;
    113     m.enabled = data.fEnabled;
    114     m.lowerIP = data.strIPLower;
    115     m.upperIP = data.strIPUpper;
    116 
    117     m.GlobalDhcpOptions.clear();
    118     m.GlobalDhcpOptions.insert(data.GlobalDhcpOptions.begin(),
     134    m->IPAddress = data.strIPAddress;
     135    m->enabled = data.fEnabled;
     136    m->lowerIP = data.strIPLower;
     137    m->upperIP = data.strIPUpper;
     138
     139    m->GlobalDhcpOptions.clear();
     140    m->GlobalDhcpOptions.insert(data.GlobalDhcpOptions.begin(),
    119141                               data.GlobalDhcpOptions.end());
    120142
    121     m.VmSlot2Options.clear();
    122     m.VmSlot2Options.insert(data.VmSlot2OptionsM.begin(),
     143    m->VmSlot2Options.clear();
     144    m->VmSlot2Options.insert(data.VmSlot2OptionsM.begin(),
    123145                            data.VmSlot2OptionsM.end());
    124146
     
    137159
    138160    data.strNetworkName = mName;
    139     data.strIPAddress = m.IPAddress;
    140 
    141     data.fEnabled = !!m.enabled;
    142     data.strIPLower = m.lowerIP;
    143     data.strIPUpper = m.upperIP;
     161    data.strIPAddress = m->IPAddress;
     162
     163    data.fEnabled = !!m->enabled;
     164    data.strIPLower = m->lowerIP;
     165    data.strIPUpper = m->upperIP;
    144166
    145167    data.GlobalDhcpOptions.clear();
    146     data.GlobalDhcpOptions.insert(m.GlobalDhcpOptions.begin(),
    147                                   m.GlobalDhcpOptions.end());
     168    data.GlobalDhcpOptions.insert(m->GlobalDhcpOptions.begin(),
     169                                  m->GlobalDhcpOptions.end());
    148170
    149171    data.VmSlot2OptionsM.clear();
    150     data.VmSlot2OptionsM.insert(m.VmSlot2Options.begin(),
    151                                 m.VmSlot2Options.end());
     172    data.VmSlot2OptionsM.insert(m->VmSlot2Options.begin(),
     173                                m->VmSlot2Options.end());
    152174
    153175    return S_OK;
     
    175197    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    176198
    177     *aEnabled = m.enabled;
     199    *aEnabled = m->enabled;
    178200
    179201    return S_OK;
     
    187209
    188210    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    189     m.enabled = aEnabled;
     211    m->enabled = aEnabled;
    190212
    191213    // save the global settings; for that we should hold only the VirtualBox lock
     
    205227    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    206228
    207     m.IPAddress.cloneTo(aIPAddress);
     229    m->IPAddress.cloneTo(aIPAddress);
    208230
    209231    return S_OK;
     
    218240    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    219241
    220     m.GlobalDhcpOptions[DhcpOpt_SubnetMask].cloneTo(aNetworkMask);
     242    m->GlobalDhcpOptions[DhcpOpt_SubnetMask].cloneTo(aNetworkMask);
    221243
    222244    return S_OK;
     
    231253    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    232254
    233     m.lowerIP.cloneTo(aIPAddress);
     255    m->lowerIP.cloneTo(aIPAddress);
    234256
    235257    return S_OK;
     
    244266    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    245267
    246     m.upperIP.cloneTo(aIPAddress);
     268    m->upperIP.cloneTo(aIPAddress);
    247269
    248270    return S_OK;
     
    261283
    262284    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    263     m.IPAddress = aIPAddress;
    264     m.GlobalDhcpOptions[DhcpOpt_SubnetMask] = aNetworkMask;
    265 
    266     m.lowerIP = aLowerIP;
    267     m.upperIP = aUpperIP;
     285    m->IPAddress = aIPAddress;
     286    m->GlobalDhcpOptions[DhcpOpt_SubnetMask] = aNetworkMask;
     287
     288    m->lowerIP = aLowerIP;
     289    m->upperIP = aUpperIP;
    268290
    269291    // save the global settings; for that we should hold only the VirtualBox lock
     
    283305    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    284306
    285     m.GlobalDhcpOptions.insert(
     307    m->GlobalDhcpOptions.insert(
    286308      DhcpOptValuePair(aOption, Utf8Str(aValue)));
    287309
    288310    /* Indirect way to understand that we're on NAT network */
    289311    if (aOption == DhcpOpt_Router)
    290         m.dhcp.setOption(NetworkServiceRunner::kNsrKeyNeedMain, "on");
     312        m->dhcp.setOption(NetworkServiceRunner::kNsrKeyNeedMain, "on");
    291313
    292314    alock.release();
     
    306328    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    307329
    308     SafeArray<BSTR> sf(m.GlobalDhcpOptions.size());
     330    SafeArray<BSTR> sf(m->GlobalDhcpOptions.size());
    309331    int i = 0;
    310332
    311     for (DhcpOptIterator it = m.GlobalDhcpOptions.begin();
    312          it != m.GlobalDhcpOptions.end(); ++it)
     333    for (DhcpOptIterator it = m->GlobalDhcpOptions.begin();
     334         it != m->GlobalDhcpOptions.end(); ++it)
    313335    {
    314336        Bstr(Utf8StrFmt("%d:%s", (*it).first, (*it).second.c_str())).detachTo(&sf[i]);
     
    331353    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    332354
    333     SafeArray<BSTR> sf(m.VmSlot2Options.size());
    334     VmSlot2OptionsIterator it = m.VmSlot2Options.begin();
     355    SafeArray<BSTR> sf(m->VmSlot2Options.size());
     356    VmSlot2OptionsIterator it = m->VmSlot2Options.begin();
    335357    int i = 0;
    336     for (;it != m.VmSlot2Options.end(); ++it)
     358    for (;it != m->VmSlot2Options.end(); ++it)
    337359    {
    338360        Bstr(Utf8StrFmt("[%s]:%d",
     
    354376    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    355377
    356     m.VmSlot2Options[settings::VmNameSlotKey(
     378    m->VmSlot2Options[settings::VmNameSlotKey(
    357379          com::Utf8Str(aVmName),
    358380          aSlot)][aOption] = com::Utf8Str(aValue);
     
    428450
    429451    VmSlot2OptionsIterator it;
    430     for(it = m.VmSlot2Options.begin();
    431         it != m.VmSlot2Options.end();
     452    for(it = m->VmSlot2Options.begin();
     453        it != m->VmSlot2Options.end();
    432454        ++it)
    433455    {
     
    476498{
    477499    /* Silently ignore attempts to run disabled servers. */
    478     if (!m.enabled)
     500    if (!m->enabled)
    479501        return S_OK;
    480502
    481503    /* Commmon Network Settings */
    482     m.dhcp.setOption(NetworkServiceRunner::kNsrKeyNetwork, Utf8Str(aNetworkName).c_str());
     504    m->dhcp.setOption(NetworkServiceRunner::kNsrKeyNetwork, Utf8Str(aNetworkName).c_str());
    483505
    484506    Bstr tmp(aTrunkName);
    485507
    486508    if (!tmp.isEmpty())
    487         m.dhcp.setOption(NetworkServiceRunner::kNsrTrunkName, Utf8Str(tmp).c_str());
    488     m.dhcp.setOption(NetworkServiceRunner::kNsrKeyTrunkType, Utf8Str(aTrunkType).c_str());
     509        m->dhcp.setOption(NetworkServiceRunner::kNsrTrunkName, Utf8Str(tmp).c_str());
     510    m->dhcp.setOption(NetworkServiceRunner::kNsrKeyTrunkType, Utf8Str(aTrunkType).c_str());
    489511
    490512    /* XXX: should this MAC default initialization moved to NetworkServiceRunner? */
     
    496518                 guid.raw()->au8[1],
    497519                 guid.raw()->au8[2]);
    498     m.dhcp.setOption(NetworkServiceRunner::kNsrMacAddress, strMAC);
    499     m.dhcp.setOption(NetworkServiceRunner::kNsrIpAddress,  Utf8Str(m.IPAddress).c_str());
    500     m.dhcp.setOption(NetworkServiceRunner::kNsrIpNetmask, Utf8Str(m.GlobalDhcpOptions[DhcpOpt_SubnetMask]).c_str());
    501     m.dhcp.setOption(DHCPServerRunner::kDsrKeyLowerIp, Utf8Str(m.lowerIP).c_str());
    502     m.dhcp.setOption(DHCPServerRunner::kDsrKeyUpperIp, Utf8Str(m.upperIP).c_str());
     520    m->dhcp.setOption(NetworkServiceRunner::kNsrMacAddress, strMAC);
     521    m->dhcp.setOption(NetworkServiceRunner::kNsrIpAddress,  Utf8Str(m->IPAddress).c_str());
     522    m->dhcp.setOption(NetworkServiceRunner::kNsrIpNetmask, Utf8Str(m->GlobalDhcpOptions[DhcpOpt_SubnetMask]).c_str());
     523    m->dhcp.setOption(DHCPServerRunner::kDsrKeyLowerIp, Utf8Str(m->lowerIP).c_str());
     524    m->dhcp.setOption(DHCPServerRunner::kDsrKeyUpperIp, Utf8Str(m->upperIP).c_str());
    503525
    504526    /* XXX: This parameters Dhcp Server will fetch via API */
    505     return RT_FAILURE(m.dhcp.start()) ? E_FAIL : S_OK;
    506     //m.dhcp.detachFromServer(); /* need to do this to avoid server shutdown on runner destruction */
     527    return RT_FAILURE(m->dhcp.start()) ? E_FAIL : S_OK;
     528    //m->dhcp.detachFromServer(); /* need to do this to avoid server shutdown on runner destruction */
    507529}
    508530
     
    510532STDMETHODIMP DHCPServer::Stop (void)
    511533{
    512     return RT_FAILURE(m.dhcp.stop()) ? E_FAIL : S_OK;
     534    return RT_FAILURE(m->dhcp.stop()) ? E_FAIL : S_OK;
    513535}
    514536
     
    517539                                                  LONG aSlot)
    518540{
    519     return m.VmSlot2Options[settings::VmNameSlotKey(
     541    return m->VmSlot2Options[settings::VmNameSlotKey(
    520542          com::Utf8Str(aVmName),
    521543          aSlot)];
Note: See TracChangeset for help on using the changeset viewer.

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