Wed, 13 May 2009 20:29:03 +0000
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 | 2 | * purple |
|
11055
e564996853bf
[gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
diff
changeset
|
3 | * |
| 15884 | 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 | 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 | 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 | 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 | 58 | * Here we include the list of #PURPLE_DBUS_DEFINE_TYPE statements for |
| 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 | 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 | 93 | PURPLE_DBUS_TYPE(PurpleBuddy)->parent = PURPLE_DBUS_TYPE(PurpleBlistNode); |
| 94 | PURPLE_DBUS_TYPE(PurpleContact)->parent = PURPLE_DBUS_TYPE(PurpleBlistNode); | |
| 95 | PURPLE_DBUS_TYPE(PurpleChat)->parent = PURPLE_DBUS_TYPE(PurpleBlistNode); | |
| 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 | 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 | 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 | 129 | purple_debug_warning("dbus", |
| 18201 | 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 | 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 | 139 | PurpleDBusType *objtype; |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
140 | |
| 15884 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 418 | purple_dbus_get_connection(void) |
|
14025
98bb9921edfa
[gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents:
14017
diff
changeset
|
419 | { |
| 15884 | 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 | 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 | 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 | 433 | bindings = (PurpleDBusBinding*) user_data; |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
434 | |
| 15884 | 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 | 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 | 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 | 496 | g_string_append_printf(str, "<node name='%s'>\n", DBUS_PATH_PURPLE); |
| 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 580 | purple_dbus_dispatch_init(void) |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
581 | { |
| 15884 | 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 | 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 | 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 | 596 | /* Do not allow libdbus to exit on connection failure (This may |
| 597 | work around random exit(1) on SIGPIPE errors) */ | |
| 15884 | 598 | dbus_connection_set_exit_on_disconnect (purple_dbus_connection, FALSE); |
| 14960 | 599 | |
| 15884 | 600 | if (!dbus_connection_register_object_path(purple_dbus_connection, |
| 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 | 609 | result = dbus_bus_request_name(purple_dbus_connection, |
| 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 | 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 | 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 | 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 | 623 | purple_debug_misc("dbus", "okkk\n"); |
|
14025
98bb9921edfa
[gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents:
14017
diff
changeset
|
624 | |
| 15884 | 625 | purple_signal_register(purple_dbus_get_handle(), "dbus-method-called", |
| 626 | purple_marshal_BOOLEAN__POINTER_POINTER, | |
| 627 | purple_value_new(PURPLE_TYPE_BOOLEAN), 2, | |
| 628 | purple_value_new(PURPLE_TYPE_POINTER), | |
| 629 | purple_value_new(PURPLE_TYPE_POINTER)); | |
|
11171
a25653d60f9c
[gaim-migrate @ 13272]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11146
diff
changeset
|
630 | |
| 15884 | 631 | purple_signal_register(purple_dbus_get_handle(), "dbus-introspect", |
| 632 | purple_marshal_VOID__POINTER, NULL, 1, | |
| 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 | 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 | 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 | 649 | int purple_index, g_index; |
| 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 | 653 | for (purple_index = g_index = 0; purple_name[purple_index]; purple_index++) |
| 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 | 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 | 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 | 672 | purple_dbus_message_append_purple_values(DBusMessageIter *iter, |
| 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 | 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 | 696 | switch (purple_values[i]->type) |
|
14025
98bb9921edfa
[gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents:
14017
diff
changeset
|
697 | { |
| 15884 | 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 | 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 | 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 | 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 | 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 | 723 | purple_debug_error("dbus", "Invalid UTF-8 string passed to signal, emitting salvaged string!\n"); |
| 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 | 729 | } |
|
14025
98bb9921edfa
[gaim-migrate @ 16517]
Mark Doliner <markdoliner@pidgin.im>
parents:
14017
diff
changeset
|
730 | break; |
| 15884 | 731 | case PURPLE_TYPE_SUBTYPE: /* registered pointers only! */ |
| 732 | case PURPLE_TYPE_POINTER: | |
| 733 | case PURPLE_TYPE_OBJECT: | |
| 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 | 752 | purple_dbus_signal_emit_purple(const char *name, int num_values, |
| 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 | 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 | 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 | 776 | newname = purple_dbus_convert_signal_name(name); |
| 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 |