From 60125d43e66623e3cd3a2721327cb2ebf622b00f Mon Sep 17 00:00:00 2001 From: Olliver Schinagl Date: Sun, 21 Jun 2015 16:42:08 +0200 Subject: add network info get data Signed-off-by: Olliver Schinagl --- src/dbus_handlers.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/dbus_handlers.h | 4 ++-- 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/src/dbus_handlers.c b/src/dbus_handlers.c index 18b2ad8..8630f54 100644 --- a/src/dbus_handlers.c +++ b/src/dbus_handlers.c @@ -10,6 +10,7 @@ #include #include "dbus_handlers.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) @@ -25,6 +26,58 @@ void on_method_generic_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending } } +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 = eulogium->networks; + 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 + 1) * 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); + + if (strncmp(tech, _TECH_ETHERNET, sizeof(_TECH_ETHERNET))) + networks[i].tech = ETHERNET; + if (strncmp(tech, _TECH_WIFI, sizeof(_TECH_WIFI))) + networks[i].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++; + } +} + +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; diff --git a/src/dbus_handlers.h b/src/dbus_handlers.h index 281be84..3086fe7 100644 --- a/src/dbus_handlers.h +++ b/src/dbus_handlers.h @@ -14,8 +14,6 @@ #include #include -//#include "widget_data.h" - struct dbus_handle { const char *signal; Eldbus_Signal_Cb sig_cb; @@ -27,6 +25,8 @@ struct dbus_handle { }; void on_method_generic_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED); +void on_method_get_network_info_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED); +void on_signal_network_info_changed_ret(void *data, const Eldbus_Message *msg); void on_method_is_network_powered_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED); void on_signal_network_power_changed_ret(void *data, const Eldbus_Message *msg); -- cgit v0.12