1a74702c6SGeorge Wang/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */ 250aadb33SDmitri Tikhonov/* 350aadb33SDmitri Tikhonov * lsquic_di_error.c -- A placeholder when things go wrong 450aadb33SDmitri Tikhonov * 550aadb33SDmitri Tikhonov * This object is used in order to avoid dereferencing NULLs in stream.c 650aadb33SDmitri Tikhonov */ 750aadb33SDmitri Tikhonov 850aadb33SDmitri Tikhonov 950aadb33SDmitri Tikhonov#include <assert.h> 1050aadb33SDmitri Tikhonov#include <stddef.h> 1150aadb33SDmitri Tikhonov#include <stdint.h> 12461e84d8SAmol Deshpande#ifdef WIN32 13461e84d8SAmol Deshpande#include <vc_compat.h> 14461e84d8SAmol Deshpande#endif 1550aadb33SDmitri Tikhonov 165392f7a3SLiteSpeed Tech#include "lsquic_types.h" 1750aadb33SDmitri Tikhonov#include "lsquic_data_in_if.h" 1850aadb33SDmitri Tikhonov 1950aadb33SDmitri Tikhonov 20b93f59beSBob Perperstatic const struct data_in *error_data_in_ptr; 2150aadb33SDmitri Tikhonov 2250aadb33SDmitri Tikhonov 23b93f59beSBob Perperstruct data_in * 24a5fa05f9SDmitri Tikhonovlsquic_data_in_error_new (struct lsquic_conn_public *conn_pub) 25b93f59beSBob Perper{ 26b93f59beSBob Perper return (struct data_in *) error_data_in_ptr; 27b93f59beSBob Perper} 2850aadb33SDmitri Tikhonov 2950aadb33SDmitri Tikhonov 3050aadb33SDmitri Tikhonovstatic void 3150aadb33SDmitri Tikhonoverror_di_destroy (struct data_in *data_in) 3250aadb33SDmitri Tikhonov{ 3350aadb33SDmitri Tikhonov} 3450aadb33SDmitri Tikhonov 3550aadb33SDmitri Tikhonov 3650aadb33SDmitri Tikhonovstatic enum ins_frame 3750aadb33SDmitri Tikhonoverror_di_insert_frame (struct data_in *data_in, 3850aadb33SDmitri Tikhonov struct stream_frame *new_frame, uint64_t read_offset) 3950aadb33SDmitri Tikhonov{ 4050aadb33SDmitri Tikhonov return INS_FRAME_ERR; 4150aadb33SDmitri Tikhonov} 4250aadb33SDmitri Tikhonov 4350aadb33SDmitri Tikhonov 4450aadb33SDmitri Tikhonovstatic struct data_frame * 4550aadb33SDmitri Tikhonoverror_di_get_frame (struct data_in *data_in, uint64_t read_offset) 4650aadb33SDmitri Tikhonov{ 4750aadb33SDmitri Tikhonov return NULL; 4850aadb33SDmitri Tikhonov} 4950aadb33SDmitri Tikhonov 5050aadb33SDmitri Tikhonov 5150aadb33SDmitri Tikhonovstatic void 5250aadb33SDmitri Tikhonoverror_di_frame_done (struct data_in *data_in, struct data_frame *data_frame) 5350aadb33SDmitri Tikhonov{ 5450aadb33SDmitri Tikhonov} 5550aadb33SDmitri Tikhonov 5650aadb33SDmitri Tikhonov 5750aadb33SDmitri Tikhonovstatic int 5850aadb33SDmitri Tikhonoverror_di_empty (struct data_in *data_in) 5950aadb33SDmitri Tikhonov{ 6050aadb33SDmitri Tikhonov return 1; 6150aadb33SDmitri Tikhonov} 6250aadb33SDmitri Tikhonov 6350aadb33SDmitri Tikhonov 64a5fa05f9SDmitri Tikhonovstatic struct data_in * 6550aadb33SDmitri Tikhonoverror_di_switch_impl (struct data_in *data_in, uint64_t read_offset) 6650aadb33SDmitri Tikhonov{ 6750aadb33SDmitri Tikhonov assert(0); 6850aadb33SDmitri Tikhonov return data_in; 6950aadb33SDmitri Tikhonov} 7050aadb33SDmitri Tikhonov 7150aadb33SDmitri Tikhonov 72c51ce338SDmitri Tikhonovstatic size_t 73c51ce338SDmitri Tikhonoverror_di_mem_used (struct data_in *data_in) 74c51ce338SDmitri Tikhonov{ 75c51ce338SDmitri Tikhonov return 0; 76c51ce338SDmitri Tikhonov} 77c51ce338SDmitri Tikhonov 78c51ce338SDmitri Tikhonov 795392f7a3SLiteSpeed Techstatic void 805392f7a3SLiteSpeed Techerror_di_dump_state (struct data_in *data_in) 815392f7a3SLiteSpeed Tech{ 825392f7a3SLiteSpeed Tech} 835392f7a3SLiteSpeed Tech 845392f7a3SLiteSpeed Techstatic uint64_t 855392f7a3SLiteSpeed Techerror_di_readable_bytes (struct data_in *data_in, uint64_t read_offset) 865392f7a3SLiteSpeed Tech{ 875392f7a3SLiteSpeed Tech return 0; 885392f7a3SLiteSpeed Tech} 895392f7a3SLiteSpeed Tech 905392f7a3SLiteSpeed Tech 9150aadb33SDmitri Tikhonovstatic const struct data_in_iface di_if_error = { 9250aadb33SDmitri Tikhonov .di_destroy = error_di_destroy, 935392f7a3SLiteSpeed Tech .di_dump_state = error_di_dump_state, 9450aadb33SDmitri Tikhonov .di_empty = error_di_empty, 9550aadb33SDmitri Tikhonov .di_frame_done = error_di_frame_done, 9650aadb33SDmitri Tikhonov .di_get_frame = error_di_get_frame, 9750aadb33SDmitri Tikhonov .di_insert_frame = error_di_insert_frame, 98c51ce338SDmitri Tikhonov .di_mem_used = error_di_mem_used, 99cca25415SDmitri Tikhonov .di_own_on_ok = 0, /* Never returns INS_FRAME_OK, but anyway */ 1005392f7a3SLiteSpeed Tech .di_readable_bytes 1015392f7a3SLiteSpeed Tech = error_di_readable_bytes, 10250aadb33SDmitri Tikhonov .di_switch_impl = error_di_switch_impl, 10350aadb33SDmitri Tikhonov}; 104b93f59beSBob Perper 105b93f59beSBob Perper 106461e84d8SAmol Deshpandestatic const struct data_in error_data_in = { 107461e84d8SAmol Deshpande .di_if = &di_if_error, 108461e84d8SAmol Deshpande .di_flags = 0, 109461e84d8SAmol Deshpande}; 110b93f59beSBob Perper 111b93f59beSBob Perper 112b93f59beSBob Perperstatic const struct data_in *error_data_in_ptr = &error_data_in; 113