static void
resolved_proxy_uri (SoupProxyURIResolver *proxy_resolver,
		    guint status, SoupURI *proxy_uri, gpointer user_data)
{
	SoupMessageQueueItem *item = user_data;
	SoupSession *session = item->session;

	if (item_failed (item, status))
		return;

	if (proxy_uri) {
		SoupAddress *proxy_addr;

		item->state = SOUP_MESSAGE_RESOLVING_PROXY_ADDRESS;

		item->proxy_uri = soup_uri_copy (proxy_uri);
		proxy_addr = soup_address_new (proxy_uri->host,
					       proxy_uri->port);
		soup_address_resolve_async (proxy_addr,
					    soup_session_get_async_context (session),
					    item->cancellable,
					    resolved_proxy_addr, item);
		g_object_unref (proxy_addr);
		return;
	}

	item->state = SOUP_MESSAGE_AWAITING_CONNECTION;
	soup_message_queue_item_unref (item);

	/* If we got here we know session still exists */
	run_queue ((SoupSessionAsync *)session);
}
Exemple #2
0
int
main (int argc, char **argv)
{
    SoupAddress *addr;
    int i;

    if (argc < 2)
        usage ();

    g_thread_init (NULL);
    g_type_init ();

    for (i = 1; i < argc; i++) {
        addr = soup_address_new (argv[i], 0);
        if (!addr) {
            fprintf (stderr, "Could not parse address %s\n", argv[1]);
            exit (1);
        }

        soup_address_resolve_async (addr, NULL, NULL,
                                    resolve_callback, NULL);
        nlookups++;
    }

    loop = g_main_loop_new (NULL, TRUE);
    g_main_loop_run (loop);
    g_main_loop_unref (loop);

    return 0;
}
static void
seahorse_ldap_source_connect_async (SeahorseLDAPSource *source,
                                    GCancellable *cancellable,
                                    GAsyncReadyCallback callback,
                                    gpointer user_data)
{
	GSimpleAsyncResult *res;
	source_connect_closure *closure;
	gchar *server = NULL;
	gchar *pos;
#ifdef WITH_SOUP
	SoupAddress *address;
#endif

	res = g_simple_async_result_new (G_OBJECT (source), callback, user_data,
	                                 seahorse_ldap_source_connect_async);
	closure = g_new0 (source_connect_closure, 1);
	closure->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
	g_simple_async_result_set_op_res_gpointer (res, closure, source_connect_free);

	g_object_get (source, "key-server", &server, NULL);
	g_return_if_fail (server && server[0]);
	if ((pos = strchr (server, ':')) != NULL)
		*pos = 0;

	seahorse_progress_prep_and_begin (cancellable, res, NULL);

	/* If we have libsoup, try and resolve asynchronously */
#ifdef WITH_SOUP
	address = soup_address_new (server, LDAP_PORT);
	seahorse_progress_update (cancellable, res, _("Resolving server address: %s"), server);

	soup_address_resolve_async (address, NULL, cancellable,
	                            on_address_resolved_complete,
	                            g_object_ref (res));
	g_object_unref (address);

#else /* !WITH_SOUP */

	once_resolved_start_connect (source, res, server);

#endif

	g_free (server);
	g_object_unref (res);
}
Exemple #4
0
static void
soup_address_address_enumerator_next_async (GSocketAddressEnumerator  *enumerator,
					    GCancellable              *cancellable,
					    GAsyncReadyCallback        callback,
					    gpointer                   user_data)
{
	SoupAddressAddressEnumerator *addr_enum =
		SOUP_ADDRESS_ADDRESS_ENUMERATOR (enumerator);
	SoupAddressPrivate *priv = SOUP_ADDRESS_GET_PRIVATE (addr_enum->addr);
	GTask *task;

	task = g_task_new (enumerator, cancellable, callback, user_data);
	if (!priv->sockaddr) {
		soup_address_resolve_async (addr_enum->addr,
					    g_main_context_get_thread_default (),
					    cancellable, got_addresses, task);
	} else {
		g_task_return_pointer (task, next_address (addr_enum), g_object_unref);
		g_object_unref (task);
	}
}
Exemple #5
0
static void
soup_address_address_enumerator_next_async (GSocketAddressEnumerator  *enumerator,
					    GCancellable              *cancellable,
					    GAsyncReadyCallback        callback,
					    gpointer                   user_data)
{
	SoupAddressAddressEnumerator *addr_enum =
		SOUP_ADDRESS_ADDRESS_ENUMERATOR (enumerator);
	SoupAddressPrivate *priv = SOUP_ADDRESS_GET_PRIVATE (addr_enum->addr);
	GSimpleAsyncResult *simple;

	simple = g_simple_async_result_new (G_OBJECT (enumerator),
					    callback, user_data,
					    soup_address_address_enumerator_next_async);

	if (!priv->sockaddr) {
		soup_address_resolve_async (addr_enum->addr, NULL, cancellable,
					    got_addresses, simple);
	} else {
		g_simple_async_result_complete_in_idle (simple);
		g_object_unref (simple);
	}
}
Exemple #6
0
//this will insert proxy in the session
//and queue the message to be sent
void
proxify_session_async(EProxy *proxy, STNET *stnet)
{
	SoupURI *proxy_uri = NULL, *su;
#if EVOLUTION_VERSION < 30304
	gint ptype = gconf_client_get_int (
			rss_gconf, KEY_GCONF_EVO_PROXY_TYPE, NULL);
#else
	GSettings *settings = g_settings_new(CONF_SCHEMA_EVO_NETWORK);
	gint ptype = g_settings_get_int (
			settings, CONF_EVO_PROXY_TYPE);
#endif

	switch (ptype) {
#ifndef HAVE_LIBSOUP_GNOME
	case 0:
#endif
	case 2:
		su = soup_uri_new (stnet->url);
		stnet->host = su->host;
		if (su) {
			if (su->scheme == SOUP_URI_SCHEME_HTTPS) {
				if (rss_ep_need_proxy_https (proxy, su->host)) {
#if (DATASERVER_VERSION >=2026000)
					proxy_uri = e_proxy_peek_uri_for (proxy, stnet->url);
#else
					g_print("WARN: e_proxy_peek_uri_for() requires evolution-data-server 2.26\n");
					soup_uri_free(su);
					return;
#endif
					if (proxy_uri) {
						d("proxified %s with %s:%d\n", stnet->url, proxy_uri->host, proxy_uri->port);
					}
				} else {
					d("no PROXY-%s\n", stnet->url);
				}
				g_object_set (
					G_OBJECT (stnet->ss),
					SOUP_SESSION_PROXY_URI,
					proxy_uri, NULL);
				soup_uri_free(su);
				goto out;
			} else {
				stnet->addr = soup_address_new (su->host, 0);
				soup_uri_free(su);
				soup_address_resolve_async (stnet->addr, NULL, NULL,
					rss_resolve_callback, stnet);
				return;
			}
		}
		break;

#ifdef HAVE_LIBSOUP_GNOME
	case 0:
		soup_session_add_feature_by_type (
			stnet->ss, SOUP_TYPE_PROXY_RESOLVER_DEFAULT);
		break;
#endif
	}

out:	stnet->callback(stnet->data);
	//free stnet
}