aboutsummaryrefslogtreecommitdiff
path: root/src/lib/gnsrecord/gnunet_gnsrecord_dbus_lib_pop.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/gnsrecord/gnunet_gnsrecord_dbus_lib_pop.c')
-rw-r--r--src/lib/gnsrecord/gnunet_gnsrecord_dbus_lib_pop.c85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/lib/gnsrecord/gnunet_gnsrecord_dbus_lib_pop.c b/src/lib/gnsrecord/gnunet_gnsrecord_dbus_lib_pop.c
new file mode 100644
index 0000000..3e09d4b
--- /dev/null
+++ b/src/lib/gnsrecord/gnunet_gnsrecord_dbus_lib_pop.c
@@ -0,0 +1,85 @@
1#include "config.h"
2
3#include "gnunet_gnsrecord_dbus_lib.h"
4
5DBusMessage *
6GNUNET_GNSRECORD_DBUS_pop_type (
7 DBusMessage *message,
8 DBusMessageIter *iter,
9 const char *arg_name,
10 uint32_t *value)
11{
12 DBusMessageIter iter_sub;
13 DBusMessage *ret = GNUNET_DBUS_pop_enter_variant (message, iter, &iter_sub, arg_name);
14 if (ret)
15 return ret;
16
17 int arg_type = dbus_message_iter_get_arg_type (&iter_sub);
18 switch (arg_type)
19 {
20 case DBUS_TYPE_STRING: {
21 const char *string;
22 dbus_message_iter_get_basic (&iter_sub, &string);
23 *value = GNUNET_GNSRECORD_typename_to_number (string);
24 if (*value == UINT32_MAX)
25 {
26 return dbus_message_new_error_printf (
27 message,
28 DBUS_ERROR_INVALID_ARGS,
29 "Bad argument for '%s'. %s is not a valid GNS record type. (Should be something like 'AAAA' or 'CNAME' etc.)",
30 arg_name,
31 string);
32 };
33 return NULL;
34 };
35 case DBUS_TYPE_UINT32:
36 dbus_message_iter_get_basic (&iter_sub, value);
37 return NULL;
38 default:
39 return dbus_message_new_error_printf (
40 message,
41 DBUS_ERROR_INVALID_ARGS,
42 "Bad argument for '%s'. Variant should contain a string or uint32. Contains a %s.",
43 arg_name,
44 GNUNET_DBUS_signature_typecode_to_string (arg_type));
45 };
46};
47
48DBusMessage *
49GNUNET_GNSRECORD_DBUS_pop_flags (
50 DBusMessage *message,
51 DBusMessageIter *iter,
52 const char *arg_name,
53 enum GNUNET_GNSRECORD_Flags *value)
54{
55 return GNUNET_DBUS_pop_bitfield (message, iter, arg_name, (int *)value, GNUNET_GNSRECORD_DBUS_describe_flags ());
56};
57
58#if 0
59DBusMessage *
60GNUNET_GNSRECORD_DBUS_pop_data (
61 DBusMessage *message,
62 DBusMessageIter *iter,
63 const char *arg_name,
64 struct GNUNET_GNSRECORD_Data *value)
65{
66 DBusMessageIter iter_sub;
67 DBusMessage *ret = GNUNET_DBUS_pop_enter_struct (message, iter, &iter_sub, arg_name);
68 if (ret)
69 return ret;
70
71 DBusMessageIter iter_sub_sub;
72 GNUNET_GNSRECORD_DBUS_pop_type (message, &iter_sub, "record_type", &value->record_type);
73 GNUNET_GNSRECORD_DBUS_pop_flags (message, &iter_sub, "flags", &value->flags);
74 GNUNET_DBUS_pop_enter_variant (message, &iter_sub, &iter_sub_sub);
75 int arg_type = dbus_message_iter_get_arg_type (&iter_sub_sub);
76 switch (arg_type)
77 {
78 case DBUS_TYPE_STRING: {
79 const char *stringified;
80 dbus_message_iter_get_basic (&iter_sub_sub, &stringified);
81 int success = GNUNET_GNSRECORD_string_to_value (value->record_type, stringified,
82
83#endif
84
85