From a7316a3d303b8cc0cdb70cf65794debfde45bb33 Mon Sep 17 00:00:00 2001 From: Scott Godin Date: Fri, 21 Oct 2022 14:49:59 -0400 Subject: [PATCH] created netengine.c get_relay_server utility method to reduce code duplication (#1032) --- src/apps/relay/netengine.c | 164 +++++++++++++------------------------ 1 file changed, 55 insertions(+), 109 deletions(-) diff --git a/src/apps/relay/netengine.c b/src/apps/relay/netengine.c index 76c277d9..2693f256 100644 --- a/src/apps/relay/netengine.c +++ b/src/apps/relay/netengine.c @@ -67,6 +67,8 @@ static struct auth_server authserver[256]; static struct relay_server *general_relay_servers[1+((turnserver_id)-1)]; static struct relay_server *udp_relay_servers[1+((turnserver_id)-1)]; +static struct relay_server* get_relay_server(turnserver_id id); + ////////////////////////////////////////////// static void run_events(struct event_base *eb, ioa_engine_handle e); @@ -441,6 +443,42 @@ static void allocate_relay_addrs_ports(void) { static int handle_relay_message(relay_server_handle rs, struct message_to_relay *sm); +static struct relay_server* get_relay_server(turnserver_id id) { + struct relay_server *rs = NULL; + if(id>=TURNSERVER_ID_BOUNDARY_BETWEEN_TCP_AND_UDP) { + size_t dest = id-TURNSERVER_ID_BOUNDARY_BETWEEN_TCP_AND_UDP; + if(dest >= get_real_udp_relay_servers_number()) { + TURN_LOG_FUNC( + TURN_LOG_LEVEL_ERROR, + "%s: Too large UDP relay number: %d, total=%d\n", + __FUNCTION__,(int)dest,(int)get_real_udp_relay_servers_number()); + } + rs = udp_relay_servers[dest]; + if(!rs) { + TURN_LOG_FUNC( + TURN_LOG_LEVEL_ERROR, + "%s: Wrong UDP relay number: %d, total=%d\n", + __FUNCTION__,(int)dest,(int)get_real_udp_relay_servers_number()); + } + } else { + size_t dest = id; + if(dest >= get_real_general_relay_servers_number()) { + TURN_LOG_FUNC( + TURN_LOG_LEVEL_ERROR, + "%s: Too large general relay number: %d, total=%d\n", + __FUNCTION__,(int)dest,(int)get_real_general_relay_servers_number()); + } + rs = general_relay_servers[dest]; + if(!rs) { + TURN_LOG_FUNC( + TURN_LOG_LEVEL_ERROR, + "%s: Wrong general relay number: %d, total=%d\n", + __FUNCTION__,(int)dest,(int)get_real_general_relay_servers_number()); + } + } + return rs; +} + static pthread_mutex_t auth_message_counter_mutex = PTHREAD_MUTEX_INITIALIZER; static authserver_id auth_message_counter = 1; @@ -481,42 +519,15 @@ static void auth_server_receive_message(struct bufferevent *bev, void *ptr) am.success = 1; } } - - size_t dest = am.id; - + struct evbuffer *output = NULL; - - if(dest>=TURNSERVER_ID_BOUNDARY_BETWEEN_TCP_AND_UDP) { - dest -= TURNSERVER_ID_BOUNDARY_BETWEEN_TCP_AND_UDP; - if(dest >= get_real_udp_relay_servers_number()) { - TURN_LOG_FUNC( - TURN_LOG_LEVEL_ERROR, - "%s: Too large UDP relay number: %d\n", - __FUNCTION__,(int)dest); - } else if(!(udp_relay_servers[dest])) { - TURN_LOG_FUNC( - TURN_LOG_LEVEL_ERROR, - "%s: Wrong UDP relay number: %d, total %d\n", - __FUNCTION__,(int)dest, (int)get_real_udp_relay_servers_number()); - } else { - output = bufferevent_get_output(udp_relay_servers[dest]->auth_out_buf); - } - } else { - if(dest >= get_real_general_relay_servers_number()) { - TURN_LOG_FUNC( - TURN_LOG_LEVEL_ERROR, - "%s: Too large general relay number: %d, total %d\n", - __FUNCTION__,(int)dest,(int)get_real_general_relay_servers_number()); - } else if(!(general_relay_servers[dest])) { - TURN_LOG_FUNC( - TURN_LOG_LEVEL_ERROR, - "%s: Wrong general relay number: %d, total %d\n", - __FUNCTION__,(int)dest,(int)get_real_general_relay_servers_number()); - } else { - output = bufferevent_get_output(general_relay_servers[dest]->auth_out_buf); - } - } - + struct relay_server* relay_server = get_relay_server(am.id); + if(relay_server) { + output = bufferevent_get_output(relay_server->auth_out_buf); + } else { + TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: can't find relay for turn_server_id: %d\n", __FUNCTION__,(int)am.id); + } + if(output) evbuffer_add(output,&am,sizeof(struct auth_message)); else { @@ -585,41 +596,10 @@ static int send_socket_to_relay(turnserver_id id, uint64_t cid, stun_tid *tid, i ioa_socket_handle s_to_delete = s; - struct relay_server *rs = NULL; - if(id>=TURNSERVER_ID_BOUNDARY_BETWEEN_TCP_AND_UDP) { - size_t dest = id-TURNSERVER_ID_BOUNDARY_BETWEEN_TCP_AND_UDP; - if(dest >= get_real_udp_relay_servers_number()) { - TURN_LOG_FUNC( - TURN_LOG_LEVEL_ERROR, - "%s: Too large UDP relay number: %d, rmt=%d, total=%d\n", - __FUNCTION__,(int)dest,(int)rmt, (int)get_real_udp_relay_servers_number()); - goto err; - } - rs = udp_relay_servers[dest]; - if(!rs) { - TURN_LOG_FUNC( - TURN_LOG_LEVEL_ERROR, - "%s: Wrong UDP relay number: %d, rmt=%d, total=%d\n", - __FUNCTION__,(int)dest,(int)rmt, (int)get_real_udp_relay_servers_number()); - goto err; - } - } else { - size_t dest = id; - if(dest >= get_real_general_relay_servers_number()) { - TURN_LOG_FUNC( - TURN_LOG_LEVEL_ERROR, - "%s: Too large general relay number: %d, rmt=%d, total=%d\n", - __FUNCTION__,(int)dest,(int)rmt, (int)get_real_general_relay_servers_number()); - goto err; - } - rs = general_relay_servers[dest]; - if(!rs) { - TURN_LOG_FUNC( - TURN_LOG_LEVEL_ERROR, - "%s: Wrong general relay number: %d, rmt=%d, total=%d\n", - __FUNCTION__,(int)dest,(int)rmt, (int)get_real_general_relay_servers_number()); - goto err; - } + struct relay_server *rs = get_relay_server(id); + if(!rs) { + TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: can't find relay for turn_server_id: %d\n", __FUNCTION__,(int)id); + goto err; } switch (rmt) { @@ -716,45 +696,11 @@ int send_session_cancellation_to_relay(turnsession_id sid) turnserver_id id = (turnserver_id)(sid / TURN_SESSION_ID_FACTOR); - struct relay_server *rs = NULL; - if(id>=TURNSERVER_ID_BOUNDARY_BETWEEN_TCP_AND_UDP) { - size_t dest = id-TURNSERVER_ID_BOUNDARY_BETWEEN_TCP_AND_UDP; - if(dest >= get_real_udp_relay_servers_number()) { - TURN_LOG_FUNC( - TURN_LOG_LEVEL_ERROR, - "%s: Too large UDP relay number: %d, total=%d\n", - __FUNCTION__,(int)dest,(int)get_real_udp_relay_servers_number()); - ret = -1; - goto err; - } - rs = udp_relay_servers[dest]; - if(!rs) { - TURN_LOG_FUNC( - TURN_LOG_LEVEL_ERROR, - "%s: Wrong UDP relay number: %d, total=%d\n", - __FUNCTION__,(int)dest,(int)get_real_udp_relay_servers_number()); - ret = -1; - goto err; - } - } else { - size_t dest = id; - if(dest >= get_real_general_relay_servers_number()) { - TURN_LOG_FUNC( - TURN_LOG_LEVEL_ERROR, - "%s: Too large general relay number: %d, total=%d\n", - __FUNCTION__,(int)dest,(int)get_real_general_relay_servers_number()); - ret = -1; - goto err; - } - rs = general_relay_servers[dest]; - if(!rs) { - TURN_LOG_FUNC( - TURN_LOG_LEVEL_ERROR, - "%s: Wrong general relay number: %d, total=%d\n", - __FUNCTION__,(int)dest,(int)get_real_general_relay_servers_number()); - ret = -1; - goto err; - } + struct relay_server *rs = get_relay_server(id); + if(!rs) { + TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: can't find relay for turn_server_id: %d\n", __FUNCTION__,(int)id); + ret = -1; + goto err; } sm.relay_server = rs;