|
Asterisk - The Open Source Telephony Project GIT-master-70eff7f
|
Code to support TCP and TLS server/client. More...
#include "asterisk.h"#include "asterisk/tcptls.h"#include "asterisk/iostream.h"#include <fcntl.h>#include <netinet/in.h>#include <pthread.h>#include <signal.h>#include <sys/socket.h>#include <sys/stat.h>#include "asterisk/app.h"#include "asterisk/astobj2.h"#include "asterisk/compat.h"#include "asterisk/config.h"#include "asterisk/io.h"#include "asterisk/lock.h"#include "asterisk/logger.h"#include "asterisk/netsock2.h"#include "asterisk/pbx.h"#include "asterisk/utils.h"
Go to the source code of this file.
Functions | |
| static int | __ssl_setup (struct ast_tls_config *cfg, int client, int suppress_progress_msgs) |
| int | ast_ssl_setup (struct ast_tls_config *cfg) |
| Set up an SSL server. | |
| int | ast_ssl_setup_client (struct ast_tls_config *cfg) |
| Set up an SSL client. | |
| void | ast_ssl_teardown (struct ast_tls_config *cfg) |
| free resources used by an SSL server | |
| struct ast_tcptls_session_instance * | ast_tcptls_client_create (struct ast_tcptls_session_args *desc) |
| Creates a client connection's ast_tcptls_session_instance. | |
| struct ast_tcptls_session_instance * | ast_tcptls_client_start (struct ast_tcptls_session_instance *tcptls_session) |
| Attempt to connect and start a tcptls session. | |
| struct ast_tcptls_session_instance * | ast_tcptls_client_start_timeout (struct ast_tcptls_session_instance *tcptls_session, int timeout) |
| Attempt to connect and start a tcptls session within the given timeout. | |
| void | ast_tcptls_close_session_file (struct ast_tcptls_session_instance *tcptls_session) |
| Closes a tcptls session instance's file and/or file descriptor. The tcptls_session will be set to NULL and it's file descriptor will be set to -1 by this function. | |
| void * | ast_tcptls_server_root (void *data) |
| void | ast_tcptls_server_start (struct ast_tcptls_session_args *desc) |
| This is a generic (re)start routine for a TCP server, which does the socket/bind/listen and starts a thread for handling accept(). | |
| void | ast_tcptls_server_stop (struct ast_tcptls_session_args *desc) |
| Shutdown a running server if there is one. | |
| struct ast_tcptls_session_instance * | ast_tcptls_start_tls (struct ast_tcptls_session_instance *tcptls_session) |
| Start TLS negotiation on an existing unsecured connection. | |
| int | ast_tls_read_conf (struct ast_tls_config *tls_cfg, struct ast_tcptls_session_args *tls_desc, const char *varname, const char *value) |
| Used to parse conf files containing tls/ssl options. | |
| static void * | handle_tcptls_connection (void *data) |
| creates a FILE * from the fd passed by the accept thread. This operation is potentially expensive (certificate verification), so we do it in the child thread context. | |
| static void | session_instance_destructor (void *obj) |
| static int | socket_connect (int sockfd, const struct ast_sockaddr *addr, int timeout) |
Code to support TCP and TLS server/client.
Definition in file tcptls.c.
|
static |
Definition at line 400 of file tcptls.c.
References ast_debug, ast_log, AST_SSL_DISABLE_TLSV1, AST_SSL_DISABLE_TLSV11, AST_SSL_DISABLE_TLSV12, AST_SSL_SERVER_CIPHER_ORDER, AST_SSL_SSLV2_CLIENT, AST_SSL_SSLV3_CLIENT, AST_SSL_TLSV1_CLIENT, AST_SSL_VERIFY_CLIENT, ast_strlen_zero(), ast_test_flag, ast_verb, ast_tls_config::cafile, ast_tls_config::capath, ast_tls_config::certfile, ast_tls_config::cipher, ast_tcptls_session_instance::client, ast_tls_config::enabled, ast_tls_config::flags, LOG_ERROR, LOG_WARNING, NULL, options, ast_tls_config::pvtfile, S_OR, and ast_tls_config::ssl_ctx.
Referenced by ast_ssl_setup(), ast_ssl_setup_client(), and ast_tcptls_client_start_timeout().
| int ast_ssl_setup | ( | struct ast_tls_config * | cfg | ) |
Set up an SSL server.
| cfg | Configuration for the SSL server |
| 1 | Success |
| 0 | Failure |
Definition at line 595 of file tcptls.c.
References __ssl_setup().
Referenced by __ast_http_load(), and __init_manager().
| int ast_ssl_setup_client | ( | struct ast_tls_config * | cfg | ) |
Set up an SSL client.
| cfg | Configuration for the SSL client |
| 1 | Success |
| 0 | Failure |
Definition at line 600 of file tcptls.c.
References __ssl_setup().
Referenced by websocket_client_connect().
| void ast_ssl_teardown | ( | struct ast_tls_config * | cfg | ) |
free resources used by an SSL server
| cfg | Configuration for the SSL server |
Definition at line 605 of file tcptls.c.
References NULL, and ast_tls_config::ssl_ctx.
Referenced by websocket_client_args_destroy().
| struct ast_tcptls_session_instance * ast_tcptls_client_create | ( | struct ast_tcptls_session_args * | desc | ) |
Creates a client connection's ast_tcptls_session_instance.
Definition at line 709 of file tcptls.c.
References ao2_alloc, ao2_cleanup, ast_assert, ast_bind(), ast_debug, ast_iostream_from_fd(), ast_iostream_set_sni_hostname(), ast_log, ast_sockaddr_cmp(), ast_sockaddr_copy(), ast_sockaddr_is_any(), ast_sockaddr_is_ipv6(), ast_sockaddr_isnull(), ast_sockaddr_setnull(), ast_sockaddr_stringify(), ast_socket_nonblock, AST_SSL_DONT_VERIFY_SERVER, ast_str_create, ast_strlen_zero(), ast_test_flag, ast_tcptls_session_instance::client, desc, errno, error(), LOG_ERROR, LOG_WARNING, NULL, ast_tcptls_session_instance::overflow_buf, ast_tcptls_session_instance::parent, ast_tcptls_session_instance::remote_address, session_instance_destructor(), ast_tcptls_session_instance::stream, and ast_tcptls_session_args::worker_fn.
Referenced by app_exec(), and websocket_client_connect().
| struct ast_tcptls_session_instance * ast_tcptls_client_start | ( | struct ast_tcptls_session_instance * | tcptls_session | ) |
Attempt to connect and start a tcptls session.
Blocks until a connection is established, or an error occurs.
| tcptls_session | The session instance to connect and start |
Definition at line 704 of file tcptls.c.
References ast_tcptls_client_start_timeout().
Referenced by app_exec().
| struct ast_tcptls_session_instance * ast_tcptls_client_start_timeout | ( | struct ast_tcptls_session_instance * | tcptls_session, |
| int | timeout | ||
| ) |
Attempt to connect and start a tcptls session within the given timeout.
| tcptls_session | The session instance to connect and start |
| timeout | How long (in milliseconds) to attempt to connect (-1 equals infinite) |
Definition at line 675 of file tcptls.c.
References __ssl_setup(), ao2_ref, ast_fd_clear_flags, ast_log, ast_sockaddr_stringify(), desc, errno, handle_tcptls_connection(), LOG_WARNING, NULL, ast_tcptls_session_instance::parent, and socket_connect().
Referenced by ast_tcptls_client_start(), and websocket_client_connect().
| void ast_tcptls_close_session_file | ( | struct ast_tcptls_session_instance * | tcptls_session | ) |
Closes a tcptls session instance's file and/or file descriptor. The tcptls_session will be set to NULL and it's file descriptor will be set to -1 by this function.
Definition at line 946 of file tcptls.c.
References ast_debug, ast_iostream_close(), NULL, and ast_tcptls_session_instance::stream.
Referenced by ast_http_create_response(), ast_http_send(), ast_tcptls_start_tls(), handle_tcptls_connection(), and httpd_helper_thread().
| void * ast_tcptls_server_root | ( | void * | data | ) |
Definition at line 298 of file tcptls.c.
References ao2_alloc, ao2_ref, ast_accept(), ast_fd_clear_flags, ast_iostream_from_fd(), ast_log, ast_pthread_create_detached_background, ast_sockaddr_copy(), ast_sockaddr_stringify(), ast_str_create, ast_wait_for_input(), ast_tcptls_session_instance::client, desc, errno, handle_tcptls_connection(), LOG_ERROR, NULL, ast_tcptls_session_instance::overflow_buf, ast_tcptls_session_instance::parent, ast_tcptls_session_instance::remote_address, session_instance_destructor(), and ast_tcptls_session_instance::stream.
Referenced by http_server_create().
| void ast_tcptls_server_start | ( | struct ast_tcptls_session_args * | desc | ) |
This is a generic (re)start routine for a TCP server, which does the socket/bind/listen and starts a thread for handling accept().
Definition at line 791 of file tcptls.c.
References ast_bind(), ast_calloc, ast_debug, ast_free, ast_log, ast_pthread_create_background, AST_PTHREADT_NULL, ast_read_textfile(), ast_sd_get_fd(), ast_sha1_hash(), ast_sockaddr_cmp(), ast_sockaddr_copy(), ast_sockaddr_is_ipv6(), ast_sockaddr_isnull(), ast_sockaddr_setnull(), ast_sockaddr_stringify(), ast_socket_nonblock, ast_strdup, desc, errno, error(), LOG_ERROR, NULL, and str.
Referenced by __ast_http_load(), __init_manager(), and http_server_start().
| void ast_tcptls_server_stop | ( | struct ast_tcptls_session_args * | desc | ) |
Shutdown a running server if there is one.
Definition at line 956 of file tcptls.c.
References ast_debug, ast_free, AST_PTHREADT_NULL, desc, and NULL.
Referenced by __ast_http_load(), __init_manager(), http_server_destroy(), manager_shutdown(), and unload_module().
| struct ast_tcptls_session_instance * ast_tcptls_start_tls | ( | struct ast_tcptls_session_instance * | tcptls_session | ) |
Start TLS negotiation on an existing unsecured connection.
| tcptls_session | The existing unsecured session |
| tcptls_session | on Success |
| NULL | Failure |
Definition at line 133 of file tcptls.c.
References ao2_ref, ast_iostream_get_ssl(), ast_iostream_start_tls(), ast_log, ast_sockaddr_stringify(), AST_SSL_DONT_VERIFY_SERVER, AST_SSL_IGNORE_COMMON_NAME, AST_SSL_VERIFY_CLIENT, ast_tcptls_close_session_file(), ast_test_flag, ast_tcptls_session_instance::client, ast_tls_config::enabled, ast_tls_config::flags, ast_tcptls_session_args::hostname, LOG_ERROR, name, NULL, ast_tcptls_session_instance::parent, ast_tcptls_session_instance::remote_address, ast_tls_config::ssl_ctx, str, ast_tcptls_session_instance::stream, and ast_tcptls_session_args::tls_cfg.
Referenced by handle_tcptls_connection(), and websocket_client_connect().
| int ast_tls_read_conf | ( | struct ast_tls_config * | tls_cfg, |
| struct ast_tcptls_session_args * | tls_desc, | ||
| const char * | varname, | ||
| const char * | value | ||
| ) |
Used to parse conf files containing tls/ssl options.
Definition at line 982 of file tcptls.c.
References ast_clear_flag, ast_free, ast_log, ast_parse_arg(), ast_set2_flag, ast_set_flag, AST_SSL_DISABLE_TLSV1, AST_SSL_DISABLE_TLSV11, AST_SSL_DISABLE_TLSV12, AST_SSL_DONT_VERIFY_SERVER, AST_SSL_SERVER_CIPHER_ORDER, AST_SSL_SSLV2_CLIENT, AST_SSL_SSLV3_CLIENT, AST_SSL_TLSV1_CLIENT, AST_SSL_VERIFY_CLIENT, ast_strdup, ast_true(), ast_tls_config::cafile, ast_tls_config::capath, ast_tls_config::certfile, ast_tls_config::cipher, ast_tls_config::enabled, ast_tls_config::flags, ast_tcptls_session_args::local_address, LOG_ERROR, PARSE_ADDR, ast_tls_config::pvtfile, and value.
Referenced by __ast_http_load(), and __init_manager().
|
static |
creates a FILE * from the fd passed by the accept thread. This operation is potentially expensive (certificate verification), so we do it in the child thread context.
Definition at line 248 of file tcptls.c.
References ao2_ref, ast_log, ast_sockaddr_stringify(), ast_tcptls_close_session_file(), ast_tcptls_start_tls(), ast_thread_inhibit_escalations(), ast_thread_user_interface_set(), ast_tcptls_session_instance::client, LOG_ERROR, NULL, ast_tcptls_session_instance::parent, ast_tcptls_session_instance::remote_address, and ast_tcptls_session_args::worker_fn.
Referenced by ast_tcptls_client_start_timeout(), and ast_tcptls_server_root().
|
static |
Definition at line 72 of file tcptls.c.
References ao2_cleanup, ast_free, ast_iostream_close(), NULL, ast_tcptls_session_instance::overflow_buf, ast_tcptls_session_instance::private_data, and ast_tcptls_session_instance::stream.
Referenced by ast_tcptls_client_create(), and ast_tcptls_server_root().
|
static |
Definition at line 631 of file tcptls.c.
References ast_connect(), ast_wait_for_output(), and errno.
Referenced by ast_tcptls_client_start_timeout().