struct ast_tcptls_session_instance *ast_tcptls_client_start(struct ast_tcptls_session_instance *tcptls_session) { struct ast_tcptls_session_args *desc; int flags; if (!(desc = tcptls_session->parent)) { goto client_start_error; } if (ast_connect(desc->accept_fd, &desc->remote_address)) { ast_log(LOG_ERROR, "Unable to connect %s to %s: %s\n", desc->name, ast_sockaddr_stringify(&desc->remote_address), strerror(errno)); goto client_start_error; } flags = fcntl(desc->accept_fd, F_GETFL); fcntl(desc->accept_fd, F_SETFL, flags & ~O_NONBLOCK); if (desc->tls_cfg) { desc->tls_cfg->enabled = 1; __ssl_setup(desc->tls_cfg, 1); } return handle_tcptls_connection(tcptls_session); client_start_error: if (desc) { close(desc->accept_fd); desc->accept_fd = -1; } ao2_ref(tcptls_session, -1); return NULL; }
struct ast_tcptls_session_instance *ast_tcptls_client_start(struct ast_tcptls_session_instance *tcptls_session) { struct ast_tcptls_session_args *desc; int flags; if (!(desc = tcptls_session->parent)) { goto client_start_error; } if (connect(desc->accept_fd, (const struct sockaddr *) &desc->remote_address, sizeof(desc->remote_address))) { ast_log(LOG_ERROR, "Unable to connect %s to %s:%d: %s\n", desc->name, ast_inet_ntoa(desc->remote_address.sin_addr), ntohs(desc->remote_address.sin_port), strerror(errno)); goto client_start_error; } flags = fcntl(desc->accept_fd, F_GETFL); fcntl(desc->accept_fd, F_SETFL, flags & ~O_NONBLOCK); if (desc->tls_cfg) { desc->tls_cfg->enabled = 1; __ssl_setup(desc->tls_cfg, 1); } return handle_tcptls_connection(tcptls_session); client_start_error: close(desc->accept_fd); desc->accept_fd = -1; if (tcptls_session) { ao2_ref(tcptls_session, -1); } return NULL; }
int ast_ssl_setup(struct ast_tls_config *cfg) { return __ssl_setup(cfg, 0); }