1 | 1 |
/*
|
2 | 2 |
* Virt Viewer: A virtual machine console viewer
|
3 | 3 |
*
|
4 | |
* Copyright (C) 2012 Red Hat, Inc.
|
|
4 |
* Copyright (C) 2012-2015 Red Hat, Inc.
|
5 | 5 |
*
|
6 | 6 |
* This program is free software; you can redistribute it and/or modify
|
7 | 7 |
* it under the terms of the GNU General Public License as published by
|
|
38 | 38 |
*
|
39 | 39 |
* The current list of [virt-viewer] keys is:
|
40 | 40 |
* - version: string
|
|
41 |
* - versions: list of id:versions strings
|
41 | 42 |
* - type: string, mandatory, values: "spice" (later "vnc" etc..)
|
42 | 43 |
* - host: string
|
43 | 44 |
* - port: int
|
|
117 | 118 |
PROP_USB_FILTER,
|
118 | 119 |
PROP_PROXY,
|
119 | 120 |
PROP_VERSION,
|
|
121 |
PROP_VERSIONS,
|
120 | 122 |
PROP_SECURE_CHANNELS,
|
121 | 123 |
PROP_DELETE_THIS_FILE,
|
122 | 124 |
PROP_SECURE_ATTENTION,
|
|
612 | 614 |
{
|
613 | 615 |
virt_viewer_file_set_string(self, MAIN_GROUP, "version", value);
|
614 | 616 |
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");
|
615 | 676 |
}
|
616 | 677 |
|
617 | 678 |
gchar**
|
|
861 | 922 |
case PROP_VERSION:
|
862 | 923 |
virt_viewer_file_set_version(self, g_value_get_string(value));
|
863 | 924 |
break;
|
|
925 |
case PROP_VERSIONS:
|
|
926 |
virt_viewer_file_set_versions(self, g_value_get_boxed(value));
|
|
927 |
break;
|
864 | 928 |
case PROP_SECURE_CHANNELS:
|
865 | 929 |
strv = g_value_get_boxed(value);
|
866 | 930 |
virt_viewer_file_set_secure_channels(self, (const gchar* const*)strv, g_strv_length(strv));
|
|
965 | 1029 |
case PROP_VERSION:
|
966 | 1030 |
g_value_take_string(value, virt_viewer_file_get_version(self));
|
967 | 1031 |
break;
|
|
1032 |
case PROP_VERSIONS:
|
|
1033 |
g_value_take_boxed(value, virt_viewer_file_get_versions(self));
|
|
1034 |
break;
|
968 | 1035 |
case PROP_SECURE_CHANNELS:
|
969 | 1036 |
g_value_take_boxed(value, virt_viewer_file_get_secure_channels(self, NULL));
|
970 | 1037 |
break;
|
|
1113 | 1180 |
g_param_spec_string("version", "version", "version", NULL,
|
1114 | 1181 |
G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE));
|
1115 | 1182 |
|
|
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 |
|
1116 | 1187 |
g_object_class_install_property(G_OBJECT_CLASS(klass), PROP_SECURE_CHANNELS,
|
1117 | 1188 |
g_param_spec_boxed("secure-channels", "secure-channels", "secure-channels", G_TYPE_STRV,
|
1118 | 1189 |
G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE));
|