1
#include "eldbus_private.h"
2
#include "eldbus_private_types.h"
8
#define ELDBUS_MESSAGE_CHECK(msg) \
11
EINA_SAFETY_ON_NULL_RETURN(msg); \
12
if (!EINA_MAGIC_CHECK(msg, ELDBUS_MESSAGE_MAGIC)) \
14
EINA_MAGIC_FAIL(msg, ELDBUS_MESSAGE_MAGIC); \
17
EINA_SAFETY_ON_TRUE_RETURN(msg->refcount <= 0); \
21
#define ELDBUS_MESSAGE_CHECK_RETVAL(msg, retval) \
24
EINA_SAFETY_ON_NULL_RETURN_VAL(msg, retval); \
25
if (!EINA_MAGIC_CHECK(msg, ELDBUS_MESSAGE_MAGIC)) \
27
EINA_MAGIC_FAIL(msg, ELDBUS_MESSAGE_MAGIC); \
30
EINA_SAFETY_ON_TRUE_RETURN_VAL(msg->refcount <= 0, retval); \
34
#define ELDBUS_MESSAGE_ITERATOR_CHECK(iter) \
37
EINA_SAFETY_ON_NULL_RETURN(iter); \
38
if (!EINA_MAGIC_CHECK(iter, ELDBUS_MESSAGE_ITERATOR_MAGIC)) \
40
EINA_MAGIC_FAIL(iter, ELDBUS_MESSAGE_ITERATOR_MAGIC); \
46
#define ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, retval) \
49
EINA_SAFETY_ON_NULL_RETURN_VAL(iter, retval); \
50
if (!EINA_MAGIC_CHECK(iter, ELDBUS_MESSAGE_ITERATOR_MAGIC)) \
52
EINA_MAGIC_FAIL(iter, ELDBUS_MESSAGE_ITERATOR_MAGIC); \
58
static Eina_Bool append_basic(char type, va_list *vl, DBusMessageIter *iter);
61
eldbus_message_init(void)
67
eldbus_message_shutdown(void)
71
static Eldbus_Message_Iter *
72
_message_iterator_new(Eina_Bool writable)
74
Eldbus_Message_Iter *iter;
76
iter = calloc(1, sizeof(Eldbus_Message_Iter));
77
EINA_SAFETY_ON_NULL_RETURN_VAL(iter, NULL);
78
EINA_MAGIC_SET(iter, ELDBUS_MESSAGE_ITERATOR_MAGIC);
79
iter->writable = writable;
84
Eldbus_Message *eldbus_message_new(Eina_Bool writable)
86
Eldbus_Message *msg = calloc(1, sizeof(Eldbus_Message));
87
EINA_SAFETY_ON_NULL_RETURN_VAL(msg, NULL);
88
EINA_MAGIC_SET(msg, ELDBUS_MESSAGE_MAGIC);
91
msg->iterator = _message_iterator_new(writable);
92
EINA_SAFETY_ON_NULL_GOTO(msg->iterator, fail);
97
eldbus_message_unref(msg);
102
eldbus_message_method_call_new(const char *dest, const char *path, const char *iface, const char *method)
106
EINA_SAFETY_ON_NULL_RETURN_VAL(dest, NULL);
107
EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL);
108
EINA_SAFETY_ON_NULL_RETURN_VAL(iface, NULL);
109
EINA_SAFETY_ON_NULL_RETURN_VAL(method, NULL);
114
if (!dbus_validate_bus_name(dest, NULL))
116
ERR("Invalid bus name '%s'", dest);
119
if (!dbus_validate_path(path, NULL))
121
ERR("Invalid path '%s'", path);
124
if (!dbus_validate_interface(iface, NULL))
126
ERR("Invalid interface '%s'", iface);
131
msg = eldbus_message_new(EINA_TRUE);
132
EINA_SAFETY_ON_NULL_GOTO(msg, fail);
134
msg->dbus_msg = dbus_message_new_method_call(dest, path, iface, method);
135
dbus_message_iter_init_append(msg->dbus_msg, &msg->iterator->dbus_iterator);
140
eldbus_message_unref(msg);
145
eldbus_message_ref(Eldbus_Message *msg)
147
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
148
DBG("msg=%p, pre-refcount=%d", msg, msg->refcount);
154
_message_iterator_free(Eldbus_Message_Iter *iter)
156
Eina_Inlist *lst, *next;
157
Eldbus_Message_Iter *sub;
160
lst = iter->iterators;
164
sub = EINA_INLIST_CONTAINER_GET(lst, Eldbus_Message_Iter);
165
_message_iterator_free(sub);
172
eldbus_message_unref(Eldbus_Message *msg)
174
ELDBUS_MESSAGE_CHECK(msg);
175
DBG("msg=%p, pre-refcount=%d", msg, msg->refcount);
177
if (msg->refcount > 0) return;
179
DBG("message free %p", msg);
181
EINA_MAGIC_SET(msg, EINA_MAGIC_NONE);
183
dbus_message_unref(msg->dbus_msg);
184
msg->dbus_msg = NULL;
186
_message_iterator_free(msg->iterator);
191
eldbus_message_path_get(const Eldbus_Message *msg)
193
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
194
return dbus_message_get_path(msg->dbus_msg);
198
eldbus_message_interface_get(const Eldbus_Message *msg)
200
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
201
return dbus_message_get_interface(msg->dbus_msg);
205
eldbus_message_member_get(const Eldbus_Message *msg)
207
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
208
return dbus_message_get_member(msg->dbus_msg);
212
eldbus_message_destination_get(const Eldbus_Message *msg)
214
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
215
return dbus_message_get_destination(msg->dbus_msg);
219
eldbus_message_sender_get(const Eldbus_Message *msg)
221
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
222
return dbus_message_get_sender(msg->dbus_msg);
226
eldbus_message_signature_get(const Eldbus_Message *msg)
228
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
229
return dbus_message_get_signature(msg->dbus_msg);
233
eldbus_message_error_get(const Eldbus_Message *msg, const char **name, const char **text)
235
if (name) *name = NULL;
236
if (text) *text = NULL;
238
ELDBUS_MESSAGE_CHECK_RETVAL(msg, EINA_FALSE);
240
if (dbus_message_get_type(msg->dbus_msg) != DBUS_MESSAGE_TYPE_ERROR)
244
*name = dbus_message_get_error_name(msg->dbus_msg);
247
dbus_message_get_args(msg->dbus_msg, NULL, DBUS_TYPE_STRING, text,
254
_eldbus_message_arguments_vget(Eldbus_Message *msg, const char *signature, va_list ap)
256
Eldbus_Message_Iter *iter;
257
iter = eldbus_message_iter_get(msg);
258
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
260
return eldbus_message_iter_arguments_vget(iter, signature, ap);
263
EAPI Eldbus_Message_Iter *
264
eldbus_message_iter_get(const Eldbus_Message *msg)
266
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
268
EINA_SAFETY_ON_NULL_RETURN_VAL(msg->iterator, NULL);
270
return msg->iterator;
274
eldbus_message_arguments_get(const Eldbus_Message *msg, const char *signature, ...)
279
ELDBUS_MESSAGE_CHECK_RETVAL(msg, EINA_FALSE);
280
EINA_SAFETY_ON_NULL_RETURN_VAL(signature, EINA_FALSE);
282
va_start(ap, signature);
283
ret = _eldbus_message_arguments_vget((Eldbus_Message *)msg, signature, ap);
289
eldbus_message_arguments_vget(const Eldbus_Message *msg, const char *signature, va_list ap)
291
ELDBUS_MESSAGE_CHECK_RETVAL(msg, EINA_FALSE);
292
EINA_SAFETY_ON_NULL_RETURN_VAL(signature, EINA_FALSE);
293
return _eldbus_message_arguments_vget((Eldbus_Message *)msg, signature, ap);
297
_eldbus_message_iter_arguments_vappend(Eldbus_Message_Iter *iter, const char *signature, va_list *aq)
299
DBusSignatureIter signature_iter;
300
Eina_Bool r = EINA_TRUE;
303
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
304
EINA_SAFETY_ON_FALSE_RETURN_VAL(iter->writable, EINA_FALSE);
305
EINA_SAFETY_ON_NULL_RETURN_VAL(signature, EINA_FALSE);
307
dbus_signature_iter_init(&signature_iter, signature);
308
while ((type = dbus_signature_iter_get_signature(&signature_iter)))
310
if (type[0] != DBUS_TYPE_VARIANT && !type[1])
311
r = append_basic(type[0], aq, &iter->dbus_iterator);
314
Eldbus_Message_Iter **user_itr;
315
Eldbus_Message_Iter *sub;
317
user_itr = va_arg(*aq, Eldbus_Message_Iter **);
318
sub = _message_iterator_new(EINA_TRUE);
321
ERR("Could not create sub iterator");
326
iter->iterators = eina_inlist_append(iter->iterators,
327
EINA_INLIST_GET(sub));
329
if (type[0] == DBUS_TYPE_ARRAY)
330
r = dbus_message_iter_open_container(&iter->dbus_iterator,
332
&sub->dbus_iterator);
333
else if (type[1] == DBUS_TYPE_VARIANT)
335
ERR("variant not supported by \
336
eldbus_message_iter_arguments_append(), \
337
try eldbus_message_iter_container_new()");
345
if (type[0] == DBUS_STRUCT_BEGIN_CHAR)
346
real_type = DBUS_TYPE_STRUCT;
347
else real_type = DBUS_TYPE_DICT_ENTRY;
348
r = dbus_message_iter_open_container(&iter->dbus_iterator,
350
&sub->dbus_iterator);
357
if (!r || !dbus_signature_iter_next(&signature_iter))
366
eldbus_message_iter_arguments_vappend(Eldbus_Message_Iter *iter, const char *signature, va_list ap)
372
ret = _eldbus_message_iter_arguments_vappend(iter, signature, &aq);
379
eldbus_message_iter_arguments_append(Eldbus_Message_Iter *iter, const char *signature, ...)
383
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
384
EINA_SAFETY_ON_NULL_RETURN_VAL(signature, EINA_FALSE);
386
va_start(ap, signature);
387
r = eldbus_message_iter_arguments_vappend(iter, signature, ap);
393
append_basic(char type, va_list *vl, DBusMessageIter *iter)
399
uint32_t read_byte = va_arg(*vl, uint32_t);
400
uint8_t byte = read_byte;
401
return dbus_message_iter_append_basic(iter, type, &byte);
403
case DBUS_TYPE_INT16:
405
int32_t read_int16 = va_arg(*vl, int32_t);
406
int16_t int16 = read_int16;
407
return dbus_message_iter_append_basic(iter, type, &int16);
409
case DBUS_TYPE_UINT16:
411
uint32_t read_uint16 = va_arg(*vl, uint32_t);
412
uint16_t uint16 = read_uint16;
413
return dbus_message_iter_append_basic(iter, type, &uint16);
415
case DBUS_TYPE_BOOLEAN:
416
case DBUS_TYPE_INT32:
417
#ifdef DBUS_TYPE_UNIX_FD
418
case DBUS_TYPE_UNIX_FD:
421
int32_t int32 = va_arg(*vl, int32_t);
422
return dbus_message_iter_append_basic(iter, type, &int32);
424
case DBUS_TYPE_UINT32:
426
uint32_t uint32 = va_arg(*vl, uint32_t);
427
return dbus_message_iter_append_basic(iter, type, &uint32);
429
case DBUS_TYPE_INT64:
431
int64_t int64 = va_arg(*vl, int64_t);
432
return dbus_message_iter_append_basic(iter, type, &int64);
434
case DBUS_TYPE_UINT64:
436
uint64_t uint64 = va_arg(*vl, uint64_t);
437
return dbus_message_iter_append_basic(iter, type, &uint64);
439
case DBUS_TYPE_DOUBLE:
441
double double_ieee = va_arg(*vl, double);
442
return dbus_message_iter_append_basic(iter, type, &double_ieee);
444
case DBUS_TYPE_STRING:
445
case DBUS_TYPE_OBJECT_PATH:
446
case DBUS_TYPE_SIGNATURE:
448
char *string = va_arg(*vl, char*);
449
return dbus_message_iter_append_basic(iter, type, &string);
452
ERR("Type not handled %c", type);
458
_eldbus_message_arguments_vappend(Eldbus_Message *msg, const char *signature, va_list *aq)
460
DBusSignatureIter signature_iter;
461
Eldbus_Message_Iter *iter;
463
Eina_Bool r = EINA_TRUE;
465
if (!signature[0]) return EINA_TRUE;
466
EINA_SAFETY_ON_FALSE_RETURN_VAL(dbus_signature_validate(signature, NULL),
469
iter = eldbus_message_iter_get(msg);
470
EINA_SAFETY_ON_NULL_RETURN_VAL(iter, EINA_FALSE);
471
EINA_SAFETY_ON_FALSE_RETURN_VAL(iter->writable, EINA_FALSE);
473
dbus_signature_iter_init(&signature_iter, signature);
474
while ((type = dbus_signature_iter_get_current_type(&signature_iter)))
476
if (dbus_type_is_basic(type))
477
r = append_basic(type, aq, &iter->dbus_iterator);
480
ERR("sig = %s | eldbus_message_arguments_append() and \
481
eldbus_message_arguments_vappend() only support basic types, \
482
to complex types use eldbus_message_iter_* functions",
487
if (!r || !dbus_signature_iter_next(&signature_iter))
495
eldbus_message_arguments_append(Eldbus_Message *msg, const char *signature, ...)
500
ELDBUS_MESSAGE_CHECK_RETVAL(msg, EINA_FALSE);
501
EINA_SAFETY_ON_NULL_RETURN_VAL(signature, EINA_FALSE);
503
va_start(ap, signature);
504
ret = _eldbus_message_arguments_vappend(msg, signature, &ap);
510
eldbus_message_arguments_vappend(Eldbus_Message *msg, const char *signature, va_list ap)
515
ELDBUS_MESSAGE_CHECK_RETVAL(msg, EINA_FALSE);
516
EINA_SAFETY_ON_NULL_RETURN_VAL(signature, EINA_FALSE);
519
ret = _eldbus_message_arguments_vappend(msg, signature, &aq);
525
EAPI Eldbus_Message_Iter *
526
eldbus_message_iter_container_new(Eldbus_Message_Iter *iter, int type, const char* contained_signature)
528
Eldbus_Message_Iter *sub;
530
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, NULL);
531
sub = _message_iterator_new(EINA_TRUE);
532
EINA_SAFETY_ON_NULL_RETURN_VAL(sub, NULL);
534
if (!dbus_message_iter_open_container(&iter->dbus_iterator, type,
536
&sub->dbus_iterator))
539
iter->iterators = eina_inlist_append(iter->iterators, EINA_INLIST_GET(sub));
548
eldbus_message_iter_container_close(Eldbus_Message_Iter *iter, Eldbus_Message_Iter *sub)
550
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
551
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(sub, EINA_FALSE);
552
EINA_SAFETY_ON_FALSE_RETURN_VAL(iter->writable, EINA_FALSE);
553
return dbus_message_iter_close_container(&iter->dbus_iterator,
554
&sub->dbus_iterator);
558
eldbus_message_iter_basic_append(Eldbus_Message_Iter *iter, int type, ...)
562
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
563
EINA_SAFETY_ON_FALSE_RETURN_VAL(iter->writable, EINA_FALSE);
566
r = append_basic(type, &vl, &iter->dbus_iterator);
573
eldbus_message_iter_fixed_array_append(Eldbus_Message_Iter *iter, int type, const void *array, unsigned int size)
575
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
576
EINA_SAFETY_ON_NULL_RETURN_VAL(array, EINA_FALSE);
577
EINA_SAFETY_ON_FALSE_RETURN_VAL(iter->writable, EINA_FALSE);
578
EINA_SAFETY_ON_FALSE_RETURN_VAL(dbus_type_is_basic(type), EINA_FALSE);
579
return dbus_message_iter_append_fixed_array(&iter->dbus_iterator, type, &array, (int)size);
583
eldbus_message_iter_basic_get(Eldbus_Message_Iter *iter, void *value)
585
ELDBUS_MESSAGE_ITERATOR_CHECK(iter);
586
EINA_SAFETY_ON_TRUE_RETURN(iter->writable);
587
dbus_message_iter_get_basic(&iter->dbus_iterator, value);
591
eldbus_message_iter_sub_iter_get(Eldbus_Message_Iter *iter)
593
Eldbus_Message_Iter *sub;
594
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, NULL);
595
EINA_SAFETY_ON_TRUE_RETURN_VAL(iter->writable, NULL);
597
sub = _message_iterator_new(EINA_FALSE);
598
dbus_message_iter_recurse(&iter->dbus_iterator, &sub->dbus_iterator);
599
iter->iterators = eina_inlist_append(iter->iterators,
600
EINA_INLIST_GET(sub));
605
eldbus_message_iter_signature_get(Eldbus_Message_Iter *iter)
607
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, NULL);
608
return dbus_message_iter_get_signature(&iter->dbus_iterator);
612
eldbus_message_iter_next(Eldbus_Message_Iter *iter)
614
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
615
EINA_SAFETY_ON_TRUE_RETURN_VAL(iter->writable, EINA_FALSE);
616
return dbus_message_iter_next(&iter->dbus_iterator);
620
get_basic(char type, DBusMessageIter *iter, va_list *vl)
628
uint8_t *byte = va_arg(*vl, uint8_t *);
629
dbus_message_iter_get_basic(iter, &val);
630
*byte = val.bool_val;
633
case DBUS_TYPE_BOOLEAN:
635
Eina_Bool *boolean = va_arg(*vl, Eina_Bool *);
636
dbus_message_iter_get_basic(iter, &val);
637
*boolean = val.bool_val;
640
case DBUS_TYPE_INT16:
642
int16_t *int16 = va_arg(*vl, int16_t *);
643
dbus_message_iter_get_basic(iter, &val);
647
case DBUS_TYPE_UINT16:
649
uint16_t *uint16 = va_arg(*vl, uint16_t *);
650
dbus_message_iter_get_basic(iter, &val);
654
case DBUS_TYPE_INT32:
655
#ifdef DBUS_TYPE_UNIX_FD
656
case DBUS_TYPE_UNIX_FD:
659
int32_t *int32 = va_arg(*vl, int32_t *);
660
dbus_message_iter_get_basic(iter, &val);
664
case DBUS_TYPE_UINT32:
666
uint32_t *uint32 = va_arg(*vl, uint32_t *);
667
dbus_message_iter_get_basic(iter, &val);
671
case DBUS_TYPE_INT64:
673
int64_t *int64 = va_arg(*vl, int64_t *);
674
dbus_message_iter_get_basic(iter, &val);
678
case DBUS_TYPE_UINT64:
680
uint64_t *uint64 = va_arg(*vl, uint64_t *);
681
dbus_message_iter_get_basic(iter, &val);
685
case DBUS_TYPE_DOUBLE:
687
double *double_ieee = va_arg(*vl, double *);
688
dbus_message_iter_get_basic(iter, &val);
689
*double_ieee = val.dbl;
692
case DBUS_TYPE_STRING:
693
case DBUS_TYPE_OBJECT_PATH:
694
case DBUS_TYPE_SIGNATURE:
696
char **string = va_arg(*vl, char**);
697
dbus_message_iter_get_basic(iter, &val);
703
ERR("Type not handled %c", type);
709
eldbus_message_iter_fixed_array_get(Eldbus_Message_Iter *iter, int signature, void *value, int *n_elements)
713
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
714
EINA_SAFETY_ON_TRUE_RETURN_VAL(iter->writable, EINA_FALSE);
715
EINA_SAFETY_ON_NULL_RETURN_VAL(n_elements, EINA_FALSE);
717
iter_type = dbus_message_iter_get_arg_type(&iter->dbus_iterator);
719
if (iter_type == DBUS_TYPE_INVALID)
725
EINA_SAFETY_ON_FALSE_RETURN_VAL(
726
(dbus_message_iter_get_arg_type(&iter->dbus_iterator) == signature),
728
dbus_message_iter_get_fixed_array(&iter->dbus_iterator, value, n_elements);
736
eldbus_message_iter_get_and_next(Eldbus_Message_Iter *iter, char signature, ...)
741
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
742
EINA_SAFETY_ON_TRUE_RETURN_VAL(iter->writable, EINA_FALSE);
743
va_start(vl, signature);
745
type = dbus_message_iter_get_arg_type(&iter->dbus_iterator);
746
if (type == DBUS_TYPE_INVALID)
751
if (type != signature)
753
if (signature == '(') signature = 'r';
754
else if (signature == '{') signature = 'e';
755
if (type != signature)
762
if (dbus_type_is_basic(type))
763
get_basic(type, &iter->dbus_iterator, &vl);
766
Eldbus_Message_Iter *sub;
767
Eldbus_Message_Iter **iter_var = va_arg(vl, Eldbus_Message_Iter**);
769
sub = _message_iterator_new(EINA_FALSE);
775
dbus_message_iter_recurse(&iter->dbus_iterator,
776
&sub->dbus_iterator);
777
iter->iterators = eina_inlist_append(iter->iterators,
778
EINA_INLIST_GET(sub));
784
dbus_message_iter_next(&iter->dbus_iterator);
789
_eldbus_message_iter_arguments_vget(Eldbus_Message_Iter *iter, const char *signature, va_list *aq)
792
DBusSignatureIter sig_iter;
794
ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE);
795
EINA_SAFETY_ON_TRUE_RETURN_VAL(iter->writable, EINA_FALSE);
796
EINA_SAFETY_ON_NULL_RETURN_VAL(signature, EINA_FALSE);
797
EINA_SAFETY_ON_FALSE_RETURN_VAL(dbus_signature_validate(signature, NULL), EINA_FALSE);
799
dbus_signature_iter_init(&sig_iter, signature);
800
iter_type = dbus_message_iter_get_arg_type(&iter->dbus_iterator);
802
while (iter_type != DBUS_TYPE_INVALID)
804
int sig_type = dbus_signature_iter_get_current_type(&sig_iter);
806
if (sig_type == DBUS_TYPE_INVALID)
809
if (sig_type != iter_type)
811
ERR("Type in iterator different of signature expected:%c got %c", iter_type, sig_type);
815
if (dbus_type_is_basic(iter_type))
816
get_basic(iter_type, &iter->dbus_iterator, aq);
819
Eldbus_Message_Iter **user_itr = va_arg(*aq, Eldbus_Message_Iter **);
820
Eldbus_Message_Iter *sub_itr;
822
sub_itr = _message_iterator_new(EINA_FALSE);
823
EINA_SAFETY_ON_NULL_RETURN_VAL(sub_itr, EINA_FALSE);
824
dbus_message_iter_recurse(&iter->dbus_iterator,
825
&sub_itr->dbus_iterator);
826
iter->iterators = eina_inlist_append(iter->iterators,
827
EINA_INLIST_GET(sub_itr));
831
dbus_message_iter_next(&iter->dbus_iterator);
832
if (!dbus_signature_iter_next(&sig_iter))
834
iter_type = dbus_message_iter_get_arg_type(&iter->dbus_iterator);
837
return dbus_signature_iter_get_current_type(&sig_iter) == DBUS_TYPE_INVALID;
842
eldbus_message_iter_arguments_get(Eldbus_Message_Iter *iter, const char *signature, ...)
847
va_start(ap, signature);
848
ret = _eldbus_message_iter_arguments_vget(iter, signature, &ap);
855
eldbus_message_iter_arguments_vget(Eldbus_Message_Iter *iter, const char *signature, va_list ap)
861
ret = _eldbus_message_iter_arguments_vget(iter, signature, &aq);
868
eldbus_message_iter_del(Eldbus_Message_Iter *iter)
870
ELDBUS_MESSAGE_ITERATOR_CHECK(iter);
871
_message_iterator_free(iter);
875
eldbus_message_error_new(const Eldbus_Message *msg, const char *error_name, const char *error_msg)
877
Eldbus_Message *reply;
879
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
880
EINA_SAFETY_ON_NULL_RETURN_VAL(error_name, NULL);
881
EINA_SAFETY_ON_NULL_RETURN_VAL(error_msg, NULL);
883
reply = eldbus_message_new(EINA_FALSE);
884
EINA_SAFETY_ON_NULL_RETURN_VAL(reply, NULL);
886
reply->dbus_msg = dbus_message_new_error(msg->dbus_msg,
887
error_name, error_msg);
889
dbus_message_iter_init(reply->dbus_msg, &reply->iterator->dbus_iterator);
895
eldbus_message_method_return_new(const Eldbus_Message *msg)
897
Eldbus_Message *reply;
898
ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
900
reply = eldbus_message_new(EINA_TRUE);
901
EINA_SAFETY_ON_NULL_RETURN_VAL(reply, NULL);
903
reply->dbus_msg = dbus_message_new_method_return(msg->dbus_msg);
905
dbus_message_iter_init_append(reply->dbus_msg,
906
&reply->iterator->dbus_iterator);
912
eldbus_message_signal_new(const char *path, const char *interface, const char *name)
916
EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL);
917
EINA_SAFETY_ON_NULL_RETURN_VAL(interface, NULL);
918
EINA_SAFETY_ON_FALSE_RETURN_VAL(name, NULL);
920
msg = eldbus_message_new(EINA_TRUE);
921
EINA_SAFETY_ON_NULL_RETURN_VAL(msg, NULL);
923
msg->dbus_msg = dbus_message_new_signal(path, interface, name);
924
dbus_message_iter_init_append(msg->dbus_msg,
925
&msg->iterator->dbus_iterator);