Mon, 12 Sep 2022 21:10:57 -0500
Rename purple-gio.[ch] to purplegio.[ch] to match the other files
Testing Done:
Compiled
Reviewed at https://reviews.imfreedom.org/r/1750/
| libpurple/meson.build | file | annotate | diff | comparison | revisions | |
| libpurple/proxy.c | file | annotate | diff | comparison | revisions | |
| libpurple/purple-gio.c | file | annotate | diff | comparison | revisions | |
| libpurple/purple-gio.h | file | annotate | diff | comparison | revisions | |
| libpurple/purplegio.c | file | annotate | diff | comparison | revisions | |
| libpurple/purplegio.h | file | annotate | diff | comparison | revisions | |
| libpurple/upnp.c | file | annotate | diff | comparison | revisions | |
| libpurple/xfer.c | file | annotate | diff | comparison | revisions | |
| po/POTFILES.in | file | annotate | diff | comparison | revisions |
--- a/libpurple/meson.build Mon Sep 12 21:04:13 2022 -0500 +++ b/libpurple/meson.build Mon Sep 12 21:10:57 2022 -0500 @@ -35,7 +35,6 @@ 'prefs.c', 'proxy.c', 'protocols.c', - 'purple-gio.c', 'purpleaccountmanager.c', 'purpleaccountoption.c', 'purpleaccountpresence.c', @@ -54,6 +53,7 @@ 'purplecredentialprovider.c', 'purpledebugui.c', 'purplegdkpixbuf.c', + 'purplegio.c', 'purplehistoryadapter.c', 'purplehistorymanager.c', 'purpleidleui.c', @@ -138,7 +138,6 @@ 'prefs.h', 'proxy.h', 'protocols.h', - 'purple-gio.h', 'purpleaccountmanager.h', 'purpleaccountoption.h', 'purpleaccountpresence.h', @@ -156,6 +155,7 @@ 'purplecredentialprovider.h', 'purpledebugui.h', 'purplegdkpixbuf.h', + 'purplegio.h', 'purplehistoryadapter.h', 'purplehistorymanager.h', 'purpleidleui.h',
--- a/libpurple/proxy.c Mon Sep 12 21:04:13 2022 -0500 +++ b/libpurple/proxy.c Mon Sep 12 21:10:57 2022 -0500 @@ -27,7 +27,7 @@ #include "notify.h" #include "prefs.h" #include "proxy.h" -#include "purple-gio.h" +#include "purplegio.h" #include "util.h" #include <gio/gio.h>
--- a/libpurple/purple-gio.c Mon Sep 12 21:04:13 2022 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,162 +0,0 @@ -/* - * - * purple - * - * Purple is the legal property of its developers, whose names are too numerous - * to list here. Please refer to the COPYRIGHT file distributed with this - * source distribution. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - */ - -#include "purple-gio.h" - -#include "debug.h" -#include "internal.h" -#include "proxy.h" - -typedef struct { - GIOStream *stream; - GInputStream *input; - GOutputStream *output; -} GracefulCloseData; - -static gboolean -graceful_close_cb(gpointer user_data) -{ - GracefulCloseData *data = user_data; - GError *error = NULL; - - if (g_input_stream_has_pending(data->input) || - g_output_stream_has_pending(data->output)) { - /* Has pending operations. Not ready to close yet. - * Try again later. - */ - return G_SOURCE_CONTINUE; - } - - /* Finally can gracefully close */ - - /* Close input stream, from wrapper or GIOStream */ - if (!g_input_stream_close(data->input, NULL, &error)) { - if (error->code != G_IO_ERROR_CANCELLED) { - purple_debug_warning("gio", "Error closing input stream: %s", - error->message); - } - g_clear_error(&error); - } - - g_clear_object(&data->input); - - /* Close output stream, from wrapper or GIOStream */ - if (!g_output_stream_close(data->output, NULL, &error)) { - if (error->code != G_IO_ERROR_CANCELLED) { - purple_debug_warning("gio", "Error closing output stream: %s", - error->message); - } - g_clear_error(&error); - } - - g_clear_object(&data->output); - - /* Close io stream */ - if (!g_io_stream_close(data->stream, NULL, &error)) { - if (error->code != G_IO_ERROR_CANCELLED) { - purple_debug_warning("gio", "Error closing stream: %s", - error->message); - } - g_clear_error(&error); - } - - g_clear_object(&data->stream); - - /* Clean up */ - g_free(data); - return G_SOURCE_REMOVE; -} - -void -purple_gio_graceful_close(GIOStream *stream, - GInputStream *input, GOutputStream *output) -{ - GracefulCloseData *data; - - g_return_if_fail(G_IS_IO_STREAM(stream)); - g_return_if_fail(input == NULL || G_IS_INPUT_STREAM(input)); - g_return_if_fail(output == NULL || G_IS_OUTPUT_STREAM(output)); - - data = g_new(GracefulCloseData, 1); - data->stream = g_object_ref(stream); - - if (input == NULL) - input = g_io_stream_get_input_stream(stream); - data->input = g_object_ref(input); - - if (output == NULL) - output = g_io_stream_get_output_stream(stream); - data->output = g_object_ref(output); - - /* Try gracefully closing the stream synchronously */ - if (graceful_close_cb(data) == G_SOURCE_CONTINUE) { - /* Has pending operations. Do so asynchronously */ - g_idle_add(graceful_close_cb, data); - } -} - -GSocketClient * -purple_gio_socket_client_new(PurpleAccount *account, GError **error) -{ - GProxyResolver *resolver; - GSocketClient *client; - - resolver = purple_proxy_get_proxy_resolver(account, error); - - if (resolver == NULL) { - return NULL; - } - - client = g_socket_client_new(); - g_socket_client_set_proxy_resolver(client, resolver); - g_object_unref(resolver); - - return client; -} - -guint16 -purple_socket_listener_add_any_inet_port(GSocketListener *listener, - GObject *source_object, GError **error) -{ - GError *internal_error = NULL; - guint16 port, start, end; - - if (!purple_prefs_get_bool("/purple/network/ports_range_use")) { - return g_socket_listener_add_any_inet_port(listener, source_object, - error); - } - - start = purple_prefs_get_int("/purple/network/ports_range_start"); - end = purple_prefs_get_int("/purple/network/ports_range_end"); - for (port = start; port <= end; port++) { - if (g_socket_listener_add_inet_port(listener, port, source_object, - &internal_error)) { - return port; - } else if (port != end) { - g_error_free(internal_error); - } - } - - g_propagate_error(error, internal_error); - return 0; -}
--- a/libpurple/purple-gio.h Mon Sep 12 21:04:13 2022 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* - * - * purple - * - * Purple is the legal property of its developers, whose names are too numerous - * to list here. Please refer to the COPYRIGHT file distributed with this - * source distribution. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - */ - -#if !defined(PURPLE_GLOBAL_HEADER_INSIDE) && !defined(PURPLE_COMPILATION) -# error "only <purple.h> may be included directly" -#endif - -#ifndef PURPLE_GIO_H -#define PURPLE_GIO_H - -/** - * purple_gio: - * - * The Purple Gio API provides helper functions for Gio operations which - * are commonly used within libpurple and its consumers. These contain - * such functions as setting up connections and shutting them down - * gracefully. - */ - -#include "account.h" - -#include <gio/gio.h> - -G_BEGIN_DECLS - -/** - * purple_gio_graceful_close: - * @stream: A #GIOStream to close - * @input: (nullable): A #GInputStream which wraps @stream's input stream - * @output: (nullable): A #GOutputStream which wraps @stream's output stream - * - * Closes @input, @output, @stream. If there are pending operations, it - * asynchronously waits for the operations to finish before closing the - * arguments. Ensure the Gio callbacks can safely handle this being done - * asynchronously. - */ -void -purple_gio_graceful_close(GIOStream *stream, - GInputStream *input, GOutputStream *output); - -/** - * purple_gio_socket_client_new: - * @account: The #PurpleAccount to use for this connection - * @error: Return location for a GError, or NULL - * - * A helper function to simplify creating a #GSocketClient. It's intended - * to be used in protocol plugins. - * - * Returns: (transfer full): A new #GSocketClient with the appropriate - * GProxyResolver, based on the #PurpleAccount settings and - * TLS Certificate handling, or NULL if an error occurred. - */ -GSocketClient * -purple_gio_socket_client_new(PurpleAccount *account, GError **error); - -/** - * purple_socket_listener_add_any_inet_port: - * @listener: A #GSocketListener. - * @source_object: (nullable): Optional GObject identifying this source. - * @error: A #GError location to store the error occurring, or %NULL to ignore. - * - * Listens for TCP connections on any available port number for both IPv6 and - * IPv4 (if each is available). This is a simple wrapper around - * g_socket_listener_add_any_inet_port(), except if the user specified a port - * range in the settings, than a port will be chosen from that range. - * - * Returns: The port number, or 0 in case of failure. - */ -guint16 purple_socket_listener_add_any_inet_port(GSocketListener *listener, - GObject *source_object, - GError **error); - -G_END_DECLS - -#endif /* PURPLE_GIO_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/purplegio.c Mon Sep 12 21:10:57 2022 -0500 @@ -0,0 +1,162 @@ +/* + * + * purple + * + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#include "purplegio.h" + +#include "debug.h" +#include "internal.h" +#include "proxy.h" + +typedef struct { + GIOStream *stream; + GInputStream *input; + GOutputStream *output; +} GracefulCloseData; + +static gboolean +graceful_close_cb(gpointer user_data) +{ + GracefulCloseData *data = user_data; + GError *error = NULL; + + if (g_input_stream_has_pending(data->input) || + g_output_stream_has_pending(data->output)) { + /* Has pending operations. Not ready to close yet. + * Try again later. + */ + return G_SOURCE_CONTINUE; + } + + /* Finally can gracefully close */ + + /* Close input stream, from wrapper or GIOStream */ + if (!g_input_stream_close(data->input, NULL, &error)) { + if (error->code != G_IO_ERROR_CANCELLED) { + purple_debug_warning("gio", "Error closing input stream: %s", + error->message); + } + g_clear_error(&error); + } + + g_clear_object(&data->input); + + /* Close output stream, from wrapper or GIOStream */ + if (!g_output_stream_close(data->output, NULL, &error)) { + if (error->code != G_IO_ERROR_CANCELLED) { + purple_debug_warning("gio", "Error closing output stream: %s", + error->message); + } + g_clear_error(&error); + } + + g_clear_object(&data->output); + + /* Close io stream */ + if (!g_io_stream_close(data->stream, NULL, &error)) { + if (error->code != G_IO_ERROR_CANCELLED) { + purple_debug_warning("gio", "Error closing stream: %s", + error->message); + } + g_clear_error(&error); + } + + g_clear_object(&data->stream); + + /* Clean up */ + g_free(data); + return G_SOURCE_REMOVE; +} + +void +purple_gio_graceful_close(GIOStream *stream, + GInputStream *input, GOutputStream *output) +{ + GracefulCloseData *data; + + g_return_if_fail(G_IS_IO_STREAM(stream)); + g_return_if_fail(input == NULL || G_IS_INPUT_STREAM(input)); + g_return_if_fail(output == NULL || G_IS_OUTPUT_STREAM(output)); + + data = g_new(GracefulCloseData, 1); + data->stream = g_object_ref(stream); + + if (input == NULL) + input = g_io_stream_get_input_stream(stream); + data->input = g_object_ref(input); + + if (output == NULL) + output = g_io_stream_get_output_stream(stream); + data->output = g_object_ref(output); + + /* Try gracefully closing the stream synchronously */ + if (graceful_close_cb(data) == G_SOURCE_CONTINUE) { + /* Has pending operations. Do so asynchronously */ + g_idle_add(graceful_close_cb, data); + } +} + +GSocketClient * +purple_gio_socket_client_new(PurpleAccount *account, GError **error) +{ + GProxyResolver *resolver; + GSocketClient *client; + + resolver = purple_proxy_get_proxy_resolver(account, error); + + if (resolver == NULL) { + return NULL; + } + + client = g_socket_client_new(); + g_socket_client_set_proxy_resolver(client, resolver); + g_object_unref(resolver); + + return client; +} + +guint16 +purple_socket_listener_add_any_inet_port(GSocketListener *listener, + GObject *source_object, GError **error) +{ + GError *internal_error = NULL; + guint16 port, start, end; + + if (!purple_prefs_get_bool("/purple/network/ports_range_use")) { + return g_socket_listener_add_any_inet_port(listener, source_object, + error); + } + + start = purple_prefs_get_int("/purple/network/ports_range_start"); + end = purple_prefs_get_int("/purple/network/ports_range_end"); + for (port = start; port <= end; port++) { + if (g_socket_listener_add_inet_port(listener, port, source_object, + &internal_error)) { + return port; + } else if (port != end) { + g_error_free(internal_error); + } + } + + g_propagate_error(error, internal_error); + return 0; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/purplegio.h Mon Sep 12 21:10:57 2022 -0500 @@ -0,0 +1,95 @@ +/* + * + * purple + * + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ + +#if !defined(PURPLE_GLOBAL_HEADER_INSIDE) && !defined(PURPLE_COMPILATION) +# error "only <purple.h> may be included directly" +#endif + +#ifndef PURPLE_GIO_H +#define PURPLE_GIO_H + +/** + * purple_gio: + * + * The Purple Gio API provides helper functions for Gio operations which + * are commonly used within libpurple and its consumers. These contain + * such functions as setting up connections and shutting them down + * gracefully. + */ + +#include "account.h" + +#include <gio/gio.h> + +G_BEGIN_DECLS + +/** + * purple_gio_graceful_close: + * @stream: A #GIOStream to close + * @input: (nullable): A #GInputStream which wraps @stream's input stream + * @output: (nullable): A #GOutputStream which wraps @stream's output stream + * + * Closes @input, @output, @stream. If there are pending operations, it + * asynchronously waits for the operations to finish before closing the + * arguments. Ensure the Gio callbacks can safely handle this being done + * asynchronously. + */ +void +purple_gio_graceful_close(GIOStream *stream, + GInputStream *input, GOutputStream *output); + +/** + * purple_gio_socket_client_new: + * @account: The #PurpleAccount to use for this connection + * @error: Return location for a GError, or NULL + * + * A helper function to simplify creating a #GSocketClient. It's intended + * to be used in protocol plugins. + * + * Returns: (transfer full): A new #GSocketClient with the appropriate + * GProxyResolver, based on the #PurpleAccount settings and + * TLS Certificate handling, or NULL if an error occurred. + */ +GSocketClient * +purple_gio_socket_client_new(PurpleAccount *account, GError **error); + +/** + * purple_socket_listener_add_any_inet_port: + * @listener: A #GSocketListener. + * @source_object: (nullable): Optional GObject identifying this source. + * @error: A #GError location to store the error occurring, or %NULL to ignore. + * + * Listens for TCP connections on any available port number for both IPv6 and + * IPv4 (if each is available). This is a simple wrapper around + * g_socket_listener_add_any_inet_port(), except if the user specified a port + * range in the settings, than a port will be chosen from that range. + * + * Returns: The port number, or 0 in case of failure. + */ +guint16 purple_socket_listener_add_any_inet_port(GSocketListener *listener, + GObject *source_object, + GError **error); + +G_END_DECLS + +#endif /* PURPLE_GIO_H */
--- a/libpurple/upnp.c Mon Sep 12 21:04:13 2022 -0500 +++ b/libpurple/upnp.c Mon Sep 12 21:10:57 2022 -0500 @@ -32,7 +32,7 @@ #include "eventloop.h" #include "network.h" #include "proxy.h" -#include "purple-gio.h" +#include "purplegio.h" #include "signals.h" #include "util.h" #include "xmlnode.h"
--- a/libpurple/xfer.c Mon Sep 12 21:04:13 2022 -0500 +++ b/libpurple/xfer.c Mon Sep 12 21:10:57 2022 -0500 @@ -34,9 +34,9 @@ #include "notify.h" #include "prefs.h" #include "proxy.h" -#include "purple-gio.h" #include "purpleconversationmanager.h" #include "purpleenums.h" +#include "purplegio.h" #include "request.h" #include "server.h" #include "util.h"
--- a/po/POTFILES.in Mon Sep 12 21:04:13 2022 -0500 +++ b/po/POTFILES.in Mon Sep 12 21:10:57 2022 -0500 @@ -249,7 +249,7 @@ libpurple/purplecredentialprovider.c libpurple/purpledebugui.c libpurple/purplegdkpixbuf.c -libpurple/purple-gio.c +libpurple/purplegio.c libpurple/purplehistoryadapter.c libpurple/purplehistorymanager.c libpurple/purpleidleui.c