- GCRY_THREAD_OPTION_USER,
- NULL,
- gcry_vlc_mutex_init,
- gcry_vlc_mutex_destroy,
- gcry_vlc_mutex_lock,
- gcry_vlc_mutex_unlock
-};
-#endif
-
-
-/*****************************************************************************
- * Module initialization
- *****************************************************************************/
-static int
-Open( vlc_object_t *p_this )
-{
- tls_t *p_tls = (tls_t *)p_this;
-
- vlc_value_t lock, count;
-
- var_Create( p_this->p_libvlc_global, "gnutls_mutex", VLC_VAR_MUTEX );
- var_Get( p_this->p_libvlc_global, "gnutls_mutex", &lock );
- vlc_mutex_lock( lock.p_address );
-
- /* Initialize GnuTLS only once */
- var_Create( p_this->p_libvlc_global, "gnutls_count", VLC_VAR_INTEGER );
- var_Get( p_this->p_libvlc_global, "gnutls_count", &count);
-
- if( count.i_int == 0)
- {
-#ifdef NEED_THREAD_CONTEXT
- __p_gcry_data = VLC_OBJECT( p_this->p_libvlc );
-#endif
-
- gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_vlc);
- if( gnutls_global_init( ) )
- {
- msg_Warn( p_this, "cannot initialize GnuTLS" );
- vlc_mutex_unlock( lock.p_address );
- return VLC_EGENERIC;
- }
-
- const char *psz_version = gnutls_check_version( "1.2.9" );
- if( psz_version == NULL )
- {
- gnutls_global_deinit( );
- vlc_mutex_unlock( lock.p_address );
- msg_Err( p_this, "unsupported GnuTLS version" );
- return VLC_EGENERIC;
- }
- msg_Dbg( p_this, "GnuTLS v%s initialized", psz_version );
- }
-
- count.i_int++;
- var_Set( p_this->p_libvlc_global, "gnutls_count", count);
- vlc_mutex_unlock( lock.p_address );
-
- p_tls->pf_server_create = gnutls_ServerCreate;
- p_tls->pf_client_create = gnutls_ClientCreate;
- return VLC_SUCCESS;
-}
-
-
-/*****************************************************************************
- * Module deinitialization
- *****************************************************************************/
-static void
-Close( vlc_object_t *p_this )
-{
- /*tls_t *p_tls = (tls_t *)p_this;
- tls_sys_t *p_sys = (tls_sys_t *)(p_this->p_sys);*/
-
- vlc_value_t lock, count;
-
- var_Create( p_this->p_libvlc_global, "gnutls_mutex", VLC_VAR_MUTEX );
- var_Get( p_this->p_libvlc_global, "gnutls_mutex", &lock );
- vlc_mutex_lock( lock.p_address );