Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libsoup for openSUSE:Factory checked in at 2022-07-09 16:59:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libsoup (Old) and /work/SRC/openSUSE:Factory/.libsoup.new.1523 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libsoup" Sat Jul 9 16:59:23 2022 rev:135 rq:987356 version:3.0.7 Changes: -------- --- /work/SRC/openSUSE:Factory/libsoup/libsoup.changes 2022-04-03 21:30:44.607985144 +0200 +++ /work/SRC/openSUSE:Factory/.libsoup.new.1523/libsoup.changes 2022-07-09 16:59:35.176485592 +0200 @@ -1,0 +2,17 @@ +Wed Jul 6 12:27:20 UTC 2022 - Dominique Leuenberger <[email protected]> + +- Update to version 3.0.7: + + Fix leak in SoupAuthNTLM. + + Fix constructing SoupAuthNTLM objects. + + Disable mutual negotiation in SoupAuthNegotiate. + + http2: + - Do not advertise the `h2` protocool for proxy connections. + - Remove left-over headers when HTTP/1 redirects to HTTP/2. + - Handle HTTP_1_1_REQUIRED error. + - Read request bodies synchronously for sync requests. + - Properly handle server sending shut down GOAWAY. + + tests: + - Remove dependency on Apache's PHP module. + - Depend upon Apache's http2 module. + +------------------------------------------------------------------- Old: ---- libsoup-3.0.6.tar.xz New: ---- libsoup-3.0.7.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libsoup.spec ++++++ --- /var/tmp/diff_new_pack.mjvdGz/_old 2022-07-09 16:59:35.656486313 +0200 +++ /var/tmp/diff_new_pack.mjvdGz/_new 2022-07-09 16:59:35.656486313 +0200 @@ -18,7 +18,7 @@ %define api_version 3.0 Name: libsoup -Version: 3.0.6 +Version: 3.0.7 Release: 0 Summary: HTTP client/server library for GNOME License: LGPL-2.1-or-later ++++++ libsoup-3.0.6.tar.xz -> libsoup-3.0.7.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/.gitignore new/libsoup-3.0.7/.gitignore --- old/libsoup-3.0.6/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/libsoup-3.0.7/.gitignore 2022-06-30 19:11:48.000000000 +0200 @@ -0,0 +1,3 @@ +/po/libsoup.pot +/*build/ +/html/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/NEWS new/libsoup-3.0.7/NEWS --- old/libsoup-3.0.6/NEWS 2022-03-31 20:33:58.624886500 +0200 +++ new/libsoup-3.0.7/NEWS 2022-06-30 19:11:48.000000000 +0200 @@ -1,3 +1,16 @@ +Changes in libsoup from 3.0.6 to 3.0.7: + +* Fix leak in SoupAuthNTLM [Milan Crha] +* Fix constructing SoupAuthNTLM objects [Milan Crha] +* Disable mutual negotiation in SoupAuthNegotiate [Michael Catanzaro] +* http2: Do not advertise the `h2` protocool for proxy connections [Carlos Garcia Campos] +* http2: Remove left-over headers when HTTP/1 redirects to HTTP/2 [Carlos Garcia Campos] +* http2: Handle HTTP_1_1_REQUIRED error [Carlos Garcia Campos] +* http2: Read request bodies synchronously for sync requests [Carlos Garcia Campos] +* http2: Properly handle server sending shut down GOAWAY [Carlos Garcia Campos] +* tests: Remove dependency on Apache's PHP module [Carlos Garcia Campos] +* tests: Depend upon Apache's http2 module [Carlos Garcia Campos] + Changes in libsoup from 3.0.5 to 3.0.6: * Misc HTTP/2 fixes [Carlos Garcia Campos] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/get_apache_modules_dirs.py new/libsoup-3.0.7/get_apache_modules_dirs.py --- old/libsoup-3.0.6/get_apache_modules_dirs.py 2022-03-31 20:33:58.626886600 +0200 +++ new/libsoup-3.0.7/get_apache_modules_dirs.py 2022-06-30 19:11:48.000000000 +0200 @@ -27,13 +27,6 @@ import os import glob -def check_php_module(modules_path): - php_modules = glob.glob(os.path.join(modules_path, 'libphp7*.so')); - if len(php_modules): - # The last one in the sorted output will be the desired php module. - return sorted(php_modules)[-1]; - - def check_module(modules_path, module): module_path = os.path.join(modules_path, module) return os.path.isfile(module_path) @@ -52,7 +45,7 @@ 'mod_authz_user', 'mod_dir', 'mod_mime', - 'mod_mpm_prefork', + 'mod_mpm_event', 'mod_proxy', 'mod_proxy_http', 'mod_proxy_connect' @@ -105,8 +98,8 @@ apache_modules_dir = '' apache_ssl_module_dir = '' - apache_php_module_file = '' apache_mod_unixd_module_file = '' + apache_http2_module_dir = '' for lib_dir in ['lib', 'lib64']: for httpd_dir in ['apache', 'apache2', 'http', 'http2', 'httpd']: @@ -117,11 +110,10 @@ apache_modules_dir = modules_path if check_module(modules_path, 'mod_ssl.so'): apache_ssl_module_dir = modules_path - php_module = check_php_module(modules_path) - if (php_module): - apache_php_module_file = php_module if check_module(modules_path, 'mod_unixd.so'): apache_mod_unixd_module_file = modules_path + if check_module(modules_path, 'mod_http2.so'): + apache_http2_module_dir = modules_path # These two are mandatory for having properly configured Apache if apache_modules_dir == '' or apache_ssl_module_dir == '': @@ -129,8 +121,8 @@ print(apache_modules_dir + ":" + apache_ssl_module_dir + ":" + - apache_php_module_file + ":" + - apache_mod_unixd_module_file, end='') + apache_mod_unixd_module_file + ":" + + apache_http2_module_dir, end='') if __name__ == "__main__": main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/libsoup/auth/soup-auth-manager.c new/libsoup-3.0.7/libsoup/auth/soup-auth-manager.c --- old/libsoup-3.0.6/libsoup/auth/soup-auth-manager.c 2022-03-31 20:33:58.626886600 +0200 +++ new/libsoup-3.0.7/libsoup/auth/soup-auth-manager.c 2022-06-30 19:11:48.000000000 +0200 @@ -454,15 +454,18 @@ make_auto_ntlm_auth (SoupAuthManagerPrivate *priv, SoupAuthHost *host) { SoupAuth *auth; + char *authority; if (!priv->auto_ntlm) return FALSE; + authority = g_strdup_printf ("%s:%d", g_uri_get_host (host->uri), g_uri_get_port (host->uri)); auth = g_object_new (SOUP_TYPE_AUTH_NTLM, - "host", g_uri_get_host (host->uri), + "authority", authority, NULL); record_auth_for_uri (priv, host->uri, auth, FALSE); g_object_unref (auth); + g_free (authority); return TRUE; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/libsoup/auth/soup-auth-negotiate.c new/libsoup-3.0.7/libsoup/auth/soup-auth-negotiate.c --- old/libsoup-3.0.6/libsoup/auth/soup-auth-negotiate.c 2022-03-31 20:33:58.626886600 +0200 +++ new/libsoup-3.0.7/libsoup/auth/soup-auth-negotiate.c 2022-06-30 19:11:48.000000000 +0200 @@ -32,6 +32,7 @@ * still be added to a #SoupSession, but libsoup will never attempt to * actually use this auth type. * + * Returns: %TRUE if supported otherwise %FALSE */ gboolean soup_auth_negotiate_supported (void) @@ -361,9 +362,20 @@ auth_headers = soup_message_headers_get_one_common (soup_message_get_response_headers (msg), SOUP_HEADER_WWW_AUTHENTICATE); if (!auth_headers || g_ascii_strncasecmp (auth_headers, "Negotiate ", 10) != 0) { - g_warning ("Failed to parse auth header"); + if (soup_message_get_status (msg) == SOUP_STATUS_OK) { + /* The server *may* supply final authentication data to + * the client, but doesn't have to. We are not + * authenticating the server, so just ignore missing + * auth data. In practice, this is required for web + * compat. + */ + priv->is_authenticated = TRUE; + return; + } + + g_warning ("Server bug: missing or invalid WWW-Authenticate header: %s", auth_headers); conn->state = SOUP_NEGOTIATE_FAILED; - goto out; + return; } ret = soup_gss_client_step (conn, auth_headers + 10, &error_message); @@ -393,7 +405,7 @@ default: conn->state = SOUP_NEGOTIATE_FAILED; } - out: + g_clear_pointer (&error_message, g_free); } @@ -584,7 +596,7 @@ &conn->context, conn->server_name, (gss_OID) &gss_mech_spnego, - GSS_C_MUTUAL_FLAG, + 0, GSS_C_INDEFINITE, GSS_C_NO_CHANNEL_BINDINGS, &in, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/libsoup/auth/soup-auth-ntlm.c new/libsoup-3.0.7/libsoup/auth/soup-auth-ntlm.c --- old/libsoup-3.0.6/libsoup/auth/soup-auth-ntlm.c 2022-03-31 20:33:58.626886600 +0200 +++ new/libsoup-3.0.7/libsoup/auth/soup-auth-ntlm.c 2022-06-30 19:11:48.000000000 +0200 @@ -758,12 +758,14 @@ return FALSE; } + g_free (*default_domain); *default_domain = g_convert ((char *)chall + domain.offset, domain.length, "UTF-8", "UCS-2LE", NULL, NULL, NULL); } if (nonce) { + g_free (*nonce); *nonce = g_memdup2 (chall + NTLM_CHALLENGE_NONCE_OFFSET, NTLM_CHALLENGE_NONCE_LENGTH); } @@ -777,6 +779,7 @@ g_free (chall); return FALSE; } + g_free (*target_info); *target_info = g_memdup2 (chall + target.offset, target.length); *target_info_sz = target.length; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/libsoup/cache/soup-cache-private.h new/libsoup-3.0.7/libsoup/cache/soup-cache-private.h --- old/libsoup-3.0.6/libsoup/cache/soup-cache-private.h 2022-03-31 20:33:58.627886500 +0200 +++ new/libsoup-3.0.7/libsoup/cache/soup-cache-private.h 2022-06-30 19:11:48.000000000 +0200 @@ -27,6 +27,12 @@ G_BEGIN_DECLS +typedef enum { + SOUP_CACHE_RESPONSE_FRESH, + SOUP_CACHE_RESPONSE_NEEDS_VALIDATION, + SOUP_CACHE_RESPONSE_STALE +} SoupCacheResponse; + SoupCacheResponse soup_cache_has_response (SoupCache *cache, SoupMessage *msg); GInputStream *soup_cache_send_response (SoupCache *cache, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/libsoup/cache/soup-cache.h new/libsoup-3.0.7/libsoup/cache/soup-cache.h --- old/libsoup-3.0.6/libsoup/cache/soup-cache.h 2022-03-31 20:33:58.627886500 +0200 +++ new/libsoup-3.0.7/libsoup/cache/soup-cache.h 2022-06-30 19:11:48.000000000 +0200 @@ -38,12 +38,6 @@ } SoupCacheability; typedef enum { - SOUP_CACHE_RESPONSE_FRESH, - SOUP_CACHE_RESPONSE_NEEDS_VALIDATION, - SOUP_CACHE_RESPONSE_STALE -} SoupCacheResponse; - -typedef enum { SOUP_CACHE_SINGLE_USER, SOUP_CACHE_SHARED } SoupCacheType; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/libsoup/http2/soup-body-input-stream-http2.c new/libsoup-3.0.7/libsoup/http2/soup-body-input-stream-http2.c --- old/libsoup-3.0.6/libsoup/http2/soup-body-input-stream-http2.c 2022-03-31 20:33:58.630886600 +0200 +++ new/libsoup-3.0.7/libsoup/http2/soup-body-input-stream-http2.c 2022-06-30 19:11:48.000000000 +0200 @@ -180,7 +180,7 @@ if (count == 0 && blocking && !priv->completed) { GError *read_error = NULL; g_signal_emit (memory_stream, signals[NEED_MORE_DATA], 0, - cancellable, &read_error); + blocking, cancellable, &read_error); if (read_error) { g_propagate_error (error, read_error); @@ -429,5 +429,6 @@ NULL, NULL, NULL, G_TYPE_ERROR, - 1, G_TYPE_CANCELLABLE); + 2, G_TYPE_BOOLEAN, + G_TYPE_CANCELLABLE); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/libsoup/http2/soup-client-message-io-http2.c new/libsoup-3.0.7/libsoup/http2/soup-client-message-io-http2.c --- old/libsoup-3.0.6/libsoup/http2/soup-client-message-io-http2.c 2022-03-31 20:33:58.630886600 +0200 +++ new/libsoup-3.0.7/libsoup/http2/soup-client-message-io-http2.c 2022-06-30 19:11:48.000000000 +0200 @@ -589,6 +589,7 @@ static GError * memory_stream_need_more_data_callback (SoupBodyInputStreamHttp2 *stream, + gboolean blocking, GCancellable *cancellable, gpointer user_data) { @@ -596,7 +597,7 @@ GError *error = NULL; if (nghttp2_session_want_read (data->io->session)) - io_read (data->io, TRUE, cancellable, &error); + io_read (data->io, blocking, cancellable, &error); return error; } @@ -652,6 +653,9 @@ GHashTableIter iter; SoupHTTP2MessageData *data; + if (last_stream_id == G_MAXINT32) + return; + g_hash_table_iter_init (&iter, io->messages); while (g_hash_table_iter_next (&iter, NULL, (gpointer*)&data)) { /* If there is no error it is a graceful shutdown and @@ -960,8 +964,16 @@ data->io->in_callback++; - if (error_code == NGHTTP2_REFUSED_STREAM && data->state < STATE_READ_DATA) + switch (error_code) { + case NGHTTP2_REFUSED_STREAM: + if (data->state < STATE_READ_DATA) + data->can_be_restarted = TRUE; + break; + case NGHTTP2_HTTP_1_1_REQUIRED: + soup_message_set_force_http_version (data->item->msg, SOUP_HTTP_1_1); data->can_be_restarted = TRUE; + break; + } data->io->in_callback--; return 0; @@ -991,8 +1003,6 @@ GError *error = NULL; gssize read = g_input_stream_read_finish (source, res, &error); - h2_debug (data->io, data, "[SEND_BODY] Read %zd", read); - /* This operation may have outlived the message data in which case this will have been cancelled. */ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { @@ -1000,6 +1010,8 @@ return; } + h2_debug (data->io, data, "[SEND_BODY] Read %zd", read); + if (read < 0) { g_byte_array_set_size (data->data_source_buffer, 0); data->data_source_error = g_steal_pointer (&error); @@ -1040,6 +1052,31 @@ SoupHTTP2MessageData *data = nghttp2_session_get_stream_user_data (session, stream_id); data->io->in_callback++; + if (!data->item->async) { + gssize read; + GError *error = NULL; + + read = g_input_stream_read (source->ptr, buf, length, data->item->cancellable, &error); + if (read) { + h2_debug (data->io, data, "[SEND_BODY] Read %zd", read); + log_request_data (data, buf, read); + } + + if (read < 0) { + set_error_for_data (data, g_steal_pointer (&error)); + data->io->in_callback--; + return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE; + } + + if (read == 0) { + h2_debug (data->io, data, "[SEND_BODY] EOF"); + *data_flags |= NGHTTP2_DATA_FLAG_EOF; + } + + data->io->in_callback--; + return read; + } + /* We support pollable streams in the best case because they * should perform better with one fewer copy of each buffer and no threading. */ if (G_IS_POLLABLE_INPUT_STREAM (source->ptr) && g_pollable_input_stream_can_poll (G_POLLABLE_INPUT_STREAM (source->ptr))) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/libsoup/server/soup-auth-domain-basic.c new/libsoup-3.0.7/libsoup/server/soup-auth-domain-basic.c --- old/libsoup-3.0.6/libsoup/server/soup-auth-domain-basic.c 2022-03-31 20:33:58.631886500 +0200 +++ new/libsoup-3.0.7/libsoup/server/soup-auth-domain-basic.c 2022-06-30 19:11:48.000000000 +0200 @@ -12,6 +12,7 @@ #include <string.h> #include "soup-auth-domain-basic.h" +#include "soup-auth-domain-private.h" #include "soup-message-headers-private.h" #include "soup.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/libsoup/server/soup-auth-domain-digest.c new/libsoup-3.0.7/libsoup/server/soup-auth-domain-digest.c --- old/libsoup-3.0.6/libsoup/server/soup-auth-domain-digest.c 2022-03-31 20:33:58.631886500 +0200 +++ new/libsoup-3.0.7/libsoup/server/soup-auth-domain-digest.c 2022-06-30 19:11:48.000000000 +0200 @@ -13,6 +13,7 @@ #include <stdlib.h> #include "soup-auth-domain-digest.h" +#include "soup-auth-domain-private.h" #include "soup-uri-utils-private.h" #include "soup-message-headers-private.h" #include "soup.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/libsoup/server/soup-auth-domain-private.h new/libsoup-3.0.7/libsoup/server/soup-auth-domain-private.h --- old/libsoup-3.0.6/libsoup/server/soup-auth-domain-private.h 1970-01-01 01:00:00.000000000 +0100 +++ new/libsoup-3.0.7/libsoup/server/soup-auth-domain-private.h 2022-06-30 19:11:48.000000000 +0200 @@ -0,0 +1,12 @@ +/* + * Copyright (C) 2007 Novell, Inc. + * Copyright (C) 2022 Igalia S.L. + */ + +#pragma once + +#include "soup-auth-domain.h" + +gboolean soup_auth_domain_try_generic_auth_callback (SoupAuthDomain *domain, + SoupServerMessage *msg, + const char *username); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/libsoup/server/soup-auth-domain.c new/libsoup-3.0.7/libsoup/server/soup-auth-domain.c --- old/libsoup-3.0.6/libsoup/server/soup-auth-domain.c 2022-03-31 20:33:58.631886500 +0200 +++ new/libsoup-3.0.7/libsoup/server/soup-auth-domain.c 2022-06-30 19:11:48.000000000 +0200 @@ -11,7 +11,7 @@ #include <string.h> -#include "soup-auth-domain.h" +#include "soup-auth-domain-private.h" #include "soup-message-headers-private.h" #include "soup.h" #include "soup-path-map.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/libsoup/server/soup-auth-domain.h new/libsoup-3.0.7/libsoup/server/soup-auth-domain.h --- old/libsoup-3.0.6/libsoup/server/soup-auth-domain.h 2022-03-31 20:33:58.631886500 +0200 +++ new/libsoup-3.0.7/libsoup/server/soup-auth-domain.h 2022-06-30 19:11:48.000000000 +0200 @@ -74,10 +74,4 @@ void soup_auth_domain_challenge (SoupAuthDomain *domain, SoupServerMessage *msg); -/* protected */ -SOUP_AVAILABLE_IN_ALL -gboolean soup_auth_domain_try_generic_auth_callback (SoupAuthDomain *domain, - SoupServerMessage *msg, - const char *username); - G_END_DECLS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/libsoup/server/soup-server-message.c new/libsoup-3.0.7/libsoup/server/soup-server-message.c --- old/libsoup-3.0.6/libsoup/server/soup-server-message.c 2022-03-31 20:33:58.631886500 +0200 +++ new/libsoup-3.0.7/libsoup/server/soup-server-message.c 2022-06-30 19:11:48.000000000 +0200 @@ -682,7 +682,7 @@ * * Get the HTTP reason phrase of @msg or %NULL. * - * Returns: the reason phrase. + * Returns: (nullable): the reason phrase. */ const char * soup_server_message_get_reason_phrase (SoupServerMessage *msg) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/libsoup/soup-connection.c new/libsoup-3.0.7/libsoup/soup-connection.c --- old/libsoup-3.0.6/libsoup/soup-connection.c 2022-03-31 20:33:58.632886600 +0200 +++ new/libsoup-3.0.7/libsoup/soup-connection.c 2022-06-30 19:11:48.000000000 +0200 @@ -31,7 +31,7 @@ SoupSocketProperties *socket_props; guint64 id; GSocketAddress *remote_address; - gboolean force_http1; + guint8 force_http_version; GUri *proxy_uri; gboolean ssl; @@ -75,7 +75,7 @@ PROP_TLS_CERTIFICATE_ERRORS, PROP_TLS_PROTOCOL_VERSION, PROP_TLS_CIPHERSUITE_NAME, - PROP_FORCE_HTTP1, + PROP_FORCE_HTTP_VERSION, LAST_PROPERTY }; @@ -95,6 +95,7 @@ SoupConnectionPrivate *priv = soup_connection_get_instance_private (conn); priv->http_version = SOUP_HTTP_1_1; + priv->force_http_version = G_MAXUINT8; } static void @@ -156,8 +157,8 @@ case PROP_ID: priv->id = g_value_get_uint64 (value); break; - case PROP_FORCE_HTTP1: - priv->force_http1 = g_value_get_boolean (value); + case PROP_FORCE_HTTP_VERSION: + priv->force_http_version = g_value_get_uchar (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -202,8 +203,8 @@ case PROP_TLS_CIPHERSUITE_NAME: g_value_set_string (value, soup_connection_get_tls_ciphersuite_name (SOUP_CONNECTION (object))); break; - case PROP_FORCE_HTTP1: - g_value_set_boolean (value, priv->force_http1); + case PROP_FORCE_HTTP_VERSION: + g_value_set_uchar (value, priv->force_http_version); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -344,12 +345,13 @@ NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - properties[PROP_FORCE_HTTP1] = - g_param_spec_boolean ("force-http1", - "Force HTTP 1.x", - "Force connection to use HTTP 1.x", - FALSE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | - G_PARAM_STATIC_STRINGS); + properties[PROP_FORCE_HTTP_VERSION] = + g_param_spec_uchar ("force-http-version", + "Force HTTP version", + "Force connection to use a specific HTTP version", + 0, G_MAXUINT8, G_MAXUINT8, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROPERTY, properties); } @@ -568,11 +570,23 @@ GPtrArray *advertised_protocols = g_ptr_array_sized_new (4); // https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml - if (!priv->force_http1) + switch (priv->force_http_version) { + case SOUP_HTTP_1_0: + g_ptr_array_add (advertised_protocols, "http/1.0"); + break; + case SOUP_HTTP_1_1: + g_ptr_array_add (advertised_protocols, "http/1.1"); + break; + case SOUP_HTTP_2_0: g_ptr_array_add (advertised_protocols, "h2"); - - g_ptr_array_add (advertised_protocols, "http/1.1"); - g_ptr_array_add (advertised_protocols, "http/1.0"); + break; + default: + if (!priv->remote_address || !G_IS_PROXY_ADDRESS (priv->remote_address)) + g_ptr_array_add (advertised_protocols, "h2"); + g_ptr_array_add (advertised_protocols, "http/1.1"); + g_ptr_array_add (advertised_protocols, "http/1.0"); + break; + } g_ptr_array_add (advertised_protocols, NULL); tls_interaction = priv->socket_props->tls_interaction ? g_object_ref (priv->socket_props->tls_interaction) : soup_tls_interaction_new (conn); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/libsoup/soup-message-private.h new/libsoup-3.0.7/libsoup/soup-message-private.h --- old/libsoup-3.0.6/libsoup/soup-message-private.h 2022-03-31 20:33:58.634886500 +0200 +++ new/libsoup-3.0.7/libsoup/soup-message-private.h 2022-06-30 19:11:48.000000000 +0200 @@ -147,10 +147,10 @@ void soup_message_force_keep_alive_if_needed (SoupMessage *msg); -void soup_message_set_force_http1 (SoupMessage *msg, - gboolean force_http1); +void soup_message_set_force_http_version (SoupMessage *msg, + guint8 version); -gboolean soup_message_get_force_http1 (SoupMessage *msg); +guint8 soup_message_get_force_http_version (SoupMessage *msg); void soup_message_set_is_misdirected_retry (SoupMessage *msg, gboolean is_misdirected_retry); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/libsoup/soup-message.c new/libsoup-3.0.7/libsoup/soup-message.c --- old/libsoup-3.0.6/libsoup/soup-message.c 2022-03-31 20:33:58.635886700 +0200 +++ new/libsoup-3.0.7/libsoup/soup-message.c 2022-06-30 19:11:48.000000000 +0200 @@ -103,9 +103,9 @@ gboolean is_top_level_navigation; gboolean is_options_ping; gboolean is_preconnect; - gboolean force_http1; gboolean is_misdirected_retry; guint last_connection_id; + guint8 force_http_version; GSocketAddress *remote_address; SoupMessageMetrics *metrics; @@ -173,6 +173,7 @@ priv->http_version = priv->orig_http_version = SOUP_HTTP_1_1; priv->priority = SOUP_MESSAGE_PRIORITY_NORMAL; + priv->force_http_version = G_MAXUINT8; priv->request_headers = soup_message_headers_new (SOUP_MESSAGE_HEADERS_REQUEST); priv->response_headers = soup_message_headers_new (SOUP_MESSAGE_HEADERS_RESPONSE); @@ -1208,7 +1209,11 @@ void soup_message_finished (SoupMessage *msg) { + SoupMessagePrivate *priv = soup_message_get_instance_private (msg); + g_signal_emit (msg, signals[FINISHED], 0); + + priv->force_http_version = G_MAXUINT8; } gboolean @@ -2851,7 +2856,7 @@ * * Returns the reason phrase for the status of this message. * - * Returns: Phrase or %NULL + * Returns: (nullable): the phrase */ const char * soup_message_get_reason_phrase (SoupMessage *msg) @@ -3126,8 +3131,10 @@ { SoupMessagePrivate *priv = soup_message_get_instance_private (msg); - if (priv->http_version == SOUP_HTTP_2_0) + if (priv->http_version == SOUP_HTTP_2_0) { + soup_message_headers_remove_common (priv->request_headers, SOUP_HEADER_HOST); return; + } if (soup_message_headers_get_one_common (priv->request_headers, SOUP_HEADER_HOST)) return; @@ -3140,8 +3147,10 @@ { SoupMessagePrivate *priv = soup_message_get_instance_private (msg); - if (priv->http_version == SOUP_HTTP_2_0) + if (priv->http_version == SOUP_HTTP_2_0) { + soup_message_headers_remove_common (priv->request_headers, SOUP_HEADER_CONNECTION); return; + } /* Force keep alive connections for HTTP 1.0. Performance will * improve when issuing multiple requests to the same host in @@ -3156,20 +3165,20 @@ } void -soup_message_set_force_http1 (SoupMessage *msg, - gboolean force_http1) +soup_message_set_force_http_version (SoupMessage *msg, + guint8 version) { SoupMessagePrivate *priv = soup_message_get_instance_private (msg); - priv->force_http1 = force_http1; + priv->force_http_version = version; } -gboolean -soup_message_get_force_http1 (SoupMessage *msg) +guint8 +soup_message_get_force_http_version (SoupMessage *msg) { SoupMessagePrivate *priv = soup_message_get_instance_private (msg); - return priv->force_http1; + return priv->force_http_version; } void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/libsoup/soup-session.c new/libsoup-3.0.7/libsoup/soup-session.c --- old/libsoup-3.0.6/libsoup/soup-session.c 2022-03-31 20:33:58.636886600 +0200 +++ new/libsoup-3.0.7/libsoup/soup-session.c 2022-06-30 19:11:48.000000000 +0200 @@ -82,8 +82,6 @@ GSList *connections; /* CONTAINS: SoupConnection */ guint num_conns; - guint num_messages; - GSource *keep_alive_src; SoupSession *session; } SoupSessionHost; @@ -1358,7 +1356,6 @@ { SoupSessionPrivate *priv = soup_session_get_instance_private (session); SoupMessageQueueItem *item; - SoupSessionHost *host; GSList *f; soup_message_set_metrics_timestamp (msg, SOUP_MESSAGE_METRICS_FETCH_START); @@ -1370,9 +1367,6 @@ soup_message_queue_item_ref (item), (GCompareDataFunc)compare_queue_item, NULL); - host = get_host_for_message (session, item->msg); - host->num_messages++; - if (!soup_message_query_flags (msg, SOUP_MESSAGE_NO_REDIRECT)) { soup_message_add_header_handler ( msg, "got_body", "Location", @@ -1550,7 +1544,6 @@ SoupMessageQueueItem *item) { SoupSessionPrivate *priv = soup_session_get_instance_private (session); - SoupSessionHost *host; GSList *f; soup_message_set_connection (item->msg, NULL); @@ -1562,9 +1555,6 @@ g_queue_remove (priv->queue, item); - host = get_host_for_message (session, item->msg); - host->num_messages--; - /* g_signal_handlers_disconnect_by_func doesn't work if you * have a metamarshal, meaning it doesn't work with * soup_message_add_header_handler() @@ -1806,7 +1796,7 @@ { SoupSessionPrivate *priv = soup_session_get_instance_private (session); GSocketConnectable *remote_connectable; - gboolean force_http1; + guint8 force_http_version; SoupConnection *conn; GSList *conns; @@ -1819,10 +1809,7 @@ return conn; } - if (g_getenv ("SOUP_FORCE_HTTP1")) - force_http1 = TRUE; - else - force_http1 = soup_message_get_force_http1 (item->msg); + force_http_version = g_getenv ("SOUP_FORCE_HTTP1") ? SOUP_HTTP_1_1 : soup_message_get_force_http_version (item->msg); for (conns = host->connections; conns; conns = conns->next) { SoupHTTPVersion http_version; @@ -1830,7 +1817,7 @@ conn = conns->data; http_version = soup_connection_get_negotiated_protocol (conn); - if (force_http1 && http_version > SOUP_HTTP_1_1) + if (force_http_version <= SOUP_HTTP_2_0 && http_version != force_http_version) continue; switch (soup_connection_get_state (conn)) { @@ -1849,7 +1836,7 @@ /* Always wait if we have a pending connection as it may be * an h2 connection which will be shared. http/1.x connections * will only be slightly delayed. */ - if (!force_http1 && !need_new_connection && !item->connect_only) + if (force_http_version > SOUP_HTTP_1_1 && !need_new_connection && !item->connect_only) return NULL; default: break; @@ -1884,7 +1871,7 @@ "remote-connectable", remote_connectable, "ssl", soup_uri_is_https (host->uri), "socket-properties", priv->socket_props, - "force-http1", force_http1, + "force-http-version", force_http_version, NULL); g_object_unref (remote_connectable); @@ -3935,7 +3922,7 @@ /* WebSocket negotiation over HTTP/2 is not currently supported * and in practice all websocket servers support HTTP1.x with * HTTP/2 not providing a tangible benefit */ - soup_message_set_force_http1 (msg, TRUE); + soup_message_set_force_http_version (msg, SOUP_HTTP_1_1); item = soup_session_append_queue_item (session, msg, TRUE, cancellable); item->io_priority = io_priority; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/meson.build new/libsoup-3.0.7/meson.build --- old/libsoup-3.0.6/meson.build 2022-03-31 20:33:58.638886700 +0200 +++ new/libsoup-3.0.7/meson.build 2022-06-30 19:11:48.000000000 +0200 @@ -1,5 +1,5 @@ project('libsoup', 'c', - version: '3.0.6', + version: '3.0.7', meson_version : '>= 0.54', license : 'LGPL-2.0-or-later', default_options : [ @@ -266,10 +266,11 @@ cdata.set('APACHE_MODULE_DIR', apache_modules_dirs[0]) message('Apache SSL module directory: ' + apache_modules_dirs[1]) cdata.set('APACHE_SSL_MODULE_DIR', apache_modules_dirs[1]) - message('Apache PHP module file: ' + apache_modules_dirs[2]) - cdata.set('APACHE_PHP_MODULE_FILE', apache_modules_dirs[2]) - message('Apache mod_unixd module directory: ' + (apache_modules_dirs[3] != '' ? apache_modules_dirs[3] : '(none)')) - cdata.set('IF_HAVE_MOD_UNIXD', apache_modules_dirs[3] != '' ? '' : '#') + message('Apache mod_unixd module directory: ' + (apache_modules_dirs[2] != '' ? apache_modules_dirs[2] : '(none)')) + cdata.set('IF_HAVE_MOD_UNIXD', apache_modules_dirs[2] != '' ? '' : '#') + message('Apache HTTP/2 module directory: ' + apache_modules_dirs[3]) + cdata.set('IF_HAVE_MOD_HTTP2', apache_modules_dirs[3] != '' ? '' : '#') + cdata.set('APACHE_HTTP2_MODULE_DIR', apache_modules_dirs[3]) cdata.set('HAVE_APACHE', have_apache) else message('Failed to locate necessary Apache modules for full test coverage') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/po/sk.po new/libsoup-3.0.7/po/sk.po --- old/libsoup-3.0.6/po/sk.po 2022-03-31 20:33:58.641886500 +0200 +++ new/libsoup-3.0.7/po/sk.po 2022-06-30 19:11:48.000000000 +0200 @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: libsoup\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/libsoup/issues\n" -"POT-Creation-Date: 2020-06-26 17:08+0000\n" -"PO-Revision-Date: 2020-09-06 17:36+0200\n" +"POT-Creation-Date: 2021-06-11 18:40+0000\n" +"PO-Revision-Date: 2022-04-01 14:04+0200\n" "Last-Translator: Du??an Kazik <[email protected]>\n" "Language-Team: Slovak <[email protected]>\n" "Language: sk\n" @@ -16,195 +16,218 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n" -"X-Generator: Poedit 2.4.1\n" +"X-Generator: Poedit 3.0.1\n" -#: libsoup/soup-body-input-stream.c:139 libsoup/soup-body-input-stream.c:170 -#: libsoup/soup-body-input-stream.c:203 libsoup/soup-message-io.c:236 -msgid "Connection terminated unexpectedly" -msgstr "Pripojenie bolo neo??ak??vane ukon??en??" - -#: libsoup/soup-body-input-stream.c:459 -msgid "Invalid seek request" -msgstr "Neplatn?? po??iadavka na posunutie" - -# struct -#: libsoup/soup-body-input-stream.c:487 -msgid "Cannot truncate SoupBodyInputStream" -msgstr "SoupBodyInputStream sa ned?? skr??ti??" - -#: libsoup/soup-cache-input-stream.c:76 +#: libsoup/cache/soup-cache-input-stream.c:70 msgid "Network stream unexpectedly closed" msgstr "Sie??ov?? pr??d bol neo??ak??vane uzavret??" -#: libsoup/soup-cache-input-stream.c:291 +#: libsoup/cache/soup-cache-input-stream.c:252 msgid "Failed to completely cache the resource" msgstr "??pln?? na????tanie zdroja do do??asnej pam??te zlyhalo" -#: libsoup/soup-directory-input-stream.c:231 -msgid "Name" -msgstr "N??zov" - -#: libsoup/soup-directory-input-stream.c:232 -msgid "Size" -msgstr "Ve??kos??" - -#: libsoup/soup-directory-input-stream.c:233 -msgid "Date Modified" -msgstr "D??tum zmeny" - # PM: buffer by som prelo??il ako schr??nka # PK: schranka je clipboard, buffer je jednoznacne vyrovnavacia pamet -#: libsoup/soup-converter-wrapper.c:189 +#: libsoup/content-decoder/soup-converter-wrapper.c:197 #, c-format msgid "Output buffer is too small" msgstr "V??stupn?? vyrovn??vacia pam???? je pr??li?? mal??" -#: libsoup/soup-message-client-io.c:39 -msgid "Could not parse HTTP response" -msgstr "Nepodarilo sa analyzova?? odpove?? HTTP" +#: libsoup/http1/soup-body-input-stream.c:155 +#: libsoup/http1/soup-body-input-stream.c:187 +#: libsoup/http1/soup-body-input-stream.c:220 +#: libsoup/http1/soup-message-io-data.c:77 +msgid "Connection terminated unexpectedly" +msgstr "Pripojenie bolo neo??ak??vane ukon??en??" -#: libsoup/soup-message-client-io.c:62 -msgid "Unrecognized HTTP response encoding" -msgstr "Nerozpoznan?? k??dovanie odpovede HTTP" +#: libsoup/http1/soup-body-input-stream.c:471 +msgid "Invalid seek request" +msgstr "Neplatn?? po??iadavka na posunutie" -#: libsoup/soup-message-io.c:261 -msgid "Header too big" -msgstr "Z??hlavie je pr??li?? ve??k??" +# struct +#: libsoup/http1/soup-body-input-stream.c:499 +msgid "Cannot truncate SoupBodyInputStream" +msgstr "SoupBodyInputStream sa ned?? skr??ti??" # PK: tu neviem ako to povedat, malo by ist o to, ze proste ta operacia neni async -#: libsoup/soup-message-io.c:393 libsoup/soup-message-io.c:1016 +#: libsoup/http1/soup-client-message-io-http1.c:312 +#: libsoup/http1/soup-client-message-io-http1.c:756 +#: libsoup/http2/soup-body-input-stream-http2.c:221 +#: libsoup/server/soup-server-io.c:354 libsoup/server/soup-server-io.c:819 msgid "Operation would block" msgstr "Oper??cia by blokovala spracovanie" -#: libsoup/soup-message-io.c:968 libsoup/soup-message-io.c:1001 -msgid "Operation was cancelled" -msgstr "Oper??cia bola zru??en??" +#: libsoup/http1/soup-client-message-io-http1.c:456 +msgid "Could not parse HTTP response" +msgstr "Nepodarilo sa analyzova?? odpove?? HTTP" -#: libsoup/soup-message-server-io.c:63 -msgid "Could not parse HTTP request" -msgstr "Nepodarilo sa analyzova?? po??iadavku HTTP" +#: libsoup/http1/soup-client-message-io-http1.c:479 +msgid "Unrecognized HTTP response encoding" +msgstr "Nerozpoznan?? k??dovanie odpovede HTTP" -# error -#: libsoup/soup-request.c:141 -#, c-format -msgid "No URI provided" -msgstr "Nebol poskytnut?? identifik??tor URI" +#: libsoup/http1/soup-client-message-io-http1.c:715 +#: libsoup/http1/soup-client-message-io-http1.c:741 +#: libsoup/http2/soup-client-message-io-http2.c:1426 +#: libsoup/http2/soup-client-message-io-http2.c:1450 +msgid "Operation was cancelled" +msgstr "Oper??cia bola zru??en??" -# first %s - scheme (http, ftp, ...) -#: libsoup/soup-request.c:151 -#, c-format -msgid "Invalid ???%s??? URI: %s" -msgstr "Neplatn?? sch??ma ???%s??? identifik??tora URI: %s" +#: libsoup/http1/soup-message-io-data.c:105 +msgid "Header too big" +msgstr "Z??hlavie je pr??li?? ve??k??" -#: libsoup/soup-server.c:1810 +#: libsoup/server/soup-server.c:1072 msgid "Can???t create a TLS server without a TLS certificate" msgstr "Ned?? sa vytvori?? TLS server bez TLS certifik??tu" -#: libsoup/soup-server.c:1827 +#: libsoup/server/soup-server.c:1088 #, c-format msgid "Could not listen on address %s, port %d: " msgstr "Nepodarilo sa po????va?? na adrese %s, porte %d: " -#: libsoup/soup-session.c:4570 -#, c-format -msgid "Could not parse URI ???%s???" -msgstr "Nepodarilo sa analyzova?? identifik??tor URI ???%s???" +#: libsoup/server/soup-socket.c:116 +msgid "Could not import existing socket: " +msgstr "Nepodarilo sa importova?? existuj??ci soket: " -#: libsoup/soup-session.c:4607 -#, c-format -msgid "Unsupported URI scheme ???%s???" -msgstr "Nepodporovan?? sch??ma ???%s??? pre identifik??tor URI" +#: libsoup/server/soup-socket.c:125 +msgid "Can???t import unconnected socket" +msgstr "Ned?? sa importova?? nepripojen?? soket" + +#: libsoup/soup-session.c:1166 +msgid "Location header is missing or empty in response headers" +msgstr "" +"Hlavi??ka s umiestnen??m ch??ba alebo je pr??zdna v hlavi??k??ch s odpove??ami" -#: libsoup/soup-session.c:4629 +#: libsoup/soup-session.c:1180 #, c-format -msgid "Not an HTTP URI" -msgstr "Nie je HTTP URI" +msgid "Invalid URI ???%s??? in Location response header" +msgstr "Neplatn?? URI ???%s??? v hlavi??ke odpovede s umiestnen??m" + +#: libsoup/soup-session.c:1200 +msgid "Too many redirects" +msgstr "Pr??li?? ve??a presmerovan??" + +#: libsoup/soup-session.c:1205 +msgid "Message was restarted too many times" +msgstr "Spr??va bola re??tartovan?? pr??li?? ve??akr??t" + +#: libsoup/soup-session.c:3315 libsoup/soup-session.c:3464 +msgid "Message is already in session queue" +msgstr "Spr??va u?? je vo fronte rel??cie" -#: libsoup/soup-session.c:4840 +#: libsoup/soup-session.c:3825 msgid "The server did not accept the WebSocket handshake." msgstr "Server neprijal vyjednanie protokolu WebSocket." -#: libsoup/soup-socket.c:148 -msgid "Can???t import non-socket as SoupSocket" -msgstr "Ned?? sa importova?? ne-soket ako SoupSocket" +#: libsoup/soup-tld.c:142 +msgid "No public-suffix list available." +msgstr "Nie je dostupn?? ??iadny zoznam verejn??ch pr??pon." -#: libsoup/soup-socket.c:166 -msgid "Could not import existing socket: " -msgstr "Nepodarilo sa importova?? existuj??ci soket: " +#: libsoup/soup-tld.c:152 libsoup/soup-tld.c:168 +msgid "Invalid hostname" +msgstr "Neplatn?? n??zov hostite??a" -#: libsoup/soup-socket.c:175 -msgid "Can???t import unconnected socket" -msgstr "Ned?? sa importova?? nepripojen?? soket" +#: libsoup/soup-tld.c:159 +msgid "Hostname is an IP address" +msgstr "N??zov hostite??a je adresa IP" + +#: libsoup/soup-tld.c:180 +msgid "Hostname has no base domain" +msgstr "N??zov hostite??a neobsahuje z??kladn?? dom??nu" + +#: libsoup/soup-tld.c:188 +msgid "Not enough domains" +msgstr "Nedostato??n?? po??et dom??n" -#: libsoup/soup-websocket.c:479 libsoup/soup-websocket.c:523 -#: libsoup/soup-websocket.c:539 +#: libsoup/websocket/soup-websocket.c:399 +#: libsoup/websocket/soup-websocket.c:443 +#: libsoup/websocket/soup-websocket.c:459 msgid "Server requested unsupported extension" msgstr "Server si vy??iadal nepodporovan?? roz????renie" -#: libsoup/soup-websocket.c:502 libsoup/soup-websocket.c:694 +#: libsoup/websocket/soup-websocket.c:422 +#: libsoup/websocket/soup-websocket.c:614 #, c-format msgid "Incorrect WebSocket ???%s??? header" msgstr "Nespr??vna hlavi??ka ???%s??? protokolu Websocket" -#: libsoup/soup-websocket.c:503 libsoup/soup-websocket.c:1024 +#: libsoup/websocket/soup-websocket.c:423 +#: libsoup/websocket/soup-websocket.c:878 #, c-format msgid "Server returned incorrect ???%s??? key" msgstr "Server vr??til nespr??vny k?????? ???%s???" -#: libsoup/soup-websocket.c:566 +#: libsoup/websocket/soup-websocket.c:486 #, c-format msgid "Duplicated parameter in ???%s??? WebSocket extension header" msgstr "Duplikovan?? parameter v hlavi??ke roz????renia protokolu WebSocket ???%s???" -#: libsoup/soup-websocket.c:567 +#: libsoup/websocket/soup-websocket.c:487 #, c-format -msgid "Server returned a duplicated parameter in ???%s??? WebSocket extension header" -msgstr "Server vr??til duplikovan?? parameter v hlavi??ke roz????renia protokolu WebSocket ???%s???" +msgid "" +"Server returned a duplicated parameter in ???%s??? WebSocket extension header" +msgstr "" +"Server vr??til duplikovan?? parameter v hlavi??ke roz????renia protokolu " +"WebSocket ???%s???" -#: libsoup/soup-websocket.c:658 libsoup/soup-websocket.c:667 +#: libsoup/websocket/soup-websocket.c:577 +#: libsoup/websocket/soup-websocket.c:587 msgid "WebSocket handshake expected" msgstr "O??ak??valo sa vyjednanie protokolu WebSocket" -#: libsoup/soup-websocket.c:675 +#: libsoup/websocket/soup-websocket.c:595 msgid "Unsupported WebSocket version" msgstr "Nepodporovan?? verzia protokolu WebSocket" -#: libsoup/soup-websocket.c:684 +#: libsoup/websocket/soup-websocket.c:604 msgid "Invalid WebSocket key" msgstr "Neplatn?? k?????? protokolu WebSocket" -#: libsoup/soup-websocket.c:703 +#: libsoup/websocket/soup-websocket.c:623 msgid "Unsupported WebSocket subprotocol" msgstr "Nepodporovan?? podprotokol protokolu WebSocket" -#: libsoup/soup-websocket.c:975 +#: libsoup/websocket/soup-websocket.c:829 msgid "Server rejected WebSocket handshake" msgstr "Server odmietol vyjednanie protokolu WebSocket" -#: libsoup/soup-websocket.c:983 libsoup/soup-websocket.c:992 +#: libsoup/websocket/soup-websocket.c:837 +#: libsoup/websocket/soup-websocket.c:846 msgid "Server ignored WebSocket handshake" msgstr "Server ignoroval vyjednanie protokolu WebSocket" -#: libsoup/soup-websocket.c:1004 +#: libsoup/websocket/soup-websocket.c:858 msgid "Server requested unsupported protocol" msgstr "Server si vy??iadal nepodporovan?? protokol" -#: libsoup/soup-tld.c:150 -msgid "No public-suffix list available." -msgstr "Nie je dostupn?? ??iadny zoznam verejn??ch pr??pon." +#~ msgid "Name" +#~ msgstr "N??zov" -#: libsoup/soup-tld.c:160 libsoup/soup-tld.c:176 -msgid "Invalid hostname" -msgstr "Neplatn?? n??zov hostite??a" +#~ msgid "Size" +#~ msgstr "Ve??kos??" -#: libsoup/soup-tld.c:167 -msgid "Hostname is an IP address" -msgstr "N??zov hostite??a je adresa IP" +#~ msgid "Date Modified" +#~ msgstr "D??tum zmeny" -#: libsoup/soup-tld.c:188 -msgid "Hostname has no base domain" -msgstr "N??zov hostite??a neobsahuje z??kladn?? dom??nu" +#~ msgid "Could not parse HTTP request" +#~ msgstr "Nepodarilo sa analyzova?? po??iadavku HTTP" -#: libsoup/soup-tld.c:196 -msgid "Not enough domains" -msgstr "Nedostato??n?? po??et dom??n" +# error +#~ msgid "No URI provided" +#~ msgstr "Nebol poskytnut?? identifik??tor URI" + +# first %s - scheme (http, ftp, ...) +#~ msgid "Invalid ???%s??? URI: %s" +#~ msgstr "Neplatn?? sch??ma ???%s??? identifik??tora URI: %s" + +#~ msgid "Could not parse URI ???%s???" +#~ msgstr "Nepodarilo sa analyzova?? identifik??tor URI ???%s???" + +#~ msgid "Unsupported URI scheme ???%s???" +#~ msgstr "Nepodporovan?? sch??ma ???%s??? pre identifik??tor URI" + +#~ msgid "Not an HTTP URI" +#~ msgstr "Nie je HTTP URI" + +#~ msgid "Can???t import non-socket as SoupSocket" +#~ msgstr "Ned?? sa importova?? ne-soket ako SoupSocket" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/tests/auth-test.c new/libsoup-3.0.7/tests/auth-test.c --- old/libsoup-3.0.6/tests/auth-test.c 2022-03-31 20:33:58.643886600 +0200 +++ new/libsoup-3.0.7/tests/auth-test.c 2022-06-30 19:11:48.000000000 +0200 @@ -803,6 +803,42 @@ soup_test_session_abort_unref (session); } +static gboolean +sync_bad_password_authenticate (SoupMessage *msg, + SoupAuth *auth, + gboolean retrying) +{ + if (retrying) + return FALSE; + + soup_auth_authenticate (auth, "user1", "wrong"); + return TRUE; +} + +static void +do_sync_auth_bad_password_test (void) +{ + SoupSession *session; + SoupMessage *msg; + char *uri; + + SOUP_TEST_SKIP_IF_NO_APACHE; + + session = soup_test_session_new (NULL); + uri = g_strconcat (base_uri, "Basic/realm1/", NULL); + + msg = soup_message_new ("GET", uri); + g_free (uri); + g_signal_connect (msg, "authenticate", + G_CALLBACK (sync_bad_password_authenticate), + NULL); + soup_test_session_send_message (session, msg); + soup_test_assert_message_status (msg, SOUP_STATUS_UNAUTHORIZED); + g_object_unref (msg); + + soup_test_session_abort_unref (session); +} + typedef struct { const char *password; struct { @@ -1849,6 +1885,7 @@ g_test_add_func ("/auth/async-auth/bad-password", do_async_auth_bad_password_test); g_test_add_func ("/auth/async-auth/no-password", do_async_auth_no_password_test); g_test_add_func ("/auth/async-auth/cancel", do_async_auth_cancel_test); + g_test_add_func ("/auth/sync-auth/bad-password", do_sync_auth_bad_password_test); g_test_add_func ("/auth/select-auth", do_select_auth_test); g_test_add_func ("/auth/auth-close", do_auth_close_test); g_test_add_func ("/auth/infinite-auth", do_infinite_auth_test); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/tests/connection-test.c new/libsoup-3.0.7/tests/connection-test.c --- old/libsoup-3.0.6/tests/connection-test.c 2022-03-31 20:33:58.644886500 +0200 +++ new/libsoup-3.0.7/tests/connection-test.c 2022-06-30 19:11:48.000000000 +0200 @@ -1591,6 +1591,60 @@ soup_test_session_abort_unref (session); } +static void +force_http2_test_network_event (SoupMessage *msg, + GSocketClientEvent event, + GIOStream *connection, + SoupConnection **conn) +{ + if (event != G_SOCKET_CLIENT_RESOLVING) + return; + + *conn = soup_message_get_connection (msg); +} + +static void +do_connection_force_http2_test (void) +{ + SoupSession *session; + SoupMessage *msg; + SoupConnection *conn1 = NULL; + SoupConnection *conn2 = NULL; + GBytes *body; + + SOUP_TEST_SKIP_IF_NO_TLS; + SOUP_TEST_SKIP_IF_NO_APACHE; + + session = soup_test_session_new (NULL); + + msg = soup_message_new ("GET", HTTPS_SERVER); + g_signal_connect (msg, "network-event", + G_CALLBACK (force_http2_test_network_event), + &conn1); + body = soup_session_send_and_read (session, msg, NULL, NULL); + g_assert_nonnull (conn1); + g_assert_cmpint (soup_connection_get_state (conn1), ==, SOUP_CONNECTION_IDLE); + g_assert_cmpint (soup_connection_get_negotiated_protocol (conn1), ==, SOUP_HTTP_1_1); + g_object_unref (msg); + g_bytes_unref (body); + + /* With HTTP/2 forced, a new connection must be created */ + msg = soup_message_new ("GET", HTTPS_SERVER); + g_signal_connect (msg, "network-event", + G_CALLBACK (force_http2_test_network_event), + &conn2); + soup_message_set_force_http_version (msg, SOUP_HTTP_2_0); + body = soup_session_send_and_read (session, msg, NULL, NULL); + g_assert_nonnull (conn2); + g_assert_cmpint (soup_connection_get_state (conn2), ==, SOUP_CONNECTION_IDLE); + g_assert_cmpint (soup_connection_get_negotiated_protocol (conn2), ==, SOUP_HTTP_2_0); + g_assert_false (conn1 == conn2); + g_object_unref (msg); + g_bytes_unref (body); + + soup_test_session_abort_unref (session); +} + int main (int argc, char **argv) { @@ -1614,6 +1668,7 @@ g_test_add_func ("/connection/event", do_connection_event_test); g_test_add_func ("/connection/preconnect", do_connection_preconnect_test); g_test_add_func ("/connection/metrics", do_connection_metrics_test); + g_test_add_func ("/connection/force-http2", do_connection_force_http2_test); ret = g_test_run (); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/tests/http2-test.c new/libsoup-3.0.7/tests/http2-test.c --- old/libsoup-3.0.6/tests/http2-test.c 2022-03-31 20:33:58.644886500 +0200 +++ new/libsoup-3.0.7/tests/http2-test.c 2022-06-30 19:11:48.000000000 +0200 @@ -1013,6 +1013,39 @@ g_main_context_iteration (NULL, FALSE); } +static void +message_restarted (SoupMessage *msg, + gboolean *was_restarted) +{ + *was_restarted = TRUE; +} + +static void +do_http_1_1_required_test (Test *test, gconstpointer data) +{ + SoupMessage *msg; + GBytes *response; + gboolean was_restarted = FALSE; + GError *error = NULL; + + SOUP_TEST_SKIP_IF_NO_APACHE; + + msg = soup_message_new (SOUP_METHOD_GET, "https://127.0.0.1:47525/client-cert"); + soup_message_set_force_http_version (msg, SOUP_HTTP_2_0); + g_signal_connect (msg, "restarted", + G_CALLBACK (message_restarted), &was_restarted); + response = soup_test_session_async_send (test->session, msg, NULL, &error); + g_assert_no_error (error); + g_assert_cmpuint (soup_message_get_status (msg), ==, 403); + g_assert_true (was_restarted); + g_assert_nonnull (response); + g_bytes_unref (response); + g_object_unref (msg); + + while (g_main_context_pending (NULL)) + g_main_context_iteration (NULL, FALSE); +} + int main (int argc, char **argv) { @@ -1025,6 +1058,8 @@ return 1; } + apache_init (); + g_test_add ("/http2/basic/async", Test, NULL, setup_session, do_basic_async_test, @@ -1125,6 +1160,10 @@ setup_session, do_timeout_test, teardown_session); + g_test_add ("/http2/http-1-1-required", Test, NULL, + setup_session, + do_http_1_1_required_test, + teardown_session); ret = g_test_run (); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libsoup-3.0.6/tests/httpd.conf.in new/libsoup-3.0.7/tests/httpd.conf.in --- old/libsoup-3.0.6/tests/httpd.conf.in 2022-03-31 20:33:58.645886700 +0200 +++ new/libsoup-3.0.7/tests/httpd.conf.in 2022-06-30 19:11:48.000000000 +0200 @@ -13,7 +13,7 @@ # Change this to "./error.log" if it's failing and you don't know why ErrorLog /dev/null -LoadModule mpm_prefork_module @APACHE_MODULE_DIR@/mod_mpm_prefork.so +LoadModule mpm_event_module @APACHE_MODULE_DIR@/mod_mpm_event.so LoadModule alias_module @APACHE_MODULE_DIR@/mod_alias.so LoadModule auth_basic_module @APACHE_MODULE_DIR@/mod_auth_basic.so LoadModule auth_digest_module @APACHE_MODULE_DIR@/mod_auth_digest.so @@ -29,12 +29,15 @@ LoadModule proxy_connect_module @APACHE_MODULE_DIR@/mod_proxy_connect.so LoadModule ssl_module @APACHE_SSL_MODULE_DIR@/mod_ssl.so @IF_HAVE_MOD_UNIXD@LoadModule unixd_module @APACHE_SSL_MODULE_DIR@/mod_unixd.so +@IF_HAVE_MOD_HTTP2@LoadModule http2_module @APACHE_HTTP2_MODULE_DIR@/mod_http2.so DirectoryIndex index.txt TypesConfig /dev/null -AddType application/x-httpd-php .php Redirect permanent /redirected /index.txt +# Prefer http1 for now because most of the tests expect http1 behavior. +Protocols http/1.1 h2 + # Proxy #1: unauthenticated Listen 127.0.0.1:47526 <VirtualHost 127.0.0.1:47526> @@ -281,3 +284,7 @@ # test RFC2069-style Digest AuthDigestQop none </Location> + +<Location /client-cert> + SSLVerifyClient require +</Location> \ No newline at end of file
