struct supplicant_task {
int ifindex;
- gchar *ifname;
+ char *ifname;
struct connman_device *device;
- gchar *path;
+ struct connman_network *network;
+ char *path;
+ char *netpath;
gboolean created;
- gchar *network;
enum supplicant_state state;
GSList *scan_results;
};
DBG("task %p", task);
- if (task->network != NULL)
+ if (task->netpath != NULL)
return -EALREADY;
message = dbus_message_new_method_call(SUPPLICANT_NAME, task->path,
DBG("path %s", path);
- task->network = g_strdup(path);
+ task->netpath = g_strdup(path);
dbus_message_unref(reply);
DBG("task %p", task);
- if (task->network == NULL)
+ if (task->netpath == NULL)
return -EINVAL;
message = dbus_message_new_method_call(SUPPLICANT_NAME, task->path,
if (message == NULL)
return -ENOMEM;
- dbus_message_append_args(message, DBUS_TYPE_OBJECT_PATH, &task->network,
+ dbus_message_append_args(message, DBUS_TYPE_OBJECT_PATH, &task->netpath,
DBUS_TYPE_INVALID);
dbus_error_init(&error);
dbus_message_unref(reply);
- g_free(task->network);
- task->network = NULL;
+ g_free(task->netpath);
+ task->netpath = NULL;
return 0;
}
DBG("task %p", task);
- if (task->network == NULL)
+ if (task->netpath == NULL)
return -EINVAL;
message = dbus_message_new_method_call(SUPPLICANT_NAME, task->path,
if (message == NULL)
return -ENOMEM;
- dbus_message_append_args(message, DBUS_TYPE_OBJECT_PATH, &task->network,
+ dbus_message_append_args(message, DBUS_TYPE_OBJECT_PATH, &task->netpath,
DBUS_TYPE_INVALID);
dbus_error_init(&error);
DBG("task %p", task);
- if (task->network == NULL)
+ if (task->netpath == NULL)
return -EINVAL;
- message = dbus_message_new_method_call(SUPPLICANT_NAME, task->network,
+ message = dbus_message_new_method_call(SUPPLICANT_NAME, task->netpath,
SUPPLICANT_INTF ".Network", "enable");
if (message == NULL)
return -ENOMEM;
DBG("task %p", task);
- if (task->network == NULL)
+ if (task->netpath == NULL)
return -EINVAL;
- message = dbus_message_new_method_call(SUPPLICANT_NAME, task->network,
+ message = dbus_message_new_method_call(SUPPLICANT_NAME, task->netpath,
SUPPLICANT_INTF ".Network", "disable");
if (message == NULL)
return -ENOMEM;
DBG("task %p", task);
- if (task->network == NULL)
+ if (task->netpath == NULL)
return -EINVAL;
- message = dbus_message_new_method_call(SUPPLICANT_NAME, task->network,
+ message = dbus_message_new_method_call(SUPPLICANT_NAME, task->netpath,
SUPPLICANT_INTF ".Network", "set");
if (message == NULL)
return -ENOMEM;
network = connman_device_get_network(task->device, temp);
if (network == NULL) {
const char *mode;
+ int index;
network = connman_network_create(temp,
CONNMAN_NETWORK_TYPE_WIFI);
if (network == NULL)
goto done;
+ index = connman_device_get_index(task->device);
+ connman_network_set_index(network, index);
+
+ connman_network_set_protocol(network,
+ CONNMAN_NETWORK_PROTOCOL_IP);
+
connman_network_set_string(network, "Name", result.identifier);
connman_network_set_blob(network, "WiFi.SSID",
switch (task->state) {
case STATE_COMPLETED:
/* carrier on */
+ connman_network_set_connected(task->network, TRUE);
break;
case STATE_DISCONNECTED:
/* carrier off */
+ connman_network_set_connected(task->network, FALSE);
break;
default:
break;
ssid = connman_network_get_blob(network, "WiFi.SSID", &ssid_len);
+ DBG("security %s passphrase %s", security, passphrase);
+
+ if (security == NULL && passphrase == NULL)
+ return -EINVAL;
+
+ if (g_str_equal(security, "none") == FALSE && passphrase == NULL)
+ return -EINVAL;
+
index = connman_network_get_index(network);
task = find_task_by_index(index);
if (task == NULL)
return -ENODEV;
+ task->network = connman_network_ref(network);
+
add_network(task);
select_network(task);
remove_network(task);
+ connman_network_unref(task->network);
+
return 0;
}