[libsoup] WebSockets: ensure a new connection is created for WebSocket requests
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libsoup] WebSockets: ensure a new connection is created for WebSocket requests
- Date: Tue, 28 Jan 2020 10:12:16 +0000 (UTC)
commit 46713b3b3a7c01fcb305858c15bdf7c0b6ac6ce6
Author: Carlos Garcia Campos <cgarcia igalia com>
Date: Tue Jan 28 11:06:29 2020 +0100
WebSockets: ensure a new connection is created for WebSocket requests
The spec says a new connection must be established and some servers
reply with a 400 Bad Request when reusing an existing connection.
libsoup/soup-session.c | 10 ++++++++++
1 file changed, 10 insertions(+)
---
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
index 7b428c99..5dcf1eb2 100644
--- a/libsoup/soup-session.c
+++ b/libsoup/soup-session.c
@@ -4921,6 +4921,7 @@ soup_session_websocket_connect_async (SoupSession *session,
SoupMessageQueueItem *item;
GTask *task;
GPtrArray *supported_extensions;
+ SoupMessageFlags flags;
g_return_if_fail (SOUP_IS_SESSION (session));
g_return_if_fail (priv->use_thread_context);
@@ -4929,6 +4930,15 @@ soup_session_websocket_connect_async (SoupSession *session,
supported_extensions = soup_session_get_supported_websocket_extensions_for_message (session, msg);
soup_websocket_client_prepare_handshake_with_extensions (msg, origin, protocols,
supported_extensions);
+ /* 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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]