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

working on double allocation

This commit is contained in:
mom040267 2014-07-17 05:33:04 +00:00
parent e15ea092fd
commit 651c5204a4
3 changed files with 29 additions and 4 deletions

View File

@ -92,6 +92,16 @@ relay_endpoint_session *get_relay_session(allocation *a, int family)
return &(a->relay_sessions[ALLOC_INDEX(family)]); return &(a->relay_sessions[ALLOC_INDEX(family)]);
} }
int get_relay_session_failure(allocation *a, int family)
{
return a->relay_sessions_failure[ALLOC_INDEX(family)];
}
void set_relay_session_failure(allocation *a, int family)
{
a->relay_sessions_failure[ALLOC_INDEX(family)] = 1;
}
ioa_socket_handle get_relay_socket(allocation *a, int family) ioa_socket_handle get_relay_socket(allocation *a, int family)
{ {
return a->relay_sessions[ALLOC_INDEX(family)].s; return a->relay_sessions[ALLOC_INDEX(family)].s;

View File

@ -176,6 +176,7 @@ typedef struct _allocation {
stun_tid tid; stun_tid tid;
turn_permission_hashtable addr_to_perm; turn_permission_hashtable addr_to_perm;
relay_endpoint_session relay_sessions[ALLOC_PROTOCOLS_NUMBER]; relay_endpoint_session relay_sessions[ALLOC_PROTOCOLS_NUMBER];
int relay_sessions_failure[ALLOC_PROTOCOLS_NUMBER];
ch_map chns; /* chnum-to-ch_info* */ ch_map chns; /* chnum-to-ch_info* */
void *owner; //ss void *owner; //ss
ur_map *tcp_connections; //global (per turn server) reference ur_map *tcp_connections; //global (per turn server) reference
@ -208,6 +209,8 @@ ch_info* allocation_get_ch_info(allocation* a, u16bits chnum);
ch_info* allocation_get_ch_info_by_peer_addr(allocation* a, ioa_addr* peer_addr); ch_info* allocation_get_ch_info_by_peer_addr(allocation* a, ioa_addr* peer_addr);
relay_endpoint_session *get_relay_session(allocation *a, int family); relay_endpoint_session *get_relay_session(allocation *a, int family);
int get_relay_session_failure(allocation *a, int family);
void set_relay_session_failure(allocation *a, int family);
ioa_socket_handle get_relay_socket(allocation *a, int family); ioa_socket_handle get_relay_socket(allocation *a, int family);
tcp_connection *get_and_clean_tcp_connection_by_id(ur_map *map, tcp_connection_id id); tcp_connection *get_and_clean_tcp_connection_by_id(ur_map *map, tcp_connection_id id);

View File

@ -904,7 +904,10 @@ static int handle_turn_allocate(turn_turnserver *server,
ioa_addr *relayed_addr1 = get_local_addr_from_ioa_socket(get_relay_socket_ss(ss,AF_INET)); ioa_addr *relayed_addr1 = get_local_addr_from_ioa_socket(get_relay_socket_ss(ss,AF_INET));
ioa_addr *relayed_addr2 = get_local_addr_from_ioa_socket(get_relay_socket_ss(ss,AF_INET6)); ioa_addr *relayed_addr2 = get_local_addr_from_ioa_socket(get_relay_socket_ss(ss,AF_INET6));
if(relayed_addr1) { if(get_relay_session_failure(a,AF_INET)) {
addr_set_any(&xor_relayed_addr1);
pxor_relayed_addr1 = &xor_relayed_addr1;
} else if(relayed_addr1) {
if(server->external_ip_set) { if(server->external_ip_set) {
addr_cpy(&xor_relayed_addr1, &(server->external_ip)); addr_cpy(&xor_relayed_addr1, &(server->external_ip));
addr_set_port(&xor_relayed_addr1,addr_get_port(relayed_addr1)); addr_set_port(&xor_relayed_addr1,addr_get_port(relayed_addr1));
@ -914,7 +917,10 @@ static int handle_turn_allocate(turn_turnserver *server,
pxor_relayed_addr1 = &xor_relayed_addr1; pxor_relayed_addr1 = &xor_relayed_addr1;
} }
if(relayed_addr2) { if(get_relay_session_failure(a,AF_INET6)) {
addr_set_any(&xor_relayed_addr2);
pxor_relayed_addr2 = &xor_relayed_addr2;
} else if(relayed_addr2) {
if(server->external_ip_set) { if(server->external_ip_set) {
addr_cpy(&xor_relayed_addr2, &(server->external_ip)); addr_cpy(&xor_relayed_addr2, &(server->external_ip));
addr_set_port(&xor_relayed_addr2,addr_get_port(relayed_addr2)); addr_set_port(&xor_relayed_addr2,addr_get_port(relayed_addr2));
@ -1213,7 +1219,10 @@ static int handle_turn_allocate(turn_turnserver *server,
ioa_addr *relayed_addr1 = get_local_addr_from_ioa_socket(get_relay_socket_ss(ss,AF_INET)); ioa_addr *relayed_addr1 = get_local_addr_from_ioa_socket(get_relay_socket_ss(ss,AF_INET));
ioa_addr *relayed_addr2 = get_local_addr_from_ioa_socket(get_relay_socket_ss(ss,AF_INET6)); ioa_addr *relayed_addr2 = get_local_addr_from_ioa_socket(get_relay_socket_ss(ss,AF_INET6));
if(relayed_addr1) { if(get_relay_session_failure(a,AF_INET)) {
addr_set_any(&xor_relayed_addr1);
pxor_relayed_addr1 = &xor_relayed_addr1;
} else if(relayed_addr1) {
if(server->external_ip_set) { if(server->external_ip_set) {
addr_cpy(&xor_relayed_addr1, &(server->external_ip)); addr_cpy(&xor_relayed_addr1, &(server->external_ip));
addr_set_port(&xor_relayed_addr1,addr_get_port(relayed_addr1)); addr_set_port(&xor_relayed_addr1,addr_get_port(relayed_addr1));
@ -1223,7 +1232,10 @@ static int handle_turn_allocate(turn_turnserver *server,
pxor_relayed_addr1 = &xor_relayed_addr1; pxor_relayed_addr1 = &xor_relayed_addr1;
} }
if(relayed_addr2) { if(get_relay_session_failure(a,AF_INET6)) {
addr_set_any(&xor_relayed_addr2);
pxor_relayed_addr2 = &xor_relayed_addr2;
} else if(relayed_addr2) {
if(server->external_ip_set) { if(server->external_ip_set) {
addr_cpy(&xor_relayed_addr2, &(server->external_ip)); addr_cpy(&xor_relayed_addr2, &(server->external_ip));
addr_set_port(&xor_relayed_addr2,addr_get_port(relayed_addr2)); addr_set_port(&xor_relayed_addr2,addr_get_port(relayed_addr2));