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

* Let mod_proxy_wstunnel and mod_proxy_connect use ap_proxy_transfer_between_connections

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1728481 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Ruediger Pluem
2016-02-04 13:57:14 +00:00
parent fbf68524d3
commit b70e849980
2 changed files with 27 additions and 125 deletions

View File

@@ -143,55 +143,6 @@ static int proxy_connect_canon(request_rec *r, char *url)
return OK;
}
/* read available data (in blocks of CONN_BLKSZ) from c_i and copy to c_o */
static int proxy_connect_transfer(request_rec *r, conn_rec *c_i, conn_rec *c_o,
apr_bucket_brigade *bb_i,
apr_bucket_brigade *bb_o, char *name)
{
int rv;
#ifdef DEBUGGING
apr_off_t len;
#endif
do {
apr_brigade_cleanup(bb_i);
rv = ap_get_brigade(c_i->input_filters, bb_i, AP_MODE_READBYTES,
APR_NONBLOCK_READ, CONN_BLKSZ);
if (rv == APR_SUCCESS) {
if (c_o->aborted)
return APR_EPIPE;
if (APR_BRIGADE_EMPTY(bb_i))
break;
#ifdef DEBUGGING
len = -1;
apr_brigade_length(bb_i, 0, &len);
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(01016)
"read %" APR_OFF_T_FMT
" bytes from %s", len, name);
#endif
ap_proxy_buckets_lifetime_transform(r, bb_i, bb_o);
rv = ap_pass_brigade(c_o->output_filters, bb_o);
if (rv == APR_SUCCESS) {
ap_fflush(c_o->output_filters, bb_o);
}
else {
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO(01017)
"error on %s - ap_pass_brigade",
name);
}
} else if (!APR_STATUS_IS_EAGAIN(rv)) {
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, rv, r, APLOGNO(01018)
"error on %s - ap_get_brigade",
name);
}
} while (rv == APR_SUCCESS);
if (APR_STATUS_IS_EAGAIN(rv)) {
rv = APR_SUCCESS;
}
return rv;
}
/* CONNECT handler */
static int proxy_connect_handler(request_rec *r, proxy_worker *worker,
proxy_server_conf *conf,
@@ -445,9 +396,12 @@ static int proxy_connect_handler(request_rec *r, proxy_worker *worker,
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(01025)
"sock was readable");
#endif
done |= proxy_connect_transfer(r, backconn, c, bb_back,
bb_front, "sock")
!= APR_SUCCESS;
done |= ap_proxy_transfer_between_connections(r, backconn,
c, bb_back,
bb_front,
"sock", NULL,
CONN_BLKSZ, 1)
!= APR_SUCCESS;
}
else if (pollevent & APR_POLLERR) {
ap_log_rerror(APLOG_MARK, APLOG_NOTICE, 0, r, APLOGNO(01026)
@@ -463,9 +417,14 @@ static int proxy_connect_handler(request_rec *r, proxy_worker *worker,
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(01027)
"client was readable");
#endif
done |= proxy_connect_transfer(r, c, backconn, bb_front,
bb_back, "client")
!= APR_SUCCESS;
done |= ap_proxy_transfer_between_connections(r, c,
backconn,
bb_front,
bb_back,
"client",
NULL,
CONN_BLKSZ, 1)
!= APR_SUCCESS;
}
else if (pollevent & APR_POLLERR) {
ap_log_rerror(APLOG_MARK, APLOG_NOTICE, 0, r, APLOGNO(02827)