working on double allocations

This commit is contained in:
mom040267 2014-07-09 07:12:54 +00:00
parent b44795b021
commit 62301f57ac
3 changed files with 46 additions and 24 deletions

View File

@ -502,13 +502,19 @@ static int print_session(ur_map_key_type key, ur_map_value_type value, void *arg
addr_to_string(&(tsi->local_addr_data.addr),(u08bits*)tsi->local_addr_data.saddr);
if(!tsi->remote_addr_data.saddr[0])
addr_to_string(&(tsi->remote_addr_data.addr),(u08bits*)tsi->remote_addr_data.saddr);
if(!tsi->relay_addr_data.saddr[0])
addr_to_string(&(tsi->relay_addr_data.addr),(u08bits*)tsi->relay_addr_data.saddr);
if(!tsi->relay_addr_data_ipv4.saddr[0])
addr_to_string(&(tsi->relay_addr_data_ipv4.addr),(u08bits*)tsi->relay_addr_data_ipv4.saddr);
if(!tsi->relay_addr_data_ipv6.saddr[0])
addr_to_string(&(tsi->relay_addr_data_ipv6.addr),(u08bits*)tsi->relay_addr_data_ipv6.saddr);
myprintf(cs," client addr %s, server addr %s\n",
tsi->remote_addr_data.saddr,
tsi->local_addr_data.saddr);
myprintf(cs," relay addr %s\n",
tsi->relay_addr_data.saddr);
if(tsi->relay_addr_data_ipv4.saddr[0]) {
myprintf(cs," relay addr %s\n", tsi->relay_addr_data_ipv4.saddr);
}
if(tsi->relay_addr_data_ipv6.saddr[0]) {
myprintf(cs," relay addr %s\n", tsi->relay_addr_data_ipv6.saddr);
}
}
myprintf(cs," fingerprints enforced: %s\n",get_flag(tsi->enforce_fingerprints));
myprintf(cs," mobile: %s\n",get_flag(tsi->is_mobile));

View File

@ -434,15 +434,18 @@ int turn_session_info_copy_from(struct turn_session_info* tsi, ts_ur_super_sessi
addr_to_string(&(tsi->remote_addr_data.addr),(u08bits*)tsi->remote_addr_data.saddr);
}
{
int i;
for(i=0;i<ALLOC_PROTOCOLS_NUMBER;++i) {
if(ss->alloc.relay_sessions[i].s) {
tsi->peer_protocol = get_ioa_socket_type(ss->alloc.relay_sessions[i].s);
if(ss->alloc.is_valid) {
addr_cpy(&(tsi->relay_addr_data.addr),get_local_addr_from_ioa_socket(ss->alloc.relay_sessions[i].s));
addr_to_string(&(tsi->relay_addr_data.addr),(u08bits*)tsi->relay_addr_data.saddr);
}
break;
if(ss->alloc.relay_sessions[ALLOC_IPV4_INDEX].s) {
tsi->peer_protocol = get_ioa_socket_type(ss->alloc.relay_sessions[ALLOC_IPV4_INDEX].s);
if(ss->alloc.is_valid) {
addr_cpy(&(tsi->relay_addr_data_ipv4.addr),get_local_addr_from_ioa_socket(ss->alloc.relay_sessions[ALLOC_IPV4_INDEX].s));
addr_to_string(&(tsi->relay_addr_data_ipv4.addr),(u08bits*)tsi->relay_addr_data_ipv4.saddr);
}
}
if(ss->alloc.relay_sessions[ALLOC_IPV6_INDEX].s) {
tsi->peer_protocol = get_ioa_socket_type(ss->alloc.relay_sessions[ALLOC_IPV6_INDEX].s);
if(ss->alloc.is_valid) {
addr_cpy(&(tsi->relay_addr_data_ipv6.addr),get_local_addr_from_ioa_socket(ss->alloc.relay_sessions[ALLOC_IPV6_INDEX].s));
addr_to_string(&(tsi->relay_addr_data_ipv6.addr),(u08bits*)tsi->relay_addr_data_ipv6.saddr);
}
}
}
@ -3896,25 +3899,30 @@ static int create_relay_connection(turn_turnserver* server,
if (server && ss && ss->client_socket) {
allocation* a = get_allocation_ss(ss);
relay_endpoint_session* newelem = get_relay_session_ss(ss,get_family(address_family));
IOA_CLOSE_SOCKET(newelem->s);
ns_bzero(newelem, sizeof(relay_endpoint_session));
newelem->s = NULL;
relay_endpoint_session* newelem = NULL;
ioa_socket_handle rtcp_s = NULL;
if (in_reservation_token) {
ioa_socket_handle s = NULL;
if (get_ioa_socket_from_reservation(server->e, in_reservation_token,
&newelem->s) < 0) {
IOA_CLOSE_SOCKET(newelem->s);
&s) < 0) {
IOA_CLOSE_SOCKET(s);
*err_code = 508;
*reason = (const u08bits *)"Cannot find reserved socket";
return -1;
}
int family = get_ioa_socket_address_family(s);
newelem = get_relay_session_ss(ss,family);
IOA_CLOSE_SOCKET(newelem->s);
ns_bzero(newelem, sizeof(relay_endpoint_session));
newelem->s = s;
if(!check_username_hash(newelem->s,ss->username,(u08bits*)ss->realm_options.name)) {
IOA_CLOSE_SOCKET(newelem->s);
*err_code = 508;
@ -3926,6 +3934,13 @@ static int create_relay_connection(turn_turnserver* server,
} else {
newelem = get_relay_session_ss(ss,get_family(address_family));
IOA_CLOSE_SOCKET(newelem->s);
ns_bzero(newelem, sizeof(relay_endpoint_session));
newelem->s = NULL;
int res = create_relay_ioa_sockets(server->e,
ss->client_socket,
address_family, transport,

View File

@ -127,7 +127,8 @@ struct turn_session_info {
char tls_cipher[65];
addr_data local_addr_data;
addr_data remote_addr_data;
addr_data relay_addr_data;
addr_data relay_addr_data_ipv4;
addr_data relay_addr_data_ipv6;
u08bits username[STUN_MAX_USERNAME_SIZE+1];
int enforce_fingerprints;
/* Stats */
@ -146,7 +147,7 @@ struct turn_session_info {
addr_data *extra_peers_data;
size_t extra_peers_size;
/* Realm */
char realm[STUN_MAX_REALM_SIZE+1];
char realm[STUN_MAX_REALM_SIZE + 1];
char origin[STUN_MAX_ORIGIN_SIZE + 1];
/* Bandwidth */
band_limit_t bps;