diff options
author | Marvin W <git@larma.de> | 2022-11-04 15:29:18 -0600 |
---|---|---|
committer | Marvin W <git@larma.de> | 2022-11-04 15:45:48 -0600 |
commit | e62955d3cf266a7f7ff0f2085a64f1c99021127c (patch) | |
tree | a376d6f6c8f7d040635ee213d031789177e1b3af | |
parent | 6e37f3fe3fa0f4ce9a25a91e9d97191c8e4abec1 (diff) | |
download | dino-e62955d3cf266a7f7ff0f2085a64f1c99021127c.tar.gz dino-e62955d3cf266a7f7ff0f2085a64f1c99021127c.zip |
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 7928dc81..1433a74f 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 de89f326..0513d597 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 @@ -154,8 +145,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 8819e2df..aec17acd 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); |