libpurple/xfer.c

changeset 38834
e4144efa975e
parent 38828
a7190db83539
child 38840
33326576c72b
--- a/libpurple/xfer.c	Thu Nov 23 22:30:26 2017 -0600
+++ b/libpurple/xfer.c	Fri Nov 24 00:00:03 2017 -0600
@@ -2488,39 +2488,55 @@
 }
 
 gboolean
-purple_protocol_xfer_can_receive(PurpleProtocolXferInterface *iface,
+purple_protocol_xfer_can_receive(PurpleProtocolXfer *xfer,
                                  PurpleConnection *connection,
                                  const gchar *who
 ) {
-	g_return_val_if_fail(PURPLE_IS_PROTOCOL_XFER(iface), FALSE);
+	PurpleProtocolXferInterface *iface = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_PROTOCOL_XFER(xfer), FALSE);
 	g_return_val_if_fail(PURPLE_IS_CONNECTION(connection), FALSE);
 	g_return_val_if_fail(who, FALSE);
 
-	return iface->can_receive(iface, connection, who);
+	iface = PURPLE_PROTOCOL_XFER_GET_IFACE(xfer);
+	if(iface &&  iface->can_receive)
+		return iface->can_receive(xfer, connection, who);
+
+	return FALSE;
 }
 
 void
-purple_protocol_xfer_send(PurpleProtocolXferInterface *iface,
+purple_protocol_xfer_send(PurpleProtocolXfer *xfer,
                           PurpleConnection *connection,
                           const gchar *who,
                           const gchar *filename
 ) {
-	g_return_if_fail(PURPLE_IS_PROTOCOL_XFER(iface));
+	PurpleProtocolXferInterface *iface = NULL;
+
+	g_return_if_fail(PURPLE_IS_PROTOCOL_XFER(xfer));
 	g_return_if_fail(PURPLE_IS_CONNECTION(connection));
 	g_return_if_fail(who);
 	g_return_if_fail(filename);
 
-	iface->send(iface, connection, who, filename);
+	iface = PURPLE_PROTOCOL_XFER_GET_IFACE(xfer);
+	if(iface && iface->send)
+		iface->send(xfer, connection, who, filename);
 }
 
 PurpleXfer *
-purple_protocol_xfer_new_xfer(PurpleProtocolXferInterface *iface,
+purple_protocol_xfer_new_xfer(PurpleProtocolXfer *xfer,
                               PurpleConnection *connection,
                               const gchar *who
 ) {
-	g_return_val_if_fail(PURPLE_IS_PROTOCOL_XFER(iface), FALSE);
+	PurpleProtocolXferInterface *iface = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_PROTOCOL_XFER(xfer), FALSE);
 	g_return_val_if_fail(PURPLE_IS_CONNECTION(connection), FALSE);
 	g_return_val_if_fail(who, FALSE);
 
-	return iface->new_xfer(iface, connection, who);
+	iface = PURPLE_PROTOCOL_XFER_GET_IFACE(xfer);
+	if(iface && iface->new_xfer)
+		return iface->new_xfer(xfer, connection, who);
+
+	return NULL;
 }

mercurial