mirror of
https://github.com/apache/httpd.git
synced 2025-04-18 22:24:07 +03:00
*) core/mod_http: use REQUEST meta buckets and a new HTTP/1.x specific input filter to separate the handling for HTTP requests from the handling of HTTP/1.x request parsing and checks. A new HTTP1_REQUEST_IN filter installs itself on http/1.1 connections before a request is being read. It generates either a REQUEST meta bucket on success or an ERROR bucket with the proposed response status. The core connection processing, relying on ap_read_request(), now expects a REQUEST or ERROR bucket from the input filters and is agnostic to specific HTTP versions and how they bring requests into the server. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1899799 13f79535-47bb-0310-9956-ffa450edef68
126 lines
4.3 KiB
C
126 lines
4.3 KiB
C
/* 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.
|
|
*/
|
|
|
|
|
|
/**
|
|
* @file mod_core.h
|
|
* @brief mod_core private header file
|
|
*
|
|
* @defgroup MOD_CORE mod_core
|
|
* @ingroup APACHE_MODS
|
|
* @{
|
|
*/
|
|
|
|
#ifndef MOD_CORE_H
|
|
#define MOD_CORE_H
|
|
|
|
#include "apr.h"
|
|
#include "apr_buckets.h"
|
|
|
|
#include "httpd.h"
|
|
#include "http_protocol.h"
|
|
#include "util_filter.h"
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Handles for core filters */
|
|
AP_DECLARE_DATA extern ap_filter_rec_t *ap_http_input_filter_handle;
|
|
AP_DECLARE_DATA extern ap_filter_rec_t *ap_h1_request_in_filter_handle;
|
|
AP_DECLARE_DATA extern ap_filter_rec_t *ap_h1_body_in_filter_handle;
|
|
AP_DECLARE_DATA extern ap_filter_rec_t *ap_http_header_filter_handle;
|
|
AP_DECLARE_DATA extern ap_filter_rec_t *ap_chunk_filter_handle;
|
|
AP_DECLARE_DATA extern ap_filter_rec_t *ap_http_outerror_filter_handle;
|
|
AP_DECLARE_DATA extern ap_filter_rec_t *ap_byterange_filter_handle;
|
|
|
|
/*
|
|
* These (input) filters are internal to the mod_core operation.
|
|
*/
|
|
apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
|
|
ap_input_mode_t mode, apr_read_type_e block,
|
|
apr_off_t readbytes);
|
|
|
|
apr_status_t ap_h1_request_in_filter(ap_filter_t *f, apr_bucket_brigade *bb,
|
|
ap_input_mode_t mode, apr_read_type_e block,
|
|
apr_off_t readbytes);
|
|
|
|
apr_status_t ap_h1_body_in_filter(ap_filter_t *f, apr_bucket_brigade *b,
|
|
ap_input_mode_t mode, apr_read_type_e block,
|
|
apr_off_t readbytes);
|
|
|
|
/* HTTP/1.1 response formatting filter. */
|
|
apr_status_t ap_h1_response_out_filter(ap_filter_t *f, apr_bucket_brigade *b);
|
|
|
|
/* HTTP/1.1 chunked transfer encoding filter. */
|
|
apr_status_t ap_http_chunk_filter(ap_filter_t *f, apr_bucket_brigade *b);
|
|
|
|
/* Filter to handle any error buckets on output */
|
|
apr_status_t ap_http_outerror_filter(ap_filter_t *f,
|
|
apr_bucket_brigade *b);
|
|
|
|
char *ap_response_code_string(request_rec *r, int error_index);
|
|
|
|
/**
|
|
* Send the minimal part of an HTTP response header.
|
|
* @param r The current request
|
|
* @param bb The brigade to add the header to.
|
|
* @warning Modules should be very careful about using this, and should
|
|
* the default behavior. Much of the HTTP/1.1 implementation
|
|
* correctness depends on the full headers.
|
|
* @fn void ap_basic_http_header(request_rec *r, apr_bucket_brigade *bb)
|
|
*/
|
|
AP_DECLARE(void) ap_basic_http_header(request_rec *r, apr_bucket_brigade *bb);
|
|
|
|
/**
|
|
* Send an appropriate response to an http TRACE request.
|
|
* @param r The current request
|
|
* @note returns DONE or the HTTP status error if it handles the TRACE,
|
|
* or DECLINED if the request was not for TRACE.
|
|
* request method was not TRACE.
|
|
*/
|
|
AP_DECLARE_NONSTD(int) ap_send_http_trace(request_rec *r);
|
|
|
|
/**
|
|
* Send an appropriate response to an http OPTIONS request.
|
|
* @param r The current request
|
|
*/
|
|
AP_DECLARE(int) ap_send_http_options(request_rec *r);
|
|
|
|
/* Used for multipart/byteranges boundary string */
|
|
AP_DECLARE_DATA extern const char *ap_multipart_boundary;
|
|
|
|
/* Init RNG at startup */
|
|
AP_CORE_DECLARE(void) ap_init_rng(apr_pool_t *p);
|
|
/* Update RNG state in parent after fork */
|
|
AP_CORE_DECLARE(void) ap_random_parent_after_fork(void);
|
|
|
|
/**
|
|
* Set the keepalive status for this request based on the response
|
|
* @param r The current request
|
|
* @param resp The response being send
|
|
* @return 1 if keepalive can be set, 0 otherwise
|
|
*/
|
|
AP_CORE_DECLARE(int) ap_h1_set_keepalive(request_rec *r, ap_bucket_response *resp);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* !MOD_CORE_H */
|
|
/** @} */
|