#include "config.h" #include #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); }