/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifdef CONFIG_FOR_HTTPD_TEST #if CONFIG_FOR_HTTPD_TEST SetHandler apreq_upload_test #endif #endif #define APACHE_HTTPD_TEST_HANDLER apreq_upload_test_handler #include "apache_httpd_test.h" #include "apreq_module.h" #include "apreq_param.h" #include "apreq_module_apache2.h" #include "apreq_util.h" #include "httpd.h" static int apreq_upload_test_handler(request_rec *r) { apreq_handle_t *req; const apreq_param_t *param; if (strcmp(r->handler, "apreq_upload_test") != 0) { return DECLINED; } req = apreq_handle_apache2(r) ; ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "starting apreq_upload_test"); ap_set_content_type(r, "text/plain"); param = apreq_body_get(req, "filename"); if (param == NULL) { ap_rputs("missing upload field", r); } else if (param->upload == NULL) { ap_rputs("not an upload field", r); } else { apr_table_t *info; /* upload headers */ apr_bucket_brigade *bb; /* upload contents */ apr_bucket *e; apr_size_t total = 0; info = param->info; bb = apr_brigade_create(r->pool, r->connection->bucket_alloc); apreq_brigade_copy(bb, param->upload); while ((e = APR_BRIGADE_FIRST(bb)) != APR_BRIGADE_SENTINEL(bb)) { apr_size_t dlen; const char *data; /* apr_bucket_read() has side effects on spool buckets, which * is why we read from a copy of the brigade - to conserve memory */ if (apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ)) { ap_rprintf(r, "bad bucket read"); break; } else { total += dlen; } apr_bucket_delete(e); } ap_rprintf(r, "%d", total); } ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "finished apreq_upload_test"); return OK; } APACHE_HTTPD_TEST_MODULE(apreq_upload_test);