summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrediano Ziglio <fziglio@redhat.com>2019-07-29 12:12:13 +0100
committerFrediano Ziglio <fziglio@redhat.com>2019-08-29 16:59:22 +0100
commitcc07a70ef98fdaa792d65d87432cd27ff2270b85 (patch)
tree0f038fbf4e7c7d68e674ec402266d04bfa5ad8ec
parent8465c9b4d06a4a5e9eb87238a8cb885e2f60fef0 (diff)
Add API for adding shared CDyuri_propagate
Replace "share-cd" property.
-rw-r--r--src/spice-glib-sym-file1
-rw-r--r--src/spice-option.c6
-rw-r--r--src/usb-backend.c3
-rw-r--r--src/usb-device-manager.c72
-rw-r--r--src/usb-device-manager.h4
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, &param)) {
+ 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, &param)) {
+ 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