Beispiel #1
0
static int vpn_disconnect(struct connman_provider *provider)
{
    struct vpn_data *data = connman_provider_get_data(provider);
    struct vpn_driver_data *vpn_driver_data;
    const char *name;

    DBG("disconnect provider %p:", provider);

    if (data == NULL)
        return 0;

    name = connman_provider_get_driver_name(provider);
    if (name == NULL)
        return 0;

    vpn_driver_data = g_hash_table_lookup(driver_hash, name);
    if (vpn_driver_data->vpn_driver->disconnect)
        vpn_driver_data->vpn_driver->disconnect();

    if (data->watch != 0)
        connman_rtnl_remove_watch(data->watch);

    data->watch = 0;
    data->state = VPN_STATE_DISCONNECT;
    connman_task_stop(data->task);

    return 0;
}
Beispiel #2
0
static void ethernet_remove(struct connman_device *device)
{
	struct ethernet_data *ethernet = connman_device_get_data(device);

	_DBG_ETHERNET("device %p", device);

	connman_device_set_data(device, NULL);

	connman_rtnl_remove_watch(ethernet->watch);

	g_free(ethernet);
}
Beispiel #3
0
static void mbm_remove(struct connman_device *device)
{
	struct mbm_data *data = connman_device_get_data(device);

	_DBG_MBM("device %p", device);

	connman_device_set_data(device, NULL);

	connman_rtnl_remove_watch(data->watch);

	g_free(data);
}
Beispiel #4
0
static int vpn_remove(struct connman_provider *provider)
{
    struct vpn_data *data;

    data = connman_provider_get_data(provider);
    if (data == NULL)
        return 0;

    if (data->watch != 0)
        connman_rtnl_remove_watch(data->watch);
    data->watch = 0;
    connman_task_stop(data->task);

    g_usleep(G_USEC_PER_SEC);
    stop_vpn(provider);
    return 0;
}
Beispiel #5
0
void vpn_died(struct connman_task *task, int exit_code, void *user_data)
{
    struct connman_provider *provider = user_data;
    struct vpn_data *data = connman_provider_get_data(provider);
    int state = VPN_STATE_FAILURE;
    enum connman_provider_error ret;

    DBG("provider %p data %p", provider, data);

    if (data == NULL)
        goto vpn_exit;

    state = data->state;

    stop_vpn(provider);
    connman_provider_set_data(provider, NULL);
    connman_rtnl_remove_watch(data->watch);

vpn_exit:
    if (state != VPN_STATE_READY && state != VPN_STATE_DISCONNECT) {
        const char *name;
        struct vpn_driver_data *vpn_data = NULL;

        name = connman_provider_get_driver_name(provider);
        if (name != NULL)
            vpn_data = g_hash_table_lookup(driver_hash, name);

        if (vpn_data != NULL &&
                vpn_data->vpn_driver->error_code != NULL)
            ret = vpn_data->vpn_driver->error_code(exit_code);
        else
            ret = CONNMAN_PROVIDER_ERROR_UNKNOWN;

        connman_provider_indicate_error(provider, ret);
    } else
        connman_provider_set_state(provider,
                                   CONNMAN_PROVIDER_STATE_IDLE);

    connman_provider_set_index(provider, -1);
    connman_provider_unref(data->provider);

    g_free(data->if_name);
    g_free(data);

    connman_task_destroy(task);
}
Beispiel #6
0
static void remove_private_network(gpointer user_data)
{
	struct connman_private_network *pn = user_data;

	disable_nat(default_interface);
	connman_rtnl_remove_watch(pn->iface_watch);

	if (pn->watch > 0) {
		g_dbus_remove_watch(connection, pn->watch);
		pn->watch = 0;
	}

	close(pn->fd);

	g_free(pn->interface);
	g_free(pn->owner);
	g_free(pn->path);
	g_free(pn);
}
static void remove_private_network(gpointer user_data)
{
	struct connman_private_network *pn = user_data;

	__connman_nat_disable(BRIDGE_NAME);
	connman_rtnl_remove_watch(pn->iface_watch);
	__connman_ippool_unref(pn->pool);

	if (pn->watch > 0) {
		g_dbus_remove_watch(connection, pn->watch);
		pn->watch = 0;
	}

	close(pn->fd);

	g_free(pn->interface);
	g_free(pn->owner);
	g_free(pn->path);
	g_free(pn->primary_dns);
	g_free(pn->secondary_dns);
	g_free(pn);
}
Beispiel #8
0
static void wifi_remove(struct connman_device *device)
{
	struct wifi_data *wifi = connman_device_get_data(device);

	DBG("device %p wifi %p", device, wifi);

	if (wifi == NULL)
		return;

	iface_list = g_list_remove(iface_list, wifi);

	remove_networks(device, wifi);

	connman_device_set_powered(device, FALSE);
	connman_device_set_data(device, NULL);
	connman_device_unref(wifi->device);
	connman_rtnl_remove_watch(wifi->watch);

	g_supplicant_interface_set_data(wifi->interface, NULL);

	g_free(wifi->autoscan);
	g_free(wifi->identifier);
	g_free(wifi);
}