diff options
author | Ben Laurie <ben@openssl.org> | 2000-09-05 18:47:57 +0000 |
---|---|---|
committer | Ben Laurie <ben@openssl.org> | 2000-09-05 18:47:57 +0000 |
commit | f3f53c8ca59ffa6996f7a8dd525c6baf912ce692 (patch) | |
tree | f7a67145861f5cce18940c766a443d2c9ea40b82 /demos/state_machine/state_machine.c | |
parent | 2f043896d14f5b1ced08bcc8bec3e38e7a18d96f (diff) |
Handle WANT_READ more correctly (thanks to Bodo).
Diffstat (limited to 'demos/state_machine/state_machine.c')
-rw-r--r-- | demos/state_machine/state_machine.c | 29 |
1 files 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; } |