diff options
Diffstat (limited to 'src/dbus_common.c')
-rw-r--r-- | src/dbus_common.c | 54 |
1 files changed, 48 insertions, 6 deletions
diff --git a/src/dbus_common.c b/src/dbus_common.c index dd3bae5..b05e9ea 100644 --- a/src/dbus_common.c +++ b/src/dbus_common.c @@ -12,20 +12,39 @@ #include "dbus_common.h" #include "eulogium.h" #include "eulogium_item_list.h" +#include "procedures.h" -void on_method_generic_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) +void on_method_generic_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) { + const char *errname, *errmsg; - struct list_item *item = data; + if (eldbus_message_error_get(msg, &errname, &errmsg)) { + EINA_LOG_ERR("%s %s", errname, errmsg); + return; + } +} + +void on_method_generic_bool_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) +{ const char *errname, *errmsg; - Eina_Bool state; + Eina_Bool ret; if (eldbus_message_error_get(msg, &errname, &errmsg)) { EINA_LOG_ERR("%s %s", errname, errmsg); return; } + if (!eldbus_message_arguments_get(msg, "b", &ret)) { + EINA_LOG_ERR("Signature mismatch, \"b\"."); + return; + } + if (ret) + EINA_LOG_INFO("Ran %s successfully.", (char *)data); + else + EINA_LOG_WARN("%s failed to run.", (char *)data); } +#define _TECH_ETHERNET "ethernet" +#define _TECH_WIFI "wifi" void on_method_get_network_info_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) { struct eulogium_data *eulogium = data; /* TODO replace this by making networks direct via ** */ @@ -60,10 +79,10 @@ void on_method_get_network_info_ret(void *data, const Eldbus_Message *msg, Eldbu else strncpy(networks[i].obj_path, obj_path, obj_pathsize); - networks[i].tech = UNKNOWN; - if (strcmp(tech, _TECH_ETHERNET)) + networks[i].tech = TECH_UNKNOWN; + if (!strcmp(tech, _TECH_ETHERNET)) networks[i].tech = TECH_ETHERNET; - if (strcmp(tech, _TECH_WIFI)) + if (!strcmp(tech, _TECH_WIFI)) networks[i].tech = TECH_WIFI; strncpy(networks[i].ipv4, ipv4, IPV4_MAX_LEN); @@ -81,6 +100,29 @@ void on_signal_network_info_changed_ret(void *data, const Eldbus_Message *msg) on_method_get_network_info_ret(data, msg, NULL); } +void on_method_get_procedure_metadata_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) +{ + const struct procedure_data *proc = data; + const char *errname, *errmsg; + Eldbus_Message_Iter *array; + + if (eldbus_message_error_get(msg, &errname, &errmsg)) { + EINA_LOG_ERR("%s %s", errname, errmsg); /* XXX do these need to be free'ed? FIXME! YES! They do */ + return; + } + if (!eldbus_message_arguments_get(msg, "a{sv}", &array)) { + EINA_LOG_ERR("Message content does not match expected \"a{sv}\" signature. (%s)", eldbus_message_signature_get(msg)); /* XXX this return value may need to be freed actually!! Yep they do.*/ + return; + } + eldbus_message_iter_dict_iterate(array, "sv", proc->parser, proc->meta); +} + +/* XXX we are likely not getting a signal, but will deal with this on procedure start and procedure finished. */ +void on_signal_procedure_metadata_changed_ret(void *data, const Eldbus_Message *msg) +{ + on_method_get_procedure_metadata_ret(data, msg, NULL); +} + void on_method_is_network_powered_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) { struct list_item *item = data; |