[FFmpeg-devel] [PATCH v2 1/8] avformat/tls: move whip specific init out of generic tls code
Timo Rothenpieler
timo at rothenpieler.org
Mon Jul 7 14:26:17 EEST 2025
On 07/07/2025 08:30, Jack Lau wrote:
>
>
>> On Jul 7, 2025, at 02:36, Timo Rothenpieler <timo at rothenpieler.org> wrote:
>>
>> ---
>> libavformat/tls.c | 9 ---------
>> libavformat/tls_openssl.c | 12 ++++++++----
>> libavformat/whip.c | 5 +++++
>> 3 files changed, 13 insertions(+), 13 deletions(-)
>>
>> diff --git a/libavformat/tls.c b/libavformat/tls.c
>> index c0adaf61ce..bd9c05e6dc 100644
>> --- a/libavformat/tls.c
>> +++ b/libavformat/tls.c
>> @@ -141,15 +141,6 @@ int ff_tls_open_underlying(TLSShared *c, URLContext *parent, const char *uri, AV
>> ret = ffurl_open_whitelist(c->is_dtls ? &c->udp : &c->tcp, buf, AVIO_FLAG_READ_WRITE,
>> &parent->interrupt_callback, options,
>> parent->protocol_whitelist, parent->protocol_blacklist, parent);
>> - if (c->is_dtls) {
>> - if (ret < 0) {
>> - av_log(c, AV_LOG_ERROR, "Failed to open udp://%s:%d\n", c->underlying_host, port);
>> - return ret;
>> - }
>> - /* Make the socket non-blocking, set to READ and WRITE mode after connected */
>> - ff_socket_nonblock(ffurl_get_file_handle(c->udp), 1);
>> - c->udp->flags |= AVIO_FLAG_READ | AVIO_FLAG_NONBLOCK;
>> - }
>> return ret;
>> }
>>
>> diff --git a/libavformat/tls_openssl.c b/libavformat/tls_openssl.c
>> index 08527418b0..0c76f110e3 100644
>> --- a/libavformat/tls_openssl.c
>> +++ b/libavformat/tls_openssl.c
>> @@ -1128,14 +1128,16 @@ static int tls_write(URLContext *h, const uint8_t *buf, int size)
>>
>> static int tls_get_file_handle(URLContext *h)
>> {
>> - TLSContext *c = h->priv_data;
>> - return ffurl_get_file_handle(c->tls_shared.tcp);
>> + TLSContext *p = h->priv_data;
>> + TLSShared *c = &p->tls_shared;
>> + return ffurl_get_file_handle(c->is_dtls ? c->udp : c->tcp);
>> }
>>
>> static int tls_get_short_seek(URLContext *h)
>> {
>> - TLSContext *s = h->priv_data;
>> - return ffurl_get_short_seek(s->tls_shared.tcp);
>> + TLSContext *p = h->priv_data;
>> + TLSShared *c = &p->tls_shared;
>> + return ffurl_get_short_seek(c->is_dtls ? c->udp : c->tcp);
>> }
>>
>> static const AVOption options[] = {
>> @@ -1177,6 +1179,8 @@ const URLProtocol ff_dtls_protocol = {
>> .url_close = dtls_close,
>> .url_read = tls_read,
>> .url_write = tls_write,
>> + .url_get_file_handle = tls_get_file_handle,
>> + .url_get_short_seek = tls_get_short_seek,
>> .priv_data_size = sizeof(TLSContext),
>> .flags = URL_PROTOCOL_FLAG_NETWORK,
>> .priv_data_class = &dtls_class,
>> diff --git a/libavformat/whip.c b/libavformat/whip.c
>> index 84d4c5a1f3..4ac76e79f2 100644
>> --- a/libavformat/whip.c
>> +++ b/libavformat/whip.c
>> @@ -388,6 +388,11 @@ static av_cold int dtls_initialize(AVFormatContext *s)
>> WHIPContext *whip = s->priv_data;
>> /* reuse the udp created by whip */
>> ff_dtls_set_udp(whip->dtls_uc, whip->udp);
>> +
>> + /* Make the socket non-blocking */
>> + ff_socket_nonblock(ffurl_get_file_handle(whip->dtls_uc), 1);
>> + whip->dtls_uc->flags |= AVIO_FLAG_NONBLOCK;
>> +
> I think it’s redundant since udp_connect function has set these already.
No, it needs to be set on the tls URLContext, since all implementations
forward their nonblocking flag (or lack thereof) to the underlying
context each read/write.
More information about the ffmpeg-devel
mailing list