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