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