[FFmpeg-devel] [PATCH] libavformat/tls_libtls: handle TLS_WANT_POLLIN and TLS_WANT_POLLOUT return values

2019-12-09 Thread Michael Forney
These values may be returned from libtls (even in the case of blocking
file descriptors) when we need to read/write more TLS record data in
order to read/write application data.

The URLProtocol documentation says AVERROR(EAGAIN) should be returned
in these cases.

Signed-off-by: Michael Forney 
---
 libavformat/tls_libtls.c | 4 
 1 file changed, 4 insertions(+)

diff --git a/libavformat/tls_libtls.c b/libavformat/tls_libtls.c
index ba83b56ffe..286454e452 100644
--- a/libavformat/tls_libtls.c
+++ b/libavformat/tls_libtls.c
@@ -159,6 +159,8 @@ static int ff_tls_read(URLContext *h, uint8_t *buf, int 
size)
 return ret;
 else if (ret == 0)
 return AVERROR_EOF;
+else if (ret == TLS_WANT_POLLIN || ret == TLS_WANT_POLLOUT)
+return AVERROR(EAGAIN);
 av_log(h, AV_LOG_ERROR, "%s\n", tls_error(p->ctx));
 return AVERROR(EIO);
 }
@@ -172,6 +174,8 @@ static int ff_tls_write(URLContext *h, const uint8_t *buf, 
int size)
 return ret;
 else if (ret == 0)
 return AVERROR_EOF;
+else if (ret == TLS_WANT_POLLIN || ret == TLS_WANT_POLLOUT)
+return AVERROR(EAGAIN);
 av_log(h, AV_LOG_ERROR, "%s\n", tls_error(p->ctx));
 return AVERROR(EIO);
 }
-- 
2.24.0

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

[FFmpeg-devel] [PATCH] Fix build with LibreSSL

2016-10-28 Thread Michael Forney
Signed-off-by: Michael Forney 
---
 libavformat/tls_openssl.c | 12 ++--
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/libavformat/tls_openssl.c b/libavformat/tls_openssl.c
index c551ac7..9712856 100644
--- a/libavformat/tls_openssl.c
+++ b/libavformat/tls_openssl.c
@@ -43,7 +43,7 @@ typedef struct TLSContext {
 TLSShared tls_shared;
 SSL_CTX *ctx;
 SSL *ssl;
-#if OPENSSL_VERSION_NUMBER >= 0x101fL
+#if OPENSSL_VERSION_NUMBER >= 0x101fL && !defined(LIBRESSL_VERSION_NUMBER)
 BIO_METHOD* url_bio_method;
 #endif
 } TLSContext;
@@ -68,7 +68,7 @@ static unsigned long openssl_thread_id(void)
 
 static int url_bio_create(BIO *b)
 {
-#if OPENSSL_VERSION_NUMBER >= 0x101fL
+#if OPENSSL_VERSION_NUMBER >= 0x101fL && !defined(LIBRESSL_VERSION_NUMBER)
 BIO_set_init(b, 1);
 BIO_set_data(b, NULL);
 BIO_set_flags(b, 0);
@@ -85,7 +85,7 @@ static int url_bio_destroy(BIO *b)
 return 1;
 }
 
-#if OPENSSL_VERSION_NUMBER >= 0x101fL
+#if OPENSSL_VERSION_NUMBER >= 0x101fL && !defined(LIBRESSL_VERSION_NUMBER)
 #define GET_BIO_DATA(x) BIO_get_data(x);
 #else
 #define GET_BIO_DATA(x) (x)->ptr;
@@ -133,7 +133,7 @@ static int url_bio_bputs(BIO *b, const char *str)
 return url_bio_bwrite(b, str, strlen(str));
 }
 
-#if OPENSSL_VERSION_NUMBER < 0x101fL
+#if OPENSSL_VERSION_NUMBER < 0x101fL || defined(LIBRESSL_VERSION_NUMBER)
 static BIO_METHOD url_bio_method = {
 .type = BIO_TYPE_SOURCE_SINK,
 .name = "urlprotocol bio",
@@ -212,7 +212,7 @@ static int tls_close(URLContext *h)
 SSL_CTX_free(c->ctx);
 if (c->tls_shared.tcp)
 ffurl_close(c->tls_shared.tcp);
-#if OPENSSL_VERSION_NUMBER >= 0x101fL
+#if OPENSSL_VERSION_NUMBER >= 0x101fL && !defined(LIBRESSL_VERSION_NUMBER)
 if (c->url_bio_method)
 BIO_meth_free(c->url_bio_method);
 #endif
@@ -265,7 +265,7 @@ static int tls_open(URLContext *h, const char *uri, int 
flags, AVDictionary **op
 ret = AVERROR(EIO);
 goto fail;
 }
-#if OPENSSL_VERSION_NUMBER >= 0x101fL
+#if OPENSSL_VERSION_NUMBER >= 0x101fL && !defined(LIBRESSL_VERSION_NUMBER)
 p->url_bio_method = BIO_meth_new(BIO_TYPE_SOURCE_SINK, "urlprotocol bio");
 BIO_meth_set_write(p->url_bio_method, url_bio_bwrite);
 BIO_meth_set_read(p->url_bio_method, url_bio_bread);
-- 
2.10.1

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] Fix build with LibreSSL

2016-10-29 Thread Michael Forney
On 10/29/16, Matt Oliver  wrote:
> This also seems a bit odd, why is libreSSL setting an openssl version
> number of 1.1.0 or higher when it doesnt actually conform to the
> corresponding openssl version. LibreSSl setting the openssl version number
> to 2.0.0 seems to be problematic and causes problems not just for ffmpeg.
> Of course theres not much we can do about that but perhaps an alternative
> to Michaels suggestion would be to just add a single check near the top of
> the file that checks for libressl and then redefines the openssl version to
> the api libressl actually supports. i.e.
>
> #ifdef LIBRESSL_VERSION_NUMBER
> #undef OPENSSL_VERSION_NUMBER
> #define OPENSSL_VERSION_NUMBER 0x1000107fL
> #endif
>
> This I believe is what some other projects have done to avoid this issue
> and is rather simple to add and prevents further clutter in our configure.
> I dont have any preference between this and the other suggestion, im just
> providing some alternatives. The above is pretty simple so if it works for
> you i can write up a patch for that pretty easily.

I'm not sure why libressl sets OPENSSL_VERSION_NUMBER to 0x2000L.
Maybe so that they can pick and choose which openssl APIs to implement
(rather than everything up through some version)?

I'm fine with any of the suggested approaches. I just went with
!defined(LIBRESSL_VERSION_NUMBER) in my original patch because that's
what I've seen projects like curl, wpa_supplicant, and openvpn do. It
also seems to be what openbsd is doing itself with patches in its
ports tree (xca, stunnel, postfix).
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel