diff options
| author | Marvin W <git@larma.de> | 2022-11-04 15:29:18 -0600 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi92@disroot.org> | 2026-02-10 23:40:46 +0100 |
| commit | 4641763e0a22d74205d81907b7459280d43d504d (patch) | |
| tree | d696a671b9e7a3fe2e98d64599d2a2504700bca3 | |
| parent | 42ff4c3a99c2cccfe73e3c166f8bd9c9d7f6600c (diff) | |
HTTP: Make LimitInputStream pollable for better async compatibility
Fixes #1307
| -rw-r--r-- | plugins/http-files/src/file_provider.vala | 21 | ||||
| -rw-r--r-- | xmpp-vala/CMakeLists.txt | 11 | ||||
| -rw-r--r-- | xmpp-vala/src/core/direct_tls_xmpp_stream.vala | 2 |
3 files changed, 21 insertions, 13 deletions
diff --git a/plugins/http-files/src/file_provider.vala b/plugins/http-files/src/file_provider.vala index df7d9c11..734ab102 100644 --- a/plugins/http-files/src/file_provider.vala +++ b/plugins/http-files/src/file_provider.vala @@ -46,7 +46,7 @@ public class FileProvider : Dino.FileProvider, Object { } } - private class LimitInputStream : InputStream { + private class LimitInputStream : InputStream, PollableInputStream { InputStream inner; int64 remaining_size; @@ -55,6 +55,20 @@ public class FileProvider : Dino.FileProvider, Object { this.remaining_size = max_size; } + public bool can_poll() { + return inner is PollableInputStream && ((PollableInputStream)inner).can_poll(); + } + + public PollableSource create_source(Cancellable? cancellable = null) { + if (!can_poll()) throw new IOError.NOT_SUPPORTED("Stream is not pollable"); + return ((PollableInputStream)inner).create_source(cancellable); + } + + public bool is_readable() { + if (!can_poll()) throw new IOError.NOT_SUPPORTED("Stream is not pollable"); + return ((PollableInputStream)inner).is_readable(); + } + private ssize_t check_limit(ssize_t read) throws IOError { this.remaining_size -= read; if (remaining_size < 0) throw new IOError.FAILED("Stream length exceeded limit"); @@ -69,6 +83,11 @@ public class FileProvider : Dino.FileProvider, Object { return check_limit(yield inner.read_async(buffer, io_priority, cancellable)); } + public ssize_t read_nonblocking_fn(uint8[] buffer) throws Error { + if (!is_readable()) throw new IOError.WOULD_BLOCK("Stream is not readable"); + return read(buffer); + } + public override bool close(Cancellable? cancellable = null) throws IOError { return inner.close(cancellable); } diff --git a/xmpp-vala/CMakeLists.txt b/xmpp-vala/CMakeLists.txt index 4ad7f0e9..1b083943 100644 --- a/xmpp-vala/CMakeLists.txt +++ b/xmpp-vala/CMakeLists.txt @@ -7,15 +7,6 @@ find_packages(ENGINE_PACKAGES REQUIRED ICU ) -set(ENGINE_DEFINITIONS "") - -find_package(GIO) -if(GIO_VERSION VERSION_GREATER "2.60") - message(STATUS "ALPN support enabled") - set(ENGINE_DEFINITIONS ALPN_SUPPORT) -else() - message(STATUS "No ALPN support, needs GIO >= 2.60") -endif() set(ENGINE_EXTRA_OPTIONS ${MAIN_EXTRA_OPTIONS} --vapidir=${CMAKE_CURRENT_SOURCE_DIR}/vapi) vala_precompile(ENGINE_VALA_C @@ -152,8 +143,6 @@ GENERATE_HEADER xmpp-vala CUSTOM_VAPIS "${CMAKE_CURRENT_SOURCE_DIR}/src/glib_fixes.vapi" -DEFINITIONS - ${ENGINE_DEFINITIONS} OPTIONS ${ENGINE_EXTRA_OPTIONS} ) diff --git a/xmpp-vala/src/core/direct_tls_xmpp_stream.vala b/xmpp-vala/src/core/direct_tls_xmpp_stream.vala index a8ecfe25..26adc90f 100644 --- a/xmpp-vala/src/core/direct_tls_xmpp_stream.vala +++ b/xmpp-vala/src/core/direct_tls_xmpp_stream.vala @@ -19,7 +19,7 @@ public class Xmpp.DirectTlsXmppStream : TlsXmppStream { debug("Connecting to %s:%i (tls)", host, port); IOStream? io_stream = yield client.connect_to_host_async(host, port); TlsConnection tls_connection = TlsClientConnection.new(io_stream, new NetworkAddress(remote_name.to_string(), port)); -#if ALPN_SUPPORT +#if GLIB_2_60 tls_connection.set_advertised_protocols(ADVERTISED_PROTOCOLS); #endif tls_connection.accept_certificate.connect(on_invalid_certificate); |
