From 4a9cbf732e71dc9374e325f99fefce9b1512f5f6 Mon Sep 17 00:00:00 2001 From: mom040267 Date: Thu, 16 Oct 2014 08:15:34 +0000 Subject: [PATCH] rtcp ports fixed --- ChangeLog | 3 ++- rpm/turnserver.spec | 2 +- src/apps/relay/ns_ioalib_engine_impl.c | 21 ++++++++++++++++----- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4c680ff6..021e4b97 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,8 @@ -10/14/2014 Oleg Moskalenko +10/16/2014 Oleg Moskalenko Version 4.2.1.4 'Monza': - Code cleaning. - TCP/TLS tests extended. + - relay RTCP sockets ports allocation fixed. 10/05/2014 Oleg Moskalenko Version 4.2.1.2 'Monza': diff --git a/rpm/turnserver.spec b/rpm/turnserver.spec index bdff0f76..2e44efe4 100644 --- a/rpm/turnserver.spec +++ b/rpm/turnserver.spec @@ -294,7 +294,7 @@ fi %{_includedir}/turn/client/TurnMsgLib.h %changelog -* Mon Oct 13 2014 Oleg Moskalenko +* Thu Oct 16 2014 Oleg Moskalenko - Sync to 4.2.1.4 * Sun Oct 05 2014 Oleg Moskalenko - Sync to 4.2.1.2 diff --git a/src/apps/relay/ns_ioalib_engine_impl.c b/src/apps/relay/ns_ioalib_engine_impl.c index 66f12804..c8ac1fc3 100644 --- a/src/apps/relay/ns_ioalib_engine_impl.c +++ b/src/apps/relay/ns_ioalib_engine_impl.c @@ -1166,12 +1166,17 @@ int create_relay_ioa_sockets(ioa_engine_handle e, (transport == STUN_ATTRIBUTE_TRANSPORT_TCP_VALUE) ? TCP_SOCKET : UDP_SOCKET, RELAY_SOCKET); if (*rtp_s == NULL) { - if (rtcp_s) + int rtcp_bound = 0; + if (rtcp_s && *rtcp_s) { + rtcp_bound = (*rtcp_s)->bound; IOA_CLOSE_SOCKET(*rtcp_s); + } addr_set_port(&local_addr, port); turnipports_release(tp, transport, &local_addr); - if (rtcp_port >= 0) + if (rtcp_port >= 0 && !rtcp_bound) { + addr_set_port(&rtcp_local_addr, rtcp_port); turnipports_release(tp, transport, &rtcp_local_addr); + } perror("socket"); return -1; } @@ -1184,12 +1189,17 @@ int create_relay_ioa_sockets(ioa_engine_handle e, break; } else { IOA_CLOSE_SOCKET(*rtp_s); - if (rtcp_s) + int rtcp_bound = 0; + if (rtcp_s && *rtcp_s) { + rtcp_bound = (*rtcp_s)->bound; IOA_CLOSE_SOCKET(*rtcp_s); + } addr_set_port(&local_addr, port); turnipports_release(tp, transport, &local_addr); - if (rtcp_port >= 0) + if (rtcp_port >= 0 && !rtcp_bound) { + addr_set_port(&rtcp_local_addr, rtcp_port); turnipports_release(tp, transport, &rtcp_local_addr); + } rtcp_port = -1; } } @@ -1638,7 +1648,8 @@ void close_ioa_socket(ioa_socket_handle s) ioa_network_buffer_delete(s->e, s->defer_nbh); - if(s->bound && s->e && s->e->tp) { + if(s->bound && s->e && s->e->tp && + ((s->sat == RELAY_SOCKET)||(s->sat == RELAY_RTCP_SOCKET))) { turnipports_release(s->e->tp, ((s->st == TCP_SOCKET) ? STUN_ATTRIBUTE_TRANSPORT_TCP_VALUE : STUN_ATTRIBUTE_TRANSPORT_UDP_VALUE), &(s->local_addr));