virtualbox 0.8.6 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- 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",
|