306 lines
13 KiB
C
306 lines
13 KiB
C
/*
|
|
* ovirt-vm-display.c: oVirt virtual machine display information
|
|
*
|
|
* Copyright (C) 2012 Red Hat, Inc.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library. If not, see
|
|
* <http://www.gnu.org/licenses/>.
|
|
*
|
|
* Author: Christophe Fergeau <cfergeau@redhat.com>
|
|
*/
|
|
|
|
#include <config.h>
|
|
|
|
#include "ovirt-enum-types.h"
|
|
#include "ovirt-vm-display.h"
|
|
|
|
#define OVIRT_VM_DISPLAY_GET_PRIVATE(obj) \
|
|
(G_TYPE_INSTANCE_GET_PRIVATE((obj), OVIRT_TYPE_VM_DISPLAY, OvirtVmDisplayPrivate))
|
|
|
|
struct _OvirtVmDisplayPrivate {
|
|
OvirtVmDisplayType type;
|
|
char *address;
|
|
guint port;
|
|
guint secure_port;
|
|
guint monitor_count;
|
|
char *ticket;
|
|
guint expiry;
|
|
GByteArray *ca_cert;
|
|
char *host_subject;
|
|
gboolean smartcard;
|
|
gboolean allow_override;
|
|
char *proxy_url;
|
|
};
|
|
|
|
G_DEFINE_TYPE(OvirtVmDisplay, ovirt_vm_display, G_TYPE_OBJECT);
|
|
|
|
enum {
|
|
PROP_0,
|
|
PROP_TYPE,
|
|
PROP_ADDRESS,
|
|
PROP_PORT,
|
|
PROP_SECURE_PORT,
|
|
PROP_MONITOR_COUNT,
|
|
PROP_TICKET,
|
|
PROP_EXPIRY,
|
|
PROP_HOST_SUBJECT,
|
|
PROP_SMARTCARD,
|
|
PROP_ALLOW_OVERRIDE,
|
|
PROP_PROXY_URL,
|
|
PROP_CA_CERT,
|
|
};
|
|
|
|
static void ovirt_vm_display_get_property(GObject *object,
|
|
guint prop_id,
|
|
GValue *value,
|
|
GParamSpec *pspec)
|
|
{
|
|
OvirtVmDisplay *display = OVIRT_VM_DISPLAY(object);
|
|
|
|
switch (prop_id) {
|
|
case PROP_TYPE:
|
|
g_value_set_enum(value, display->priv->type);
|
|
break;
|
|
case PROP_ADDRESS:
|
|
g_value_set_string(value, display->priv->address);
|
|
break;
|
|
case PROP_PORT:
|
|
g_value_set_uint(value, display->priv->port);
|
|
break;
|
|
case PROP_SECURE_PORT:
|
|
g_value_set_uint(value, display->priv->secure_port);
|
|
break;
|
|
case PROP_MONITOR_COUNT:
|
|
g_value_set_uint(value, display->priv->monitor_count);
|
|
break;
|
|
case PROP_TICKET:
|
|
g_value_set_string(value, display->priv->ticket);
|
|
break;
|
|
case PROP_EXPIRY:
|
|
g_value_set_uint(value, display->priv->expiry);
|
|
break;
|
|
case PROP_CA_CERT:
|
|
g_value_set_boxed(value, display->priv->ca_cert);
|
|
break;
|
|
case PROP_HOST_SUBJECT:
|
|
g_value_set_string(value, display->priv->host_subject);
|
|
break;
|
|
case PROP_SMARTCARD:
|
|
g_value_set_boolean(value, display->priv->smartcard);
|
|
break;
|
|
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);
|
|
}
|
|
}
|
|
|
|
static void ovirt_vm_display_set_property(GObject *object,
|
|
guint prop_id,
|
|
const GValue *value,
|
|
GParamSpec *pspec)
|
|
{
|
|
OvirtVmDisplay *display = OVIRT_VM_DISPLAY(object);
|
|
|
|
switch (prop_id) {
|
|
case PROP_TYPE:
|
|
display->priv->type = g_value_get_enum(value);
|
|
break;
|
|
case PROP_ADDRESS:
|
|
g_free(display->priv->address);
|
|
display->priv->address = g_value_dup_string(value);
|
|
break;
|
|
case PROP_PORT:
|
|
display->priv->port = g_value_get_uint(value);
|
|
break;
|
|
case PROP_SECURE_PORT:
|
|
display->priv->secure_port = g_value_get_uint(value);
|
|
break;
|
|
case PROP_MONITOR_COUNT:
|
|
display->priv->monitor_count = g_value_get_uint(value);
|
|
break;
|
|
case PROP_TICKET:
|
|
g_free(display->priv->ticket);
|
|
display->priv->ticket = g_value_dup_string(value);
|
|
break;
|
|
case PROP_EXPIRY:
|
|
display->priv->expiry = g_value_get_uint(value);
|
|
break;
|
|
case PROP_CA_CERT:
|
|
if (display->priv->ca_cert != NULL) {
|
|
g_byte_array_unref(display->priv->ca_cert);
|
|
}
|
|
display->priv->ca_cert = g_value_dup_boxed(value);
|
|
break;
|
|
case PROP_HOST_SUBJECT:
|
|
g_free(display->priv->host_subject);
|
|
display->priv->host_subject = g_value_dup_string(value);
|
|
break;
|
|
case PROP_SMARTCARD:
|
|
display->priv->smartcard = g_value_get_boolean(value);
|
|
break;
|
|
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);
|
|
}
|
|
}
|
|
|
|
static void ovirt_vm_display_finalize(GObject *object)
|
|
{
|
|
OvirtVmDisplay *display = OVIRT_VM_DISPLAY(object);
|
|
|
|
g_free(display->priv->address);
|
|
g_free(display->priv->ticket);
|
|
g_free(display->priv->host_subject);
|
|
g_free(display->priv->proxy_url);
|
|
if (display->priv->ca_cert != NULL) {
|
|
g_byte_array_unref(display->priv->ca_cert);
|
|
}
|
|
|
|
G_OBJECT_CLASS(ovirt_vm_display_parent_class)->finalize(object);
|
|
}
|
|
|
|
static void ovirt_vm_display_class_init(OvirtVmDisplayClass *klass)
|
|
{
|
|
GObjectClass *object_class = G_OBJECT_CLASS(klass);
|
|
|
|
g_type_class_add_private(klass, sizeof(OvirtVmDisplayPrivate));
|
|
|
|
object_class->finalize = ovirt_vm_display_finalize;
|
|
object_class->get_property = ovirt_vm_display_get_property;
|
|
object_class->set_property = ovirt_vm_display_set_property;
|
|
|
|
g_object_class_install_property(object_class,
|
|
PROP_TYPE,
|
|
g_param_spec_enum("type",
|
|
"Type",
|
|
"Display Type",
|
|
OVIRT_TYPE_VM_DISPLAY_TYPE,
|
|
OVIRT_VM_DISPLAY_SPICE,
|
|
G_PARAM_READWRITE |
|
|
G_PARAM_STATIC_STRINGS));
|
|
g_object_class_install_property(object_class,
|
|
PROP_ADDRESS,
|
|
g_param_spec_string("address",
|
|
"Address",
|
|
"Display Address",
|
|
NULL,
|
|
G_PARAM_READWRITE |
|
|
G_PARAM_STATIC_STRINGS));
|
|
g_object_class_install_property(object_class,
|
|
PROP_PORT,
|
|
g_param_spec_uint("port",
|
|
"Port",
|
|
"Display Port",
|
|
0, G_MAXUINT16,
|
|
0,
|
|
G_PARAM_READWRITE |
|
|
G_PARAM_STATIC_STRINGS));
|
|
g_object_class_install_property(object_class,
|
|
PROP_SECURE_PORT,
|
|
g_param_spec_uint("secure-port",
|
|
"Secure Port",
|
|
"Secure Display Port",
|
|
0, G_MAXUINT16,
|
|
0,
|
|
G_PARAM_READWRITE |
|
|
G_PARAM_STATIC_STRINGS));
|
|
g_object_class_install_property(object_class,
|
|
PROP_MONITOR_COUNT,
|
|
g_param_spec_uint("monitor-count",
|
|
"Monitor Count",
|
|
"Virtual Machine Monitor Count",
|
|
0, G_MAXUINT,
|
|
0,
|
|
G_PARAM_READWRITE |
|
|
G_PARAM_STATIC_STRINGS));
|
|
g_object_class_install_property(object_class,
|
|
PROP_TICKET,
|
|
g_param_spec_string("ticket",
|
|
"Ticket",
|
|
"Ticket to access the VM",
|
|
NULL,
|
|
G_PARAM_READWRITE |
|
|
G_PARAM_STATIC_STRINGS));
|
|
g_object_class_install_property(object_class,
|
|
PROP_EXPIRY,
|
|
g_param_spec_uint("expiry",
|
|
"Expiry",
|
|
"Ticket Expiry Time",
|
|
0, G_MAXUINT,
|
|
0,
|
|
G_PARAM_READWRITE |
|
|
G_PARAM_STATIC_STRINGS));
|
|
g_object_class_install_property(object_class,
|
|
PROP_CA_CERT,
|
|
g_param_spec_boxed("ca-cert",
|
|
"ca-cert",
|
|
"Virt CA certificate to use for TLS SPICE connections",
|
|
G_TYPE_BYTE_ARRAY,
|
|
G_PARAM_READWRITE |
|
|
G_PARAM_STATIC_STRINGS));
|
|
g_object_class_install_property(object_class,
|
|
PROP_HOST_SUBJECT,
|
|
g_param_spec_string("host-subject",
|
|
"Host Subject",
|
|
"Host subject of the VM certificate",
|
|
NULL,
|
|
G_PARAM_READWRITE |
|
|
G_PARAM_STATIC_STRINGS));
|
|
g_object_class_install_property(object_class,
|
|
PROP_SMARTCARD,
|
|
g_param_spec_boolean("smartcard",
|
|
"Smartcard",
|
|
"Indicates whether smartcard support is enabled",
|
|
FALSE,
|
|
G_PARAM_READWRITE |
|
|
G_PARAM_STATIC_STRINGS));
|
|
g_object_class_install_property(object_class,
|
|
PROP_ALLOW_OVERRIDE,
|
|
g_param_spec_boolean("allow-override",
|
|
"Allow override",
|
|
"Allow to override display connection",
|
|
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)
|
|
{
|
|
display->priv = OVIRT_VM_DISPLAY_GET_PRIVATE(display);
|
|
}
|
|
|
|
OvirtVmDisplay *ovirt_vm_display_new(void)
|
|
{
|
|
return OVIRT_VM_DISPLAY(g_object_new(OVIRT_TYPE_VM_DISPLAY, NULL));
|
|
}
|