blob: 69d24f38a2eb73acfaddbce385053b221150227d [file] [log] [blame]
/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de)
*
* Licensed 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.
*/
#ifndef __mod_h2__h2_request__
#define __mod_h2__h2_request__
/* h2_request is the transformer of HTTP2 streams into HTTP/1.1 internal
* format that will be fed to various httpd input filters to finally
* become a request_rec to be handled by soemone.
*/
struct h2_to_h1;
struct h2_mplx;
struct h2_task;
typedef struct h2_request h2_request;
struct h2_request {
int id; /* stream id */
/* pseudo header values, see ch. 8.1.2.3 */
const char *method;
const char *scheme;
const char *authority;
const char *path;
apr_table_t *headers;
apr_table_t *trailers;
apr_time_t request_time;
apr_off_t content_length;
int chunked;
int eoh;
};
h2_request *h2_request_create(int id, apr_pool_t *pool);
h2_request *h2_request_createn(int id, apr_pool_t *pool,
const char *method, const char *scheme,
const char *authority, const char *path,
apr_table_t *headers);
void h2_request_destroy(h2_request *req);
apr_status_t h2_request_rwrite(h2_request *req, request_rec *r);
apr_status_t h2_request_add_header(h2_request *req, apr_pool_t *pool,
const char *name, size_t nlen,
const char *value, size_t vlen);
apr_status_t h2_request_add_trailer(h2_request *req, apr_pool_t *pool,
const char *name, size_t nlen,
const char *value, size_t vlen);
apr_status_t h2_request_end_headers(h2_request *req, apr_pool_t *pool, int eos);
void h2_request_copy(apr_pool_t *p, h2_request *dst, const h2_request *src);
/**
* Create a request_rec representing the h2_request to be
* processed on the given connection.
*
* @param req the h2 request to process
* @param conn the connection to process the request on
* @return the request_rec representing the request
*/
request_rec *h2_request_create_rec(const h2_request *req, conn_rec *conn);
#endif /* defined(__mod_h2__h2_request__) */