blob: 796260d7927a4189d547670d9405da0ddb7d9b22 [file]
/* 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.
*/
#ifndef H3_REQUEST_H
#define H3_REQUEST_H
#include <httpd.h>
#include "h3_session.h"
typedef struct h3_conn_ctx_t h3_conn_ctx_t;
/**
* Resolve what the request path needs from other modules, once, at post_config.
*/
void h3_request_init(void);
/**
* Build a synthetic conn_rec for a freshly accepted QUIC session. The
* returned conn_rec has no underlying socket; it's used as a parent for
* request_recs handed to ap_process_request.
* @param session The owning session (provides server, pool, etc.).
* @return A new conn_rec, or NULL on pool allocation failure.
*/
conn_rec* h3_synth_conn(h3_session* session);
/**
* Take a fully-readable h3_stream and run it through Apache's request
* pipeline: build request_rec, invoke ap_process_request, capture the
* response, and submit it back to nghttp3.
* @param session The owning session.
* @param h3s The stream (must have complete request headers + body).
*/
void h3_process_request(h3_session* session, h3_stream* h3s);
/**
* Submit the final response headers to nghttp3 exactly once. The response body
* remains open and is supplied by h3_session_read_data.
*/
apr_status_t h3_response_start(request_rec* r, h3_conn_ctx_t* h3ctx);
#endif /* H3_REQUEST_H */