diff options
author | Olliver Schinagl <o.schinagl@ultimaker.com> | 2015-06-24 05:29:49 (GMT) |
---|---|---|
committer | Olliver Schinagl <o.schinagl@ultimaker.com> | 2015-06-24 05:40:15 (GMT) |
commit | 1cdb21dfc1e577fb60b6a427aaf04c9b408b5d9d (patch) | |
tree | 923349d0525e5178b864b28e59c4a116d54480fd /src/dbus_common.c | |
parent | bb9593c750f326e732e957b6c9d552f548df91cf (diff) | |
download | eulogium-1cdb21dfc1e577fb60b6a427aaf04c9b408b5d9d.zip eulogium-1cdb21dfc1e577fb60b6a427aaf04c9b408b5d9d.tar.gz eulogium-1cdb21dfc1e577fb60b6a427aaf04c9b408b5d9d.tar.bz2 |
rename dbus_handlers to dbus_common
Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
Diffstat (limited to 'src/dbus_common.c')
-rw-r--r-- | src/dbus_common.c | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/src/dbus_common.c b/src/dbus_common.c new file mode 100644 index 0000000..dd3bae5 --- /dev/null +++ b/src/dbus_common.c @@ -0,0 +1,108 @@ +/* + * function and data types for signal handlers + * + * Copyright (c) 2015 Ultimaker B.V. + * Author: Olliver Schinagl <o.schinagl@ultimaker.com> + * + * SPDX-License-Identifier: AGPL-3.0+ + */ + +#include <Elementary.h> + +#include "dbus_common.h" +#include "eulogium.h" +#include "eulogium_item_list.h" + +void on_method_generic_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) +{ + + struct list_item *item = data; + const char *errname, *errmsg; + Eina_Bool state; + + if (eldbus_message_error_get(msg, &errname, &errmsg)) { + EINA_LOG_ERR("%s %s", errname, errmsg); + return; + } +} + +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 ** */ + struct network_data *networks = NULL; + const char *errname, *errmsg; + Eldbus_Message_Iter *array, *net_struct; + char *obj_path, *tech, *ipv4, *ipv6, *ssid, *dummy; + uint_fast16_t i = 0; + + if (eldbus_message_error_get(msg, &errname, &errmsg)) { + EINA_LOG_ERR("%s %s", errname, errmsg); + return; + } + if (!eldbus_message_arguments_get(msg, "a(osssss)", &array)) { + EINA_LOG_ERR("Message content does not match expected \"a(osssss)\" signature. (%s)", eldbus_message_signature_get(msg)); + return; + } + while (eldbus_message_iter_get_and_next(array, 'r', &net_struct)) + if (!eldbus_message_iter_arguments_get(net_struct, "osssss", &obj_path, &tech, &ipv4, &ipv6, &ssid, &dummy)) { + EINA_LOG_ERR("Message content does not match expected \"osssss\" signature. (%s)", eldbus_message_signature_get(msg)); + break; + } else { + networks = realloc(networks, (i + 2) * sizeof(struct network_data)); + if (!networks) { + EINA_LOG_ERR("Unable to allocate memory."); + } else { + size_t obj_pathsize = strlen(obj_path) + 1; + + networks[i].obj_path = malloc(obj_pathsize); + if (!networks[i].obj_path) + EINA_LOG_ERR("Unable to allocate memory."); + else + strncpy(networks[i].obj_path, obj_path, obj_pathsize); + + networks[i].tech = UNKNOWN; + if (strcmp(tech, _TECH_ETHERNET)) + networks[i].tech = TECH_ETHERNET; + if (strcmp(tech, _TECH_WIFI)) + networks[i].tech = TECH_WIFI; + + strncpy(networks[i].ipv4, ipv4, IPV4_MAX_LEN); + strncpy(networks[i].ipv6, ipv6, IPV6_MAX_LEN); + strncpy(networks[i].ssid, ssid, SSID_MAX_LEN); + } + i++; + } + networks[i].obj_path = NULL; /* sentinel */ + eulogium->networks = networks; +} + +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_is_network_powered_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) +{ + struct list_item *item = data; + const char *errname, *errmsg; + Eina_Bool state; + + if (eldbus_message_error_get(msg, &errname, &errmsg)) { + EINA_LOG_ERR("%s %s", errname, errmsg); + return; + } + if (!eldbus_message_arguments_get(msg, "b", &state)) { + EINA_LOG_ERR("Failed to get networking state."); + return; + } + item->state = state; + if (item->_widget) + elm_check_state_set(item->_widget, item->state); + + EINA_LOG_INFO("%s is now %d", eldbus_message_member_get(msg), item->state); +} + +void on_signal_network_power_changed_ret(void *data, const Eldbus_Message *msg) +{ + on_method_is_network_powered_ret(data, msg, NULL); +} |