From e38e516463cf1e551cca6394bc5cb6cc90821105 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Wed, 31 Jan 2007 03:04:56 +0000 Subject: [PATCH] Add insert_filter() function --- src/include/gpxe/filter.h | 3 +++ src/net/filter.c | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/include/gpxe/filter.h b/src/include/gpxe/filter.h index 585bbe15..96c39e0d 100644 --- a/src/include/gpxe/filter.h +++ b/src/include/gpxe/filter.h @@ -41,4 +41,7 @@ extern int filter_send ( struct stream_connection *conn, void *data, size_t len ); extern int filter_kick ( struct stream_connection *conn ); +extern int insert_filter ( struct stream_application *app, + struct filter_stream *filter ); + #endif /* _GPXE_FILTER_H */ diff --git a/src/net/filter.c b/src/net/filter.c index 7d93c61c..c4542fcb 100644 --- a/src/net/filter.c +++ b/src/net/filter.c @@ -23,6 +23,7 @@ */ #include +#include #include #include @@ -161,3 +162,26 @@ int filter_kick ( struct stream_connection *conn ) { return stream_kick ( &filter->downstream ); } + +/** + * Insert filter into stream + * + * @v app Stream application + * @v filter Filter stream + * @ret rc Return status code + */ +int insert_filter ( struct stream_application *app, + struct filter_stream *filter ) { + struct stream_connection *conn = app->conn; + + if ( ! app->conn ) { + DBGC ( filter, "Filter %p cannot insert onto closed stream\n", + filter ); + return -ENOTCONN; + } + + app->conn = &filter->upstream; + conn->app = &filter->downstream; + + return 0; +}