summaryrefslogtreecommitdiff
path: root/libavformat/tls_openssl.c
diff options
context:
space:
mode:
authorMatt Oliver <protogonoi@gmail.com>2016-10-10 06:49:54 +1100
committerMartin Storsjö <martin@martin.st>2016-10-23 22:02:08 +0300
commitee050797664c7c74cae262ffab05006b55d47a11 (patch)
treefe8d7d53efb856fd6c58d2a978aaf037411f5da5 /libavformat/tls_openssl.c
parent016387fe0fe3eff1a03ec0673bf4d2967f6cad94 (diff)
downloadffmpeg-ee050797664c7c74cae262ffab05006b55d47a11.tar.gz
openssl: Support version 1.1.0.
Further simplifications by Martin Storsjö, to minimize the diff. Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavformat/tls_openssl.c')
-rw-r--r--libavformat/tls_openssl.c37
1 files changed, 35 insertions, 2 deletions
diff --git a/libavformat/tls_openssl.c b/libavformat/tls_openssl.c
index a75674e31f..4d94774355 100644
--- a/libavformat/tls_openssl.c
+++ b/libavformat/tls_openssl.c
@@ -43,6 +43,9 @@ typedef struct TLSContext {
TLSShared tls_shared;
SSL_CTX *ctx;
SSL *ssl;
+#if OPENSSL_VERSION_NUMBER >= 0x1010000fL
+ BIO_METHOD* url_bio_method;
+#endif
} TLSContext;
#if HAVE_THREADS
@@ -121,15 +124,25 @@ 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 >= 0x1010000fL
+ if (c->url_bio_method)
+ BIO_meth_free(c->url_bio_method);
+#endif
ff_openssl_deinit();
return 0;
}
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;
}
@@ -138,9 +151,15 @@ static int url_bio_destroy(BIO *b)
return 1;
}
+#if OPENSSL_VERSION_NUMBER >= 0x1010000fL
+#define GET_BIO_DATA(x) BIO_get_data(x);
+#else
+#define GET_BIO_DATA(x) (x)->ptr;
+#endif
+
static int url_bio_bread(BIO *b, char *buf, int len)
{
- URLContext *h = b->ptr;
+ URLContext *h = GET_BIO_DATA(b);
int ret = ffurl_read(h, buf, len);
if (ret >= 0)
return ret;
@@ -152,7 +171,7 @@ static int url_bio_bread(BIO *b, char *buf, int len)
static int url_bio_bwrite(BIO *b, const char *buf, int len)
{
- URLContext *h = b->ptr;
+ URLContext *h = GET_BIO_DATA(b);
int ret = ffurl_write(h, buf, len);
if (ret >= 0)
return ret;
@@ -176,6 +195,7 @@ 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 = {
.type = BIO_TYPE_SOURCE_SINK,
.name = "urlprotocol bio",
@@ -187,6 +207,7 @@ static BIO_METHOD url_bio_method = {
.create = url_bio_create,
.destroy = url_bio_destroy,
};
+#endif
static int tls_open(URLContext *h, const char *uri, int flags, AVDictionary **options)
{
@@ -230,8 +251,20 @@ static int tls_open(URLContext *h, const char *uri, int flags, AVDictionary **op
ret = AVERROR(EIO);
goto fail;
}
+#if OPENSSL_VERSION_NUMBER >= 0x1010000fL
+ 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);
+ BIO_meth_set_puts(p->url_bio_method, url_bio_bputs);
+ BIO_meth_set_ctrl(p->url_bio_method, url_bio_ctrl);
+ BIO_meth_set_create(p->url_bio_method, url_bio_create);
+ BIO_meth_set_destroy(p->url_bio_method, url_bio_destroy);
+ bio = BIO_new(p->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);