1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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);
}
|