1
0
mirror of https://github.com/apache/httpd.git synced 2025-08-08 15:02:10 +03:00

Send the 'Close Alert' message to the peer upon closing a SSL session. This

required creating a new EOC (End-Of-Connection) bucket type to notify mod_ssl
that the connection is about to be closed.


Reviewed by: Joe Orton, Justin Erenkrantz


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@102793 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Madhusudan Mathihalli
2004-02-28 00:45:26 +00:00
parent 9e4e693414
commit 48c38a4533
5 changed files with 60 additions and 1 deletions

View File

@@ -100,6 +100,7 @@ typedef struct {
BIO *pbioWrite;
ap_filter_t *pInputFilter;
ap_filter_t *pOutputFilter;
int nobuffer; /* non-zero to prevent buffering */
} ssl_filter_ctx_t;
typedef struct {
@@ -193,7 +194,8 @@ static int bio_filter_out_write(BIO *bio, const char *in, int inl)
*/
BIO_clear_retry_flags(bio);
if (!outctx->length && (inl + outctx->blen < sizeof(outctx->buffer))) {
if (!outctx->length && (inl + outctx->blen < sizeof(outctx->buffer)) &&
!outctx->filter_ctx->nobuffer) {
/* the first two SSL_writes (of 1024 and 261 bytes)
* need to be in the same packet (vec[0].iov_base)
*/
@@ -1396,6 +1398,22 @@ static apr_status_t ssl_io_filter_output(ap_filter_t *f,
apr_bucket_delete(bucket);
}
}
else if (AP_BUCKET_IS_EOC(bucket)) {
/* The special "EOC" bucket means a shutdown is needed;
* - turn off buffering in bio_filter_out_write
* - issue the SSL_shutdown
*/
filter_ctx->nobuffer = 1;
status = ssl_filter_io_shutdown(filter_ctx, f->c, 0);
if (status != APR_SUCCESS) {
ap_log_error(APLOG_MARK, APLOG_INFO, status, NULL,
"SSL filter error shutting down I/O");
}
if ((status = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) {
return status;
}
break;
}
else {
/* filter output */
const char *data;