telepathy-glib: tp_tls_certificate_add_rejection(): takes a GVariant instead of a GHashTable

Guillaume Desmottes gdesmott at kemper.freedesktop.org
Wed May 9 03:15:58 PDT 2012


Module: telepathy-glib
Branch: master
Commit: f45d621d4de4324689551112f7f56e9e2f205786
URL:    http://cgit.freedesktop.org/telepathy/telepathy-glib/commit/?id=f45d621d4de4324689551112f7f56e9e2f205786

Author: Guillaume Desmottes <guillaume.desmottes at collabora.co.uk>
Date:   Thu Apr 19 12:01:09 2012 +0200

tp_tls_certificate_add_rejection(): takes a GVariant instead of a GHashTable

---

 telepathy-glib/tls-certificate.c |   35 ++++++++++++++++++++++++++---------
 telepathy-glib/tls-certificate.h |    2 +-
 tests/dbus/tls-certificate.c     |    5 ++---
 3 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/telepathy-glib/tls-certificate.c b/telepathy-glib/tls-certificate.c
index 7bc8c62..4d908d3 100644
--- a/telepathy-glib/tls-certificate.c
+++ b/telepathy-glib/tls-certificate.c
@@ -26,6 +26,7 @@
 #include <glib/gstdio.h>
 
 #include <telepathy-glib/dbus.h>
+#include <telepathy-glib/dbus-internal.h>
 #include <telepathy-glib/enums.h>
 #include <telepathy-glib/gtypes.h>
 #include <telepathy-glib/interfaces.h>
@@ -673,26 +674,34 @@ tp_tls_certificate_accept_finish (TpTLSCertificate *self,
  * @reason: the reason for rejection
  * @dbus_error: a D-Bus error name such as %TP_ERROR_STR_CERT_REVOKED, or
  *  %NULL to derive one from @reason
- * @details: (transfer none) (allow-none) (element-type utf8 GObject.Value): details of the
- *  rejection, or %NULL
+ * @details: (transfer none) (allow-none): a variant of type
+ * %G_VARIANT_TYPE_VARDICT containing the details of the rejection, or %NULL
  *
  * Add a pending reason for rejection. The first call to this method is
  * considered "most important". After calling this method as many times
  * as are required, call tp_tls_certificate_reject_async() to reject the
- * certif
+ * certificate.
+ *
+ * If @details is a floating reference (see g_variant_ref_sink()),
+ * ownership of @details is taken by this function. This means
+ * you can pass the result of g_variant_new() or g_variant_new_parsed()
+ * directly to this function without additional reference-count management.
+ *
  * Since: UNRELEASED
-ate.
  */
 void
 tp_tls_certificate_add_rejection (TpTLSCertificate *self,
     TpTLSCertificateRejectReason reason,
     const gchar *dbus_error,
-    GHashTable *details)
+    GVariant *details)
 {
   GValueArray *rejection;
+  GHashTable *hash;
 
   g_return_if_fail (dbus_error == NULL ||
       tp_dbus_check_valid_interface_name (dbus_error, NULL));
+  g_return_if_fail (details == NULL ||
+      g_variant_is_of_type (details, G_VARIANT_TYPE_VARDICT));
 
   if (self->priv->pending_rejections == NULL)
     self->priv->pending_rejections = g_ptr_array_new ();
@@ -701,19 +710,27 @@ tp_tls_certificate_add_rejection (TpTLSCertificate *self,
     dbus_error = reject_reason_get_dbus_error (reason);
 
   if (details == NULL)
-    details = g_hash_table_new (NULL, NULL);
+    {
+      hash = g_hash_table_new (NULL, NULL);
+    }
   else
-    g_hash_table_ref (details);
+    {
+      hash = _tp_asv_from_vardict (details);
+      g_variant_ref_sink (details);
+    }
 
   rejection = tp_value_array_build (3,
       G_TYPE_UINT, reason,
       G_TYPE_STRING, dbus_error,
-      TP_HASH_TYPE_STRING_VARIANT_MAP, details,
+      TP_HASH_TYPE_STRING_VARIANT_MAP, hash,
       NULL);
 
   g_ptr_array_add (self->priv->pending_rejections, rejection);
 
-  g_hash_table_unref (details);
+  g_hash_table_unref (hash);
+
+  if (details != NULL)
+    g_variant_unref (details);
 }
 
 /**
diff --git a/telepathy-glib/tls-certificate.h b/telepathy-glib/tls-certificate.h
index 0ad9569..fd77f84 100644
--- a/telepathy-glib/tls-certificate.h
+++ b/telepathy-glib/tls-certificate.h
@@ -96,7 +96,7 @@ gboolean tp_tls_certificate_accept_finish (TpTLSCertificate *self,
 void tp_tls_certificate_add_rejection (TpTLSCertificate *self,
     TpTLSCertificateRejectReason reason,
     const gchar *dbus_error,
-    GHashTable *details);
+    GVariant *details);
 void tp_tls_certificate_reject_async (TpTLSCertificate *self,
     GAsyncReadyCallback callback,
     gpointer user_data);
diff --git a/tests/dbus/tls-certificate.c b/tests/dbus/tls-certificate.c
index 39b85f5..8c0818a 100644
--- a/tests/dbus/tls-certificate.c
+++ b/tests/dbus/tls-certificate.c
@@ -225,14 +225,13 @@ test_reject (Test *test,
   g_signal_connect (test->cert, "notify::state",
       G_CALLBACK (notify_cb), test);
 
-  details = tp_asv_new ("user-requested", G_TYPE_BOOLEAN, TRUE, NULL);
 
   tp_tls_certificate_add_rejection (test->cert,
-      TP_TLS_CERTIFICATE_REJECT_REASON_REVOKED, NULL, details);
+      TP_TLS_CERTIFICATE_REJECT_REASON_REVOKED, NULL,
+      g_variant_new_parsed ("{ 'user-requested': <%b> }", TRUE));
   tp_tls_certificate_add_rejection (test->cert,
       TP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN,
       TP_ERROR_STR_CAPTCHA_NOT_SUPPORTED, NULL);
-  g_hash_table_unref (details);
 
   tp_tls_certificate_reject_async (test->cert, reject_cb, test);
 



More information about the telepathy-commits mailing list