Low-overhead filter streams
[people/xl0/gpxe.git] / src / include / gpxe / filter.h
1 #ifndef _GPXE_FILTER_H
2 #define _GPXE_FILTER_H
3
4 /** @file
5  *
6  * Filter streams
7  */
8
9 #include <gpxe/stream.h>
10
11 /** A filter stream */
12 struct filter_stream {
13         /** Upstream
14          *
15          * This is the end pointing towards the top-level application
16          * (e.g. HTTP).
17          */
18         struct stream_connection upstream;
19         /** Downstream
20          *
21          * This is the end pointing towards the bottom-level
22          * connection (e.g. TCP).
23          */
24         struct stream_application downstream;
25 };
26
27 extern void filter_connected ( struct stream_application *app );
28 extern void filter_closed ( struct stream_application *app, int rc );
29 extern void filter_senddata ( struct stream_application *app,
30                               void *data, size_t len );
31 extern void filter_acked ( struct stream_application *app, size_t len );
32 extern void filter_newdata ( struct stream_application *app,
33                              void *data, size_t len );
34
35 extern int filter_bind ( struct stream_connection *conn,
36                          struct sockaddr *local );
37 extern int filter_connect ( struct stream_connection *conn,
38                             struct sockaddr *peer );
39 extern void filter_close ( struct stream_connection *conn );
40 extern int filter_send ( struct stream_connection *conn,
41                          void *data, size_t len );
42 extern int filter_kick ( struct stream_connection *conn );
43
44 #endif /* _GPXE_FILTER_H */