1/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */ 2/* 3 * lsquic_packet_resize.h -- functions to resize packets 4 */ 5 6#ifndef LSQUIC_PACKET_RESIZE_H 7#define LSQUIC_PACKET_RESIZE_H 1 8 9struct lsquic_packet_out; 10struct lsquic_conn; 11struct frame_rec; 12struct lsquic_engine_public; 13 14struct packet_resize_if 15{ 16 /* Get next packet to convert */ 17 struct lsquic_packet_out * 18 (*pri_next_packet)(void *ctx); 19 /* Discard packet after it was converted */ 20 void (*pri_discard_packet)(void *ctx, struct lsquic_packet_out *); 21 /* Get new packet to write frames to */ 22 struct lsquic_packet_out * 23 (*pri_new_packet)(void *ctx); 24}; 25 26struct packet_resize_ctx 27{ 28 const struct lsquic_conn *prc_conn; 29 void *prc_data; /* First arg to prc_pri */ 30 const struct packet_resize_if *prc_pri; 31 struct lsquic_engine_public *prc_enpub; 32 const struct frame_rec *prc_cur_frec; 33 struct lsquic_packet_out *prc_cur_packet; 34 struct data_frame prc_data_frame; 35 struct packet_out_frec_iter prc_pofi; 36 enum { 37 PRC_ERROR = 1 << 0, 38 PRC_NEW_FREC = 1 << 1, 39 } prc_flags; 40}; 41 42void 43lsquic_packet_resize_init (struct packet_resize_ctx *, 44 struct lsquic_engine_public *, struct lsquic_conn *, void *ctx, 45 const struct packet_resize_if *); 46 47struct lsquic_packet_out * 48lsquic_packet_resize_next (struct packet_resize_ctx *); 49 50#define lsquic_packet_resize_is_error(prctx_) \ 51 (!!((prctx_)->prc_flags & PRC_ERROR)) 52 53#endif 54