X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fnetwork.c;h=8cda5586a7d6418630a47ff122994aafc3da8bc0;hb=3e93352f586db3de0c40cc554e2e74b7d40416ee;hp=e0f0fa81224c47c44b16d2f3c2fdf881150c8679;hpb=a26a66263673f9c91f71a4e915bd25f9d3e0afc0;p=connman diff --git a/src/network.c b/src/network.c index e0f0fa8..8cda558 100644 --- a/src/network.c +++ b/src/network.c @@ -636,48 +636,11 @@ connman_bool_t connman_network_get_available(struct connman_network *network) 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; @@ -715,6 +678,53 @@ connected: __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; }