telepathy-gabble: auth-manager: save GError from channel when it closes

Will Thompson wjt at kemper.freedesktop.org
Thu Dec 6 09:56:44 PST 2012


Module: telepathy-gabble
Branch: master
Commit: 8fd563ccf66e89aaa20bb37f397aa21b23b7d012
URL:    http://cgit.freedesktop.org/telepathy/telepathy-gabble/commit/?id=8fd563ccf66e89aaa20bb37f397aa21b23b7d012

Author: Will Thompson <will.thompson at collabora.co.uk>
Date:   Mon Nov 19 18:00:52 2012 +0000

auth-manager: save GError from channel when it closes

---

 src/auth-manager.c        |    7 ++++---
 src/server-sasl-channel.c |    8 +++++++-
 src/server-sasl-channel.h |    3 ++-
 3 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/src/auth-manager.c b/src/auth-manager.c
index fac0f7b..59fc1a3 100644
--- a/src/auth-manager.c
+++ b/src/auth-manager.c
@@ -53,6 +53,7 @@ typedef struct {
   gchar *name;
   GHashTable *details;
   TpConnectionStatusReason reason;
+  GError *wocky_error;
 } SavedError;
 
 struct _GabbleAuthManagerPrivate
@@ -108,7 +109,7 @@ static void
 auth_channel_closed_cb (GabbleServerSaslChannel *channel,
     GabbleAuthManager *self)
 {
-  SavedError tmp = { NULL, NULL, 0 };
+  SavedError tmp = { NULL, NULL, 0, NULL };
 
   tp_channel_manager_emit_channel_closed_for_object (self,
       TP_EXPORTABLE_CHANNEL (channel));
@@ -117,7 +118,7 @@ auth_channel_closed_cb (GabbleServerSaslChannel *channel,
 
   /* this is our last chance to find out why it failed */
   if (gabble_server_sasl_channel_get_failure_details (channel,
-      &tmp.name, &tmp.details, &tmp.reason))
+      &tmp.name, &tmp.details, &tmp.reason, &tmp.wocky_error))
     self->priv->error = g_slice_dup (SavedError, &tmp);
 
   g_signal_handler_disconnect (self->priv->channel, self->priv->closed_id);
@@ -575,7 +576,7 @@ gabble_auth_manager_get_failure_details (GabbleAuthManager *self,
   if (self->priv->channel != NULL)
     {
       return gabble_server_sasl_channel_get_failure_details (
-          self->priv->channel, dbus_error, details, reason);
+          self->priv->channel, dbus_error, details, reason, NULL);
     }
   else if (self->priv->error != NULL)
     {
diff --git a/src/server-sasl-channel.c b/src/server-sasl-channel.c
index 48b8fae..3eb4f66 100644
--- a/src/server-sasl-channel.c
+++ b/src/server-sasl-channel.c
@@ -1033,6 +1033,8 @@ gabble_server_sasl_channel_close (TpBaseChannel *channel)
  * @details: (out) (transfer full) (element-type utf8 GObject.Value): the
  *  error details
  * @reason: (out): the reason with which to disconnect
+ * @error: (out): an error in a domain Wocky understands describing what went
+ *  wrong
  *
  * Returns: %TRUE if an error was copied; %FALSE leaving the 'out' parameters
  *  untouched if there is no error
@@ -1041,7 +1043,8 @@ gboolean
 gabble_server_sasl_channel_get_failure_details (GabbleServerSaslChannel *self,
     gchar **dbus_error,
     GHashTable **details,
-    TpConnectionStatusReason *reason)
+    TpConnectionStatusReason *reason,
+    GError **error)
 {
   if (self->priv->sasl_error != NULL)
     {
@@ -1054,6 +1057,9 @@ gabble_server_sasl_channel_get_failure_details (GabbleServerSaslChannel *self,
       if (reason != NULL)
         *reason = self->priv->disconnect_reason;
 
+      if (error != NULL)
+        *error = g_error_copy (self->priv->wocky_auth_error);
+
       return TRUE;
     }
   else
diff --git a/src/server-sasl-channel.h b/src/server-sasl-channel.h
index 32cae43..83e41bd 100644
--- a/src/server-sasl-channel.h
+++ b/src/server-sasl-channel.h
@@ -94,7 +94,8 @@ void gabble_server_sasl_channel_fail (GabbleServerSaslChannel *self,
 
 gboolean gabble_server_sasl_channel_get_failure_details (
     GabbleServerSaslChannel *self, gchar **dbus_error, GHashTable **details,
-    TpConnectionStatusReason *reason);
+    TpConnectionStatusReason *reason,
+    GError **error);
 
 G_END_DECLS
 



More information about the telepathy-commits mailing list