/soc/2015/jgeboski/facebook: f9437ac8aa5d: facebook: correctly p...
James Geboski <[email protected]>
| Newsgroups | gmane.comp.gnome.gaim.cvs |
|---|---|
| Message-ID | <[email protected]> |
Changeset: f9437ac8aa5d9f6224db752114b0023fc73a97ed Author: James Geboski <[email protected]> Date: 2015-08-01 16:49 -0400 Branch: facebook URL: https://hg.pidgin.im/soc/2015/jgeboski/facebook/rev/f9437ac8aa5d Description: facebook: correctly propagate MQTT SSL errors diffstat: libpurple/protocols/facebook/facebook.c | 8 +++++++- libpurple/protocols/facebook/mqtt.c | 23 +++++++++++++++++++++-- libpurple/protocols/facebook/mqtt.h | 4 ++++ 3 files changed, 32 insertions(+), 3 deletions(-) diffs (91 lines): diff --git a/libpurple/protocols/facebook/facebook.c b/libpurple/protocols/facebook/facebook.c --- a/libpurple/protocols/facebook/facebook.c +++ b/libpurple/protocols/facebook/facebook.c @@ -189,6 +189,13 @@ fb_cb_api_error(FbApi *api, GError *erro PurpleConnection *gc; PurpleConnectionError errc; + gc = fb_data_get_connection(fata); + + if (error->domain == FB_MQTT_SSL_ERROR) { + purple_connection_ssl_error(gc, error->code); + return; + } + if ((error->domain == FB_HTTP_ERROR) && (error->code >= 400) && (error->code <= 500)) @@ -200,7 +207,6 @@ fb_cb_api_error(FbApi *api, GError *erro errc = PURPLE_CONNECTION_ERROR_NETWORK_ERROR; } - gc = fb_data_get_connection(fata); purple_connection_error(gc, errc, error->message); } diff --git a/libpurple/protocols/facebook/mqtt.c b/libpurple/protocols/facebook/mqtt.c --- a/libpurple/protocols/facebook/mqtt.c +++ b/libpurple/protocols/facebook/mqtt.c @@ -170,6 +170,18 @@ fb_mqtt_error_quark(void) return q; } +GQuark +fb_mqtt_ssl_error_quark(void) +{ + static GQuark q = 0; + + if (G_UNLIKELY(q == 0)) { + q = g_quark_from_static_string("fb-mqtt-ssl-error-quark"); + } + + return q; +} + FbMqtt * fb_mqtt_new(PurpleConnection *gc) { @@ -550,13 +562,20 @@ static void fb_mqtt_cb_open_error(PurpleSslConnection *ssl, PurpleSslErrorType error, gpointer data) { + const gchar *str; FbMqtt *mqtt = data; FbMqttPrivate *priv = mqtt->priv; + GError *err; + + str = purple_ssl_strerror(error); + err = g_error_new_literal(FB_MQTT_SSL_ERROR, error, str); + + g_signal_emit_by_name(mqtt, "error", err); + g_error_free(err); /* Do not call purple_ssl_close() from the error_func */ priv->gsc = NULL; - - fb_mqtt_error(mqtt, FB_MQTT_ERROR_GENERAL, _("Failed to connect")); + fb_mqtt_close(mqtt); } void diff --git a/libpurple/protocols/facebook/mqtt.h b/libpurple/protocols/facebook/mqtt.h --- a/libpurple/protocols/facebook/mqtt.h +++ b/libpurple/protocols/facebook/mqtt.h @@ -53,6 +53,7 @@ #define FB_MQTT_MESSAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), FB_TYPE_MQTT_MESSAGE, FbMqttMessageClass)) #define FB_MQTT_ERROR fb_mqtt_error_quark() +#define FB_MQTT_SSL_ERROR fb_mqtt_ssl_error_quark() typedef enum _FbMqttConnectFlags FbMqttConnectFlags; typedef enum _FbMqttError FbMqttError; @@ -147,6 +148,9 @@ fb_mqtt_message_get_type(void); GQuark fb_mqtt_error_quark(void); +GQuark +fb_mqtt_ssl_error_quark(void); + FbMqtt * fb_mqtt_new(PurpleConnection *gc); _______________________________________________ Commits mailing list [email protected] https://pidgin.im/cgi-bin/mailman/listinfo/commits