libpurple/purplegio.c

Thu, 07 Aug 2025 21:32:18 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 07 Aug 2025 21:32:18 -0500
changeset 43300
0604c6839974
parent 43253
0cc00d7d6215
permissions
-rw-r--r--

Clean up and modernize PurpleImage

Testing Done:
Ran the tests under valgrind and called in the turtles.

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

37956
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
1 /*
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
2 * Purple - Internet Messaging Library
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
37956
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
4 *
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
5 * Purple is the legal property of its developers, whose names are too numerous
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
37956
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
7 * source distribution.
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
8 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
9 * This library is free software; you can redistribute it and/or modify it
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
10 * under the terms of the GNU General Public License as published by the Free
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
11 * Software Foundation; either version 2 of the License, or (at your option)
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
12 * any later version.
37956
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
13 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
14 * This library is distributed in the hope that it will be useful, but WITHOUT
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
17 * more details.
37956
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
18 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
19 * You should have received a copy of the GNU General Public License along with
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
20 * this library; if not, see <https://www.gnu.org/licenses/>.
37956
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
21 */
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
22
41672
7d3c68e0a8ee Rename purple-gio.[ch] to purplegio.[ch] to match the other files
Gary Kramlich <grim@reaperworld.com>
parents: 40870
diff changeset
23 #include "purplegio.h"
40870
e3397381fd35 Remove includes from protocol.h that weren't used there and deal with the fallout
Gary Kramlich <grim@reaperworld.com>
parents: 40498
diff changeset
24
43010
9a3485b096c8 Port network settings to GSettings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42594
diff changeset
25 #include "core.h"
40870
e3397381fd35 Remove includes from protocol.h that weren't used there and deal with the fallout
Gary Kramlich <grim@reaperworld.com>
parents: 40498
diff changeset
26 #include "debug.h"
43010
9a3485b096c8 Port network settings to GSettings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42594
diff changeset
27 #include "network.h"
42557
e868bfcc092a Only include headers when they're necessary for header files
Gary Kramlich <grim@reaperworld.com>
parents: 42381
diff changeset
28 #include "prefs.h"
37962
13e2a9fcbddd purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents: 37956
diff changeset
29 #include "proxy.h"
37956
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
30
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
31 typedef struct {
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
32 GIOStream *stream;
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
33 GInputStream *input;
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
34 GOutputStream *output;
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
35 } GracefulCloseData;
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
36
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
37 static gboolean
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
38 graceful_close_cb(gpointer user_data) {
37956
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
39 GracefulCloseData *data = user_data;
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
40 GError *error = NULL;
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
41
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
42 if(g_input_stream_has_pending(data->input) ||
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
43 g_output_stream_has_pending(data->output))
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
44 {
37956
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
45 /* Has pending operations. Not ready to close yet.
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
46 * Try again later.
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
47 */
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
48 return G_SOURCE_CONTINUE;
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
49 }
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
50
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
51 /* Finally can gracefully close */
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
52
38137
6ea02c2ccb05 purple-gio: purple_gio_graceful_close(): Handle NULL arguments sanely
Mike Ruprecht <cmaiku@gmail.com>
parents: 37965
diff changeset
53 /* Close input stream, from wrapper or GIOStream */
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
54 if(!g_input_stream_close(data->input, NULL, &error)) {
42182
3fc2d2b7b7a8 Fix leaked errors
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41685
diff changeset
55 if(!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
40498
b119cf7a05b9 Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents: 40341
diff changeset
56 purple_debug_warning("gio", "Error closing input stream: %s",
b119cf7a05b9 Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents: 40341
diff changeset
57 error->message);
b119cf7a05b9 Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents: 40341
diff changeset
58 }
37956
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
59 g_clear_error(&error);
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
60 }
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
61
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
62 g_clear_object(&data->input);
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
63
38137
6ea02c2ccb05 purple-gio: purple_gio_graceful_close(): Handle NULL arguments sanely
Mike Ruprecht <cmaiku@gmail.com>
parents: 37965
diff changeset
64 /* Close output stream, from wrapper or GIOStream */
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
65 if(!g_output_stream_close(data->output, NULL, &error)) {
42182
3fc2d2b7b7a8 Fix leaked errors
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41685
diff changeset
66 if(!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
40498
b119cf7a05b9 Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents: 40341
diff changeset
67 purple_debug_warning("gio", "Error closing output stream: %s",
b119cf7a05b9 Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents: 40341
diff changeset
68 error->message);
b119cf7a05b9 Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents: 40341
diff changeset
69 }
37956
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
70 g_clear_error(&error);
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
71 }
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
72
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
73 g_clear_object(&data->output);
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
74
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
75 /* Close io stream */
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
76 if(!g_io_stream_close(data->stream, NULL, &error)) {
42182
3fc2d2b7b7a8 Fix leaked errors
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41685
diff changeset
77 if(!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
40498
b119cf7a05b9 Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents: 40341
diff changeset
78 purple_debug_warning("gio", "Error closing stream: %s",
b119cf7a05b9 Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents: 40341
diff changeset
79 error->message);
b119cf7a05b9 Fix memory issues at shutdown
Elliott S <quantum.analyst@gmail.com>
parents: 40341
diff changeset
80 }
37956
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
81 g_clear_error(&error);
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
82 }
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
83
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
84 g_clear_object(&data->stream);
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
85 g_free(data);
37956
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
86
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
87 return G_SOURCE_REMOVE;
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
88 }
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
89
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
90 void
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
91 purple_gio_graceful_close(GIOStream *stream, GInputStream *input,
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
92 GOutputStream *output)
37956
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
93 {
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
94 GracefulCloseData *data;
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
95
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
96 g_return_if_fail(G_IS_IO_STREAM(stream));
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
97 g_return_if_fail(input == NULL || G_IS_INPUT_STREAM(input));
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
98 g_return_if_fail(output == NULL || G_IS_OUTPUT_STREAM(output));
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
99
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
100 data = g_new(GracefulCloseData, 1);
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
101 data->stream = g_object_ref(stream);
38137
6ea02c2ccb05 purple-gio: purple_gio_graceful_close(): Handle NULL arguments sanely
Mike Ruprecht <cmaiku@gmail.com>
parents: 37965
diff changeset
102
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
103 if(input == NULL) {
38137
6ea02c2ccb05 purple-gio: purple_gio_graceful_close(): Handle NULL arguments sanely
Mike Ruprecht <cmaiku@gmail.com>
parents: 37965
diff changeset
104 input = g_io_stream_get_input_stream(stream);
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
105 }
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
106
37956
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
107 data->input = g_object_ref(input);
38137
6ea02c2ccb05 purple-gio: purple_gio_graceful_close(): Handle NULL arguments sanely
Mike Ruprecht <cmaiku@gmail.com>
parents: 37965
diff changeset
108
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
109 if(output == NULL) {
38137
6ea02c2ccb05 purple-gio: purple_gio_graceful_close(): Handle NULL arguments sanely
Mike Ruprecht <cmaiku@gmail.com>
parents: 37965
diff changeset
110 output = g_io_stream_get_output_stream(stream);
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
111 }
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
112
37956
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
113 data->output = g_object_ref(output);
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
114
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
115 /* Try gracefully closing the stream synchronously */
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
116 if(graceful_close_cb(data) == G_SOURCE_CONTINUE) {
37956
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
117 /* Has pending operations. Do so asynchronously */
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
118 g_idle_add(graceful_close_cb, data);
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
119 }
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
120 }
21cffc3446a0 purple-gio: Add purple-gio.[ch] containing purple_gio_graceful_close()
Mike Ruprecht <cmaiku@gmail.com>
parents:
diff changeset
121
37962
13e2a9fcbddd purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents: 37956
diff changeset
122 GSocketClient *
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
123 purple_gio_socket_client_new(PurpleAccount *account, GError **error) {
37962
13e2a9fcbddd purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents: 37956
diff changeset
124 GProxyResolver *resolver;
13e2a9fcbddd purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents: 37956
diff changeset
125 GSocketClient *client;
13e2a9fcbddd purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents: 37956
diff changeset
126
37965
b67fb3fb5f85 proxy: Add GError argument to purple_proxy_get_proxy_resolver()
Mike Ruprecht <cmaiku@gmail.com>
parents: 37962
diff changeset
127 resolver = purple_proxy_get_proxy_resolver(account, error);
37962
13e2a9fcbddd purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents: 37956
diff changeset
128
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
129 if(resolver == NULL) {
37962
13e2a9fcbddd purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents: 37956
diff changeset
130 return NULL;
13e2a9fcbddd purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents: 37956
diff changeset
131 }
13e2a9fcbddd purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents: 37956
diff changeset
132
13e2a9fcbddd purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents: 37956
diff changeset
133 client = g_socket_client_new();
13e2a9fcbddd purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents: 37956
diff changeset
134 g_socket_client_set_proxy_resolver(client, resolver);
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
135 g_clear_object(&resolver);
37962
13e2a9fcbddd purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents: 37956
diff changeset
136
13e2a9fcbddd purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents: 37956
diff changeset
137 return client;
13e2a9fcbddd purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents: 37956
diff changeset
138 }
13e2a9fcbddd purple-gio: Add purple_gio_socket_client_new() helper function
Mike Ruprecht <cmaiku@gmail.com>
parents: 37956
diff changeset
139
40341
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
140 guint16
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
141 purple_socket_listener_add_any_inet_port(GSocketListener *listener,
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
142 GObject *source_object,
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
143 GError **error)
40341
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
144 {
43010
9a3485b096c8 Port network settings to GSettings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42594
diff changeset
145 GSettings *settings = NULL;
40341
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
146 GError *internal_error = NULL;
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
147 guint16 port, start, end;
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
148
43253
0cc00d7d6215 Create purple_core_new_settings
Gary Kramlich <grim@reaperworld.com>
parents: 43010
diff changeset
149 settings = purple_core_new_settings("im.pidgin.Purple.Network.Ports.Manual");
43010
9a3485b096c8 Port network settings to GSettings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42594
diff changeset
150
9a3485b096c8 Port network settings to GSettings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42594
diff changeset
151 if(!g_settings_get_boolean(settings, "enabled")) {
9a3485b096c8 Port network settings to GSettings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42594
diff changeset
152 g_object_unref(settings);
9a3485b096c8 Port network settings to GSettings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42594
diff changeset
153
40341
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
154 return g_socket_listener_add_any_inet_port(listener, source_object,
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
155 error);
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
156 }
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
157
43010
9a3485b096c8 Port network settings to GSettings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42594
diff changeset
158 start = g_settings_get_int(settings, "start");
9a3485b096c8 Port network settings to GSettings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42594
diff changeset
159 end = g_settings_get_int(settings, "end");
9a3485b096c8 Port network settings to GSettings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42594
diff changeset
160 g_clear_object(&settings);
9a3485b096c8 Port network settings to GSettings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42594
diff changeset
161
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
162 for(port = start; port <= end; port++) {
40341
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
163 if (g_socket_listener_add_inet_port(listener, port, source_object,
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
164 &internal_error))
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
165 {
40341
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
166 return port;
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
167 } else if(port != end) {
40341
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
168 g_error_free(internal_error);
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
169 }
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
170 }
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
171
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
172 g_propagate_error(error, internal_error);
42381
4359ee5b9faf Cleanup and modernize the gio helper api
Gary Kramlich <grim@reaperworld.com>
parents: 42182
diff changeset
173
40341
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
174 return 0;
ae0175720477 Add a helper to open ports, respecting user settings.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39314
diff changeset
175 }

mercurial