diff options
author | Frediano Ziglio <fziglio@redhat.com> | 2019-07-29 12:12:13 +0100 |
---|---|---|
committer | Frediano Ziglio <fziglio@redhat.com> | 2019-08-29 16:59:22 +0100 |
commit | cc07a70ef98fdaa792d65d87432cd27ff2270b85 (patch) | |
tree | 0f038fbf4e7c7d68e674ec402266d04bfa5ad8ec | |
parent | 8465c9b4d06a4a5e9eb87238a8cb885e2f60fef0 (diff) |
Add API for adding shared CDyuri_propagate
Replace "share-cd" property.
-rw-r--r-- | src/spice-glib-sym-file | 1 | ||||
-rw-r--r-- | src/spice-option.c | 6 | ||||
-rw-r--r-- | src/usb-backend.c | 3 | ||||
-rw-r--r-- | src/usb-device-manager.c | 72 | ||||
-rw-r--r-- | src/usb-device-manager.h | 4 |
5 files changed, 42 insertions, 44 deletions
diff --git a/src/spice-glib-sym-file b/src/spice-glib-sym-file index c3b2561..81ade37 100644 --- a/src/spice-glib-sym-file +++ b/src/spice-glib-sym-file @@ -159,6 +159,7 @@ spice_usb_device_manager_get_devices_with_filter spice_usb_device_manager_get_type spice_usb_device_manager_is_device_connected spice_usb_device_manager_is_redirecting +spice_usb_device_manager_add_emulated_cd spice_usbredir_channel_get_type spice_util_get_debug spice_util_get_version_string diff --git a/src/spice-option.c b/src/spice-option.c index 60185a7..2c5b654 100644 --- a/src/spice-option.c +++ b/src/spice-option.c @@ -296,7 +296,11 @@ void spice_set_session_option(SpiceSession *session) if (m) { gchar **name = cd_share_files; while (name && *name) { - g_object_set(m, "share-cd", *name, NULL); + GError *err = NULL; + if (!spice_usb_device_manager_add_emulated_cd(m, *name, &err)) { + fprintf(stderr, "Error creating emulated CD: %s\n", err->message); + g_error_free(err); + } name++; } } diff --git a/src/usb-backend.c b/src/usb-backend.c index c8651ac..067f9c5 100644 --- a/src/usb-backend.c +++ b/src/usb-backend.c @@ -552,9 +552,6 @@ SpiceUsbBackendDevice *spice_usb_backend_device_ref(SpiceUsbBackendDevice *dev) void spice_usb_backend_device_unref(SpiceUsbBackendDevice *dev) { - if (!dev) { - return; - } LOUD_DEBUG("%s >> %p(%d)", __FUNCTION__, dev, dev->ref_count); if (g_atomic_int_dec_and_test(&dev->ref_count)) { if (dev->libusb_device) { diff --git a/src/usb-device-manager.c b/src/usb-device-manager.c index 8011db4..0cc288d 100644 --- a/src/usb-device-manager.c +++ b/src/usb-device-manager.c @@ -75,7 +75,6 @@ enum { PROP_AUTO_CONNECT_FILTER, PROP_REDIRECT_ON_CONNECT, PROP_FREE_CHANNELS, - PROP_SHARE_CD }; enum @@ -434,30 +433,41 @@ static void spice_usb_device_manager_set_property(GObject *gobject, priv->redirect_on_connect = g_strdup(filter); break; } - case PROP_SHARE_CD: - { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec); + break; + } +} + + +gboolean +spice_usb_device_manager_add_emulated_cd(SpiceUsbDeviceManager *self, + const char *name, + GError **err) +{ #ifdef USE_USBREDIR - UsbCreateDeviceParameters param = { 0 }; - const gchar *name = g_value_get_string(value); - /* the string is temporary, no need to keep it */ - SPICE_DEBUG("share_cd set to %s", name); - if (name[0] == '!') { - name++; - param.device_param.create_cd.delete_on_eject = 1; - } - param.device_param.create_cd.filename = name; - if (!spice_usb_backend_create_device(priv->context, USB_DEV_TYPE_CD, ¶m)) { + SpiceUsbDeviceManagerPrivate *priv = self->priv; + UsbCreateDeviceParameters param = { 0 }; + /* the string is temporary, no need to keep it */ + SPICE_DEBUG("share_cd set to %s", name); + if (name[0] == '!') { + name++; + param.device_param.create_cd.delete_on_eject = 1; + } + param.device_param.create_cd.filename = name; + if (!spice_usb_backend_create_device(priv->context, USB_DEV_TYPE_CD, ¶m)) { + if (err) { + *err = param.error; + } else { g_warning(param.error->message); - spice_usb_device_manager_device_error(self, NULL, param.error); g_error_free(param.error); } -#endif - break; - } - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec); - break; + return FALSE; } + return TRUE; +#else + return FALSE; +#endif } static void spice_usb_device_manager_class_init(SpiceUsbDeviceManagerClass *klass) @@ -545,18 +555,6 @@ static void spice_usb_device_manager_class_init(SpiceUsbDeviceManagerClass *klas pspec); /** - * SpiceUsbDeviceManager:share-cd: - * - * Set a string specifying a filename (ISO) or physical CD/DVD device - * to share via USB after a Spice connection has been established. - * - */ - pspec = g_param_spec_string("share-cd", "Share ISO file or device as CD", - "File or device name to share", NULL, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); - g_object_class_install_property(gobject_class, PROP_SHARE_CD, pspec); - - /** * SpiceUsbDeviceManager:free-channels: * * Get the number of available channels for redirecting USB devices. @@ -968,16 +966,10 @@ static void spice_usb_device_manager_check_redir_on_connect( void spice_usb_device_manager_device_error( SpiceUsbDeviceManager *self, SpiceUsbDevice *device, GError *err) { - SpiceUsbDevice *dev = device; g_return_if_fail(SPICE_IS_USB_DEVICE_MANAGER(self)); - if (device == NULL) { - dev = g_new0(SpiceUsbDevice, 1); - dev->ref = 1; - } + g_return_if_fail(device != NULL); + g_signal_emit(self, signals[DEVICE_ERROR], 0, device, err); - if (device == NULL) { - spice_usb_device_unref(dev); - } } #endif diff --git a/src/usb-device-manager.h b/src/usb-device-manager.h index 773208f..edeef0a 100644 --- a/src/usb-device-manager.h +++ b/src/usb-device-manager.h @@ -142,6 +142,10 @@ spice_usb_device_manager_can_redirect_device(SpiceUsbDeviceManager *self, GError **err); gboolean spice_usb_device_manager_is_redirecting(SpiceUsbDeviceManager *self); +gboolean +spice_usb_device_manager_add_emulated_cd(SpiceUsbDeviceManager *self, + const char *cd, + GError **err); G_END_DECLS |