diff options
Diffstat (limited to 'src/VBox/Main/src-server/CloudNetworkImpl.cpp')
-rw-r--r-- | src/VBox/Main/src-server/CloudNetworkImpl.cpp | 262 |
1 files changed, 262 insertions, 0 deletions
diff --git a/src/VBox/Main/src-server/CloudNetworkImpl.cpp b/src/VBox/Main/src-server/CloudNetworkImpl.cpp new file mode 100644 index 00000000..41a5c989 --- /dev/null +++ b/src/VBox/Main/src-server/CloudNetworkImpl.cpp @@ -0,0 +1,262 @@ +/* $Id: CloudNetworkImpl.cpp $ */ +/** @file + * ICloudNetwork COM class implementations. + */ + +/* + * Copyright (C) 2019-2022 Oracle and/or its affiliates. + * + * This file is part of VirtualBox base platform packages, as + * available from https://www.virtualbox.org. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, in version 3 of the + * License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <https://www.gnu.org/licenses>. + * + * SPDX-License-Identifier: GPL-3.0-only + */ + + +#define LOG_GROUP LOG_GROUP_MAIN_CLOUDNETWORK +#include <VBox/settings.h> +#include <iprt/cpp/utils.h> + +#include "VirtualBoxImpl.h" +#include "CloudNetworkImpl.h" +#include "AutoCaller.h" +#include "LoggingNew.h" + + +struct CloudNetwork::Data +{ + Data() : pVirtualBox(NULL) {} + virtual ~Data() {} + + /** weak VirtualBox parent */ + VirtualBox * const pVirtualBox; + + /** CloudNetwork settings */ + settings::CloudNetwork s; +}; + +//////////////////////////////////////////////////////////////////////////////// +// +// CloudNetwork constructor / destructor +// +// //////////////////////////////////////////////////////////////////////////////// +CloudNetwork::CloudNetwork() : m(NULL) +{ +} + +CloudNetwork::~CloudNetwork() +{ +} + + +HRESULT CloudNetwork::FinalConstruct() +{ + return BaseFinalConstruct(); +} + +void CloudNetwork::FinalRelease() +{ + uninit(); + + BaseFinalRelease(); +} + +HRESULT CloudNetwork::init(VirtualBox *aVirtualBox, Utf8Str aName) +{ + // Enclose the state transition NotReady->InInit->Ready. + AutoInitSpan autoInitSpan(this); + AssertReturn(autoInitSpan.isOk(), E_FAIL); + + m = new Data(); + /* share VirtualBox weakly */ + unconst(m->pVirtualBox) = aVirtualBox; + + m->s.strNetworkName = aName; + m->s.fEnabled = true; + m->s.strProviderShortName = "OCI"; + m->s.strProfileName = "Default"; + + autoInitSpan.setSucceeded(); + return S_OK; +} + +void CloudNetwork::uninit() +{ + // Enclose the state transition Ready->InUninit->NotReady. + AutoUninitSpan autoUninitSpan(this); + if (autoUninitSpan.uninitDone()) + return; +} + +HRESULT CloudNetwork::i_loadSettings(const settings::CloudNetwork &data) +{ + AutoCaller autoCaller(this); + AssertComRCReturnRC(autoCaller.rc()); + + AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + m->s = data; + + return S_OK; +} + +HRESULT CloudNetwork::i_saveSettings(settings::CloudNetwork &data) +{ + AutoCaller autoCaller(this); + if (FAILED(autoCaller.rc())) return autoCaller.rc(); + + AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS); + AssertReturn(!m->s.strNetworkName.isEmpty(), E_FAIL); + data = m->s; + + return S_OK; +} + +Utf8Str CloudNetwork::i_getProvider() +{ + return m->s.strProviderShortName; +} + +Utf8Str CloudNetwork::i_getProfile() +{ + return m->s.strProfileName; +} + +Utf8Str CloudNetwork::i_getNetworkId() +{ + return m->s.strNetworkId; +} + +Utf8Str CloudNetwork::i_getNetworkName() +{ + return m->s.strNetworkName; +} + + +HRESULT CloudNetwork::getNetworkName(com::Utf8Str &aNetworkName) +{ + AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS); + AssertReturn(!m->s.strNetworkName.isEmpty(), E_FAIL); + aNetworkName = m->s.strNetworkName; + return S_OK; +} + +HRESULT CloudNetwork::setNetworkName(const com::Utf8Str &aNetworkName) +{ + if (aNetworkName.isEmpty()) + return setError(E_INVALIDARG, + tr("Network name cannot be empty")); + { + AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + if (aNetworkName == m->s.strNetworkName) + return S_OK; + + m->s.strNetworkName = aNetworkName; + } + + AutoWriteLock vboxLock(m->pVirtualBox COMMA_LOCKVAL_SRC_POS); + HRESULT rc = m->pVirtualBox->i_saveSettings(); + ComAssertComRCRetRC(rc); + return S_OK; +} + +HRESULT CloudNetwork::getEnabled(BOOL *aEnabled) +{ + AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS); + *aEnabled = m->s.fEnabled; + return S_OK; +} + +HRESULT CloudNetwork::setEnabled(BOOL aEnabled) +{ + { + AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + if (RT_BOOL(aEnabled) == m->s.fEnabled) + return S_OK; + m->s.fEnabled = RT_BOOL(aEnabled); + } + + AutoWriteLock vboxLock(m->pVirtualBox COMMA_LOCKVAL_SRC_POS); + HRESULT rc = m->pVirtualBox->i_saveSettings(); + ComAssertComRCRetRC(rc); + return S_OK; +} + +HRESULT CloudNetwork::getProvider(com::Utf8Str &aProvider) +{ + AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS); + aProvider = m->s.strProviderShortName; + return S_OK; +} + +HRESULT CloudNetwork::setProvider(const com::Utf8Str &aProvider) +{ + { + AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + if (aProvider == m->s.strProviderShortName) + return S_OK; + m->s.strProviderShortName = aProvider; + } + + AutoWriteLock vboxLock(m->pVirtualBox COMMA_LOCKVAL_SRC_POS); + HRESULT rc = m->pVirtualBox->i_saveSettings(); + ComAssertComRCRetRC(rc); + return S_OK; +} + +HRESULT CloudNetwork::getProfile(com::Utf8Str &aProfile) +{ + AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS); + aProfile = m->s.strProfileName; + return S_OK; +} + +HRESULT CloudNetwork::setProfile(const com::Utf8Str &aProfile) +{ + { + AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + if (aProfile == m->s.strProfileName) + return S_OK; + m->s.strProfileName = aProfile; + } + + AutoWriteLock vboxLock(m->pVirtualBox COMMA_LOCKVAL_SRC_POS); + HRESULT rc = m->pVirtualBox->i_saveSettings(); + ComAssertComRCRetRC(rc); + return S_OK; +} + +HRESULT CloudNetwork::getNetworkId(com::Utf8Str &aNetworkId) +{ + AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS); + aNetworkId = m->s.strNetworkId; + return S_OK; +} + +HRESULT CloudNetwork::setNetworkId(const com::Utf8Str &aNetworkId) +{ + { + AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); + if (aNetworkId == m->s.strNetworkId) + return S_OK; + m->s.strNetworkId = aNetworkId; + } + + AutoWriteLock vboxLock(m->pVirtualBox COMMA_LOCKVAL_SRC_POS); + HRESULT rc = m->pVirtualBox->i_saveSettings(); + ComAssertComRCRetRC(rc); + return S_OK; +} + |