From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id A9FD14C52F for ; Mon, 8 Sep 2025 08:38:13 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'qgTnOaQSu7jJc+wkr1JZMBIZ9wQ2anMoWUIRLmpi8Ds=', expected b'HYjG49Nk00xbtOAnHazNEl0+RkLuDSWH1scGl1wnvhU=')) header.d=ffmpeg.org header.i=@ffmpeg.org header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1757320687; h=mime-version : to : date : message-id : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-type : content-transfer-encoding : from; bh=qgTnOaQSu7jJc+wkr1JZMBIZ9wQ2anMoWUIRLmpi8Ds=; b=XWFTbc7p34vw3nJCjK57H5gS2bmayVhanDC80b+I8AHC/3Ym2XMjNWIcCcWILuAS5r7YZ xC+DbffhoQ/BPOkCsvI0rwIyIywTjYCcNtsUAw6OR4/2pJvpfkX6PO29zky2n3RpHLv5KF5 BvQE0IT8IjK54VOiXJ8/lZ28c+SKewoTWnec7Ti5RywbxN37cUhaN8Gc2BgJBcPq1BVBWej DDcqy9u0LTa2d/520MdaWpai1urvOCgYJ6R6WsZgYaKP0lFA035xnnFP1QeM7ODkM2UWKgc gwLFlBEbIUERbon179fg9U5fD2rwZTiqwDoOWT/WEh4uMRoApu4nYyCbw/HA== Received: from [172.19.0.4] (unknown [172.19.0.4]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 21FD368C4F5; Mon, 8 Sep 2025 11:38:07 +0300 (EEST) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1757320686; b=Cj6aPbYZzfDiArLU99P3fHjtvRnC6q1gqrNTrszdo4eVmq8kxKCNYvWQyie0I5Fz0Y1tU +Z984/VLbFmDs7OYUOvermqQrssXM5woHu0hBrSNUkZhArxvRL738AzOEI/+fQeYIY2ILNk PY+kenGyCATltSi6yzdyGJXDk+Gbu34Yy9ks0/xABopSY4cqS6iz2EvZQEhRuuQ4DYt6zt6 vXqNIRpwhU+hBlUPVqnMf+9AveYtHkqecDzZqgSyY4h6lRh9c8hw5SdAlAjuAEStUQswLEz UN64D79aVnUGgtj+xyt6Ji9P8bZRI/avARFzCPw+50ZpQRJeyHa+iee2Oksw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1757320686; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=QGoYNzC6v5nzeMmm9dE3fA4ZYo8HFDiOOMPRuctiEbI=; b=j8HWL6FftG+yIa2OOxThtYhNpTYm+0jBLsAZbT2+1sGeswgQJMM4h3jwO5AEY4cPp3bwb zoBOnxPTRdHQvRw0XNgZby908O75tyoMVMZHfVx9fPcsBstMuYHyz70LEWXcctD9Xk1Xv0S oYHFKvfys2YR3I9PHl49xlPXz34Zjbiri3YMVvuAUMlgptMT02oxCn5MBIVpB7Fj7OtL/gS Zj4TN1Mi3I7TDm9Z3uY2Un3va3zxopfkO3trvt37HOykwd6tq+/bGSldKbJHfFWp5QoUEGS 9cNcN5S4TLSbObJXxIrsVzNAcitUgStj+yzHJUOGfZVhcSDIMibkLukbqHcg== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none; dmarc=none Authentication-Results: ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none (Message is not ARC signed); dmarc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1757320675; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=HYjG49Nk00xbtOAnHazNEl0+RkLuDSWH1scGl1wnvhU=; b=MVi2m3461icIhPKNwZ87owHwI9lp37QiMyo7tMCmpur806HZ2Y23eWVTJQYVMM8qqVPc3 KewlRcAQno6VsdzyjnMrpVrm7mUIKb5fCJDkuRfLoOtEyYaASYTbuaOUO1OBQ4zEeaTkW51 67vaaf5YtemrKrul5iCUshH9brBdxvV0tgKy45/gbrlgck9OK3wXWPJ6Qi6a8uMntEMeBuU CJefRaz0ILbg5b8ZkOrdE7c3tV+4dDa6F6vbtHSqi2L8SeRPCP1qfm8gvCdI7Sgdq63mIk2 W69jIhu86bQvNjIcK/qieGqnUDcOREC69TTLvwFxZC+HdSm38bIdjc05Bl9A== Received: from 3f9d35a0eedc (code.ffmpeg.org [188.245.149.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 83F4E6800E7 for ; Mon, 8 Sep 2025 11:37:55 +0300 (EEST) MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Mon, 08 Sep 2025 08:37:55 -0000 Message-ID: <175732067571.25.17676583807362646587@463a07221176> Message-ID-Hash: H7FUU2KH2IR2FSNP3ZOIYCAVQZEXMFOH X-Message-ID-Hash: H7FUU2KH2IR2FSNP3ZOIYCAVQZEXMFOH X-MailFrom: code@ffmpeg.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH] avformat/tls_gnutls: add initial dtls support (PR #20464) List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Jack Lau via ffmpeg-devel Cc: Jack Lau Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: PR #20464 opened by Jack Lau (JackLau) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20464 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20464.patch >>From 042808e328443b002bd64bd6f3bcf1749e8be4a9 Mon Sep 17 00:00:00 2001 From: Jack Lau Date: Mon, 8 Sep 2025 16:08:22 +0800 Subject: [PATCH 1/2] avformat/tls_gnutls: add initial dtls support Set GNUTLS_DATAGRAM flag when is_dtls is true. Set mtu when it's specified. Modify the read/write function could use udp socket. There are more patches to make dtls really work. Signed-off-by: Jack Lau --- libavformat/tls_gnutls.c | 55 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 50 insertions(+), 5 deletions(-) diff --git a/libavformat/tls_gnutls.c b/libavformat/tls_gnutls.c index e894765d7c..d4751139a9 100644 --- a/libavformat/tls_gnutls.c +++ b/libavformat/tls_gnutls.c @@ -22,6 +22,7 @@ #include #include +#include #include #include "avformat.h" @@ -151,6 +152,7 @@ static int tls_open(URLContext *h, const char *uri, int flags, AVDictionary **op { TLSContext *c = h->priv_data; TLSShared *s = &c->tls_shared; + uint16_t gnutls_flags = 0; int ret; ff_gnutls_init(); @@ -158,7 +160,14 @@ static int tls_open(URLContext *h, const char *uri, int flags, AVDictionary **op if ((ret = ff_tls_open_underlying(s, h, uri, options)) < 0) goto fail; - gnutls_init(&c->session, s->listen ? GNUTLS_SERVER : GNUTLS_CLIENT); + if (s->is_dtls) + gnutls_flags |= GNUTLS_DATAGRAM; + + if (s->listen) + gnutls_flags |= GNUTLS_SERVER + else + gnutls_flags |= GNUTLS_CLIENT; + gnutls_init(&c->session, gnutls_flags); if (!s->listen && !s->numerichost) gnutls_server_name_set(c->session, GNUTLS_NAME_DNS, s->host, strlen(s->host)); gnutls_certificate_allocate_credentials(&c->cred); @@ -190,6 +199,10 @@ static int tls_open(URLContext *h, const char *uri, int flags, AVDictionary **op gnutls_transport_set_pull_function(c->session, gnutls_url_pull); gnutls_transport_set_push_function(c->session, gnutls_url_push); gnutls_transport_set_ptr(c->session, c); + if (s->is_dtls){ + if (s->mtu) + gnutls_dtls_set_mtu(c->session, s->mtu); + } gnutls_set_default_priority(c->session); do { if (ff_check_interrupt(&h->interrupt_callback)) { @@ -243,13 +256,23 @@ fail: return ret; } +static int dtls_open(URLContext *h, const char *uri, int flags, AVDictionary **options) +{ + TLSContext *c = h->priv_data; + TLSShared *s = &c->tls_shared; + s->is_dtls = 1; + return tls_open(h, uri, flags, options); +} + static int tls_read(URLContext *h, uint8_t *buf, int size) { TLSContext *c = h->priv_data; + TLSShared *s = &c->tls_shared; + URLContext *uc = s->is_dtls ? s->udp : s->tcp; int ret; // Set or clear the AVIO_FLAG_NONBLOCK on c->tls_shared.tcp - c->tls_shared.tcp->flags &= ~AVIO_FLAG_NONBLOCK; - c->tls_shared.tcp->flags |= h->flags & AVIO_FLAG_NONBLOCK; + uc->flags &= ~AVIO_FLAG_NONBLOCK; + uc->flags |= h->flags & AVIO_FLAG_NONBLOCK; ret = gnutls_record_recv(c->session, buf, size); if (ret > 0) return ret; @@ -261,10 +284,12 @@ static int tls_read(URLContext *h, uint8_t *buf, int size) static int tls_write(URLContext *h, const uint8_t *buf, int size) { TLSContext *c = h->priv_data; + TLSShared *s = &c->tls_shared; + URLContext *uc = s->is_dtls ? s->udp : s->tcp; int ret; // Set or clear the AVIO_FLAG_NONBLOCK on c->tls_shared.tcp - c->tls_shared.tcp->flags &= ~AVIO_FLAG_NONBLOCK; - c->tls_shared.tcp->flags |= h->flags & AVIO_FLAG_NONBLOCK; + uc->flags &= ~AVIO_FLAG_NONBLOCK; + uc->flags |= h->flags & AVIO_FLAG_NONBLOCK; ret = gnutls_record_send(c->session, buf, size); if (ret > 0) return ret; @@ -309,3 +334,23 @@ const URLProtocol ff_tls_protocol = { .flags = URL_PROTOCOL_FLAG_NETWORK, .priv_data_class = &tls_class, }; + +static const AVClass dtls_class = { + .class_name = "dtls", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + +const URLProtocol ff_dtls_protocol = { + .name = "dtls", + .url_open2 = dtls_open, + .url_read = tls_read, + .url_write = tls_write, + .url_close = tls_close, + .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, +}; -- 2.49.1 >>From 75d6a40a91ae6d9a25f4c32e3dba5fac97e4f74a Mon Sep 17 00:00:00 2001 From: Jack Lau Date: Mon, 8 Sep 2025 16:31:10 +0800 Subject: [PATCH 2/2] avformat/tls_gnutls: add av_assert0() for tls_shared Signed-off-by: Jack Lau --- libavformat/tls_gnutls.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libavformat/tls_gnutls.c b/libavformat/tls_gnutls.c index d4751139a9..61c5d79c9b 100644 --- a/libavformat/tls_gnutls.c +++ b/libavformat/tls_gnutls.c @@ -30,6 +30,7 @@ #include "os_support.h" #include "url.h" #include "tls.h" +#include "libavutil/avassert.h" #include "libavutil/opt.h" #include "libavutil/thread.h" @@ -154,6 +155,7 @@ static int tls_open(URLContext *h, const char *uri, int flags, AVDictionary **op TLSShared *s = &c->tls_shared; uint16_t gnutls_flags = 0; int ret; + av_assert0(s); ff_gnutls_init(); @@ -260,6 +262,7 @@ static int dtls_open(URLContext *h, const char *uri, int flags, AVDictionary **o { TLSContext *c = h->priv_data; TLSShared *s = &c->tls_shared; + av_assert0(s); s->is_dtls = 1; return tls_open(h, uri, flags, options); } -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org