// // "public-private" methods // void MachineDebugger::flushQueuedSettings() { fFlushMode = true; if (singlestepQueued != ~0) { COMSETTER(Singlestep)(singlestepQueued); singlestepQueued = ~0; } if (recompileUserQueued != ~0) { COMSETTER(RecompileUser)(recompileUserQueued); recompileUserQueued = ~0; } if (recompileSupervisorQueued != ~0) { COMSETTER(RecompileSupervisor)(recompileSupervisorQueued); recompileSupervisorQueued = ~0; } if (patmEnabledQueued != ~0) { COMSETTER(PATMEnabled)(patmEnabledQueued); patmEnabledQueued = ~0; } if (csamEnabledQueued != ~0) { COMSETTER(CSAMEnabled)(csamEnabledQueued); csamEnabledQueued = ~0; } fFlushMode = false; }
/** * Initializes the USB device filter object. * * @param aParent Handle of the parent object. * @param data Reference filter settings. */ HRESULT USBDeviceFilter::init(USBDeviceFilters *aParent, const settings::USBDeviceFilter &data) { LogFlowThisFunc(("aParent=%p\n", aParent)); ComAssertRet(aParent && !data.strName.isEmpty(), E_INVALIDARG); /* Enclose the state transition NotReady->InInit->Ready */ AutoInitSpan autoInitSpan(this); AssertReturn(autoInitSpan.isOk(), E_FAIL); unconst(mParent) = aParent; /* mPeer is left null */ m_fModified = false; bd.allocate(); bd->mData.strName = data.strName; bd->mData.fActive = data.fActive; bd->mData.ulMaskedInterfaces = 0; /* initialize all filters to any match using null string */ USBFilterInit(&bd->mUSBFilter, USBFILTERTYPE_CAPTURE); bd->mRemote = NULL; mInList = false; /* use setters for the attributes below to reuse parsing errors * handling */ HRESULT rc = S_OK; do { rc = i_usbFilterFieldSetter(USBFILTERIDX_VENDOR_ID, data.strVendorId); if (FAILED(rc)) break; rc = i_usbFilterFieldSetter(USBFILTERIDX_PRODUCT_ID, data.strProductId); if (FAILED(rc)) break; rc = i_usbFilterFieldSetter(USBFILTERIDX_DEVICE, data.strRevision); if (FAILED(rc)) break; rc = i_usbFilterFieldSetter(USBFILTERIDX_MANUFACTURER_STR, data.strManufacturer); if (FAILED(rc)) break; rc = i_usbFilterFieldSetter(USBFILTERIDX_PRODUCT_STR, data.strProduct); if (FAILED(rc)) break; rc = i_usbFilterFieldSetter(USBFILTERIDX_SERIAL_NUMBER_STR, data.strSerialNumber); if (FAILED(rc)) break; rc = i_usbFilterFieldSetter(USBFILTERIDX_PORT, data.strPort); if (FAILED(rc)) break; rc = COMSETTER(Remote)(Bstr(data.strRemote).raw()); if (FAILED(rc)) break; rc = COMSETTER(MaskedInterfaces)(data.ulMaskedInterfaces); if (FAILED(rc)) break; } while (0); /* Confirm successful initialization when it's the case */ if (SUCCEEDED(rc)) autoInitSpan.setSucceeded(); return rc; }
/** * Loads settings from the given adapter node. * May be called once right after this object creation. * * @param aAdapterNode <Adapter> node. * * @note Locks this object for writing. */ HRESULT NetworkAdapter::loadSettings(BandwidthControl *bwctl, const settings::NetworkAdapter &data) { AutoCaller autoCaller(this); AssertComRCReturnRC(autoCaller.rc()); AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); /* Note: we assume that the default values for attributes of optional * nodes are assigned in the Data::Data() constructor and don't do it * here. It implies that this method may only be called after constructing * a new BIOSSettings object while all its data fields are in the default * values. Exceptions are fields whose creation time defaults don't match * values that should be applied when these fields are not explicitly set * in the settings file (for backwards compatibility reasons). This takes * place when a setting of a newly created object must default to A while * the same setting of an object loaded from the old settings file must * default to B. */ HRESULT rc = S_OK; mData->mAdapterType = data.type; mData->mEnabled = data.fEnabled; /* MAC address (can be null) */ rc = updateMacAddress(data.strMACAddress); if (FAILED(rc)) return rc; /* cable (required) */ mData->mCableConnected = data.fCableConnected; /* line speed (defaults to 100 Mbps) */ mData->mLineSpeed = data.ulLineSpeed; mData->mPromiscModePolicy = data.enmPromiscModePolicy; /* tracing (defaults to false) */ mData->mTraceEnabled = data.fTraceEnabled; mData->mTraceFile = data.strTraceFile; /* boot priority (defaults to 0, i.e. lowest) */ mData->mBootPriority = data.ulBootPriority; /* bandwidth group */ mData->mBandwidthGroup = data.strBandwidthGroup; if (mData->mBandwidthGroup.isNotEmpty()) { ComObjPtr<BandwidthGroup> group; rc = bwctl->getBandwidthGroupByName(data.strBandwidthGroup, group, true); if (FAILED(rc)) return rc; group->reference(); } mNATEngine->loadSettings(data.nat); mData->mBridgedInterface = data.strBridgedName; mData->mInternalNetwork = data.strInternalNetworkName; mData->mHostOnlyInterface = data.strHostOnlyName; mData->mGenericDriver = data.strGenericDriver; mData->mGenericProperties = data.genericProperties; // leave the lock before setting attachment type alock.release(); rc = COMSETTER(AttachmentType)(data.mode); if (FAILED(rc)) return rc; // after loading settings, we are no longer different from the XML on disk m_fModified = false; return S_OK; }
/** * Initializes the USB device filter object. * * @param aParent Handle of the parent object. */ HRESULT HostUSBDeviceFilter::init(Host *aParent, const settings::USBDeviceFilter &data) { LogFlowThisFunc(("aParent=%p\n", aParent)); ComAssertRet(aParent && !data.strName.isEmpty(), E_INVALIDARG); /* Enclose the state transition NotReady->InInit->Ready */ AutoInitSpan autoInitSpan(this); AssertReturn(autoInitSpan.isOk(), E_FAIL); unconst(mParent) = aParent; /* register with parent early, since uninit() will unconditionally * unregister on failure */ mParent->addChild(this); mData.allocate(); mData->mName = data.strName; mData->mActive = data.fActive; USBFilterInit (&mData->mUSBFilter, USBFILTERTYPE_IGNORE); mData->mRemote = NULL; mData->mMaskedIfs = 0; mInList = false; /* use setters for the attributes below to reuse parsing errors * handling */ HRESULT rc = S_OK; do { rc = COMSETTER(Action)(data.action); if (FAILED(rc)) break; rc = usbFilterFieldSetter(USBFILTERIDX_VENDOR_ID, data.strVendorId); if (FAILED(rc)) break; rc = usbFilterFieldSetter(USBFILTERIDX_PRODUCT_ID, data.strProductId); if (FAILED(rc)) break; rc = usbFilterFieldSetter(USBFILTERIDX_DEVICE, data.strRevision); if (FAILED(rc)) break; rc = usbFilterFieldSetter(USBFILTERIDX_MANUFACTURER_STR, data.strManufacturer); if (FAILED(rc)) break; rc = usbFilterFieldSetter(USBFILTERIDX_PRODUCT_ID, data.strProduct); if (FAILED(rc)) break; rc = usbFilterFieldSetter(USBFILTERIDX_SERIAL_NUMBER_STR, data.strSerialNumber); if (FAILED(rc)) break; rc = usbFilterFieldSetter(USBFILTERIDX_PORT, data.strPort); if (FAILED(rc)) break; } while (0); /* Confirm successful initialization when it's the case */ if (SUCCEEDED(rc)) autoInitSpan.setSucceeded(); return rc; }