Packages
hackney
2.0.1
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
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
c_src/lsquic/src/liblsquic/lsquic_pacer.h
/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */
#ifndef LSQUIC_PACER_H
#define LSQUIC_PACER_H 1
struct lsquic_conn;
struct pacer
{
const struct lsquic_conn
*pa_conn; /* Used for logging */
lsquic_time_t pa_next_sched;
lsquic_time_t pa_last_delayed;
lsquic_time_t pa_now;
/* All tick times are in microseconds */
unsigned pa_clock_granularity;
unsigned pa_burst_tokens;
unsigned pa_n_scheduled; /* Within single tick */
enum {
PA_LAST_SCHED_DELAYED = (1 << 0),
PA_DELAYED_ON_TICK_IN = (1 << 1),
} pa_flags;
#ifndef NDEBUG
struct {
unsigned n_scheduled;
} pa_stats;
#endif
};
typedef lsquic_time_t (*tx_time_f)(void *ctx);
void
lsquic_pacer_init (struct pacer *, const struct lsquic_conn *,
unsigned clock_granularity);
void
lsquic_pacer_cleanup (struct pacer *);
void
lsquic_pacer_tick_in (struct pacer *, lsquic_time_t);
void
lsquic_pacer_tick_out (struct pacer *);
int
lsquic_pacer_can_schedule (struct pacer *, unsigned n_in_flight);
void
lsquic_pacer_packet_scheduled (struct pacer *pacer, unsigned n_in_flight,
int in_recovery, tx_time_f tx_time, void *tx_ctx);
void
lsquic_pacer_loss_event (struct pacer *);
#define lsquic_pacer_delayed(pacer) ((pacer)->pa_flags & PA_LAST_SCHED_DELAYED)
#define lsquic_pacer_next_sched(pacer) (+(pacer)->pa_next_sched)
int
lsquic_pacer_can_schedule_probe (const struct pacer *,
unsigned n_in_flight, lsquic_time_t tx_time);
#endif