dbus 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,661 @@
1
+ /*--------------------------------------------------
2
+ * D-BUS bindings for Ruby
3
+ * (C) Copyright 2004 Leon Breedt
4
+ * (C) Copyright 2004 Provenco Group Ltd
5
+ *
6
+ * Licensed under the same terms as the D-BUS library
7
+ *--------------------------------------------------*/
8
+
9
+ #include <stdlib.h>
10
+ #include "ruby-dbus.h"
11
+
12
+ /* NB: We wrap DBusMessageIter so that we are able to unref the associated message (if any)
13
+ * when the DBusMessageIter instance is GC'd. */
14
+ struct _RubyDBusMessageIter {
15
+ DBusMessageIter *real_iter;
16
+ DBusMessage *message;
17
+ };
18
+
19
+ VALUE cDBusMessageIter;
20
+
21
+ static void _free_message_iter(RubyDBusMessageIter *iter);
22
+ static void _ensure_arg_type(DBusMessageIter *iter, int type);
23
+
24
+ RDBUS_GENERATE_NEW(cDBusMessageIter, RubyDBusMessageIter *, _free_message_iter)
25
+ RDBUS_GENERATE_GET(RubyDBusMessageIter)
26
+
27
+ static RubyDBusMessageIter *
28
+ _alloc_message_iter(DBusMessage *message, DBusMessageIter *real_iter)
29
+ {
30
+ RubyDBusMessageIter *iter;
31
+
32
+ iter = NULL;
33
+ iter = ALLOC(RubyDBusMessageIter);
34
+ if (iter == NULL)
35
+ rb_raise(eDBusError, "unable to allocate DBusMessageIter");
36
+
37
+ if (real_iter != NULL)
38
+ iter->real_iter = real_iter;
39
+ else
40
+ iter->real_iter = ALLOC(DBusMessageIter);
41
+
42
+ if (iter->real_iter == NULL) {
43
+ ruby_xfree(iter);
44
+ rb_raise(eDBusError, "unable to allocate real DBusMessageIter");
45
+ }
46
+
47
+ iter->message = message;
48
+ if (iter->message != NULL)
49
+ dbus_message_ref(iter->message);
50
+
51
+ return iter;
52
+ }
53
+
54
+ RubyDBusMessageIter *
55
+ rdbus_message_iter_new(DBusMessage *message, short is_append_iter)
56
+ {
57
+ RubyDBusMessageIter *iter;
58
+
59
+ iter = _alloc_message_iter(message, NULL);
60
+ if (is_append_iter) {
61
+ dbus_message_append_iter_init(iter->message, iter->real_iter);
62
+ } else
63
+ dbus_message_iter_init(iter->message, iter->real_iter);
64
+ return iter;
65
+ }
66
+
67
+ static void
68
+ _free_message_iter(RubyDBusMessageIter *iter)
69
+ {
70
+ if (iter->message != NULL)
71
+ dbus_message_unref(iter->message);
72
+ ruby_xfree(iter->real_iter);
73
+ iter->message = NULL;
74
+ iter->real_iter = NULL;
75
+ ruby_xfree(iter);
76
+ }
77
+
78
+ static void
79
+ _ensure_arg_type(DBusMessageIter *iter, int type)
80
+ {
81
+ if (dbus_message_iter_get_arg_type(iter) != type)
82
+ rb_raise(eDBusError, "argument type mismatch");
83
+ }
84
+
85
+ /*
86
+ * call-seq:
87
+ * has_next => true|false
88
+ *
89
+ * Returns true if there are additional arguments after the current
90
+ * iterator argument.
91
+ */
92
+ static VALUE
93
+ cDBusMessageIter_has_next(VALUE self)
94
+ {
95
+ if (dbus_message_iter_has_next(ITER_GET(self)))
96
+ return Qtrue;
97
+ return Qfalse;
98
+ }
99
+
100
+ /*
101
+ * call-seq:
102
+ * next => true|false
103
+ *
104
+ * Moves the iterator to the next argument.
105
+ */
106
+ static VALUE
107
+ cDBusMessageIter_next(VALUE self)
108
+ {
109
+ if (dbus_message_iter_next(ITER_GET(self)))
110
+ return Qtrue;
111
+ return Qfalse;
112
+ }
113
+
114
+ /*
115
+ * call-seq:
116
+ * get_arg_type => typecode
117
+ *
118
+ * Returns the argument type of the argument that the iterator
119
+ * currently points at. This is one of the TYPE_xxx codes.
120
+ */
121
+ static VALUE
122
+ cDBusMessageIter_get_arg_type(VALUE self)
123
+ {
124
+ return INT2FIX(dbus_message_iter_get_arg_type(ITER_GET(self)));
125
+ }
126
+
127
+ /*
128
+ * call-seq:
129
+ * get_array_type => typecode
130
+ *
131
+ * Returns the element type of the array argument that the iterator currently
132
+ * points at.
133
+ */
134
+ static VALUE
135
+ cDBusMessageIter_get_array_type(VALUE self)
136
+ {
137
+ return INT2FIX(dbus_message_iter_get_array_type(ITER_GET(self)));
138
+ }
139
+
140
+ /*
141
+ * call-seq:
142
+ * get_byte => byte
143
+ *
144
+ * Returns the byte value of the argument that the iterator currently
145
+ * points at. As Ruby does not have a byte type, the returned value is
146
+ * a Fixnum.
147
+ */
148
+ static VALUE
149
+ cDBusMessageIter_get_byte(VALUE self)
150
+ {
151
+ _ensure_arg_type(ITER_GET(self), DBUS_TYPE_BYTE);
152
+ return INT2FIX(dbus_message_iter_get_byte(ITER_GET(self)) & 0xff);
153
+ }
154
+
155
+ /*
156
+ * call-seq:
157
+ * get_boolean => true|false
158
+ *
159
+ * Returns the boolean value of the argument that the iterator currently
160
+ * points at.
161
+ */
162
+ static VALUE
163
+ cDBusMessageIter_get_boolean(VALUE self)
164
+ {
165
+ _ensure_arg_type(ITER_GET(self), DBUS_TYPE_BOOLEAN);
166
+ if (dbus_message_iter_get_boolean(ITER_GET(self)))
167
+ return Qtrue;
168
+ return Qfalse;
169
+ }
170
+
171
+ /*
172
+ * call-seq:
173
+ * get_int32 => integer
174
+ *
175
+ * Returns the 32-bit integer value of the argument that the iterator
176
+ * currently points at.
177
+ */
178
+ static VALUE
179
+ cDBusMessageIter_get_int32(VALUE self)
180
+ {
181
+ _ensure_arg_type(ITER_GET(self), DBUS_TYPE_INT32);
182
+ return INT2NUM(dbus_message_iter_get_int32(ITER_GET(self)));
183
+ }
184
+
185
+ /*
186
+ * call-seq:
187
+ * get_uint32 => integer
188
+ *
189
+ * Returns the unsigned 32-bit integer value of the argument that the
190
+ * iterator currently points at.
191
+ */
192
+ static VALUE
193
+ cDBusMessageIter_get_uint32(VALUE self)
194
+ {
195
+ _ensure_arg_type(ITER_GET(self), DBUS_TYPE_UINT32);
196
+ return INT2NUM(dbus_message_iter_get_uint32(ITER_GET(self)));
197
+ }
198
+
199
+ #ifdef DBUS_HAVE_INT64
200
+ #if HAVE_LONG_LONG
201
+ /*
202
+ * call-seq:
203
+ * get_int64 => integer
204
+ *
205
+ * Returns the 64-bit integer value of the argument that the
206
+ * iterator currently points at.
207
+ */
208
+ static VALUE
209
+ cDBusMessageIter_get_int64(VALUE self)
210
+ {
211
+ _ensure_arg_type(ITER_GET(self), DBUS_TYPE_INT64);
212
+ return LL2NUM(dbus_message_iter_get_int64(ITER_GET(self)));
213
+ }
214
+
215
+ /*
216
+ * call-seq:
217
+ * get_uint64 => integer
218
+ *
219
+ * Returns the unsigned 64-bit integer value of the argument that the
220
+ * iterator currently points at.
221
+ */
222
+ static VALUE
223
+ cDBusMessageIter_get_uint64(VALUE self)
224
+ {
225
+ _ensure_arg_type(ITER_GET(self), DBUS_TYPE_UINT64);
226
+ return ULL2NUM(dbus_message_iter_get_uint64(ITER_GET(self)));
227
+ }
228
+ #endif
229
+ #endif
230
+
231
+ /*
232
+ * call-seq:
233
+ * get_double => float
234
+ *
235
+ * Returns the floating point value of the argument that the
236
+ * iterator currently points at.
237
+ */
238
+ static VALUE
239
+ cDBusMessageIter_get_double(VALUE self)
240
+ {
241
+ _ensure_arg_type(ITER_GET(self), DBUS_TYPE_DOUBLE);
242
+ return rb_float_new(dbus_message_iter_get_double(ITER_GET(self)));
243
+ }
244
+
245
+ /*
246
+ * call-seq:
247
+ * get_string => string
248
+ *
249
+ * Returns the string value of the argument that the iterator currently
250
+ * points at.
251
+ */
252
+ static VALUE
253
+ cDBusMessageIter_get_string(VALUE self)
254
+ {
255
+ _ensure_arg_type(ITER_GET(self), DBUS_TYPE_STRING);
256
+ return rb_str_new2(dbus_message_iter_get_string(ITER_GET(self)));
257
+ }
258
+
259
+ /*
260
+ * call-seq:
261
+ * get_object_path => string
262
+ *
263
+ * Returns the object path value of the argument that the iterator currently
264
+ * points at. An object path value is a String.
265
+ */
266
+ static VALUE
267
+ cDBusMessageIter_get_object_path(VALUE self)
268
+ {
269
+ _ensure_arg_type(ITER_GET(self), DBUS_TYPE_OBJECT_PATH);
270
+ return rb_str_new2(dbus_message_iter_get_object_path(ITER_GET(self)));
271
+ }
272
+
273
+ /*
274
+ * call-seq:
275
+ * get_dict_key => string
276
+ *
277
+ * Returns the dictionary key for a dictionary entry that the
278
+ * iteratory currently points to. This will only work on iterators
279
+ * returned by DBusMessageIter#dict_iter.
280
+ */
281
+ static VALUE
282
+ cDBusMessageIter_get_dict_key(VALUE self)
283
+ {
284
+ return rb_str_new2(dbus_message_iter_get_dict_key(ITER_GET(self)));
285
+ }
286
+
287
+ /*
288
+ * call-seq:
289
+ * array_iter => iterator
290
+ *
291
+ * Returns an array iterator for the array argument that this iterator
292
+ * currently points to.
293
+ *
294
+ * See DBusMessageIter#get_array for an example of usage.
295
+ */
296
+ static VALUE
297
+ cDBusMessageIter_array_iter_new(VALUE self)
298
+ {
299
+ RubyDBusMessageIter *self_iter = NULL;
300
+ RubyDBusMessageIter *ary_iter = NULL;
301
+ int array_type = DBUS_TYPE_INVALID;
302
+
303
+ self_iter = RDBUS_GET(RubyDBusMessageIter, self);
304
+ _ensure_arg_type(self_iter->real_iter, DBUS_TYPE_ARRAY);
305
+ ary_iter = _alloc_message_iter(self_iter->message, NULL);
306
+ dbus_message_iter_init_array_iterator(self_iter->real_iter, ary_iter->real_iter, &array_type);
307
+ return RDBUS_NEW(cDBusMessageIter, ary_iter);
308
+ }
309
+
310
+ /*
311
+ * call-seq:
312
+ * dict_iter => iterator
313
+ *
314
+ * Returns a dictionary iterator for the dictionary argument that this
315
+ * iterator currently points to.
316
+ *
317
+ * See DBusMessageIter#get_dict for an example of usage.
318
+ */
319
+ static VALUE
320
+ cDBusMessageIter_dict_iter_new(VALUE self)
321
+ {
322
+ RubyDBusMessageIter *self_iter = NULL;
323
+ RubyDBusMessageIter *dict_iter = NULL;
324
+
325
+ self_iter = RDBUS_GET(RubyDBusMessageIter, self);
326
+ _ensure_arg_type(self_iter->real_iter, DBUS_TYPE_DICT);
327
+ dict_iter = _alloc_message_iter(self_iter->message, NULL);
328
+ dbus_message_iter_init_dict_iterator(self_iter->real_iter, dict_iter->real_iter);
329
+ return RDBUS_NEW(cDBusMessageIter, dict_iter);
330
+ }
331
+
332
+ /*
333
+ * call-seq:
334
+ * append_nil => true|false
335
+ *
336
+ * Appends a nil argument value to this message.
337
+ *
338
+ * Returns +false+ if no memory.
339
+ */
340
+ static VALUE
341
+ cDBusMessageIter_append_nil(VALUE self)
342
+ {
343
+ if (dbus_message_iter_append_nil(ITER_GET(self)))
344
+ return Qtrue;
345
+ return Qfalse;
346
+ }
347
+
348
+ /*
349
+ * call-seq:
350
+ * append_boolean(true|false|nil) => true|false
351
+ *
352
+ * Appends a boolean argument value to this message. +nil+ is
353
+ * regarded as a false value if passed through.
354
+ *
355
+ * Returns +false+ if no memory.
356
+ */
357
+ static VALUE
358
+ cDBusMessageIter_append_boolean(VALUE self, VALUE value)
359
+ {
360
+ dbus_bool_t val;
361
+ if (TYPE(value) == T_FALSE || TYPE(value) == T_NIL)
362
+ val = FALSE;
363
+ else
364
+ val = TRUE;
365
+ if (dbus_message_iter_append_boolean(ITER_GET(self), val))
366
+ return Qtrue;
367
+ return Qfalse;
368
+ }
369
+
370
+ /*
371
+ * call-seq:
372
+ * append_byte(byte) => true|false
373
+ *
374
+ * Appends a byte value to this message. As Ruby has no byte type, providing
375
+ * an integer representing the byte value suffices. Note that the supplied
376
+ * value is clamped to 8 bits.
377
+ *
378
+ * Returns +false+ if no memory.
379
+ */
380
+ static VALUE
381
+ cDBusMessageIter_append_byte(VALUE self, VALUE value)
382
+ {
383
+ unsigned char val;
384
+ val = NUM2UINT(value) & 0xff;
385
+ if (dbus_message_iter_append_byte(ITER_GET(self), val))
386
+ return Qtrue;
387
+ return Qfalse;
388
+ }
389
+
390
+ /*
391
+ * call-seq:
392
+ * append_int32(integer) => true|false
393
+ *
394
+ * Appends a signed 32-bit integer value to this message. Note that your
395
+ * value will be truncated if it is larger than the associated D-BUS
396
+ * type.
397
+ *
398
+ * Returns +false+ if no memory.
399
+ */
400
+ static VALUE
401
+ cDBusMessageIter_append_int32(VALUE self, VALUE value)
402
+ {
403
+ dbus_int32_t val;
404
+ val = NUM2INT(value);
405
+ if (dbus_message_iter_append_int32(ITER_GET(self), val))
406
+ return Qtrue;
407
+ return Qfalse;
408
+ }
409
+
410
+ /*
411
+ * call-seq:
412
+ * append_uint32(integer) => true|false
413
+ *
414
+ * Appends an unsigned 32-bit integer value to this message. Note that your
415
+ * value will be truncated if it is larger than the associated D-BUS
416
+ * type.
417
+ *
418
+ * Returns +false+ if no memory.
419
+ */
420
+ static VALUE
421
+ cDBusMessageIter_append_uint32(VALUE self, VALUE value)
422
+ {
423
+ dbus_uint32_t val;
424
+ val = NUM2UINT(value);
425
+ if (dbus_message_iter_append_uint32(ITER_GET(self), val))
426
+ return Qtrue;
427
+ return Qfalse;
428
+ }
429
+
430
+ #ifdef DBUS_HAVE_INT64
431
+ #if HAVE_LONG_LONG
432
+ /*
433
+ * call-seq:
434
+ * append_int64(integer) => true|false
435
+ *
436
+ * Appends a signed 64-bit integer value to this message. Note that your
437
+ * value will be truncated if it is larger than the associated D-BUS
438
+ * type.
439
+ *
440
+ * Returns +false+ if no memory.
441
+ */
442
+ static VALUE
443
+ cDBusMessageIter_append_int64(VALUE self, VALUE value)
444
+ {
445
+ dbus_int64_t val;
446
+ val = NUM2LL(value);
447
+ if (dbus_message_iter_append_int64(ITER_GET(self), val))
448
+ return Qtrue;
449
+ return Qfalse;
450
+ }
451
+
452
+ /*
453
+ * call-seq:
454
+ * append_uint64(integer) => true|false
455
+ *
456
+ * Appends an unsigned 64-bit integer value to this message. Note that your
457
+ * value will be truncated if it is larger than the associated D-BUS
458
+ * type.
459
+ *
460
+ * Returns +false+ if no memory.
461
+ */
462
+ static VALUE
463
+ cDBusMessageIter_append_uint64(VALUE self, VALUE value)
464
+ {
465
+ dbus_uint64_t val;
466
+ val = NUM2LL(value);
467
+ if (dbus_message_iter_append_uint64(ITER_GET(self), val))
468
+ return Qtrue;
469
+ return Qfalse;
470
+ }
471
+ #endif
472
+ #endif
473
+
474
+ /*
475
+ * call-seq:
476
+ * append_double(float) => true|false
477
+ *
478
+ * Appends a floating point value to this message. Note that your
479
+ * value will be truncated if it is larger than the associated D-BUS
480
+ * type.
481
+ *
482
+ * Returns +false+ if no memory.
483
+ */
484
+ static VALUE
485
+ cDBusMessageIter_append_double(VALUE self, VALUE value)
486
+ {
487
+ double val;
488
+ val = NUM2DBL(value);
489
+ if (dbus_message_iter_append_double(ITER_GET(self), val))
490
+ return Qtrue;
491
+ return Qfalse;
492
+ }
493
+
494
+ /*
495
+ * call-seq:
496
+ * append_string(string) => true|false
497
+ *
498
+ * Appends a string value to this message.
499
+ *
500
+ * Returns +false+ if no memory.
501
+ */
502
+ static VALUE
503
+ cDBusMessageIter_append_string(VALUE self, VALUE value)
504
+ {
505
+ if (dbus_message_iter_append_string(ITER_GET(self), StringValuePtr(value)))
506
+ return Qtrue;
507
+ return Qfalse;
508
+ }
509
+
510
+ /*
511
+ * call-seq:
512
+ * append_object_path(string) => true|false
513
+ *
514
+ * Appends an object path value to this message.
515
+ *
516
+ * Returns +false+ if no memory.
517
+ */
518
+ static VALUE
519
+ cDBusMessageIter_append_object_path(VALUE self, VALUE value)
520
+ {
521
+ if (dbus_message_iter_append_object_path(ITER_GET(self), StringValuePtr(value)))
522
+ return Qtrue;
523
+ return Qfalse;
524
+ }
525
+
526
+ /*
527
+ * call-seq:
528
+ * append_dict_key(string) => true|false
529
+ *
530
+ * Appends a dictionary key value to this message. Use in
531
+ * conjunction with another append call for the value to populate
532
+ * a dictionary.
533
+ *
534
+ * See DBusMessageIter#append for an example of usage.
535
+ *
536
+ * Returns +false+ if no memory.
537
+ */
538
+ static VALUE
539
+ cDBusMessageIter_append_dict_key(VALUE self, VALUE value)
540
+ {
541
+ if (dbus_message_iter_append_dict_key(ITER_GET(self), StringValuePtr(value)))
542
+ return Qtrue;
543
+ return Qfalse;
544
+ }
545
+
546
+ /*
547
+ * call-seq:
548
+ * append_array(typecode) => iterator
549
+ *
550
+ * Appends an array of the specified type to this message, and returns an
551
+ * iterator for adding values to the new array.
552
+ *
553
+ * See DBusMessageIter#append for an example of usage.
554
+ *
555
+ * Returns +nil+ if no memory.
556
+ */
557
+ static VALUE
558
+ cDBusMessageIter_append_array(VALUE self, VALUE type)
559
+ {
560
+ RubyDBusMessageIter *parent = NULL;
561
+ RubyDBusMessageIter *child = NULL;
562
+
563
+ parent = RDBUS_GET(RubyDBusMessageIter, self);
564
+ child = _alloc_message_iter(parent->message, NULL);
565
+ if (dbus_message_iter_append_array(parent->real_iter, child->real_iter, NUM2INT(type)))
566
+ return RDBUS_NEW(cDBusMessageIter, child);
567
+ _free_message_iter(child);
568
+ return Qnil;
569
+ }
570
+
571
+ /*
572
+ * call-seq:
573
+ * append_dict => iterator
574
+ *
575
+ * Appends a dictionary to this message, and returns an iterator for adding
576
+ * values to the new dictionary. Use DBusMessageIter#append_dict_key in
577
+ * conjunction with another append method to add <tt>key=>value</tt> pairs
578
+ * to the dictionary.
579
+ *
580
+ * See DBusMessageIter#append for an example of usage.
581
+ *
582
+ * Returns +nil+ if no memory.
583
+ */
584
+ static VALUE
585
+ cDBusMessageIter_append_dict(VALUE self)
586
+ {
587
+ RubyDBusMessageIter *parent = NULL;
588
+ RubyDBusMessageIter *child = NULL;
589
+
590
+ parent = RDBUS_GET(RubyDBusMessageIter, self);
591
+ child = _alloc_message_iter(parent->message, NULL);
592
+ if (dbus_message_iter_append_dict(parent->real_iter, child->real_iter))
593
+ return RDBUS_NEW(cDBusMessageIter, child);
594
+ _free_message_iter(child);
595
+ return Qnil;
596
+ }
597
+
598
+ /*
599
+ * Document-class: DBus::Binding::DBusMessageIter
600
+ *
601
+ * The DBusMessageIter class is an iterator abstraction for accessing the
602
+ * argument values of a DBusMessage.
603
+ *
604
+ * This abstraction is quite low-level, and it is recommended that you use
605
+ * the Enumerable and Array-like methods on DBusMessage to access message
606
+ * argument values instead, as they perform the necessary integration with
607
+ * DBusMessageIter, and will ensure that the values you get have been
608
+ * converted to the correct Ruby types.
609
+ */
610
+ void Init_dbus_message_iter()
611
+ {
612
+ cDBusMessageIter = rb_define_class_under(mDBusBinding, "DBusMessageIter", rb_cObject);
613
+
614
+ rb_define_singleton_method(cDBusMessageIter, "new", rdbus_private_method, 0);
615
+
616
+ rb_define_method(cDBusMessageIter, "has_next", cDBusMessageIter_has_next, 0);
617
+ rb_define_method(cDBusMessageIter, "next", cDBusMessageIter_next, 0);
618
+
619
+ rb_define_method(cDBusMessageIter, "get_arg_type", cDBusMessageIter_get_arg_type, 0);
620
+ rb_define_method(cDBusMessageIter, "get_array_type", cDBusMessageIter_get_array_type, 0);
621
+
622
+ rb_define_method(cDBusMessageIter, "get_byte", cDBusMessageIter_get_byte, 0);
623
+ rb_define_method(cDBusMessageIter, "get_boolean", cDBusMessageIter_get_boolean, 0);
624
+ rb_define_method(cDBusMessageIter, "get_int32", cDBusMessageIter_get_int32, 0);
625
+ rb_define_method(cDBusMessageIter, "get_uint32", cDBusMessageIter_get_uint32, 0);
626
+
627
+ #ifdef DBUS_HAVE_INT64
628
+ #if HAVE_LONG_LONG
629
+ rb_define_method(cDBusMessageIter, "get_int64", cDBusMessageIter_get_int64, 0);
630
+ rb_define_method(cDBusMessageIter, "get_uint64", cDBusMessageIter_get_uint64, 0);
631
+ #endif
632
+ #endif
633
+
634
+ rb_define_method(cDBusMessageIter, "get_double", cDBusMessageIter_get_double, 0);
635
+ rb_define_method(cDBusMessageIter, "get_string", cDBusMessageIter_get_string, 0);
636
+ rb_define_method(cDBusMessageIter, "get_object_path", cDBusMessageIter_get_object_path, 0);
637
+ rb_define_method(cDBusMessageIter, "get_dict_key", cDBusMessageIter_get_dict_key, 0);
638
+
639
+ rb_define_method(cDBusMessageIter, "array_iter", cDBusMessageIter_array_iter_new, 0);
640
+ rb_define_method(cDBusMessageIter, "dict_iter", cDBusMessageIter_dict_iter_new, 0);
641
+
642
+ rb_define_method(cDBusMessageIter, "append_nil", cDBusMessageIter_append_nil, 0);
643
+ rb_define_method(cDBusMessageIter, "append_boolean", cDBusMessageIter_append_boolean, 1);
644
+ rb_define_method(cDBusMessageIter, "append_byte", cDBusMessageIter_append_byte, 1);
645
+ rb_define_method(cDBusMessageIter, "append_int32", cDBusMessageIter_append_int32, 1);
646
+ rb_define_method(cDBusMessageIter, "append_uint32", cDBusMessageIter_append_uint32, 1);
647
+
648
+ #ifdef DBUS_HAVE_INT64
649
+ #if HAVE_LONG_LONG
650
+ rb_define_method(cDBusMessageIter, "append_int64", cDBusMessageIter_append_int64, 1);
651
+ rb_define_method(cDBusMessageIter, "append_uint64", cDBusMessageIter_append_uint64, 1);
652
+ #endif
653
+ #endif
654
+
655
+ rb_define_method(cDBusMessageIter, "append_double", cDBusMessageIter_append_double, 1);
656
+ rb_define_method(cDBusMessageIter, "append_string", cDBusMessageIter_append_string, 1);
657
+ rb_define_method(cDBusMessageIter, "append_object_path", cDBusMessageIter_append_object_path, 1);
658
+ rb_define_method(cDBusMessageIter, "append_dict_key", cDBusMessageIter_append_dict_key, 1);
659
+ rb_define_method(cDBusMessageIter, "append_array", cDBusMessageIter_append_array, 1);
660
+ rb_define_method(cDBusMessageIter, "append_dict", cDBusMessageIter_append_dict, 0);
661
+ }