- .enable = network_enable,
- .disable = network_disable,
-};
-
-static struct connman_element *find_element(struct wifi_data *data,
- const char *identifier)
-{
- GSList *list;
-
- for (list = data->list; list; list = list->next) {
- struct connman_element *element = list->data;
-
- if (connman_element_match_static_property(element,
- "WiFi.Name", &identifier) == TRUE)
- return element;
- }
-
- return NULL;
-}
-
-static void state_change(struct connman_element *parent,
- enum supplicant_state state)
-{
- struct wifi_data *data = connman_element_get_data(parent);
- struct connman_element *element;
-
- DBG("state %d", state);
-
- if (data->identifier == NULL)
- return;
-
- element = find_element(data, data->identifier);
- if (element == NULL)
- return;
-
- if (state == STATE_COMPLETED) {
- struct connman_element *dhcp;
-
- dhcp = connman_element_create(NULL);
-
- dhcp->type = CONNMAN_ELEMENT_TYPE_DHCP;
- dhcp->index = element->index;
-
- connman_element_register(dhcp, element);
- }
-}
-
-static void scan_result(struct connman_element *parent,
- struct supplicant_network *network)
-{
- struct wifi_data *data = connman_element_get_data(parent);
- struct connman_element *element;
- gchar *temp;
- int i;
-
- DBG("network %p identifier %s", network, network->identifier);
-
- if (data == NULL)
- return;
-
- if (network->identifier == NULL)
- return;
-
- if (network->identifier[0] == '\0')
- return;
-
- temp = g_strdup(network->identifier);
-
- for (i = 0; i < strlen(temp); i++) {
- if (temp[i] == ' ' || temp[i] == '.' || temp[i] == '-')
- temp[i] = '_';
- else if (temp[i] == '(' || temp[i] == ')')
- temp[i] = '_';
- else if (g_ascii_isprint(temp[i]) == FALSE)
- temp[i] = '_';
- temp[i] = g_ascii_tolower(temp[i]);
- }
-
- element = find_element(data, network->identifier);
- if (element == NULL) {
- guint8 strength;
-
- element = connman_element_create(temp);
-
- element->type = CONNMAN_ELEMENT_TYPE_NETWORK;
- element->index = parent->index;
-
- data->list = g_slist_append(data->list, element);
-
- connman_element_add_static_property(element, "WiFi.Name",
- DBUS_TYPE_STRING, &network->identifier);
-
- connman_element_add_static_array_property(element, "WiFi.SSID",
- DBUS_TYPE_BYTE, &network->ssid, network->ssid_len);
-
- if (element->wifi.security == NULL) {
- const char *security;
-
- if (network->has_rsn == TRUE)
- security = "wpa2";
- else if (network->has_wpa == TRUE)
- security = "wpa";
- else if (network->has_wep == TRUE)
- security = "wep";
- else
- security = "none";
-
- element->wifi.security = g_strdup(security);
- }
-
- strength = network->quality;
-
- connman_element_add_static_property(element, "WiFi.Strength",
- DBUS_TYPE_BYTE, &strength);
-
- connman_element_add_static_property(element, "WiFi.Noise",
- DBUS_TYPE_INT32, &network->noise);
-
- DBG("%s (%s) strength %d", network->identifier,
- element->wifi.security, strength);
-
- connman_element_register(element, parent);
- }
-
- g_free(temp);
-}
-
-static struct supplicant_callback wifi_callback = {
- .state_change = state_change,
- .scan_result = scan_result,