1
0
mirror of https://github.com/coturn/coturn.git synced 2025-10-26 20:41:07 +01:00

working on crashes

This commit is contained in:
mom040267 2014-07-20 06:18:26 +00:00
parent 4850464e1a
commit 553b16dfa1
2 changed files with 82 additions and 30 deletions

View File

@ -7,6 +7,7 @@ Version 4.1.0.1 'Vitari':
- STUN BINDING response fixed in the case of -X (external address) option. - STUN BINDING response fixed in the case of -X (external address) option.
- "pu" CLI command fixed. - "pu" CLI command fixed.
- session cleaning fixed in TCP relay functionality (RFC 6062). - session cleaning fixed in TCP relay functionality (RFC 6062).
- some crash conditions fixed.
- working on compilation warnings. - working on compilation warnings.
06/13/2014 Oleg Moskalenko <mom040267@gmail.com> 06/13/2014 Oleg Moskalenko <mom040267@gmail.com>

View File

@ -401,6 +401,11 @@ static void auth_server_receive_message(struct bufferevent *bev, void *ptr)
TURN_LOG_LEVEL_ERROR, TURN_LOG_LEVEL_ERROR,
"%s: Too large UDP relay number: %d\n", "%s: Too large UDP relay number: %d\n",
__FUNCTION__,(int)dest); __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 { } else {
output = bufferevent_get_output(udp_relay_servers[dest]->auth_out_buf); output = bufferevent_get_output(udp_relay_servers[dest]->auth_out_buf);
} }
@ -408,8 +413,13 @@ static void auth_server_receive_message(struct bufferevent *bev, void *ptr)
if(dest >= get_real_general_relay_servers_number()) { if(dest >= get_real_general_relay_servers_number()) {
TURN_LOG_FUNC( TURN_LOG_FUNC(
TURN_LOG_LEVEL_ERROR, TURN_LOG_LEVEL_ERROR,
"%s: Too large general relay number: %d\n", "%s: Too large general relay number: %d, total %d\n",
__FUNCTION__,(int)dest); __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 { } else {
output = bufferevent_get_output(general_relay_servers[dest]->auth_out_buf); output = bufferevent_get_output(general_relay_servers[dest]->auth_out_buf);
} }
@ -437,37 +447,38 @@ static int send_socket_to_general_relay(ioa_engine_handle e, struct message_to_r
smptr->t = RMT_SOCKET; smptr->t = RMT_SOCKET;
{ struct evbuffer *output = NULL;
struct evbuffer *output = NULL; int success = 0;
int success = 0;
output = bufferevent_get_output(rdest->out_buf); if(!rdest) {
success = -1;
goto label_end;
}
if(output) { output = bufferevent_get_output(rdest->out_buf);
if(evbuffer_add(output,smptr,sizeof(struct message_to_relay))<0) { if(output) {
TURN_LOG_FUNC(
TURN_LOG_LEVEL_ERROR,
"%s: Cannot add message to relay output buffer\n",
__FUNCTION__);
} else {
success = 1; if(evbuffer_add(output,smptr,sizeof(struct message_to_relay))<0) {
smptr->m.sm.nd.nbh=NULL; TURN_LOG_FUNC(
} TURN_LOG_LEVEL_ERROR,
"%s: Cannot add message to relay output buffer\n",
} __FUNCTION__);
} else {
if(!success) { success = 1;
ioa_network_buffer_delete(e, smptr->m.sm.nd.nbh);
smptr->m.sm.nd.nbh=NULL; smptr->m.sm.nd.nbh=NULL;
IOA_CLOSE_SOCKET(smptr->m.sm.s);
return -1;
} }
} }
label_end:
if(!success) {
ioa_network_buffer_delete(e, smptr->m.sm.nd.nbh);
smptr->m.sm.nd.nbh=NULL;
IOA_CLOSE_SOCKET(smptr->m.sm.s);
return -1;
}
return 0; return 0;
} }
@ -487,23 +498,39 @@ static int send_socket_to_relay(turnserver_id id, u64bits cid, stun_tid *tid, io
if(dest >= get_real_udp_relay_servers_number()) { if(dest >= get_real_udp_relay_servers_number()) {
TURN_LOG_FUNC( TURN_LOG_FUNC(
TURN_LOG_LEVEL_ERROR, TURN_LOG_LEVEL_ERROR,
"%s: Too large UDP relay number: %d, rmt=%d\n", "%s: Too large UDP relay number: %d, rmt=%d, total=%d\n",
__FUNCTION__,(int)dest,(int)rmt); __FUNCTION__,(int)dest,(int)rmt, (int)get_real_udp_relay_servers_number());
ret = -1; ret = -1;
goto err; goto err;
} }
rs = udp_relay_servers[dest]; 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());
ret = -1;
goto err;
}
} else { } else {
size_t dest = id; size_t dest = id;
if(dest >= get_real_general_relay_servers_number()) { if(dest >= get_real_general_relay_servers_number()) {
TURN_LOG_FUNC( TURN_LOG_FUNC(
TURN_LOG_LEVEL_ERROR, TURN_LOG_LEVEL_ERROR,
"%s: Too large general relay number: %d, rmt=%d\n", "%s: Too large general relay number: %d, rmt=%d, total=%d\n",
__FUNCTION__,(int)dest,(int)rmt); __FUNCTION__,(int)dest,(int)rmt, (int)get_real_general_relay_servers_number());
ret = -1; ret = -1;
goto err; goto err;
} }
rs = general_relay_servers[dest]; 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());
ret = -1;
goto err;
}
} }
switch (rmt) { switch (rmt) {
@ -749,7 +776,12 @@ static void listener_receive_message(struct bufferevent *bev, void *ptr)
if(turn_params.net_engine_version == NEV_UDP_SOCKET_PER_THREAD) { if(turn_params.net_engine_version == NEV_UDP_SOCKET_PER_THREAD) {
size_t ri; size_t ri;
for(ri=0;ri<get_real_general_relay_servers_number();ri++) { for(ri=0;ri<get_real_general_relay_servers_number();ri++) {
if(general_relay_servers[ri]->thr == pthread_self()) { if(!(general_relay_servers[ri])) {
TURN_LOG_FUNC(
TURN_LOG_LEVEL_ERROR,
"%s: Wrong general relay number: %d, total %d\n",
__FUNCTION__,(int)ri,(int)get_real_general_relay_servers_number());
} else if(general_relay_servers[ri]->thr == pthread_self()) {
relay_thread_index=ri; relay_thread_index=ri;
break; break;
} }
@ -1655,6 +1687,25 @@ void setup_server(void)
setup_tcp_listener_servers(turn_params.listener.ioa_eng, NULL); setup_tcp_listener_servers(turn_params.listener.ioa_eng, NULL);
} }
{
int tot = 0;
if(udp_relay_servers[0]) {
tot = get_real_udp_relay_servers_number();
}
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO,"Total UDP servers: %d\n",(int)tot);
}
{
int tot = get_real_general_relay_servers_number();
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO,"Total General servers: %d\n",(int)tot);
int i;
for(i = 0;i<tot;i++) {
if(!(general_relay_servers[i])) {
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR,"General server %d is not initialized !\n",(int)i);
}
}
}
setup_auth_server(); setup_auth_server();
if(use_cli) if(use_cli)
setup_cli_server(); setup_cli_server();