lsquic_frame_writer.h revision 50aadb33
150aadb33SDmitri Tikhonov/* Copyright (c) 2017 LiteSpeed Technologies Inc.  See LICENSE. */
250aadb33SDmitri Tikhonov/*
350aadb33SDmitri Tikhonov * lsquic_frame_writer.h -- write frames to HEADERS stream.
450aadb33SDmitri Tikhonov */
550aadb33SDmitri Tikhonov
650aadb33SDmitri Tikhonov#ifndef LSQUIC_FRAME_WRITER_H
750aadb33SDmitri Tikhonov#define LSQUIC_FRAME_WRITER_H 1
850aadb33SDmitri Tikhonov
950aadb33SDmitri Tikhonov#include <stddef.h>
1050aadb33SDmitri Tikhonov#include <stdint.h>
1150aadb33SDmitri Tikhonov
1250aadb33SDmitri Tikhonovstruct iovec;
1350aadb33SDmitri Tikhonovstruct lsquic_henc;
1450aadb33SDmitri Tikhonovstruct lsquic_mm;
1550aadb33SDmitri Tikhonovstruct lsquic_frame_writer;
1650aadb33SDmitri Tikhonovstruct lsquic_stream;
1750aadb33SDmitri Tikhonovstruct lsquic_http_headers;
1850aadb33SDmitri Tikhonovstruct lsquic_http2_setting;
1950aadb33SDmitri Tikhonov
2050aadb33SDmitri Tikhonovtypedef ssize_t (*fw_write_f)(struct lsquic_stream *, const void *, size_t);
2150aadb33SDmitri Tikhonovtypedef size_t  (*fw_wavail_f)(const struct lsquic_stream *stream);
2250aadb33SDmitri Tikhonovtypedef int     (*fw_flush_f)(struct lsquic_stream *);
2350aadb33SDmitri Tikhonov
2450aadb33SDmitri Tikhonovstruct lsquic_frame_writer *
2550aadb33SDmitri Tikhonovlsquic_frame_writer_new (struct lsquic_mm *, struct lsquic_stream *,
2650aadb33SDmitri Tikhonov                         unsigned max_frame_sz, struct lsquic_henc *,
2750aadb33SDmitri Tikhonov                         fw_write_f, fw_wavail_f, fw_flush_f, int is_server);
2850aadb33SDmitri Tikhonov
2950aadb33SDmitri Tikhonovvoid
3050aadb33SDmitri Tikhonovlsquic_frame_writer_destroy (struct lsquic_frame_writer *);
3150aadb33SDmitri Tikhonov
3250aadb33SDmitri Tikhonovint
3350aadb33SDmitri Tikhonovlsquic_frame_writer_have_leftovers (const struct lsquic_frame_writer *);
3450aadb33SDmitri Tikhonov
3550aadb33SDmitri Tikhonovint
3650aadb33SDmitri Tikhonovlsquic_frame_writer_flush (struct lsquic_frame_writer *);
3750aadb33SDmitri Tikhonov
3850aadb33SDmitri Tikhonovint
3950aadb33SDmitri Tikhonovlsquic_frame_writer_write_headers (struct lsquic_frame_writer *,
4050aadb33SDmitri Tikhonov                                   uint32_t stream_id,
4150aadb33SDmitri Tikhonov                                   const struct lsquic_http_headers *,
4250aadb33SDmitri Tikhonov                                   int eos, unsigned weight);
4350aadb33SDmitri Tikhonov
4450aadb33SDmitri Tikhonovint
4550aadb33SDmitri Tikhonovlsquic_frame_writer_write_settings (struct lsquic_frame_writer *,
4650aadb33SDmitri Tikhonov    const struct lsquic_http2_setting *, unsigned n_settings);
4750aadb33SDmitri Tikhonov
4850aadb33SDmitri Tikhonovint
4950aadb33SDmitri Tikhonovlsquic_frame_writer_write_priority (struct lsquic_frame_writer *,
5050aadb33SDmitri Tikhonov            uint32_t stream_id, int exclusive, uint32_t stream_dep_id,
5150aadb33SDmitri Tikhonov            unsigned priority);
5250aadb33SDmitri Tikhonov
5350aadb33SDmitri Tikhonovint
5450aadb33SDmitri Tikhonovlsquic_frame_writer_write_promise (struct lsquic_frame_writer *,
5550aadb33SDmitri Tikhonov                       uint32_t stream_id, uint32_t promised_stream_id,
5650aadb33SDmitri Tikhonov                       const struct iovec *path, const struct iovec *host,
5750aadb33SDmitri Tikhonov                       const struct lsquic_http_headers *headers);
5850aadb33SDmitri Tikhonov
5950aadb33SDmitri Tikhonovvoid
6050aadb33SDmitri Tikhonovlsquic_frame_writer_max_header_list_size (struct lsquic_frame_writer *,
6150aadb33SDmitri Tikhonov                                          uint32_t max_size);
6250aadb33SDmitri Tikhonov
6350aadb33SDmitri Tikhonov#endif
64