diff options
Diffstat (limited to 'src/lib/gnsrecord/gnunet_gnsrecord_dbus_lib_push.c')
-rw-r--r-- | src/lib/gnsrecord/gnunet_gnsrecord_dbus_lib_push.c | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/lib/gnsrecord/gnunet_gnsrecord_dbus_lib_push.c b/src/lib/gnsrecord/gnunet_gnsrecord_dbus_lib_push.c new file mode 100644 index 0000000..00dddc0 --- /dev/null +++ b/src/lib/gnsrecord/gnunet_gnsrecord_dbus_lib_push.c | |||
@@ -0,0 +1,88 @@ | |||
1 | #include "config.h" | ||
2 | |||
3 | #include <gnunet/platform.h> | ||
4 | |||
5 | #include "gnunet_gnsrecord_dbus_lib.h" | ||
6 | #include "gnunet_time_dbus_lib.h" | ||
7 | |||
8 | #define LOG(kind, ...) GNUNET_log_from(kind, "gnsrecord-dbus-push", __VA_ARGS__) | ||
9 | |||
10 | void | ||
11 | GNUNET_GNSRECORD_DBUS_push_type ( | ||
12 | DBusMessage *message, | ||
13 | DBusMessageIter *iter, | ||
14 | const uint32_t *value) | ||
15 | { | ||
16 | LOG (GNUNET_ERROR_TYPE_DEBUG, "Pushing GNSRECORD type\n"); | ||
17 | DBusMessageIter iter_sub; | ||
18 | if (GNUNET_DBUS_message_get_pretty (message)) | ||
19 | { | ||
20 | GNUNET_DBUS_push_open_variant (message, iter, &iter_sub, GNUNET_DBUS_SIGNATURE_STRING); | ||
21 | const char *stringified = GNUNET_GNSRECORD_number_to_typename (*value); | ||
22 | GNUNET_DBUS_push_string (message, &iter_sub, &stringified); | ||
23 | GNUNET_DBUS_push_close_variant (message, iter, &iter_sub); | ||
24 | } | ||
25 | else | ||
26 | { | ||
27 | GNUNET_DBUS_push_open_variant (message, iter, &iter_sub, GNUNET_DBUS_SIGNATURE_UINT32); | ||
28 | GNUNET_DBUS_push_uint32 (message, &iter_sub, value); | ||
29 | GNUNET_DBUS_push_close_variant (message, iter, &iter_sub); | ||
30 | } | ||
31 | }; | ||
32 | |||
33 | void | ||
34 | GNUNET_GNSRECORD_DBUS_push_flags ( | ||
35 | DBusMessage *message, | ||
36 | DBusMessageIter *iter, | ||
37 | const enum GNUNET_GNSRECORD_Flags *value) | ||
38 | { | ||
39 | LOG (GNUNET_ERROR_TYPE_DEBUG, "Pushing GNUNET_GNSRECORD_Flags\n"); | ||
40 | GNUNET_DBUS_push_bitfield (message, iter, (const int *)value, GNUNET_GNSRECORD_DBUS_describe_flags ()); | ||
41 | }; | ||
42 | |||
43 | void | ||
44 | GNUNET_GNSRECORD_DBUS_push_data ( | ||
45 | DBusMessage *message, | ||
46 | DBusMessageIter *iter, | ||
47 | const struct GNUNET_GNSRECORD_Data *value) | ||
48 | { | ||
49 | LOG (GNUNET_ERROR_TYPE_DEBUG, "Pushing GNUNET_GNSRECORD_Data\n"); | ||
50 | DBusMessageIter iter_sub; | ||
51 | DBusMessageIter iter_sub_sub; | ||
52 | |||
53 | GNUNET_DBUS_push_open_struct (message, iter, &iter_sub); | ||
54 | GNUNET_GNSRECORD_DBUS_push_type (message, &iter_sub, &value->record_type); | ||
55 | GNUNET_GNSRECORD_DBUS_push_flags (message, &iter_sub, &value->flags); | ||
56 | |||
57 | if (GNUNET_DBUS_message_get_pretty (message)) | ||
58 | { | ||
59 | GNUNET_DBUS_push_open_variant (message, &iter_sub, &iter_sub_sub, GNUNET_DBUS_SIGNATURE_STRING); | ||
60 | char *stringified = GNUNET_GNSRECORD_value_to_string (value->record_type, value->data, value->data_size); | ||
61 | const char *stringified_const = stringified; | ||
62 | GNUNET_DBUS_push_string (message, &iter_sub_sub, &stringified_const); | ||
63 | GNUNET_free (stringified); | ||
64 | GNUNET_DBUS_push_close_variant (message, &iter_sub, &iter_sub_sub); | ||
65 | } | ||
66 | else | ||
67 | { | ||
68 | GNUNET_DBUS_push_open_variant (message, &iter_sub, &iter_sub_sub, GNUNET_DBUS_SIGNATURE_ARRAY (GNUNET_DBUS_SIGNATURE_BYTE)); | ||
69 | GNUNET_DBUS_push_byte_array (message, &iter_sub_sub, (const unsigned char *)value->data, value->data_size); | ||
70 | GNUNET_DBUS_push_close_variant (message, &iter_sub, &iter_sub_sub); | ||
71 | }; | ||
72 | |||
73 | if (value->flags & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION) | ||
74 | { | ||
75 | struct GNUNET_TIME_Relative expiration_time; | ||
76 | expiration_time.rel_value_us = value->expiration_time; | ||
77 | GNUNET_TIME_DBUS_push_relative (message, &iter_sub, &expiration_time); | ||
78 | } | ||
79 | else | ||
80 | { | ||
81 | struct GNUNET_TIME_Absolute expiration_time; | ||
82 | expiration_time.abs_value_us = value->expiration_time; | ||
83 | GNUNET_TIME_DBUS_push_absolute (message, &iter_sub, &expiration_time); | ||
84 | }; | ||
85 | GNUNET_DBUS_push_close_struct (message, iter, &iter_sub); | ||
86 | } | ||
87 | |||
88 | |||