Browse Source

MT#62571 generalise tls_fwd_new

Change-Id: Icfb9487e98bb8c4dfbb728299373327c5693330d
pull/1967/head
Richard Fuchs 6 months ago
parent
commit
549e98e3dc
2 changed files with 34 additions and 24 deletions
  1. +32
    -24
      recording-daemon/tls_send.c
  2. +2
    -0
      recording-daemon/tls_send.h

+ 32
- 24
recording-daemon/tls_send.c View File

@ -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;
}

+ 2
- 0
recording-daemon/tls_send.h View File

@ -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

Loading…
Cancel
Save