int32_t NET_PRES_EncProviderReadReady0(void * providerData) { WOLFSSL* ssl; memcpy(&ssl, providerData, sizeof(WOLFSSL*)); int32_t ret = wolfSSL_pending(ssl); if (ret == 0) // wolfSSL_pending() doesn't check the underlying layer. { char buffer; if (wolfSSL_peek(ssl, &buffer, 1) == 0) { return 0; } ret = wolfSSL_pending(ssl); } return ret; }
static int _mod_wolftls_recv(void *vctx, char *data, int size) { int ret; _mod_wolftls_ctx_t *ctx = (_mod_wolftls_ctx_t *)vctx; #ifdef SOCKET_BLOCKING do { ret = wolfSSL_pending(ctx->ssl); } while (ret == 0); if (ret > 0) #endif { ret = wolfSSL_read(ctx->ssl, (unsigned char *)data, size); warn("wolfssl read %d", ret); } int err = wolfSSL_get_error(ctx->ssl, ret); warn("wolfssl err %d", err); if (ret != WOLFSSL_SUCCESS && err == SSL_ERROR_WANT_READ) ret = EINCOMPLETE; else if (ret < 0) { ret = EREJECT; } return ret; }