1
0
mirror of https://github.com/coturn/coturn.git synced 2025-10-30 14:31:29 +01:00

created netengine.c get_relay_server utility method to reduce code duplication (#1032)

This commit is contained in:
Scott Godin 2022-10-21 14:49:59 -04:00 committed by GitHub
parent baa69d0815
commit a7316a3d30
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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;