return network->available;
}
-/**
- * connman_network_set_connected:
- * @network: network structure
- * @connected: connected state
- *
- * Change connected state of network
- */
-int connman_network_set_connected(struct connman_network *network,
- connman_bool_t connected)
+static gboolean set_connected(gpointer user_data)
{
- DBusMessage *signal;
- DBusMessageIter entry, value;
- const char *key = "Connected";
-
- DBG("network %p connected %d", network, connected);
-
- if (network->connected == connected)
- return -EALREADY;
-
- network->connected = connected;
-
- if (network->registered == FALSE)
- goto connected;
+ struct connman_network *network = user_data;
- signal = dbus_message_new_signal(network->element.path,
- CONNMAN_NETWORK_INTERFACE, "PropertyChanged");
- if (signal == NULL)
- return 0;
-
- dbus_message_iter_init_append(signal, &entry);
-
- dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key);
-
- dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT,
- DBUS_TYPE_BOOLEAN_AS_STRING, &value);
- dbus_message_iter_append_basic(&value, DBUS_TYPE_BOOLEAN, &connected);
- dbus_message_iter_close_container(&entry, &value);
-
- g_dbus_send_message(connection, signal);
-
-connected:
- if (connected == TRUE) {
+ if (network->connected == TRUE) {
struct connman_element *element;
enum connman_element_type type = CONNMAN_ELEMENT_TYPE_UNKNOWN;
__connman_device_decrease_connections(network->device);
}
+ return FALSE;
+}
+
+/**
+ * connman_network_set_connected:
+ * @network: network structure
+ * @connected: connected state
+ *
+ * Change connected state of network
+ */
+int connman_network_set_connected(struct connman_network *network,
+ connman_bool_t connected)
+{
+ DBusMessage *signal;
+ DBusMessageIter entry, value;
+ const char *key = "Connected";
+
+ DBG("network %p connected %d", network, connected);
+
+ if (network->connected == connected)
+ return -EALREADY;
+
+ network->connected = connected;
+
+ if (network->registered == FALSE) {
+ g_idle_add(set_connected, network);
+ return 0;
+ }
+
+ signal = dbus_message_new_signal(network->element.path,
+ CONNMAN_NETWORK_INTERFACE, "PropertyChanged");
+ if (signal == NULL)
+ return 0;
+
+ dbus_message_iter_init_append(signal, &entry);
+
+ dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key);
+
+ dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT,
+ DBUS_TYPE_BOOLEAN_AS_STRING, &value);
+ dbus_message_iter_append_basic(&value, DBUS_TYPE_BOOLEAN, &connected);
+ dbus_message_iter_close_container(&entry, &value);
+
+ g_dbus_send_message(connection, signal);
+
+ set_connected(network);
+
return 0;
}