summaryrefslogtreecommitdiff
path: root/libsoup/soup-session-sync.c
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2009-06-06 18:57:51 -0400
committerDan Winship <danw@gnome.org>2009-06-06 22:58:53 -0400
commite636754a29691d96e89297c2d7c31d829d1de878 (patch)
tree4a32640e9251f4e44521abe6786362dc39a26e34 /libsoup/soup-session-sync.c
parent83da293b3f2038d969e83c4227db817046092d2d (diff)
downloadlibsoup-e636754a29691d96e89297c2d7c31d829d1de878.tar.gz
Implement SoupProxyURIResolver, to replace SoupProxyResolver
Simplifies implementations, allows for non-http proxy resolution, and allows authentication information to be passed. http://bugzilla.gnome.org/show_bug.cgi?id=580051
Diffstat (limited to 'libsoup/soup-session-sync.c')
-rw-r--r--libsoup/soup-session-sync.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/libsoup/soup-session-sync.c b/libsoup/soup-session-sync.c
index d084b00b..8c2e56ba 100644
--- a/libsoup/soup-session-sync.c
+++ b/libsoup/soup-session-sync.c
@@ -14,7 +14,9 @@
#include "soup-session-private.h"
#include "soup-address.h"
#include "soup-message-private.h"
+#include "soup-proxy-uri-resolver.h"
#include "soup-misc.h"
+#include "soup-uri.h"
/**
* SECTION:soup-session-sync
@@ -162,19 +164,34 @@ wait_for_connection (SoupMessageQueueItem *item)
SoupMessage *msg = item->msg;
SoupSessionSyncPrivate *priv = SOUP_SESSION_SYNC_GET_PRIVATE (session);
gboolean try_pruning = FALSE;
- SoupProxyResolver *proxy_resolver;
+ SoupProxyURIResolver *proxy_resolver;
SoupAddress *tunnel_addr;
SoupConnection *conn;
guint status;
proxy_resolver = soup_session_get_proxy_resolver (session);
if (proxy_resolver && !item->resolved_proxy_addr) {
- status = soup_proxy_resolver_get_proxy_sync (
- proxy_resolver, msg, NULL, &item->proxy_addr);
+ status = soup_proxy_uri_resolver_get_proxy_uri_sync (
+ proxy_resolver, soup_message_get_uri (msg),
+ item->cancellable, &item->proxy_uri);
if (!SOUP_STATUS_IS_SUCCESSFUL (status)) {
- soup_session_cancel_message (session, msg, status);
+ if (status != SOUP_STATUS_CANCELLED)
+ soup_session_cancel_message (session, msg, status);
return NULL;
}
+
+ if (item->proxy_uri) {
+ item->proxy_addr = soup_address_new (
+ item->proxy_uri->host, item->proxy_uri->port);
+ status = soup_address_resolve_sync (item->proxy_addr,
+ item->cancellable);
+ if (!SOUP_STATUS_IS_SUCCESSFUL (status)) {
+ if (status != SOUP_STATUS_CANCELLED)
+ soup_session_cancel_message (session, msg, status);
+ return NULL;
+ }
+ }
+
item->resolved_proxy_addr = TRUE;
}