This commit is contained in:
MozerBYU 2026-05-26 15:43:02 -06:00 committed by GitHub
commit 79e192dcee
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 104 additions and 0 deletions

View file

@ -5710,6 +5710,40 @@ ngx_ssl_get_session_reused(ngx_connection_t *c, ngx_pool_t *pool, ngx_str_t *s)
}
ngx_int_t
ngx_ssl_get_handshake_rtt(ngx_connection_t *c, ngx_pool_t *pool, ngx_str_t *s)
{
#if (OPENSSL_VERSION_NUMBER >= 0x30200000L)
uint64_t rtt;
u_char *p;
if (SSL_get_handshake_rtt(c->ssl->connection, &rtt) > 0) {
if (pool == NULL) {
pool = c->pool;
}
s->data = ngx_pnalloc(pool, NGX_INT64_LEN + 1);
if (s->data == NULL) {
return NGX_ERROR;
}
p = ngx_sprintf(s->data, "%uL", rtt);
*p = '\0';
s->len = p - s->data;
return NGX_OK;
}
#endif
s->len = 0;
s->data = (u_char *) "";
return NGX_OK;
}
ngx_int_t
ngx_ssl_get_early_data(ngx_connection_t *c, ngx_pool_t *pool, ngx_str_t *s)
{

View file

@ -341,6 +341,8 @@ ngx_int_t ngx_ssl_get_session_id(ngx_connection_t *c, ngx_pool_t *pool,
ngx_str_t *s);
ngx_int_t ngx_ssl_get_session_reused(ngx_connection_t *c, ngx_pool_t *pool,
ngx_str_t *s);
ngx_int_t ngx_ssl_get_handshake_rtt(ngx_connection_t *c, ngx_pool_t *pool,
ngx_str_t *s);
ngx_int_t ngx_ssl_get_early_data(ngx_connection_t *c, ngx_pool_t *pool,
ngx_str_t *s);
ngx_int_t ngx_ssl_get_server_name(ngx_connection_t *c, ngx_pool_t *pool,

View file

@ -32,6 +32,8 @@ static int ngx_http_ssl_alpn_select(ngx_ssl_conn_t *ssl_conn,
static ngx_int_t ngx_http_ssl_static_variable(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_ssl_handshake_rtt_variable(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_ssl_variable(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
@ -374,6 +376,9 @@ static ngx_http_variable_t ngx_http_ssl_vars[] = {
{ ngx_string("ssl_session_reused"), NULL, ngx_http_ssl_variable,
(uintptr_t) ngx_ssl_get_session_reused, NGX_HTTP_VAR_CHANGEABLE, 0 },
{ ngx_string("ssl_handshake_rtt"), NULL, ngx_http_ssl_handshake_rtt_variable,
(uintptr_t) ngx_ssl_get_handshake_rtt, NGX_HTTP_VAR_CHANGEABLE, 0 },
{ ngx_string("ssl_early_data"), NULL, ngx_http_ssl_variable,
(uintptr_t) ngx_ssl_get_early_data,
NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
@ -569,6 +574,35 @@ ngx_http_ssl_static_variable(ngx_http_request_t *r,
}
static ngx_int_t
ngx_http_ssl_handshake_rtt_variable(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{
ngx_ssl_variable_handler_pt handler = (ngx_ssl_variable_handler_pt) data;
ngx_str_t s;
if (r->connection->ssl) {
if (handler(r->connection, r->pool, &s) != NGX_OK) {
return NGX_ERROR;
}
v->len = s.len;
v->data = s.data;
v->valid = 1;
v->no_cacheable = 0;
v->not_found = 0;
return NGX_OK;
}
v->not_found = 1;
return NGX_OK;
}
static ngx_int_t
ngx_http_ssl_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
uintptr_t data)

View file

@ -36,6 +36,8 @@ static int ngx_stream_ssl_certificate(ngx_ssl_conn_t *ssl_conn, void *arg);
#endif
static ngx_int_t ngx_stream_ssl_static_variable(ngx_stream_session_t *s,
ngx_stream_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_stream_ssl_handshake_rtt_variable(ngx_stream_session_t *s,
ngx_stream_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_stream_ssl_variable(ngx_stream_session_t *s,
ngx_stream_variable_value_t *v, uintptr_t data);
@ -373,6 +375,9 @@ static ngx_stream_variable_t ngx_stream_ssl_vars[] = {
{ ngx_string("ssl_session_reused"), NULL, ngx_stream_ssl_variable,
(uintptr_t) ngx_ssl_get_session_reused, NGX_STREAM_VAR_CHANGEABLE, 0 },
{ ngx_string("ssl_handshake_rtt"), NULL, ngx_stream_ssl_handshake_rtt_variable,
(uintptr_t) ngx_ssl_get_handshake_rtt, NGX_STREAM_VAR_CHANGEABLE, 0 },
{ ngx_string("ssl_server_name"), NULL, ngx_stream_ssl_variable,
(uintptr_t) ngx_ssl_get_server_name, NGX_STREAM_VAR_CHANGEABLE, 0 },
@ -829,6 +834,35 @@ ngx_stream_ssl_static_variable(ngx_stream_session_t *s,
}
static ngx_int_t
ngx_stream_ssl_handshake_rtt_variable(ngx_stream_session_t *s,
ngx_stream_variable_value_t *v, uintptr_t data)
{
ngx_ssl_variable_handler_pt handler = (ngx_ssl_variable_handler_pt) data;
ngx_str_t str;
if (s->connection->ssl) {
if (handler(s->connection, s->connection->pool, &str) != NGX_OK) {
return NGX_ERROR;
}
v->len = str.len;
v->data = str.data;
v->valid = 1;
v->no_cacheable = 0;
v->not_found = 0;
return NGX_OK;
}
v->not_found = 1;
return NGX_OK;
}
static ngx_int_t
ngx_stream_ssl_variable(ngx_stream_session_t *s,
ngx_stream_variable_value_t *v, uintptr_t data)