mod_bucketeer.c revision 368b36c5dbc201e30733aed9a3fd43742c67d11a
ea49840bfe8467a7d7bd4db27b1d4880a85511aberikabele/* Copyright 2002-2004 The Apache Software Foundation
ea49840bfe8467a7d7bd4db27b1d4880a85511aberikabele * Licensed under the Apache License, Version 2.0 (the "License");
4ab980a06412fd86f52a6d054fb7e26de155c530erikabele * you may not use this file except in compliance with the License.
4ab980a06412fd86f52a6d054fb7e26de155c530erikabele * You may obtain a copy of the License at
5a58787efeb02a1c3f06569d019ad81fd2efa06end * Unless required by applicable law or agreed to in writing, software
5a58787efeb02a1c3f06569d019ad81fd2efa06end * distributed under the License is distributed on an "AS IS" BASIS,
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen * See the License for the specific language governing permissions and
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen * limitations under the License.
af33a4994ae2ff15bc67d19ff1a7feb906745bf8rbowen * mod_bucketeer.c: split buckets whenever we find a control-char
5a58787efeb02a1c3f06569d019ad81fd2efa06end * Written by Ian Holsman
5a58787efeb02a1c3f06569d019ad81fd2efa06endstatic void *create_bucketeer_server_config(apr_pool_t *p, server_rec *s)
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh bucketeer_filter_config_t *c = apr_pcalloc(p, sizeof *c);
5d7e5de2da57434c8e68c8fa49cbf6d70ee0f817slivetypedef struct bucketeer_ctx_t
5d7e5de2da57434c8e68c8fa49cbf6d70ee0f817slivestatic apr_status_t bucketeer_out_filter(ap_filter_t *f,
5a58787efeb02a1c3f06569d019ad81fd2efa06end c = ap_get_module_config(r->server->module_config, &bucketeer_module);
aa8cf57195dfb7fa3d0baedf81f8be377946cea8slive /* If have a context, it means we've done this before successfully. */
aa8cf57195dfb7fa3d0baedf81f8be377946cea8slive if (!r->content_type || strncmp(r->content_type, "text/", 5)) {
aa8cf57195dfb7fa3d0baedf81f8be377946cea8slive /* We're cool with filtering this. */
aa8cf57195dfb7fa3d0baedf81f8be377946cea8slive ctx->bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
aa8cf57195dfb7fa3d0baedf81f8be377946cea8slive const char *data;
263168fdb45221efa79580de89bdde883b7561f7sf /* Okay, we've seen the EOS.
aa8cf57195dfb7fa3d0baedf81f8be377946cea8slive * Time to pass it along down the chain.
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem * Ignore flush buckets for the moment..
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem * we decide what to stream
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem /* metadata bucket */
aa8cf57195dfb7fa3d0baedf81f8be377946cea8slive if (len > 0) {
c6f41bc69d643835804e7e831776d3d46c6f5962slive for (i = 0; i < len; i++) {
ffb01336be79c64046b636e59fa8ddca8ec029edsf if (i - lastpos > 0) {
aa8cf57195dfb7fa3d0baedf81f8be377946cea8slive /* apr_brigade_cleanup(ctx->bb);*/
aa8cf57195dfb7fa3d0baedf81f8be377946cea8slive /* XXX: really should append this to the next 'real' bucket */
ea49840bfe8467a7d7bd4db27b1d4880a85511aberikabele ap_register_output_filter(bucketeerFilterName, bucketeer_out_filter,