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;
}
示例#2
0
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;
}