]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
*) mod_http2: remove internal bucket beamer registry and just
authorStefan Eissing <icing@apache.org>
Mon, 21 Mar 2022 09:02:51 +0000 (09:02 +0000)
committerStefan Eissing <icing@apache.org>
Mon, 21 Mar 2022 09:02:51 +0000 (09:02 +0000)
     copy well-known meta buckets in a beam. Was too generic.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1899105 13f79535-47bb-0310-9956-ffa450edef68

modules/http2/h2_bucket_beam.c
modules/http2/h2_bucket_beam.h
modules/http2/h2_c1.c
modules/http2/h2_headers.c
modules/http2/h2_headers.h

index 9deb971e76a14298c171eebb52a36733a22d5d42..60e48c0f3b7084e19193a879c96b3fcd3f3ca8de 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "h2_private.h"
 #include "h2_conn_ctx.h"
+#include "h2_headers.h"
 #include "h2_util.h"
 #include "h2_bucket_beam.h"
 
     } while (0)
 
 
-/* registry for bucket converting `h2_bucket_beamer` functions */
-static apr_array_header_t *beamers;
-
-static apr_status_t cleanup_beamers(void *dummy)
-{
-    (void)dummy;
-    beamers = NULL;
-    return APR_SUCCESS;
-}
-
-void h2_register_bucket_beamer(h2_bucket_beamer *beamer)
-{
-    if (!beamers) {
-        apr_pool_cleanup_register(apr_hook_global_pool, NULL,
-                                  cleanup_beamers, apr_pool_cleanup_null);
-        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;
-}
-
 static int is_empty(h2_bucket_beam *beam);
 static apr_off_t get_buffered_data_len(h2_bucket_beam *beam);
 
@@ -665,22 +628,14 @@ transfer:
             else if (APR_BUCKET_IS_FLUSH(bsender)) {
                 brecv = apr_bucket_flush_create(bb->bucket_alloc);
             }
+            else if (H2_BUCKET_IS_HEADERS(bsender)) {
+                brecv = h2_bucket_headers_clone(bsender, bb->p, bb->bucket_alloc);
+            }
             else if (AP_BUCKET_IS_ERROR(bsender)) {
                 ap_bucket_error *eb = (ap_bucket_error *)bsender;
                 brecv = ap_bucket_error_create(eb->status, eb->data,
                                                 bb->p, bb->bucket_alloc);
             }
-            else {
-                /* Does someone else know how to make a proxy for
-                 * the bucket? Ask the callbacks registered for this. */
-                brecv = h2_beam_bucket(beam, bb, bsender);
-                while (brecv && brecv != APR_BRIGADE_SENTINEL(bb)) {
-                    ++transferred;
-                    remain -= brecv->length;
-                    brecv = APR_BUCKET_NEXT(brecv);
-                }
-                brecv = NULL;
-            }
         }
         else if (bsender->length == 0) {
             /* nop */
index ea9f58100da93f70a5c10d5b9a6f7b0b1f626f10..0e5111aab814be43c266fb4b968793b17442b802 100644 (file)
@@ -234,10 +234,4 @@ apr_off_t h2_beam_get_buffered(h2_bucket_beam *beam);
  */
 apr_off_t h2_beam_get_mem_used(h2_bucket_beam *beam);
 
-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 */
index 5be7e907e4af4b8150d7e37e5e366fa8f9ffd793..6388985aa1a1f6a00afa053fd9c6034a8edb3062 100644 (file)
@@ -327,8 +327,5 @@ void h2_c1_register_hooks(void)
     /* One last chance to properly say goodbye if we have not done so
      * already. */
     ap_hook_pre_close_connection(h2_c1_hook_pre_close, NULL, mod_ssl, APR_HOOK_LAST);
-
-    /* special bucket type transfer through a h2_bucket_beam */
-    h2_register_bucket_beamer(h2_bucket_headers_beam);
 }
 
index 3aab859c7bf3512e7913c1d60d0564774538bc7e..fbeeba3901756b3a5c9b20624610d216314ee524 100644 (file)
@@ -98,18 +98,13 @@ const apr_bucket_type_t h2_bucket_type_headers = {
     apr_bucket_shared_copy
 };
 
-apr_bucket *h2_bucket_headers_beam(struct h2_bucket_beam *beam,
-                                    apr_bucket_brigade *dest,
-                                    const apr_bucket *src)
+apr_bucket *h2_bucket_headers_clone(apr_bucket *src, apr_pool_t *p, apr_bucket_alloc_t *list)
 {
-    if (H2_BUCKET_IS_HEADERS(src)) {
-        h2_headers *src_headers = ((h2_bucket_headers *)src->data)->headers;
-        apr_bucket *b = h2_bucket_headers_create(dest->bucket_alloc, 
-                                                 h2_headers_clone(dest->p, src_headers));
-        APR_BRIGADE_INSERT_TAIL(dest, b);
-        return b;
-    }
-    return NULL;
+    h2_headers *src_headers;
+
+    AP_DEBUG_ASSERT(H2_BUCKET_IS_HEADERS(src));
+    src_headers = ((h2_bucket_headers *)src->data)->headers;
+    return h2_bucket_headers_create(list, h2_headers_clone(p, src_headers));
 }
 
 
index dfe1429e18a8ba42fe01ab2dd2495aaf8176c73f..61ba17848d6edf0870411e7d4e8df0388d11f6ac 100644 (file)
@@ -32,9 +32,9 @@ apr_bucket * h2_bucket_headers_create(apr_bucket_alloc_t *list,
                                        
 h2_headers *h2_bucket_headers_get(apr_bucket *b);
 
-apr_bucket *h2_bucket_headers_beam(struct h2_bucket_beam *beam,
-                                    apr_bucket_brigade *dest,
-                                    const apr_bucket *src);
+apr_bucket *h2_bucket_headers_clone(apr_bucket *src,
+                                    apr_pool_t *p,
+                                    apr_bucket_alloc_t *list);
 
 /**
  * Create the headers from the given status and headers