1
static DBusHandlerResult
2
my_com_netsplit_Nih_Test_Search_method (NihDBusObject * object,
3
NihDBusMessage *message)
7
MyTestSearchItem *item;
8
DBusMessageIter item_iter;
9
const char * item_item0_dbus;
13
nih_assert (object != NULL);
14
nih_assert (message != NULL);
16
/* Iterate the arguments to the message and demarshal into arguments
17
* for our own function call.
19
dbus_message_iter_init (message->message, &iter);
21
/* Demarshal a structure from the message */
22
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_STRUCT) {
23
reply = dbus_message_new_error (message->message, DBUS_ERROR_INVALID_ARGS,
24
"Invalid arguments to Search method");
26
return DBUS_HANDLER_RESULT_NEED_MEMORY;
28
if (! dbus_connection_send (message->connection, reply, NULL)) {
29
dbus_message_unref (reply);
30
return DBUS_HANDLER_RESULT_NEED_MEMORY;
33
dbus_message_unref (reply);
34
return DBUS_HANDLER_RESULT_HANDLED;
37
dbus_message_iter_recurse (&iter, &item_iter);
39
item = nih_new (message, MyTestSearchItem);
41
return DBUS_HANDLER_RESULT_NEED_MEMORY;
44
/* Demarshal a char * from the message */
45
if (dbus_message_iter_get_arg_type (&item_iter) != DBUS_TYPE_STRING) {
47
reply = dbus_message_new_error (message->message, DBUS_ERROR_INVALID_ARGS,
48
"Invalid arguments to Search method");
50
return DBUS_HANDLER_RESULT_NEED_MEMORY;
52
if (! dbus_connection_send (message->connection, reply, NULL)) {
53
dbus_message_unref (reply);
54
return DBUS_HANDLER_RESULT_NEED_MEMORY;
57
dbus_message_unref (reply);
58
return DBUS_HANDLER_RESULT_HANDLED;
61
dbus_message_iter_get_basic (&item_iter, &item_item0_dbus);
63
item_item0 = nih_strdup (item, item_item0_dbus);
66
return DBUS_HANDLER_RESULT_NEED_MEMORY;
69
dbus_message_iter_next (&item_iter);
71
item->item0 = item_item0;
73
/* Demarshal a uint32_t from the message */
74
if (dbus_message_iter_get_arg_type (&item_iter) != DBUS_TYPE_UINT32) {
76
reply = dbus_message_new_error (message->message, DBUS_ERROR_INVALID_ARGS,
77
"Invalid arguments to Search method");
79
return DBUS_HANDLER_RESULT_NEED_MEMORY;
81
if (! dbus_connection_send (message->connection, reply, NULL)) {
82
dbus_message_unref (reply);
83
return DBUS_HANDLER_RESULT_NEED_MEMORY;
86
dbus_message_unref (reply);
87
return DBUS_HANDLER_RESULT_HANDLED;
90
dbus_message_iter_get_basic (&item_iter, &item_item1);
92
dbus_message_iter_next (&item_iter);
94
item->item1 = item_item1;
96
if (dbus_message_iter_get_arg_type (&item_iter) != DBUS_TYPE_INVALID) {
98
reply = dbus_message_new_error (message->message, DBUS_ERROR_INVALID_ARGS,
99
"Invalid arguments to Search method");
101
return DBUS_HANDLER_RESULT_NEED_MEMORY;
103
if (! dbus_connection_send (message->connection, reply, NULL)) {
104
dbus_message_unref (reply);
105
return DBUS_HANDLER_RESULT_NEED_MEMORY;
108
dbus_message_unref (reply);
109
return DBUS_HANDLER_RESULT_HANDLED;
112
dbus_message_iter_next (&iter);
114
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_INVALID) {
115
reply = dbus_message_new_error (message->message, DBUS_ERROR_INVALID_ARGS,
116
"Invalid arguments to Search method");
118
return DBUS_HANDLER_RESULT_NEED_MEMORY;
120
if (! dbus_connection_send (message->connection, reply, NULL)) {
121
dbus_message_unref (reply);
122
return DBUS_HANDLER_RESULT_NEED_MEMORY;
125
dbus_message_unref (reply);
126
return DBUS_HANDLER_RESULT_HANDLED;
129
/* Call the handler function */
130
nih_error_push_context ();
131
if (my_test_search (object->data, message, item) < 0) {
134
err = nih_error_get ();
135
if (err->number == ENOMEM) {
137
nih_error_pop_context ();
139
return DBUS_HANDLER_RESULT_NEED_MEMORY;
140
} else if (err->number == NIH_DBUS_ERROR) {
141
NihDBusError *dbus_err = (NihDBusError *)err;
143
reply = NIH_MUST (dbus_message_new_error (message->message, dbus_err->name, err->message));
145
nih_error_pop_context ();
147
NIH_MUST (dbus_connection_send (message->connection, reply, NULL));
149
dbus_message_unref (reply);
150
return DBUS_HANDLER_RESULT_HANDLED;
152
reply = NIH_MUST (dbus_message_new_error (message->message, DBUS_ERROR_FAILED, err->message));
154
nih_error_pop_context ();
156
NIH_MUST (dbus_connection_send (message->connection, reply, NULL));
158
dbus_message_unref (reply);
159
return DBUS_HANDLER_RESULT_HANDLED;
162
nih_error_pop_context ();
164
return DBUS_HANDLER_RESULT_HANDLED;
168
my_test_search_reply (NihDBusMessage * message,
169
const MyTestSearchResult *result)
172
DBusMessageIter iter;
173
DBusMessageIter result_iter;
174
const char * result_item0;
175
const char * result_item1;
177
nih_assert (message != NULL);
178
nih_assert (result != NULL);
180
/* If the sender doesn't care about a reply, don't bother wasting
181
* effort constructing and sending one.
183
if (dbus_message_get_no_reply (message->message))
186
/* Construct the reply message. */
187
reply = dbus_message_new_method_return (message->message);
191
dbus_message_iter_init_append (reply, &iter);
193
/* Marshal a structure onto the message */
194
if (! dbus_message_iter_open_container (&iter, DBUS_TYPE_STRUCT, NULL, &result_iter)) {
195
dbus_message_unref (reply);
199
result_item0 = result->item0;
201
/* Marshal a char * onto the message */
202
if (! dbus_message_iter_append_basic (&result_iter, DBUS_TYPE_STRING, &result_item0)) {
203
dbus_message_iter_abandon_container (&iter, &result_iter);
204
dbus_message_unref (reply);
208
result_item1 = result->item1;
210
/* Marshal a char * onto the message */
211
if (! dbus_message_iter_append_basic (&result_iter, DBUS_TYPE_STRING, &result_item1)) {
212
dbus_message_iter_abandon_container (&iter, &result_iter);
213
dbus_message_unref (reply);
217
if (! dbus_message_iter_close_container (&iter, &result_iter)) {
218
dbus_message_unref (reply);
222
/* Send the reply, appending it to the outgoing queue. */
223
if (! dbus_connection_send (message->connection, reply, NULL)) {
224
dbus_message_unref (reply);
228
dbus_message_unref (reply);
235
my_test_emit_new_search (DBusConnection * connection,
236
const char * origin_path,
237
const MyTestNewSearchQuery *query)
239
DBusMessage * signal;
240
DBusMessageIter iter;
241
DBusMessageIter query_iter;
242
const char * query_item0;
243
const char * query_item1;
244
uint32_t query_item2;
246
nih_assert (connection != NULL);
247
nih_assert (origin_path != NULL);
248
nih_assert (query != NULL);
250
/* Construct the message. */
251
signal = dbus_message_new_signal (origin_path, "com.netsplit.Nih.Test", "NewSearch");
255
dbus_message_iter_init_append (signal, &iter);
257
/* Marshal a structure onto the message */
258
if (! dbus_message_iter_open_container (&iter, DBUS_TYPE_STRUCT, NULL, &query_iter)) {
259
dbus_message_unref (signal);
263
query_item0 = query->item0;
265
/* Marshal a char * onto the message */
266
if (! dbus_message_iter_append_basic (&query_iter, DBUS_TYPE_STRING, &query_item0)) {
267
dbus_message_iter_abandon_container (&iter, &query_iter);
268
dbus_message_unref (signal);
272
query_item1 = query->item1;
274
/* Marshal a char * onto the message */
275
if (! dbus_message_iter_append_basic (&query_iter, DBUS_TYPE_STRING, &query_item1)) {
276
dbus_message_iter_abandon_container (&iter, &query_iter);
277
dbus_message_unref (signal);
281
query_item2 = query->item2;
283
/* Marshal a uint32_t onto the message */
284
if (! dbus_message_iter_append_basic (&query_iter, DBUS_TYPE_UINT32, &query_item2)) {
285
dbus_message_iter_abandon_container (&iter, &query_iter);
286
dbus_message_unref (signal);
290
if (! dbus_message_iter_close_container (&iter, &query_iter)) {
291
dbus_message_unref (signal);
295
/* Send the signal, appending it to the outgoing queue. */
296
if (! dbus_connection_send (connection, signal, NULL)) {
297
dbus_message_unref (signal);
301
dbus_message_unref (signal);
308
my_com_netsplit_Nih_Test_last_search_get (NihDBusObject * object,
309
NihDBusMessage * message,
310
DBusMessageIter *iter)
312
DBusMessageIter variter;
313
DBusMessageIter value_iter;
314
const char * value_item0;
315
uint32_t value_item1;
316
MyTestLastSearch *value;
318
nih_assert (object != NULL);
319
nih_assert (message != NULL);
320
nih_assert (iter != NULL);
322
/* Call the handler function */
323
if (my_test_get_last_search (object->data, message, &value) < 0)
326
/* Append a variant onto the message to contain the property value. */
327
if (! dbus_message_iter_open_container (iter, DBUS_TYPE_VARIANT, "(su)", &variter)) {
328
nih_error_raise_no_memory ();
332
/* Marshal a structure onto the message */
333
if (! dbus_message_iter_open_container (&variter, DBUS_TYPE_STRUCT, NULL, &value_iter)) {
334
dbus_message_iter_abandon_container (iter, &variter);
335
nih_error_raise_no_memory ();
339
value_item0 = value->item0;
341
/* Marshal a char * onto the message */
342
if (! dbus_message_iter_append_basic (&value_iter, DBUS_TYPE_STRING, &value_item0)) {
343
dbus_message_iter_abandon_container (&variter, &value_iter);
344
dbus_message_iter_abandon_container (iter, &variter);
345
nih_error_raise_no_memory ();
349
value_item1 = value->item1;
351
/* Marshal a uint32_t onto the message */
352
if (! dbus_message_iter_append_basic (&value_iter, DBUS_TYPE_UINT32, &value_item1)) {
353
dbus_message_iter_abandon_container (&variter, &value_iter);
354
dbus_message_iter_abandon_container (iter, &variter);
355
nih_error_raise_no_memory ();
359
if (! dbus_message_iter_close_container (&variter, &value_iter)) {
360
dbus_message_iter_abandon_container (iter, &variter);
361
nih_error_raise_no_memory ();
365
/* Finish the variant */
366
if (! dbus_message_iter_close_container (iter, &variter)) {
367
nih_error_raise_no_memory ();
376
my_com_netsplit_Nih_Test_annotation_set (NihDBusObject * object,
377
NihDBusMessage * message,
378
DBusMessageIter *iter)
380
DBusMessageIter variter;
381
DBusMessageIter value_iter;
382
const char * value_item0_dbus;
384
const char * value_item1_dbus;
386
MyTestAnnotation *value;
388
nih_assert (object != NULL);
389
nih_assert (message != NULL);
390
nih_assert (iter != NULL);
392
/* Recurse into the variant */
393
if (dbus_message_iter_get_arg_type (iter) != DBUS_TYPE_VARIANT) {
394
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
395
"Invalid arguments to annotation property");
399
dbus_message_iter_recurse (iter, &variter);
401
/* Demarshal a structure from the message */
402
if (dbus_message_iter_get_arg_type (&variter) != DBUS_TYPE_STRUCT) {
403
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
404
"Invalid arguments to annotation property");
408
dbus_message_iter_recurse (&variter, &value_iter);
410
value = nih_new (message, MyTestAnnotation);
412
nih_error_raise_no_memory ();
416
/* Demarshal a char * from the message */
417
if (dbus_message_iter_get_arg_type (&value_iter) != DBUS_TYPE_STRING) {
419
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
420
"Invalid arguments to annotation property");
424
dbus_message_iter_get_basic (&value_iter, &value_item0_dbus);
426
value_item0 = nih_strdup (value, value_item0_dbus);
429
nih_error_raise_no_memory ();
433
dbus_message_iter_next (&value_iter);
435
value->item0 = value_item0;
437
/* Demarshal a char * from the message */
438
if (dbus_message_iter_get_arg_type (&value_iter) != DBUS_TYPE_STRING) {
440
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
441
"Invalid arguments to annotation property");
445
dbus_message_iter_get_basic (&value_iter, &value_item1_dbus);
447
value_item1 = nih_strdup (value, value_item1_dbus);
450
nih_error_raise_no_memory ();
454
dbus_message_iter_next (&value_iter);
456
value->item1 = value_item1;
458
if (dbus_message_iter_get_arg_type (&value_iter) != DBUS_TYPE_INVALID) {
460
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
461
"Invalid arguments to annotation property");
465
dbus_message_iter_next (&variter);
467
dbus_message_iter_next (iter);
469
if (dbus_message_iter_get_arg_type (iter) != DBUS_TYPE_INVALID) {
470
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
471
"Invalid arguments to annotation property");
475
/* Call the handler function */
476
if (my_test_set_annotation (object->data, message, value) < 0)
484
my_com_netsplit_Nih_Test_preferences_get (NihDBusObject * object,
485
NihDBusMessage * message,
486
DBusMessageIter *iter)
488
DBusMessageIter variter;
489
DBusMessageIter value_iter;
490
uint32_t value_item0;
491
const char * value_item1;
492
MyTestPreferences *value;
494
nih_assert (object != NULL);
495
nih_assert (message != NULL);
496
nih_assert (iter != NULL);
498
/* Call the handler function */
499
if (my_test_get_preferences (object->data, message, &value) < 0)
502
/* Append a variant onto the message to contain the property value. */
503
if (! dbus_message_iter_open_container (iter, DBUS_TYPE_VARIANT, "(us)", &variter)) {
504
nih_error_raise_no_memory ();
508
/* Marshal a structure onto the message */
509
if (! dbus_message_iter_open_container (&variter, DBUS_TYPE_STRUCT, NULL, &value_iter)) {
510
dbus_message_iter_abandon_container (iter, &variter);
511
nih_error_raise_no_memory ();
515
value_item0 = value->item0;
517
/* Marshal a uint32_t onto the message */
518
if (! dbus_message_iter_append_basic (&value_iter, DBUS_TYPE_UINT32, &value_item0)) {
519
dbus_message_iter_abandon_container (&variter, &value_iter);
520
dbus_message_iter_abandon_container (iter, &variter);
521
nih_error_raise_no_memory ();
525
value_item1 = value->item1;
527
/* Marshal a char * onto the message */
528
if (! dbus_message_iter_append_basic (&value_iter, DBUS_TYPE_STRING, &value_item1)) {
529
dbus_message_iter_abandon_container (&variter, &value_iter);
530
dbus_message_iter_abandon_container (iter, &variter);
531
nih_error_raise_no_memory ();
535
if (! dbus_message_iter_close_container (&variter, &value_iter)) {
536
dbus_message_iter_abandon_container (iter, &variter);
537
nih_error_raise_no_memory ();
541
/* Finish the variant */
542
if (! dbus_message_iter_close_container (iter, &variter)) {
543
nih_error_raise_no_memory ();
551
my_com_netsplit_Nih_Test_preferences_set (NihDBusObject * object,
552
NihDBusMessage * message,
553
DBusMessageIter *iter)
555
DBusMessageIter variter;
556
DBusMessageIter value_iter;
557
uint32_t value_item0;
558
const char * value_item1_dbus;
560
MyTestPreferences *value;
562
nih_assert (object != NULL);
563
nih_assert (message != NULL);
564
nih_assert (iter != NULL);
566
/* Recurse into the variant */
567
if (dbus_message_iter_get_arg_type (iter) != DBUS_TYPE_VARIANT) {
568
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
569
"Invalid arguments to preferences property");
573
dbus_message_iter_recurse (iter, &variter);
575
/* Demarshal a structure from the message */
576
if (dbus_message_iter_get_arg_type (&variter) != DBUS_TYPE_STRUCT) {
577
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
578
"Invalid arguments to preferences property");
582
dbus_message_iter_recurse (&variter, &value_iter);
584
value = nih_new (message, MyTestPreferences);
586
nih_error_raise_no_memory ();
590
/* Demarshal a uint32_t from the message */
591
if (dbus_message_iter_get_arg_type (&value_iter) != DBUS_TYPE_UINT32) {
593
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
594
"Invalid arguments to preferences property");
598
dbus_message_iter_get_basic (&value_iter, &value_item0);
600
dbus_message_iter_next (&value_iter);
602
value->item0 = value_item0;
604
/* Demarshal a char * from the message */
605
if (dbus_message_iter_get_arg_type (&value_iter) != DBUS_TYPE_STRING) {
607
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
608
"Invalid arguments to preferences property");
612
dbus_message_iter_get_basic (&value_iter, &value_item1_dbus);
614
value_item1 = nih_strdup (value, value_item1_dbus);
617
nih_error_raise_no_memory ();
621
dbus_message_iter_next (&value_iter);
623
value->item1 = value_item1;
625
if (dbus_message_iter_get_arg_type (&value_iter) != DBUS_TYPE_INVALID) {
627
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
628
"Invalid arguments to preferences property");
632
dbus_message_iter_next (&variter);
634
dbus_message_iter_next (iter);
636
if (dbus_message_iter_get_arg_type (iter) != DBUS_TYPE_INVALID) {
637
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
638
"Invalid arguments to preferences property");
642
/* Call the handler function */
643
if (my_test_set_preferences (object->data, message, value) < 0)