View | Details | Raw Unified | Return to bug 58177
Collapse All | Expand All

(-)modules/proxy/mod_proxy_http.c (-4 / +57 lines)
Lines 196-201 Link Here
196
    APR_BRIGADE_INSERT_TAIL(header_brigade, e);
196
    APR_BRIGADE_INSERT_TAIL(header_brigade, e);
197
}
197
}
198
198
199
static void add_trailer_line(const char * key, const char *val, apr_pool_t *p,
200
                             apr_bucket_alloc_t *bucket_alloc,
201
                             apr_bucket_brigade *bb)
202
{
203
    apr_bucket *e;
204
    char *buf;
205
206
    buf = apr_pstrcat(p, key, ": ", val, CRLF, NULL);
207
    ap_xlate_proto_to_ascii(buf, strlen(buf));
208
209
    e = apr_bucket_immortal_create(buf, strlen(buf), bucket_alloc);
210
    APR_BRIGADE_INSERT_TAIL(bb, e);
211
}
212
213
static void forward_declared_trailers(apr_pool_t *p, const request_rec *r,
214
                                      apr_bucket_alloc_t *bucket_alloc,
215
                                      apr_bucket_brigade *bb)
216
{
217
    const char *declared_trailers = apr_table_get(r->headers_in, "Trailer");
218
    if (declared_trailers) {
219
        char *mod_trailers = apr_pstrcat(p, declared_trailers, NULL);
220
        char *key;
221
        char *last = NULL;
222
        while ((key = apr_strtok(mod_trailers, ", ", &last))) {
223
            const char *value = apr_table_get(r->trailers_in, key);
224
            if (value) {
225
                add_trailer_line(key, value, p, bucket_alloc, bb);
226
            }
227
            mod_trailers = last;
228
        }
229
    }
230
}
231
199
static void add_cl(apr_pool_t *p,
232
static void add_cl(apr_pool_t *p,
200
                   apr_bucket_alloc_t *bucket_alloc,
233
                   apr_bucket_alloc_t *bucket_alloc,
201
                   apr_bucket_brigade *header_brigade,
234
                   apr_bucket_brigade *header_brigade,
Lines 357-366 Link Here
357
        bb = input_brigade;
390
        bb = input_brigade;
358
    }
391
    }
359
392
360
    e = apr_bucket_immortal_create(ASCII_ZERO ASCII_CRLF
393
    if (apr_is_empty_table(r->trailers_in)) {
361
                                   /* <trailers> */
394
        e = apr_bucket_immortal_create(ASCII_ZERO ASCII_CRLF
362
                                   ASCII_CRLF,
395
                                               /* <trailers> */
363
                                   5, bucket_alloc);
396
                                               ASCII_CRLF,
397
                                       5, bucket_alloc);
398
    } else {
399
        e = apr_bucket_immortal_create(ASCII_ZERO ASCII_CRLF,
400
                                       3, bucket_alloc);
401
        APR_BRIGADE_INSERT_TAIL(bb, e);
402
        forward_declared_trailers(p, r, bucket_alloc, bb);
403
        e = apr_bucket_immortal_create(ASCII_CRLF, 2, bucket_alloc);
404
    }
364
    APR_BRIGADE_INSERT_TAIL(bb, e);
405
    APR_BRIGADE_INSERT_TAIL(bb, e);
365
406
366
    if (apr_table_get(r->subprocess_env, "proxy-sendextracrlf")) {
407
    if (apr_table_get(r->subprocess_env, "proxy-sendextracrlf")) {
Lines 982-987 Link Here
982
        e = apr_bucket_pool_create(buf, strlen(buf), p, c->bucket_alloc);
1023
        e = apr_bucket_pool_create(buf, strlen(buf), p, c->bucket_alloc);
983
        APR_BRIGADE_INSERT_TAIL(header_brigade, e);
1024
        APR_BRIGADE_INSERT_TAIL(header_brigade, e);
984
    }
1025
    }
1026
    /** pass tailer header and enforce chunked */
1027
    if (*old_te_val) {
1028
        const char *trailer = apr_table_get(r->headers_in, "Trailer");
1029
        if (trailer) {
1030
            char *buf = apr_pstrcat(p, "Trailer: ", trailer, CRLF, NULL);
1031
            ap_xlate_proto_to_ascii(buf, strlen(buf));
1032
            APR_BRIGADE_INSERT_TAIL(header_brigade,
1033
                                    apr_bucket_pool_create(buf, strlen(buf),
1034
                                                           p, bucket_alloc));
1035
            *rb_method = RB_STREAM_CHUNKED;
1036
        }
1037
    }
985
1038
986
    return OK;
1039
    return OK;
987
}
1040
}

Return to bug 58177