[libsoup] io-http2: set stream priority based on message priority
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libsoup] io-http2: set stream priority based on message priority
- Date: Thu, 27 May 2021 11:09:26 +0000 (UTC)
commit 8c59b364b72b064cb224b6459dc7de27d854eaae
Author: Carlos Garcia Campos <cgarcia igalia com>
Date: Thu May 27 13:08:01 2021 +0200
io-http2: set stream priority based on message priority
libsoup/http2/soup-client-message-io-http2.c | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
---
diff --git a/libsoup/http2/soup-client-message-io-http2.c b/libsoup/http2/soup-client-message-io-http2.c
index 812f6a67..df78eb46 100644
--- a/libsoup/http2/soup-client-message-io-http2.c
+++ b/libsoup/http2/soup-client-message-io-http2.c
@@ -847,6 +847,25 @@ request_header_is_valid (const char *name)
return !g_hash_table_contains (invalid_request_headers, name);
}
+static int32_t
+message_priority_to_weight (SoupMessage *msg)
+{
+ switch (soup_message_get_priority (msg)) {
+ case SOUP_MESSAGE_PRIORITY_VERY_LOW:
+ return NGHTTP2_MIN_WEIGHT;
+ case SOUP_MESSAGE_PRIORITY_LOW:
+ return (NGHTTP2_DEFAULT_WEIGHT - NGHTTP2_MIN_WEIGHT) / 2;
+ case SOUP_MESSAGE_PRIORITY_NORMAL:
+ return NGHTTP2_DEFAULT_WEIGHT;
+ case SOUP_MESSAGE_PRIORITY_HIGH:
+ return (NGHTTP2_MAX_WEIGHT - NGHTTP2_DEFAULT_WEIGHT) / 2;
+ case SOUP_MESSAGE_PRIORITY_VERY_HIGH:
+ return NGHTTP2_MAX_WEIGHT;
+ }
+
+ return NGHTTP2_DEFAULT_WEIGHT;
+}
+
#define MAKE_NV(NAME, VALUE, VALUELEN) \
{ \
(uint8_t *)NAME, (uint8_t *)VALUE, strlen (NAME), VALUELEN, \
@@ -912,13 +931,16 @@ send_message_request (SoupMessage *msg,
if (logger && body_stream)
data->logger = SOUP_LOGGER (logger);
+ nghttp2_priority_spec priority_spec;
+ nghttp2_priority_spec_init (&priority_spec, 0, message_priority_to_weight (msg), 0);
+
nghttp2_data_provider data_provider;
if (body_stream) {
data_provider.source.ptr = body_stream;
data_provider.read_callback = on_data_source_read_callback;
}
- data->stream_id = nghttp2_submit_request (io->session, NULL, (const nghttp2_nv *)headers->data,
headers->len, body_stream ? &data_provider : NULL, data);
+ data->stream_id = nghttp2_submit_request (io->session, &priority_spec, (const nghttp2_nv
*)headers->data, headers->len, body_stream ? &data_provider : NULL, data);
h2_debug (io, data, "[SESSION] Request made for %s%s", authority_header, path_and_query);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]