summaryrefslogtreecommitdiffstats
path: root/src/dbus_handlers.c
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-06-21 14:42:08 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-06-21 14:42:08 (GMT)
commit60125d43e66623e3cd3a2721327cb2ebf622b00f (patch)
tree15dcf3fb64befa0567ad9270518196fcc413b33c /src/dbus_handlers.c
parente9829a29427ebe44edcd14450365021d162a8457 (diff)
downloadeulogium-60125d43e66623e3cd3a2721327cb2ebf622b00f.zip
eulogium-60125d43e66623e3cd3a2721327cb2ebf622b00f.tar.gz
eulogium-60125d43e66623e3cd3a2721327cb2ebf622b00f.tar.bz2
add network info get data
Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
Diffstat (limited to 'src/dbus_handlers.c')
-rw-r--r--src/dbus_handlers.c53
1 files changed, 53 insertions, 0 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 <Elementary.h>
#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;