connection establishment communication procedure improvements

This commit is contained in:
mom040267 2015-01-15 05:44:06 +00:00
parent 17de1a8e12
commit 827b1db525
4 changed files with 37 additions and 18 deletions

View File

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

View File

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

View File

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

View File

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