diff options
Diffstat (limited to 'telepathy-glib/tls-certificate-rejection.c')
-rw-r--r-- | telepathy-glib/tls-certificate-rejection.c | 309 |
1 files changed, 309 insertions, 0 deletions
diff --git a/telepathy-glib/tls-certificate-rejection.c b/telepathy-glib/tls-certificate-rejection.c new file mode 100644 index 000000000..7a012eb27 --- /dev/null +++ b/telepathy-glib/tls-certificate-rejection.c @@ -0,0 +1,309 @@ +/* + * tls-certificate-rejection.c + * + * Copyright (C) 2012 Collabora Ltd. <http://www.collabora.co.uk/> + * + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#include "config.h" + +#include "tls-certificate-rejection.h" +#include "tls-certificate-rejection-internal.h" + +/** + * SECTION: tls-certificate-rejection + * @title: TpTLSCertificateRejection + * @short_description: a certificate rejection + * + * TpTLSCertificateRejection is a small object used by + * #TpTLSCertificate to represent the rejection of a + * certificate. + */ + +/** + * TpTLSCertificateRejection: + * + * Data structure representing a #TpTLSCertificateRejection. + * + * Since: UNRELEASED + */ + +/** + * TpTLSCertificateRejectionClass: + * + * The class of a #TpTLSCertificateRejection. + * + * Since: UNRELEASED + */ + +G_DEFINE_TYPE (TpTLSCertificateRejection, tp_tls_certificate_rejection, + G_TYPE_OBJECT) + +enum +{ + PROP_REASON = 1, + PROP_DBUS_ERROR, + PROP_DETAILS, + PROP_ERROR, + N_PROPS +}; + +struct _TpTLSCertificateRejectionPriv { + TpTLSCertificateRejectReason reason; + gchar *dbus_error; + GVariant *details; + GError *error /* badger */ ; +}; + +static void +tp_tls_certificate_rejection_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + TpTLSCertificateRejection *self = TP_TLS_CERTIFICATE_REJECTION (object); + + switch (property_id) + { + case PROP_REASON: + g_value_set_uint (value, self->priv->reason); + break; + case PROP_DBUS_ERROR: + g_value_set_string (value, self->priv->dbus_error); + break; + case PROP_DETAILS: + g_value_set_variant (value, self->priv->details); + break; + case PROP_ERROR: + g_value_set_boxed (value, self->priv->error); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +tp_tls_certificate_rejection_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + TpTLSCertificateRejection *self = TP_TLS_CERTIFICATE_REJECTION (object); + + switch (property_id) + { + case PROP_REASON: + self->priv->reason = g_value_get_uint (value); + break; + case PROP_DBUS_ERROR: + g_assert (self->priv->dbus_error == NULL); /* construct only */ + self->priv->dbus_error = g_value_dup_string (value); + break; + case PROP_DETAILS: + self->priv->details = g_value_dup_variant (value); + break; + case PROP_ERROR: + self->priv->error = g_value_dup_boxed (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +tp_tls_certificate_rejection_dispose (GObject *object) +{ + TpTLSCertificateRejection *self = TP_TLS_CERTIFICATE_REJECTION (object); + void (*chain_up) (GObject *) = + ((GObjectClass *) tp_tls_certificate_rejection_parent_class)->dispose; + + g_variant_unref (self->priv->details); + + if (chain_up != NULL) + chain_up (object); +} + +static void +tp_tls_certificate_rejection_finalize (GObject *object) +{ + TpTLSCertificateRejection *self = TP_TLS_CERTIFICATE_REJECTION (object); + void (*chain_up) (GObject *) = + ((GObjectClass *) tp_tls_certificate_rejection_parent_class)->finalize; + + g_free (self->priv->dbus_error); + + if (chain_up != NULL) + chain_up (object); +} + +static void +tp_tls_certificate_rejection_class_init ( + TpTLSCertificateRejectionClass *klass) +{ + GObjectClass *oclass = G_OBJECT_CLASS (klass); + GParamSpec *spec; + + oclass->get_property = tp_tls_certificate_rejection_get_property; + oclass->set_property = tp_tls_certificate_rejection_set_property; + oclass->dispose = tp_tls_certificate_rejection_dispose; + oclass->finalize = tp_tls_certificate_rejection_finalize; + + /** + * TpTLSCertificateRejection:reason: + * + * #TpTLSCertificateRejectReason representing the reason of the rejection + * + * Since: UNRELEASED + */ + spec = g_param_spec_uint ("reason", "reason", + "TpTLSCertificateRejectReason", + TP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN, + NUM_TP_TLS_CERTIFICATE_REJECT_REASONS, + TP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); + g_object_class_install_property (oclass, PROP_REASON, spec); + + /** + * TpTLSCertificateRejection:dbus-error: + * + * The D-Bus error name of the rejection + * + * Since: UNRELEASED + */ + spec = g_param_spec_string ("dbus-error", "dbus-error", + "DBus error", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); + g_object_class_install_property (oclass, PROP_DBUS_ERROR, spec); + + /** + * TpTLSCertificateRejection:details: + * + * A #G_VARIANT_TYPE_VARDICT containing the details of the rejection + * + * Since: UNRELEASED + */ + spec = g_param_spec_variant ("details", "details", + "GVariant", + G_VARIANT_TYPE_VARDICT, NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); + g_object_class_install_property (oclass, PROP_DETAILS, spec); + + /** + * TpTLSCertificateRejection:error: + * + * a #GError (likely to be in the %TP_ERROR domain) indicating the reason + * of the rejection + * + * Since: UNRELEASED + */ + spec = g_param_spec_boxed ("error", "error", + "GError", + G_TYPE_ERROR, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); + g_object_class_install_property (oclass, PROP_ERROR, spec); + + g_type_class_add_private (klass, sizeof (TpTLSCertificateRejectionPriv)); +} + +static void +tp_tls_certificate_rejection_init (TpTLSCertificateRejection *self) +{ + self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, + TP_TYPE_TLS_CERTIFICATE_REJECTION, TpTLSCertificateRejectionPriv); +} + +TpTLSCertificateRejection * +_tp_tls_certificate_rejection_new ( + GError *error, + TpTLSCertificateRejectReason reason, + const gchar *dbus_error, + GVariant *details) +{ + return g_object_new (TP_TYPE_TLS_CERTIFICATE_REJECTION, + "error", error, + "reason", reason, + "dbus-error", dbus_error, + "details", details, + NULL); +} + +/** + * tp_tls_certificate_rejection_get_error: + * @self: a #TpTLSCertificateRejection + * + * Return the #TpTLSCertificateRejection:error property + * + * Returns: the value of #TpTLSCertificateRejection:error property + * + * Since: UNRELEASED + */ +const GError * +tp_tls_certificate_rejection_get_error (TpTLSCertificateRejection *self) +{ + return self->priv->error; +} + +/** + * tp_tls_certificate_rejection_get_reason: + * @self: a #TpTLSCertificateRejection + * + * Return the #TpTLSCertificateRejection:reason property + * + * Returns: the value of #TpTLSCertificateRejection:reason property + * + * Since: UNRELEASED + */ +TpTLSCertificateRejectReason +tp_tls_certificate_rejection_get_reason (TpTLSCertificateRejection *self) +{ + return self->priv->reason; +} + +/** + * tp_tls_certificate_rejection_get_dbus_error: + * @self: a #TpTLSCertificateRejection + * + * Return the #TpTLSCertificateRejection:dbus-error property + * + * Returns: the value of #TpTLSCertificateRejection:dbus-error property + * + * Since: UNRELEASED + */ +const gchar * +tp_tls_certificate_rejection_get_dbus_error (TpTLSCertificateRejection *self) +{ + return self->priv->dbus_error; +} + +/** + * tp_tls_certificate_rejection_get_details: + * @self: a #TpTLSCertificateRejection + * + * Return the #TpTLSCertificateRejection:details property + * + * Returns: the value of #TpTLSCertificateRejection:details property + * + * Since: UNRELEASED + */ +GVariant * +tp_tls_certificate_rejection_get_details (TpTLSCertificateRejection *self) +{ + return self->priv->details; +} |