Send oob packets to all relays tied to the connection.

Don't fallback to sending oob packets if pipe for normal connection is clogged.
This commit is contained in:
irungentoo 2015-04-18 10:27:19 -04:00
parent 0886b4f7b8
commit eb0f50d297
No known key found for this signature in database
GPG Key ID: 10349DC9BED89E98

View File

@ -213,6 +213,8 @@ int send_packet_tcp_connection(TCP_Connections *tcp_c, int connections_number, c
unsigned int i; unsigned int i;
int ret = -1; int ret = -1;
_Bool limit_reached = 0;
for (i = 0; i < MAX_FRIEND_TCP_CONNECTIONS; ++i) { for (i = 0; i < MAX_FRIEND_TCP_CONNECTIONS; ++i) {
uint32_t tcp_con_num = con_to->connections[i].tcp_connection; uint32_t tcp_con_num = con_to->connections[i].tcp_connection;
uint8_t status = con_to->connections[i].status; uint8_t status = con_to->connections[i].status;
@ -228,6 +230,10 @@ int send_packet_tcp_connection(TCP_Connections *tcp_c, int connections_number, c
ret = send_data(tcp_con->connection, connection_id, packet, length); ret = send_data(tcp_con->connection, connection_id, packet, length);
if (ret == 0) {
limit_reached = 1;
}
if (ret == 1) { if (ret == 1) {
break; break;
} }
@ -236,7 +242,10 @@ int send_packet_tcp_connection(TCP_Connections *tcp_c, int connections_number, c
if (ret == 1) { if (ret == 1) {
return 0; return 0;
} else { } else if (!limit_reached) {
ret = 0;
/* Send oob packets to all relays tied to the connection. */
for (i = 0; i < MAX_FRIEND_TCP_CONNECTIONS; ++i) { for (i = 0; i < MAX_FRIEND_TCP_CONNECTIONS; ++i) {
uint32_t tcp_con_num = con_to->connections[i].tcp_connection; uint32_t tcp_con_num = con_to->connections[i].tcp_connection;
uint8_t status = con_to->connections[i].status; uint8_t status = con_to->connections[i].status;
@ -250,19 +259,19 @@ int send_packet_tcp_connection(TCP_Connections *tcp_c, int connections_number, c
continue; continue;
} }
ret = send_oob_packet(tcp_con->connection, con_to->public_key, packet, length); if (send_oob_packet(tcp_con->connection, con_to->public_key, packet, length) == 1) {
ret += 1;
if (ret == 1) {
break;
} }
} }
} }
if (ret == 1) { if (ret >= 1) {
return 0; return 0;
} else { } else {
return -1; return -1;
} }
} else {
return -1;
} }
} }
@ -280,6 +289,7 @@ int get_random_tcp_onion_conn_number(TCP_Connections *tcp_c)
for (i = 0; i < tcp_c->tcp_connections_length; ++i) { for (i = 0; i < tcp_c->tcp_connections_length; ++i) {
unsigned int index = ((i + r) % tcp_c->tcp_connections_length); unsigned int index = ((i + r) % tcp_c->tcp_connections_length);
if (tcp_c->tcp_connections[index].onion && tcp_c->tcp_connections[index].status == TCP_CONN_CONNECTED) { if (tcp_c->tcp_connections[index].onion && tcp_c->tcp_connections[index].status == TCP_CONN_CONNECTED) {
return index; return index;
} }