2
my_get_property_sync (const void * parent,
6
DBusMessage * method_call;
8
DBusMessageIter variter;
11
const char * interface;
12
const char * property;
13
DBusMessageIter local_iter;
14
const char * local_item0_dbus;
19
nih_assert (proxy != NULL);
20
nih_assert (value != NULL);
22
/* Construct the method call message. */
23
method_call = dbus_message_new_method_call (proxy->name, proxy->path, "org.freedesktop.DBus.Properties", "Get");
25
nih_return_no_memory_error (-1);
27
dbus_message_set_auto_start (method_call, proxy->auto_start);
29
dbus_message_iter_init_append (method_call, &iter);
31
interface = "com.netsplit.Nih.Test";
32
if (! dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &interface)) {
33
dbus_message_unref (method_call);
34
nih_return_no_memory_error (-1);
37
property = "property";
38
if (! dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &property)) {
39
dbus_message_unref (method_call);
40
nih_return_no_memory_error (-1);
43
/* Send the message, and wait for the reply. */
44
dbus_error_init (&error);
46
reply = dbus_connection_send_with_reply_and_block (proxy->connection, method_call, -1, &error);
48
dbus_message_unref (method_call);
50
if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY)) {
51
nih_error_raise_no_memory ();
53
nih_dbus_error_raise (error.name, error.message);
56
dbus_error_free (&error);
60
dbus_message_unref (method_call);
62
/* Iterate the method arguments, recursing into the variant */
63
dbus_message_iter_init (reply, &iter);
65
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_VARIANT) {
66
dbus_message_unref (reply);
67
nih_return_error (-1, NIH_DBUS_INVALID_ARGS,
68
_(NIH_DBUS_INVALID_ARGS_STR));
71
dbus_message_iter_recurse (&iter, &variter);
73
dbus_message_iter_next (&iter);
75
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_INVALID) {
76
dbus_message_unref (reply);
77
nih_return_error (-1, NIH_DBUS_INVALID_ARGS,
78
_(NIH_DBUS_INVALID_ARGS_STR));
84
/* Demarshal a structure from the message */
85
if (dbus_message_iter_get_arg_type (&variter) != DBUS_TYPE_STRUCT) {
86
dbus_message_unref (reply);
87
nih_return_error (-1, NIH_DBUS_INVALID_ARGS,
88
_(NIH_DBUS_INVALID_ARGS_STR));
91
dbus_message_iter_recurse (&variter, &local_iter);
93
local = nih_new (parent, MyProperty);
99
/* Demarshal a char * from the message */
100
if (dbus_message_iter_get_arg_type (&local_iter) != DBUS_TYPE_STRING) {
102
dbus_message_unref (reply);
103
nih_return_error (-1, NIH_DBUS_INVALID_ARGS,
104
_(NIH_DBUS_INVALID_ARGS_STR));
107
dbus_message_iter_get_basic (&local_iter, &local_item0_dbus);
109
local_item0 = nih_strdup (local, local_item0_dbus);
116
dbus_message_iter_next (&local_iter);
118
local->item0 = local_item0;
120
/* Demarshal a uint32_t from the message */
121
if (dbus_message_iter_get_arg_type (&local_iter) != DBUS_TYPE_UINT32) {
123
dbus_message_unref (reply);
124
nih_return_error (-1, NIH_DBUS_INVALID_ARGS,
125
_(NIH_DBUS_INVALID_ARGS_STR));
128
dbus_message_iter_get_basic (&local_iter, &local_item1);
130
dbus_message_iter_next (&local_iter);
132
local->item1 = local_item1;
134
if (dbus_message_iter_get_arg_type (&local_iter) != DBUS_TYPE_INVALID) {
136
dbus_message_unref (reply);
137
nih_return_error (-1, NIH_DBUS_INVALID_ARGS,
138
_(NIH_DBUS_INVALID_ARGS_STR));
141
dbus_message_iter_next (&variter);
144
enomem: __attribute__ ((unused));
147
dbus_message_unref (reply);