lsquic_di_error.c revision c51ce338
1/* Copyright (c) 2017 LiteSpeed Technologies Inc.  See LICENSE. */
2/*
3 * lsquic_di_error.c -- A placeholder when things go wrong
4 *
5 * This object is used in order to avoid dereferencing NULLs in stream.c
6 */
7
8
9#include <assert.h>
10#include <stddef.h>
11#include <stdint.h>
12
13#include "lsquic_data_in_if.h"
14
15
16static const struct data_in_iface di_if_error;
17
18
19static const struct data_in error_data_in = {
20    .di_if    = &di_if_error,
21    .di_flags = 0,
22};
23
24
25struct data_in *
26data_in_error_new (struct lsquic_conn_public *conn_pub)
27{
28    return (struct data_in *) &error_data_in;
29}
30
31
32static void
33error_di_destroy (struct data_in *data_in)
34{
35}
36
37
38static enum ins_frame
39error_di_insert_frame (struct data_in *data_in,
40                        struct stream_frame *new_frame, uint64_t read_offset)
41{
42    return INS_FRAME_ERR;
43}
44
45
46static struct data_frame *
47error_di_get_frame (struct data_in *data_in, uint64_t read_offset)
48{
49    return NULL;
50}
51
52
53static void
54error_di_frame_done (struct data_in *data_in, struct data_frame *data_frame)
55{
56}
57
58
59static int
60error_di_empty (struct data_in *data_in)
61{
62    return 1;
63}
64
65
66struct data_in *
67error_di_switch_impl (struct data_in *data_in, uint64_t read_offset)
68{
69    assert(0);
70    return data_in;
71}
72
73
74static size_t
75error_di_mem_used (struct data_in *data_in)
76{
77    return 0;
78}
79
80
81static const struct data_in_iface di_if_error = {
82    .di_destroy      = error_di_destroy,
83    .di_empty        = error_di_empty,
84    .di_frame_done   = error_di_frame_done,
85    .di_get_frame    = error_di_get_frame,
86    .di_insert_frame = error_di_insert_frame,
87    .di_mem_used     = error_di_mem_used,
88    .di_switch_impl  = error_di_switch_impl,
89};
90