X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=inline;f=include%2Fvlc_tls.h;h=9889d24f243d9c1a8da02487ed06a6d74b9db9ea;hb=55f2b5d5d9a5b73db653981b2e4e1f8fc1b203ce;hp=12d37a1bb985df5a8105eca8bbed5dd6b50ed0fd;hpb=d3fe7f28797d4dba65ffcdd60bf932e758a48a9e;p=vlc diff --git a/include/vlc_tls.h b/include/vlc_tls.h index 12d37a1bb9..9889d24f24 100644 --- a/include/vlc_tls.h +++ b/include/vlc_tls.h @@ -1,10 +1,8 @@ /***************************************************************************** - * tls.c: TLS wrapper + * vlc_tls.h: Transport Layer Security API ***************************************************************************** - * Copyright (C) 2004-2005 the VideoLAN team - * $Id$ - * - * Authors: Rémi Denis-Courmont + * Copyright (C) 2004-2011 Rémi Denis-Courmont + * Copyright (C) 2005-2006 the VideoLAN team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,95 +19,66 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ -#ifndef _VLC_TLS_H -# define _VLC_TLS_H - -# include - -struct tls_t -{ - VLC_COMMON_MEMBERS +#ifndef VLC_TLS_H +# define VLC_TLS_H - /* Module properties */ - module_t *p_module; - void *p_sys; +/** + * \file + * This file defines Transport Layer Security API (TLS) in vlc + */ - tls_server_t * (*pf_server_create) ( tls_t *, const char *, - const char * ); - tls_session_t * (*pf_client_create) ( tls_t * ); -}; - -struct tls_server_t -{ - VLC_COMMON_MEMBERS - - void *p_sys; - - void (*pf_delete) ( tls_server_t * ); - - int (*pf_add_CA) ( tls_server_t *, const char * ); - int (*pf_add_CRL) ( tls_server_t *, const char * ); +# include - tls_session_t * (*pf_session_prepare) ( tls_server_t * ); -}; +typedef struct vlc_tls_sys vlc_tls_sys_t; -struct tls_session_t +typedef struct vlc_tls { VLC_COMMON_MEMBERS - void *p_sys; + union { + module_t *module; /**< Plugin handle (client) */ + void (*close) (struct vlc_tls *); /**< Close callback (server) */ + } u; + vlc_tls_sys_t *sys; struct virtual_socket_t sock; - int (*pf_handshake) ( tls_session_t *, int, const char * ); - int (*pf_handshake2) ( tls_session_t * ); - void (*pf_close) ( tls_session_t * ); -}; - - -/***************************************************************************** - * tls_ServerCreate: - ***************************************************************************** - * Allocates a whole server's TLS credentials. - * Returns NULL on error. - *****************************************************************************/ -VLC_EXPORT( tls_server_t *, tls_ServerCreate, ( vlc_object_t *, const char *, const char * ) ); - -/***************************************************************************** - * tls_ServerAddCA: - ***************************************************************************** - * Adds one or more certificate authorities. - * Returns -1 on error, 0 on success. - *****************************************************************************/ -# define tls_ServerAddCA( a, b ) (((tls_server_t *)a)->pf_add_CA (a, b)) + int (*handshake) (struct vlc_tls *); +} vlc_tls_t; +VLC_API vlc_tls_t *vlc_tls_ClientCreate (vlc_object_t *, int fd, + const char *hostname); +VLC_API void vlc_tls_ClientDelete (vlc_tls_t *); -/***************************************************************************** - * tls_ServerAddCRL: - ***************************************************************************** - * Adds a certificates revocation list to be sent to TLS clients. - * Returns -1 on error, 0 on success. - *****************************************************************************/ -# define tls_ServerAddCRL( a, b ) (((tls_server_t *)a)->pf_add_CRL (a, b)) - +/* NOTE: It is assumed that a->sock.p_sys = a */ +# define tls_Send( a, b, c ) (((vlc_tls_t *)a)->sock.pf_send (a, b, c)) -VLC_EXPORT( void, tls_ServerDelete, ( tls_server_t * ) ); +# define tls_Recv( a, b, c ) (((vlc_tls_t *)a)->sock.pf_recv (a, b, c)) -# define tls_ServerSessionPrepare( a ) (((tls_server_t *)a)->pf_session_prepare (a)) -# define tls_ServerSessionHandshake( a, b ) (((tls_session_t *)a)->pf_handshake (a, b, NULL)) -# define tls_ServerSessionClose( a ) (((tls_session_t *)a)->pf_close (a)) +typedef struct vlc_tls_creds_sys vlc_tls_creds_sys_t; -VLC_EXPORT( tls_session_t *, tls_ClientCreate, ( vlc_object_t *, int, const char * ) ); -VLC_EXPORT( void, tls_ClientDelete, ( tls_session_t * ) ); +/** TLS (server-side) credentials */ +typedef struct vlc_tls_creds +{ + VLC_COMMON_MEMBERS -# define tls_ClientSessionHandshake( a, b, c ) (((tls_session_t *)a)->pf_handshake (a, b, c)) + module_t *module; + vlc_tls_creds_sys_t *sys; -# define tls_SessionContinueHandshake( a ) (((tls_session_t *)a)->pf_handshake2 (a)) + int (*add_CA) (struct vlc_tls_creds *, const char *path); + int (*add_CRL) (struct vlc_tls_creds *, const char *path); + vlc_tls_t *(*open) (struct vlc_tls_creds *, int fd); +} vlc_tls_creds_t; -/* 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 )) +vlc_tls_creds_t *vlc_tls_ServerCreate (vlc_object_t *, + const char *cert, const char *key); +void vlc_tls_ServerDelete (vlc_tls_creds_t *); +int vlc_tls_ServerAddCA (vlc_tls_creds_t *srv, const char *path); +int vlc_tls_ServerAddCRL (vlc_tls_creds_t *srv, const char *path); -# define tls_Recv( a, b, c ) (((tls_session_t *)a)->sock.pf_recv (a, b, c )) +vlc_tls_t *vlc_tls_ServerSessionCreate (vlc_tls_creds_t *, int fd); +int vlc_tls_ServerSessionHandshake (vlc_tls_t *); +void vlc_tls_ServerSessionDelete (vlc_tls_t *); #endif