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 |
} |