/* Copyright (c) 2017 - 2026 LiteSpeed Technologies Inc.  See LICENSE. */
/*
 * lsquic_hcso_writer.h
 */

#ifndef LSQUIC_HCSO_WRITER_H
#define LSQUIC_HCSO_WRITER_H 1

struct lsquic_ext_http_prio;
struct lsquic_stream;

struct hcso_writer
{
    struct lsquic_stream    *how_stream;
    struct frab_list         how_fral;
#ifndef NDEBUG
    enum {
        HOW_RAND_VARINT = 1 << 0,
        HOW_CHOP_STREAM = 1 << 1,
    }                        how_flags;
#endif
};

int
lsquic_hcso_write_settings (struct hcso_writer *,
                            unsigned, unsigned, unsigned, int
#if LSQUIC_WEBTRANSPORT_SERVER_SUPPORT
                            ,int, unsigned
#endif
                            );

int
lsquic_hcso_write_goaway (struct hcso_writer *, lsquic_stream_id_t);

int
lsquic_hcso_write_max_push_id (struct hcso_writer *, uint64_t max_push_id);

int
lsquic_hcso_write_cancel_push (struct hcso_writer *, uint64_t push_id);

int
lsquic_hcso_write_priority_update (struct hcso_writer *,
                enum hq_frame_type, uint64_t stream_or_push_id,
                const struct lsquic_ext_http_prio *);

extern const struct lsquic_stream_if *const lsquic_hcso_writer_if;

#endif
