xine-lib  1.2.10
xine_tls.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2000-2019 the xine project
3  * Copyright (C) 2018 Petri Hintukainen <phintuka@users.sourceforge.net>
4  *
5  * This file is part of xine, a free video player.
6  *
7  * xine is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * xine is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
20  *
21  * input plugin TLS helpers
22  */
23 
24 #ifndef XINE_INPUT_TLS_H
25 #define XINE_INPUT_TLS_H
26 
27 /*
28  * xine_tls layer is a simple wrapper for _x_io_tcp_*() functions.
29  * _x_io_*() functions can be simply replaced with _x_tls_*() functions.
30  *
31  * Connection is unencrypted until _x_tls_handshake() is called.
32  * Unencrypted TCP connection can be used even if TLS support was not compiled in.
33  */
34 
35 #include <xine/xine_internal.h>
36 
37 typedef struct xine_tls xine_tls_t;
38 
39 /*
40  * TCP connection
41  */
42 
44 
45 /* open/close by host and port. */
46 xine_tls_t *_x_tls_connect(xine_t *xine, xine_stream_t *stream, const char *host, int port);
47 /* also close fd. */
48 void _x_tls_close (xine_tls_t **tlsp);
49 
50 /* same thing on an existing user file handle.
51  * This is useful when doing _x_io_tcp_handshake_connect () and/or SOCKS4. */
53 /* do NOT close fd. */
54 void _x_tls_deinit (xine_tls_t **tlsp);
55 
56 ssize_t _x_tls_part_read(xine_tls_t *, void *data, size_t min, size_t max);
57 ssize_t _x_tls_read(xine_tls_t *, void *data, size_t len);
58 ssize_t _x_tls_write(xine_tls_t *, const void *data, size_t len);
59 ssize_t _x_tls_read_line(xine_tls_t *, char *buf, size_t buf_size);
60 
61 /*
62  * TLS
63  */
64 
72 int _x_tls_handshake(xine_tls_t *, const char *host, int verify);
73 
80 
81 /*
82  * config helpers
83  */
84 
86 
87 #endif /* XINE_INPUT_TLS_H */
88 
xine_s
Definition: xine_internal.h:80
tls_openssl_t::stream
xine_stream_t * stream
Definition: tls_openssl.c:52
tls_register_config_keys
static void tls_register_config_keys(config_values_t *config)
Definition: xine_tls_plugin.h:60
_x_find_module
xine_module_t * _x_find_module(xine_t *xine, const char *type, const char *id, unsigned sub_type, const void *params)
Definition: load_plugins.c:1769
LOG_MODULE
#define LOG_MODULE
Definition: tls_openssl.c:38
_x_tls_read_line
ssize_t _x_tls_read_line(xine_tls_t *t, char *buf, size_t buf_size)
Definition: xine_tls.c:92
_bio_read
static int _bio_read(BIO *b, char *buf, int len)
Definition: tls_openssl.c:76
xine_tls.h
xine_stream_s
Definition: xine_internal.h:123
_x_io_tcp_write
off_t _x_io_tcp_write(xine_stream_t *stream, int s, const void *wbuf_gen, off_t todo)
Definition: io_helper.c:607
_x_io_tcp_read_line
int _x_io_tcp_read_line(xine_stream_t *stream, int sock, char *str, int size)
Definition: io_helper.c:714
EXPORTED
const plugin_info_t xine_plugin_info[] EXPORTED
Definition: tls_openssl.c:376
_x_tls_read
ssize_t _x_tls_read(xine_tls_t *, void *data, size_t len)
Definition: xine_tls.c:84
tls_openssl_t::xine
xine_t * xine
Definition: tls_openssl.c:53
_bio_destroy
static int _bio_destroy(BIO *b)
Definition: tls_openssl.c:126
tls_plugin_params_t::stream
xine_stream_t * stream
Definition: xine_tls_plugin.h:35
xineutils.h
xine_module_s
Definition: xine_module.h:62
xine_plugin.h
xine_tls::enabled
int enabled
Definition: xine_tls.c:46
EXPORTED
const plugin_info_t xine_plugin_info[] EXPORTED
Definition: tls_gnutls.c:537
_gnutls_dispose
static void _gnutls_dispose(xine_module_t *this_gen)
Definition: tls_gnutls.c:462
_openssl_handshake
static int _openssl_handshake(tls_plugin_t *this_gen, const char *host, int verify)
Definition: tls_openssl.c:244
_x_tls_part_read
ssize_t _x_tls_part_read(xine_tls_t *t, void *buf, size_t min, size_t max)
Definition: xine_tls.c:76
xine_fast_memcpy
void *(* xine_fast_memcpy)(void *to, const void *from, size_t len)
Definition: memcpy.c:60
tls_gnutls_t::stream
xine_stream_t * stream
Definition: tls_gnutls.c:63
_x_io_select
int _x_io_select(xine_stream_t *stream, int fd, int state, int timeout_msec)
Definition: io_helper.c:356
_x_free_module
void _x_free_module(xine_t *xine, xine_module_t **pmodule)
Definition: load_plugins.c:1807
xine_module_class_s
Definition: xine_module.h:29
_bio_puts
static int _bio_puts(BIO *b, const char *str)
Definition: tls_openssl.c:96
_bio_write
static int _bio_write(BIO *b, const char *buf, int len)
Definition: tls_openssl.c:86
tls_gnutls_t::xine
xine_t * xine
Definition: tls_gnutls.c:64
_gnutls_shutdown
static void _gnutls_shutdown(tls_plugin_t *this_gen)
Definition: tls_gnutls.c:335
_bio_create
static int _bio_create(BIO *b)
Definition: tls_openssl.c:112
_x_tls_close
void _x_tls_close(xine_tls_t **pt)
Definition: xine_tls.c:139
tls_plugin_s
Definition: xine_tls_plugin.h:41
_bio_new
static BIO * _bio_new(tls_openssl_t *this)
Definition: tls_openssl.c:132
io_helper.h
_x_tls_write
ssize_t _x_tls_write(xine_tls_t *t, const void *buf, size_t len)
Definition: xine_tls.c:68
_x_tls_deinit
void _x_tls_deinit(xine_tls_t **pt)
Definition: xine_tls.c:154
S_ISREG
#define S_ISREG(mode)
Definition: input_file.c:464
_openssl_write
static ssize_t _openssl_write(tls_plugin_t *this_gen, const void *buf, size_t len)
Definition: tls_openssl.c:173
_x_tls_handshake
int _x_tls_handshake(xine_tls_t *t, const char *host, int verify)
Definition: xine_tls.c:198
gnutls_tcp_pull
static ssize_t gnutls_tcp_pull(gnutls_transport_ptr_t tp, void *buf, size_t len)
Definition: tls_gnutls.c:81
xine_tls::tls
tls_plugin_t * tls
Definition: xine_tls.c:44
tls_openssl_t::ctx
SSL_CTX * ctx
Definition: tls_openssl.c:57
_gnutls_read
static ssize_t _gnutls_read(tls_plugin_t *this_gen, void *buf, size_t len)
Definition: tls_gnutls.c:177
_openssl_class_dispose
static void _openssl_class_dispose(xine_module_class_t *cls_gen)
Definition: tls_openssl.c:338
tls_plugin_params_t::fd
int fd
Definition: xine_tls_plugin.h:36
xine_tls::xine
xine_t * xine
Definition: xine_tls.c:42
openssl_class_t::inited
int inited
Definition: tls_openssl.c:69
module_info_gnutls
static const xine_module_info_t module_info_gnutls
Definition: tls_gnutls.c:532
NULL
NULL
Definition: xine_plugin.c:78
xine_small_memcpy
#define xine_small_memcpy(xsm_to, xsm_from, xsm_len)
Definition: xineutils.h:201
XIO_WRITE_READY
#define XIO_WRITE_READY
Definition: io_helper.h:31
tls_gnutls_t::tls_plugin
tls_plugin_t tls_plugin
Definition: tls_gnutls.c:61
XIO_READY
#define XIO_READY
Definition: io_helper.h:34
XINE_VERBOSITY_LOG
#define XINE_VERBOSITY_LOG
Definition: xine.h:425
_x_assert
#define _x_assert(exp)
Definition: xineutils.h:550
gnutls_init_class
static void * gnutls_init_class(xine_t *xine, const void *data)
Definition: tls_gnutls.c:511
_x_freep
static void _x_freep(void *ptr)
Definition: xineutils.h:263
tls_openssl_t::ssl
SSL * ssl
Definition: tls_openssl.c:58
openssl_class_t::lock
pthread_mutex_t lock
Definition: tls_openssl.c:68
list_t
#define list_t
xine_module_class_s::get_instance
xine_module_t *(* get_instance)(xine_module_class_t *, const void *params)
Definition: xine_module.h:35
XIO_READ_READY
#define XIO_READ_READY
Definition: io_helper.h:30
xine_s::config
config_values_t * config
Definition: xine_internal.h:82
_x_query_network_timeout
int _x_query_network_timeout(xine_t *xine_gen)
Definition: xine.c:2625
tls_gnutls_t
Definition: tls_gnutls.c:60
XINE_VERSION_CODE
#define XINE_VERSION_CODE
Definition: xine_internal.h:57
xine_module_info_t::priority
int priority
Definition: xine_plugin.h:104
_openssl_dispose
static void _openssl_dispose(xine_module_t *this_gen)
Definition: tls_openssl.c:298
_gnutls_part_read
static ssize_t _gnutls_part_read(tls_plugin_t *this_gen, void *buf, size_t min, size_t max)
Definition: tls_gnutls.c:206
config_values_s
Definition: configfile.h:83
_x_tls_deinit
void _x_tls_deinit(xine_tls_t **tlsp)
Definition: xine_tls.c:154
_x_tls_init
xine_tls_t * _x_tls_init(xine_t *xine, xine_stream_t *stream, int fd)
Definition: xine_tls.c:166
LOG_MODULE
#define LOG_MODULE
Definition: tls_gnutls.c:50
xine_tls::stream
xine_stream_t * stream
Definition: xine_tls.c:43
tls_plugin_s::write
ssize_t(* write)(tls_plugin_t *, const void *buf, size_t len)
Definition: xine_tls_plugin.h:48
_x_tls_close
void _x_tls_close(xine_tls_t **tlsp)
Definition: xine_tls.c:139
tls_gnutls_t::buf_got
size_t buf_got
Definition: tls_gnutls.c:72
_x_tls_shutdown
void _x_tls_shutdown(xine_tls_t *)
Definition: xine_tls.c:128
_openssl_get_instance
static xine_module_t * _openssl_get_instance(xine_module_class_t *cls_gen, const void *params_gen)
Definition: tls_openssl.c:304
_x_tls_write
ssize_t _x_tls_write(xine_tls_t *, const void *data, size_t len)
Definition: xine_tls.c:68
_gnutls_load_certs
static int _gnutls_load_certs(tls_gnutls_t *this, const char *dirname)
Definition: tls_gnutls.c:235
_x_tls_handshake
int _x_tls_handshake(xine_tls_t *, const char *host, int verify)
Definition: xine_tls.c:198
tls_get_verify_tls_cert
static int tls_get_verify_tls_cert(config_values_t *config)
Definition: xine_tls_plugin.h:70
_openssl_init_class
static void * _openssl_init_class(xine_t *xine, const void *data)
Definition: tls_openssl.c:345
XINE_GNUTLS_INIT_FLAGS
#define XINE_GNUTLS_INIT_FLAGS
Definition: tls_gnutls.c:40
XINE_VERBOSITY_DEBUG
#define XINE_VERBOSITY_DEBUG
Definition: xine.h:426
_x_tls_read_line
ssize_t _x_tls_read_line(xine_tls_t *, char *buf, size_t buf_size)
Definition: xine_tls.c:92
_gnutls_write
static ssize_t _gnutls_write(tls_plugin_t *this_gen, const void *buf, size_t len)
Definition: tls_gnutls.c:148
tls_plugin_params_t
Definition: xine_tls_plugin.h:33
_x_tls_get_verify_tls_cert
int _x_tls_get_verify_tls_cert(config_values_t *)
Definition: xine_tls.c:225
_x_find_tls_plugin
static tls_plugin_t * _x_find_tls_plugin(xine_t *xine, tls_plugin_params_t *params)
Definition: xine_tls.c:53
tls_openssl_t::fd
int fd
Definition: tls_openssl.c:55
_x_tls_connect
xine_tls_t * _x_tls_connect(xine_t *xine, xine_stream_t *stream, const char *host, int port)
Definition: xine_tls.c:180
_x_free_tls_plugin
static void _x_free_tls_plugin(xine_t *xine, tls_plugin_t **tls)
Definition: xine_tls.c:58
_openssl_shutdown
static void _openssl_shutdown(tls_plugin_t *this_gen)
Definition: tls_openssl.c:223
gnutls_get_instance
static xine_module_t * gnutls_get_instance(xine_module_class_t *cls_gen, const void *params_gen)
Definition: tls_gnutls.c:471
_bio_ctrl
static long _bio_ctrl(BIO *b, int cmd, long num, void *ptr)
Definition: tls_openssl.c:101
LOG_MODULE
#define LOG_MODULE
Definition: xine_tls.c:27
_x_tls_part_read
ssize_t _x_tls_part_read(xine_tls_t *, void *data, size_t min, size_t max)
Definition: xine_tls.c:76
openssl_class_t
Definition: tls_openssl.c:65
tls_gnutls_t::session
gnutls_session_t session
Definition: tls_gnutls.c:69
xine_tls
Definition: xine_tls.c:41
_x_tls_available
int _x_tls_available(xine_t *xine)
Definition: xine_tls.c:230
xine_module_info_t
Definition: xine_plugin.h:103
tls_openssl_t::tls_plugin
tls_plugin_t tls_plugin
Definition: tls_openssl.c:50
tls_gnutls_t::need_shutdown
int need_shutdown
Definition: tls_gnutls.c:67
PLUGIN_NONE
#define PLUGIN_NONE
Definition: xine_plugin.h:29
xine_tls_plugin.h
xine_internal.h
tls_plugin_s::read
ssize_t(* read)(tls_plugin_t *, void *buf, size_t len)
Definition: xine_tls_plugin.h:47
tls_openssl_t
Definition: tls_openssl.c:49
tls_gnutls_t::fd
int fd
Definition: tls_gnutls.c:66
tls_plugin_params_t::xine
xine_t * xine
Definition: xine_tls_plugin.h:34
config.h
_x_io_tcp_connect
int _x_io_tcp_connect(xine_stream_t *stream, const char *host, int port)
Definition: io_helper.c:159
tls_plugin_s::shutdown
void(* shutdown)(tls_plugin_t *)
Definition: xine_tls_plugin.h:45
_x_io_tcp_part_read
ssize_t _x_io_tcp_part_read(xine_stream_t *stream, int s, void *buf_gen, size_t min, size_t max)
Definition: io_helper.c:558
gnutls_tcp_push
static ssize_t gnutls_tcp_push(gnutls_transport_ptr_t tp, const void *buf, size_t len)
Definition: tls_gnutls.c:118
module_info_openssl
static const xine_module_info_t module_info_openssl
Definition: tls_openssl.c:371
_x_tls_get_verify_tls_cert
int _x_tls_get_verify_tls_cert(config_values_t *config)
Definition: xine_tls.c:225
xine_tls::fd
int fd
Definition: xine_tls.c:45
_x_tls_connect
xine_tls_t * _x_tls_connect(xine_t *xine, xine_stream_t *stream, const char *host, int port)
Definition: xine_tls.c:180
_openssl_part_read
static ssize_t _openssl_part_read(tls_plugin_t *this_gen, void *buf, size_t min, size_t max)
Definition: tls_openssl.c:205
_x_io_tcp_close
int _x_io_tcp_close(xine_stream_t *stream, int fd)
Definition: io_helper.c:740
_gnutls_handshake
static int _gnutls_handshake(tls_plugin_t *this_gen, const char *host, int verify)
Definition: tls_gnutls.c:362
_x_tls_shutdown
void _x_tls_shutdown(xine_tls_t *t)
Definition: xine_tls.c:128
PLUGIN_XINE_MODULE
#define PLUGIN_XINE_MODULE
Definition: xine_plugin.h:41
_x_tls_init
xine_tls_t * _x_tls_init(xine_t *xine, xine_stream_t *stream, int fd)
Definition: xine_tls.c:166
plugin_info_t
Definition: xine_plugin.h:55
_x_tls_available
int _x_tls_available(xine_t *xine)
Definition: xine_tls.c:230
tls_plugin_s::handshake
int(* handshake)(tls_plugin_t *, const char *host, int verify)
Definition: xine_tls_plugin.h:44
xprintf
#define xprintf(xine, verbose,...)
Definition: xineutils.h:664
tls_gnutls_t::cred
gnutls_certificate_credentials_t cred
Definition: tls_gnutls.c:70
tls_plugin_s::part_read
ssize_t(* part_read)(tls_plugin_t *, void *buf, size_t min, size_t max)
Definition: xine_tls_plugin.h:49
N_
#define N_(String)
Definition: xineintl.h:47
_x_tls_read
ssize_t _x_tls_read(xine_tls_t *t, void *buf, size_t len)
Definition: xine_tls.c:84
openssl_class_t::module_class
xine_module_class_t module_class
Definition: tls_openssl.c:66
_openssl_read
static ssize_t _openssl_read(tls_plugin_t *this_gen, void *buf, size_t len)
Definition: tls_openssl.c:189
_x_io_tcp_read
off_t _x_io_tcp_read(xine_stream_t *stream, int s, void *buf_gen, off_t todo)
Definition: io_helper.c:524