]> granicus.if.org Git - apache/commitdiff
Work for more than one read. Catch read errors.
authorBen Laurie <ben@apache.org>
Sun, 11 Feb 2001 21:47:41 +0000 (21:47 +0000)
committerBen Laurie <ben@apache.org>
Sun, 11 Feb 2001 21:47:41 +0000 (21:47 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@88096 13f79535-47bb-0310-9956-ffa450edef68

modules/tls/mod_tls.c
modules/tls/openssl_state_machine.c

index d4795d29a4bad7e434417401385ae40ab16fd330..90b921789e6a209576c9cea9f49a4312edc55e2a 100644 (file)
@@ -81,6 +81,7 @@ typedef struct
     SSLStateMachine *pStateMachine;
     ap_filter_t *pInputFilter;
     ap_filter_t *pOutputFilter;
+    apr_bucket_brigade *pbbInput;
 } TLSFilterCtx;
 
 static void *create_tls_server_config(apr_pool_t *p, server_rec *s)
@@ -129,8 +130,8 @@ static int tls_filter_inserter(conn_rec *c)
                                            pConfig->szKeyFile);
 
     pCtx->pInputFilter=ap_add_input_filter(s_szTLSFilterName,pCtx,NULL,c);
-    pCtx->pOutputFilter=ap_add_output_filter(s_szTLSFilterName,pCtx,NULL,
-                                                c);
+    pCtx->pOutputFilter=ap_add_output_filter(s_szTLSFilterName,pCtx,NULL,c);
+    pCtx->pbbInput=apr_brigade_create(c->pool);
 
     return OK;
 }
@@ -225,17 +226,16 @@ static apr_status_t tls_in_filter(ap_filter_t *f,apr_bucket_brigade *pbbOut,
 {
     TLSFilterCtx *pCtx=f->ctx;
     apr_bucket *pbktIn;
-    apr_bucket_brigade *pbbIn;
     apr_read_type_e eReadType=eMode == AP_MODE_BLOCKING ? APR_BLOCK_READ :
       APR_NONBLOCK_READ;
 
     // XXX: we don't currently support peek
     assert(eMode != AP_MODE_PEEK);
 
-    pbbIn=apr_brigade_create(f->c->pool);
-    ap_get_brigade(f->next,pbbIn,eMode);
+    if(APR_BRIGADE_EMPTY(pCtx->pbbInput))
+       ap_get_brigade(f->next,pCtx->pbbInput,eMode);
 
-    APR_BRIGADE_FOREACH(pbktIn,pbbIn) {
+    APR_BRIGADE_FOREACH(pbktIn,pCtx->pbbInput) {
        const char *data;
        apr_size_t len;
        int n;
index 94d9cee1a1d4f3e24080e3ae5a35b3ec1427d9c0..d6d01bd878598e0241f137dba1ffa390693e3387 100644 (file)
@@ -207,6 +207,8 @@ int SSLStateMachine_read_extract(SSLStateMachine *pMachine,
            fprintf(stderr,"SSL_read wants more data\n");
            return 0;
            }
+       SSLStateMachine_print_error(pMachine,"SSL_read error");
+       exit(8);
        }
 
     fprintf(stderr,"%d bytes of decrypted data read from state machine\n",n);