MCPcopy Create free account
hub / github.com/apache/httpd / ap_proxy_read_input

Function ap_proxy_read_input

modules/proxy/proxy_util.c:4927–4969  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4925}
4926
4927PROXY_DECLARE(int) ap_proxy_read_input(request_rec *r,
4928 proxy_conn_rec *backend,
4929 apr_bucket_brigade *bb,
4930 apr_off_t max_read)
4931{
4932 apr_bucket_alloc_t *bucket_alloc = bb->bucket_alloc;
4933 apr_read_type_e block = (backend->connection) ? APR_NONBLOCK_READ
4934 : APR_BLOCK_READ;
4935 apr_status_t status;
4936 int rv;
4937
4938 for (;;) {
4939 apr_brigade_cleanup(bb);
4940 status = ap_get_brigade(r->input_filters, bb, AP_MODE_READBYTES,
4941 block, max_read);
4942 if (block == APR_BLOCK_READ
4943 || (!(status == APR_SUCCESS && APR_BRIGADE_EMPTY(bb))
4944 && !APR_STATUS_IS_EAGAIN(status))) {
4945 break;
4946 }
4947
4948 /* Flush and retry (blocking) */
4949 apr_brigade_cleanup(bb);
4950 rv = ap_proxy_pass_brigade(bucket_alloc, r, backend,
4951 backend->connection, bb, 1);
4952 if (rv != OK) {
4953 return rv;
4954 }
4955 block = APR_BLOCK_READ;
4956 }
4957
4958 if (status != APR_SUCCESS) {
4959 conn_rec *c = r->connection;
4960 ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, APLOGNO(02608)
4961 "read request body failed to %pI (%s)"
4962 " from %s (%s)", backend->addr,
4963 backend->hostname ? backend->hostname : "",
4964 c->client_ip, c->remote_host ? c->remote_host : "");
4965 return ap_map_http_request_error(status, HTTP_BAD_REQUEST);
4966 }
4967
4968 return OK;
4969}
4970
4971PROXY_DECLARE(int) ap_proxy_spool_input(request_rec *r,
4972 proxy_conn_rec *backend,

Callers 2

stream_reqbodyFunction · 0.85
ap_proxy_spool_inputFunction · 0.85

Calls 3

ap_get_brigadeFunction · 0.85
ap_proxy_pass_brigadeFunction · 0.85

Tested by

no test coverage detected