summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Fergeau <cfergeau@redhat.com>2015-01-20 10:42:57 +0100
committerChristophe Fergeau <cfergeau@redhat.com>2015-01-22 16:54:19 +0100
commite2f4e6ae0975b24d4d4cb521ff1a2948e91af0e3 (patch)
tree325786deeddd72a7719542bf6089a9e63166b6e1
parent2ca872bd88efcfa7a55fedb6116f6bbec618d896 (diff)
Add OvirtVmDisplay::proxy-url
Recent oVirt versions advertise which proxy URL should be used (if any) to connect to a VM. This commit exposes this information in libgovirt so that library users can make use of it.
-rw-r--r--govirt/ovirt-vm-display.c18
-rw-r--r--govirt/ovirt-vm-xml.c6
2 files changed, 24 insertions, 0 deletions
diff --git a/govirt/ovirt-vm-display.c b/govirt/ovirt-vm-display.c
index a8a0942..030d267 100644
--- a/govirt/ovirt-vm-display.c
+++ b/govirt/ovirt-vm-display.c
@@ -39,6 +39,7 @@ struct _OvirtVmDisplayPrivate {
char *host_subject;
gboolean smartcard;
gboolean allow_override;
+ char *proxy_url;
};
G_DEFINE_TYPE(OvirtVmDisplay, ovirt_vm_display, G_TYPE_OBJECT);
@@ -55,6 +56,7 @@ enum {
PROP_HOST_SUBJECT,
PROP_SMARTCARD,
PROP_ALLOW_OVERRIDE,
+ PROP_PROXY_URL,
};
static void ovirt_vm_display_get_property(GObject *object,
@@ -95,6 +97,9 @@ static void ovirt_vm_display_get_property(GObject *object,
case PROP_ALLOW_OVERRIDE:
g_value_set_boolean(value, display->priv->allow_override);
break;
+ case PROP_PROXY_URL:
+ g_value_set_string(value, display->priv->proxy_url);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
}
@@ -141,6 +146,10 @@ static void ovirt_vm_display_set_property(GObject *object,
case PROP_ALLOW_OVERRIDE:
display->priv->allow_override = g_value_get_boolean(value);
break;
+ case PROP_PROXY_URL:
+ g_free(display->priv->proxy_url);
+ display->priv->proxy_url = g_value_dup_string(value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
}
@@ -153,6 +162,7 @@ static void ovirt_vm_display_finalize(GObject *object)
g_free(display->priv->address);
g_free(display->priv->ticket);
g_free(display->priv->host_subject);
+ g_free(display->priv->proxy_url);
G_OBJECT_CLASS(ovirt_vm_display_parent_class)->finalize(object);
}
@@ -252,6 +262,14 @@ static void ovirt_vm_display_class_init(OvirtVmDisplayClass *klass)
FALSE,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property(object_class,
+ PROP_PROXY_URL,
+ g_param_spec_string("proxy-url",
+ "Proxy URL",
+ "URL of the proxy to use to access the VM",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
static void ovirt_vm_display_init(G_GNUC_UNUSED OvirtVmDisplay *display)
diff --git a/govirt/ovirt-vm-xml.c b/govirt/ovirt-vm-xml.c
index 7790887..22d50af 100644
--- a/govirt/ovirt-vm-xml.c
+++ b/govirt/ovirt-vm-xml.c
@@ -44,6 +44,7 @@ static gboolean vm_set_display_from_xml(OvirtVm *vm,
const char *certificate_key = g_intern_string("certificate");
const char *smartcard_key = g_intern_string("smartcard_enabled");
const char *allow_override_key = g_intern_string("allow_override");
+ const char *proxy_key = g_intern_string("proxy");
if (root == NULL) {
return FALSE;
@@ -120,6 +121,11 @@ static gboolean vm_set_display_from_xml(OvirtVm *vm,
}
}
+ node = g_hash_table_lookup(root->children, proxy_key);
+ if (node != NULL) {
+ g_object_set(G_OBJECT(display), "proxy-url", node->content, NULL);
+ }
+
/* FIXME: this overrides the ticket/expiry which may
* already be set
*/