Packages
hackney
3.0.2
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_sfcw.h
/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */
/*
* lsquic_sfcw.h -- Stream flow control window functions
*/
#ifndef LSQUIC_SFCW_H
#define LSQUIC_SFCW_H 1
struct lsquic_cfcw;
struct lsquic_conn_public;
typedef struct lsquic_sfcw {
struct lsquic_cfcw *sf_cfcw; /* Connection flow control window,
* NULL for streams 1 and 3.
*/
uint64_t sf_max_recv_off; /* Largest offset observed */
uint64_t sf_recv_off; /* Flow control receive offset */
uint64_t sf_read_off; /* Number of bytes consumed */
lsquic_time_t sf_last_updated; /* Last time window was updated */
struct lsquic_conn_public
*sf_conn_pub;
unsigned sf_max_recv_win; /* Maximum receive window */
lsquic_stream_id_t sf_stream_id; /* Used for logging */
} lsquic_sfcw_t;
void
lsquic_sfcw_init (lsquic_sfcw_t *, unsigned initial_max_recv_window,
struct lsquic_cfcw *cfcw, struct lsquic_conn_public *,
lsquic_stream_id_t stream_id);
/* If update is to be sent, updates max_recv_off and returns true. Note
* that if you call this function twice, the second call will return false.
*/
int
lsquic_sfcw_fc_offsets_changed (lsquic_sfcw_t *);
#define lsquic_sfcw_get_fc_recv_off(fc) ((fc)->sf_recv_off)
#define lsquic_sfcw_get_max_recv_off(fc) ((fc)->sf_max_recv_off)
/* Returns false if flow control violation is encountered */
int
lsquic_sfcw_set_max_recv_off (lsquic_sfcw_t *, uint64_t);
/* Void because we do not expect the caller to make a mistake.
*/
void
lsquic_sfcw_set_read_off (lsquic_sfcw_t *, uint64_t);
#define lsquic_sfcw_consume_rem(sfcw) do { \
lsquic_sfcw_set_read_off(sfcw, \
lsquic_sfcw_get_max_recv_off(sfcw)); \
} while (0)
#endif