
Hi, --- stas garifulin <s.garifulin@drweb.com> wrote: <snip>
In other words i'm talking about some infrastructure like boost::iostreams but built on top of asio dispatcher. Async analogue of boost::iostreams which allows me to create async chains of filters in run-time. For example, it can be done with non-templated versions of functions async_read, async_write, handler parameter of this functions will have type like boost::function<void (asio::error, size_T)>. SSL class could be implemented as such async filter and would allow attaching at run-time.
Dynamic chaining of filters is something I consider beyond the scope of asio. Of course, it could be implemented as a library on top of asio. However, I am planning to add virtual wrapper stream templates that could be used to allow runtime polymorphism with streams. It might look something like: template < typename Const_Buffers, typename Mutable_Buffers, typename Handler> class polymorphic_stream_base { public: virtual size_t read_some(const Mutable_Buffers& bufs) = 0; virtual void async_read_some(const Mutable_Buffers& bufs, Handler handler) = 0; virtual size_t write_some(const Const_Buffers& bufs) = 0; virtual void async_write_some(const Const_Buffers& bufs, Handler handler) = 0; }; template < typename Stream, typename Const_Buffers, typename Mutable_Buffers, typename Handler> class polymorphic_stream : public polymorphic_stream_base<...> { ... }; This might be used to accomplish the same sort of thing as you describe. Cheers, Chris