#define CONNMAN_API_SUBJECT_TO_CHANGE
#include <connman/device.h>
+#include <connman/option.h>
+#include <connman/inet.h>
#include <connman/dbus.h>
#include <connman/log.h>
-#include "inet.h"
#include "supplicant.h"
#define TIMEOUT 5000
struct supplicant_result {
char *path;
char *name;
- char *addr;
+ unsigned char *addr;
+ unsigned int addr_len;
unsigned char *ssid;
unsigned int ssid_len;
dbus_uint16_t capabilities;
for (list = task_list; list; list = list->next) {
struct supplicant_task *task = list->data;
- if (g_str_equal(task->path, path) == TRUE)
+ if (g_strcmp0(task->path, path) == 0)
return task;
}
return;
if (dbus_message_get_type(reply) == DBUS_MESSAGE_TYPE_ERROR)
- goto done;
+ goto failed;
dbus_error_init(&error);
dbus_error_free(&error);
} else
connman_error("Wrong arguments for add interface");
- goto done;
+ goto failed;
}
DBG("path %s", path);
connman_device_set_powered(task->device, TRUE);
-done:
dbus_message_unref(reply);
+
+ return;
+
+failed:
+ task_list = g_slist_remove(task_list, task);
+
+ connman_device_unref(task->device);
+
+ free_task(task);
}
static int add_interface(struct supplicant_task *task)
{
- const char *driver = "wext";
+ const char *driver = connman_option_get_string("wifi");
DBusMessage *message;
DBusMessageIter array, dict;
DBusPendingCall *call;
connman_device_unref(task->device);
- inet_ifdown(task->ifindex);
+ connman_inet_ifdown(task->ifindex);
free_task(task);
{ "2wire" },
{ "compaq" },
{ "tsunami" },
- { "comcomcom" },
+ { "comcomcom", "3com" },
+ { "3Com", "3com" },
{ "Symbol", "symbol" },
+ { "Motorola", "motorola" },
{ "Wireless" , "wireless" },
{ "WLAN", "wlan" },
{ }
if (addr_len != 6)
return;
- eth = (void *) addr;
-
- result->addr = g_try_malloc0(18);
+ result->addr = g_try_malloc(addr_len);
if (result->addr == NULL)
return;
- snprintf(result->addr, 18, "%02X:%02X:%02X:%02X:%02X:%02X",
- eth->ether_addr_octet[0],
- eth->ether_addr_octet[1],
- eth->ether_addr_octet[2],
- eth->ether_addr_octet[3],
- eth->ether_addr_octet[4],
- eth->ether_addr_octet[5]);
+ memcpy(result->addr, addr, addr_len);
+ result->addr_len = addr_len;
- result->path = g_try_malloc0(18);
+ result->path = g_try_malloc0(13);
if (result->path == NULL)
return;
- snprintf(result->path, 18, "%02x%02x%02x%02x%02x%02x",
+ eth = (void *) addr;
+
+ snprintf(result->path, 13, "%02x%02x%02x%02x%02x%02x",
eth->ether_addr_octet[0],
eth->ether_addr_octet[1],
eth->ether_addr_octet[2],
static unsigned char calculate_strength(struct supplicant_result *result)
{
- if (result->quality < 0)
- return 0;
+ if (result->quality < 0) {
+ unsigned char strength;
+
+ if (result->level > 0)
+ strength = 100 - result->level;
+ else
+ strength = 120 + result->level;
+
+ if (strength > 100)
+ strength = 100;
+
+ return strength;
+ }
return result->quality;
}
memset(&result, 0, sizeof(result));
result.frequency = -1;
result.quality = -1;
- result.level = -1;
- result.noise = -1;
+ result.level = 0;
+ result.noise = 0;
dbus_message_iter_init(reply, &array);
connman_network_set_protocol(network,
CONNMAN_NETWORK_PROTOCOL_IP);
- connman_network_set_string(network, "Address", result.addr);
+ connman_network_set_address(network, result.addr,
+ result.addr_len);
if (connman_device_add_network(task->device, network) < 0) {
connman_network_unref(network);
}
if (result.name != NULL && result.name[0] != '\0')
- connman_network_set_string(network, "Name", result.name);
+ connman_network_set_name(network, result.name);
connman_network_set_blob(network, "WiFi.SSID",
result.ssid, result.ssid_len);
(result.has_wps == TRUE) ? "WPS" : "no WPS");
connman_network_set_available(network, TRUE);
- connman_network_set_uint8(network, "Strength", strength);
- connman_network_set_uint16(network, "Frequency", frequency);
+ connman_network_set_strength(network, strength);
+ connman_network_set_uint16(network, "Frequency", frequency);
connman_network_set_uint16(network, "WiFi.Channel", channel);
connman_network_set_string(network, "WiFi.Security", security);
return -ENOMEM;
task->ifindex = connman_device_get_index(device);
- task->ifname = inet_index2name(task->ifindex);
+ task->ifname = connman_inet_ifname(task->ifindex);
if (task->ifname == NULL) {
g_free(task);