else
pthread_mutex_unlock(&openssl_mutexes[type]);
}
-#ifndef WIN32
+#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 THREADS && GNUTLS_VERSION_NUMBER <= 0x020b00
+#include <gcrypt.h>
+#include <errno.h>
+#undef malloc
+#undef free
+GCRY_THREAD_OPTION_PTHREAD_IMPL;
+#endif
+#endif
void ff_tls_init(void)
{
for (i = 0; i < CRYPTO_num_locks(); i++)
pthread_mutex_init(&openssl_mutexes[i], NULL);
CRYPTO_set_locking_callback(openssl_lock);
-#ifndef WIN32
+#if !defined(WIN32) && OPENSSL_VERSION_NUMBER < 0x10000000
CRYPTO_set_id_callback(openssl_thread_id);
#endif
}
#endif
}
openssl_init++;
+#endif
+#if CONFIG_GNUTLS
+#if THREADS && GNUTLS_VERSION_NUMBER < 0x020b00
+ if (gcry_control(GCRYCTL_ANY_INITIALIZATION_P) == 0)
+ gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
+#endif
+ gnutls_global_init();
#endif
avpriv_unlock_avformat();
}
}
#endif
}
+#endif
+#if CONFIG_GNUTLS
+ gnutls_global_deinit();
#endif
avpriv_unlock_avformat();
}
+int ff_network_inited_globally;
+
int ff_network_init(void)
{
#if HAVE_WINSOCK2_H
WSADATA wsaData;
+#endif
+
+ if (!ff_network_inited_globally)
+ av_log(NULL, AV_LOG_WARNING, "Using network protocols without global "
+ "network initialization. Please use "
+ "avformat_network_init(), this will "
+ "become mandatory later.\n");
+#if HAVE_WINSOCK2_H
if (WSAStartup(MAKEWORD(1,1), &wsaData))
return 0;
#endif
return AVERROR(EAGAIN);
case WSAEINTR:
return AVERROR(EINTR);
+ case WSAEPROTONOSUPPORT:
+ return AVERROR(EPROTONOSUPPORT);
+ case WSAETIMEDOUT:
+ return AVERROR(ETIMEDOUT);
+ case WSAECONNREFUSED:
+ return AVERROR(ECONNREFUSED);
+ case WSAEINPROGRESS:
+ return AVERROR(EINPROGRESS);
}
return -err;
}
return 0;
}
-