summaryrefslogtreecommitdiffstats
path: root/src/dbus_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/dbus_common.c')
-rw-r--r--src/dbus_common.c108
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);
+}