Loading modules/http2/h2_bucket_beam.c +29 −8 Original line number Diff line number Diff line Loading @@ -171,13 +171,34 @@ const apr_bucket_type_t h2_bucket_type_beam = { * h2_blist, a brigade without allocations ******************************************************************************/ APR_HOOK_STRUCT( APR_HOOK_LINK(beam_bucket) ) AP_IMPLEMENT_HOOK_RUN_FIRST(apr_bucket *, beam_bucket, (h2_bucket_beam *beam, apr_bucket_brigade *dest, const apr_bucket *src), (beam, dest, src), NULL) static apr_array_header_t *beamers; void h2_register_bucket_beamer(h2_bucket_beamer *beamer) { if (!beamers) { beamers = apr_array_make(apr_hook_global_pool, 10, sizeof(h2_bucket_beamer*)); } APR_ARRAY_PUSH(beamers, h2_bucket_beamer*) = beamer; } static apr_bucket *h2_beam_bucket(h2_bucket_beam *beam, apr_bucket_brigade *dest, const apr_bucket *src) { apr_bucket *b = NULL; int i; if (beamers) { for (i = 0; i < beamers->nelts && b == NULL; ++i) { h2_bucket_beamer *beamer; beamer = APR_ARRAY_IDX(beamers, i, h2_bucket_beamer*); b = beamer(beam, dest, src); } } return b; } apr_size_t h2_util_bl_print(char *buffer, apr_size_t bmax, const char *tag, const char *sep, Loading Loading @@ -860,7 +881,7 @@ transfer: ++transferred; } else { bgreen = ap_run_beam_bucket(beam, bb, bred); bgreen = h2_beam_bucket(beam, bb, bred); while (bgreen && bgreen != APR_BRIGADE_SENTINEL(bb)) { ++transferred; remain -= bgreen->length; Loading modules/http2/h2_bucket_beam.h +5 −3 Original line number Diff line number Diff line Loading @@ -373,8 +373,10 @@ int h2_beam_was_received(h2_bucket_beam *beam); apr_size_t h2_beam_get_files_beamed(h2_bucket_beam *beam); AP_DECLARE_HOOK(apr_bucket *, beam_bucket, (h2_bucket_beam *beam, apr_bucket_brigade *dest, const apr_bucket *src)) typedef apr_bucket *h2_bucket_beamer(h2_bucket_beam *beam, apr_bucket_brigade *dest, const apr_bucket *src); void h2_register_bucket_beamer(h2_bucket_beamer *beamer); #endif /* h2_bucket_beam_h */ modules/http2/h2_conn.c +2 −2 Original line number Diff line number Diff line Loading @@ -290,8 +290,8 @@ conn_rec *h2_slave_create(conn_rec *master, apr_uint32_t slave_id, * many streams. */ l = master->id; if (sizeof(long) >= 8 && l < APR_UINT32_MAX) { c->id = l|(((unsigned long)slave_id) << 32); if (sizeof(unsigned long) >= 8 && l < APR_UINT32_MAX) { c->id = l|((unsigned long)slave_id << 32); } else { c->id = l^(~slave_id); Loading modules/http2/h2_filter.c +1 −1 Original line number Diff line number Diff line Loading @@ -238,7 +238,7 @@ apr_status_t h2_bucket_observer_fire(apr_bucket *b, h2_bucket_event event) } const apr_bucket_type_t h2_bucket_type_observer = { "H2LAZY", 5, APR_BUCKET_METADATA, "H2OBS", 5, APR_BUCKET_METADATA, bucket_destroy, bucket_read, apr_bucket_setaside_noop, Loading modules/http2/h2_h2.c +2 −2 Original line number Diff line number Diff line Loading @@ -574,8 +574,8 @@ void h2_h2_register_hooks(void) ap_hook_fixups(h2_h2_late_fixups, NULL, NULL, APR_HOOK_LAST); /* special bucket type transfer through a h2_bucket_beam */ ap_hook_beam_bucket(h2_bucket_observer_beam, NULL, NULL, APR_HOOK_MIDDLE); ap_hook_beam_bucket(h2_bucket_headers_beam, NULL, NULL, APR_HOOK_MIDDLE); h2_register_bucket_beamer(h2_bucket_headers_beam); h2_register_bucket_beamer(h2_bucket_observer_beam); } int h2_h2_process_conn(conn_rec* c) Loading Loading
modules/http2/h2_bucket_beam.c +29 −8 Original line number Diff line number Diff line Loading @@ -171,13 +171,34 @@ const apr_bucket_type_t h2_bucket_type_beam = { * h2_blist, a brigade without allocations ******************************************************************************/ APR_HOOK_STRUCT( APR_HOOK_LINK(beam_bucket) ) AP_IMPLEMENT_HOOK_RUN_FIRST(apr_bucket *, beam_bucket, (h2_bucket_beam *beam, apr_bucket_brigade *dest, const apr_bucket *src), (beam, dest, src), NULL) static apr_array_header_t *beamers; void h2_register_bucket_beamer(h2_bucket_beamer *beamer) { if (!beamers) { beamers = apr_array_make(apr_hook_global_pool, 10, sizeof(h2_bucket_beamer*)); } APR_ARRAY_PUSH(beamers, h2_bucket_beamer*) = beamer; } static apr_bucket *h2_beam_bucket(h2_bucket_beam *beam, apr_bucket_brigade *dest, const apr_bucket *src) { apr_bucket *b = NULL; int i; if (beamers) { for (i = 0; i < beamers->nelts && b == NULL; ++i) { h2_bucket_beamer *beamer; beamer = APR_ARRAY_IDX(beamers, i, h2_bucket_beamer*); b = beamer(beam, dest, src); } } return b; } apr_size_t h2_util_bl_print(char *buffer, apr_size_t bmax, const char *tag, const char *sep, Loading Loading @@ -860,7 +881,7 @@ transfer: ++transferred; } else { bgreen = ap_run_beam_bucket(beam, bb, bred); bgreen = h2_beam_bucket(beam, bb, bred); while (bgreen && bgreen != APR_BRIGADE_SENTINEL(bb)) { ++transferred; remain -= bgreen->length; Loading
modules/http2/h2_bucket_beam.h +5 −3 Original line number Diff line number Diff line Loading @@ -373,8 +373,10 @@ int h2_beam_was_received(h2_bucket_beam *beam); apr_size_t h2_beam_get_files_beamed(h2_bucket_beam *beam); AP_DECLARE_HOOK(apr_bucket *, beam_bucket, (h2_bucket_beam *beam, apr_bucket_brigade *dest, const apr_bucket *src)) typedef apr_bucket *h2_bucket_beamer(h2_bucket_beam *beam, apr_bucket_brigade *dest, const apr_bucket *src); void h2_register_bucket_beamer(h2_bucket_beamer *beamer); #endif /* h2_bucket_beam_h */
modules/http2/h2_conn.c +2 −2 Original line number Diff line number Diff line Loading @@ -290,8 +290,8 @@ conn_rec *h2_slave_create(conn_rec *master, apr_uint32_t slave_id, * many streams. */ l = master->id; if (sizeof(long) >= 8 && l < APR_UINT32_MAX) { c->id = l|(((unsigned long)slave_id) << 32); if (sizeof(unsigned long) >= 8 && l < APR_UINT32_MAX) { c->id = l|((unsigned long)slave_id << 32); } else { c->id = l^(~slave_id); Loading
modules/http2/h2_filter.c +1 −1 Original line number Diff line number Diff line Loading @@ -238,7 +238,7 @@ apr_status_t h2_bucket_observer_fire(apr_bucket *b, h2_bucket_event event) } const apr_bucket_type_t h2_bucket_type_observer = { "H2LAZY", 5, APR_BUCKET_METADATA, "H2OBS", 5, APR_BUCKET_METADATA, bucket_destroy, bucket_read, apr_bucket_setaside_noop, Loading
modules/http2/h2_h2.c +2 −2 Original line number Diff line number Diff line Loading @@ -574,8 +574,8 @@ void h2_h2_register_hooks(void) ap_hook_fixups(h2_h2_late_fixups, NULL, NULL, APR_HOOK_LAST); /* special bucket type transfer through a h2_bucket_beam */ ap_hook_beam_bucket(h2_bucket_observer_beam, NULL, NULL, APR_HOOK_MIDDLE); ap_hook_beam_bucket(h2_bucket_headers_beam, NULL, NULL, APR_HOOK_MIDDLE); h2_register_bucket_beamer(h2_bucket_headers_beam); h2_register_bucket_beamer(h2_bucket_observer_beam); } int h2_h2_process_conn(conn_rec* c) Loading