Skip to content

Commit 89d791d

Browse files
committed
ngx_http_lua_ffi_ssl_get_client_hello_ext_present()
#2413
1 parent bdba93c commit 89d791d

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

src/ngx_http_lua_ssl_client_helloby.c

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,50 @@ ngx_http_lua_ffi_ssl_get_client_hello_ext(ngx_http_request_t *r,
662662
}
663663

664664

665+
int
666+
ngx_http_lua_ffi_ssl_get_client_hello_ext_present(ngx_http_request_t *r,
667+
int **extensions, size_t *extensions_len, char **err)
668+
{
669+
ngx_ssl_conn_t *ssl_conn;
670+
int got_extensions;
671+
size_t ext_len;
672+
int *ext_out;
673+
/* OPENSSL will allocate memory for us and make the ext_out point to it */
674+
675+
676+
if (r->connection == NULL || r->connection->ssl == NULL) {
677+
*err = "bad request";
678+
return NGX_ERROR;
679+
}
680+
681+
ssl_conn = r->connection->ssl->connection;
682+
if (ssl_conn == NULL) {
683+
*err = "bad ssl conn";
684+
return NGX_ERROR;
685+
}
686+
687+
#ifdef SSL_ERROR_WANT_CLIENT_HELLO_CB
688+
got_extensions = SSL_client_hello_get1_extensions_present(ssl_conn, &ext_out, &ext_len);
689+
if (!got_extensions || !ext_out || !ext_len) {
690+
*err = "failed SSL_client_hello_get1_extensions_present()";
691+
return NGX_DECLINED;
692+
}
693+
694+
*extensions = ngx_palloc(r->pool, sizeof(int) * ext_len);
695+
if (extensions != NULL) {
696+
ngx_memcpy(*extensions, ext_out, sizeof(int) * ext_len);
697+
*extensions_len = ext_len;
698+
}
699+
700+
OPENSSL_free(ext_out);
701+
return NGX_OK;
702+
#else
703+
*err = "OpenSSL too old to support this function";
704+
return NGX_ERROR;
705+
#endif
706+
}
707+
708+
665709
int
666710
ngx_http_lua_ffi_ssl_set_protocols(ngx_http_request_t *r,
667711
int protocols, char **err)

0 commit comments

Comments
 (0)