lsquic_headers_stream.h revision 3b55e6ae
1/* Copyright (c) 2017 - 2018 LiteSpeed Technologies Inc.  See LICENSE. */
2/*
3 * lsquic_headers_stream.h -- HEADERS stream interface
4 */
5
6#ifndef LSQUIC_HEADERS_STREAM_H
7#define LSQUIC_HEADERS_STREAM_H 1
8
9#include <stdint.h>
10
11struct iovec;
12struct lsquic_stream_if;
13struct lsquic_stream;
14struct lsquic_mm;
15struct lsquic_http_headers;
16struct lsquic_frame_reader;
17struct lsquic_frame_writer;
18struct uncompressed_headers;
19struct lsquic_engine_public;
20struct lsquic_http2_setting;
21
22
23/* Incoming frames result in new objects or events.  Callbacks in this
24 * struct are used to dispatch them.
25 */
26struct headers_stream_callbacks
27{
28    void (*hsc_on_headers)
29                    (void *frame_cb_ctx, struct uncompressed_headers *);
30    void (*hsc_on_enable_push)  (void *hs_cb_ctx, int enable_push);
31    void (*hsc_on_push_promise)
32                    (void *frame_cb_ctx, struct uncompressed_headers *);
33    void (*hsc_on_priority)     (void *hs_cb_ctx, uint32_t stream_id,
34                    int exclusive, uint32_t dep_stream_id, unsigned weight);
35    void (*hsc_on_stream_error) (void *hs_cb_ctx, uint32_t stream_id);
36    void (*hsc_on_conn_error)   (void *hs_cb_ctx);
37};
38
39
40struct headers_stream *
41lsquic_headers_stream_new (int is_server, struct lsquic_engine_public *,
42                           const struct headers_stream_callbacks *,
43                           void *hs_cb_ctx);
44
45void
46lsquic_headers_stream_destroy (struct headers_stream *);
47
48int
49lsquic_headers_stream_send_headers (struct headers_stream *hs,
50                                uint32_t stream_id,
51                                const struct lsquic_http_headers *, int eos,
52                                unsigned weight);
53
54int
55lsquic_headers_stream_push_promise (struct headers_stream *hs,
56                        uint32_t stream_id, uint32_t promised_stream_id,
57                        const struct iovec *path, const struct iovec *host,
58                        const struct lsquic_http_headers *);
59
60int
61lsquic_headers_stream_send_priority (struct headers_stream *hs,
62    uint32_t stream_id, int exclusive, uint32_t dep_stream_id, unsigned weight);
63
64int
65lsquic_headers_stream_send_settings (struct headers_stream *hs,
66                        const struct lsquic_http2_setting *, unsigned count);
67
68struct lsquic_stream *
69lsquic_headers_stream_get_stream (const struct headers_stream *);
70
71size_t
72lsquic_headers_stream_mem_used (const struct headers_stream *);
73
74extern const struct lsquic_stream_if *const lsquic_headers_stream_if;
75
76#endif
77