aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libempathy/empathy-tls-certificate.c96
-rw-r--r--libempathy/empathy-tls-certificate.h6
2 files changed, 102 insertions, 0 deletions
diff --git a/libempathy/empathy-tls-certificate.c b/libempathy/empathy-tls-certificate.c
index bc5dff0f3..84103fc29 100644
--- a/libempathy/empathy-tls-certificate.c
+++ b/libempathy/empathy-tls-certificate.c
@@ -35,6 +35,12 @@ static void async_initable_iface_init (GAsyncInitableIface *iface);
enum {
PROP_OBJECT_PATH = 1,
PROP_BUS_NAME,
+
+ /* proxy properties */
+ PROP_CERT_TYPE,
+ PROP_CERT_DATA,
+ PROP_STATE,
+ PROP_REJECT_REASON,
LAST_PROPERTY,
};
@@ -204,6 +210,18 @@ empathy_tls_certificate_get_property (GObject *object,
case PROP_BUS_NAME:
g_value_set_string (value, priv->bus_name);
break;
+ case PROP_CERT_TYPE:
+ g_value_set_string (value, priv->cert_type);
+ break;
+ case PROP_CERT_DATA:
+ g_value_set_boxed (value, priv->cert_data);
+ break;
+ case PROP_STATE:
+ g_value_set_uint (value, priv->state);
+ break;
+ case PROP_REJECT_REASON:
+ g_value_set_uint (value, priv->reject_reason);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -262,6 +280,57 @@ empathy_tls_certificate_class_init (EmpathyTLSCertificateClass *klass)
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
g_object_class_install_property (oclass, PROP_BUS_NAME, pspec);
+
+ pspec = g_param_spec_string ("cert-type", "Certificate type",
+ "The type of this certificate.",
+ NULL,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (oclass, PROP_CERT_TYPE, pspec);
+
+ pspec = g_param_spec_boxed ("cert-data", "Certificate chain data",
+ "The raw PEM-encoded certificate chain data.",
+ array_of_ay_get_type (),
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (oclass, PROP_CERT_DATA, pspec);
+
+ pspec = g_param_spec_uint ("state", "State",
+ "The state of this certificate.",
+ EMP_TLS_CERTIFICATE_STATE_NONE, NUM_EMP_TLS_CERTIFICATE_STATES -1,
+ EMP_TLS_CERTIFICATE_STATE_NONE,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (oclass, PROP_STATE, pspec);
+
+ pspec = g_param_spec_uint ("reject-reason", "Reject reason",
+ "The reason why this certificate was rejected.",
+ EMP_TLS_CERTIFICATE_REJECT_REASON_NONE,
+ NUM_EMP_TLS_CERTIFICATE_REJECT_REASONS -1,
+ EMP_TLS_CERTIFICATE_REJECT_REASON_NONE,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (oclass, PROP_REJECT_REASON, pspec);
+}
+
+static void
+cert_proxy_accept_cb (TpProxy *proxy,
+ const GError *error,
+ gpointer user_data,
+ GObject *weak_object)
+{
+ DEBUG ("Callback for accept(), error %p", error);
+
+ if (error != NULL)
+ DEBUG ("Error was %s", error->message);
+}
+
+static void
+cert_proxy_reject_cb (TpProxy *proxy,
+ const GError *error,
+ gpointer user_data,
+ GObject *weak_object)
+{
+ DEBUG ("Callback for reject(), error %p", error);
+
+ if (error != NULL)
+ DEBUG ("Error was %s", error->message);
}
void
@@ -295,3 +364,30 @@ empathy_tls_certificate_new_finish (GAsyncResult *res,
else
return NULL;
}
+
+void
+empathy_tls_certificate_accept (EmpathyTLSCertificate *self)
+{
+ EmpathyTLSCertificatePriv *priv = GET_PRIV (self);
+
+ g_assert (EMPATHY_IS_TLS_CERTIFICATE (self));
+
+ DEBUG ("Accepting TLS certificate");
+
+ emp_cli_authentication_tls_certificate_call_accept (priv->proxy,
+ -1, cert_proxy_accept_cb, NULL, NULL, G_OBJECT (self));
+}
+
+void
+empathy_tls_certificate_reject (EmpathyTLSCertificate *self,
+ EmpTLSCertificateRejectReason reason)
+{
+ EmpathyTLSCertificatePriv *priv = GET_PRIV (self);
+
+ g_assert (EMPATHY_IS_TLS_CERTIFICATE (self));
+
+ DEBUG ("Rejecting TLS certificate with reason %u", reason);
+
+ emp_cli_authentication_tls_certificate_call_reject (priv->proxy,
+ -1, reason, cert_proxy_reject_cb, NULL, NULL, G_OBJECT (self));
+}
diff --git a/libempathy/empathy-tls-certificate.h b/libempathy/empathy-tls-certificate.h
index de856be1e..473134044 100644
--- a/libempathy/empathy-tls-certificate.h
+++ b/libempathy/empathy-tls-certificate.h
@@ -24,6 +24,8 @@
#include <glib-object.h>
#include <gio/gio.h>
+#include <extensions/extensions.h>
+
G_BEGIN_DECLS
typedef struct _EmpathyTLSCertificate EmpathyTLSCertificate;
@@ -64,6 +66,10 @@ void empathy_tls_certificate_new_async (const gchar *bus_name,
EmpathyTLSCertificate * empathy_tls_certificate_new_finish (GAsyncResult * res,
GError **error);
+void empathy_tls_certificate_accept (EmpathyTLSCertificate *self);
+void empathy_tls_certificate_reject (EmpathyTLSCertificate *self,
+ EmpTLSCertificateRejectReason reason);
+
G_END_DECLS
#endif /* #ifndef __EMPATHY_TLS_CERTIFICATE_H__*/