Signed-off-by: Jack Lau <[email protected]>
---
libavformat/tls_openssl.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/libavformat/tls_openssl.c b/libavformat/tls_openssl.c
index 1c4d114205..344b152902 100644
--- a/libavformat/tls_openssl.c
+++ b/libavformat/tls_openssl.c
@@ -465,6 +465,8 @@ typedef struct TLSContext {
BIO_METHOD* url_bio_method;
int io_err;
char error_message[256];
+ struct sockaddr_storage dest_addr;
+ socklen_t dest_addr_len;
} TLSContext;
/**
@@ -582,8 +584,19 @@ static int url_bio_destroy(BIO *b)
static int url_bio_bread(BIO *b, char *buf, int len)
{
TLSContext *c = BIO_get_data(b);
+ TLSShared *s = &c->tls_shared;
int ret = ffurl_read(c->tls_shared.is_dtls ? c->tls_shared.udp :
c->tls_shared.tcp, buf, len);
if (ret >= 0) {
+ if (!s->external_sock && s->is_dtls && s->listen && !c->dest_addr_len
&& !c->dest_addr.ss_family) {
+ int r1;
+ ff_udp_get_last_recv_addr(s->udp, &c->dest_addr,
&c->dest_addr_len);
+ r1 = ff_udp_set_remote_addr(s->udp, (struct
sockaddr*)&c->dest_addr, c->dest_addr_len, 1);
+ if (r1 < 0) {
+ av_log(c, AV_LOG_ERROR, "Failed to set remote addr\n");
+ return r1;
+ }
+ av_log(c, AV_LOG_DEBUG, "Set UDP remote addr successfully\n");
+ }
openssl_state_trace((uint8_t*)buf, ret, 1);
return ret;
}
--
2.49.0
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".