mirror of
https://github.com/apache/httpd.git
synced 2025-08-08 15:02:10 +03:00
mod_http2: mergine trunk+2.4.x code divergences back into a single source with proper MMN checks.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1849296 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
#include <apr_strings.h>
|
||||
|
||||
#include <ap_mpm.h>
|
||||
#include <ap_mmn.h>
|
||||
|
||||
#include <httpd.h>
|
||||
#include <http_core.h>
|
||||
@@ -315,8 +316,14 @@ conn_rec *h2_slave_create(conn_rec *master, int slave_id, apr_pool_t *parent)
|
||||
c->notes = apr_table_make(pool, 5);
|
||||
c->input_filters = NULL;
|
||||
c->output_filters = NULL;
|
||||
#if AP_MODULE_MAGIC_AT_LEAST(20180903, 1)
|
||||
c->filter_conn_ctx = NULL;
|
||||
#endif
|
||||
c->bucket_alloc = apr_bucket_alloc_create(pool);
|
||||
#if !AP_MODULE_MAGIC_AT_LEAST(20180720, 1)
|
||||
c->data_in_input_filters = 0;
|
||||
c->data_in_output_filters = 0;
|
||||
#endif
|
||||
/* prevent mpm_event from making wrong assumptions about this connection,
|
||||
* like e.g. using its socket for an async read check. */
|
||||
c->clogging_input_filters = 1;
|
||||
|
@@ -60,7 +60,6 @@ const char *H2_MAGIC_TOKEN = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n";
|
||||
/*******************************************************************************
|
||||
* The optional mod_ssl functions we need.
|
||||
*/
|
||||
static APR_OPTIONAL_FN_TYPE(ssl_engine_disable) *opt_ssl_engine_disable;
|
||||
static APR_OPTIONAL_FN_TYPE(ssl_is_https) *opt_ssl_is_https;
|
||||
static APR_OPTIONAL_FN_TYPE(ssl_var_lookup) *opt_ssl_var_lookup;
|
||||
|
||||
@@ -446,7 +445,6 @@ apr_status_t h2_h2_init(apr_pool_t *pool, server_rec *s)
|
||||
{
|
||||
(void)pool;
|
||||
ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, s, "h2_h2, child_init");
|
||||
opt_ssl_engine_disable = APR_RETRIEVE_OPTIONAL_FN(ssl_engine_disable);
|
||||
opt_ssl_is_https = APR_RETRIEVE_OPTIONAL_FN(ssl_is_https);
|
||||
opt_ssl_var_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
|
||||
|
||||
|
@@ -17,6 +17,7 @@
|
||||
#include <assert.h>
|
||||
|
||||
#include <apr_strings.h>
|
||||
#include <ap_mmn.h>
|
||||
|
||||
#include <httpd.h>
|
||||
#include <http_core.h>
|
||||
@@ -206,13 +207,75 @@ h2_request *h2_request_clone(apr_pool_t *p, const h2_request *src)
|
||||
return dst;
|
||||
}
|
||||
|
||||
#if !AP_MODULE_MAGIC_AT_LEAST(20150222, 13)
|
||||
static request_rec *my_ap_create_request(conn_rec *c)
|
||||
{
|
||||
apr_pool_t *p;
|
||||
request_rec *r;
|
||||
|
||||
apr_pool_create(&p, c->pool);
|
||||
apr_pool_tag(p, "request");
|
||||
r = apr_pcalloc(p, sizeof(request_rec));
|
||||
AP_READ_REQUEST_ENTRY((intptr_t)r, (uintptr_t)c);
|
||||
r->pool = p;
|
||||
r->connection = c;
|
||||
r->server = c->base_server;
|
||||
|
||||
r->user = NULL;
|
||||
r->ap_auth_type = NULL;
|
||||
|
||||
r->allowed_methods = ap_make_method_list(p, 2);
|
||||
|
||||
r->headers_in = apr_table_make(r->pool, 5);
|
||||
r->trailers_in = apr_table_make(r->pool, 5);
|
||||
r->subprocess_env = apr_table_make(r->pool, 25);
|
||||
r->headers_out = apr_table_make(r->pool, 12);
|
||||
r->err_headers_out = apr_table_make(r->pool, 5);
|
||||
r->trailers_out = apr_table_make(r->pool, 5);
|
||||
r->notes = apr_table_make(r->pool, 5);
|
||||
|
||||
r->request_config = ap_create_request_config(r->pool);
|
||||
/* Must be set before we run create request hook */
|
||||
|
||||
r->proto_output_filters = c->output_filters;
|
||||
r->output_filters = r->proto_output_filters;
|
||||
r->proto_input_filters = c->input_filters;
|
||||
r->input_filters = r->proto_input_filters;
|
||||
ap_run_create_request(r);
|
||||
r->per_dir_config = r->server->lookup_defaults;
|
||||
|
||||
r->sent_bodyct = 0; /* bytect isn't for body */
|
||||
|
||||
r->read_length = 0;
|
||||
r->read_body = REQUEST_NO_BODY;
|
||||
|
||||
r->status = HTTP_OK; /* Until further notice */
|
||||
r->header_only = 0;
|
||||
r->the_request = NULL;
|
||||
|
||||
/* Begin by presuming any module can make its own path_info assumptions,
|
||||
* until some module interjects and changes the value.
|
||||
*/
|
||||
r->used_path_info = AP_REQ_DEFAULT_PATH_INFO;
|
||||
|
||||
r->useragent_addr = c->client_addr;
|
||||
r->useragent_ip = c->client_ip;
|
||||
|
||||
return r;
|
||||
}
|
||||
#endif
|
||||
|
||||
request_rec *h2_request_create_rec(const h2_request *req, conn_rec *c)
|
||||
{
|
||||
int access_status = HTTP_OK;
|
||||
const char *rpath;
|
||||
const char *s;
|
||||
|
||||
#if AP_MODULE_MAGIC_AT_LEAST(20150222, 13)
|
||||
request_rec *r = ap_create_request(c);
|
||||
#else
|
||||
request_rec *r = my_ap_create_request(c);
|
||||
#endif
|
||||
|
||||
r->headers_in = apr_table_clone(r->pool, req->headers);
|
||||
|
||||
@@ -291,3 +354,4 @@ traceout:
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@@ -27,7 +27,7 @@
|
||||
* @macro
|
||||
* Version number of the http2 module as c string
|
||||
*/
|
||||
#define MOD_HTTP2_VERSION "1.11.4-DEV"
|
||||
#define MOD_HTTP2_VERSION "1.12.0-DEV"
|
||||
|
||||
/**
|
||||
* @macro
|
||||
@@ -35,7 +35,7 @@
|
||||
* release. This is a 24 bit number with 8 bits for major number, 8 bits
|
||||
* for minor and 8 bits for patch. Version 1.2.3 becomes 0x010203.
|
||||
*/
|
||||
#define MOD_HTTP2_VERSION_NUM 0x010b04
|
||||
#define MOD_HTTP2_VERSION_NUM 0x010c00
|
||||
|
||||
|
||||
#endif /* mod_h2_h2_version_h */
|
||||
|
@@ -16,6 +16,7 @@
|
||||
|
||||
#include <nghttp2/nghttp2.h>
|
||||
|
||||
#include <ap_mmn.h>
|
||||
#include <httpd.h>
|
||||
#include <mod_proxy.h>
|
||||
#include "mod_http2.h"
|
||||
@@ -604,7 +605,9 @@ reconnect:
|
||||
/* Still more to do, tear down old conn and start over */
|
||||
if (ctx->p_conn) {
|
||||
ctx->p_conn->close = 1;
|
||||
#if AP_MODULE_MAGIC_AT_LEAST(20140207, 2)
|
||||
proxy_run_detach_backend(r, ctx->p_conn);
|
||||
#endif
|
||||
ap_proxy_release_connection(ctx->proxy_func, ctx->p_conn, ctx->server);
|
||||
ctx->p_conn = NULL;
|
||||
}
|
||||
@@ -623,7 +626,9 @@ cleanup:
|
||||
/* close socket when errors happened or session shut down (EOF) */
|
||||
ctx->p_conn->close = 1;
|
||||
}
|
||||
#if AP_MODULE_MAGIC_AT_LEAST(20140207, 2)
|
||||
proxy_run_detach_backend(ctx->rbase, ctx->p_conn);
|
||||
#endif
|
||||
ap_proxy_release_connection(ctx->proxy_func, ctx->p_conn, ctx->server);
|
||||
ctx->p_conn = NULL;
|
||||
}
|
||||
|
Reference in New Issue
Block a user