Skip to content

Commit

Permalink
QUIC DDD: ddd-05-mem-nonblocking: Unplanned changes
Browse files Browse the repository at this point in the history
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from #21715)
  • Loading branch information
hlandau committed Sep 1, 2023
1 parent 70dc50c commit 47eceab
Showing 1 changed file with 22 additions and 3 deletions.
25 changes: 22 additions & 3 deletions doc/designs/ddd/ddd-05-mem-nonblocking.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ SSL_CTX *create_ssl_ctx(void)
SSL_CTX *ctx;

#ifdef USE_QUIC
ctx = SSL_CTX_new(QUIC_client_method());
ctx = SSL_CTX_new(OSSL_QUIC_client_method());
#else
ctx = SSL_CTX_new(TLS_client_method());
#endif
Expand Down Expand Up @@ -62,6 +62,9 @@ APP_CONN *new_conn(SSL_CTX *ctx, const char *bare_hostname)
BIO *ssl_bio, *internal_bio, *net_bio;
APP_CONN *conn;
SSL *ssl;
#ifdef USE_QUIC
static const unsigned char alpn[] = {5, 'd', 'u', 'm', 'm', 'y'};
#endif

conn = calloc(1, sizeof(APP_CONN));
if (conn == NULL)
Expand All @@ -76,7 +79,7 @@ APP_CONN *new_conn(SSL_CTX *ctx, const char *bare_hostname)
SSL_set_connect_state(ssl); /* cannot fail */

#ifdef USE_QUIC
if (BIO_new_dgram_pair(&internal_bio, 0, &net_bio, 0) <= 0) {
if (BIO_new_bio_dgram_pair(&internal_bio, 0, &net_bio, 0) <= 0) {
#else
if (BIO_new_bio_pair(&internal_bio, 0, &net_bio, 0) <= 0) {
#endif
Expand Down Expand Up @@ -112,6 +115,16 @@ APP_CONN *new_conn(SSL_CTX *ctx, const char *bare_hostname)
return NULL;
}

#ifdef USE_QUIC
/* Configure ALPN, which is required for QUIC. */
if (SSL_set_alpn_protos(ssl, alpn, sizeof(alpn))) {
/* Note: SSL_set_alpn_protos returns 1 for failure. */
SSL_free(ssl);
BIO_free(ssl_bio);
return NULL;
}
#endif

conn->ssl_bio = ssl_bio;
conn->net_bio = net_bio;
return conn;
Expand Down Expand Up @@ -231,15 +244,21 @@ size_t net_tx_avail(APP_CONN *conn)
int get_conn_pending_tx(APP_CONN *conn)
{
#ifdef USE_QUIC
return POLLIN | POLLOUT | POLLERR;
return (SSL_net_read_desired(conn->ssl) ? POLLIN : 0)
| (SSL_net_write_desired(conn->ssl) ? POLLOUT : 0)
| POLLERR;
#else
return (conn->tx_need_rx ? POLLIN : 0) | POLLOUT | POLLERR;
#endif
}

int get_conn_pending_rx(APP_CONN *conn)
{
#ifdef USE_QUIC
return get_conn_pending_tx(conn);
#else
return (conn->rx_need_tx ? POLLOUT : 0) | POLLIN | POLLERR;
#endif
}

/*
Expand Down

0 comments on commit 47eceab

Please sign in to comment.