X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_tls.h;h=9889d24f243d9c1a8da02487ed06a6d74b9db9ea;hb=4eebe9d21e0e4dd2fee41ba0b39bb407ac6aa6f8;hp=4fcb5d91d45f7c3eed30fd4fb44ab9ab05386ac8;hpb=bd807d2ac87015d6175664a7eec319a56b2bbeb3;p=vlc diff --git a/include/vlc_tls.h b/include/vlc_tls.h index 4fcb5d91d4..9889d24f24 100644 --- a/include/vlc_tls.h +++ b/include/vlc_tls.h @@ -1,10 +1,8 @@ /***************************************************************************** - * tls.c: Transport Layer Security API + * vlc_tls.h: Transport Layer Security API ***************************************************************************** - * Copyright (C) 2004-2007 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,90 +19,66 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ -#if !defined( __LIBVLC__ ) - #error You are not libvlc or one of its plugins. You cannot include this file -#endif +#ifndef VLC_TLS_H +# define VLC_TLS_H -#ifndef _VLC_TLS_H -# define _VLC_TLS_H +/** + * \file + * This file defines Transport Layer Security API (TLS) in vlc + */ # include -typedef struct tls_server_sys_t tls_server_sys_t; +typedef struct vlc_tls_sys vlc_tls_sys_t; -struct tls_server_t +typedef struct vlc_tls { VLC_COMMON_MEMBERS - module_t *p_module; - tls_server_sys_t *p_sys; - - int (*pf_add_CA) ( tls_server_t *, const char * ); - int (*pf_add_CRL) ( tls_server_t *, const char * ); - - tls_session_t * (*pf_session_prepare) ( tls_server_t * ); -}; - -typedef struct tls_session_sys_t tls_session_sys_t; - -struct tls_session_t -{ - VLC_COMMON_MEMBERS - - module_t *p_module; - tls_session_sys_t *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 ); - 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 * ) ); + int (*handshake) (struct vlc_tls *); +} vlc_tls_t; -/***************************************************************************** - * 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)) - - -/***************************************************************************** - * 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)) +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 *); +/* 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)) -# 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 ) (((tls_session_t *)a)->pf_handshake (a, b)) + 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