[PATCH] secur32: Use default recv timeout function
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Wed Jul 14 16:45:58 CDT 2021
Fixes a regression introduced in b8aaf86b2dbb8ecb3f7094cc40a0df89bb2add27
The poll function currently always returns 0 which signals to gnutls that
no data is available. However this might not be the case. Using the
default gnutls_system_recv_timeout function returns the expect value when
data is available.
Wine-bug: https://bugs.winehq.org/show_bug.cgi?id=51440
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
dlls/secur32/schannel_gnutls.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/dlls/secur32/schannel_gnutls.c b/dlls/secur32/schannel_gnutls.c
index bcf38e3f23f..ff678c6cee1 100644
--- a/dlls/secur32/schannel_gnutls.c
+++ b/dlls/secur32/schannel_gnutls.c
@@ -62,6 +62,8 @@ static void (*pgnutls_transport_set_pull_timeout_function)(gnutls_session_t,
int (*)(gnutls_transport_ptr_t, unsigned int));
static void (*pgnutls_dtls_set_mtu)(gnutls_session_t, unsigned int);
+static int (*pgnutls_system_recv_timeout)(gnutls_transport_ptr_t, unsigned int);
+
/* Not present in gnutls version < 3.2.0. */
static int (*pgnutls_alpn_get_selected_protocol)(gnutls_session_t, gnutls_datum_t *);
static int (*pgnutls_alpn_set_protocols)(gnutls_session_t, const gnutls_datum_t *,
@@ -165,6 +167,12 @@ static void compat_gnutls_transport_set_pull_timeout_function(gnutls_session_t s
FIXME("\n");
}
+static int compat_gnutls_system_recv_timeout(gnutls_transport_ptr_t ptr, unsigned int ms)
+{
+ FIXME("\n");
+ return -1;
+}
+
static int compat_gnutls_privkey_export_x509(gnutls_privkey_t privkey, gnutls_x509_privkey_t *key)
{
FIXME("\n");
@@ -292,7 +300,8 @@ static DWORD CDECL schan_get_enabled_protocols(void)
static int pull_timeout(gnutls_transport_ptr_t transport, unsigned int timeout)
{
- return 0;
+ TRACE("\n");
+ return pgnutls_system_recv_timeout(transport, timeout);
}
static BOOL CDECL schan_create_session(schan_session *session, schan_credentials *cred)
@@ -1024,6 +1033,12 @@ static BOOL gnutls_initialize(void)
WARN("gnutls_transport_set_pull_timeout_function not found\n");
pgnutls_transport_set_pull_timeout_function = compat_gnutls_transport_set_pull_timeout_function;
}
+
+ if (!(pgnutls_system_recv_timeout = dlsym(libgnutls_handle, "gnutls_system_recv_timeout")))
+ {
+ WARN("gnutls_system_recv_timeout not found\n");
+ pgnutls_system_recv_timeout = compat_gnutls_system_recv_timeout;
+ }
if (!(pgnutls_alpn_set_protocols = dlsym(libgnutls_handle, "gnutls_alpn_set_protocols")))
{
WARN("gnutls_alpn_set_protocols not found\n");
--
2.30.2
More information about the wine-devel
mailing list