Packages
hackney
3.0.0
4.7.2
4.7.1
4.7.0
4.6.1
4.6.0
4.5.2
4.5.1
4.5.0
4.4.5
4.4.3
4.4.2
4.4.1
4.4.0
4.3.0
4.2.3
4.2.2
4.2.1
4.2.0
4.1.0
4.0.3
4.0.2
4.0.1
4.0.0
3.2.1
3.2.0
3.1.2
3.1.1
3.1.0
3.0.3
3.0.2
3.0.1
3.0.0
retired
2.0.1
2.0.0
2.0.0-beta.1
1.25.0
1.24.1
1.24.0
1.23.0
1.22.0
1.21.0
1.20.1
1.20.0
1.19.1
1.19.0
1.18.2
1.18.1
1.18.0
1.17.4
1.17.3
1.17.2
1.17.1
1.17.0
1.16.0
1.15.2
1.15.1
1.15.0
1.14.3
1.14.2
1.14.0
1.13.0
1.12.1
1.12.0
1.11.0
1.10.1
1.10.0
1.9.0
1.8.6
1.8.5
1.8.4
1.8.3
1.8.2
1.8.0
1.7.1
1.7.0
1.6.6
retired
1.6.5
1.6.4
retired
1.6.3
1.6.2
1.6.1
1.6.0
1.5.7
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.10
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.0
1.1.0
1.0.6
1.0.5
1.0.2
1.0.1
0.15.2
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
Simple HTTP client with HTTP/1.1, HTTP/2, and HTTP/3 support
Retired package: Release invalid - Use 3.0.1 instead
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
c_src/lsquic/src/liblsquic/lsquic_rtt.c
/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */
/*
* lsquic_rtt.c -- RTT calculation
*/
#include <stdlib.h>
#include <string.h>
#ifndef WIN32
#include <sys/time.h>
#endif
#include "lsquic_int_types.h"
#include "lsquic_rtt.h"
/* See RFC 2988 */
#define ALPHA_SHIFT 3 /* Alpha is 1/8 */
#define BETA_SHIFT 2 /* Beta is 1/4 */
void
lsquic_rtt_stats_update (struct lsquic_rtt_stats *stats,
lsquic_time_t send_delta, lsquic_time_t lack_delta)
{
if (send_delta > lack_delta)
send_delta -= lack_delta;
if (stats->srtt) {
stats->rttvar -= stats->rttvar >> BETA_SHIFT;
// FIXED: subtracting unsigned (the (int) cast gets repromoted to uint64_t
// made abs() irrelevant and allowed overflow. instead cast the difference
// to a signed int64 and use labs() to get abs val.
stats->rttvar += (llabs((int64_t) (send_delta - stats->srtt)))
>> BETA_SHIFT;
stats->srtt -= stats->srtt >> ALPHA_SHIFT;
stats->srtt += send_delta >> ALPHA_SHIFT;
if (send_delta < stats->min_rtt)
stats->min_rtt = send_delta;
} else {
/* First measurement */
stats->srtt = send_delta;
stats->rttvar = send_delta >> 1;
stats->min_rtt = send_delta;
}
}