summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/dbus_handlers.c53
-rw-r--r--src/dbus_handlers.h4
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 <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;
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 <Eldbus.h>
#include <stdint.h>
-//#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);