diff options
Diffstat (limited to 'src/gnutls_io.c')
-rw-r--r-- | src/gnutls_io.c | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/src/gnutls_io.c b/src/gnutls_io.c index e1c84be..e92646b 100644 --- a/src/gnutls_io.c +++ b/src/gnutls_io.c | |||
@@ -273,10 +273,16 @@ static apr_status_t gnutls_io_input_read(mod_gnutls_handle_t * ctxt, | |||
273 | } | 273 | } |
274 | else { | 274 | else { |
275 | /* Some Other Error. Report it. Die. */ | 275 | /* Some Other Error. Report it. Die. */ |
276 | ap_log_error(APLOG_MARK, APLOG_INFO, ctxt->input_rc, | 276 | if(gnutls_error_is_fatal(rc)) { |
277 | ctxt->c->base_server, | 277 | ap_log_error(APLOG_MARK, APLOG_INFO, ctxt->input_rc, |
278 | "GnuTLS: Error reading data. (%d) '%s'", rc, | 278 | ctxt->c->base_server, |
279 | gnutls_strerror(rc)); | 279 | "GnuTLS: Error reading data. (%d) '%s'", rc, |
280 | gnutls_strerror(rc)); | ||
281 | } | ||
282 | else if(*len > 0) { | ||
283 | ctxt->input_rc = APR_SUCCESS; | ||
284 | break; | ||
285 | } | ||
280 | } | 286 | } |
281 | 287 | ||
282 | if (ctxt->input_rc == APR_SUCCESS) { | 288 | if (ctxt->input_rc == APR_SUCCESS) { |
@@ -449,9 +455,10 @@ apr_status_t mod_gnutls_filter_output(ap_filter_t * f, | |||
449 | 455 | ||
450 | while (!APR_BRIGADE_EMPTY(bb)) { | 456 | while (!APR_BRIGADE_EMPTY(bb)) { |
451 | apr_bucket *bucket = APR_BRIGADE_FIRST(bb); | 457 | apr_bucket *bucket = APR_BRIGADE_FIRST(bb); |
452 | if (APR_BUCKET_IS_EOS(bucket)) { | 458 | if (APR_BUCKET_IS_EOS(bucket) || AP_BUCKET_IS_EOC(bucket)) { |
453 | 459 | ||
454 | /* gnutls_bye(ctxt->session, GNUTLS_SHUT_RDWR); */ | 460 | gnutls_bye(ctxt->session, GNUTLS_SHUT_WR); |
461 | gnutls_deinit(ctxt->session); | ||
455 | 462 | ||
456 | if ((status = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) { | 463 | if ((status = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) { |
457 | return status; | 464 | return status; |
@@ -464,17 +471,6 @@ apr_status_t mod_gnutls_filter_output(ap_filter_t * f, | |||
464 | return status; | 471 | return status; |
465 | } | 472 | } |
466 | break; | 473 | break; |
467 | |||
468 | } | ||
469 | else if (AP_BUCKET_IS_EOC(bucket)) { | ||
470 | |||
471 | gnutls_bye(ctxt->session, GNUTLS_SHUT_WR); | ||
472 | gnutls_deinit(ctxt->session); | ||
473 | if ((status = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) { | ||
474 | return status; | ||
475 | } | ||
476 | break; | ||
477 | |||
478 | } | 474 | } |
479 | else { | 475 | else { |
480 | /* filter output */ | 476 | /* filter output */ |