Use gio for bonjour xfer closing.

Tue, 17 Nov 2020 22:05:15 -0600

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Tue, 17 Nov 2020 22:05:15 -0600
changeset 40612
f2f4d445ff7b
parent 40611
22d3e966281b
child 40613
55230eededd8

Use gio for bonjour xfer closing.

Just one more thing I missed because it used `recv` unlike everything else.

Testing Done:
Send/receive with bonjour on the same machine, checking debug window for errors.

Reviewed at https://reviews.imfreedom.org/r/228/

libpurple/protocols/bonjour/bonjour_ft.c file | annotate | diff | comparison | revisions
--- a/libpurple/protocols/bonjour/bonjour_ft.c	Tue Nov 17 21:59:59 2020 -0600
+++ b/libpurple/protocols/bonjour/bonjour_ft.c	Tue Nov 17 22:05:15 2020 -0600
@@ -148,40 +148,16 @@
 	g_cancellable_cancel(xf->cancellable);
 }
 
-struct socket_cleanup {
-	int fd;
-	guint handle;
-};
-
-static void
-_wait_for_socket_close(gpointer data, gint source, PurpleInputCondition cond)
-{
-	struct socket_cleanup *sc = data;
-	char buf[1];
-	int ret;
-
-	ret = recv(source, buf, 1, 0);
-
-	if (ret == 0 || (ret == -1 && !(errno == EAGAIN || errno == EWOULDBLOCK))) {
-		purple_debug_info("bonjour", "Client completed recieving; closing server socket.\n");
-		purple_input_remove(sc->handle);
-		close(sc->fd);
-		g_free(sc);
-	}
-}
-
 static void bonjour_xfer_end(PurpleXfer *xfer)
 {
-	purple_debug_info("bonjour", "Bonjour-xfer-end.\n");
+	purple_debug_info("bonjour", "Bonjour-xfer-end for xfer %p", xfer);
 
 	/* We can't allow the server side to close the connection until the client is complete,
 	 * otherwise there is a RST resulting in an error on the client side */
 	if (purple_xfer_get_xfer_type(xfer) == PURPLE_XFER_TYPE_SEND && purple_xfer_is_completed(xfer)) {
-		struct socket_cleanup *sc = g_new0(struct socket_cleanup, 1);
-		sc->fd = purple_xfer_get_fd(xfer);
+		XepXfer *xf = XEP_XFER(xfer);
+		g_io_stream_close_async(G_IO_STREAM(xf->conn), G_PRIORITY_DEFAULT, xf->cancellable, NULL, NULL);
 		purple_xfer_set_fd(xfer, -1);
-		sc->handle = purple_input_add(sc->fd, PURPLE_INPUT_READ,
-						 _wait_for_socket_close, sc);
 	}
 }
 

mercurial