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:
parent
e15ea092fd
commit
651c5204a4
@ -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;
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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));
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user