From f4e49c5dbb717c7345bacb85cfaa34946713ac43 Mon Sep 17 00:00:00 2001 From: mom040267 Date: Tue, 3 Jun 2014 22:55:24 +0000 Subject: [PATCH] working on rfc6062 crash --- src/server/ns_turn_allocation.c | 11 +++++++++++ src/server/ns_turn_allocation.h | 1 + src/server/ns_turn_server.c | 5 ++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/server/ns_turn_allocation.c b/src/server/ns_turn_allocation.c index f53be24..4c2fc23 100644 --- a/src/server/ns_turn_allocation.c +++ b/src/server/ns_turn_allocation.c @@ -602,6 +602,17 @@ tcp_connection *get_and_clean_tcp_connection_by_id(ur_map *map, tcp_connection_i return NULL; } +tcp_connection *get_tcp_connection_by_id(ur_map *map, tcp_connection_id id) +{ + if(map) { + ur_map_value_type t = 0; + if (ur_map_get(map, (ur_map_key_type)id, &t) && t) { + return (tcp_connection*)t; + } + } + return NULL; +} + tcp_connection *get_tcp_connection_by_peer(allocation *a, ioa_addr *peer_addr) { if(a && peer_addr) { diff --git a/src/server/ns_turn_allocation.h b/src/server/ns_turn_allocation.h index f0da2a0..e67ba5d 100644 --- a/src/server/ns_turn_allocation.h +++ b/src/server/ns_turn_allocation.h @@ -217,6 +217,7 @@ ts_ur_session *get_relay_session(allocation *a); ioa_socket_handle get_relay_socket(allocation *a); tcp_connection *get_and_clean_tcp_connection_by_id(ur_map *map, tcp_connection_id id); +tcp_connection *get_tcp_connection_by_id(ur_map *map, tcp_connection_id id); tcp_connection *get_tcp_connection_by_peer(allocation *a, ioa_addr *peer_addr); int can_accept_tcp_connection_from_peer(allocation *a, ioa_addr *peer_addr, int server_relay); tcp_connection *create_tcp_connection(u08bits server_id, allocation *a, stun_tid *tid, ioa_addr *peer_addr, int *err_code); diff --git a/src/server/ns_turn_server.c b/src/server/ns_turn_server.c index e546e64..830754e 100644 --- a/src/server/ns_turn_server.c +++ b/src/server/ns_turn_server.c @@ -2062,7 +2062,7 @@ int turnserver_accept_tcp_client_data_connection(turn_turnserver *server, tcp_co if(tcid && tid && s) { - tc = get_and_clean_tcp_connection_by_id(server->tcp_relay_connections, tcid); + tc = get_tcp_connection_by_id(server->tcp_relay_connections, tcid); ioa_network_buffer_handle nbh = ioa_network_buffer_allocate(server->e); int resp_constructed = 0; if(!tc || (tc->state == TC_STATE_READY) || (tc->client_s)) { @@ -2100,6 +2100,9 @@ int turnserver_accept_tcp_client_data_connection(turn_turnserver *server, tcp_co } } + if(tc) + get_and_clean_tcp_connection_by_id(server->tcp_relay_connections, tcid); + if(!resp_constructed) { if(!err_code) { size_t len = ioa_network_buffer_get_size(nbh);