From 6bd501ac9d9ce133c720255f5a539d48a170e9a5 Mon Sep 17 00:00:00 2001 From: mom040267 <mom040267@users.noreply.github.com> Date: Sun, 30 Nov 2014 03:29:18 +0000 Subject: [PATCH] peer_input_handler fixes --- ChangeLog | 4 ++++ rpm/build.settings.sh | 2 +- rpm/turnserver.spec | 4 +++- src/apps/relay/mainrelay.c | 32 ++++++++++++++++++++------------ src/ns_turn_defs.h | 2 +- src/server/ns_turn_server.c | 25 ++++++++++++++----------- 6 files changed, 43 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index 67b75fee..50ecdf5c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +11/29/2014 Oleg Moskalenko <mom040267@gmail.com> +Version 4.3.1.3 'Tolomei': + - Reliability fixes (Issue 141 from rfc5766-turn-server). + 11/23/2014 Oleg Moskalenko <mom040267@gmail.com> Version 4.3.1.2 'Tolomei': - Debian package fixes. diff --git a/rpm/build.settings.sh b/rpm/build.settings.sh index ffc7e827..e4c19573 100755 --- a/rpm/build.settings.sh +++ b/rpm/build.settings.sh @@ -2,7 +2,7 @@ # Common settings script. -TURNVERSION=4.3.1.2 +TURNVERSION=4.3.1.3 BUILDDIR=~/rpmbuild ARCH=`uname -p` TURNSERVER_SVN_URL=http://coturn.googlecode.com/svn diff --git a/rpm/turnserver.spec b/rpm/turnserver.spec index 0a05c68c..6b76d9e6 100644 --- a/rpm/turnserver.spec +++ b/rpm/turnserver.spec @@ -1,5 +1,5 @@ Name: turnserver -Version: 4.3.1.2 +Version: 4.3.1.3 Release: 0%{dist} Summary: Coturn TURN Server @@ -294,6 +294,8 @@ fi %{_includedir}/turn/client/TurnMsgLib.h %changelog +* Sat Nov 29 2014 Oleg Moskalenko <mom040267@gmail.com> + - Sync to 4.3.1.3 * Mon Nov 23 2014 Oleg Moskalenko <mom040267@gmail.com> - Sync to 4.3.1.2 * Mon Nov 22 2014 Oleg Moskalenko <mom040267@gmail.com> diff --git a/src/apps/relay/mainrelay.c b/src/apps/relay/mainrelay.c index 129cc389..9327da13 100644 --- a/src/apps/relay/mainrelay.c +++ b/src/apps/relay/mainrelay.c @@ -2063,15 +2063,17 @@ int main(int argc, char **argv) #if defined(OPENSSL_THREADS) -static pthread_mutex_t* mutex_buf = NULL; +static pthread_mutex_t** mutex_buf = NULL; static void locking_function(int mode, int n, const char *file, int line) { UNUSED_ARG(file); UNUSED_ARG(line); - if (mode & CRYPTO_LOCK) - pthread_mutex_lock(&mutex_buf[n]); - else - pthread_mutex_unlock(&mutex_buf[n]); + if(mutex_buf && (n < CRYPTO_num_locks()) && mutex_buf[n]) { + if (mode & CRYPTO_LOCK) + pthread_mutex_lock(mutex_buf[n]); + else + pthread_mutex_unlock(mutex_buf[n]); + } } #if OPENSSL_VERSION_NUMBER >= 0x10000000L @@ -2094,12 +2096,13 @@ static int THREAD_setup(void) { int i; - mutex_buf = (pthread_mutex_t*) turn_malloc(CRYPTO_num_locks() - * sizeof(pthread_mutex_t)); + mutex_buf = (pthread_mutex_t**) turn_malloc(CRYPTO_num_locks() * sizeof(pthread_mutex_t*)); if (!mutex_buf) return 0; - for (i = 0; i < CRYPTO_num_locks(); i++) - pthread_mutex_init(&mutex_buf[i], NULL); + for (i = 0; i < CRYPTO_num_locks(); i++) { + mutex_buf[i] = (pthread_mutex_t*) turn_malloc(sizeof(pthread_mutex_t)); + pthread_mutex_init(mutex_buf[i], NULL); + } #if OPENSSL_VERSION_NUMBER >= 0x10000000L CRYPTO_THREADID_set_callback(id_function); @@ -2130,9 +2133,14 @@ int THREAD_cleanup(void) { #endif CRYPTO_set_locking_callback(NULL); - for (i = 0; i < CRYPTO_num_locks(); i++) - pthread_mutex_destroy(&mutex_buf[i]); - turn_free(mutex_buf,sizeof(pthread_mutex_t)); + for (i = 0; i < CRYPTO_num_locks(); i++) { + if(mutex_buf[i]) { + pthread_mutex_destroy(mutex_buf[i]); + turn_free(mutex_buf[i],sizeof(pthread_mutex_t)); + mutex_buf[i] = NULL; + } + } + turn_free(mutex_buf,CRYPTO_num_locks() * sizeof(pthread_mutex_t*)); mutex_buf = NULL; #endif diff --git a/src/ns_turn_defs.h b/src/ns_turn_defs.h index 4c3d2a23..bb136d3f 100644 --- a/src/ns_turn_defs.h +++ b/src/ns_turn_defs.h @@ -31,7 +31,7 @@ #ifndef __IOADEFS__ #define __IOADEFS__ -#define TURN_SERVER_VERSION "4.3.1.2" +#define TURN_SERVER_VERSION "4.3.1.3" #define TURN_SERVER_VERSION_NAME "Tolomei" #define TURN_SOFTWARE "Coturn-" TURN_SERVER_VERSION " '" TURN_SERVER_VERSION_NAME "'" diff --git a/src/server/ns_turn_server.c b/src/server/ns_turn_server.c index 99ad1dfd..b8968a9c 100644 --- a/src/server/ns_turn_server.c +++ b/src/server/ns_turn_server.c @@ -4623,24 +4623,23 @@ int open_client_connection_session(turn_turnserver* server, static void peer_input_handler(ioa_socket_handle s, int event_type, ioa_net_data *in_buffer, void *arg, int can_resume) { - if (!(event_type & IOA_EV_READ) || !arg) - return; + if (!(event_type & IOA_EV_READ) || !arg) return; - if(in_buffer->recv_ttl==0) - return; + if(in_buffer->recv_ttl==0) return; - UNUSED_ARG(s); UNUSED_ARG(can_resume); + if(ioa_socket_tobeclosed(s)) return; + ts_ur_super_session* ss = (ts_ur_super_session*) arg; - if(!ss || !s) return; + if(!ss) return; + + if(ss->to_be_closed) return; turn_turnserver *server = (turn_turnserver*) (ss->server); - if (!server) { - return; - } + if (!server) return; relay_endpoint_session* elem = get_relay_session_ss(ss, get_ioa_socket_address_family(s)); if (elem->s == NULL) { @@ -4654,8 +4653,6 @@ static void peer_input_handler(ioa_socket_handle s, int event_type, if (ilen >= 0) { - size_t len = (size_t)(ilen); - allocation* a = get_allocation_ss(ss); if (is_allocation_valid(a)) { @@ -4672,6 +4669,9 @@ static void peer_input_handler(ioa_socket_handle s, int event_type, } if (chnum) { + + size_t len = (size_t)(ilen); + nbh = in_buffer->nbh; ioa_network_buffer_add_offset_size(nbh, @@ -4693,6 +4693,9 @@ static void peer_input_handler(ioa_socket_handle s, int event_type, (int) (chnum)); } } else { + + size_t len = 0; + nbh = ioa_network_buffer_allocate(server->e); stun_init_indication_str(STUN_METHOD_DATA, ioa_network_buffer_data(nbh), &len); stun_attr_add_str(ioa_network_buffer_data(nbh), &len, STUN_ATTRIBUTE_DATA,