Packages
hackney
3.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_data_in_if.h
/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */
/*
* lsquic_data_in_if.h -- DATA in interface
*/
#ifndef LSQUIC_DATA_IN_IF_H
#define LSQUIC_DATA_IN_IF_H 1
struct data_frame;
struct data_in;
struct lsquic_conn_public;
struct stream_frame;
enum ins_frame
{
INS_FRAME_OK,
INS_FRAME_ERR,
INS_FRAME_DUP,
INS_FRAME_OVERLAP,
};
struct data_in_iface
{
void
(*di_destroy) (struct data_in *);
int
(*di_empty) (struct data_in *);
/* When INS_FRAME_OK, INS_FRAME_ERR, or INS_FRAME_DUP is returned, the
* caller releases control of stream frame. Do not reference it after
* the call.
*
* When INS_FRAME_OVERLAP is returned the caller has a choice to switch
* to implementation that supports overlaps and try to insert the frame
* again or to treat this as an error. Either way, the caller retains
* control of the frame.
*/
enum ins_frame
(*di_insert_frame) (struct data_in *, struct stream_frame *,
uint64_t read_offset);
struct data_frame *
(*di_get_frame) (struct data_in *, uint64_t read_offset);
void
(*di_frame_done) (struct data_in *, struct data_frame *);
/* Creates a new data_in object, feeds its stream frames to it, deletes
* itself and returns the new object.
*/
struct data_in *
(*di_switch_impl) (struct data_in *, uint64_t read_offset);
size_t
(*di_mem_used) (struct data_in *);
void
(*di_dump_state) (struct data_in *);
/* Return number of bytes readable starting at offset `read_offset' */
uint64_t
(*di_readable_bytes) (struct data_in *, uint64_t read_offset);
/* If set, this means that when di_insert_frame() returns INS_FRAME_OK,
* the data_in handler has taken ownership of the frame. Otherwise, it
* is up to the caller to free it.
*/
const int
di_own_on_ok;
};
struct data_in
{
const struct data_in_iface *di_if;
enum {
/* If DI_SWITCH_IMPL is set, switching data_in implementation is
* recommended in order to get better performance for current
* incoming stream frame scenario. Check the value of this flag
* after calls to di_insert_frame() and di_frame_done().
*/
DI_SWITCH_IMPL = (1 << 0),
} di_flags;
};
/* This implementation does not support overlapping frame and may return
* INS_FRAME_OVERLAP.
*/
struct data_in *
lsquic_data_in_nocopy_new (struct lsquic_conn_public *, lsquic_stream_id_t);
/* This implementation supports overlapping frames and will never return
* INS_FRAME_OVERLAP.
*/
struct data_in *
lsquic_data_in_hash_new (struct lsquic_conn_public *, lsquic_stream_id_t,
uint64_t byteage);
enum ins_frame
lsquic_data_in_hash_insert_data_frame (struct data_in *data_in,
const struct data_frame *data_frame, uint64_t read_offset);
struct data_in *
lsquic_data_in_error_new ();
#endif