blob: 74586e2b7ea30424ed785f5c95fa6e565b58dbc9 [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_to_h1__
#define __mod_h2__h2_to_h1__
struct h2_mplx;
struct h2_task;
typedef struct h2_to_h1 h2_to_h1;
struct h2_to_h1 {
int stream_id;
apr_pool_t *pool;
h2_mplx *m;
const char *method;
const char *scheme;
const char *authority;
const char *path;
int chunked;
int eoh;
int eos;
int flushed;
int seen_host;
apr_off_t content_len;
apr_off_t remain_len;
apr_table_t *headers;
apr_bucket_brigade *bb;
};
/* Create a converter from a HTTP/2 request to a serialzation in
* HTTP/1.1 format. The serialized data will be written onto the
* given h2_mplx instance.
*/
h2_to_h1 *h2_to_h1_create(int stream_id, apr_pool_t *pool,
apr_bucket_alloc_t *bucket_alloc,
const char *method,
const char *scheme,
const char *authority,
const char *path,
struct h2_mplx *m);
/* Destroy the converter and free resources. */
void h2_to_h1_destroy(h2_to_h1 *to_h1);
/* Add a header to the serialization. Only valid to call after start
* and before end_headers.
*/
apr_status_t h2_to_h1_add_header(h2_to_h1 *to_h1,
const char *name, size_t nlen,
const char *value, size_t vlen);
apr_status_t h2_to_h1_add_headers(h2_to_h1 *to_h1, apr_table_t *headers);
/** End the request headers.
*/
apr_status_t h2_to_h1_end_headers(h2_to_h1 *to_h1,
struct h2_task *task, int eos);
/* Add request body data.
*/
apr_status_t h2_to_h1_add_data(h2_to_h1 *to_h1,
const char *data, size_t len);
/* Flush the converted data onto the h2_mplx instance.
*/
apr_status_t h2_to_h1_flush(h2_to_h1 *to_h1);
/* Close the request, flushed automatically.
*/
apr_status_t h2_to_h1_close(h2_to_h1 *to_h1);
#endif /* defined(__mod_h2__h2_to_h1__) */