[Spice-devel] [PATCH spice-gtk 1/2] Add SpiceSession:ca property
Marc-André Lureau
marcandre.lureau at gmail.com
Mon Nov 19 12:52:01 PST 2012
---
gtk/spice-session-priv.h | 2 ++
gtk/spice-session.c | 40 ++++++++++++++++++++++++++++++++++++++--
2 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/gtk/spice-session-priv.h b/gtk/spice-session-priv.h
index 13345b4..804658d 100644
--- a/gtk/spice-session-priv.h
+++ b/gtk/spice-session-priv.h
@@ -40,6 +40,7 @@ struct _SpiceSessionPrivate {
char *ca_file;
char *ciphers;
GByteArray *pubkey;
+ GByteArray *ca;
char *cert_subject;
guint verify;
gboolean read_only;
@@ -135,6 +136,7 @@ const gchar* spice_session_get_host(SpiceSession *session);
const gchar* spice_session_get_cert_subject(SpiceSession *session);
const gchar* spice_session_get_ciphers(SpiceSession *session);
const gchar* spice_session_get_ca_file(SpiceSession *session);
+void spice_session_get_ca(SpiceSession *session, guint8 **ca, guint *size);
void spice_session_set_caches_hints(SpiceSession *session,
uint32_t pci_ram_size,
diff --git a/gtk/spice-session.c b/gtk/spice-session.c
index 526d05b..28f3e21 100644
--- a/gtk/spice-session.c
+++ b/gtk/spice-session.c
@@ -103,6 +103,7 @@ enum {
PROP_GLZ_WINDOW_SIZE,
PROP_UUID,
PROP_NAME,
+ PROP_CA,
};
/* signals */
@@ -233,8 +234,8 @@ spice_session_finalize(GObject *gobject)
spice_session_images_clear(session);
glz_decoder_window_destroy(s->glz_window);
- if (s->pubkey)
- g_byte_array_unref(s->pubkey);
+ g_clear_pointer(&s->pubkey, g_byte_array_unref);
+ g_clear_pointer(&s->ca, g_byte_array_unref);
/* Chain up to the parent class */
if (G_OBJECT_CLASS(spice_session_parent_class)->finalize)
@@ -437,6 +438,9 @@ static void spice_session_get_property(GObject *gobject,
case PROP_PUBKEY:
g_value_set_boxed(value, s->pubkey);
break;
+ case PROP_CA:
+ g_value_set_boxed(value, s->ca);
+ break;
case PROP_CERT_SUBJECT:
g_value_set_string(value, s->cert_subject);
break;
@@ -596,6 +600,9 @@ static void spice_session_set_property(GObject *gobject,
case PROP_GLZ_WINDOW_SIZE:
s->glz_window_size = g_value_get_int(value);
break;
+ case PROP_CA:
+ g_clear_pointer(&s->ca, g_byte_array_unref);
+ s->ca = g_value_dup_boxed(value);
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec);
break;
@@ -950,6 +957,22 @@ static void spice_session_class_init(SpiceSessionClass *klass)
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
/**
+ * SpiceSession:ca:
+ *
+ * The CA certificates data
+ *
+ * Since: 0.15
+ **/
+ g_object_class_install_property
+ (gobject_class, PROP_CA,
+ g_param_spec_boxed("ca",
+ "CA",
+ "The CA certificates data",
+ G_TYPE_BYTE_ARRAY,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
* SpiceSession::channel-new:
* @session: the session that emitted the signal
* @channel: the new #SpiceChannel
@@ -1772,6 +1795,19 @@ void spice_session_get_pubkey(SpiceSession *session, guint8 **pubkey, guint *siz
}
G_GNUC_INTERNAL
+void spice_session_get_ca(SpiceSession *session, guint8 **ca, guint *size)
+{
+ SpiceSessionPrivate *s = SPICE_SESSION_GET_PRIVATE(session);
+
+ g_return_if_fail(s != NULL);
+ g_return_if_fail(ca != NULL);
+ g_return_if_fail(size != NULL);
+
+ *ca = s->ca ? s->ca->data : NULL;
+ *size = s->ca ? s->ca->len : 0;
+}
+
+G_GNUC_INTERNAL
guint spice_session_get_verify(SpiceSession *session)
{
SpiceSessionPrivate *s = SPICE_SESSION_GET_PRIVATE(session);
--
1.7.11.7
More information about the Spice-devel
mailing list