Commit ef9de7d1 authored by Ryan Bloom's avatar Ryan Bloom
Browse files

Next pass at the content-length filter. Not perfect quite yet, but

getting closer
Submitted by:	Greg Stein


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@87058 13f79535-47bb-0310-9956-ffa450edef68
parent 581635e2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -121,7 +121,7 @@ extern "C" {
#define SATISFY_ANY 1
#define SATISFY_NOSPEC 2

/* Make sure we don't write less than 4096 bytes at any one time.
/* Make sure we don't write less than 9000 bytes at any one time.
 */
#define AP_MIN_BYTES_TO_WRITE  9000

+9 −4
Original line number Diff line number Diff line
@@ -2240,6 +2240,7 @@ AP_DECLARE(void) ap_send_http_header(request_rec *r)
struct content_length_ctx {
    ap_bucket_brigade *saved;
    int compute_len;
    apr_size_t curr_len;
};

/* This filter computes the content length, but it also computes the number
@@ -2276,10 +2277,11 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_content_length_filter(ap_filter_t *f,
        else {
            length = e->length;
        }
        ctx->curr_len += length;
        r->bytes_sent += length;
    }

    if (r->bytes_sent < AP_MIN_BYTES_TO_WRITE) {
    if ((ctx->curr_len < AP_MIN_BYTES_TO_WRITE) && !send_it) {
        ap_save_brigade(f, &ctx->saved, &b);
        return APR_SUCCESS;
    }
@@ -2318,9 +2320,12 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_content_length_filter(ap_filter_t *f,
    }
    if (ctx->saved) {
        AP_BRIGADE_CONCAT(ctx->saved, b);
        ap_brigade_destroy(b);
        b = ctx->saved;
        ctx->saved = NULL;
    }

    ctx->curr_len = 0;
    return ap_pass_brigade(f->next, b);
}