iostream-pump.h revision 08c0bffa1c9ccb1ac67689093f3c99cd38cfd3a4
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen/* Copyright (c) 2002-2016 Dovecot authors, see the included COPYING file
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen */
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen#ifndef IOSTREAM_PUMP_H
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen#define IOSTREAM_PUMP_H 1
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen/**
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Siraineniostream-pump
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen=============
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo SirainenThis construct pumps data from istream to ostream asynchronously.
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen
04c3ac276103b56185119bcff9a66de7a8bb0e68Timo SirainenThe pump requires you to provide completion callback. The
04c3ac276103b56185119bcff9a66de7a8bb0e68Timo Sirainencompletion callback is called with success parameter to
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainenindicate whether it ended with error.
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo SirainenThe istream and ostream are reffed on creation and unreffed
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainenon unref.
de62ce819d59a529530da4b57be1b8d6dad13d6bTimo Sirainen
9865d9e7c5713e41db939222ed9c0225a11fb99eTimo Sirainen**/
9865d9e7c5713e41db939222ed9c0225a11fb99eTimo Sirainen
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainenstruct istream;
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainenstruct ostream;
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainenstruct iostream_pump;
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainentypedef void iostream_pump_callback_t(bool success, void *context);
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainenstruct iostream_pump *
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Siraineniostream_pump_create(struct istream *input, struct ostream *output);
c18ff860dc22960fd37c272d929f889c7939a2c8Timo Sirainen
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainenstruct istream *iostream_pump_get_input(struct iostream_pump *pump);
4ee00532a265bdfb38539d811fcd12d51210ac35Timo Sirainenstruct ostream *iostream_pump_get_output(struct iostream_pump *pump);
04c3ac276103b56185119bcff9a66de7a8bb0e68Timo Sirainen
1dd054126238349e1a7d3d1ffe7f8bc5fdbacb7aTimo Sirainenvoid iostream_pump_start(struct iostream_pump *pump);
5fb3f13537dffd15a31e997da133a721c0728af8Timo Sirainenvoid iostream_pump_stop(struct iostream_pump *pump);
5fb3f13537dffd15a31e997da133a721c0728af8Timo Sirainen
5fb3f13537dffd15a31e997da133a721c0728af8Timo Sirainenvoid iostream_pump_ref(struct iostream_pump *pump);
5b62dea2f88165f3f4d87bba9011343f3ff415ffTimo Sirainenvoid iostream_pump_unref(struct iostream_pump **pump_r);
5b62dea2f88165f3f4d87bba9011343f3ff415ffTimo Sirainen
5b62dea2f88165f3f4d87bba9011343f3ff415ffTimo Sirainenvoid iostream_pump_set_completion_callback(struct iostream_pump *pump,
5b62dea2f88165f3f4d87bba9011343f3ff415ffTimo Sirainen iostream_pump_callback_t *callback, void *context);
5b62dea2f88165f3f4d87bba9011343f3ff415ffTimo Sirainen#define iostream_pump_set_completion_callback(pump, callback, context) \
1dd054126238349e1a7d3d1ffe7f8bc5fdbacb7aTimo Sirainen iostream_pump_set_completion_callback(pump, (iostream_pump_callback_t *)callback, context + \
f6aaada6101dd43cd80fe965ff1ab9bfaf776252Timo Sirainen CALLBACK_TYPECHECK(callback, void (*)(bool, typeof(context))))
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainenvoid iostream_pump_switch_ioloop(struct iostream_pump *pump);
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen#endif
1ac7c8e9040e0d0b7e9f849e45b94bfe919595a9Timo Sirainen