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; }
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); }
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); }
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; }
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); }
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); }
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); }