telepathy-gabble: sasl-channel: stash a GError in more cases.

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


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

Author: Will Thompson <will.thompson at collabora.co.uk>
Date:   Mon Nov 19 17:51:23 2012 +0000

sasl-channel: stash a GError in more cases.

---

 src/server-sasl-channel.c |   43 +++++++++++++++++++++++++------------------
 1 files changed, 25 insertions(+), 18 deletions(-)

diff --git a/src/server-sasl-channel.c b/src/server-sasl-channel.c
index 9af3e8a..bfc7aed 100644
--- a/src/server-sasl-channel.c
+++ b/src/server-sasl-channel.c
@@ -437,7 +437,8 @@ static void
 set_errors (
     GabbleServerSaslChannel *self,
     const gchar *dbus_error,
-    const gchar *debug_message)
+    const gchar *debug_message,
+    const GError *error)
 {
   g_free (self->priv->sasl_error);
   self->priv->sasl_error = g_strdup (dbus_error);
@@ -446,6 +447,9 @@ set_errors (
   if (debug_message != NULL)
     tp_asv_set_string (self->priv->sasl_error_details, "debug-message",
         debug_message);
+
+  g_clear_error (&self->priv->wocky_auth_error);
+  self->priv->wocky_auth_error = g_error_copy (error);
 }
 
 static void
@@ -731,7 +735,6 @@ gabble_server_sasl_channel_abort_sasl (
 {
   GabbleServerSaslChannel *self = GABBLE_SERVER_SASL_CHANNEL (channel);
   GabbleServerSaslChannelPrivate *priv = self->priv;
-  guint code;
   const gchar *dbus_error;
 
   switch (self->priv->sasl_status)
@@ -751,30 +754,38 @@ gabble_server_sasl_channel_abort_sasl (
       case TP_SASL_STATUS_NOT_STARTED:
       case TP_SASL_STATUS_IN_PROGRESS:
       case TP_SASL_STATUS_SERVER_SUCCEEDED:
+      {
+        GError *error = NULL;
+
         switch (in_Reason)
           {
             case TP_SASL_ABORT_REASON_INVALID_CHALLENGE:
-              DEBUG ("invalid challenge (%s)", in_Debug_Message);
-              code = WOCKY_AUTH_ERROR_INVALID_REPLY;
+              g_set_error (&error, WOCKY_AUTH_ERROR,
+                  WOCKY_AUTH_ERROR_INVALID_REPLY,
+                  "invalid challenge (%s)", in_Debug_Message);
               dbus_error = TP_ERROR_STR_SERVICE_CONFUSED;
               break;
 
             case TP_SASL_ABORT_REASON_USER_ABORT:
-              DEBUG ("user aborted auth (%s)", in_Debug_Message);
-              code = WOCKY_AUTH_ERROR_FAILURE;
+              g_set_error (&error, WOCKY_AUTH_ERROR,
+                  WOCKY_AUTH_ERROR_FAILURE,
+                  "user aborted auth (%s)", in_Debug_Message);
               dbus_error = TP_ERROR_STR_CANCELLED;
               break;
 
             default:
-              DEBUG ("unknown reason code %u, treating as User_Abort (%s)",
+              g_set_error (&error, WOCKY_AUTH_ERROR,
+                  WOCKY_AUTH_ERROR_FAILURE,
+                  "unknown reason code %u, treating as User_Abort (%s)",
                   in_Reason, in_Debug_Message);
-              code = WOCKY_AUTH_ERROR_FAILURE;
               dbus_error = TP_ERROR_STR_CANCELLED;
               break;
           }
 
-        g_set_error (&priv->wocky_auth_error, WOCKY_AUTH_ERROR,
-            code, "Authentication aborted: %s", in_Debug_Message);
+        DEBUG ("%s", error->message);
+
+        set_errors (self, dbus_error, in_Debug_Message, error);
+        change_current_state (self, TP_SASL_STATUS_CLIENT_FAILED);
 
         if (priv->result != NULL)
           {
@@ -783,17 +794,13 @@ gabble_server_sasl_channel_abort_sasl (
              *  challenge_async, if one is outstanding.
              * If Server_Succeeded, we're returning failure from success_async.
              */
-
-            g_simple_async_result_set_from_error (priv->result,
-                priv->wocky_auth_error);
+            g_simple_async_result_set_from_error (priv->result, error);
             complete_operation (self, TRUE);
           }
 
-        set_errors (self,
-            dbus_error, in_Debug_Message);
-        change_current_state (self, TP_SASL_STATUS_CLIENT_FAILED);
+        g_error_free (error);
         break;
-
+      }
       default:
         g_assert_not_reached ();
     }
@@ -951,7 +958,7 @@ gabble_server_sasl_channel_fail (GabbleServerSaslChannel *self,
 
   DEBUG ("auth failed: %s", tp_error->message);
   set_errors (self,
-      tp_error_get_dbus_name (tp_error->code), tp_error->message);
+      tp_error_get_dbus_name (tp_error->code), tp_error->message, error);
   change_current_state (self, TP_SASL_STATUS_SERVER_FAILED);
   self->priv->disconnect_reason = conn_reason;
 }



More information about the telepathy-commits mailing list