| 4925 | } |
| 4926 | |
| 4927 | PROXY_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 | |
| 4971 | PROXY_DECLARE(int) ap_proxy_spool_input(request_rec *r, |
| 4972 | proxy_conn_rec *backend, |
no test coverage detected