diff options
author | Hugo Landau <hlandau@openssl.org> | 2024-01-11 09:33:36 +0000 |
---|---|---|
committer | Hugo Landau <hlandau@openssl.org> | 2024-04-19 09:29:02 +0100 |
commit | 2f557ae0ea7790acaaa2141cb4275ec11e8d7fcb (patch) | |
tree | d2fcc409230a0ab64016dbb6c07a70d91a06ae41 | |
parent | b90003009678ed12ccc59b6371592ecdd5d8fa2d (diff) |
QUIC APL: Add skeleton listener API methods
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Neil Horman <nhorman@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/23334)
-rw-r--r-- | include/internal/quic_ssl.h | 4 | ||||
-rw-r--r-- | include/openssl/ssl.h.in | 5 | ||||
-rw-r--r-- | ssl/quic/quic_impl.c | 29 | ||||
-rw-r--r-- | ssl/ssl_lib.c | 53 |
4 files changed, 91 insertions, 0 deletions
diff --git a/include/internal/quic_ssl.h b/include/internal/quic_ssl.h index 4b8eb83d6f..f0dcf59ba0 100644 --- a/include/internal/quic_ssl.h +++ b/include/internal/quic_ssl.h @@ -77,6 +77,7 @@ __owur int ossl_quic_conn_set_initial_peer_addr(SSL *s, const BIO_ADDR *peer_addr); __owur SSL *ossl_quic_conn_stream_new(SSL *s, uint64_t flags); __owur SSL *ossl_quic_get0_connection(SSL *s); +__owur SSL *ossl_quic_get0_listener(SSL *s); __owur int ossl_quic_get_stream_type(SSL *s); __owur uint64_t ossl_quic_get_stream_id(SSL *s); __owur int ossl_quic_is_stream_local(SSL *s); @@ -91,6 +92,9 @@ __owur int ossl_quic_get_value_uint(SSL *s, uint32_t class_, uint32_t id, uint64_t *value); __owur int ossl_quic_set_value_uint(SSL *s, uint32_t class_, uint32_t id, uint64_t value); +__owur SSL *ossl_quic_accept_connection(SSL *ssl, uint64_t flags); +__owur size_t ossl_quic_get_accept_connection_queue_len(SSL *ssl); +__owur int ossl_quic_listen(SSL *ssl); __owur int ossl_quic_stream_reset(SSL *ssl, const SSL_STREAM_RESET_ARGS *args, diff --git a/include/openssl/ssl.h.in b/include/openssl/ssl.h.in index 362796e199..25c1976f9e 100644 --- a/include/openssl/ssl.h.in +++ b/include/openssl/ssl.h.in @@ -2283,7 +2283,12 @@ __owur int SSL_set1_initial_peer_addr(SSL *s, const BIO_ADDR *peer_addr); __owur SSL *SSL_get0_connection(SSL *s); __owur int SSL_is_connection(SSL *s); +__owur int SSL_is_listener(SSL *ssl); +__owur SSL *SSL_get0_listener(SSL *s); __owur SSL *SSL_new_listener(SSL_CTX *ctx, uint64_t flags); +__owur SSL *SSL_accept_connection(SSL *ssl, uint64_t flags); +__owur size_t SSL_get_accept_connection_queue_len(SSL *ssl); +__owur int SSL_listen(SSL *ssl); #define SSL_STREAM_TYPE_NONE 0 #define SSL_STREAM_TYPE_READ (1U << 0) diff --git a/ssl/quic/quic_impl.c b/ssl/quic/quic_impl.c index 10ef61a113..eb953a034c 100644 --- a/ssl/quic/quic_impl.c +++ b/ssl/quic/quic_impl.c @@ -2999,6 +2999,20 @@ SSL *ossl_quic_get0_connection(SSL *s) } /* + * SSL_get0_listener + * ----------------- + */ +SSL *ossl_quic_get0_listener(SSL *s) +{ + QCTX ctx; + + if (!expect_quic(s, &ctx)) + return NULL; + + return NULL; // XXX TODO +} + +/* * SSL_get_stream_type * ------------------- */ @@ -3987,6 +4001,21 @@ err: return NULL; } +SSL *ossl_quic_accept_connection(SSL *ssl, uint64_t flags) +{ + return NULL; // TODO XXX +} + +size_t ossl_quic_get_accept_connection_queue_len(SSL *ssl) +{ + return 0; // TODO XXX +} + +int ossl_quic_listen(SSL *ssl) +{ + return 0; // TODO XXX +} + /* * QUIC Front-End I/O API: SSL_CTX Management * ========================================== diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index 28aa428521..6374256766 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c @@ -7480,6 +7480,23 @@ int SSL_is_connection(SSL *s) return SSL_get0_connection(s) == s; } +SSL *SSL_get0_listener(SSL *s) +{ +#ifndef OPENSSL_NO_QUIC + if (!IS_QUIC(s)) + return s; + + return ossl_quic_get0_listener(s); +#else + return s; +#endif +} + +int SSL_is_listener(SSL *s) +{ + return SSL_get0_listener(s) == s; +} + int SSL_get_stream_type(SSL *s) { #ifndef OPENSSL_NO_QUIC @@ -7675,6 +7692,42 @@ SSL *SSL_new_listener(SSL_CTX *ctx, uint64_t flags) #endif } +SSL *SSL_accept_connection(SSL *ssl, uint64_t flags) +{ +#ifndef OPENSSL_NO_QUIC + if (!IS_QUIC(ssl)) + return NULL; + + return ossl_quic_accept_connection(ssl, flags); +#else + return NULL; +#endif +} + +size_t SSL_get_accept_connection_queue_len(SSL *ssl) +{ +#ifndef OPENSSL_NO_QUIC + if (!IS_QUIC(ssl)) + return 0; + + return ossl_quic_get_accept_connection_queue_len(ssl); +#else + return 0; +#endif +} + +int SSL_listen(SSL *ssl) +{ +#ifndef OPENSSL_NO_QUIC + if (!IS_QUIC(ssl)) + return 0; + + return ossl_quic_listen(ssl); +#else + return 0; +#endif +} + int SSL_add_expected_rpk(SSL *s, EVP_PKEY *rpk) { unsigned char *data = NULL; |