diff options
author | irungentoo <irungentoo@gmail.com> | 2015-06-23 22:05:39 -0400 |
---|---|---|
committer | irungentoo <irungentoo@gmail.com> | 2015-06-23 22:05:39 -0400 |
commit | 1434b319f3956fa3a62033486851ab3815775901 (patch) | |
tree | 67ce6739200b3e88fb94d33e009515dc6af545b0 /toxcore | |
parent | f0433595f9c118bd19f1bf310ae65c02fbb2eb22 (diff) |
Added code to net_crypto to calculate rtt.
Diffstat (limited to 'toxcore')
-rw-r--r-- | toxcore/net_crypto.c | 40 | ||||
-rw-r--r-- | toxcore/net_crypto.h | 5 |
2 files changed, 38 insertions, 7 deletions
diff --git a/toxcore/net_crypto.c b/toxcore/net_crypto.c index 4f4f8283..a826f77a 100644 --- a/toxcore/net_crypto.c +++ b/toxcore/net_crypto.c | |||
@@ -659,7 +659,8 @@ static int generate_request_packet(uint8_t *data, uint16_t length, const Packets | |||
659 | * return -1 on failure. | 659 | * return -1 on failure. |
660 | * return number of requested packets on success. | 660 | * return number of requested packets on success. |
661 | */ | 661 | */ |
662 | static int handle_request_packet(Packets_Array *send_array, const uint8_t *data, uint16_t length) | 662 | static int handle_request_packet(Packets_Array *send_array, const uint8_t *data, uint16_t length, |
663 | uint64_t *latest_send_time, uint64_t rtt_time) | ||
663 | { | 664 | { |
664 | if (length < 1) | 665 | if (length < 1) |
665 | return -1; | 666 | return -1; |
@@ -677,6 +678,7 @@ static int handle_request_packet(Packets_Array *send_array, const uint8_t *data, | |||
677 | uint32_t requested = 0; | 678 | uint32_t requested = 0; |
678 | 679 | ||
679 | uint64_t temp_time = current_time_monotonic(); | 680 | uint64_t temp_time = current_time_monotonic(); |
681 | uint64_t l_sent_time = ~0; | ||
680 | 682 | ||
681 | for (i = send_array->buffer_start; i != send_array->buffer_end; ++i) { | 683 | for (i = send_array->buffer_start; i != send_array->buffer_end; ++i) { |
682 | if (length == 0) | 684 | if (length == 0) |
@@ -688,7 +690,7 @@ static int handle_request_packet(Packets_Array *send_array, const uint8_t *data, | |||
688 | if (send_array->buffer[num]) { | 690 | if (send_array->buffer[num]) { |
689 | uint64_t sent_time = send_array->buffer[num]->sent_time; | 691 | uint64_t sent_time = send_array->buffer[num]->sent_time; |
690 | 692 | ||
691 | if ((sent_time + DEFAULT_PING_CONNECTION) < temp_time) { | 693 | if ((sent_time + rtt_time) < temp_time) { |
692 | send_array->buffer[num]->sent_time = 0; | 694 | send_array->buffer[num]->sent_time = 0; |
693 | } | 695 | } |
694 | } | 696 | } |
@@ -698,6 +700,11 @@ static int handle_request_packet(Packets_Array *send_array, const uint8_t *data, | |||
698 | n = 0; | 700 | n = 0; |
699 | ++requested; | 701 | ++requested; |
700 | } else { | 702 | } else { |
703 | uint64_t sent_time = send_array->buffer[num]->sent_time; | ||
704 | |||
705 | if (l_sent_time < sent_time) | ||
706 | l_sent_time = sent_time; | ||
707 | |||
701 | free(send_array->buffer[num]); | 708 | free(send_array->buffer[num]); |
702 | send_array->buffer[num] = NULL; | 709 | send_array->buffer[num] = NULL; |
703 | } | 710 | } |
@@ -715,6 +722,9 @@ static int handle_request_packet(Packets_Array *send_array, const uint8_t *data, | |||
715 | } | 722 | } |
716 | } | 723 | } |
717 | 724 | ||
725 | if (*latest_send_time < l_sent_time) | ||
726 | *latest_send_time = l_sent_time; | ||
727 | |||
718 | return requested; | 728 | return requested; |
719 | } | 729 | } |
720 | 730 | ||
@@ -1146,8 +1156,19 @@ static int handle_data_packet_helper(Net_Crypto *c, int crypt_connection_id, con | |||
1146 | buffer_start = ntohl(buffer_start); | 1156 | buffer_start = ntohl(buffer_start); |
1147 | num = ntohl(num); | 1157 | num = ntohl(num); |
1148 | 1158 | ||
1149 | if (buffer_start != conn->send_array.buffer_start && clear_buffer_until(&conn->send_array, buffer_start) != 0) | 1159 | uint64_t rtt_calc_time = 0; |
1150 | return -1; | 1160 | |
1161 | if (buffer_start != conn->send_array.buffer_start) { | ||
1162 | Packet_Data *packet_time; | ||
1163 | |||
1164 | if (get_data_pointer(&conn->send_array, &packet_time, conn->send_array.buffer_start) == 1) { | ||
1165 | rtt_calc_time = packet_time->sent_time; | ||
1166 | } | ||
1167 | |||
1168 | if (clear_buffer_until(&conn->send_array, buffer_start) != 0) { | ||
1169 | return -1; | ||
1170 | } | ||
1171 | } | ||
1151 | 1172 | ||
1152 | uint8_t *real_data = data + (sizeof(uint32_t) * 2); | 1173 | uint8_t *real_data = data + (sizeof(uint32_t) * 2); |
1153 | uint16_t real_length = len - (sizeof(uint32_t) * 2); | 1174 | uint16_t real_length = len - (sizeof(uint32_t) * 2); |
@@ -1174,7 +1195,7 @@ static int handle_data_packet_helper(Net_Crypto *c, int crypt_connection_id, con | |||
1174 | } | 1195 | } |
1175 | 1196 | ||
1176 | if (real_data[0] == PACKET_ID_REQUEST) { | 1197 | if (real_data[0] == PACKET_ID_REQUEST) { |
1177 | int requested = handle_request_packet(&conn->send_array, real_data, real_length); | 1198 | int requested = handle_request_packet(&conn->send_array, real_data, real_length, &rtt_calc_time, conn->rtt_time); |
1178 | 1199 | ||
1179 | if (requested == -1) { | 1200 | if (requested == -1) { |
1180 | return -1; | 1201 | return -1; |
@@ -1226,6 +1247,13 @@ static int handle_data_packet_helper(Net_Crypto *c, int crypt_connection_id, con | |||
1226 | return -1; | 1247 | return -1; |
1227 | } | 1248 | } |
1228 | 1249 | ||
1250 | if (rtt_calc_time != 0) { | ||
1251 | uint64_t rtt_time = current_time_monotonic() - rtt_calc_time; | ||
1252 | |||
1253 | if (rtt_time < conn->rtt_time) | ||
1254 | conn->rtt_time = rtt_time; | ||
1255 | } | ||
1256 | |||
1229 | return 0; | 1257 | return 0; |
1230 | } | 1258 | } |
1231 | 1259 | ||
@@ -1580,6 +1608,7 @@ int accept_crypto_connection(Net_Crypto *c, New_Connection *n_c) | |||
1580 | memcpy(conn->dht_public_key, n_c->dht_public_key, crypto_box_PUBLICKEYBYTES); | 1608 | memcpy(conn->dht_public_key, n_c->dht_public_key, crypto_box_PUBLICKEYBYTES); |
1581 | conn->packet_send_rate = CRYPTO_PACKET_MIN_RATE; | 1609 | conn->packet_send_rate = CRYPTO_PACKET_MIN_RATE; |
1582 | conn->packets_left = CRYPTO_MIN_QUEUE_LENGTH; | 1610 | conn->packets_left = CRYPTO_MIN_QUEUE_LENGTH; |
1611 | conn->rtt_time = DEFAULT_PING_CONNECTION; | ||
1583 | crypto_connection_add_source(c, crypt_connection_id, n_c->source); | 1612 | crypto_connection_add_source(c, crypt_connection_id, n_c->source); |
1584 | return crypt_connection_id; | 1613 | return crypt_connection_id; |
1585 | } | 1614 | } |
@@ -1621,6 +1650,7 @@ int new_crypto_connection(Net_Crypto *c, const uint8_t *real_public_key, const u | |||
1621 | conn->status = CRYPTO_CONN_COOKIE_REQUESTING; | 1650 | conn->status = CRYPTO_CONN_COOKIE_REQUESTING; |
1622 | conn->packet_send_rate = CRYPTO_PACKET_MIN_RATE; | 1651 | conn->packet_send_rate = CRYPTO_PACKET_MIN_RATE; |
1623 | conn->packets_left = CRYPTO_MIN_QUEUE_LENGTH; | 1652 | conn->packets_left = CRYPTO_MIN_QUEUE_LENGTH; |
1653 | conn->rtt_time = DEFAULT_PING_CONNECTION; | ||
1624 | memcpy(conn->dht_public_key, dht_public_key, crypto_box_PUBLICKEYBYTES); | 1654 | memcpy(conn->dht_public_key, dht_public_key, crypto_box_PUBLICKEYBYTES); |
1625 | 1655 | ||
1626 | conn->cookie_request_number = random_64b(); | 1656 | conn->cookie_request_number = random_64b(); |
diff --git a/toxcore/net_crypto.h b/toxcore/net_crypto.h index 56f43cc4..0ab6446e 100644 --- a/toxcore/net_crypto.h +++ b/toxcore/net_crypto.h | |||
@@ -82,8 +82,8 @@ | |||
82 | at the dT defined in net_crypto.c */ | 82 | at the dT defined in net_crypto.c */ |
83 | #define CONGESTION_QUEUE_ARRAY_SIZE 24 | 83 | #define CONGESTION_QUEUE_ARRAY_SIZE 24 |
84 | 84 | ||
85 | /* Connection ping in ms. TODO: calculate it per connection. */ | 85 | /* Default connection ping in ms. */ |
86 | #define DEFAULT_PING_CONNECTION 50 | 86 | #define DEFAULT_PING_CONNECTION 200 |
87 | 87 | ||
88 | typedef struct { | 88 | typedef struct { |
89 | uint64_t sent_time; | 89 | uint64_t sent_time; |
@@ -150,6 +150,7 @@ typedef struct { | |||
150 | long signed int last_num_packets_sent[CONGESTION_QUEUE_ARRAY_SIZE]; | 150 | long signed int last_num_packets_sent[CONGESTION_QUEUE_ARRAY_SIZE]; |
151 | uint32_t packets_sent; | 151 | uint32_t packets_sent; |
152 | uint64_t last_congestion_event; | 152 | uint64_t last_congestion_event; |
153 | uint64_t rtt_time; | ||
153 | 154 | ||
154 | /* TCP_connection connection_number */ | 155 | /* TCP_connection connection_number */ |
155 | unsigned int connection_number_tcp; | 156 | unsigned int connection_number_tcp; |