aboutsummaryrefslogtreecommitdiff
path: root/src/lib/gnsrecord/gnunet_gnsrecord_dbus_lib_push.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/gnsrecord/gnunet_gnsrecord_dbus_lib_push.c')
-rw-r--r--src/lib/gnsrecord/gnunet_gnsrecord_dbus_lib_push.c88
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
10void
11GNUNET_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
33void
34GNUNET_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
43void
44GNUNET_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