From f3f53c8ca59ffa6996f7a8dd525c6baf912ce692 Mon Sep 17 00:00:00 2001 From: Ben Laurie Date: Tue, 5 Sep 2000 18:47:57 +0000 Subject: [PATCH] Handle WANT_READ more correctly (thanks to Bodo). --- demos/state_machine/state_machine.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/demos/state_machine/state_machine.c b/demos/state_machine/state_machine.c index 0eb8e92c0c..0140fbca70 100644 --- a/demos/state_machine/state_machine.c +++ b/demos/state_machine/state_machine.c @@ -132,8 +132,6 @@ SSLStateMachine *SSLStateMachine_new(const char *szCertificateFile, die_unless(pMachine->pSSL); pMachine->pbioRead=BIO_new(BIO_s_mem()); - /* Set EOF to return 0 (-1 is the default) */ - BIO_ctrl(pMachine->pbioRead,BIO_C_SET_BUF_MEM_EOF_RETURN,0,NULL); pMachine->pbioWrite=BIO_new(BIO_s_mem()); @@ -165,15 +163,36 @@ int SSLStateMachine_read_extract(SSLStateMachine *pMachine, { fprintf(stderr,"Doing SSL_accept\n"); n=SSL_accept(pMachine->pSSL); - if(n < 0) - SSLStateMachine_print_error(pMachine,"SSL_accept failed"); if(n == 0) fprintf(stderr,"SSL_accept returned zero\n"); - assert(n >= 0); + if(n < 0) + { + int err; + + if((err=SSL_get_error(pMachine->pSSL,n)) == SSL_ERROR_WANT_READ) + { + fprintf(stderr,"SSL_accept wants more data\n"); + return 0; + } + + SSLStateMachine_print_error(pMachine,"SSL_accept error"); + exit(7); + } return 0; } n=SSL_read(pMachine->pSSL,aucBuf,nBuf); + if(n < 0) + { + int err=SSL_get_error(pMachine->pSSL,n); + + if(err == SSL_ERROR_WANT_READ) + { + fprintf(stderr,"SSL_read wants more data\n"); + return 0; + } + } + fprintf(stderr,"%d bytes of decrypted data read from state machine\n",n); return n; } -- 2.34.1