From 23b5f5820235d97b7ad7a0ca4219b17d0cc634a3 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 13 May 2011 16:17:17 -0500 Subject: [PATCH] use ssl macro to init on dingaling too --- libs/libdingaling/src/libdingaling.c | 6 +- src/include/private/switch_core_pvt.h | 1 + src/include/switch_core.h | 1 + src/include/switch_curl.h | 58 ++----------------- .../endpoints/mod_dingaling/mod_dingaling.c | 10 +++- src/switch_core.c | 14 +++++ 6 files changed, 32 insertions(+), 58 deletions(-) diff --git a/libs/libdingaling/src/libdingaling.c b/libs/libdingaling/src/libdingaling.c index 6793c3df61..bbf26ca5c9 100644 --- a/libs/libdingaling/src/libdingaling.c +++ b/libs/libdingaling/src/libdingaling.c @@ -242,7 +242,7 @@ static void default_logger(char *file, const char *func, int line, int level, ch vsnprintf(data, sizeof(data), fmt, ap); - fprintf(globals.log_stream, "%s:%d %s() %s", file, line, func, data); + fprintf(globals.log_stream, "%s:%d %s() %s", fp, line, func, data); va_end(ap); @@ -997,9 +997,9 @@ static int on_commands(void *user_data, ikspak *pak) uint8_t is_result = strcasecmp(type, "result") ? 0 : 1; uint8_t is_error = strcasecmp(type, "error") ? 0 : 1; iks *xml, *xsession, *xerror = NULL, *xredir = NULL; - struct iks_tag* tmp; + xml = iks_child (pak->x); - tmp = (struct iks_tag*) xml; + if (is_error) { if ((xerror = working_find(xml, "error"))) { char *code = iks_find_attrib(xerror, "code"); diff --git a/src/include/private/switch_core_pvt.h b/src/include/private/switch_core_pvt.h index c8e9b210b9..8c1ac3707c 100644 --- a/src/include/private/switch_core_pvt.h +++ b/src/include/private/switch_core_pvt.h @@ -254,6 +254,7 @@ struct switch_runtime { uint32_t max_db_handles; uint32_t db_handle_timeout; int curl_count; + int ssl_count; }; extern struct switch_runtime runtime; diff --git a/src/include/switch_core.h b/src/include/switch_core.h index b544f3fec9..80add3ab28 100644 --- a/src/include/switch_core.h +++ b/src/include/switch_core.h @@ -435,6 +435,7 @@ SWITCH_DECLARE(void) switch_core_session_rwunlock(_In_ switch_core_session_t *se SWITCH_DECLARE(int) switch_core_add_state_handler(_In_ const switch_state_handler_table_t *state_handler); SWITCH_DECLARE(int) switch_core_curl_count(int *val); +SWITCH_DECLARE(int) switch_core_ssl_count(int *val); /*! \brief Remove a global state handler diff --git a/src/include/switch_curl.h b/src/include/switch_curl.h index d6149276c6..e22f2d5a60 100644 --- a/src/include/switch_curl.h +++ b/src/include/switch_curl.h @@ -28,61 +28,11 @@ * */ +#ifndef __SWITCH_CURL_H +#define __SWITCH_CURL_H #include - -#if defined(HAVE_OPENSSL) -#include - -static switch_mutex_t **ssl_mutexes; -static switch_memory_pool_t *ssl_pool = NULL; - - -static inline void switch_curl_ssl_lock_callback(int mode, int type, char *file, int line) -{ - if (mode & CRYPTO_LOCK) { - switch_mutex_lock(ssl_mutexes[type]); - } - else { - switch_mutex_unlock(ssl_mutexes[type]); - } -} - -static inline unsigned long switch_curl_ssl_thread_id(void) -{ - return (unsigned long) switch_thread_self(); -} - -static inline void switch_curl_init_ssl_locks(void) -{ - int i, num = CRYPTO_num_locks(); - - ssl_mutexes = OPENSSL_malloc(CRYPTO_num_locks() * sizeof(switch_mutex_t*)); - switch_assert(ssl_mutexes != NULL); - - switch_core_new_memory_pool(&ssl_pool); - - for (i = 0; i < num; i++) { - switch_mutex_init(&(ssl_mutexes[i]), SWITCH_MUTEX_NESTED, ssl_pool); - switch_assert(ssl_mutexes[i] != NULL); - } - - CRYPTO_set_id_callback(switch_curl_ssl_thread_id); - CRYPTO_set_locking_callback((void (*)(int, int, const char*, int))switch_curl_ssl_lock_callback); -} - -static inline void switch_curl_destroy_ssl_locks() -{ - int i; - - CRYPTO_set_locking_callback(NULL); - for (i = 0; i < CRYPTO_num_locks(); i++) { - switch_mutex_destroy(ssl_mutexes[i]); - } - - OPENSSL_free(ssl_mutexes); -} -#endif +#include "switch_ssl.h" static inline void switch_curl_init(void) { @@ -115,6 +65,8 @@ static inline void switch_curl_destroy() switch_core_curl_count(&curl_count); } +#endif + /* For Emacs: * Local Variables: diff --git a/src/mod/endpoints/mod_dingaling/mod_dingaling.c b/src/mod/endpoints/mod_dingaling/mod_dingaling.c index b0bfeada97..2db3660ccd 100644 --- a/src/mod/endpoints/mod_dingaling/mod_dingaling.c +++ b/src/mod/endpoints/mod_dingaling/mod_dingaling.c @@ -30,6 +30,7 @@ * */ #include +#include #include #include @@ -1399,7 +1400,7 @@ static switch_status_t channel_read_frame(switch_core_session_t *session, switch { struct private_object *tech_pvt = NULL; switch_channel_t *channel = switch_core_session_get_channel(session); - int payload = 0; + //int payload = 0; tech_pvt = (struct private_object *) switch_core_session_get_private(session); switch_assert(tech_pvt != NULL); @@ -1443,7 +1444,7 @@ static switch_status_t channel_read_frame(switch_core_session_t *session, switch - payload = tech_pvt->read_frame.payload; + //payload = tech_pvt->read_frame.payload; #if 0 elapsed = (unsigned int) ((switch_micro_time_now() - started) / 1000); @@ -1911,6 +1912,9 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_dingaling_load) SWITCH_ADD_API(api_interface, "dingaling", "DingaLing Menu", dingaling, DINGALING_SYNTAX); SWITCH_ADD_CHAT(chat_interface, MDL_CHAT_PROTO, chat_send); + switch_ssl_init_ssl_locks(); + + /* indicate that the module should continue to be loaded */ return SWITCH_STATUS_SUCCESS; } @@ -2008,6 +2012,8 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_dingaling_shutdown) switch_safe_free(globals.codec_string); switch_safe_free(globals.codec_rates_string); + switch_ssl_destroy_ssl_locks(); + return SWITCH_STATUS_SUCCESS; } diff --git a/src/switch_core.c b/src/switch_core.c index 0b4d8dc732..b0c983cab5 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -211,6 +211,20 @@ SWITCH_DECLARE(int) switch_core_curl_count(int *val) } + +SWITCH_DECLARE(int) switch_core_ssl_count(int *val) +{ + if (!val) { + switch_mutex_lock(runtime.global_mutex); + return runtime.ssl_count; + } + + runtime.ssl_count = *val; + switch_mutex_unlock(runtime.global_mutex); + return 0; + +} + SWITCH_DECLARE(void) switch_core_remove_state_handler(const switch_state_handler_table_t *state_handler) { int index, tmp_index = 0;