virtualbox 0.8.6 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +11 -5
- data/TODO.md +7 -0
- data/lib/virtualbox.rb +34 -8
- data/lib/virtualbox/abstract_model.rb +7 -8
- data/lib/virtualbox/abstract_model/attributable.rb +16 -2
- data/lib/virtualbox/abstract_model/interface_attributes.rb +10 -1
- data/lib/virtualbox/abstract_model/relatable.rb +11 -0
- data/lib/virtualbox/appliance.rb +1 -1
- data/lib/virtualbox/com.rb +13 -12
- data/lib/virtualbox/com/abstract_enum.rb +21 -5
- data/lib/virtualbox/com/abstract_interface.rb +11 -0
- data/lib/virtualbox/com/base_interface.rb +1 -32
- data/lib/virtualbox/com/{ffi/vboxxpcomc.rb → ffi.rb} +7 -0
- data/lib/virtualbox/com/ffi/interface.rb +10 -27
- data/lib/virtualbox/com/ffi/util.rb +32 -2
- data/lib/virtualbox/com/ffi_interface.rb +8 -2
- data/lib/virtualbox/com/implementer.rb +10 -0
- data/lib/virtualbox/com/implementer/base.rb +10 -3
- data/lib/virtualbox/com/implementer/ffi.rb +40 -13
- data/lib/virtualbox/com/implementer/mscom.rb +18 -1
- data/lib/virtualbox/com/interface/4.0.x/{access_mode.rb → AccessMode.rb} +1 -1
- data/lib/virtualbox/com/interface/4.0.x/{appliance.rb → Appliance.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{audio_adapter.rb → AudioAdapter.rb} +1 -1
- data/lib/virtualbox/com/interface/4.0.x/{audio_controller_type.rb → AudioControllerType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{audio_driver_type.rb → AudioDriverType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{auth_type.rb → AuthType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{bios_boot_menu_mode.rb → BIOSBootMenuMode.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{bios_settings.rb → BIOSSettings.rb} +1 -1
- data/lib/virtualbox/com/interface/4.0.x/{bandwidth_control.rb → BandwidthControl.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{bandwidth_group.rb → BandwidthGroup.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{bandwidth_group_type.rb → BandwidthGroupType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{chipset_type.rb → ChipsetType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{cleanup_mode.rb → CleanupMode.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{clipboard_mode.rb → ClipboardMode.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{console.rb → Console.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{cpu_property_type.rb → CpuPropertyType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{dhcp_server.rb → DHCPServer.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{data_type.rb → DataType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{device_type.rb → DeviceType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{event_source.rb → EventSource.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{fault_tolerance_state.rb → FaultToleranceState.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{firmware_type.rb → FirmwareType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{guest.rb → Guest.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{guest_os_type.rb → GuestOSType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{hw_virt_ex_property_type.rb → HWVirtExPropertyType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{host.rb → Host.rb} +6 -6
- data/lib/virtualbox/com/interface/4.0.x/{host_network_interface.rb → HostNetworkInterface.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{host_network_interface_medium_type.rb → HostNetworkInterfaceMediumType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{host_network_interface_status.rb → HostNetworkInterfaceStatus.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{host_network_interface_type.rb → HostNetworkInterfaceType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{host_usb_device.rb → HostUSBDevice.rb} +3 -1
- data/lib/virtualbox/com/interface/4.0.x/{host_usb_device_filter.rb → HostUSBDeviceFilter.rb} +3 -1
- data/lib/virtualbox/com/interface/4.0.x/{keyboard_hid_type.rb → KeyboardHidType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{lock_type.rb → LockType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{machine.rb → Machine.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{machine_state.rb → MachineState.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{medium.rb → Medium.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{medium_attachment.rb → MediumAttachment.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{medium_format.rb → MediumFormat.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{medium_state.rb → MediumState.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{medium_type.rb → MediumType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{medium_variant.rb → MediumVariant.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{nat_alias_mode.rb → NATAliasMode.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{nat_engine.rb → NATEngine.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{nat_protocol.rb → NATProtocol.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{nsiexception.rb → NSIException.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{nsisupports.rb → NSISupports.rb} +3 -0
- data/lib/virtualbox/com/interface/4.0.x/{network_adapter.rb → NetworkAdapter.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{network_adapter_type.rb → NetworkAdapterType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{network_attachment_type.rb → NetworkAttachmentType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{parallel_port.rb → ParallelPort.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{pci_device_attachment.rb → PciDeviceAttachment.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{pointing_hid_type.rb → PointingHidType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{port_mode.rb → PortMode.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{progress.rb → Progress.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{serial_port.rb → SerialPort.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{session.rb → Session.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{session_state.rb → SessionState.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{session_type.rb → SessionType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{shared_folder.rb → SharedFolder.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{snapshot.rb → Snapshot.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{storage_bus.rb → StorageBus.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{storage_controller.rb → StorageController.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{storage_controller_type.rb → StorageControllerType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{system_properties.rb → SystemProperties.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{usb_controller.rb → USBController.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{usb_device.rb → USBDevice.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{usb_device_filter.rb → USBDeviceFilter.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{usb_device_filter_action.rb → USBDeviceFilterAction.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{usb_device_state.rb → USBDeviceState.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{vrde_server.rb → VRDEServer.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{virtualbox.rb → VirtualBox.rb} +1 -1
- data/lib/virtualbox/com/interface/4.0.x/{virtual_box_error_info.rb → VirtualBoxErrorInfo.rb} +3 -1
- data/lib/virtualbox/com/interface/4.0.x/{virtual_system_description.rb → VirtualSystemDescription.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{virtual_system_description_type.rb → VirtualSystemDescriptionType.rb} +0 -0
- data/lib/virtualbox/com/interface/4.0.x/{virtual_system_description_value_type.rb → VirtualSystemDescriptionValueType.rb} +0 -0
- data/lib/virtualbox/com/interface/{3.2.x/access_mode.rb → 4.1.x/AccessMode.rb} +2 -2
- data/lib/virtualbox/com/interface/4.1.x/AdditionsFacility.rb +17 -0
- data/lib/virtualbox/com/interface/4.1.x/AdditionsFacilityClass.rb +17 -0
- data/lib/virtualbox/com/interface/4.1.x/AdditionsFacilityStatus.rb +19 -0
- data/lib/virtualbox/com/interface/4.1.x/AdditionsFacilityType.rb +17 -0
- data/lib/virtualbox/com/interface/4.1.x/AdditionsRunLevelType.rb +14 -0
- data/lib/virtualbox/com/interface/{3.2.x/appliance.rb → 4.1.x/Appliance.rb} +5 -4
- data/lib/virtualbox/com/interface/{3.1.x/audio_adapter.rb → 4.1.x/AudioAdapter.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/audio_controller_type.rb → 4.1.x/AudioControllerType.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.2.x/audio_driver_type.rb → 4.1.x/AudioDriverType.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/vrdp_auth_type.rb → 4.1.x/AuthType.rb} +3 -3
- data/lib/virtualbox/com/interface/{3.1.x/bios_boot_menu_mode.rb → 4.1.x/BIOSBootMenuMode.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.2.x/bios_settings.rb → 4.1.x/BIOSSettings.rb} +2 -2
- data/lib/virtualbox/com/interface/4.1.x/BandwidthControl.rb +18 -0
- data/lib/virtualbox/com/interface/4.1.x/BandwidthGroup.rb +16 -0
- data/lib/virtualbox/com/interface/4.1.x/BandwidthGroupType.rb +11 -0
- data/lib/virtualbox/com/interface/4.1.x/ChipsetType.rb +11 -0
- data/lib/virtualbox/com/interface/4.1.x/CleanupMode.rb +12 -0
- data/lib/virtualbox/com/interface/{3.2.x/clipboard_mode.rb → 4.1.x/ClipboardMode.rb} +2 -2
- data/lib/virtualbox/com/interface/4.1.x/CloneMode.rb +13 -0
- data/lib/virtualbox/com/interface/4.1.x/CloneOptions.rb +14 -0
- data/lib/virtualbox/com/interface/{3.1.x/console.rb → 4.1.x/Console.rb} +10 -7
- data/lib/virtualbox/com/interface/{3.2.x/cpu_property_type.rb → 4.1.x/CpuPropertyType.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/dhcp_server.rb → 4.1.x/DHCPServer.rb} +2 -2
- data/lib/virtualbox/com/interface/4.1.x/DataType.rb +11 -0
- data/lib/virtualbox/com/interface/{3.1.x/device_type.rb → 4.1.x/DeviceType.rb} +2 -2
- data/lib/virtualbox/com/interface/4.1.x/DirectoryCreateFlag.rb +12 -0
- data/lib/virtualbox/com/interface/4.1.x/DirectoryOpenFlag.rb +11 -0
- data/lib/virtualbox/com/interface/{3.2.x/guest.rb → 4.1.x/EventSource.rb} +4 -4
- data/lib/virtualbox/com/interface/4.1.x/ExecuteProcessFlag.rb +15 -0
- data/lib/virtualbox/com/interface/4.1.x/ExecuteProcessStatus.rb +19 -0
- data/lib/virtualbox/com/interface/4.1.x/FaultToleranceState.rb +11 -0
- data/lib/virtualbox/com/interface/{3.1.x/firmware_type.rb → 4.1.x/FirmwareType.rb} +2 -2
- data/lib/virtualbox/com/interface/4.1.x/Guest.rb +36 -0
- data/lib/virtualbox/com/interface/4.1.x/GuestDirEntry.rb +15 -0
- data/lib/virtualbox/com/interface/4.1.x/GuestDirEntryType.rb +14 -0
- data/lib/virtualbox/com/interface/{3.2.x/guest_os_type.rb → 4.1.x/GuestOSType.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/hw_virt_ex_property_type.rb → 4.1.x/HWVirtExPropertyType.rb} +4 -3
- data/lib/virtualbox/com/interface/{3.1.x/host.rb → 4.1.x/Host.rb} +8 -6
- data/lib/virtualbox/com/interface/{3.1.x/host_network_interface.rb → 4.1.x/HostNetworkInterface.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/host_network_interface_medium_type.rb → 4.1.x/HostNetworkInterfaceMediumType.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.2.x/host_network_interface_status.rb → 4.1.x/HostNetworkInterfaceStatus.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/host_network_interface_type.rb → 4.1.x/HostNetworkInterfaceType.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/host_usb_device.rb → 4.1.x/HostUSBDevice.rb} +4 -2
- data/lib/virtualbox/com/interface/{3.2.x/host_usb_device_filter.rb → 4.1.x/HostUSBDeviceFilter.rb} +4 -2
- data/lib/virtualbox/com/interface/4.1.x/ImportOptions.rb +12 -0
- data/lib/virtualbox/com/interface/{3.2.x/keyboard_hid_type.rb → 4.1.x/KeyboardHidType.rb} +2 -2
- data/lib/virtualbox/com/interface/4.1.x/LockType.rb +11 -0
- data/lib/virtualbox/com/interface/{3.2.x/machine.rb → 4.1.x/Machine.rb} +34 -15
- data/lib/virtualbox/com/interface/{3.1.x/machine_state.rb → 4.1.x/MachineState.rb} +1 -1
- data/lib/virtualbox/com/interface/{3.2.x/medium.rb → 4.1.x/Medium.rb} +5 -2
- data/lib/virtualbox/com/interface/{3.1.x/medium_attachment.rb → 4.1.x/MediumAttachment.rb} +6 -2
- data/lib/virtualbox/com/interface/{3.1.x/medium_format.rb → 4.1.x/MediumFormat.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/medium_state.rb → 4.1.x/MediumState.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.2.x/medium_type.rb → 4.1.x/MediumType.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/medium_variant.rb → 4.1.x/MediumVariant.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.2.x/nat_alias_mode.rb → 4.1.x/NATAliasMode.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.2.x/nat_engine.rb → 4.1.x/NATEngine.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.2.x/nat_protocol.rb → 4.1.x/NATProtocol.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/nsiexception.rb → 4.1.x/NSIException.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/nsisupports.rb → 4.1.x/NSISupports.rb} +4 -1
- data/lib/virtualbox/com/interface/{3.2.x/network_adapter.rb → 4.1.x/NetworkAdapter.rb} +11 -11
- data/lib/virtualbox/com/interface/4.1.x/NetworkAdapterPromiscModePolicy.rb +13 -0
- data/lib/virtualbox/com/interface/{3.1.x/network_adapter_type.rb → 4.1.x/NetworkAdapterType.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/network_attachment_type.rb → 4.1.x/NetworkAttachmentType.rb} +3 -3
- data/lib/virtualbox/com/interface/{3.2.x/parallel_port.rb → 4.1.x/ParallelPort.rb} +2 -2
- data/lib/virtualbox/com/interface/4.1.x/PciDeviceAttachment.rb +16 -0
- data/lib/virtualbox/com/interface/{3.2.x/pointing_hid_type.rb → 4.1.x/PointingHidType.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/port_mode.rb → 4.1.x/PortMode.rb} +1 -1
- data/lib/virtualbox/com/interface/4.1.x/ProcessOutputFlag.rb +12 -0
- data/lib/virtualbox/com/interface/{3.2.x/progress.rb → 4.1.x/Progress.rb} +3 -1
- data/lib/virtualbox/com/interface/{3.1.x/serial_port.rb → 4.1.x/SerialPort.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.2.x/session.rb → 4.1.x/Session.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/session_state.rb → 4.1.x/SessionState.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/session_type.rb → 4.1.x/SessionType.rb} +3 -3
- data/lib/virtualbox/com/interface/4.1.x/SettingsVersion.rb +25 -0
- data/lib/virtualbox/com/interface/{3.1.x/shared_folder.rb → 4.1.x/SharedFolder.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/snapshot.rb → 4.1.x/Snapshot.rb} +3 -2
- data/lib/virtualbox/com/interface/{3.2.x/storage_bus.rb → 4.1.x/StorageBus.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.2.x/storage_controller.rb → 4.1.x/StorageController.rb} +3 -2
- data/lib/virtualbox/com/interface/{3.2.x/storage_controller_type.rb → 4.1.x/StorageControllerType.rb} +2 -2
- data/lib/virtualbox/com/interface/4.1.x/StorageDeviceChangedEvent.rb +14 -0
- data/lib/virtualbox/com/interface/{3.2.x/system_properties.rb → 4.1.x/SystemProperties.rb} +8 -6
- data/lib/virtualbox/com/interface/{3.2.x/usb_controller.rb → 4.1.x/USBController.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/usb_device.rb → 4.1.x/USBDevice.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.1.x/usb_device_filter.rb → 4.1.x/USBDeviceFilter.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.2.x/usb_device_filter_action.rb → 4.1.x/USBDeviceFilterAction.rb} +2 -2
- data/lib/virtualbox/com/interface/{3.2.x/usb_device_state.rb → 4.1.x/USBDeviceState.rb} +2 -2
- data/lib/virtualbox/com/interface/4.1.x/VRDEServer.rb +23 -0
- data/lib/virtualbox/com/interface/{3.2.x/virtualbox.rb → 4.1.x/VirtualBox.rb} +13 -27
- data/lib/virtualbox/com/interface/{3.2.x/virtual_box_error_info.rb → 4.1.x/VirtualBoxErrorInfo.rb} +4 -2
- data/lib/virtualbox/com/interface/{3.2.x/virtual_system_description.rb → 4.1.x/VirtualSystemDescription.rb} +2 -2
- data/lib/virtualbox/com/interface/4.1.x/VirtualSystemDescriptionType.rb +34 -0
- data/lib/virtualbox/com/interface/{3.2.x/virtual_system_description_value_type.rb → 4.1.x/VirtualSystemDescriptionValueType.rb} +1 -1
- data/lib/virtualbox/com/util.rb +30 -8
- data/lib/virtualbox/exceptions.rb +14 -13
- data/lib/virtualbox/extra_data.rb +2 -0
- data/lib/virtualbox/hard_drive.rb +1 -1
- data/lib/virtualbox/host_network_interface.rb +1 -1
- data/lib/virtualbox/lib.rb +2 -0
- data/lib/virtualbox/medium.rb +2 -0
- data/lib/virtualbox/network_adapter.rb +6 -22
- data/lib/virtualbox/proxies.rb +6 -0
- data/lib/virtualbox/system_properties.rb +0 -1
- data/lib/virtualbox/version.rb +28 -30
- data/lib/virtualbox/vm.rb +75 -55
- data/test/test_helper.rb +2 -5
- data/test/virtualbox/abstract_model/attributable_test.rb +22 -0
- data/test/virtualbox/abstract_model/relatable_test.rb +21 -0
- data/test/virtualbox/abstract_model_test.rb +1 -8
- data/test/virtualbox/com/abstract_enum_test.rb +1 -1
- data/test/virtualbox/com/ffi/interface_test.rb +9 -6
- data/test/virtualbox/com/ffi/util_test.rb +0 -11
- data/test/virtualbox/com/implementer/ffi_test.rb +7 -21
- data/test/virtualbox/com/util_test.rb +0 -10
- data/test/virtualbox/host_network_interface_test.rb +1 -1
- data/test/virtualbox/network_adapter_test.rb +6 -32
- data/test/virtualbox/version_test.rb +1 -5
- data/test/virtualbox/vm_test.rb +11 -17
- data/virtualbox.gemspec +4 -2
- metadata +224 -250
- data/lib/virtualbox/com/ffi/interfaces.rb +0 -64
- data/lib/virtualbox/com/interface/3.1.x/access_mode.rb +0 -11
- data/lib/virtualbox/com/interface/3.1.x/appliance.rb +0 -22
- data/lib/virtualbox/com/interface/3.1.x/audio_driver_type.rb +0 -11
- data/lib/virtualbox/com/interface/3.1.x/bios_settings.rb +0 -21
- data/lib/virtualbox/com/interface/3.1.x/clipboard_mode.rb +0 -11
- data/lib/virtualbox/com/interface/3.1.x/cpu_property_type.rb +0 -11
- data/lib/virtualbox/com/interface/3.1.x/guest_os_type.rb +0 -23
- data/lib/virtualbox/com/interface/3.1.x/host_network_interface_status.rb +0 -11
- data/lib/virtualbox/com/interface/3.1.x/host_usb_device_filter.rb +0 -13
- data/lib/virtualbox/com/interface/3.1.x/machine.rb +0 -105
- data/lib/virtualbox/com/interface/3.1.x/medium.rb +0 -50
- data/lib/virtualbox/com/interface/3.1.x/medium_type.rb +0 -11
- data/lib/virtualbox/com/interface/3.1.x/network_adapter.rb +0 -30
- data/lib/virtualbox/com/interface/3.1.x/parallel_port.rb +0 -17
- data/lib/virtualbox/com/interface/3.1.x/progress.rb +0 -63
- data/lib/virtualbox/com/interface/3.1.x/session.rb +0 -18
- data/lib/virtualbox/com/interface/3.1.x/storage_bus.rb +0 -11
- data/lib/virtualbox/com/interface/3.1.x/storage_controller.rb +0 -23
- data/lib/virtualbox/com/interface/3.1.x/storage_controller_type.rb +0 -11
- data/lib/virtualbox/com/interface/3.1.x/system_properties.rb +0 -37
- data/lib/virtualbox/com/interface/3.1.x/usb_controller.rb +0 -20
- data/lib/virtualbox/com/interface/3.1.x/usb_device_filter_action.rb +0 -11
- data/lib/virtualbox/com/interface/3.1.x/usb_device_state.rb +0 -11
- data/lib/virtualbox/com/interface/3.1.x/virtual_box_error_info.rb +0 -17
- data/lib/virtualbox/com/interface/3.1.x/virtual_system_description.rb +0 -19
- data/lib/virtualbox/com/interface/3.1.x/virtual_system_description_type.rb +0 -14
- data/lib/virtualbox/com/interface/3.1.x/virtual_system_description_value_type.rb +0 -11
- data/lib/virtualbox/com/interface/3.1.x/virtualbox.rb +0 -67
- data/lib/virtualbox/com/interface/3.1.x/vrdp_server.rb +0 -19
- data/lib/virtualbox/com/interface/3.2.x/audio_adapter.rb +0 -15
- data/lib/virtualbox/com/interface/3.2.x/audio_controller_type.rb +0 -11
- data/lib/virtualbox/com/interface/3.2.x/bios_boot_menu_mode.rb +0 -11
- data/lib/virtualbox/com/interface/3.2.x/console.rb +0 -50
- data/lib/virtualbox/com/interface/3.2.x/device_type.rb +0 -11
- data/lib/virtualbox/com/interface/3.2.x/dhcp_server.rb +0 -22
- data/lib/virtualbox/com/interface/3.2.x/firmware_type.rb +0 -11
- data/lib/virtualbox/com/interface/3.2.x/host.rb +0 -43
- data/lib/virtualbox/com/interface/3.2.x/host_network_interface.rb +0 -30
- data/lib/virtualbox/com/interface/3.2.x/host_network_interface_medium_type.rb +0 -11
- data/lib/virtualbox/com/interface/3.2.x/host_network_interface_type.rb +0 -11
- data/lib/virtualbox/com/interface/3.2.x/host_usb_device.rb +0 -13
- data/lib/virtualbox/com/interface/3.2.x/hw_virt_ex_property_type.rb +0 -11
- data/lib/virtualbox/com/interface/3.2.x/machine_state.rb +0 -14
- data/lib/virtualbox/com/interface/3.2.x/medium_attachment.rb +0 -18
- data/lib/virtualbox/com/interface/3.2.x/medium_format.rb +0 -18
- data/lib/virtualbox/com/interface/3.2.x/medium_state.rb +0 -11
- data/lib/virtualbox/com/interface/3.2.x/medium_variant.rb +0 -11
- data/lib/virtualbox/com/interface/3.2.x/network_adapter_type.rb +0 -11
- data/lib/virtualbox/com/interface/3.2.x/network_attachment_type.rb +0 -11
- data/lib/virtualbox/com/interface/3.2.x/nsiexception.rb +0 -23
- data/lib/virtualbox/com/interface/3.2.x/nsisupports.rb +0 -15
- data/lib/virtualbox/com/interface/3.2.x/port_mode.rb +0 -11
- data/lib/virtualbox/com/interface/3.2.x/serial_port.rb +0 -19
- data/lib/virtualbox/com/interface/3.2.x/session_state.rb +0 -11
- data/lib/virtualbox/com/interface/3.2.x/session_type.rb +0 -11
- data/lib/virtualbox/com/interface/3.2.x/shared_folder.rb +0 -17
- data/lib/virtualbox/com/interface/3.2.x/snapshot.rb +0 -20
- data/lib/virtualbox/com/interface/3.2.x/usb_device.rb +0 -24
- data/lib/virtualbox/com/interface/3.2.x/usb_device_filter.rb +0 -23
- data/lib/virtualbox/com/interface/3.2.x/virtual_system_description_type.rb +0 -14
- data/lib/virtualbox/com/interface/3.2.x/vrdp_auth_type.rb +0 -11
- data/lib/virtualbox/com/interface/3.2.x/vrdp_server.rb +0 -21
- data/lib/virtualbox/ext/glob_loader.rb +0 -35
data/Rakefile
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
require "rbconfig"
|
|
1
2
|
require "rubygems"
|
|
2
3
|
require "bundler/setup"
|
|
3
4
|
require "rake/testtask"
|
|
4
5
|
|
|
5
6
|
require "cucumber"
|
|
6
7
|
require "cucumber/rake/task"
|
|
7
|
-
require "yard"
|
|
8
8
|
Bundler::GemHelper.install_tasks
|
|
9
9
|
|
|
10
|
+
include Rake::DSL
|
|
11
|
+
|
|
10
12
|
task :default => "test:units"
|
|
11
13
|
|
|
12
14
|
namespace :test do
|
|
@@ -31,7 +33,11 @@ namespace :test do
|
|
|
31
33
|
rescue LoadError; end
|
|
32
34
|
end
|
|
33
35
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
if RbConfig::CONFIG["host_os"] !~ /^darwin11/
|
|
37
|
+
# YARD is broken on Lion
|
|
38
|
+
require "yard"
|
|
39
|
+
YARD::Rake::YardocTask.new do |t|
|
|
40
|
+
t.options = ['--main', 'Readme.md', '--markup', 'markdown']
|
|
41
|
+
t.options += ['--title', 'VirtualBox Ruby Library Documentation']
|
|
42
|
+
end
|
|
43
|
+
end
|
data/TODO.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# VirtualBox 4.1 TODOs:
|
|
2
|
+
|
|
3
|
+
* NetworkAdapter uses `network_adapter_counter` which is no longer supported.
|
|
4
|
+
It needs to use `get_max_network_adapters` instead.
|
|
5
|
+
* NetworkAdapter `attach_to_*` methods are gone. Use `attachment_type` property
|
|
6
|
+
instead.
|
|
7
|
+
* Appliance import must supply import options
|
data/lib/virtualbox.rb
CHANGED
|
@@ -1,11 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
libdir = File.join(File.dirname(__FILE__), "virtualbox")
|
|
3
|
-
require File.expand_path("ext/glob_loader", libdir)
|
|
1
|
+
require 'virtualbox/version'
|
|
4
2
|
|
|
5
|
-
# Load them up
|
|
6
|
-
VirtualBox::GlobLoader.glob_require(libdir, %w{ext/logger ext/platform ext/subclass_listing ext/byte_normalizer com abstract_model medium})
|
|
7
|
-
|
|
8
|
-
# Setup the top-level module methods
|
|
9
3
|
module VirtualBox
|
|
10
|
-
|
|
4
|
+
autoload :AbstractModel, 'virtualbox/abstract_model'
|
|
5
|
+
autoload :Appliance, 'virtualbox/appliance'
|
|
6
|
+
autoload :AudioAdapter, 'virtualbox/audio_adapter'
|
|
7
|
+
autoload :BIOS, 'virtualbox/bios'
|
|
8
|
+
autoload :COM, 'virtualbox/com'
|
|
9
|
+
autoload :CPU, 'virtualbox/cpu'
|
|
10
|
+
autoload :DHCPServer, 'virtualbox/dhcp_server'
|
|
11
|
+
autoload :DVD, 'virtualbox/dvd'
|
|
12
|
+
autoload :ExtraData, 'virtualbox/extra_data'
|
|
13
|
+
autoload :Exceptions, 'virtualbox/exceptions'
|
|
14
|
+
autoload :ForwardedPort, 'virtualbox/forwarded_port'
|
|
15
|
+
autoload :Global, 'virtualbox/global'
|
|
16
|
+
autoload :HardDrive, 'virtualbox/hard_drive'
|
|
17
|
+
autoload :Host, 'virtualbox/host'
|
|
18
|
+
autoload :HostNetworkInterface, 'virtualbox/host_network_interface'
|
|
19
|
+
autoload :HWVirtualization, 'virtualbox/hw_virtualization'
|
|
20
|
+
autoload :Lib, 'virtualbox/lib'
|
|
21
|
+
autoload :Media, 'virtualbox/media'
|
|
22
|
+
autoload :Medium, 'virtualbox/medium'
|
|
23
|
+
autoload :MediumAttachment, 'virtualbox/medium_attachment'
|
|
24
|
+
autoload :NATEngine, 'virtualbox/nat_engine'
|
|
25
|
+
autoload :NATForwardedPort, 'virtualbox/nat_forwarded_port'
|
|
26
|
+
autoload :NetworkAdapter, 'virtualbox/network_adapter'
|
|
27
|
+
autoload :Proxies, 'virtualbox/proxies'
|
|
28
|
+
autoload :SharedFolder, 'virtualbox/shared_folder'
|
|
29
|
+
autoload :Snapshot, 'virtualbox/snapshot'
|
|
30
|
+
autoload :StorageController, 'virtualbox/storage_controller'
|
|
31
|
+
autoload :SystemProperties, 'virtualbox/system_properties'
|
|
32
|
+
autoload :USBController, 'virtualbox/usb_controller'
|
|
33
|
+
autoload :USBDeviceFilter, 'virtualbox/usb_device_filter'
|
|
34
|
+
autoload :VirtualSystemDescription, 'virtualbox/virtual_system_description'
|
|
35
|
+
autoload :VM, 'virtualbox/vm'
|
|
36
|
+
autoload :VRDEServer, 'virtualbox/vrde_server'
|
|
11
37
|
end
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
end
|
|
1
|
+
require 'virtualbox/abstract_model/attributable'
|
|
2
|
+
require 'virtualbox/abstract_model/interface_attributes'
|
|
3
|
+
require 'virtualbox/abstract_model/dirty'
|
|
4
|
+
require 'virtualbox/abstract_model/relatable'
|
|
5
|
+
require 'virtualbox/abstract_model/validatable'
|
|
6
|
+
require 'virtualbox/ext/logger'
|
|
8
7
|
|
|
9
8
|
module VirtualBox
|
|
10
9
|
# AbstractModel is the base class used for most of virtualbox's classes.
|
|
@@ -218,7 +217,7 @@ module VirtualBox
|
|
|
218
217
|
# Overwrites {Attributable#write_attribute} to set the dirty state of
|
|
219
218
|
# the written attribute. See {Dirty#set_dirty!} as well.
|
|
220
219
|
def write_attribute(name, value)
|
|
221
|
-
set_dirty!(name, read_attribute(name), value)
|
|
220
|
+
set_dirty!(name, read_attribute(name), value)
|
|
222
221
|
super
|
|
223
222
|
end
|
|
224
223
|
|
|
@@ -153,7 +153,7 @@ module VirtualBox
|
|
|
153
153
|
# a custom populate key to use for {Attributable#populate_attributes}
|
|
154
154
|
def attribute(name, options = {})
|
|
155
155
|
name = name.to_sym
|
|
156
|
-
attributes[name] = defined?(@__attribute_scope) ? @__attribute_scope : {}
|
|
156
|
+
attributes[name] = defined?(@__attribute_scope) ? @__attribute_scope.dup : {}
|
|
157
157
|
attributes[name].merge!(options)
|
|
158
158
|
|
|
159
159
|
# Create the method for reading this attribute
|
|
@@ -225,6 +225,20 @@ module VirtualBox
|
|
|
225
225
|
end
|
|
226
226
|
end
|
|
227
227
|
|
|
228
|
+
# Reset attributes which basically causes all lazy attributes to
|
|
229
|
+
# be reset. This forces them to reload when they're accessed.
|
|
230
|
+
def reset_attributes
|
|
231
|
+
# Find the lazy attributes
|
|
232
|
+
to_delete = []
|
|
233
|
+
attributes.each do |name, value|
|
|
234
|
+
to_delete << name if lazy_attribute?(name)
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
# Delete them!
|
|
238
|
+
to_delete.each { |key| attributes.delete(key) }
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
|
|
228
242
|
# Writes an attribute. This method ignores the `readonly` option
|
|
229
243
|
# on attribute definitions. This method is mostly meant for
|
|
230
244
|
# internal use on setting attributes (including readonly
|
|
@@ -245,7 +259,7 @@ module VirtualBox
|
|
|
245
259
|
assert_version_match(options[:version], VirtualBox.version) if options[:version]
|
|
246
260
|
if lazy_attribute?(name) && !loaded_attribute?(name)
|
|
247
261
|
# Load the lazy attribute
|
|
248
|
-
load_attribute(name.to_sym)
|
|
262
|
+
attributes[name] = load_attribute(name.to_sym)
|
|
249
263
|
end
|
|
250
264
|
|
|
251
265
|
if attributes[name].nil?
|
|
@@ -19,6 +19,15 @@ module VirtualBox
|
|
|
19
19
|
# @param [Symbol] key The attribute to load
|
|
20
20
|
# @param [VirtualBox::COM::Interface] interface The interface
|
|
21
21
|
def load_interface_attribute(key, interface)
|
|
22
|
+
value = read_interface_attribute(key, interface)
|
|
23
|
+
return if !value
|
|
24
|
+
|
|
25
|
+
write_attribute(key, value)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Reads a single interface attribute without loading it into the
|
|
29
|
+
# given key.
|
|
30
|
+
def read_interface_attribute(key, interface)
|
|
22
31
|
# Return unless we have a valid interface attribute with a getter
|
|
23
32
|
return unless has_attribute?(key)
|
|
24
33
|
options = self.class.attributes[key.to_sym]
|
|
@@ -29,7 +38,7 @@ module VirtualBox
|
|
|
29
38
|
|
|
30
39
|
# Convert the getter to a proc and call it
|
|
31
40
|
getter = spec_to_proc(getter)
|
|
32
|
-
|
|
41
|
+
getter.call(self, interface, key)
|
|
33
42
|
end
|
|
34
43
|
|
|
35
44
|
# Saves all the attributes which have an interface setter.
|
|
@@ -182,6 +182,17 @@ module VirtualBox
|
|
|
182
182
|
end
|
|
183
183
|
end
|
|
184
184
|
|
|
185
|
+
# Resets a relationship. This resets all lazy relationships.
|
|
186
|
+
def reset_relationships
|
|
187
|
+
to_delete = []
|
|
188
|
+
relationship_data.each do |key, value|
|
|
189
|
+
to_delete << key if lazy_relationship?(key)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Delete them!
|
|
193
|
+
to_delete.each { |key| relationship_data.delete(key) }
|
|
194
|
+
end
|
|
195
|
+
|
|
185
196
|
# Reads a relationship. This is equivalent to {Attributable#read_attribute},
|
|
186
197
|
# but for relationships.
|
|
187
198
|
def read_relationship(name)
|
data/lib/virtualbox/appliance.rb
CHANGED
|
@@ -41,7 +41,7 @@ module VirtualBox
|
|
|
41
41
|
# it will be yielded every percent that the operation progresses. This can be
|
|
42
42
|
# done to check the progress of the import.
|
|
43
43
|
def import(&block)
|
|
44
|
-
interface.import_machines.wait(&block)
|
|
44
|
+
interface.import_machines([:keep_all_macs, :keep_all_nats]).wait(&block)
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
# Exports the machines to the given path. If a block is given, it will be yielded
|
data/lib/virtualbox/com.rb
CHANGED
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
module VirtualBox
|
|
2
2
|
module COM
|
|
3
3
|
WSTRING = :unicode_string
|
|
4
|
+
T_INT8 = :int8
|
|
5
|
+
T_UINT8 = :uint8
|
|
4
6
|
T_INT32 = :int
|
|
5
7
|
T_INT64 = :long
|
|
6
|
-
T_ULONG = :ulong
|
|
7
|
-
T_UINT8 = :uchar
|
|
8
8
|
T_UINT16 = :ushort
|
|
9
9
|
T_UINT32 = :uint
|
|
10
10
|
T_UINT64 = :ulong
|
|
11
11
|
T_BOOL = :char
|
|
12
|
+
|
|
13
|
+
autoload :AbstractEnum, 'virtualbox/com/abstract_enum'
|
|
14
|
+
autoload :AbstractImplementer, 'virtualbox/com/abstract_implementer'
|
|
15
|
+
autoload :AbstractInterface, 'virtualbox/com/abstract_interface'
|
|
16
|
+
autoload :BaseInterface, 'virtualbox/com/base_interface'
|
|
17
|
+
autoload :FFI, 'virtualbox/com/ffi'
|
|
18
|
+
autoload :FFIInterface, 'virtualbox/com/ffi_interface'
|
|
19
|
+
autoload :Implementer, 'virtualbox/com/implementer'
|
|
20
|
+
autoload :MSCOMInterface, 'virtualbox/com/mscom_interface'
|
|
21
|
+
autoload :NilInterface, 'virtualbox/com/nil_interface'
|
|
22
|
+
autoload :Util, 'virtualbox/com/util'
|
|
12
23
|
end
|
|
13
24
|
end
|
|
14
|
-
|
|
15
|
-
# The com directory of the gem
|
|
16
|
-
comdir = File.join(File.dirname(__FILE__), 'com')
|
|
17
|
-
|
|
18
|
-
# Require the abstract interface first then glob load all
|
|
19
|
-
# of the interfaces
|
|
20
|
-
require File.expand_path("abstract_interface", comdir)
|
|
21
|
-
require File.expand_path("abstract_enum", comdir)
|
|
22
|
-
VirtualBox::GlobLoader.glob_require(File.join(comdir, "interface"))
|
|
23
|
-
VirtualBox::GlobLoader.glob_require(comdir, %w{base_interface abstract_interface abstract_implementer util ffi/interface ffi/util implementer/base})
|
|
@@ -11,23 +11,39 @@ module VirtualBox
|
|
|
11
11
|
# can be indexed with `[]` and an integer and returns a value of
|
|
12
12
|
# some sort. If value is left nil, it will return the current mapping
|
|
13
13
|
def map(value = nil)
|
|
14
|
-
|
|
14
|
+
if value
|
|
15
|
+
# Convert the array to a hash of equal structure
|
|
16
|
+
if value.is_a?(Array)
|
|
17
|
+
result = {}
|
|
18
|
+
value.each_index do |i|
|
|
19
|
+
result[value[i]] = i
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
value = result
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Store both the map and the reverse map since both lookups
|
|
26
|
+
# are frequently used.
|
|
27
|
+
@map = value
|
|
28
|
+
@reverse_map = @map.invert
|
|
29
|
+
end
|
|
30
|
+
|
|
15
31
|
@map
|
|
16
32
|
end
|
|
17
33
|
|
|
18
34
|
# Returns the symbol associatd with the given key
|
|
19
|
-
def [](
|
|
20
|
-
@
|
|
35
|
+
def [](index)
|
|
36
|
+
@reverse_map[index]
|
|
21
37
|
end
|
|
22
38
|
|
|
23
39
|
# Returns the index associated with a value
|
|
24
40
|
def index(key)
|
|
25
|
-
@map
|
|
41
|
+
@map[key]
|
|
26
42
|
end
|
|
27
43
|
|
|
28
44
|
# Iterate over the enum, yielding each item to a block.
|
|
29
45
|
def each
|
|
30
|
-
@map.each do |key|
|
|
46
|
+
@map.each do |key, value|
|
|
31
47
|
yield key
|
|
32
48
|
end
|
|
33
49
|
end
|
|
@@ -36,6 +36,17 @@ module VirtualBox
|
|
|
36
36
|
attr_reader :lib
|
|
37
37
|
|
|
38
38
|
class << self
|
|
39
|
+
# This sets the parent class type. This defaults to NSISupports, but
|
|
40
|
+
# can be explicitly set to nil (no parent) if necessary.
|
|
41
|
+
def parent(type=nil)
|
|
42
|
+
@parent = type
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Returns the parent.
|
|
46
|
+
def get_parent
|
|
47
|
+
defined?(@parent) ? @parent : :NSISupports
|
|
48
|
+
end
|
|
49
|
+
|
|
39
50
|
# Adds a function to the interface with the given name and function
|
|
40
51
|
# spec. The spec determines the arguments required, the order they
|
|
41
52
|
# are required in, and any out-arguments.
|
|
@@ -1,38 +1,7 @@
|
|
|
1
|
-
require 'thread'
|
|
2
|
-
|
|
3
1
|
module VirtualBox
|
|
4
2
|
module COM
|
|
5
3
|
class BaseInterface
|
|
6
|
-
|
|
7
|
-
@task_queue = Queue.new
|
|
8
|
-
|
|
9
|
-
@lib_thread = Thread.new(@task_queue) do |queue|
|
|
10
|
-
while true
|
|
11
|
-
task, result = queue.pop
|
|
12
|
-
|
|
13
|
-
# Run the task, set the return value, and run the waiter
|
|
14
|
-
# which will simply finish that thread
|
|
15
|
-
result << task.call
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# This function takes a block and runs it on a thread which is
|
|
21
|
-
# guaranteed to be the same since the first time this is
|
|
22
|
-
# called. This is required by the MSCOM implementation and is a
|
|
23
|
-
# good idea in general so that multiple API calls aren't firing
|
|
24
|
-
# at once.
|
|
25
|
-
def on_lib_thread(&task)
|
|
26
|
-
# If we're already on the lib thread, then just run it!
|
|
27
|
-
return task.call if Thread.current == @lib_thread
|
|
28
|
-
|
|
29
|
-
# Add the task to the queue
|
|
30
|
-
result = Queue.new
|
|
31
|
-
@task_queue << [task, result]
|
|
32
|
-
|
|
33
|
-
# Pop the result off of the result queue
|
|
34
|
-
result.pop
|
|
35
|
-
end
|
|
4
|
+
# Nothing for now
|
|
36
5
|
end
|
|
37
6
|
end
|
|
38
7
|
end
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
require 'ffi'
|
|
2
|
+
|
|
1
3
|
module VirtualBox
|
|
2
4
|
module COM
|
|
3
5
|
module FFI
|
|
6
|
+
autoload :Interface, 'virtualbox/com/ffi/interface'
|
|
7
|
+
autoload :Util, 'virtualbox/com/ffi/util'
|
|
8
|
+
|
|
9
|
+
extend ::FFI::Library
|
|
10
|
+
|
|
4
11
|
# Callback types for VBOXXPCOMC
|
|
5
12
|
callback :pfnGetVersion, [], :uint
|
|
6
13
|
callback :pfnComInitialize, [:string, :pointer, :string, :pointer], :void
|
|
@@ -3,29 +3,6 @@ require 'ffi'
|
|
|
3
3
|
module VirtualBox
|
|
4
4
|
module COM
|
|
5
5
|
module FFI
|
|
6
|
-
extend ::FFI::Library
|
|
7
|
-
|
|
8
|
-
# FFI specific types
|
|
9
|
-
NSRESULT_TYPE = :uint
|
|
10
|
-
|
|
11
|
-
# Creates all the FFI classes for a given version.
|
|
12
|
-
def self.for_version(version, &block)
|
|
13
|
-
@__module = Module.new
|
|
14
|
-
::VirtualBox::COM::Util.set_interface_version(version)
|
|
15
|
-
const_set(::VirtualBox::COM::Util.version_const, @__module)
|
|
16
|
-
instance_eval(&block)
|
|
17
|
-
@__module = Kernel
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# Returns a Class which creates an FFI interface to the specified
|
|
21
|
-
# com interface and potentially a parent class as well.
|
|
22
|
-
def self.create_interface(interface, parent=nil)
|
|
23
|
-
klass = Class.new(Interface)
|
|
24
|
-
@__module.const_set(interface, klass)
|
|
25
|
-
klass.com_interface(interface, parent)
|
|
26
|
-
klass
|
|
27
|
-
end
|
|
28
|
-
|
|
29
6
|
# Represents a VirtualBox XPCOM C interface, which is a C struct
|
|
30
7
|
# which emulates an object (a struct with function pointers
|
|
31
8
|
# and getters/setters). This class does **a lot** of magic which pretty
|
|
@@ -36,6 +13,9 @@ module VirtualBox
|
|
|
36
13
|
class Interface
|
|
37
14
|
extend ::FFI::Library
|
|
38
15
|
|
|
16
|
+
# FFI specific types
|
|
17
|
+
NSRESULT_TYPE = :uint
|
|
18
|
+
|
|
39
19
|
attr_reader :vtbl_parent
|
|
40
20
|
attr_reader :vtbl
|
|
41
21
|
|
|
@@ -46,11 +26,11 @@ module VirtualBox
|
|
|
46
26
|
# XPCOM C structs are setup, the properties are first, in
|
|
47
27
|
# `GetFoo` and `SetFoo` format. And the functions are next. They are
|
|
48
28
|
# put into the struct in the order defined in the {AbstractInterface}.
|
|
49
|
-
def com_interface(interface
|
|
29
|
+
def com_interface(interface)
|
|
50
30
|
# Create the parent class and vtbl class
|
|
51
31
|
interface = ::VirtualBox::COM::Util.versioned_interface(interface)
|
|
52
32
|
define_vtbl_parent_for_interface(interface)
|
|
53
|
-
define_vtbl_for_interface(interface
|
|
33
|
+
define_vtbl_for_interface(interface)
|
|
54
34
|
end
|
|
55
35
|
|
|
56
36
|
# Creates the parent of the vtbl class associated with a given
|
|
@@ -64,7 +44,10 @@ module VirtualBox
|
|
|
64
44
|
end
|
|
65
45
|
|
|
66
46
|
# Creates the vtbl class associated with a given interface.
|
|
67
|
-
def define_vtbl_for_interface(interface
|
|
47
|
+
def define_vtbl_for_interface(interface)
|
|
48
|
+
# Get the parent for the interface
|
|
49
|
+
parent = interface.get_parent
|
|
50
|
+
|
|
68
51
|
# Define the properties, then the functions, since thats the order
|
|
69
52
|
# the FFI structs are in
|
|
70
53
|
layout_args.clear
|
|
@@ -88,7 +71,7 @@ module VirtualBox
|
|
|
88
71
|
def define_interface_parent(parent)
|
|
89
72
|
return if parent.nil?
|
|
90
73
|
|
|
91
|
-
parent_klass =
|
|
74
|
+
parent_klass = Util.versioned_interface(parent).const_get("Vtbl")
|
|
92
75
|
layout_args << [:superklass, parent_klass]
|
|
93
76
|
end
|
|
94
77
|
|
|
@@ -18,7 +18,36 @@ module VirtualBox
|
|
|
18
18
|
#
|
|
19
19
|
# @return [Class]
|
|
20
20
|
def versioned_interface(interface)
|
|
21
|
-
::VirtualBox::COM::
|
|
21
|
+
version = ::VirtualBox::COM::Util.version
|
|
22
|
+
loaded_interfaces[version] ||= {}
|
|
23
|
+
loaded_interfaces[version][interface] ||= load_interface(interface)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# This keeps a hash of all the loaded interface classes by both
|
|
27
|
+
# version and name. Example:
|
|
28
|
+
#
|
|
29
|
+
# loaded_interfaces["4.0.x"][:VirtualBox]
|
|
30
|
+
#
|
|
31
|
+
def loaded_interfaces
|
|
32
|
+
@loaded_interfaces ||= {}
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Loads an interface with the current version.
|
|
36
|
+
def load_interface(interface)
|
|
37
|
+
@current_constant ||= 1
|
|
38
|
+
|
|
39
|
+
# Create a new class that is an interface
|
|
40
|
+
klass = Class.new(Interface)
|
|
41
|
+
|
|
42
|
+
# Note that the klass must exist in a real constant path
|
|
43
|
+
# because FFI gem exists by climbing up the full path of the
|
|
44
|
+
# class. Dumb.
|
|
45
|
+
const_set("FFIClass#{@current_constant}", klass)
|
|
46
|
+
@current_constant += 1
|
|
47
|
+
|
|
48
|
+
# Create the actual interface on this empty class and return!
|
|
49
|
+
klass.com_interface(interface)
|
|
50
|
+
klass
|
|
22
51
|
end
|
|
23
52
|
|
|
24
53
|
# Converts a function spec from {AbstractInterface} to an FFI
|
|
@@ -55,7 +84,7 @@ module VirtualBox
|
|
|
55
84
|
elsif interface.superclass == COM::AbstractEnum
|
|
56
85
|
T_UINT32
|
|
57
86
|
end
|
|
58
|
-
rescue NameError
|
|
87
|
+
rescue NameError,LoadError
|
|
59
88
|
# Default to a pointer, since not all interfaces are implemented
|
|
60
89
|
:pointer
|
|
61
90
|
end
|
|
@@ -79,6 +108,7 @@ module VirtualBox
|
|
|
79
108
|
# @return [String]
|
|
80
109
|
def camelize(string)
|
|
81
110
|
special_cases = {
|
|
111
|
+
"api" => "API",
|
|
82
112
|
"os" => "OS",
|
|
83
113
|
"dhcp" => "DHCP",
|
|
84
114
|
"dvd" => "DVD",
|