[Telepathy-commits] [telepathy-salut/master] send an IQ error reply instead of asserting if we failed to parse a file transfer offer
Guillaume Desmottes
guillaume.desmottes at collabora.co.uk
Fri Nov 21 03:46:43 PST 2008
---
src/salut-file-transfer-channel.c | 18 +++++++++++++++---
src/salut-file-transfer-channel.h | 6 +++---
src/salut-ft-manager.c | 9 +++++----
3 files changed, 23 insertions(+), 10 deletions(-)
diff --git a/src/salut-file-transfer-channel.c b/src/salut-file-transfer-channel.c
index 4c10597..57c6257 100644
--- a/src/salut-file-transfer-channel.c
+++ b/src/salut-file-transfer-channel.c
@@ -43,6 +43,8 @@
#include <gibber/gibber-xmpp-stanza.h>
#include <gibber/gibber-file-transfer.h>
#include <gibber/gibber-oob-file-transfer.h>
+#include <gibber/gibber-iq-helper.h>
+#include <gibber/gibber-xmpp-error.h>
#include <telepathy-glib/channel-iface.h>
#include <telepathy-glib/interfaces.h>
@@ -937,7 +939,7 @@ xmpp_connection_manager_new_connection_cb (SalutXmppConnectionManager *mgr,
send_file_offer (channel);
}
-void
+gboolean
salut_file_transfer_channel_received_file_offer (SalutFileTransferChannel *self,
GibberXmppStanza *stanza,
GibberXmppConnection *conn)
@@ -948,8 +950,16 @@ salut_file_transfer_channel_received_file_offer (SalutFileTransferChannel *self,
self->priv->xmpp_connection_manager , conn);
ft = gibber_file_transfer_new_from_stanza (stanza, conn);
- /* FIXME: this can lead to a remotely triggered assertion */
- g_return_if_fail (ft);
+ if (ft == NULL)
+ {
+ /* Reply with an error */
+ GibberXmppStanza *reply;
+
+ reply = gibber_iq_helper_new_error_reply (stanza, XMPP_ERROR_BAD_REQUEST,
+ "failed to parse file offer");
+ gibber_xmpp_connection_send (conn, reply, NULL);
+ return FALSE;
+ }
g_signal_connect (ft, "error", G_CALLBACK (error_cb), self);
@@ -966,6 +976,8 @@ salut_file_transfer_channel_received_file_offer (SalutFileTransferChannel *self,
- date
- initial offset
*/
+
+ return TRUE;
}
static void
diff --git a/src/salut-file-transfer-channel.h b/src/salut-file-transfer-channel.h
index 29123dc..a073364 100644
--- a/src/salut-file-transfer-channel.h
+++ b/src/salut-file-transfer-channel.h
@@ -65,9 +65,9 @@ GType salut_file_transfer_channel_get_type (void);
(G_TYPE_INSTANCE_GET_CLASS ((obj), SALUT_TYPE_FILE_TRANSFER_CHANNEL, \
SalutFileTransferChannelClass))
-void
-salut_file_transfer_channel_received_file_offer (SalutFileTransferChannel *self,
- GibberXmppStanza *stanza, GibberXmppConnection *conn);
+gboolean salut_file_transfer_channel_received_file_offer (
+ SalutFileTransferChannel *self, GibberXmppStanza *stanza,
+ GibberXmppConnection *conn);
G_END_DECLS
diff --git a/src/salut-ft-manager.c b/src/salut-ft-manager.c
index 8b1242f..5251083 100644
--- a/src/salut-ft-manager.c
+++ b/src/salut-ft-manager.c
@@ -119,10 +119,11 @@ message_stanza_callback (SalutXmppConnectionManager *mgr,
chan = salut_ft_manager_new_channel (self, handle, FALSE);
/* This will set the extra properties on the ft channel */
- salut_file_transfer_channel_received_file_offer (chan, stanza, conn);
-
- tp_channel_manager_emit_new_channel (self, TP_EXPORTABLE_CHANNEL (chan),
- NULL);
+ if (salut_file_transfer_channel_received_file_offer (chan, stanza, conn))
+ {
+ tp_channel_manager_emit_new_channel (self, TP_EXPORTABLE_CHANNEL (chan),
+ NULL);
+ }
}
static void salut_ft_manager_dispose (GObject *object);
--
1.5.6.5
More information about the Telepathy-commits
mailing list