|
Packit Service |
ca3877 |
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
|
Packit Service |
ca3877 |
/*
|
|
Packit Service |
ca3877 |
* soup-proxy-resolver-wrapper.c: SoupProxyURIResolver -> GProxyResolver wrapper
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Copyright 2013 Red Hat, Inc.
|
|
Packit Service |
ca3877 |
*/
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
#ifdef HAVE_CONFIG_H
|
|
Packit Service |
ca3877 |
#include <config.h>
|
|
Packit Service |
ca3877 |
#endif
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
#include "soup-proxy-resolver-wrapper.h"
|
|
Packit Service |
ca3877 |
#include "soup.h"
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void soup_proxy_resolver_wrapper_interface_init (GProxyResolverInterface *proxy_resolver_interface);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
G_DEFINE_TYPE_WITH_CODE (SoupProxyResolverWrapper, soup_proxy_resolver_wrapper, G_TYPE_OBJECT,
|
|
Packit Service |
ca3877 |
G_IMPLEMENT_INTERFACE (G_TYPE_PROXY_RESOLVER, soup_proxy_resolver_wrapper_interface_init);
|
|
Packit Service |
ca3877 |
)
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
soup_proxy_resolver_wrapper_init (SoupProxyResolverWrapper *resolver_wrapper)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
soup_proxy_resolver_wrapper_finalize (GObject *object)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupProxyResolverWrapper *wrapper =
|
|
Packit Service |
ca3877 |
SOUP_PROXY_RESOLVER_WRAPPER (object);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_clear_object (&wrapper->soup_resolver);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
G_OBJECT_CLASS (soup_proxy_resolver_wrapper_parent_class)->finalize (object);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static char **
|
|
Packit Service |
ca3877 |
convert_response (SoupURI *source_uri, guint status,
|
|
Packit Service |
ca3877 |
SoupURI *proxy_uri, GError **error)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
char **proxies = NULL;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
if (status == SOUP_STATUS_CANT_RESOLVE_PROXY) {
|
|
Packit Service |
ca3877 |
g_set_error (error, G_RESOLVER_ERROR, G_RESOLVER_ERROR_NOT_FOUND,
|
|
Packit Service |
ca3877 |
"%s (%s)", soup_status_get_phrase (status),
|
|
Packit Service |
ca3877 |
source_uri->host);
|
|
Packit Service |
ca3877 |
} else if (status == SOUP_STATUS_CANT_CONNECT_PROXY) {
|
|
Packit Service |
ca3877 |
g_set_error (error, G_IO_ERROR, G_IO_ERROR_CONNECTION_REFUSED,
|
|
Packit Service |
ca3877 |
"%s (%s)", soup_status_get_phrase (status),
|
|
Packit Service |
ca3877 |
source_uri->host);
|
|
Packit Service |
ca3877 |
} else {
|
|
Packit Service |
ca3877 |
g_return_val_if_fail (status == SOUP_STATUS_OK, NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
proxies = g_new (char *, 2);
|
|
Packit Service |
ca3877 |
proxies[0] = soup_uri_to_string (proxy_uri, FALSE);
|
|
Packit Service |
ca3877 |
proxies[1] = NULL;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
soup_uri_free (proxy_uri);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
return proxies;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
wrapper_lookup_async_complete (SoupProxyURIResolver *resolver,
|
|
Packit Service |
ca3877 |
guint status, SoupURI *proxy_uri,
|
|
Packit Service |
ca3877 |
gpointer user_data)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
GTask *task = user_data;
|
|
Packit Service |
ca3877 |
SoupURI *source_uri = g_task_get_task_data (task);
|
|
Packit Service |
ca3877 |
char **proxies;
|
|
Packit Service |
ca3877 |
GError *error = NULL;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
proxies = convert_response (source_uri, status, proxy_uri, &error);
|
|
Packit Service |
ca3877 |
if (error)
|
|
Packit Service |
ca3877 |
g_task_return_error (task, error);
|
|
Packit Service |
ca3877 |
else
|
|
Packit Service |
ca3877 |
g_task_return_pointer (task, proxies, (GDestroyNotify) g_strfreev);
|
|
Packit Service |
ca3877 |
g_object_unref (task);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
soup_proxy_resolver_wrapper_lookup_async (GProxyResolver *resolver,
|
|
Packit Service |
ca3877 |
const gchar *uri,
|
|
Packit Service |
ca3877 |
GCancellable *cancellable,
|
|
Packit Service |
ca3877 |
GAsyncReadyCallback callback,
|
|
Packit Service |
ca3877 |
gpointer user_data)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupProxyResolverWrapper *wrapper =
|
|
Packit Service |
ca3877 |
SOUP_PROXY_RESOLVER_WRAPPER (resolver);
|
|
Packit Service |
ca3877 |
GTask *task;
|
|
Packit Service |
ca3877 |
SoupURI *source_uri;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
task = g_task_new (resolver, cancellable, callback, user_data);
|
|
Packit Service |
ca3877 |
source_uri = soup_uri_new (uri);
|
|
Packit Service |
ca3877 |
g_task_set_task_data (task, source_uri, (GDestroyNotify) soup_uri_free);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
|
|
Packit Service |
ca3877 |
soup_proxy_uri_resolver_get_proxy_uri_async (wrapper->soup_resolver,
|
|
Packit Service |
ca3877 |
source_uri,
|
|
Packit Service |
ca3877 |
g_main_context_get_thread_default (),
|
|
Packit Service |
ca3877 |
cancellable,
|
|
Packit Service |
ca3877 |
wrapper_lookup_async_complete,
|
|
Packit Service |
ca3877 |
task);
|
|
Packit Service |
ca3877 |
G_GNUC_END_IGNORE_DEPRECATIONS;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static char **
|
|
Packit Service |
ca3877 |
soup_proxy_resolver_wrapper_lookup_finish (GProxyResolver *resolver,
|
|
Packit Service |
ca3877 |
GAsyncResult *result,
|
|
Packit Service |
ca3877 |
GError **error)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
return g_task_propagate_pointer (G_TASK (result), error);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static gchar **
|
|
Packit Service |
ca3877 |
soup_proxy_resolver_wrapper_lookup (GProxyResolver *resolver,
|
|
Packit Service |
ca3877 |
const gchar *uri,
|
|
Packit Service |
ca3877 |
GCancellable *cancellable,
|
|
Packit Service |
ca3877 |
GError **error)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupProxyResolverWrapper *wrapper =
|
|
Packit Service |
ca3877 |
SOUP_PROXY_RESOLVER_WRAPPER (resolver);
|
|
Packit Service |
ca3877 |
SoupURI *source_uri, *proxy_uri;
|
|
Packit Service |
ca3877 |
guint status;
|
|
Packit Service |
ca3877 |
gchar **proxies;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
source_uri = soup_uri_new (uri);
|
|
Packit Service |
ca3877 |
G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
|
|
Packit Service |
ca3877 |
status = soup_proxy_uri_resolver_get_proxy_uri_sync (wrapper->soup_resolver,
|
|
Packit Service |
ca3877 |
source_uri,
|
|
Packit Service |
ca3877 |
cancellable,
|
|
Packit Service |
ca3877 |
&proxy_uri);
|
|
Packit Service |
ca3877 |
G_GNUC_END_IGNORE_DEPRECATIONS;
|
|
Packit Service |
ca3877 |
proxies = convert_response (source_uri, status, proxy_uri, error);
|
|
Packit Service |
ca3877 |
soup_uri_free (source_uri);
|
|
Packit Service |
ca3877 |
return proxies;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
soup_proxy_resolver_wrapper_class_init (SoupProxyResolverWrapperClass *static_class)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
GObjectClass *object_class = G_OBJECT_CLASS (static_class);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
object_class->finalize = soup_proxy_resolver_wrapper_finalize;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
soup_proxy_resolver_wrapper_interface_init (GProxyResolverInterface *proxy_resolver_interface)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
proxy_resolver_interface->lookup =
|
|
Packit Service |
ca3877 |
soup_proxy_resolver_wrapper_lookup;
|
|
Packit Service |
ca3877 |
proxy_resolver_interface->lookup_async =
|
|
Packit Service |
ca3877 |
soup_proxy_resolver_wrapper_lookup_async;
|
|
Packit Service |
ca3877 |
proxy_resolver_interface->lookup_finish =
|
|
Packit Service |
ca3877 |
soup_proxy_resolver_wrapper_lookup_finish;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
GProxyResolver *
|
|
Packit Service |
ca3877 |
soup_proxy_resolver_wrapper_new (SoupProxyURIResolver *soup_resolver)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupProxyResolverWrapper *wrapper;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
wrapper = g_object_new (SOUP_TYPE_PROXY_RESOLVER_WRAPPER, NULL);
|
|
Packit Service |
ca3877 |
wrapper->soup_resolver = g_object_ref (soup_resolver);
|
|
Packit Service |
ca3877 |
return (GProxyResolver *)wrapper;
|
|
Packit Service |
ca3877 |
}
|