[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