From: RĂ©mi Denis-Courmont Date: Sun, 7 Nov 2004 14:52:30 +0000 (+0000) Subject: Fix and simplify client-side API X-Git-Tag: 0.8.2~1748 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=551ad1148180d99f97bffb97967bb21be08ab7d3;p=vlc Fix and simplify client-side API (failed to release allocated data in some error cases) --- diff --git a/include/vlc_tls.h b/include/vlc_tls.h index 3f2b8521a0..98c465b5cc 100644 --- a/include/vlc_tls.h +++ b/include/vlc_tls.h @@ -98,13 +98,12 @@ VLC_EXPORT( void, tls_ServerDelete, ( tls_server_t * ) ); # define tls_ServerSessionPrepare( a ) (((tls_server_t *)a)->pf_session_prepare (a)) # define __tls_ClientCreate( a, b ) (((tls_t *)a)->pf_client_create (a, b )) -VLC_EXPORT( tls_session_t *, tls_ClientCreate, ( vlc_object_t *, const char * ) ); +VLC_EXPORT( tls_session_t *, tls_ClientCreate, ( vlc_object_t *, const char *, int ) ); VLC_EXPORT( void, tls_ClientDelete, ( tls_session_t * ) ); # define tls_SessionHandshake( a, b ) (((tls_session_t *)a)->pf_handshake (a, b)) # define tls_SessionClose( a ) (((tls_session_t *)a)->pf_close (a)) -# define __tls_ClientDelete( a ) tls_SessionClose( a ) /* NOTE: It is assumed that a->sock.p_sys = a */ # define tls_Send( a, b, c ) (((tls_session_t *)a)->sock.pf_send (a, b, c )) diff --git a/src/misc/tls.c b/src/misc/tls.c index 3b95ebb71a..ce16b02734 100644 --- a/src/misc/tls.c +++ b/src/misc/tls.c @@ -78,7 +78,7 @@ tls_ServerCreate( vlc_object_t *p_this, const char *psz_cert, /***************************************************************************** * tls_ServerDelete: ***************************************************************************** - * Releases data allocated with tls_ServerCreate + * Releases data allocated with tls_ServerCreate. *****************************************************************************/ void tls_ServerDelete( tls_server_t *p_server ) @@ -96,11 +96,11 @@ tls_ServerDelete( tls_server_t *p_server ) /***************************************************************************** * tls_ClientCreate: ***************************************************************************** - * Allocates a client's TLS credentials. + * Allocates a client's TLS credentials and shakes hands through the network. * Returns NULL on error. *****************************************************************************/ tls_session_t * -tls_ClientCreate( vlc_object_t *p_this, const char *psz_ca ) +tls_ClientCreate( vlc_object_t *p_this, const char *psz_ca, int fd ) { tls_t *p_tls; tls_session_t *p_session; @@ -114,8 +114,14 @@ tls_ClientCreate( vlc_object_t *p_this, const char *psz_ca ) p_session = __tls_ClientCreate( p_tls, psz_ca ); if( p_session != NULL ) { - msg_Dbg( p_this, "TLS/SSL provider initialized" ); - return p_session; + p_session = tls_SessionHandshake( p_session, fd ); + if( p_session != NULL ) + { + msg_Dbg( p_this, "TLS/SSL provider initialized" ); + return p_session; + } + else + msg_Err( p_this, "TLS/SSL session handshake error" ); } else msg_Err( p_this, "TLS/SSL provider error" ); @@ -133,14 +139,14 @@ tls_ClientCreate( vlc_object_t *p_this, const char *psz_ca ) /***************************************************************************** * tls_ClientDelete: ***************************************************************************** - * Releases data allocated with tls_ClientCreate + * Releases data allocated with tls_ClientCreate. *****************************************************************************/ void tls_ClientDelete( tls_session_t *p_session ) { tls_t *p_tls = p_session->p_tls; - __tls_ClientDelete( p_session ); + tls_SessionClose( p_session ); module_Unneed( p_tls, p_tls->p_module ); vlc_object_detach( p_tls );