Codebase list virt-viewer / fd1052a
vv-file: Add VirtViewerFile::versions Specifying a single minimal version in the .vv file is not enough as the client version will be highly dependent on the OS it's running in. Windows versioning is not the same as linux versioning, Fedora 21 and Fedora 22 may have different release numbers for the same version, and we may want to force a specific minimal release in case of a critical bug fix. This commit adds supports for a 'versions' field in .vv files where a list of os-id:version couples can be stored. Christophe Fergeau 8 years ago
3 changed file(s) with 82 addition(s) and 1 deletion(s). Raw diff Collapse all Expand all
146146 one. If any of the component is not a number, the version comparison will fail
147147 and consider that the 2 versions are considered to be the same.
148148
149 =item C<versions> (osid:version list)
150
151 This is a list of osid:version couples separated by ';'. osid is an arbitrary string, version is
152 a version number in the same format as in the 'version' field. A given couple indicates that
153 remote-viewer builds matching the given 'osid' (fedora22, debian7, ...) must
154 be at least version 'version'. For consistency, it's recommended to use libosinfo OS shortids as
155 the osid.
156
149157 =item C<type> (string, mandatory)
150158
151159 The session type, either "spice", "vnc" or "ovirt".
11 /*
22 * Virt Viewer: A virtual machine console viewer
33 *
4 * Copyright (C) 2012 Red Hat, Inc.
4 * Copyright (C) 2012-2015 Red Hat, Inc.
55 *
66 * This program is free software; you can redistribute it and/or modify
77 * it under the terms of the GNU General Public License as published by
3838 *
3939 * The current list of [virt-viewer] keys is:
4040 * - version: string
41 * - versions: list of id:versions strings
4142 * - type: string, mandatory, values: "spice" (later "vnc" etc..)
4243 * - host: string
4344 * - port: int
117118 PROP_USB_FILTER,
118119 PROP_PROXY,
119120 PROP_VERSION,
121 PROP_VERSIONS,
120122 PROP_SECURE_CHANNELS,
121123 PROP_DELETE_THIS_FILE,
122124 PROP_SECURE_ATTENTION,
612614 {
613615 virt_viewer_file_set_string(self, MAIN_GROUP, "version", value);
614616 g_object_notify(G_OBJECT(self), "version");
617 }
618
619 GHashTable*
620 virt_viewer_file_get_versions(VirtViewerFile* self)
621 {
622 GHashTable *versions;
623 gchar **versions_str;
624 gsize length;
625 unsigned int i;
626
627 versions = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
628 versions_str = virt_viewer_file_get_string_list(self, MAIN_GROUP,
629 "versions", &length);
630 for (i = 0; i < length; i++) {
631 GStrv tokens;
632
633 if (versions_str[i] == NULL) {
634 g_warn_if_reached();
635 break;
636 }
637 tokens = g_strsplit(versions_str[i], ":", 2);
638 if (g_strv_length(tokens) != 2) {
639 g_warn_if_reached();
640 continue;
641 }
642 g_debug("Minimum version '%s' for OS id '%s'", tokens[1], tokens[0]);
643 g_hash_table_insert(versions, tokens[0], tokens[1]);
644 g_free(tokens);
645 }
646 g_strfreev(versions_str);
647
648 return versions;
649 }
650
651 void
652 virt_viewer_file_set_versions(VirtViewerFile* self, GHashTable *version_table)
653 {
654 GHashTableIter iter;
655 gpointer key, value;
656 GPtrArray *versions;
657
658 versions = g_ptr_array_new_with_free_func(g_free);
659
660 g_hash_table_iter_init(&iter, version_table);
661 while (g_hash_table_iter_next(&iter, &key, &value)) {
662 char *str;
663
664 /* Check that id only contains letters/numbers/- */
665 /* Check that version only contains numbers, ., :, -, (letters ?) */
666 /* FIXME: ':' separator overlaps with ':' epoch indicator */
667
668 str = g_strdup_printf("%s:%s", (char *)key, (char *)value);
669 g_ptr_array_add(versions, str);
670 }
671 virt_viewer_file_set_string_list(self, MAIN_GROUP, "versions",
672 (const char * const *)versions->pdata,
673 versions->len);
674 g_ptr_array_unref(versions);
675 g_object_notify(G_OBJECT(self), "versions");
615676 }
616677
617678 gchar**
861922 case PROP_VERSION:
862923 virt_viewer_file_set_version(self, g_value_get_string(value));
863924 break;
925 case PROP_VERSIONS:
926 virt_viewer_file_set_versions(self, g_value_get_boxed(value));
927 break;
864928 case PROP_SECURE_CHANNELS:
865929 strv = g_value_get_boxed(value);
866930 virt_viewer_file_set_secure_channels(self, (const gchar* const*)strv, g_strv_length(strv));
9651029 case PROP_VERSION:
9661030 g_value_take_string(value, virt_viewer_file_get_version(self));
9671031 break;
1032 case PROP_VERSIONS:
1033 g_value_take_boxed(value, virt_viewer_file_get_versions(self));
1034 break;
9681035 case PROP_SECURE_CHANNELS:
9691036 g_value_take_boxed(value, virt_viewer_file_get_secure_channels(self, NULL));
9701037 break;
11131180 g_param_spec_string("version", "version", "version", NULL,
11141181 G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE));
11151182
1183 g_object_class_install_property(G_OBJECT_CLASS(klass), PROP_VERSIONS,
1184 g_param_spec_boxed("versions", "versions", "versions", G_TYPE_HASH_TABLE,
1185 G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE));
1186
11161187 g_object_class_install_property(G_OBJECT_CLASS(klass), PROP_SECURE_CHANNELS,
11171188 g_param_spec_boxed("secure-channels", "secure-channels", "secure-channels", G_TYPE_STRV,
11181189 G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE));
101101 void virt_viewer_file_set_proxy(VirtViewerFile* self, const gchar* value);
102102 gchar* virt_viewer_file_get_version(VirtViewerFile* self);
103103 void virt_viewer_file_set_version(VirtViewerFile* self, const gchar* value);
104 GHashTable* virt_viewer_file_get_versions(VirtViewerFile* self);
105 void virt_viewer_file_set_versions(VirtViewerFile* self, GHashTable *version_table);
104106 gchar** virt_viewer_file_get_secure_channels(VirtViewerFile* self, gsize* length);
105107 void virt_viewer_file_set_secure_channels(VirtViewerFile* self, const gchar* const* value, gsize length);
106108 gint virt_viewer_file_get_delete_this_file(VirtViewerFile* self);