From 549e98e3dcb3615358339c635d73de9cb8f16b76 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Mon, 30 Jun 2025 09:38:37 -0400 Subject: [PATCH] MT#62571 generalise tls_fwd_new Change-Id: Icfb9487e98bb8c4dfbb728299373327c5693330d --- recording-daemon/tls_send.c | 56 +++++++++++++++++++++---------------- recording-daemon/tls_send.h | 2 ++ 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/recording-daemon/tls_send.c b/recording-daemon/tls_send.c index c0cb4564f..4a062d257 100644 --- a/recording-daemon/tls_send.c +++ b/recording-daemon/tls_send.c @@ -248,16 +248,11 @@ static bool tls_fwd_config(sink_t *sink, const format_t *requested_format, forma } -void tls_fwd_init(stream_t *stream, metafile_t *mf, ssrc_t *ssrc) { - if ((!stream->forwarding_on && !mf->forwarding_on) || !tls_send_to_ep.port) { - tls_fwd_shutdown(&ssrc->tls_fwd); - return; - } - - if (ssrc->tls_fwd) - return; +bool tls_fwd_new(tls_fwd_t **tlsp) { + if (*tlsp) + return true; - tls_fwd_t *tls_fwd = ssrc->tls_fwd = g_new0(tls_fwd_t, 1); + tls_fwd_t *tls_fwd = *tlsp = g_new0(tls_fwd_t, 1); // initialise the connection ZERO(tls_fwd->poller); @@ -270,14 +265,14 @@ void tls_fwd_init(stream_t *stream, metafile_t *mf, ssrc_t *ssrc) { #endif if (!tls_fwd->ssl_ctx) { ilog(LOG_ERR, "Failed to create TLS context"); - tls_fwd_shutdown(&ssrc->tls_fwd); - return; + tls_fwd_shutdown(tlsp); + return false; } tls_fwd->ssl = SSL_new(tls_fwd->ssl_ctx); if (!tls_fwd->ssl) { ilog(LOG_ERR, "Failed to create TLS connection"); - tls_fwd_shutdown(&ssrc->tls_fwd); - return; + tls_fwd_shutdown(tlsp); + return false; } } else { dbg("Starting TCP connection to %s", endpoint_print_buf(&tls_send_to_ep)); @@ -287,28 +282,25 @@ void tls_fwd_init(stream_t *stream, metafile_t *mf, ssrc_t *ssrc) { ilog(LOG_ERR, "Failed to open/connect TLS/TCP socket to %s: %s", endpoint_print_buf(&tls_send_to_ep), strerror(errno)); - tls_fwd_shutdown(&ssrc->tls_fwd); - return; + tls_fwd_shutdown(tlsp); + return false; } tls_fwd->poller.state = PS_CONNECTING; if (!tls_disable) { if (SSL_set_fd(tls_fwd->ssl, tls_fwd->sock.fd) != 1) { ilog(LOG_ERR, "Failed to set TLS fd"); - tls_fwd_shutdown(&ssrc->tls_fwd); - return; + tls_fwd_shutdown(tlsp); + return false; } tls_fwd->stream = streambuf_new_ptr(&tls_fwd->poller, tls_fwd->ssl, &ssrc_tls_funcs); } else { tls_fwd->stream = streambuf_new(&tls_fwd->poller, tls_fwd->sock.fd); } - tls_fwd->ssrc = ssrc; - tls_fwd->metafile = mf; - - tls_fwd_state(&ssrc->tls_fwd); - if (!ssrc->tls_fwd) // may have been closed - return; + tls_fwd_state(tlsp); + if (!*tlsp) // may have been closed + return false; tls_fwd->format = (format_t) { .clockrate = tls_resample, @@ -317,7 +309,23 @@ void tls_fwd_init(stream_t *stream, metafile_t *mf, ssrc_t *ssrc) { }; sink_init(&tls_fwd->sink); - tls_fwd->sink.tls_fwd = &ssrc->tls_fwd; + tls_fwd->sink.tls_fwd = tlsp; tls_fwd->sink.add = tls_fwd_add; tls_fwd->sink.config = tls_fwd_config; + + return true; +} + + +void tls_fwd_init(stream_t *stream, metafile_t *mf, ssrc_t *ssrc) { + if ((!stream->forwarding_on && !mf->forwarding_on) || !tls_send_to_ep.port) { + tls_fwd_shutdown(&ssrc->tls_fwd); + return; + } + + if (!tls_fwd_new(&ssrc->tls_fwd)) + return; + + ssrc->tls_fwd->ssrc = ssrc; + ssrc->tls_fwd->metafile = mf; } diff --git a/recording-daemon/tls_send.h b/recording-daemon/tls_send.h index 334c1b16a..cd71064a3 100644 --- a/recording-daemon/tls_send.h +++ b/recording-daemon/tls_send.h @@ -4,6 +4,8 @@ #include "types.h" void tls_fwd_init(stream_t *stream, metafile_t *mf, ssrc_t *ssrc); + +bool tls_fwd_new(tls_fwd_t **tlsp); void tls_fwd_shutdown(tls_fwd_t **); #endif