From 4133ad8d54f0ee61964c563d9b191f362bd8f6a6 Mon Sep 17 00:00:00 2001 From: damencho Date: Mon, 16 Jul 2018 16:12:15 -0500 Subject: [PATCH 1/3] Fixes leaking udp6 sockets. Guess address family from client socket address when STUN_ATTRIBUTE_REQUESTED_ADDRESS_FAMILY is missing. --- src/server/ns_turn_server.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/server/ns_turn_server.c b/src/server/ns_turn_server.c index 950483b..b17631b 100644 --- a/src/server/ns_turn_server.c +++ b/src/server/ns_turn_server.c @@ -1252,12 +1252,15 @@ static int handle_turn_allocate(turn_turnserver *server, if(!(*err_code)) { if(!af4 && !af6) { - int af4res = create_relay_connection(server, ss, lifetime, - STUN_ATTRIBUTE_REQUESTED_ADDRESS_FAMILY_VALUE_DEFAULT, transport, + int a_family = STUN_ATTRIBUTE_REQUESTED_ADDRESS_FAMILY_VALUE_DEFAULT; + if(get_ioa_socket_address_family(ss->client_socket) == AF_INET6) + a_family = STUN_ATTRIBUTE_REQUESTED_ADDRESS_FAMILY_VALUE_IPV6; + int res = create_relay_connection(server, ss, lifetime, + a_family, transport, even_port, in_reservation_token, &out_reservation_token, err_code, reason, tcp_peer_accept_connection); - if(af4res<0) { + if(res<0) { set_relay_session_failure(alloc,AF_INET); if(!(*err_code)) { *err_code = 437; From ab07d244b4857271381d4208a6e3a27adf2bc4cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9sz=C3=A1ros=20Mih=C3=A1ly?= Date: Tue, 24 Jul 2018 14:37:46 +0200 Subject: [PATCH 2/3] fix get_family --- src/server/ns_turn_server.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/server/ns_turn_server.c b/src/server/ns_turn_server.c index b17631b..61991a7 100644 --- a/src/server/ns_turn_server.c +++ b/src/server/ns_turn_server.c @@ -34,6 +34,7 @@ #include "ns_turn_allocation.h" #include "ns_turn_msg_addr.h" #include "ns_turn_ioalib.h" +#include "../apps/relay/ns_ioalib_impl.h" /////////////////////////////////////////// @@ -42,14 +43,19 @@ //////////////////////////////////////////////// -static inline int get_family(int stun_family) { +static inline int get_family(int stun_family, ioa_engine_handle e, ioa_socket_handle client_socket) { switch(stun_family) { case STUN_ATTRIBUTE_REQUESTED_ADDRESS_FAMILY_VALUE_IPV4: return AF_INET; + break; case STUN_ATTRIBUTE_REQUESTED_ADDRESS_FAMILY_VALUE_IPV6: return AF_INET6; + break; case STUN_ATTRIBUTE_REQUESTED_ADDRESS_FAMILY_VALUE_DEFAULT: - return AF_INET; + if(e->default_relays && get_ioa_socket_address_family(client_socket) == AF_INET6) + return AF_INET6; + else + return AF_INET; default: return AF_INET; }; @@ -4309,8 +4315,10 @@ static int create_relay_connection(turn_turnserver* server, addr_debug_print(server->verbose, get_local_addr_from_ioa_socket(newelem->s), "Local relay addr (RTCP)"); } else { + int family = get_family(address_family,server->e,ss->client_socket); + + newelem = get_relay_session_ss(ss,family); - newelem = get_relay_session_ss(ss,get_family(address_family)); IOA_CLOSE_SOCKET(newelem->s); From 3fd9168887d43d0740c1a1f266beef684b29988a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9sz=C3=A1ros=20Mih=C3=A1ly?= Date: Wed, 25 Jul 2018 12:36:32 +0200 Subject: [PATCH 3/3] Added to Changelog --- ChangeLog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ChangeLog b/ChangeLog index 00f3727..88dd7a7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 12/11/2017 Oleg Moskalenko Version 4.5.0.8 'dan Eider': + - Fix WebRTC client IPv6 stuck connection. (issue #217) + THX toq damencho, vol4iniche - Spelling fixes. - Add a warning if --lt-cred-mech and --use-auth-secret both presents. - Revert "Add the realm parameter in the example config file (by Domenico)"