litespeed-quic/src/liblsquic/lsquic_attq.h

60 lines
1.3 KiB
C

/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */
/*
* lsquic_attq.h -- Advisory Tick Time Queue
*/
#ifndef LSQUIC_ATTQ_H
#define LSQUIC_ATTQ_H
struct attq;
struct lsquic_conn;
/* The extra level of indirection is done for speed: swapping heap elements
* does not need memory associated with lsquic_conn.
*/
struct attq_elem
{
struct lsquic_conn *ae_conn;
lsquic_time_t ae_adv_time;
unsigned ae_heap_idx;
/* The "why" describes why the connection is in the Advisory Tick Time
* Queue. Values past the range describe different alarm types (see
* enum alarm_id).
*/
enum ae_why {
AEW_PACER,
AEW_MINI_EXPIRE,
N_AEWS
} ae_why;
};
struct attq *
lsquic_attq_create (void);
void
lsquic_attq_destroy (struct attq *);
/* Return 0 on success, -1 on failure (malloc) */
int
lsquic_attq_add (struct attq *, struct lsquic_conn *, lsquic_time_t advisory_time,
enum ae_why);
void
lsquic_attq_remove (struct attq *, struct lsquic_conn *);
struct lsquic_conn *
lsquic_attq_pop (struct attq *, lsquic_time_t cutoff);
unsigned
lsquic_attq_count_before (struct attq *, lsquic_time_t cutoff);
const struct attq_elem *
lsquic_attq_next (struct attq *);
const char *
lsquic_attq_why2str (enum ae_why);
#endif