summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garcia Campos <cgarcia@igalia.com>2020-01-28 11:06:29 +0100
committerClaudio Saavedra <csaavedra@igalia.com>2020-12-11 17:58:11 +0200
commit3ca7a7501007d9a0bd693e0f9b03cf5b2336a8f7 (patch)
treeaafcf3f47ece3e326434b738563336c436b380c9
parent62254cced42ce557790b3dfe0532ad7928804b47 (diff)
downloadlibsoup-websockets-fixes-2.66.tar.gz
WebSockets: ensure a new connection is created for WebSocket requestswebsockets-fixes-2.66
The spec says a new connection must be established and some servers reply with a 400 Bad Request when reusing an existing connection.
-rw-r--r--libsoup/soup-session.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
index 5ecae857..e6a4c918 100644
--- a/libsoup/soup-session.c
+++ b/libsoup/soup-session.c
@@ -4868,6 +4868,7 @@ soup_session_websocket_connect_async (SoupSession *session,
SoupSessionPrivate *priv = soup_session_get_instance_private (session);
SoupMessageQueueItem *item;
GTask *task;
+ SoupMessageFlags flags;
g_return_if_fail (SOUP_IS_SESSION (session));
g_return_if_fail (priv->use_thread_context);
@@ -4875,6 +4876,15 @@ soup_session_websocket_connect_async (SoupSession *session,
soup_websocket_client_prepare_handshake (msg, origin, protocols);
+ /* When the client is to _Establish a WebSocket Connection_ given a set
+ * of (/host/, /port/, /resource name/, and /secure/ flag), along with a
+ * list of /protocols/ and /extensions/ to be used, and an /origin/ in
+ * the case of web browsers, it MUST open a connection, send an opening
+ * handshake, and read the server's handshake in response.
+ */
+ flags = soup_message_get_flags (msg);
+ soup_message_set_flags (msg, flags | SOUP_MESSAGE_NEW_CONNECTION);
+
task = g_task_new (session, cancellable, callback, user_data);
item = soup_session_append_queue_item (session, msg, TRUE, FALSE,
websocket_connect_async_complete, task);