libpurple/dbus-server.c

Wed, 13 May 2009 20:29:03 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Wed, 13 May 2009 20:29:03 +0000
changeset 27110
05ca719b901b
parent 25367
8b430003342c
child 27568
437768598637
permissions
-rw-r--r--

Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.

11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
1 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
2 * purple
11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
4 * Purple is the legal property of its developers, whose names are too numerous
11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
6 * source distribution.
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
7 *
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
11 * (at your option) any later version.
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
12 *
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
16 * GNU General Public License for more details.
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
17 *
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
19 * 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: 18223
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
21 *
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
22 */
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
23
22582
838faa931042 Avoid a compile warning when building with NetworkManager support because
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22223
diff changeset
24 #ifndef DBUS_API_SUBJECT_TO_CHANGE
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
25 #define DBUS_API_SUBJECT_TO_CHANGE
22582
838faa931042 Avoid a compile warning when building with NetworkManager support because
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22223
diff changeset
26 #endif
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
27
11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
28 #include <stdio.h>
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
29 #include <stdlib.h>
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
30 #include <string.h>
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
31
24569
5dbd0617a27d Build everything with the *_DISABLE_DEPRECATED flags set. This allows us
Richard Laager <rlaager@pidgin.im>
parents: 23022
diff changeset
32 /* Allow the code below to see deprecated functions, so we can continue to
5dbd0617a27d Build everything with the *_DISABLE_DEPRECATED flags set. This allows us
Richard Laager <rlaager@pidgin.im>
parents: 23022
diff changeset
33 * export them via DBus. */
5dbd0617a27d Build everything with the *_DISABLE_DEPRECATED flags set. This allows us
Richard Laager <rlaager@pidgin.im>
parents: 23022
diff changeset
34 #undef PURPLE_DISABLE_DEPRECATED
5dbd0617a27d Build everything with the *_DISABLE_DEPRECATED flags set. This allows us
Richard Laager <rlaager@pidgin.im>
parents: 23022
diff changeset
35
11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
36 #include "account.h"
11067
b6353889a9ba [gaim-migrate @ 13048]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11055
diff changeset
37 #include "blist.h"
b6353889a9ba [gaim-migrate @ 13048]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11055
diff changeset
38 #include "conversation.h"
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
39 #include "dbus-purple.h"
11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
40 #include "dbus-server.h"
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
41 #include "dbus-useful.h"
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
42 #include "dbus-bindings.h"
11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
43 #include "debug.h"
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
44 #include "core.h"
14017
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
45 #include "internal.h"
13763
dc4815a8f4aa [gaim-migrate @ 16173]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13761
diff changeset
46 #include "savedstatuses.h"
23022
ed4aeaec12e3 Expose the smiley API to dbus.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22582
diff changeset
47 #include "smiley.h"
15001
7996da15af1a [gaim-migrate @ 17711]
Ethan Blanton <elb@pidgin.im>
parents: 14960
diff changeset
48 #include "util.h"
11067
b6353889a9ba [gaim-migrate @ 13048]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11055
diff changeset
49 #include "value.h"
14414
31ca779c0f9f [gaim-migrate @ 17058]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14323
diff changeset
50 #include "xmlnode.h"
11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
51
11080
0578003800d0 [gaim-migrate @ 13092]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11068
diff changeset
52
11067
b6353889a9ba [gaim-migrate @ 13048]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11055
diff changeset
53 /**************************************************************************/
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
54 /** @name Purple DBUS pointer registration mechanism */
11080
0578003800d0 [gaim-migrate @ 13092]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11068
diff changeset
55 /**************************************************************************/
11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
56
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
57 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
58 * Here we include the list of #PURPLE_DBUS_DEFINE_TYPE statements for
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
59 * all structs defined in purple. This file has been generated by the
14197
1c504c3063f3 [gaim-migrate @ 16777]
Evan Schoenberg <evands@pidgin.im>
parents: 14184
diff changeset
60 * #dbus-analyze-types.py script.
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
61 */
11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
62
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
63 #include "dbus-types.c"
11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
64
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
65 /*
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
66 * The following three hashtables map are used to translate between
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
67 * pointers (nodes) and the corresponding handles (ids).
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
68 */
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
69
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
70 static GHashTable *map_node_id;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
71 static GHashTable *map_id_node;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
72 static GHashTable *map_id_type;
11080
0578003800d0 [gaim-migrate @ 13092]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11068
diff changeset
73
14017
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
74 static gchar *init_error;
17121
43d41f5ce17b Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 17120
diff changeset
75 static int dbus_request_name_reply = DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER;
43d41f5ce17b Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 17120
diff changeset
76
43d41f5ce17b Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 17120
diff changeset
77 gboolean purple_dbus_is_owner(void)
43d41f5ce17b Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 17120
diff changeset
78 {
43d41f5ce17b Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 17120
diff changeset
79 return(DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER == dbus_request_name_reply);
43d41f5ce17b Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 17120
diff changeset
80 }
14017
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
81
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
82 /**
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
83 * This function initializes the pointer-id traslation system. It
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
84 * creates the three above hashtables and defines parents of some types.
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
85 */
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
86 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
87 purple_dbus_init_ids(void)
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
88 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
89 map_id_node = g_hash_table_new(g_direct_hash, g_direct_equal);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
90 map_id_type = g_hash_table_new(g_direct_hash, g_direct_equal);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
91 map_node_id = g_hash_table_new(g_direct_hash, g_direct_equal);
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
92
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
93 PURPLE_DBUS_TYPE(PurpleBuddy)->parent = PURPLE_DBUS_TYPE(PurpleBlistNode);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
94 PURPLE_DBUS_TYPE(PurpleContact)->parent = PURPLE_DBUS_TYPE(PurpleBlistNode);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
95 PURPLE_DBUS_TYPE(PurpleChat)->parent = PURPLE_DBUS_TYPE(PurpleBlistNode);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
96 PURPLE_DBUS_TYPE(PurpleGroup)->parent = PURPLE_DBUS_TYPE(PurpleBlistNode);
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
97 }
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
98
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
99 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
100 purple_dbus_register_pointer(gpointer node, PurpleDBusType *type)
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
101 {
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
102 static gint last_id = 0;
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
103
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
104 g_return_if_fail(map_node_id);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
105 g_return_if_fail(g_hash_table_lookup(map_node_id, node) == NULL);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
106
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
107 last_id++;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
108 g_hash_table_insert(map_node_id, node, GINT_TO_POINTER(last_id));
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
109 g_hash_table_insert(map_id_node, GINT_TO_POINTER(last_id), node);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
110 g_hash_table_insert(map_id_type, GINT_TO_POINTER(last_id), type);
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
111 }
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
112
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
113 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
114 purple_dbus_unregister_pointer(gpointer node)
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
115 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
116 gpointer id = g_hash_table_lookup(map_node_id, node);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
117
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
118 g_hash_table_remove(map_node_id, node);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
119 g_hash_table_remove(map_id_node, GINT_TO_POINTER(id));
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
120 g_hash_table_remove(map_id_type, GINT_TO_POINTER(id));
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
121 }
11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
122
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
123 gint
17516
4a5036965628 A patch from o_sukhodolsky to fix a couple warnings like this:
Richard Laager <rlaager@pidgin.im>
parents: 17514
diff changeset
124 purple_dbus_pointer_to_id(gconstpointer node)
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
125 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
126 gint id = GPOINTER_TO_INT(g_hash_table_lookup(map_node_id, node));
13761
059b30a9f13f [gaim-migrate @ 16170]
Mark Doliner <markdoliner@pidgin.im>
parents: 13221
diff changeset
127 if ((id == 0) && (node != NULL))
059b30a9f13f [gaim-migrate @ 16170]
Mark Doliner <markdoliner@pidgin.im>
parents: 13221
diff changeset
128 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
129 purple_debug_warning("dbus",
18201
737a9b06cfe9 I like complete
Richard Laager <rlaager@pidgin.im>
parents: 18199
diff changeset
130 "Need to register an object with the dbus subsystem. (If you are not a developer, please ignore this message.)\n");
17671
39bbc1a60a1d Don't use g_return_val_if_reached() for objects not registered with dbus.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17516
diff changeset
131 return 0;
13761
059b30a9f13f [gaim-migrate @ 16170]
Mark Doliner <markdoliner@pidgin.im>
parents: 13221
diff changeset
132 }
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
133 return id;
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
134 }
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
135
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
136 gpointer
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
137 purple_dbus_id_to_pointer(gint id, PurpleDBusType *type)
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
138 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
139 PurpleDBusType *objtype;
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
140
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
141 objtype = (PurpleDBusType*)g_hash_table_lookup(map_id_type,
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
142 GINT_TO_POINTER(id));
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
143
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
144 while (objtype != type && objtype != NULL)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
145 objtype = objtype->parent;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
146
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
147 if (objtype == type)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
148 return g_hash_table_lookup(map_id_node, GINT_TO_POINTER(id));
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
149 else
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
150 return NULL;
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
151 }
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
152
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
153 gint
17516
4a5036965628 A patch from o_sukhodolsky to fix a couple warnings like this:
Richard Laager <rlaager@pidgin.im>
parents: 17514
diff changeset
154 purple_dbus_pointer_to_id_error(gconstpointer ptr, DBusError *error)
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
155 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
156 gint id = purple_dbus_pointer_to_id(ptr);
11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
157
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
158 if (ptr != NULL && id == 0)
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
159 dbus_set_error(error, "im.pidgin.purple.ObjectNotFound",
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
160 "The return object is not mapped (this is a Purple error)");
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
161
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
162 return id;
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
163 }
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
164
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
165 gpointer
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
166 purple_dbus_id_to_pointer_error(gint id, PurpleDBusType *type,
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
167 const char *typename, DBusError *error)
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
168 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
169 gpointer ptr = purple_dbus_id_to_pointer(id, type);
11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
170
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
171 if (ptr == NULL && id != 0)
16205
397be242f4a4 Trac Ticket #149 from JensenDied
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
172 dbus_set_error(error, "im.pidgin.purple.InvalidHandle",
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
173 "%s object with ID = %i not found", typename, id);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
174
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
175 return ptr;
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
176 }
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
177
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
178
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
179 /**************************************************************************/
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
180 /** @name Modified versions of some DBus functions */
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
181 /**************************************************************************/
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
182
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
183 dbus_bool_t
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
184 purple_dbus_message_get_args(DBusMessage *message,
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
185 DBusError *error, int first_arg_type, ...)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
186 {
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
187 dbus_bool_t retval;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
188 va_list var_args;
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
189
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
190 va_start(var_args, first_arg_type);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
191 retval = purple_dbus_message_get_args_valist(message, error, first_arg_type, var_args);
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
192 va_end(var_args);
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
193
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
194 return retval;
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
195 }
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
196
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
197 dbus_bool_t
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
198 purple_dbus_message_get_args_valist(DBusMessage *message,
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
199 DBusError *error, int first_arg_type, va_list var_args)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
200 {
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
201 DBusMessageIter iter;
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
202
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
203 dbus_message_iter_init(message, &iter);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
204 return purple_dbus_message_iter_get_args_valist(&iter, error, first_arg_type, var_args);
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
205 }
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
206
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
207 dbus_bool_t
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
208 purple_dbus_message_iter_get_args(DBusMessageIter *iter,
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
209 DBusError *error, int first_arg_type, ...)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
210 {
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
211 dbus_bool_t retval;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
212 va_list var_args;
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
213
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
214 va_start(var_args, first_arg_type);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
215 retval = purple_dbus_message_iter_get_args_valist(iter, error, first_arg_type, var_args);
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
216 va_end(var_args);
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
217
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
218 return retval;
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
219 }
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
220
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
221 #define TYPE_IS_CONTAINER(typecode) \
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
222 ((typecode) == DBUS_TYPE_STRUCT || \
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
223 (typecode) == DBUS_TYPE_DICT_ENTRY || \
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
224 (typecode) == DBUS_TYPE_VARIANT || \
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
225 (typecode) == DBUS_TYPE_ARRAY)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
226
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
227
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
228 dbus_bool_t
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
229 purple_dbus_message_iter_get_args_valist(DBusMessageIter *iter,
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
230 DBusError *error, int first_arg_type, va_list var_args)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
231 {
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
232 int spec_type, msg_type, i;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
233
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
234 spec_type = first_arg_type;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
235
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
236 for (i = 0; spec_type != DBUS_TYPE_INVALID; i++)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
237 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
238 msg_type = dbus_message_iter_get_arg_type(iter);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
239
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
240 if (msg_type != spec_type)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
241 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
242 dbus_set_error(error, DBUS_ERROR_INVALID_ARGS,
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
243 "Argument %d is specified to be of type \"%i\", but "
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
244 "is actually of type \"%i\"\n", i,
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
245 spec_type, msg_type);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
246 return FALSE;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
247 }
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
248
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
249 if (!TYPE_IS_CONTAINER(spec_type))
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
250 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
251 gpointer ptr;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
252 ptr = va_arg (var_args, gpointer);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
253 dbus_message_iter_get_basic(iter, ptr);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
254 }
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
255 else
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
256 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
257 DBusMessageIter *sub;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
258 sub = va_arg (var_args, DBusMessageIter*);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
259 dbus_message_iter_recurse(iter, sub);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
260 purple_debug_info("dbus", "subiter %p:%p\n", sub, * (gpointer*) sub);
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
261 break; /* for testing only! */
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
262 }
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
263
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
264 spec_type = va_arg(var_args, int);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
265 if (!dbus_message_iter_next(iter) && spec_type != DBUS_TYPE_INVALID)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
266 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
267 dbus_set_error (error, DBUS_ERROR_INVALID_ARGS,
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
268 "Message has only %d arguments, but more were expected", i);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
269 return FALSE;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
270 }
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
271 }
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
272
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
273 return TRUE;
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
274 }
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
275
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
276
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
277
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
278 /**************************************************************************/
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
279 /** @name Useful functions */
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
280 /**************************************************************************/
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
281
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
282 const char *empty_to_null(const char *str)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
283 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
284 if (str == NULL || str[0] == 0)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
285 return NULL;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
286 else
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
287 return str;
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
288 }
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
289
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
290 const char *
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
291 null_to_empty(const char *s)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
292 {
11080
0578003800d0 [gaim-migrate @ 13092]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11068
diff changeset
293 if (s)
0578003800d0 [gaim-migrate @ 13092]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11068
diff changeset
294 return s;
0578003800d0 [gaim-migrate @ 13092]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11068
diff changeset
295 else
0578003800d0 [gaim-migrate @ 13092]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11068
diff changeset
296 return "";
11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
297 }
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
298
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
299 dbus_int32_t *
18190
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
300 purple_dbusify_GList(GList *list, gboolean free_memory, dbus_int32_t *len)
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
301 {
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
302 dbus_int32_t *array;
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
303 int i;
18190
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
304 GList *elem;
11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
305
18190
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
306 *len = g_list_length(list);
18123
360ed0af66ed Lots of DBus list handling changes. The objective here was to eliminate a
Richard Laager <rlaager@pidgin.im>
parents: 18093
diff changeset
307 array = g_new0(dbus_int32_t, *len);
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
308 for (i = 0, elem = list; elem != NULL; elem = elem->next, i++)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
309 array[i] = purple_dbus_pointer_to_id(elem->data);
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
310
18190
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
311 if (free_memory)
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
312 g_list_free(list);
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
313
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
314 return array;
11080
0578003800d0 [gaim-migrate @ 13092]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11068
diff changeset
315 }
11055
e564996853bf [gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff changeset
316
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
317 dbus_int32_t *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
318 purple_dbusify_GSList(GSList *list, gboolean free_memory, dbus_int32_t *len)
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
319 {
18190
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
320 dbus_int32_t *array;
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
321 int i;
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
322 GSList *elem;
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
323
18190
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
324 *len = g_slist_length(list);
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
325 array = g_new0(dbus_int32_t, *len);
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
326 for (i = 0, elem = list; elem != NULL; elem = elem->next, i++)
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
327 array[i] = purple_dbus_pointer_to_id(elem->data);
18123
360ed0af66ed Lots of DBus list handling changes. The objective here was to eliminate a
Richard Laager <rlaager@pidgin.im>
parents: 18093
diff changeset
328
18190
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
329 if (free_memory)
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
330 g_slist_free(list);
11080
0578003800d0 [gaim-migrate @ 13092]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11068
diff changeset
331
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
332 return array;
11067
b6353889a9ba [gaim-migrate @ 13048]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11055
diff changeset
333 }
b6353889a9ba [gaim-migrate @ 13048]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11055
diff changeset
334
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
335 gpointer *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
336 purple_GList_to_array(GList *list, gboolean free_memory, dbus_int32_t *len)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
337 {
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
338 gpointer *array;
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
339 int i;
18190
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
340 GList *elem;
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
341
18190
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
342 *len = g_list_length(list);
18123
360ed0af66ed Lots of DBus list handling changes. The objective here was to eliminate a
Richard Laager <rlaager@pidgin.im>
parents: 18093
diff changeset
343 array = g_new0(gpointer, *len);
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
344 for (i = 0, elem = list; elem != NULL; elem = elem->next, i++)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
345 array[i] = elem->data;
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
346
18190
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
347 if (free_memory)
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
348 g_list_free(list);
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
349
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
350 return array;
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
351 }
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
352
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
353 gpointer *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
354 purple_GSList_to_array(GSList *list, gboolean free_memory, dbus_int32_t *len)
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
355 {
18190
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
356 gpointer *array;
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
357 int i;
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
358 GSList *elem;
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
359
18190
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
360 *len = g_slist_length(list);
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
361 array = g_new0(gpointer, *len);
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
362 for (i = 0, elem = list; elem != NULL; elem = elem->next, i++)
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
363 array[i] = elem->data;
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
364
18190
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
365 if (free_memory)
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
366 g_slist_free(list);
bcf28ef7e8ff Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@pidgin.im>
parents: 18142
diff changeset
367
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
368 return array;
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
369 }
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
370
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
371 GHashTable *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
372 purple_dbus_iter_hash_table(DBusMessageIter *iter, DBusError *error)
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
373 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
374 GHashTable *hash;
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
375
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
376 /* we do not need to destroy strings because they are part of the message */
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
377 hash = g_hash_table_new(g_str_hash, g_str_equal);
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
378
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
379 do {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
380 char *key, *value;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
381 DBusMessageIter subiter;
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
382
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
383 if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_DICT_ENTRY)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
384 goto error;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
385 /* With all due respect to Dijkstra,
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
386 * this goto is for exception
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
387 * handling, and it is ok because it
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
388 * avoids duplication of the code
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
389 * responsible for destroying the hash
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
390 * table. Exceptional instructions
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
391 * for exceptional situations.
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
392 */
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
393
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
394 dbus_message_iter_recurse(iter, &subiter);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
395 if (!purple_dbus_message_iter_get_args(&subiter, error,
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
396 DBUS_TYPE_STRING, &key,
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
397 DBUS_TYPE_STRING, &value,
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
398 DBUS_TYPE_INVALID))
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
399 goto error; /* same here */
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
400
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
401 g_hash_table_insert(hash, key, value);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
402 } while (dbus_message_iter_next(iter));
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
403
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
404 return hash;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
405
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
406 error:
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
407 g_hash_table_destroy(hash);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
408 return NULL;
11187
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
409 }
27beea38898f [gaim-migrate @ 13303]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11175
diff changeset
410
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
411 /**************************************************************/
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
412 /* DBus bindings ... */
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
413 /**************************************************************/
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
414
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
415 static DBusConnection *purple_dbus_connection;
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
416
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
417 DBusConnection *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
418 purple_dbus_get_connection(void)
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
419 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
420 return purple_dbus_connection;
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
421 }
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
422
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
423 #include "dbus-bindings.c"
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
424
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
425 static gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
426 purple_dbus_dispatch_cb(DBusConnection *connection,
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
427 DBusMessage *message, void *user_data)
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
428 {
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
429 const char *name;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
430 PurpleDBusBinding *bindings;
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
431 int i;
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
432
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
433 bindings = (PurpleDBusBinding*) user_data;
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
434
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
435 if (!dbus_message_has_path(message, DBUS_PATH_PURPLE))
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
436 return FALSE;
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
437
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
438 name = dbus_message_get_member(message);
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
439
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
440 if (name == NULL)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
441 return FALSE;
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
442
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
443 if (dbus_message_get_type(message) != DBUS_MESSAGE_TYPE_METHOD_CALL)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
444 return FALSE;
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
445
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
446 for (i = 0; bindings[i].name; i++)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
447 if (!strcmp(name, bindings[i].name))
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
448 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
449 DBusMessage *reply;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
450 DBusError error;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
451
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
452 dbus_error_init(&error);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
453
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
454 reply = bindings[i].handler(message, &error);
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
455
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
456 if (reply == NULL && dbus_error_is_set(&error))
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
457 reply = dbus_message_new_error (message,
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
458 error.name, error.message);
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
459
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
460 if (reply != NULL)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
461 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
462 dbus_connection_send(connection, reply, NULL);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
463 dbus_message_unref(reply);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
464 }
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
465
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
466 return TRUE; /* return reply! */
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
467 }
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
468
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
469 return FALSE;
11067
b6353889a9ba [gaim-migrate @ 13048]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11055
diff changeset
470 }
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
471
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
472
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
473 static const char *
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
474 dbus_gettext(const char **ptr)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
475 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
476 const char *text = *ptr;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
477 *ptr += strlen(text) + 1;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
478 return text;
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
479 }
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
480
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
481 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
482 purple_dbus_introspect_cb(GList **bindings_list, void *bindings)
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
483 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
484 *bindings_list = g_list_prepend(*bindings_list, bindings);
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
485 }
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
486
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
487 static DBusMessage *purple_dbus_introspect(DBusMessage *message)
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
488 {
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
489 DBusMessage *reply;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
490 GString *str;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
491 GList *bindings_list, *node;
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
492
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
493 str = g_string_sized_new(0x1000); /* TODO: why this size? */
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
494
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
495 g_string_append(str, "<!DOCTYPE node PUBLIC '-//freedesktop//DTD D-BUS Object Introspection 1.0//EN' 'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>\n");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
496 g_string_append_printf(str, "<node name='%s'>\n", DBUS_PATH_PURPLE);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
497 g_string_append_printf(str, "<interface name='%s'>\n", DBUS_INTERFACE_PURPLE);
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
498
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
499 bindings_list = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
500 purple_signal_emit(purple_dbus_get_handle(), "dbus-introspect", &bindings_list);
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
501
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
502 for (node = bindings_list; node; node = node->next)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
503 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
504 PurpleDBusBinding *bindings;
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
505 int i;
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
506
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
507 bindings = (PurpleDBusBinding*)node->data;
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
508
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
509 for (i = 0; bindings[i].name; i++)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
510 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
511 const char *text;
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
512
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
513 g_string_append_printf(str, "<method name='%s'>\n", bindings[i].name);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
514
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
515 text = bindings[i].parameters;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
516 while (*text)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
517 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
518 const char *name, *direction, *type;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
519
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
520 direction = dbus_gettext(&text);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
521 type = dbus_gettext(&text);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
522 name = dbus_gettext(&text);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
523
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
524 g_string_append_printf(str,
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
525 "<arg name='%s' type='%s' direction='%s'/>\n",
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
526 name, type, direction);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
527 }
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
528 g_string_append(str, "</method>\n");
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
529 }
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
530 }
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
531
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
532 g_string_append(str, "</interface>\n</node>\n");
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
533
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
534 reply = dbus_message_new_method_return(message);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
535 dbus_message_append_args(reply, DBUS_TYPE_STRING, &(str->str),
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
536 DBUS_TYPE_INVALID);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
537 g_string_free(str, TRUE);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
538 g_list_free(bindings_list);
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
539
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
540 return reply;
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
541 }
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
542
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
543 static DBusHandlerResult
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
544 purple_dbus_dispatch(DBusConnection *connection,
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
545 DBusMessage *message, void *user_data)
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
546 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
547 if (purple_signal_emit_return_1(purple_dbus_get_handle(),
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
548 "dbus-method-called", connection, message))
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
549 return DBUS_HANDLER_RESULT_HANDLED;
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
550
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
551 if (dbus_message_get_type(message) == DBUS_MESSAGE_TYPE_METHOD_CALL &&
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
552 dbus_message_has_path(message, DBUS_PATH_PURPLE) &&
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
553 dbus_message_has_interface(message, DBUS_INTERFACE_INTROSPECTABLE) &&
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
554 dbus_message_has_member(message, "Introspect"))
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
555 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
556 DBusMessage *reply;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
557 reply = purple_dbus_introspect(message);
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
558 dbus_connection_send (connection, reply, NULL);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
559 dbus_message_unref(reply);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
560 return DBUS_HANDLER_RESULT_HANDLED;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
561 }
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
562
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
563 return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
11067
b6353889a9ba [gaim-migrate @ 13048]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11055
diff changeset
564 }
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
565
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
566 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
567 purple_dbus_register_bindings(void *handle, PurpleDBusBinding *bindings)
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
568 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
569 purple_signal_connect(purple_dbus_get_handle(), "dbus-method-called",
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
570 handle,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
571 PURPLE_CALLBACK(purple_dbus_dispatch_cb),
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
572 bindings);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
573 purple_signal_connect(purple_dbus_get_handle(), "dbus-introspect",
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
574 handle,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
575 PURPLE_CALLBACK(purple_dbus_introspect_cb),
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
576 bindings);
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
577 }
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
578
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
579 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
580 purple_dbus_dispatch_init(void)
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
581 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
582 static DBusObjectPathVTable vtable = {NULL, &purple_dbus_dispatch, NULL, NULL, NULL, NULL};
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
583 DBusError error;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
584 int result;
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
585
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
586 dbus_error_init(&error);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
587 purple_dbus_connection = dbus_bus_get(DBUS_BUS_STARTER, &error);
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
588
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
589 if (purple_dbus_connection == NULL)
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
590 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
591 init_error = g_strdup_printf(N_("Failed to get connection: %s"), error.message);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
592 dbus_error_free(&error);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
593 return;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
594 }
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
595
14960
1ae8abb01e70 [gaim-migrate @ 17670]
Jan Kratochvil
parents: 14414
diff changeset
596 /* Do not allow libdbus to exit on connection failure (This may
1ae8abb01e70 [gaim-migrate @ 17670]
Jan Kratochvil
parents: 14414
diff changeset
597 work around random exit(1) on SIGPIPE errors) */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
598 dbus_connection_set_exit_on_disconnect (purple_dbus_connection, FALSE);
14960
1ae8abb01e70 [gaim-migrate @ 17670]
Jan Kratochvil
parents: 14414
diff changeset
599
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
600 if (!dbus_connection_register_object_path(purple_dbus_connection,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
601 DBUS_PATH_PURPLE, &vtable, NULL))
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
602 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
603 init_error = g_strdup_printf(N_("Failed to get name: %s"), error.name);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
604 dbus_error_free(&error);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
605 return;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
606 }
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
607
17121
43d41f5ce17b Alternative dbus_uniq implementation
Gabriel Schulhof <nix@go-nix.ca>
parents: 17120
diff changeset
608 dbus_request_name_reply =
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
609 result = dbus_bus_request_name(purple_dbus_connection,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
610 DBUS_SERVICE_PURPLE, 0, &error);
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
611
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
612 if (dbus_error_is_set(&error))
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
613 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
614 dbus_connection_unref(purple_dbus_connection);
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
615 dbus_error_free(&error);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
616 purple_dbus_connection = NULL;
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
617 init_error = g_strdup_printf(N_("Failed to get serv name: %s"), error.name);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
618 return;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
619 }
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
620
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
621 dbus_connection_setup_with_g_main(purple_dbus_connection, NULL);
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
622
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
623 purple_debug_misc("dbus", "okkk\n");
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
624
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
625 purple_signal_register(purple_dbus_get_handle(), "dbus-method-called",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
626 purple_marshal_BOOLEAN__POINTER_POINTER,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
627 purple_value_new(PURPLE_TYPE_BOOLEAN), 2,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
628 purple_value_new(PURPLE_TYPE_POINTER),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
629 purple_value_new(PURPLE_TYPE_POINTER));
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
630
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
631 purple_signal_register(purple_dbus_get_handle(), "dbus-introspect",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
632 purple_marshal_VOID__POINTER, NULL, 1,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
633 purple_value_new_outgoing(PURPLE_TYPE_POINTER));
11175
b59bc7cc865c [gaim-migrate @ 13280]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11171
diff changeset
634
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
635 PURPLE_DBUS_REGISTER_BINDINGS(purple_dbus_get_handle());
11171
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
636 }
a25653d60f9c [gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11146
diff changeset
637
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
638
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
639
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
640 /**************************************************************************/
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
641 /** @name Signals */
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
642 /**************************************************************************/
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
643
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
644
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
645
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
646 static char *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
647 purple_dbus_convert_signal_name(const char *purple_name)
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
648 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
649 int purple_index, g_index;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
650 char *g_name = g_new(char, strlen(purple_name) + 1);
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
651 gboolean capitalize_next = TRUE;
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
652
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
653 for (purple_index = g_index = 0; purple_name[purple_index]; purple_index++)
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
654 if (purple_name[purple_index] != '-' && purple_name[purple_index] != '_')
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
655 {
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
656 if (capitalize_next)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
657 g_name[g_index++] = g_ascii_toupper(purple_name[purple_index]);
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
658 else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
659 g_name[g_index++] = purple_name[purple_index];
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
660 capitalize_next = FALSE;
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
661 } else
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
662 capitalize_next = TRUE;
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
663
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
664 g_name[g_index] = 0;
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
665
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
666 return g_name;
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
667 }
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
668
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
669 #define my_arg(type) (ptr != NULL ? * ((type *)ptr) : va_arg(data, type))
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
670
17063
db9b865713c4 Show some more useful information when some signal causes some dbus warning/error.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16205
diff changeset
671 static gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
672 purple_dbus_message_append_purple_values(DBusMessageIter *iter,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
673 int number, PurpleValue **purple_values, va_list data)
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
674 {
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
675 int i;
17063
db9b865713c4 Show some more useful information when some signal causes some dbus warning/error.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16205
diff changeset
676 gboolean error = FALSE;
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
677
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
678 for (i = 0; i < number; i++)
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
679 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
680 const char *str;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
681 int id;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
682 gint xint;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
683 guint xuint;
20249
603650f32ee4 applied changes from c6a89223516b0abb6cbb399c2066e3b6a7b69d19
Luke Schierer <lschiere@pidgin.im>
parents: 19859
diff changeset
684 gint64 xint64;
603650f32ee4 applied changes from c6a89223516b0abb6cbb399c2066e3b6a7b69d19
Luke Schierer <lschiere@pidgin.im>
parents: 19859
diff changeset
685 guint64 xuint64;
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
686 gboolean xboolean;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
687 gpointer ptr = NULL;
17063
db9b865713c4 Show some more useful information when some signal causes some dbus warning/error.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16205
diff changeset
688 gpointer val;
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
689
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
690 if (purple_value_is_outgoing(purple_values[i]))
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
691 {
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
692 ptr = my_arg(gpointer);
17063
db9b865713c4 Show some more useful information when some signal causes some dbus warning/error.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16205
diff changeset
693 g_return_val_if_fail(ptr, TRUE);
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
694 }
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
695
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
696 switch (purple_values[i]->type)
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
697 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
698 case PURPLE_TYPE_INT:
22223
3a1bd435e563 Make sure the 'connection-error' signal doesn't cause a dbus error message.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22186
diff changeset
699 case PURPLE_TYPE_ENUM:
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
700 xint = my_arg(gint);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
701 dbus_message_iter_append_basic(iter, DBUS_TYPE_INT32, &xint);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
702 break;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
703 case PURPLE_TYPE_UINT:
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
704 xuint = my_arg(guint);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
705 dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32, &xuint);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
706 break;
20249
603650f32ee4 applied changes from c6a89223516b0abb6cbb399c2066e3b6a7b69d19
Luke Schierer <lschiere@pidgin.im>
parents: 19859
diff changeset
707 case PURPLE_TYPE_INT64:
20252
9d14e73775c1 applied changes from e2f6be4e0c0daee25fdb3250a7e16a881922f8c4
Luke Schierer <lschiere@pidgin.im>
parents: 20249
diff changeset
708 xint64 = my_arg(gint64);
9d14e73775c1 applied changes from e2f6be4e0c0daee25fdb3250a7e16a881922f8c4
Luke Schierer <lschiere@pidgin.im>
parents: 20249
diff changeset
709 dbus_message_iter_append_basic(iter, DBUS_TYPE_INT64, &xint64);
20249
603650f32ee4 applied changes from c6a89223516b0abb6cbb399c2066e3b6a7b69d19
Luke Schierer <lschiere@pidgin.im>
parents: 19859
diff changeset
710 break;
603650f32ee4 applied changes from c6a89223516b0abb6cbb399c2066e3b6a7b69d19
Luke Schierer <lschiere@pidgin.im>
parents: 19859
diff changeset
711 case PURPLE_TYPE_UINT64:
20252
9d14e73775c1 applied changes from e2f6be4e0c0daee25fdb3250a7e16a881922f8c4
Luke Schierer <lschiere@pidgin.im>
parents: 20249
diff changeset
712 xuint64 = my_arg(guint64);
9d14e73775c1 applied changes from e2f6be4e0c0daee25fdb3250a7e16a881922f8c4
Luke Schierer <lschiere@pidgin.im>
parents: 20249
diff changeset
713 dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT64, &xuint64);
20249
603650f32ee4 applied changes from c6a89223516b0abb6cbb399c2066e3b6a7b69d19
Luke Schierer <lschiere@pidgin.im>
parents: 19859
diff changeset
714 break;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
715 case PURPLE_TYPE_BOOLEAN:
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
716 xboolean = my_arg(gboolean);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
717 dbus_message_iter_append_basic(iter, DBUS_TYPE_BOOLEAN, &xboolean);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
718 break;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
719 case PURPLE_TYPE_STRING:
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
720 str = null_to_empty(my_arg(char*));
15001
7996da15af1a [gaim-migrate @ 17711]
Ethan Blanton <elb@pidgin.im>
parents: 14960
diff changeset
721 if (!g_utf8_validate(str, -1, NULL)) {
15142
32b4b0750b6c [gaim-migrate @ 17866]
Mark Doliner <markdoliner@pidgin.im>
parents: 15001
diff changeset
722 gchar *tmp;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
723 purple_debug_error("dbus", "Invalid UTF-8 string passed to signal, emitting salvaged string!\n");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
724 tmp = purple_utf8_salvage(str);
15142
32b4b0750b6c [gaim-migrate @ 17866]
Mark Doliner <markdoliner@pidgin.im>
parents: 15001
diff changeset
725 dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &tmp);
32b4b0750b6c [gaim-migrate @ 17866]
Mark Doliner <markdoliner@pidgin.im>
parents: 15001
diff changeset
726 g_free(tmp);
32b4b0750b6c [gaim-migrate @ 17866]
Mark Doliner <markdoliner@pidgin.im>
parents: 15001
diff changeset
727 } else {
32b4b0750b6c [gaim-migrate @ 17866]
Mark Doliner <markdoliner@pidgin.im>
parents: 15001
diff changeset
728 dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &str);
15001
7996da15af1a [gaim-migrate @ 17711]
Ethan Blanton <elb@pidgin.im>
parents: 14960
diff changeset
729 }
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
730 break;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
731 case PURPLE_TYPE_SUBTYPE: /* registered pointers only! */
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
732 case PURPLE_TYPE_POINTER:
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
733 case PURPLE_TYPE_OBJECT:
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
734 case PURPLE_TYPE_BOXED:
17063
db9b865713c4 Show some more useful information when some signal causes some dbus warning/error.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16205
diff changeset
735 val = my_arg(gpointer);
db9b865713c4 Show some more useful information when some signal causes some dbus warning/error.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16205
diff changeset
736 id = purple_dbus_pointer_to_id(val);
db9b865713c4 Show some more useful information when some signal causes some dbus warning/error.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16205
diff changeset
737 if (id == 0 && val != NULL)
db9b865713c4 Show some more useful information when some signal causes some dbus warning/error.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16205
diff changeset
738 error = TRUE; /* Some error happened. */
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
739 dbus_message_iter_append_basic(iter,
22186
c3146c500dae A patch from Andreas Stührk (Trundle) to fix a problem with our DBus code
Andreas Stührk <andy-pidgin@hammerhartes.de>
parents: 20252
diff changeset
740 (sizeof(id) == sizeof(dbus_int32_t)) ? DBUS_TYPE_INT32 : DBUS_TYPE_INT64, &id);
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
741 break;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
742 default: /* no conversion implemented */
17063
db9b865713c4 Show some more useful information when some signal causes some dbus warning/error.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16205
diff changeset
743 g_return_val_if_reached(TRUE);
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
744 }
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
745 }
17063
db9b865713c4 Show some more useful information when some signal causes some dbus warning/error.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16205
diff changeset
746 return error;
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
747 }
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
748
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
749 #undef my_arg
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
750
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
751 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
752 purple_dbus_signal_emit_purple(const char *name, int num_values,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
753 PurpleValue **values, va_list vargs)
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
754 {
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
755 DBusMessage *signal;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
756 DBusMessageIter iter;
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
757 char *newname;
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
758
11903
56ae8af14a0d [gaim-migrate @ 14194]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11291
diff changeset
759 #if 0 /* this is noisy with no dbus connection */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
760 g_return_if_fail(purple_dbus_connection);
11903
56ae8af14a0d [gaim-migrate @ 14194]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11291
diff changeset
761 #else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
762 if (purple_dbus_connection == NULL)
11903
56ae8af14a0d [gaim-migrate @ 14194]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11291
diff changeset
763 return;
56ae8af14a0d [gaim-migrate @ 14194]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11291
diff changeset
764 #endif
56ae8af14a0d [gaim-migrate @ 14194]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11291
diff changeset
765
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
766
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
767 /*
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
768 * The test below is a hack that prevents our "dbus-method-called"
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
769 * signal from being propagated to dbus. What we really need is a
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
770 * flag for each signal that states whether this signal is to be
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
771 * dbus-propagated or not.
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
772 */
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
773 if (!strcmp(name, "dbus-method-called"))
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
774 return;
11277
ab3c0b6c5ca5 [gaim-migrate @ 13467]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11187
diff changeset
775
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
776 newname = purple_dbus_convert_signal_name(name);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
777 signal = dbus_message_new_signal(DBUS_PATH_PURPLE, DBUS_INTERFACE_PURPLE, newname);
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
778 dbus_message_iter_init_append(signal, &iter);
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
779
17063
db9b865713c4 Show some more useful information when some signal causes some dbus warning/error.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 16205
diff changeset
780 if (purple_dbus_message_append_purple_values(&iter, num_values, values, vargs))
18223
479a664a6e6d Richard likes complete
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18205
diff changeset
781 purple_debug_warning("dbus", "The signal \"%s\" caused some dbus error. (If you are not a developer, please ignore this message.)\n", name);
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
782
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
783 dbus_connection_send(purple_dbus_connection, signal, NULL);
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
784
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
785 g_free(newname);
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
786 dbus_message_unref(signal);
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
787 }
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
788
14017
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
789 const char *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
790 purple_dbus_get_init_error(void)
14017
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
791 {
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
792 return init_error;
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
793 }
11080
0578003800d0 [gaim-migrate @ 13092]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11068
diff changeset
794
14017
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
795 void *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
796 purple_dbus_get_handle(void)
14017
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
797 {
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
798 static int handle;
11080
0578003800d0 [gaim-migrate @ 13092]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11068
diff changeset
799
14025
98bb9921edfa [gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents: 14017
diff changeset
800 return &handle;
14017
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
801 }
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
802
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
803 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
804 purple_dbus_init(void)
11080
0578003800d0 [gaim-migrate @ 13092]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11068
diff changeset
805 {
25367
8b430003342c Only initialize dbus threading if glib threading is initialized. The idea is
Daniel Atallah <datallah@pidgin.im>
parents: 25361
diff changeset
806 if (g_thread_supported())
8b430003342c Only initialize dbus threading if glib threading is initialized. The idea is
Daniel Atallah <datallah@pidgin.im>
parents: 25361
diff changeset
807 dbus_g_thread_init();
25361
bc96fa7224fd Kir Kolyshkin figured out that we need to initialize the dbus threading to avoid
Daniel Atallah <datallah@pidgin.im>
parents: 24569
diff changeset
808
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
809 purple_dbus_init_ids();
14017
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
810
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
811 g_free(init_error);
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
812 init_error = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
813 purple_dbus_dispatch_init();
14017
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
814 if (init_error != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
815 purple_debug_error("dbus", "%s\n", init_error);
11080
0578003800d0 [gaim-migrate @ 13092]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11068
diff changeset
816 }
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
817
14017
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
818 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
819 purple_dbus_uninit(void)
14017
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
820 {
18205
4c8e464e432f Uninit dbus properly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18201
diff changeset
821 DBusError error;
4c8e464e432f Uninit dbus properly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18201
diff changeset
822 if (!purple_dbus_connection)
4c8e464e432f Uninit dbus properly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18201
diff changeset
823 return;
11146
c56333373e3c [gaim-migrate @ 13217]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents: 11080
diff changeset
824
18205
4c8e464e432f Uninit dbus properly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18201
diff changeset
825 dbus_error_init(&error);
4c8e464e432f Uninit dbus properly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18201
diff changeset
826 dbus_connection_unregister_object_path(purple_dbus_connection, DBUS_PATH_PURPLE);
4c8e464e432f Uninit dbus properly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18201
diff changeset
827 dbus_bus_release_name(purple_dbus_connection, DBUS_SERVICE_PURPLE, &error);
4c8e464e432f Uninit dbus properly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18201
diff changeset
828 dbus_error_free(&error);
4c8e464e432f Uninit dbus properly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18201
diff changeset
829 dbus_connection_unref(purple_dbus_connection);
4c8e464e432f Uninit dbus properly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18201
diff changeset
830 purple_dbus_connection = NULL;
4c8e464e432f Uninit dbus properly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18201
diff changeset
831 purple_signals_disconnect_by_handle(purple_dbus_get_handle());
14017
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
832 g_free(init_error);
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
833 init_error = NULL;
db3f1bdc95c6 [gaim-migrate @ 16503]
Mark Doliner <markdoliner@pidgin.im>
parents: 13765
diff changeset
834 }
18205
4c8e464e432f Uninit dbus properly.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18201
diff changeset
835

mercurial