Beispiel #1
0
static gboolean call_disconnect(gpointer user_data)
{
	struct service_entry *entry = user_data;
	struct connman_service *service = entry->service;

	/*
	 * TODO: We should mark this entry as pending work. In case
	 * disconnect fails we just unassign this session from the
	 * service and can't do anything later on it
	 */
	DBG("disconnect service %p", service);
	__connman_service_disconnect(service);

	return FALSE;
}
Beispiel #2
0
static void cleanup_session(gpointer user_data)
{
	struct connman_session *session = user_data;
	struct session_info *info = session->info;

	DBG("remove %s", session->session_path);

	g_slist_free(session->user_allowed_bearers);
	g_hash_table_destroy(session->service_hash);
	g_sequence_free(session->service_list);

	if (info->entry != NULL &&
			info->entry->reason == CONNMAN_SESSION_REASON_CONNECT) {
		__connman_service_disconnect(info->entry->service);
	}

	free_session(session);
}
Beispiel #3
0
int connman_device_disconnect_service(struct connman_device *device)
{
	DBG("device %p", device);

	device->reconnect = false;

	if (device->network) {
		struct connman_service *service =
			connman_service_lookup_from_network(device->network);

		if (service)
			__connman_service_disconnect(service);
		else
			connman_network_set_connected(device->network, false);
	}

	return 0;
}
Beispiel #4
0
int __connman_device_disable(struct connman_device *device)
{
	int err;

	DBG("device %p", device);

	if (!device->driver || !device->driver->disable)
		return -EOPNOTSUPP;

	/* Ongoing power enable request */
	if (device->powered_pending == PENDING_ENABLE)
		return -EBUSY;

	if (device->powered_pending == PENDING_DISABLE)
		return -EALREADY;

	if (device->powered_pending == PENDING_NONE && device->powered == FALSE)
		return -EALREADY;

	device->powered_pending = PENDING_DISABLE;
	device->reconnect = FALSE;

	if (device->network) {
		struct connman_service *service =
			connman_service_lookup_from_network(device->network);

		if (service != NULL)
			__connman_service_disconnect(service);
		else
			connman_network_set_connected(device->network, FALSE);
	}

	err = device->driver->disable(device);
	if (err == 0 || err == -EALREADY) {
		connman_device_set_powered(device, FALSE);
		goto done;
	}

	if (err == -EINPROGRESS)
		device->pending_timeout = g_timeout_add_seconds(4,
					device_pending_reset, device);
done:
	return err;
}
Beispiel #5
0
int connman_session_disconnect(struct connman_service *service)
{
    DBG("service %p", service);

    return __connman_service_disconnect(service);
}