forked from wolfSSL/wolfssl
Change inspired by Rizlik review comments.
This commit is contained in:
24
src/wolfio.c
24
src/wolfio.c
@ -2188,18 +2188,38 @@ int MicriumReceiveFrom(WOLFSSL *ssl, char *buf, int sz, void *ctx)
|
||||
#ifdef WOLFSSL_DTLS
|
||||
{
|
||||
int dtls_timeout = wolfSSL_dtls_get_current_timeout(ssl);
|
||||
if (ssl->options.handShakeDone)
|
||||
/* Don't use ssl->options.handShakeDone since it is true even if
|
||||
* we are in the process of renegotiation */
|
||||
byte doDtlsTimeout = ssl->options.handShakeState != HANDSHAKE_DONE;
|
||||
|
||||
#ifdef WOLFSSL_DTLS13
|
||||
if (ssl->options.dtls && IsAtLeastTLSv1_3(ssl->version)) {
|
||||
if (
|
||||
doDtlsTimeout =
|
||||
doDtlsTimeout || ssl->dtls13Rtx.rtxRecords != NULL ||
|
||||
(ssl->dtls13FastTimeout && ssl->dtls13Rtx.seenRecords != NULL);
|
||||
}
|
||||
#endif /* WOLFSSL_DTLS13 */
|
||||
|
||||
if (!doDtlsTimeout)
|
||||
dtls_timeout = 0;
|
||||
|
||||
if (!wolfSSL_dtls_get_using_nonblock(ssl)) {
|
||||
/* needs timeout in milliseconds */
|
||||
#ifdef WOLFSSL_DTLS13
|
||||
if (wolfSSL_dtls13_use_quick_timeout(ssl) &&
|
||||
IsAtLeastTLSv1_3(ssl->version) && (dtls_timeout >= 4)) {
|
||||
dtls_timeout = dtls_timeout / 4;
|
||||
}
|
||||
#endif /* WOLFSSL_DTLS13 */
|
||||
|
||||
NetSock_CfgTimeoutRxQ_Set(sd, dtls_timeout * 1000, &err);
|
||||
if (err != NET_SOCK_ERR_NONE) {
|
||||
WOLFSSL_MSG("NetSock_CfgTimeoutRxQ_Set failed");
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif /* WOLFSSL_DTLS */
|
||||
|
||||
ret = NetSock_RxDataFrom(sd, buf, sz, ssl->rflags, &peer, &peerSz,
|
||||
0, 0, 0, &err);
|
||||
|
Reference in New Issue
Block a user