diff --git a/src/apps/relay/dtls_listener.c b/src/apps/relay/dtls_listener.c index f442841..cddd076 100644 --- a/src/apps/relay/dtls_listener.c +++ b/src/apps/relay/dtls_listener.c @@ -459,7 +459,9 @@ static int handle_udp_packet(dtls_listener_relay_server_type *server, } s->e = ioa_eng; add_socket_to_map(s, amap); - open_client_connection_session(ts, &(sm->m.sm)); + if(open_client_connection_session(ts, &(sm->m.sm))<0) { + return -1; + } } } diff --git a/src/apps/relay/netengine.c b/src/apps/relay/netengine.c index 3084374..7ae2d0e 100644 --- a/src/apps/relay/netengine.c +++ b/src/apps/relay/netengine.c @@ -742,7 +742,10 @@ static int handle_relay_message(relay_server_handle rs, struct message_to_relay sm->m.sm.s = NULL; } else { s->e = rs->ioa_eng; - open_client_connection_session(&(rs->server), &(sm->m.sm)); + if(open_client_connection_session(&(rs->server), &(sm->m.sm))<0) { + IOA_CLOSE_SOCKET(s); + sm->m.sm.s = NULL; + } } ioa_network_buffer_delete(rs->ioa_eng, sm->m.sm.nd.nbh); @@ -780,7 +783,10 @@ static int handle_relay_message(relay_server_handle rs, struct message_to_relay sm->m.sm.s = NULL; } else { s->e = rs->ioa_eng; - open_client_connection_session(&(rs->server), &(sm->m.sm)); + if(open_client_connection_session(&(rs->server), &(sm->m.sm))<0) { + IOA_CLOSE_SOCKET(s); + sm->m.sm.s = NULL; + } } ioa_network_buffer_delete(rs->ioa_eng, sm->m.sm.nd.nbh); diff --git a/src/apps/relay/ns_ioalib_engine_impl.c b/src/apps/relay/ns_ioalib_engine_impl.c index 59104bf..f4dd6a1 100644 --- a/src/apps/relay/ns_ioalib_engine_impl.c +++ b/src/apps/relay/ns_ioalib_engine_impl.c @@ -1633,6 +1633,7 @@ void detach_socket_net_data(ioa_socket_handle s) void close_ioa_socket(ioa_socket_handle s) { if (s) { + if(s->magic != SOCKET_MAGIC) { TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "!!! %s wrong magic on socket: 0x%lx, st=%d, sat=%d\n", __FUNCTION__,(long)s, s->st, s->sat); return; @@ -2401,11 +2402,11 @@ static int socket_input_worker(ioa_socket_handle s) TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "!!!%s on socket: 0x%lx, st=%d, sat=%d: bev already exist\n", __FUNCTION__,(long)s, s->st, s->sat); } s->bev = bufferevent_socket_new(s->e->event_base, - s->fd, - TURN_BUFFEREVENTS_OPTIONS); + s->fd, + TURN_BUFFEREVENTS_OPTIONS); debug_ptr_add(s->bev); bufferevent_setcb(s->bev, socket_input_handler_bev, socket_output_handler_bev, - eventcb_bev, s); + eventcb_bev, s); bufferevent_setwatermark(s->bev, EV_READ|EV_WRITE, 0, BUFFEREVENT_HIGH_WATERMARK); bufferevent_enable(s->bev, EV_READ|EV_WRITE); /* Start reading. */ } @@ -3298,14 +3299,19 @@ int register_callback_on_ioa_socket(ioa_engine_handle e, ioa_socket_handle s, in return -1; } } else { - s->bev = bufferevent_socket_new(s->e->event_base, + if(check_tentative_tls(s->fd)) { + s->tobeclosed = 1; + return -1; + } else { + s->bev = bufferevent_socket_new(s->e->event_base, s->fd, TURN_BUFFEREVENTS_OPTIONS); - debug_ptr_add(s->bev); - bufferevent_setcb(s->bev, socket_input_handler_bev, socket_output_handler_bev, - eventcb_bev, s); - bufferevent_setwatermark(s->bev, EV_READ|EV_WRITE, 0, BUFFEREVENT_HIGH_WATERMARK); - bufferevent_enable(s->bev, EV_READ|EV_WRITE); /* Start reading. */ + debug_ptr_add(s->bev); + bufferevent_setcb(s->bev, socket_input_handler_bev, socket_output_handler_bev, + eventcb_bev, s); + bufferevent_setwatermark(s->bev, EV_READ|EV_WRITE, 0, BUFFEREVENT_HIGH_WATERMARK); + bufferevent_enable(s->bev, EV_READ|EV_WRITE); /* Start reading. */ + } } break; case TLS_SOCKET: diff --git a/src/server/ns_turn_server.c b/src/server/ns_turn_server.c index 1bff800..d8a84ef 100644 --- a/src/server/ns_turn_server.c +++ b/src/server/ns_turn_server.c @@ -4320,8 +4320,9 @@ static int create_relay_connection(turn_turnserver* server, set_do_not_use_df(newelem->s); if(get_ioa_socket_type(newelem->s) != TCP_SOCKET) { - register_callback_on_ioa_socket(server->e, newelem->s, IOA_EV_READ, - peer_input_handler, ss, 0); + if(register_callback_on_ioa_socket(server->e, newelem->s, IOA_EV_READ,peer_input_handler, ss, 0)<0) { + return -1; + } } if (lifetime<1) @@ -4555,8 +4556,10 @@ static int attach_socket_to_session(turn_turnserver* server, ioa_socket_handle s ss->client_socket = s; - register_callback_on_ioa_socket(server->e, s, IOA_EV_READ, - client_input_handler, ss, 0); + if(register_callback_on_ioa_socket(server->e, s, IOA_EV_READ, + client_input_handler, ss, 0)<0) { + return -1; + } set_ioa_socket_session(s, ss); } @@ -4582,8 +4585,10 @@ int open_client_connection_session(turn_turnserver* server, ss->client_socket = sm->s; - register_callback_on_ioa_socket(server->e, ss->client_socket, IOA_EV_READ, - client_input_handler, ss, 0); + if(register_callback_on_ioa_socket(server->e, ss->client_socket, IOA_EV_READ, + client_input_handler, ss, 0)<0) { + return -1; + } set_ioa_socket_session(ss->client_socket, ss);