libpurple/dbus-bindings.h

Mon, 12 Sep 2016 08:55:35 -0500

author
Mike Ruprecht <cmaiku@gmail.com>
date
Mon, 12 Sep 2016 08:55:35 -0500
changeset 38142
1dff6e343f9f
parent 35499
c4c5e0a670b1
permissions
-rw-r--r--

gg: Protect against issues when closing while connecting

Since the GIOStream is cancelled when data is freed, any cancelled
callbacks are called after such data is freed. This patch guards against
cancelled calls by safely returning without accessing any freed data if
the connection has been cancelled (aka closed).

Futhermore, if GG tries to connect and is quickly disconnected,
ggp_tcpsocket_close() is never called. As far as I can tell, it's an
existing bug, but PurpleSockets both work differently when closing and
are closed by the connection if any leak. So the issue wasn't a major
problem. This patch lessens the issue by guarding against it, but it
should be fixed at some point.

20147
66f05a854eee applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents: 19859
diff changeset
1 /* purple
11174
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
2 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
3 * Purple is the legal property of its developers, whose names are too numerous
11174
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
4 * to list here. Please refer to the COPYRIGHT file distributed with this
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
5 * source distribution.
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
6 *
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
10 * (at your option) any later version.
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
11 *
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
15 * GNU General Public License for more details.
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
16 *
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 18190
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
11174
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
20 *
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
21 */
35487
494f09f7f331 Move section blocks inside inclusion guards -- otherwise g-ir-scanner yells
Ankit Vani <a@nevitus.org>
parents: 35437
diff changeset
22
494f09f7f331 Move section blocks inside inclusion guards -- otherwise g-ir-scanner yells
Ankit Vani <a@nevitus.org>
parents: 35437
diff changeset
23 #ifndef _PURPLE_DBUS_BINDINGS_H_
494f09f7f331 Move section blocks inside inclusion guards -- otherwise g-ir-scanner yells
Ankit Vani <a@nevitus.org>
parents: 35437
diff changeset
24 #define _PURPLE_DBUS_BINDINGS_H_
35437
1f82cf8c8378 Add section blocks for conversation.h to dbus-server.h
Ankit Vani <a@nevitus.org>
parents: 32787
diff changeset
25 /**
1f82cf8c8378 Add section blocks for conversation.h to dbus-server.h
Ankit Vani <a@nevitus.org>
parents: 32787
diff changeset
26 * SECTION:dbus-bindings
1f82cf8c8378 Add section blocks for conversation.h to dbus-server.h
Ankit Vani <a@nevitus.org>
parents: 32787
diff changeset
27 * @section_id: libpurple-dbus-bindings
1f82cf8c8378 Add section blocks for conversation.h to dbus-server.h
Ankit Vani <a@nevitus.org>
parents: 32787
diff changeset
28 * @short_description: <filename>dbus-bindings.h</filename>
1f82cf8c8378 Add section blocks for conversation.h to dbus-server.h
Ankit Vani <a@nevitus.org>
parents: 32787
diff changeset
29 * @title: DBUS Bindings
1f82cf8c8378 Add section blocks for conversation.h to dbus-server.h
Ankit Vani <a@nevitus.org>
parents: 32787
diff changeset
30 */
11174
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
31
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
32 #include <dbus/dbus.h>
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
33 #include <dbus/dbus-glib-lowlevel.h>
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
34 #include <glib.h>
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
35
32787
7072f190d6ad Use G_BEGIN/END_DECLS in public libpurple files. This was
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32438
diff changeset
36 G_BEGIN_DECLS
11884
44f2000e6d64 [gaim-migrate @ 14175]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11501
diff changeset
37
17516
4a5036965628 A patch from o_sukhodolsky to fix a couple warnings like this:
Richard Laager <rlaager@pidgin.im>
parents: 17514
diff changeset
38 gint purple_dbus_pointer_to_id(gconstpointer node);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
39 gpointer purple_dbus_id_to_pointer(gint id, PurpleDBusType *type);
17516
4a5036965628 A patch from o_sukhodolsky to fix a couple warnings like this:
Richard Laager <rlaager@pidgin.im>
parents: 17514
diff changeset
40 gint purple_dbus_pointer_to_id_error(gconstpointer ptr, DBusError *error);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
41 gpointer purple_dbus_id_to_pointer_error(gint id, PurpleDBusType *type,
11174
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
42 const char *typename, DBusError *error);
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
43
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35487
diff changeset
44 #define NULLIFY(id) id = purple_emptystr_to_null(id)
11174
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
45
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
46 #define CHECK_ERROR(error) if (dbus_error_is_set(error)) return NULL;
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
47
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
48 #define PURPLE_DBUS_ID_TO_POINTER(ptr, id, type, error) \
11174
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
49 G_STMT_START { \
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
50 ptr = (type*) purple_dbus_id_to_pointer_error \
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
51 (id, PURPLE_DBUS_TYPE(type), #type, error); \
11174
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
52 CHECK_ERROR(error); \
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
53 } G_STMT_END
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
54
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
55
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
56 #define PURPLE_DBUS_POINTER_TO_ID(id, ptr, error) \
11174
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
57 G_STMT_START { \
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
58 id = purple_dbus_pointer_to_id_error(ptr,error); \
11174
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
59 CHECK_ERROR(error); \
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
60 } G_STMT_END
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
61
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
62
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
63 dbus_bool_t
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
64 purple_dbus_message_get_args (DBusMessage *message,
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
65 DBusError *error,
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
66 int first_arg_type,
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
67 ...);
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
68 dbus_bool_t
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
69 purple_dbus_message_get_args_valist (DBusMessage *message,
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
70 DBusError *error,
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
71 int first_arg_type,
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
72 va_list var_args);
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
73
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
74 dbus_bool_t
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
75 purple_dbus_message_iter_get_args (DBusMessageIter *iter,
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
76 DBusError *error,
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
77 int first_arg_type,
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
78 ...);
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
79
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
80 dbus_bool_t
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
81 purple_dbus_message_iter_get_args_valist (DBusMessageIter *iter,
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
82 DBusError *error,
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
83 int first_arg_type,
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
84 va_list var_args);
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
85
32438
dc8991868906 A boring and large patch so I can merge heads.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25888
diff changeset
86 dbus_int32_t* purple_dbusify_GList(GList *list, dbus_int32_t *len);
dc8991868906 A boring and large patch so I can merge heads.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25888
diff changeset
87 dbus_int32_t* purple_dbusify_GSList(GSList *list, dbus_int32_t *len);
dc8991868906 A boring and large patch so I can merge heads.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25888
diff changeset
88 gpointer* purple_GList_to_array(GList *list, dbus_int32_t *len);
dc8991868906 A boring and large patch so I can merge heads.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25888
diff changeset
89 gpointer* purple_GSList_to_array(GSList *list, dbus_int32_t *len);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
90 GHashTable *purple_dbus_iter_hash_table(DBusMessageIter *iter, DBusError *error);
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11174
diff changeset
91
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35487
diff changeset
92 const char* purple_emptystr_to_null(const char *str);
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35487
diff changeset
93 const char* purple_null_to_emptystr(const char *s);
11174
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
94
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
95 typedef struct {
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
96 const char *name;
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
97 const char *parameters;
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
98 DBusMessage* (*handler)(DBusMessage *request, DBusError *error);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
99 } PurpleDBusBinding;
11174
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
100
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
101 void purple_dbus_register_bindings(void *handle, PurpleDBusBinding *bindings);
11174
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
102
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
103 DBusConnection *purple_dbus_get_connection(void);
11174
513d5e6e7f7e [gaim-migrate @ 13279]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
104
32787
7072f190d6ad Use G_BEGIN/END_DECLS in public libpurple files. This was
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32438
diff changeset
105 G_END_DECLS
11884
44f2000e6d64 [gaim-migrate @ 14175]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11501
diff changeset
106
44f2000e6d64 [gaim-migrate @ 14175]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11501
diff changeset
107 #endif

mercurial