diff mbox

[FFmpeg-devel] openssl: Support version 1.1.0.

Message ID CAHVN4mgzrTh10Ed9yDfkvMicNFAwU4rNDGuVH5wDhXU+wiZAGw@mail.gmail.com
State Superseded
Headers show

Commit Message

Matt Oliver Oct. 9, 2016, 8:30 p.m. UTC
From ad4d838ed6673c6d12aeaa7b00036b66371b4d63 Mon Sep 17 00:00:00 2001
From: Matt Oliver <protogonoi@gmail.com>
Date: Mon, 10 Oct 2016 06:49:54 +1100
Subject: [PATCH] openssl: Support version 1.1.0.

Fixes #5675

Signed-off-by: Matt Oliver <protogonoi@gmail.com>
---
 configure                 |   3 +-
 libavformat/tls_openssl.c | 163
++++++++++++++++++++++++++++------------------
 2 files changed, 102 insertions(+), 64 deletions(-)

     avpriv_unlock_avformat();
@@ -107,6 +199,9 @@ void ff_openssl_deinit(void)
             av_free(openssl_mutexes);
         }
 #endif
+#if OPENSSL_VERSION_NUMBER >= 0x1010000fL
+        BIO_meth_free(url_bio_method);
+#endif
     }
     avpriv_unlock_avformat();
 }
@@ -132,69 +227,6 @@ static int tls_close(URLContext *h)
     return 0;
 }

-static int url_bio_create(BIO *b)
-{
-    b->init = 1;
-    b->ptr = NULL;
-    b->flags = 0;
-    return 1;
-}
-
-static int url_bio_destroy(BIO *b)
-{
-    return 1;
-}
-
-static int url_bio_bread(BIO *b, char *buf, int len)
-{
-    URLContext *h = b->ptr;
-    int ret = ffurl_read(h, buf, len);
-    if (ret >= 0)
-        return ret;
-    BIO_clear_retry_flags(b);
-    if (ret == AVERROR_EXIT)
-        return 0;
-    return -1;
-}
-
-static int url_bio_bwrite(BIO *b, const char *buf, int len)
-{
-    URLContext *h = b->ptr;
-    int ret = ffurl_write(h, buf, len);
-    if (ret >= 0)
-        return ret;
-    BIO_clear_retry_flags(b);
-    if (ret == AVERROR_EXIT)
-        return 0;
-    return -1;
-}
-
-static long url_bio_ctrl(BIO *b, int cmd, long num, void *ptr)
-{
-    if (cmd == BIO_CTRL_FLUSH) {
-        BIO_clear_retry_flags(b);
-        return 1;
-    }
-    return 0;
-}
-
-static int url_bio_bputs(BIO *b, const char *str)
-{
-    return url_bio_bwrite(b, str, strlen(str));
-}
-
-static BIO_METHOD url_bio_method = {
-    .type = BIO_TYPE_SOURCE_SINK,
-    .name = "urlprotocol bio",
-    .bwrite = url_bio_bwrite,
-    .bread = url_bio_bread,
-    .bputs = url_bio_bputs,
-    .bgets = NULL,
-    .ctrl = url_bio_ctrl,
-    .create = url_bio_create,
-    .destroy = url_bio_destroy,
-};
-
 static int tls_open(URLContext *h, const char *uri, int flags,
AVDictionary **options)
 {
     TLSContext *p = h->priv_data;
@@ -240,8 +272,13 @@ static int tls_open(URLContext *h, const char *uri,
int flags, AVDictionary **op
         ret = AVERROR(EIO);
         goto fail;
     }
+#if OPENSSL_VERSION_NUMBER >= 0x1010000fL
+    bio = BIO_new(url_bio_method);
+    BIO_set_data(bio, c->tcp);
+#else
     bio = BIO_new(&url_bio_method);
     bio->ptr = c->tcp;
+#endif
     SSL_set_bio(p->ssl, bio, bio);
     if (!c->listen && !c->numerichost)
         SSL_set_tlsext_host_name(p->ssl, c->host);

Comments

Michael Niedermayer Oct. 9, 2016, 10:20 p.m. UTC | #1
On Mon, Oct 10, 2016 at 07:30:16AM +1100, Matt Oliver wrote:
> From ad4d838ed6673c6d12aeaa7b00036b66371b4d63 Mon Sep 17 00:00:00 2001
> From: Matt Oliver <protogonoi@gmail.com>
> Date: Mon, 10 Oct 2016 06:49:54 +1100
> Subject: [PATCH] openssl: Support version 1.1.0.
> 
> Fixes #5675
> 
> Signed-off-by: Matt Oliver <protogonoi@gmail.com>
> ---
>  configure                 |   3 +-
>  libavformat/tls_openssl.c | 163
> ++++++++++++++++++++++++++++------------------
>  2 files changed, 102 insertions(+), 64 deletions(-)
> 
> diff --git a/configure b/configure
> index e014615..3a92eb3 100755
> --- a/configure
> +++ b/configure
> @@ -5816,7 +5816,8 @@ enabled omx               && { check_header
> OMX_Core.h ||
>                                      add_cflags -isystem/opt/vc/include/IL
> ; }
>                                  check_header OMX_Core.h ; } ||
>                                 die "ERROR: OpenMAX IL headers not found"; }
> -enabled openssl           && { use_pkg_config openssl openssl/ssl.h
> SSL_library_init ||
> +enabled openssl           && { use_pkg_config openssl openssl/ssl.h
> OPENSSL_init_ssl ||
> +                               use_pkg_config openssl openssl/ssl.h
> SSL_library_init ||
>                                 check_lib openssl/ssl.h SSL_library_init
> -lssl -lcrypto ||
>                                 check_lib openssl/ssl.h SSL_library_init
> -lssl32 -leay32 ||
>                                 check_lib openssl/ssl.h SSL_library_init
> -lssl -lcrypto -lws2_32 -lgdi32 ||
> diff --git a/libavformat/tls_openssl.c b/libavformat/tls_openssl.c
> index 46eb3e6..2206ab0 100644
> --- a/libavformat/tls_openssl.c
> +++ b/libavformat/tls_openssl.c
> @@ -63,6 +63,89 @@ static unsigned long openssl_thread_id(void)
>  #endif
>  #endif
> 
> +static int url_bio_create(BIO *b)
> +{
> +#if OPENSSL_VERSION_NUMBER >= 0x1010000fL
> +    BIO_set_init(b, 1);
> +    BIO_set_data(b, NULL);
> +    BIO_set_flags(b, 0);
> +#else
> +    b->init = 1;
> +    b->ptr = NULL;
> +    b->flags = 0;
> +#endif
> +    return 1;
> +}
> +
> +static int url_bio_destroy(BIO *b)
> +{
> +    return 1;
> +}
> +
> +#if OPENSSL_VERSION_NUMBER >= 0x1010000fL
> +#define BIO_GET_DATA(x) BIO_get_data(x);

doesnt this step on the namespace used by openssl ?
except that no objections / no further comments frome

Tested to build fine on mingw32/64 & linux 32/64 x86

[...]
diff mbox

Patch

diff --git a/configure b/configure
index e014615..3a92eb3 100755
--- a/configure
+++ b/configure
@@ -5816,7 +5816,8 @@  enabled omx               && { check_header
OMX_Core.h ||
                                     add_cflags -isystem/opt/vc/include/IL
; }
                                 check_header OMX_Core.h ; } ||
                                die "ERROR: OpenMAX IL headers not found"; }
-enabled openssl           && { use_pkg_config openssl openssl/ssl.h
SSL_library_init ||
+enabled openssl           && { use_pkg_config openssl openssl/ssl.h
OPENSSL_init_ssl ||
+                               use_pkg_config openssl openssl/ssl.h
SSL_library_init ||
                                check_lib openssl/ssl.h SSL_library_init
-lssl -lcrypto ||
                                check_lib openssl/ssl.h SSL_library_init
-lssl32 -leay32 ||
                                check_lib openssl/ssl.h SSL_library_init
-lssl -lcrypto -lws2_32 -lgdi32 ||
diff --git a/libavformat/tls_openssl.c b/libavformat/tls_openssl.c
index 46eb3e6..2206ab0 100644
--- a/libavformat/tls_openssl.c
+++ b/libavformat/tls_openssl.c
@@ -63,6 +63,89 @@  static unsigned long openssl_thread_id(void)
 #endif
 #endif

+static int url_bio_create(BIO *b)
+{
+#if OPENSSL_VERSION_NUMBER >= 0x1010000fL
+    BIO_set_init(b, 1);
+    BIO_set_data(b, NULL);
+    BIO_set_flags(b, 0);
+#else
+    b->init = 1;
+    b->ptr = NULL;
+    b->flags = 0;
+#endif
+    return 1;
+}
+
+static int url_bio_destroy(BIO *b)
+{
+    return 1;
+}
+
+#if OPENSSL_VERSION_NUMBER >= 0x1010000fL
+#define BIO_GET_DATA(x) BIO_get_data(x);
+#else
+#define BIO_GET_DATA(x) (x)->ptr;
+#endif
+
+static int url_bio_bread(BIO *b, char *buf, int len)
+{
+    URLContext *h;
+    int ret;
+    h = BIO_GET_DATA(b);
+    ret = ffurl_read(h, buf, len);
+    if (ret >= 0)
+        return ret;
+    BIO_clear_retry_flags(b);
+    if (ret == AVERROR_EXIT)
+        return 0;
+    return -1;
+}
+
+static int url_bio_bwrite(BIO *b, const char *buf, int len)
+{
+    URLContext *h;
+    int ret;
+    h = BIO_GET_DATA(b);
+    ret = ffurl_write(h, buf, len);
+    if (ret >= 0)
+        return ret;
+    BIO_clear_retry_flags(b);
+    if (ret == AVERROR_EXIT)
+        return 0;
+    return -1;
+}
+
+static long url_bio_ctrl(BIO *b, int cmd, long num, void *ptr)
+{
+    if (cmd == BIO_CTRL_FLUSH) {
+        BIO_clear_retry_flags(b);
+        return 1;
+    }
+    return 0;
+}
+
+static int url_bio_bputs(BIO *b, const char *str)
+{
+    return url_bio_bwrite(b, str, strlen(str));
+}
+
+#if OPENSSL_VERSION_NUMBER >= 0x1010000fL
+static BIO_METHOD* url_bio_method;
+#else
+static BIO_METHOD url_bio_method = {
+    .type = BIO_TYPE_SOURCE_SINK,
+    .name = "urlprotocol bio",
+    .bwrite = url_bio_bwrite,
+    .bread = url_bio_bread,
+    .bputs = url_bio_bputs,
+    .bgets = NULL,
+    .ctrl = url_bio_ctrl,
+    .create = url_bio_create,
+    .destroy = url_bio_destroy,
+};
+#endif
+
 int ff_openssl_init(void)
 {
     avpriv_lock_avformat();
@@ -86,6 +169,15 @@  int ff_openssl_init(void)
 #endif
         }
 #endif
+#if OPENSSL_VERSION_NUMBER >= 0x1010000fL
+        url_bio_method = BIO_meth_new(BIO_TYPE_SOURCE_SINK, "urlprotocol
bio");
+        BIO_meth_set_write(url_bio_method, url_bio_bwrite);
+        BIO_meth_set_read(url_bio_method, url_bio_bread);
+        BIO_meth_set_puts(url_bio_method, url_bio_bputs);
+        BIO_meth_set_ctrl(url_bio_method, url_bio_ctrl);
+        BIO_meth_set_create(url_bio_method, url_bio_create);
+        BIO_meth_set_destroy(url_bio_method, url_bio_destroy);
+#endif
     }
     openssl_init++;