diff options
author | wm4 <nfxjfg@googlemail.com> | 2015-05-27 12:57:51 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-05-27 22:24:00 +0200 |
commit | a9f1d584e53fb39d983201585cb136986a85cac8 (patch) | |
tree | 894d369cab04efe2e40db0fc67f98d08699aaf93 /libavformat/network.c | |
parent | fbf9583f9f88b24e0cb7c35b253193ae8f35e93d (diff) | |
download | ffmpeg-a9f1d584e53fb39d983201585cb136986a85cac8.tar.gz |
lavf: move TLS-related ifdeffery to library specific files
There is no need to have this mess in network.c.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/network.c')
-rw-r--r-- | libavformat/network.c | 99 |
1 files changed, 11 insertions, 88 deletions
diff --git a/libavformat/network.c b/libavformat/network.c index 57a5b418e7..2d0503168e 100644 --- a/libavformat/network.c +++ b/libavformat/network.c @@ -20,111 +20,34 @@ #include <fcntl.h> #include "network.h" +#include "tls.h" #include "url.h" #include "libavcodec/internal.h" #include "libavutil/avutil.h" #include "libavutil/mem.h" #include "libavutil/time.h" -#if HAVE_THREADS -#if HAVE_PTHREADS -#include <pthread.h> -#elif HAVE_OS2THREADS -#include "compat/os2threads.h" -#else -#include "compat/w32pthreads.h" -#endif -#endif - -#if CONFIG_OPENSSL -#include <openssl/ssl.h> -static int openssl_init; -#if HAVE_THREADS -#include <openssl/crypto.h> -pthread_mutex_t *openssl_mutexes; -static void openssl_lock(int mode, int type, const char *file, int line) -{ - if (mode & CRYPTO_LOCK) - pthread_mutex_lock(&openssl_mutexes[type]); - else - pthread_mutex_unlock(&openssl_mutexes[type]); -} -#if !defined(WIN32) && OPENSSL_VERSION_NUMBER < 0x10000000 -static unsigned long openssl_thread_id(void) -{ - return (intptr_t) pthread_self(); -} -#endif -#endif -#endif -#if CONFIG_GNUTLS -#include <gnutls/gnutls.h> -#if HAVE_THREADS && GNUTLS_VERSION_NUMBER <= 0x020b00 -#include <gcrypt.h> -#include <errno.h> -GCRY_THREAD_OPTION_PTHREAD_IMPL; -#endif -#endif - int ff_tls_init(void) { - avpriv_lock_avformat(); -#if CONFIG_OPENSSL - if (!openssl_init) { - SSL_library_init(); - SSL_load_error_strings(); -#if HAVE_THREADS - if (!CRYPTO_get_locking_callback()) { - int i; - openssl_mutexes = av_malloc_array(sizeof(pthread_mutex_t), CRYPTO_num_locks()); - if (!openssl_mutexes) { - avpriv_unlock_avformat(); - return AVERROR(ENOMEM); - } - for (i = 0; i < CRYPTO_num_locks(); i++) - pthread_mutex_init(&openssl_mutexes[i], NULL); - CRYPTO_set_locking_callback(openssl_lock); -#if !defined(WIN32) && OPENSSL_VERSION_NUMBER < 0x10000000 - CRYPTO_set_id_callback(openssl_thread_id); -#endif - } -#endif - } - openssl_init++; -#endif -#if CONFIG_GNUTLS -#if HAVE_THREADS && GNUTLS_VERSION_NUMBER < 0x020b00 - if (gcry_control(GCRYCTL_ANY_INITIALIZATION_P) == 0) - gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread); + int ret; +#if CONFIG_TLS_OPENSSL_PROTOCOL + if ((ret = ff_openssl_init()) < 0) + return ret; #endif - gnutls_global_init(); +#if CONFIG_TLS_GNUTLS_PROTOCOL + ff_gnutls_init(); #endif - avpriv_unlock_avformat(); - return 0; } void ff_tls_deinit(void) { - avpriv_lock_avformat(); -#if CONFIG_OPENSSL - openssl_init--; - if (!openssl_init) { -#if HAVE_THREADS - if (CRYPTO_get_locking_callback() == openssl_lock) { - int i; - CRYPTO_set_locking_callback(NULL); - for (i = 0; i < CRYPTO_num_locks(); i++) - pthread_mutex_destroy(&openssl_mutexes[i]); - av_free(openssl_mutexes); - } -#endif - } +#if CONFIG_TLS_OPENSSL_PROTOCOL + ff_openssl_deinit(); #endif -#if CONFIG_GNUTLS - gnutls_global_deinit(); +#if CONFIG_TLS_GNUTLS_PROTOCOL + ff_gnutls_deinit(); #endif - avpriv_unlock_avformat(); } int ff_network_inited_globally; |