summaryrefslogtreecommitdiff
path: root/toxcore/net_crypto.c
diff options
context:
space:
mode:
Diffstat (limited to 'toxcore/net_crypto.c')
-rw-r--r--toxcore/net_crypto.c32
1 files changed, 30 insertions, 2 deletions
diff --git a/toxcore/net_crypto.c b/toxcore/net_crypto.c
index 8d598469..15487f37 100644
--- a/toxcore/net_crypto.c
+++ b/toxcore/net_crypto.c
@@ -781,8 +781,29 @@ static int64_t send_lossless_packet(Net_Crypto *c, int crypt_connection_id, uint
781 if (conn == 0) 781 if (conn == 0)
782 return -1; 782 return -1;
783 783
784 uint64_t temp_time = current_time_monotonic();
785
786 /* If last packet send failed, try to send packet again.
787 If sending it fails we won't be able to send the new packet. */
788 if (conn->maximum_speed_reached) {
789 Packet_Data *dt = NULL;
790 uint32_t packet_num = conn->send_array.buffer_end - 1;
791 int ret = get_data_pointer(&conn->send_array, &dt, packet_num);
792
793 if (ret == 1) {
794 if (!dt->time) {
795 if (send_data_packet_helper(c, crypt_connection_id, conn->recv_array.buffer_start, packet_num, dt->data,
796 dt->length) != 0) {
797 return -1;
798 }
799
800 dt->time = temp_time;
801 }
802 }
803 }
804
784 Packet_Data dt; 805 Packet_Data dt;
785 dt.time = current_time_monotonic(); 806 dt.time = temp_time;
786 dt.length = length; 807 dt.length = length;
787 memcpy(dt.data, data, length); 808 memcpy(dt.data, data, length);
788 int64_t packet_num = add_data_end_of_buffer(&conn->send_array, &dt); 809 int64_t packet_num = add_data_end_of_buffer(&conn->send_array, &dt);
@@ -790,8 +811,15 @@ static int64_t send_lossless_packet(Net_Crypto *c, int crypt_connection_id, uint
790 if (packet_num == -1) 811 if (packet_num == -1)
791 return -1; 812 return -1;
792 813
793 if (send_data_packet_helper(c, crypt_connection_id, conn->recv_array.buffer_start, packet_num, data, length) != 0) 814 conn->maximum_speed_reached = 0;
815
816 if (send_data_packet_helper(c, crypt_connection_id, conn->recv_array.buffer_start, packet_num, data, length) != 0) {
817 Packet_Data *dt1 = NULL;
818 get_data_pointer(&conn->send_array, &dt1, packet_num);
819 dt1->time = 0;
820 conn->maximum_speed_reached = 1;
794 fprintf(stderr, "send_data_packet failed\n"); 821 fprintf(stderr, "send_data_packet failed\n");
822 }
795 823
796 return packet_num; 824 return packet_num;
797} 825}