static void cancel_host_resolv(struct connection_data *data) { if (data->resolv_id != 0) g_resolv_cancel_lookup(data->resolv, data->resolv_id); data->resolv_id = 0; g_resolv_unref(data->resolv); data->resolv = NULL; }
static void free_session(struct web_session *session) { GWeb *web; if (session == NULL) return; g_free(session->request); web = session->web; if (session->resolv_action > 0) g_resolv_cancel_lookup(web->resolv, session->resolv_action); if (session->transport_watch > 0) g_source_remove(session->transport_watch); if (session->send_watch > 0) g_source_remove(session->send_watch); if (session->transport_channel != NULL) g_io_channel_unref(session->transport_channel); g_free(session->result.last_key); if (session->result.headers != NULL) g_hash_table_destroy(session->result.headers); if (session->send_buffer != NULL) g_string_free(session->send_buffer, TRUE); if (session->current_header != NULL) g_string_free(session->current_header, TRUE); g_free(session->receive_buffer); g_free(session->content_type); g_free(session->host); g_free(session->address); if (session->addr != NULL) freeaddrinfo(session->addr); g_free(session); }
/* * This function must be called everytime the default service changes, the * service timeserver(s) or gatway changes or the global timeserver(s) changes. */ int __connman_timeserver_sync(struct connman_service *default_service) { struct connman_service *service; if (default_service) service = default_service; else service = __connman_service_get_default(); if (!service) return -EINVAL; if (!resolv) return 0; /* * Before we start creating the new timeserver list we must stop * any ongoing ntp query and server resolution. */ __connman_ntp_stop(); ts_recheck_disable(); if (resolv_id > 0) g_resolv_cancel_lookup(resolv, resolv_id); g_slist_free_full(ts_list, g_free); ts_list = __connman_timeserver_get_all(service); __connman_service_timeserver_changed(service, ts_list); if (!ts_list) { DBG("No timeservers set."); return 0; } ts_recheck_enable(); __connman_timeserver_sync_next(); return 0; }
static int timeserver_start(struct connman_service *service) { char **nameservers; int i; DBG("service %p", service); i = __connman_service_get_index(service); if (i < 0) return -EINVAL; nameservers = connman_service_get_nameservers(service); if (!nameservers) return -EINVAL; /* Stop an already ongoing resolution, if there is one */ if (resolv && resolv_id > 0) g_resolv_cancel_lookup(resolv, resolv_id); /* get rid of the old resolver */ if (resolv) { g_resolv_unref(resolv); resolv = NULL; } resolv = g_resolv_new(i); if (!resolv) { g_strfreev(nameservers); return -ENOMEM; } if (getenv("CONNMAN_RESOLV_DEBUG")) g_resolv_set_debug(resolv, resolv_debug, "RESOLV"); for (i = 0; nameservers[i]; i++) g_resolv_add_nameserver(resolv, nameservers[i], 53, 0); g_strfreev(nameservers); return __connman_timeserver_sync(service); }