From: Hans Leidekker Subject: [PATCH v2 4/5] secur32: Switch back to non-blocking mode for DTLS sessions. Message-Id: <20220127101130.1396531-4-hans@codeweavers.com> Date: Thu, 27 Jan 2022 11:11:29 +0100 From: Connor McAdams In order for DTLS retransmission to occur properly, we need to be in non-blocking mode. Signed-off-by: Connor McAdams Signed-off-by: Hans Leidekker --- dlls/secur32/schannel_gnutls.c | 7 +++---- dlls/secur32/tests/schannel.c | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/dlls/secur32/schannel_gnutls.c b/dlls/secur32/schannel_gnutls.c index ac51cbb5d9f..3f947870a73 100644 --- a/dlls/secur32/schannel_gnutls.c +++ b/dlls/secur32/schannel_gnutls.c @@ -461,14 +461,13 @@ static NTSTATUS schan_get_enabled_protocols( void *args ) static int pull_timeout(gnutls_transport_ptr_t transport, unsigned int timeout) { struct schan_transport *t = (struct schan_transport*)transport; - gnutls_session_t s = (gnutls_session_t)t->session; SIZE_T count = 0; TRACE("\n"); if (get_buffer(t, &t->in, &count)) return 1; - pgnutls_transport_set_errno(s, EAGAIN); - return -1; + + return 0; } static NTSTATUS schan_create_session( void *args ) @@ -483,7 +482,7 @@ static NTSTATUS schan_create_session( void *args ) if (cred->enabled_protocols & (SP_PROT_DTLS1_0_CLIENT | SP_PROT_DTLS1_2_CLIENT)) { - flags |= GNUTLS_DATAGRAM; + flags |= GNUTLS_DATAGRAM | GNUTLS_NONBLOCK; } err = pgnutls_init(s, flags); diff --git a/dlls/secur32/tests/schannel.c b/dlls/secur32/tests/schannel.c index afcc382927a..902a490a296 100644 --- a/dlls/secur32/tests/schannel.c +++ b/dlls/secur32/tests/schannel.c @@ -1706,7 +1706,7 @@ static void test_dtls(void) ok( ctx_handle.dwUpper == ctx_handle2.dwUpper, "dwUpper mismatch, expected %#lx, got %#lx\n", ctx_handle.dwUpper, ctx_handle2.dwUpper); /* With no new input buffer, output buffer length should match prior call. */ - todo_wine ok(buffers[1].pBuffers[0].cbBuffer == prev_buf_len, "Output buffer size mismatch, expected %#x, got %#x\n", + ok(buffers[1].pBuffers[0].cbBuffer == prev_buf_len, "Output buffer size mismatch, expected %#x, got %#x\n", prev_buf_len, buffers[1].pBuffers[0].cbBuffer); free_buffers( &buffers[0] ); -- 2.30.2