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

mod_ssl: release coalesced data when called from ap_filter_output_pending().

The purpose of ap_filter_output_pending() is to flush pending data, so
ssl_io_filter_coalesce() should honor that.

This allows mod_proxy to not care about mod_ssl coalescing filters when
tunneling between connections.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1879416 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Yann Ylavic
2020-07-01 23:16:04 +00:00
parent 4068630804
commit ea4d778cd6
2 changed files with 14 additions and 6 deletions

View File

@@ -4327,12 +4327,6 @@ PROXY_DECLARE(apr_status_t) ap_proxy_tunnel_create(proxy_tunnel_rec **ptunnel,
apr_socket_opt_set(tunnel->client->pfd->desc.s, APR_SO_NONBLOCK, 1); apr_socket_opt_set(tunnel->client->pfd->desc.s, APR_SO_NONBLOCK, 1);
apr_socket_opt_set(tunnel->origin->pfd->desc.s, APR_SO_NONBLOCK, 1); apr_socket_opt_set(tunnel->origin->pfd->desc.s, APR_SO_NONBLOCK, 1);
/* No coalescing filters */
ap_remove_output_filter_byhandle(c_i->output_filters,
"SSL/TLS Coalescing Filter");
ap_remove_output_filter_byhandle(c_o->output_filters,
"SSL/TLS Coalescing Filter");
/* Bidirectional non-HTTP stream will confuse mod_reqtimeoout */ /* Bidirectional non-HTTP stream will confuse mod_reqtimeoout */
ap_remove_input_filter_byhandle(c_i->input_filters, "reqtimeout"); ap_remove_input_filter_byhandle(c_i->input_filters, "reqtimeout");

View File

@@ -1715,6 +1715,20 @@ static apr_status_t ssl_io_filter_coalesce(ap_filter_t *f,
apr_size_t buffered = ctx ? ctx->bytes : 0; /* space used on entry */ apr_size_t buffered = ctx ? ctx->bytes : 0; /* space used on entry */
unsigned count = 0; unsigned count = 0;
/* Pass down everything if called from ap_filter_output_pending() */
if (APR_BRIGADE_EMPTY(bb)) {
if (!ctx || !ctx->bytes) {
return APR_SUCCESS;
}
e = apr_bucket_transient_create(ctx->buffer, ctx->bytes,
bb->bucket_alloc);
APR_BRIGADE_INSERT_TAIL(bb, e);
ctx->bytes = 0; /* buffer now emptied. */
return ap_pass_brigade(f->next, bb);
}
/* The brigade consists of zero-or-more small data buckets which /* The brigade consists of zero-or-more small data buckets which
* can be coalesced (referred to as the "prefix"), followed by the * can be coalesced (referred to as the "prefix"), followed by the
* remainder of the brigade. * remainder of the brigade.