This commit is contained in:
mom040267 2014-10-09 08:37:42 +00:00
parent 37f1912eb1
commit 58efbf9635
7 changed files with 96 additions and 17 deletions

View File

@ -229,9 +229,6 @@ static ioa_socket_handle dtls_accept_client_connection(
ioa_socket_handle ioas = create_ioa_socket_from_ssl(server->e, sock, ssl, DTLS_SOCKET, CLIENT_SOCKET, remote_addr, local_addr);
if(ioas) {
ioas->listener_server = server;
addr_cpy(&(server->sm.m.sm.nd.src_addr),remote_addr);
server->sm.m.sm.nd.recv_ttl = TTL_IGNORE;
server->sm.m.sm.nd.recv_tos = TOS_IGNORE;
@ -437,7 +434,6 @@ static int handle_udp_packet(dtls_listener_relay_server_type *server,
__FUNCTION__, (char*) saddr,(char*) rsaddr);
}
s->e = ioa_eng;
s->listener_server = server;
add_socket_to_map(s, amap);
open_client_connection_session(ts, &(sm->m.sm));
}
@ -565,7 +561,6 @@ static int create_new_connected_udp_socket(
"Accepted DTLS connection from");
ret->ssl = connecting_ssl;
ret->listener_server = server;
ioa_network_buffer_delete(server->e, server->sm.m.sm.nd.nbh);
server->sm.m.sm.nd.nbh = NULL;
@ -583,9 +578,8 @@ static void udp_server_input_handler(evutil_socket_t fd, short what, void* arg)
{
int cycle = 0;
ioa_socket_handle s = (ioa_socket_handle)arg;
dtls_listener_relay_server_type* server = (dtls_listener_relay_server_type*)s->listener_server;
dtls_listener_relay_server_type* server = (dtls_listener_relay_server_type*)arg;
ioa_socket_handle s = server->udp_listen_s;
FUNCSTART;
@ -726,8 +720,6 @@ static int create_server_socket(dtls_listener_relay_server_type* server, int rep
server->udp_listen_s = create_ioa_socket_from_fd(server->e, udp_listen_fd, NULL, UDP_SOCKET, LISTENER_SOCKET, NULL, &(server->addr));
server->udp_listen_s->listener_server = server;
set_sock_buf_size(udp_listen_fd,UR_SERVER_SOCK_BUF_SIZE);
if(sock_bind_to_device(udp_listen_fd, (unsigned char*)server->ifname)<0) {
@ -756,7 +748,7 @@ static int create_server_socket(dtls_listener_relay_server_type* server, int rep
server->udp_listen_ev = event_new(server->e->event_base,udp_listen_fd,
EV_READ|EV_PERSIST,udp_server_input_handler,
server->udp_listen_s);
server);
event_add(server->udp_listen_ev,NULL);
}
@ -827,7 +819,7 @@ static int reopen_server_socket(dtls_listener_relay_server_type* server, evutil_
server->udp_listen_ev = event_new(server->e->event_base, udp_listen_fd,
EV_READ | EV_PERSIST, udp_server_input_handler,
server->udp_listen_s);
server);
event_add(server->udp_listen_ev, NULL );
}

View File

@ -1448,16 +1448,23 @@ void add_socket_to_map(ioa_socket_handle s, ur_addr_map *amap)
&(s->remote_addr),
(ur_addr_map_value_type)s);
s->sockets_container = amap;
//printf("%s: 111.111: amap=0x%lx: ne=%lu, sz=%lu\n",__FUNCTION__,(unsigned long)amap,(unsigned long)ur_addr_map_num_elements(amap),(unsigned long)ur_addr_map_size(amap));
}
}
void delete_socket_from_map(ioa_socket_handle s)
{
if(s && s->sockets_container) {
//ur_addr_map *amap = s->sockets_container;
ur_addr_map_del(s->sockets_container,
&(s->remote_addr),
NULL);
s->sockets_container = NULL;
//printf("%s: 111.222: amap=0x%lx: ne=%lu, sz=%lu\n",__FUNCTION__,(unsigned long)amap,(unsigned long)ur_addr_map_num_elements(amap),(unsigned long)ur_addr_map_size(amap));
}
}
@ -1741,7 +1748,11 @@ ioa_socket_handle detach_ioa_socket(ioa_socket_handle s, int full_detach)
set_socket_ssl(ret,s->ssl);
ret->fd = s->fd;
ret->family = s->family;
if(s->parent_s)
ret->family = s->parent_s->family;
else
ret->family = s->family;
ret->st = s->st;
ret->sat = s->sat;
ret->bound = s->bound;
@ -1836,6 +1847,8 @@ void set_ioa_socket_sub_session(ioa_socket_handle s, tcp_connection *tc)
int get_ioa_socket_address_family(ioa_socket_handle s) {
if(!s) {
return AF_INET;
} else if(s->done) {
return s->family;
} else if(s->parent_s) {
return s->parent_s->family;
} else {

View File

@ -170,7 +170,6 @@ struct _ioa_socket
{
evutil_socket_t fd;
struct _ioa_socket *parent_s;
void *listener_server;
u32bits magic;
ur_addr_map *sockets_container; /* relay container for UDP sockets */
struct bufferevent *bev;

View File

@ -98,8 +98,6 @@ static void server_input_handler(struct evconnlistener *l, evutil_socket_t fd,
if (ioas) {
ioas->listener_server = server;
server->sm.m.sm.nd.recv_ttl = TTL_IGNORE;
server->sm.m.sm.nd.recv_tos = TOS_IGNORE;
server->sm.m.sm.nd.nbh = NULL;

View File

@ -692,6 +692,48 @@ static void addr_list_foreach(addr_list_header* slh, ur_addr_map_func func) {
}
}
static size_t addr_list_num_elements(const addr_list_header* slh) {
size_t ret = 0;
if (slh) {
size_t i;
for (i = 0; i < ADDR_ARRAY_SIZE; ++i) {
const addr_elem *elem = &(slh->main_list[i]);
if (elem->value) {
++ret;
}
}
if (slh->extra_list) {
for (i = 0; i < slh->extra_sz; ++i) {
addr_elem *elem = &(slh->extra_list[i]);
if (elem->value) {
++ret;
}
}
}
}
return ret;
}
static size_t addr_list_size(const addr_list_header* slh) {
size_t ret = 0;
if (slh) {
ret += ADDR_ARRAY_SIZE;
ret += slh->extra_sz;
}
return ret;
}
static addr_elem* addr_list_get(addr_list_header* slh, const ioa_addr* key) {
if(!slh || !key) return NULL;
@ -863,6 +905,40 @@ void ur_addr_map_foreach(ur_addr_map* map, ur_addr_map_func func) {
}
}
size_t ur_addr_map_num_elements(const ur_addr_map* map) {
size_t ret = 0;
if (ur_addr_map_valid(map)) {
u32bits i = 0;
for (i = 0; i < ADDR_MAP_SIZE; i++) {
const addr_list_header* slh = &(map->lists[i]);
ret += addr_list_num_elements(slh);
}
}
return ret;
}
size_t ur_addr_map_size(const ur_addr_map* map) {
size_t ret = 0;
if (ur_addr_map_valid(map)) {
u32bits i = 0;
for (i = 0; i < ADDR_MAP_SIZE; i++) {
const addr_list_header* slh = &(map->lists[i]);
ret += addr_list_size(slh);
}
}
return ret;
}
//////////////////// STRING LISTS ///////////////////////////////////
typedef struct _string_list {

View File

@ -216,6 +216,7 @@ int ur_addr_map_del(ur_addr_map* map, ioa_addr* key,ur_addr_map_func func);
*/
void ur_addr_map_foreach(ur_addr_map* map, ur_addr_map_func func);
size_t ur_addr_map_num_elements(const ur_addr_map* map);
size_t ur_addr_map_size(const ur_addr_map* map);
//////////////// UR STRING MAP //////////////////

View File

@ -1610,7 +1610,7 @@ static int handle_turn_refresh(turn_turnserver *server,
//Transfer socket:
ioa_socket_handle s = detach_ioa_socket(ss->client_socket,0);
ioa_socket_handle s = detach_ioa_socket(ss->client_socket,1);
ss->to_be_closed = 1;