summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2014-03-15 09:23:32 -0400
committerDan Winship <danw@gnome.org>2014-05-01 14:17:40 -0400
commitf29b2959add37a7e24556553dd79d6eababee57f (patch)
tree2e0b1a06d5f6651663db8592ce74c560bf74b873
parent149271b72c1fd7233d34f35b303c3e5b6985bbe1 (diff)
downloadlibsoup-f29b2959add37a7e24556553dd79d6eababee57f.tar.gz
soup-session, soup-connection: update handling of "ssl" flag
Store all SoupSessionHosts with a URI using either "http" or "https" as the scheme. Then we don't need to explicitly tell SoupConnection whether the connection is SSL or not, since it can figure it out from the URI.
-rw-r--r--libsoup/soup-connection.c18
-rw-r--r--libsoup/soup-connection.h1
-rw-r--r--libsoup/soup-session.c15
3 files changed, 16 insertions, 18 deletions
diff --git a/libsoup/soup-connection.c b/libsoup/soup-connection.c
index 883bb5d0..69610385 100644
--- a/libsoup/soup-connection.c
+++ b/libsoup/soup-connection.c
@@ -51,7 +51,6 @@ enum {
PROP_LOCAL_ADDRESS,
PROP_REMOTE_URI,
PROP_PROXY_RESOLVER,
- PROP_SSL,
PROP_SSL_CREDS,
PROP_SSL_STRICT,
PROP_SSL_FALLBACK,
@@ -119,13 +118,14 @@ soup_connection_set_property (GObject *object, guint prop_id,
break;
case PROP_REMOTE_URI:
priv->remote_uri = g_value_dup_boxed (value);
+ if (priv->remote_uri)
+ priv->ssl = (priv->remote_uri->scheme == SOUP_URI_SCHEME_HTTPS);
+ else
+ priv->ssl = FALSE;
break;
case PROP_PROXY_RESOLVER:
priv->proxy_resolver = g_value_dup_object (value);
break;
- case PROP_SSL:
- priv->ssl = g_value_get_boolean (value);
- break;
case PROP_SSL_CREDS:
if (priv->tlsdb)
g_object_unref (priv->tlsdb);
@@ -173,9 +173,6 @@ soup_connection_get_property (GObject *object, guint prop_id,
case PROP_REMOTE_URI:
g_value_set_boxed (value, priv->remote_uri);
break;
- case PROP_SSL:
- g_value_set_boolean (value, priv->ssl);
- break;
case PROP_SSL_CREDS:
g_value_set_object (value, priv->tlsdb);
break;
@@ -262,13 +259,6 @@ soup_connection_class_init (SoupConnectionClass *connection_class)
G_TYPE_PROXY_RESOLVER,
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (
- object_class, PROP_SSL,
- g_param_spec_boolean (SOUP_CONNECTION_SSL,
- "SSL",
- "Whether this is an SSL connection",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (
object_class, PROP_SSL_CREDS,
g_param_spec_object (SOUP_CONNECTION_SSL_CREDENTIALS,
"SSL credentials",
diff --git a/libsoup/soup-connection.h b/libsoup/soup-connection.h
index b70a8a36..454432dd 100644
--- a/libsoup/soup-connection.h
+++ b/libsoup/soup-connection.h
@@ -38,7 +38,6 @@ GType soup_connection_get_type (void);
#define SOUP_CONNECTION_LOCAL_ADDRESS "local-address"
#define SOUP_CONNECTION_REMOTE_URI "remote-uri"
#define SOUP_CONNECTION_PROXY_RESOLVER "proxy-resolver"
-#define SOUP_CONNECTION_SSL "ssl"
#define SOUP_CONNECTION_SSL_CREDENTIALS "ssl-creds"
#define SOUP_CONNECTION_SSL_STRICT "ssl-strict"
#define SOUP_CONNECTION_SSL_FALLBACK "ssl-fallback"
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
index 132554d6..96bf4b62 100644
--- a/libsoup/soup-session.c
+++ b/libsoup/soup-session.c
@@ -959,17 +959,27 @@ get_host_for_uri (SoupSession *session, SoupURI *uri)
{
SoupSessionPrivate *priv = SOUP_SESSION_GET_PRIVATE (session);
SoupSessionHost *host;
+ gboolean https;
+ SoupURI *uri_tmp = NULL;
- if (soup_uri_is_https (uri, priv->https_aliases))
+ https = soup_uri_is_https (uri, priv->https_aliases);
+ if (https)
host = g_hash_table_lookup (priv->https_hosts, uri);
else
host = g_hash_table_lookup (priv->http_hosts, uri);
if (host)
return host;
+ if (uri->scheme != SOUP_URI_SCHEME_HTTP &&
+ uri->scheme != SOUP_URI_SCHEME_HTTPS) {
+ uri = uri_tmp = soup_uri_copy (uri);
+ uri->scheme = https ? SOUP_URI_SCHEME_HTTPS : SOUP_URI_SCHEME_HTTP;
+ }
host = soup_session_host_new (session, uri);
+ if (uri_tmp)
+ soup_uri_free (uri_tmp);
- if (soup_uri_is_https (uri, priv->https_aliases))
+ if (https)
g_hash_table_insert (priv->https_hosts, host->uri, host);
else
g_hash_table_insert (priv->http_hosts, host->uri, host);
@@ -1774,7 +1784,6 @@ get_connection_for_host (SoupSession *session,
SOUP_TYPE_CONNECTION,
SOUP_CONNECTION_REMOTE_URI, host->uri,
SOUP_CONNECTION_PROXY_RESOLVER, proxy_resolver,
- SOUP_CONNECTION_SSL, soup_uri_is_https (soup_message_get_uri (item->msg), priv->https_aliases),
SOUP_CONNECTION_SSL_CREDENTIALS, tlsdb,
SOUP_CONNECTION_SSL_STRICT, priv->ssl_strict && (tlsdb != NULL || SOUP_IS_PLAIN_SESSION (session)),
SOUP_CONNECTION_ASYNC_CONTEXT, priv->async_context,