X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_tls.h;h=e9db9cc4c958923dea9f2cf980547bdc46b81800;hb=fbb82370e75217bbb3a449d884b95091e9aaa59b;hp=f6c480667fe66bec3b923986cf60492af96d1f1b;hpb=fbb8255dcf8ced858d59927cb17c4f577a8d9c15;p=vlc diff --git a/include/vlc_tls.h b/include/vlc_tls.h index f6c480667f..e9db9cc4c9 100644 --- a/include/vlc_tls.h +++ b/include/vlc_tls.h @@ -1,78 +1,82 @@ /***************************************************************************** - * tls.c: Transport Layer Security API + * vlc_tls.h: Transport Layer Security API ***************************************************************************** - * Copyright (C) 2004-2007 the VideoLAN team - * $Id$ + * Copyright (C) 2004-2011 Rémi Denis-Courmont + * Copyright (C) 2005-2006 VLC authors and VideoLAN * - * Authors: Rémi Denis-Courmont - * - * 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 - * the Free Software Foundation; either version 2 of the License, or + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ -#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 vlc_tls_t; +typedef struct vlc_tls_sys vlc_tls_sys_t; +typedef struct vlc_tls_creds vlc_tls_creds_t; +typedef struct vlc_tls_creds_sys vlc_tls_creds_sys_t; -struct tls_server_t +/** TLS session */ +struct vlc_tls { VLC_COMMON_MEMBERS - module_t *p_module; - tls_server_sys_t *p_sys; + vlc_tls_sys_t *sys; - int (*pf_add_CA) ( tls_server_t *, const char * ); - int (*pf_add_CRL) ( tls_server_t *, const char * ); - - tls_session_t * (*pf_open) ( tls_server_t * ); - void (*pf_close) ( tls_server_t *, tls_session_t * ); + struct virtual_socket_t sock; + int (*handshake) (vlc_tls_t *, const char *host, const char *service); }; -typedef struct tls_session_sys_t tls_session_sys_t; - -struct tls_session_t -{ - VLC_COMMON_MEMBERS +VLC_API vlc_tls_t *vlc_tls_ClientSessionCreate (vlc_tls_creds_t *, int fd, + const char *host, const char *service); +vlc_tls_t *vlc_tls_SessionCreate (vlc_tls_creds_t *, int fd, const char *host); +int vlc_tls_SessionHandshake (vlc_tls_t *, const char *host, const char *serv); +VLC_API void vlc_tls_SessionDelete (vlc_tls_t *); - module_t *p_module; - tls_session_sys_t *p_sys; +/* 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)) - struct virtual_socket_t sock; - void (*pf_set_fd) ( tls_session_t *, int ); - int (*pf_handshake) ( tls_session_t * ); -}; +# define tls_Recv( a, b, c ) (((vlc_tls_t *)a)->sock.pf_recv (a, b, c)) -tls_server_t *tls_ServerCreate (vlc_object_t *, const char *, const char *); -void tls_ServerDelete (tls_server_t *); -int tls_ServerAddCA (tls_server_t *srv, const char *path); -int tls_ServerAddCRL (tls_server_t *srv, const char *path); +/** TLS credentials (certificate, private and trust settings) */ +struct vlc_tls_creds +{ + VLC_COMMON_MEMBERS -tls_session_t *tls_ServerSessionPrepare (tls_server_t *); -int tls_ServerSessionHandshake (tls_session_t *, int fd); -int tls_SessionContinueHandshake (tls_session_t *); -void tls_ServerSessionClose (tls_session_t *); + module_t *module; + vlc_tls_creds_sys_t *sys; -VLC_EXPORT( tls_session_t *, tls_ClientCreate, ( vlc_object_t *, int, const char * ) ); -VLC_EXPORT( void, tls_ClientDelete, ( tls_session_t * ) ); + int (*add_CA) (vlc_tls_creds_t *, const char *path); + int (*add_CRL) (vlc_tls_creds_t *, const char *path); -/* 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 )) + int (*open) (vlc_tls_creds_t *, vlc_tls_t *, int fd, const char *host); + void (*close) (vlc_tls_creds_t *, vlc_tls_t *); +}; -# define tls_Recv( a, b, c ) (((tls_session_t *)a)->sock.pf_recv (a, b, c )) +VLC_API vlc_tls_creds_t *vlc_tls_ClientCreate (vlc_object_t *); +vlc_tls_creds_t *vlc_tls_ServerCreate (vlc_object_t *, + const char *cert, const char *key); +VLC_API void vlc_tls_Delete (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); #endif