summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2017-07-12 20:01:03 +0530
committerDan Winship <danw@gnome.org>2017-08-07 13:34:26 -0400
commitb2f927575ea0b0041289e0c19f53a33e55760fd3 (patch)
tree3a343281775bb5e50b1e11f1ccfff0c9a15cc031
parent3253fd38fdbe99ea9cc5b08255eb42b6f2012784 (diff)
downloadlibsoup-b2f927575ea0b0041289e0c19f53a33e55760fd3.tar.gz
Always use "wss" as an alias for "https"
Also fix a bunch of places that were comparing uri->scheme directly with SOUP_URI_SCHEME_HTTPS instead of using the private function soup_uri_is_https(). https://bugzilla.gnome.org/show_bug.cgi?id=784786
-rw-r--r--libsoup/soup-auth-negotiate.c2
-rw-r--r--libsoup/soup-connection.c18
-rw-r--r--libsoup/soup-connection.h1
-rw-r--r--libsoup/soup-cookie.c2
-rw-r--r--libsoup/soup-session.c3
-rw-r--r--libsoup/soup-uri.c12
6 files changed, 27 insertions, 11 deletions
diff --git a/libsoup/soup-auth-negotiate.c b/libsoup/soup-auth-negotiate.c
index 5a49119b..1fdf142d 100644
--- a/libsoup/soup-auth-negotiate.c
+++ b/libsoup/soup-auth-negotiate.c
@@ -454,7 +454,7 @@ check_auth_trusted_uri (SoupConnectionAuth *auth, SoupMessage *msg)
/* If no trusted URIs are set, we allow all HTTPS URIs */
if (!trusted_uris)
- return msg_uri->scheme == SOUP_URI_SCHEME_HTTPS;
+ return soup_uri_is_https (msg_uri, NULL);
matched = g_slist_find_custom (trusted_uris,
msg_uri,
diff --git a/libsoup/soup-connection.c b/libsoup/soup-connection.c
index 5403704c..5fb4d78c 100644
--- a/libsoup/soup-connection.c
+++ b/libsoup/soup-connection.c
@@ -13,6 +13,7 @@
#include "soup.h"
#include "soup-message-queue.h"
#include "soup-socket-private.h"
+#include "soup-misc-private.h"
typedef struct {
SoupSocket *socket;
@@ -44,6 +45,7 @@ enum {
PROP_REMOTE_URI,
PROP_SOCKET_PROPERTIES,
PROP_STATE,
+ PROP_SSL,
LAST_PROP
};
@@ -98,10 +100,6 @@ soup_connection_set_property (GObject *object, guint prop_id,
switch (prop_id) {
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_SOCKET_PROPERTIES:
priv->socket_props = g_value_dup_boxed (value);
@@ -109,6 +107,9 @@ soup_connection_set_property (GObject *object, guint prop_id,
case PROP_STATE:
soup_connection_set_state (SOUP_CONNECTION (object), g_value_get_uint (value));
break;
+ case PROP_SSL:
+ priv->ssl = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -131,6 +132,9 @@ soup_connection_get_property (GObject *object, guint prop_id,
case PROP_STATE:
g_value_set_enum (value, priv->state);
break;
+ case PROP_SSL:
+ g_value_set_boolean (value, priv->ssl);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -190,6 +194,12 @@ soup_connection_class_init (SoupConnectionClass *connection_class)
"Current state of connection",
SOUP_TYPE_CONNECTION_STATE, SOUP_CONNECTION_NEW,
G_PARAM_READWRITE));
+ g_object_class_install_property (
+ object_class, PROP_SSL,
+ g_param_spec_boolean (SOUP_CONNECTION_SSL,
+ "Connection uses TLS",
+ "Whether the connection should use TLS",
+ FALSE, G_PARAM_READWRITE));
}
static void
diff --git a/libsoup/soup-connection.h b/libsoup/soup-connection.h
index 3da217f1..fe817de4 100644
--- a/libsoup/soup-connection.h
+++ b/libsoup/soup-connection.h
@@ -38,6 +38,7 @@ GType soup_connection_get_type (void);
#define SOUP_CONNECTION_REMOTE_URI "remote-uri"
#define SOUP_CONNECTION_SOCKET_PROPERTIES "socket-properties"
#define SOUP_CONNECTION_STATE "state"
+#define SOUP_CONNECTION_SSL "ssl"
void soup_connection_connect_async (SoupConnection *conn,
GCancellable *cancellable,
diff --git a/libsoup/soup-cookie.c b/libsoup/soup-cookie.c
index cbb991a4..d97b23f5 100644
--- a/libsoup/soup-cookie.c
+++ b/libsoup/soup-cookie.c
@@ -1012,7 +1012,7 @@ soup_cookie_applies_to_uri (SoupCookie *cookie, SoupURI *uri)
{
int plen;
- if (cookie->secure && uri->scheme != SOUP_URI_SCHEME_HTTPS)
+ if (cookie->secure && !soup_uri_is_https (uri, NULL))
return FALSE;
if (cookie->expires && soup_date_is_past (cookie->expires))
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
index f7aef68e..a0104318 100644
--- a/libsoup/soup-session.c
+++ b/libsoup/soup-session.c
@@ -1790,7 +1790,7 @@ get_connection_for_host (SoupSession *session,
guint num_pending = 0;
if (priv->disposed)
- return FALSE;
+ return NULL;
if (item->conn) {
g_return_val_if_fail (soup_connection_get_state (item->conn) != SOUP_CONNECTION_DISCONNECTED, FALSE);
@@ -1839,6 +1839,7 @@ get_connection_for_host (SoupSession *session,
ensure_socket_props (session);
conn = g_object_new (SOUP_TYPE_CONNECTION,
SOUP_CONNECTION_REMOTE_URI, host->uri,
+ SOUP_CONNECTION_SSL, soup_uri_is_https (host->uri, priv->https_aliases),
SOUP_CONNECTION_SOCKET_PROPERTIES, priv->socket_props,
NULL);
diff --git a/libsoup/soup-uri.c b/libsoup/soup-uri.c
index 32ade292..be778d6c 100644
--- a/libsoup/soup-uri.c
+++ b/libsoup/soup-uri.c
@@ -1334,9 +1334,11 @@ soup_uri_is_http (SoupURI *uri, char **aliases)
{
int i;
- if (uri->scheme == SOUP_URI_SCHEME_HTTP)
+ if (uri->scheme == SOUP_URI_SCHEME_HTTP ||
+ uri->scheme == SOUP_URI_SCHEME_WS)
return TRUE;
- else if (uri->scheme == SOUP_URI_SCHEME_HTTPS)
+ else if (uri->scheme == SOUP_URI_SCHEME_HTTPS ||
+ uri->scheme == SOUP_URI_SCHEME_WSS)
return FALSE;
else if (!aliases)
return FALSE;
@@ -1357,9 +1359,11 @@ soup_uri_is_https (SoupURI *uri, char **aliases)
{
int i;
- if (uri->scheme == SOUP_URI_SCHEME_HTTPS)
+ if (uri->scheme == SOUP_URI_SCHEME_HTTPS ||
+ uri->scheme == SOUP_URI_SCHEME_WSS)
return TRUE;
- else if (uri->scheme == SOUP_URI_SCHEME_HTTP)
+ else if (uri->scheme == SOUP_URI_SCHEME_HTTP ||
+ uri->scheme == SOUP_URI_SCHEME_WS)
return FALSE;
else if (!aliases)
return FALSE;