secur32: Properly handle GNUTLS_E_AGAIN in (GnuTLS) schan_imp_recv().
This commit is contained in:
parent
65aed972c0
commit
929598fd00
|
@ -371,11 +371,23 @@ SECURITY_STATUS schan_imp_recv(schan_imp_session session, void *buffer,
|
|||
SIZE_T *length)
|
||||
{
|
||||
gnutls_session_t s = (gnutls_session_t)session;
|
||||
ssize_t ret = pgnutls_record_recv(s, buffer, *length);
|
||||
ssize_t ret;
|
||||
|
||||
again:
|
||||
ret = pgnutls_record_recv(s, buffer, *length);
|
||||
|
||||
if (ret >= 0)
|
||||
*length = ret;
|
||||
else if (ret == GNUTLS_E_AGAIN)
|
||||
{
|
||||
struct schan_transport *t = (struct schan_transport *)pgnutls_transport_get_ptr(s);
|
||||
SIZE_T count = 0;
|
||||
|
||||
if (schan_get_buffer(t, &t->in, &count))
|
||||
goto again;
|
||||
|
||||
return SEC_I_CONTINUE_NEEDED;
|
||||
}
|
||||
else
|
||||
{
|
||||
pgnutls_perror(ret);
|
||||
|
|
Loading…
Reference in New Issue