pidgin/pidgin

Parents 18a04d7bfba7
Children b26a160abce5
Rename purple-gio.[ch] to purplegio.[ch] to match the other files

Testing Done:
Compiled

Reviewed at https://reviews.imfreedom.org/r/1750/
--- 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