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