1
static DBusHandlerResult
2
my_com_netsplit_Nih_Test_Poke_method (NihDBusObject * object,
3
NihDBusMessage *message)
9
const char * value_dbus;
11
nih_assert (object != NULL);
12
nih_assert (message != NULL);
14
/* Iterate the arguments to the message and demarshal into arguments
15
* for our own function call.
17
dbus_message_iter_init (message->message, &iter);
19
/* Demarshal a uint32_t from the message */
20
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_UINT32) {
21
reply = dbus_message_new_error (message->message, DBUS_ERROR_INVALID_ARGS,
22
"Invalid arguments to Poke method");
24
return DBUS_HANDLER_RESULT_NEED_MEMORY;
26
if (! dbus_connection_send (message->connection, reply, NULL)) {
27
dbus_message_unref (reply);
28
return DBUS_HANDLER_RESULT_NEED_MEMORY;
31
dbus_message_unref (reply);
32
return DBUS_HANDLER_RESULT_HANDLED;
35
dbus_message_iter_get_basic (&iter, &address);
37
dbus_message_iter_next (&iter);
39
/* Demarshal a char * from the message */
40
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_STRING) {
41
reply = dbus_message_new_error (message->message, DBUS_ERROR_INVALID_ARGS,
42
"Invalid arguments to Poke method");
44
return DBUS_HANDLER_RESULT_NEED_MEMORY;
46
if (! dbus_connection_send (message->connection, reply, NULL)) {
47
dbus_message_unref (reply);
48
return DBUS_HANDLER_RESULT_NEED_MEMORY;
51
dbus_message_unref (reply);
52
return DBUS_HANDLER_RESULT_HANDLED;
55
dbus_message_iter_get_basic (&iter, &value_dbus);
57
value = nih_strdup (message, value_dbus);
59
return DBUS_HANDLER_RESULT_NEED_MEMORY;
62
dbus_message_iter_next (&iter);
64
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_INVALID) {
65
reply = dbus_message_new_error (message->message, DBUS_ERROR_INVALID_ARGS,
66
"Invalid arguments to Poke method");
68
return DBUS_HANDLER_RESULT_NEED_MEMORY;
70
if (! dbus_connection_send (message->connection, reply, NULL)) {
71
dbus_message_unref (reply);
72
return DBUS_HANDLER_RESULT_NEED_MEMORY;
75
dbus_message_unref (reply);
76
return DBUS_HANDLER_RESULT_HANDLED;
79
/* Call the handler function */
80
nih_error_push_context ();
81
if (my_test_poke (object->data, message, address, value) < 0) {
84
err = nih_error_get ();
85
if (err->number == ENOMEM) {
87
nih_error_pop_context ();
89
return DBUS_HANDLER_RESULT_NEED_MEMORY;
90
} else if (err->number == NIH_DBUS_ERROR) {
91
NihDBusError *dbus_err = (NihDBusError *)err;
93
reply = NIH_MUST (dbus_message_new_error (message->message, dbus_err->name, err->message));
95
nih_error_pop_context ();
97
NIH_MUST (dbus_connection_send (message->connection, reply, NULL));
99
dbus_message_unref (reply);
100
return DBUS_HANDLER_RESULT_HANDLED;
102
reply = NIH_MUST (dbus_message_new_error (message->message, DBUS_ERROR_FAILED, err->message));
104
nih_error_pop_context ();
106
NIH_MUST (dbus_connection_send (message->connection, reply, NULL));
108
dbus_message_unref (reply);
109
return DBUS_HANDLER_RESULT_HANDLED;
112
nih_error_pop_context ();
114
/* If the sender doesn't care about a reply, don't bother wasting
115
* effort constructing and sending one.
117
if (dbus_message_get_no_reply (message->message))
118
return DBUS_HANDLER_RESULT_HANDLED;
123
/* Construct the reply message. */
124
reply = dbus_message_new_method_return (message->message);
128
dbus_message_iter_init_append (reply, &iter);
129
enomem: __attribute__ ((unused));
132
/* Send the reply, appending it to the outgoing queue. */
133
NIH_MUST (dbus_connection_send (message->connection, reply, NULL));
135
dbus_message_unref (reply);
137
return DBUS_HANDLER_RESULT_HANDLED;
141
static DBusHandlerResult
142
my_com_netsplit_Nih_Test_Peek_method (NihDBusObject * object,
143
NihDBusMessage *message)
145
DBusMessageIter iter;
149
nih_assert (object != NULL);
150
nih_assert (message != NULL);
152
/* Iterate the arguments to the message and demarshal into arguments
153
* for our own function call.
155
dbus_message_iter_init (message->message, &iter);
157
/* Demarshal a uint32_t from the message */
158
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_UINT32) {
159
reply = dbus_message_new_error (message->message, DBUS_ERROR_INVALID_ARGS,
160
"Invalid arguments to Peek method");
162
return DBUS_HANDLER_RESULT_NEED_MEMORY;
164
if (! dbus_connection_send (message->connection, reply, NULL)) {
165
dbus_message_unref (reply);
166
return DBUS_HANDLER_RESULT_NEED_MEMORY;
169
dbus_message_unref (reply);
170
return DBUS_HANDLER_RESULT_HANDLED;
173
dbus_message_iter_get_basic (&iter, &address);
175
dbus_message_iter_next (&iter);
177
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_INVALID) {
178
reply = dbus_message_new_error (message->message, DBUS_ERROR_INVALID_ARGS,
179
"Invalid arguments to Peek method");
181
return DBUS_HANDLER_RESULT_NEED_MEMORY;
183
if (! dbus_connection_send (message->connection, reply, NULL)) {
184
dbus_message_unref (reply);
185
return DBUS_HANDLER_RESULT_NEED_MEMORY;
188
dbus_message_unref (reply);
189
return DBUS_HANDLER_RESULT_HANDLED;
192
/* Call the handler function */
193
nih_error_push_context ();
194
if (my_test_peek (object->data, message, address) < 0) {
197
err = nih_error_get ();
198
if (err->number == ENOMEM) {
200
nih_error_pop_context ();
202
return DBUS_HANDLER_RESULT_NEED_MEMORY;
203
} else if (err->number == NIH_DBUS_ERROR) {
204
NihDBusError *dbus_err = (NihDBusError *)err;
206
reply = NIH_MUST (dbus_message_new_error (message->message, dbus_err->name, err->message));
208
nih_error_pop_context ();
210
NIH_MUST (dbus_connection_send (message->connection, reply, NULL));
212
dbus_message_unref (reply);
213
return DBUS_HANDLER_RESULT_HANDLED;
215
reply = NIH_MUST (dbus_message_new_error (message->message, DBUS_ERROR_FAILED, err->message));
217
nih_error_pop_context ();
219
NIH_MUST (dbus_connection_send (message->connection, reply, NULL));
221
dbus_message_unref (reply);
222
return DBUS_HANDLER_RESULT_HANDLED;
225
nih_error_pop_context ();
227
return DBUS_HANDLER_RESULT_HANDLED;
231
my_test_peek_reply (NihDBusMessage *message,
235
DBusMessageIter iter;
237
nih_assert (message != NULL);
238
nih_assert (value != NULL);
240
/* If the sender doesn't care about a reply, don't bother wasting
241
* effort constructing and sending one.
243
if (dbus_message_get_no_reply (message->message))
246
/* Construct the reply message. */
247
reply = dbus_message_new_method_return (message->message);
251
dbus_message_iter_init_append (reply, &iter);
253
/* Marshal a char * onto the message */
254
if (! dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &value)) {
255
dbus_message_unref (reply);
259
/* Send the reply, appending it to the outgoing queue. */
260
if (! dbus_connection_send (message->connection, reply, NULL)) {
261
dbus_message_unref (reply);
265
dbus_message_unref (reply);
271
static DBusHandlerResult
272
my_com_netsplit_Nih_Test_IsValidAddress_method (NihDBusObject * object,
273
NihDBusMessage *message)
275
DBusMessageIter iter;
280
nih_assert (object != NULL);
281
nih_assert (message != NULL);
283
/* Iterate the arguments to the message and demarshal into arguments
284
* for our own function call.
286
dbus_message_iter_init (message->message, &iter);
288
/* Demarshal a uint32_t from the message */
289
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_UINT32) {
290
reply = dbus_message_new_error (message->message, DBUS_ERROR_INVALID_ARGS,
291
"Invalid arguments to IsValidAddress method");
293
return DBUS_HANDLER_RESULT_NEED_MEMORY;
295
if (! dbus_connection_send (message->connection, reply, NULL)) {
296
dbus_message_unref (reply);
297
return DBUS_HANDLER_RESULT_NEED_MEMORY;
300
dbus_message_unref (reply);
301
return DBUS_HANDLER_RESULT_HANDLED;
304
dbus_message_iter_get_basic (&iter, &address);
306
dbus_message_iter_next (&iter);
308
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_INVALID) {
309
reply = dbus_message_new_error (message->message, DBUS_ERROR_INVALID_ARGS,
310
"Invalid arguments to IsValidAddress method");
312
return DBUS_HANDLER_RESULT_NEED_MEMORY;
314
if (! dbus_connection_send (message->connection, reply, NULL)) {
315
dbus_message_unref (reply);
316
return DBUS_HANDLER_RESULT_NEED_MEMORY;
319
dbus_message_unref (reply);
320
return DBUS_HANDLER_RESULT_HANDLED;
323
/* Call the handler function */
324
nih_error_push_context ();
325
if (my_test_is_valid_address (object->data, message, address, &is_valid) < 0) {
328
err = nih_error_get ();
329
if (err->number == ENOMEM) {
331
nih_error_pop_context ();
333
return DBUS_HANDLER_RESULT_NEED_MEMORY;
334
} else if (err->number == NIH_DBUS_ERROR) {
335
NihDBusError *dbus_err = (NihDBusError *)err;
337
reply = NIH_MUST (dbus_message_new_error (message->message, dbus_err->name, err->message));
339
nih_error_pop_context ();
341
NIH_MUST (dbus_connection_send (message->connection, reply, NULL));
343
dbus_message_unref (reply);
344
return DBUS_HANDLER_RESULT_HANDLED;
346
reply = NIH_MUST (dbus_message_new_error (message->message, DBUS_ERROR_FAILED, err->message));
348
nih_error_pop_context ();
350
NIH_MUST (dbus_connection_send (message->connection, reply, NULL));
352
dbus_message_unref (reply);
353
return DBUS_HANDLER_RESULT_HANDLED;
356
nih_error_pop_context ();
358
/* If the sender doesn't care about a reply, don't bother wasting
359
* effort constructing and sending one.
361
if (dbus_message_get_no_reply (message->message))
362
return DBUS_HANDLER_RESULT_HANDLED;
367
/* Construct the reply message. */
368
reply = dbus_message_new_method_return (message->message);
372
dbus_message_iter_init_append (reply, &iter);
374
/* Marshal a int onto the message */
375
if (! dbus_message_iter_append_basic (&iter, DBUS_TYPE_BOOLEAN, &is_valid)) {
376
dbus_message_unref (reply);
380
enomem: __attribute__ ((unused));
383
/* Send the reply, appending it to the outgoing queue. */
384
NIH_MUST (dbus_connection_send (message->connection, reply, NULL));
386
dbus_message_unref (reply);
388
return DBUS_HANDLER_RESULT_HANDLED;
393
my_test_emit_bounce (DBusConnection *connection,
394
const char * origin_path,
398
DBusMessage * signal;
399
DBusMessageIter iter;
401
nih_assert (connection != NULL);
402
nih_assert (origin_path != NULL);
404
/* Construct the message. */
405
signal = dbus_message_new_signal (origin_path, "com.netsplit.Nih.Test", "Bounce");
409
dbus_message_iter_init_append (signal, &iter);
411
/* Marshal a uint32_t onto the message */
412
if (! dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &height)) {
413
dbus_message_unref (signal);
417
/* Marshal a int32_t onto the message */
418
if (! dbus_message_iter_append_basic (&iter, DBUS_TYPE_INT32, &velocity)) {
419
dbus_message_unref (signal);
423
/* Send the signal, appending it to the outgoing queue. */
424
if (! dbus_connection_send (connection, signal, NULL)) {
425
dbus_message_unref (signal);
429
dbus_message_unref (signal);
436
my_test_emit_exploded (DBusConnection *connection,
437
const char * origin_path)
439
DBusMessage * signal;
440
DBusMessageIter iter;
442
nih_assert (connection != NULL);
443
nih_assert (origin_path != NULL);
445
/* Construct the message. */
446
signal = dbus_message_new_signal (origin_path, "com.netsplit.Nih.Test", "Exploded");
450
dbus_message_iter_init_append (signal, &iter);
452
/* Send the signal, appending it to the outgoing queue. */
453
if (! dbus_connection_send (connection, signal, NULL)) {
454
dbus_message_unref (signal);
458
dbus_message_unref (signal);
465
my_com_netsplit_Nih_Test_colour_get (NihDBusObject * object,
466
NihDBusMessage * message,
467
DBusMessageIter *iter)
469
DBusMessageIter variter;
472
nih_assert (object != NULL);
473
nih_assert (message != NULL);
474
nih_assert (iter != NULL);
476
/* Call the handler function */
477
if (my_test_get_colour (object->data, message, &value) < 0)
480
/* Append a variant onto the message to contain the property value. */
481
if (! dbus_message_iter_open_container (iter, DBUS_TYPE_VARIANT, "s", &variter)) {
482
nih_error_raise_no_memory ();
486
/* Marshal a char * onto the message */
487
if (! dbus_message_iter_append_basic (&variter, DBUS_TYPE_STRING, &value)) {
488
dbus_message_iter_abandon_container (iter, &variter);
489
nih_error_raise_no_memory ();
493
/* Finish the variant */
494
if (! dbus_message_iter_close_container (iter, &variter)) {
495
nih_error_raise_no_memory ();
503
my_com_netsplit_Nih_Test_colour_set (NihDBusObject * object,
504
NihDBusMessage * message,
505
DBusMessageIter *iter)
507
DBusMessageIter variter;
508
const char * value_dbus;
511
nih_assert (object != NULL);
512
nih_assert (message != NULL);
513
nih_assert (iter != NULL);
515
/* Recurse into the variant */
516
if (dbus_message_iter_get_arg_type (iter) != DBUS_TYPE_VARIANT) {
517
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
518
"Invalid arguments to colour property");
522
dbus_message_iter_recurse (iter, &variter);
524
/* Demarshal a char * from the message */
525
if (dbus_message_iter_get_arg_type (&variter) != DBUS_TYPE_STRING) {
526
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
527
"Invalid arguments to colour property");
531
dbus_message_iter_get_basic (&variter, &value_dbus);
533
value = nih_strdup (message, value_dbus);
535
nih_error_raise_no_memory ();
539
dbus_message_iter_next (&variter);
541
dbus_message_iter_next (iter);
543
if (dbus_message_iter_get_arg_type (iter) != DBUS_TYPE_INVALID) {
544
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
545
"Invalid arguments to colour property");
549
/* Call the handler function */
550
if (my_test_set_colour (object->data, message, value) < 0)
558
my_com_netsplit_Nih_Test_size_get (NihDBusObject * object,
559
NihDBusMessage * message,
560
DBusMessageIter *iter)
562
DBusMessageIter variter;
565
nih_assert (object != NULL);
566
nih_assert (message != NULL);
567
nih_assert (iter != NULL);
569
/* Call the handler function */
570
if (my_test_get_size (object->data, message, &value) < 0)
573
/* Append a variant onto the message to contain the property value. */
574
if (! dbus_message_iter_open_container (iter, DBUS_TYPE_VARIANT, "u", &variter)) {
575
nih_error_raise_no_memory ();
579
/* Marshal a uint32_t onto the message */
580
if (! dbus_message_iter_append_basic (&variter, DBUS_TYPE_UINT32, &value)) {
581
dbus_message_iter_abandon_container (iter, &variter);
582
nih_error_raise_no_memory ();
586
/* Finish the variant */
587
if (! dbus_message_iter_close_container (iter, &variter)) {
588
nih_error_raise_no_memory ();
597
my_com_netsplit_Nih_Test_touch_set (NihDBusObject * object,
598
NihDBusMessage * message,
599
DBusMessageIter *iter)
601
DBusMessageIter variter;
604
nih_assert (object != NULL);
605
nih_assert (message != NULL);
606
nih_assert (iter != NULL);
608
/* Recurse into the variant */
609
if (dbus_message_iter_get_arg_type (iter) != DBUS_TYPE_VARIANT) {
610
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
611
"Invalid arguments to touch property");
615
dbus_message_iter_recurse (iter, &variter);
617
/* Demarshal a int from the message */
618
if (dbus_message_iter_get_arg_type (&variter) != DBUS_TYPE_BOOLEAN) {
619
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
620
"Invalid arguments to touch property");
624
dbus_message_iter_get_basic (&variter, &value);
626
dbus_message_iter_next (&variter);
628
dbus_message_iter_next (iter);
630
if (dbus_message_iter_get_arg_type (iter) != DBUS_TYPE_INVALID) {
631
nih_dbus_error_raise_printf (DBUS_ERROR_INVALID_ARGS,
632
"Invalid arguments to touch property");
636
/* Call the handler function */
637
if (my_test_set_touch (object->data, message, value) < 0)
644
static DBusHandlerResult
645
my_com_netsplit_Nih_Foo_Bing_method (NihDBusObject * object,
646
NihDBusMessage *message)
648
DBusMessageIter iter;
651
nih_assert (object != NULL);
652
nih_assert (message != NULL);
654
/* Iterate the arguments to the message and demarshal into arguments
655
* for our own function call.
657
dbus_message_iter_init (message->message, &iter);
659
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_INVALID) {
660
reply = dbus_message_new_error (message->message, DBUS_ERROR_INVALID_ARGS,
661
"Invalid arguments to Bing method");
663
return DBUS_HANDLER_RESULT_NEED_MEMORY;
665
if (! dbus_connection_send (message->connection, reply, NULL)) {
666
dbus_message_unref (reply);
667
return DBUS_HANDLER_RESULT_NEED_MEMORY;
670
dbus_message_unref (reply);
671
return DBUS_HANDLER_RESULT_HANDLED;
674
/* Call the handler function */
675
nih_error_push_context ();
676
if (my_foo_bing (object->data, message) < 0) {
679
err = nih_error_get ();
680
if (err->number == ENOMEM) {
682
nih_error_pop_context ();
684
return DBUS_HANDLER_RESULT_NEED_MEMORY;
685
} else if (err->number == NIH_DBUS_ERROR) {
686
NihDBusError *dbus_err = (NihDBusError *)err;
688
reply = NIH_MUST (dbus_message_new_error (message->message, dbus_err->name, err->message));
690
nih_error_pop_context ();
692
NIH_MUST (dbus_connection_send (message->connection, reply, NULL));
694
dbus_message_unref (reply);
695
return DBUS_HANDLER_RESULT_HANDLED;
697
reply = NIH_MUST (dbus_message_new_error (message->message, DBUS_ERROR_FAILED, err->message));
699
nih_error_pop_context ();
701
NIH_MUST (dbus_connection_send (message->connection, reply, NULL));
703
dbus_message_unref (reply);
704
return DBUS_HANDLER_RESULT_HANDLED;
707
nih_error_pop_context ();
709
/* If the sender doesn't care about a reply, don't bother wasting
710
* effort constructing and sending one.
712
if (dbus_message_get_no_reply (message->message))
713
return DBUS_HANDLER_RESULT_HANDLED;
718
/* Construct the reply message. */
719
reply = dbus_message_new_method_return (message->message);
723
dbus_message_iter_init_append (reply, &iter);
724
enomem: __attribute__ ((unused));
727
/* Send the reply, appending it to the outgoing queue. */
728
NIH_MUST (dbus_connection_send (message->connection, reply, NULL));
730
dbus_message_unref (reply);
732
return DBUS_HANDLER_RESULT_HANDLED;
737
my_foo_emit_new_result (DBusConnection *connection,
738
const char * origin_path)
740
DBusMessage * signal;
741
DBusMessageIter iter;
743
nih_assert (connection != NULL);
744
nih_assert (origin_path != NULL);
746
/* Construct the message. */
747
signal = dbus_message_new_signal (origin_path, "com.netsplit.Nih.Foo", "NewResult");
751
dbus_message_iter_init_append (signal, &iter);
753
/* Send the signal, appending it to the outgoing queue. */
754
if (! dbus_connection_send (connection, signal, NULL)) {
755
dbus_message_unref (signal);
759
dbus_message_unref (signal);