Codebase list virt-viewer / 9d851a4
file: add version field, raise an error if incompatibily The virt-viewer connection file can now have a version=0.5 field. If the virt-viewer version opening the connection doesn't provide at least that version, an error is raised with the version required. Marc-André Lureau 11 years ago
4 changed file(s) with 60 addition(s) and 9 deletion(s). Raw diff Collapse all Expand all
1919 */
2020
2121 #include <config.h>
22
23 #include <glib/gi18n.h>
24
2225 #include "virt-viewer-util.h"
2326 #include "virt-viewer-file.h"
2427
3336 * port=5900
3437 *
3538 * The current list of [virt-viewer] keys is:
39 * - version: string
3640 * - type: string, mandatory, values: "spice" (later "vnc" etc..)
3741 * - host: string
3842 * - port: int
9397 PROP_ENABLE_USB_AUTOSHARE,
9498 PROP_USB_FILTER,
9599 PROP_PROXY,
100 PROP_VERSION,
96101 };
97102
98103 VirtViewerFile*
522527 g_object_notify(G_OBJECT(self), "proxy");
523528 }
524529
530 gchar*
531 virt_viewer_file_get_version(VirtViewerFile* self)
532 {
533 return virt_viewer_file_get_string(self, "version");
534 }
535
536 void
537 virt_viewer_file_set_version(VirtViewerFile* self, const gchar* value)
538 {
539 virt_viewer_file_set_string(self, "version", value);
540 g_object_notify(G_OBJECT(self), "version");
541 }
542
525543 static void
526544 spice_hotkey_set_accel(VirtViewerApp *app, const gchar *accel_path, const gchar *key)
527545 {
538556 g_object_set(G_OBJECT(app), "enable-accel", TRUE, NULL);
539557 }
540558
541 void
542 virt_viewer_file_fill_app(VirtViewerFile* self, VirtViewerApp *app)
543 {
544 g_return_if_fail(VIRT_VIEWER_IS_FILE(self));
545 g_return_if_fail(VIRT_VIEWER_IS_APP(app));
559 gboolean
560 virt_viewer_file_fill_app(VirtViewerFile* self, VirtViewerApp *app, GError **error)
561 {
562 g_return_val_if_fail(VIRT_VIEWER_IS_FILE(self), FALSE);
563 g_return_val_if_fail(VIRT_VIEWER_IS_APP(app), FALSE);
564
565 if (virt_viewer_file_is_set(self, "version")) {
566 gchar *val = virt_viewer_file_get_version(self);
567
568 if (virt_viewer_compare_version(val, PACKAGE_VERSION) > 0) {
569 g_set_error(error,
570 VIRT_VIEWER_ERROR,
571 VIRT_VIEWER_ERROR_FAILED,
572 _("At least %s version %s is required to setup this connection"),
573 g_get_application_name(), val);
574
575 g_free(val);
576 return FALSE;
577 }
578
579 g_free(val);
580 }
546581
547582 if (virt_viewer_file_is_set(self, "title"))
548583 virt_viewer_app_set_title(app, virt_viewer_file_get_title(self));
574609 if (virt_viewer_file_is_set(self, "fullscreen"))
575610 g_object_set(G_OBJECT(app), "fullscreen",
576611 virt_viewer_file_get_fullscreen(self), NULL);
612
613 return TRUE;
577614 }
578615
579616 static void
649686 case PROP_PROXY:
650687 virt_viewer_file_set_proxy(self, g_value_get_string(value));
651688 break;
689 case PROP_VERSION:
690 virt_viewer_file_set_version(self, g_value_get_string(value));
691 break;
652692 default:
653693 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
654694 break;
725765 case PROP_PROXY:
726766 g_value_take_string(value, virt_viewer_file_get_proxy(self));
727767 break;
768 case PROP_VERSION:
769 g_value_take_string(value, virt_viewer_file_get_version(self));
770 break;
728771 default:
729772 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
730773 break;
843886 g_object_class_install_property(G_OBJECT_CLASS(klass), PROP_PROXY,
844887 g_param_spec_string("proxy", "proxy", "proxy", NULL,
845888 G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE));
846 }
889
890 g_object_class_install_property(G_OBJECT_CLASS(klass), PROP_VERSION,
891 g_param_spec_string("version", "version", "version", NULL,
892 G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE));
893 }
9292 void virt_viewer_file_set_enable_usb_autoshare(VirtViewerFile* self, gint value);
9393 gchar* virt_viewer_file_get_usb_filter(VirtViewerFile* self);
9494 void virt_viewer_file_set_usb_filter(VirtViewerFile* self, const gchar* value);
95 void virt_viewer_file_fill_app(VirtViewerFile* self, VirtViewerApp *app);
95 gboolean virt_viewer_file_fill_app(VirtViewerFile* self, VirtViewerApp *app, GError **error);
9696 gchar* virt_viewer_file_get_smartcard_insert(VirtViewerFile* self);
9797 void virt_viewer_file_set_smartcard_insert(VirtViewerFile* self, const gchar* value);
9898 gchar* virt_viewer_file_get_smartcard_remove(VirtViewerFile* self);
9999 void virt_viewer_file_set_smartcard_remove(VirtViewerFile* self, const gchar* value);
100100 gchar* virt_viewer_file_get_proxy(VirtViewerFile* self);
101101 void virt_viewer_file_set_proxy(VirtViewerFile* self, const gchar* value);
102 gchar* virt_viewer_file_get_version(VirtViewerFile* self);
103 void virt_viewer_file_set_version(VirtViewerFile* self, const gchar* value);
102104
103105 G_END_DECLS
104106
352352
353353 if (file) {
354354 fill_session(file, self->priv->session);
355 virt_viewer_file_fill_app(file, app);
355 if (!virt_viewer_file_fill_app(file, app, error))
356 return FALSE;
356357 } else {
357358 g_object_set(self->priv->session, "uri", uri, NULL);
358359 }
217217 portstr = g_strdup_printf("%d", virt_viewer_file_get_port(file));
218218 hoststr = g_strdup(virt_viewer_file_get_host(file));
219219
220 virt_viewer_file_fill_app(file, app);
220 if (!virt_viewer_file_fill_app(file, app, error))
221 return FALSE;
221222 } else {
222223 xmlURIPtr uri = NULL;
223224 if (!(uri = xmlParseURI(uristr)))