1#ifndef fooiolinehfoo
2#define fooiolinehfoo
3
4/***
5  This file is part of PulseAudio.
6
7  Copyright 2004-2006 Lennart Poettering
8
9  PulseAudio is free software; you can redistribute it and/or modify
10  it under the terms of the GNU Lesser General Public License as published
11  by the Free Software Foundation; either version 2.1 of the License,
12  or (at your option) any later version.
13
14  PulseAudio is distributed in the hope that it will be useful, but
15  WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  General Public License for more details.
18
19  You should have received a copy of the GNU Lesser General Public License
20  along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
21***/
22
23#include <pulse/gccmacro.h>
24
25#include <pulsecore/iochannel.h>
26
27/* An ioline wraps an iochannel for line based communication. A
28 * callback function is called whenever a new line has been received
29 * from the client */
30
31typedef struct pa_ioline pa_ioline;
32
33typedef void (*pa_ioline_cb_t)(pa_ioline*io, const char *s, void *userdata);
34typedef void (*pa_ioline_drain_cb_t)(pa_ioline *io, void *userdata);
35
36pa_ioline* pa_ioline_new(pa_iochannel *io);
37void pa_ioline_unref(pa_ioline *l);
38pa_ioline* pa_ioline_ref(pa_ioline *l);
39void pa_ioline_close(pa_ioline *l);
40
41/* Write a string to the channel */
42void pa_ioline_puts(pa_ioline *s, const char *c);
43
44/* Write a string to the channel */
45void pa_ioline_printf(pa_ioline *s, const char *format, ...) PA_GCC_PRINTF_ATTR(2,3);
46
47/* Set the callback function that is called for every received line */
48void pa_ioline_set_callback(pa_ioline*io, pa_ioline_cb_t callback, void *userdata);
49
50/* Set the callback function that is called when everything has been written */
51void pa_ioline_set_drain_callback(pa_ioline*io, pa_ioline_drain_cb_t callback, void *userdata);
52
53/* Make sure to close the ioline object as soon as the send buffer is emptied */
54void pa_ioline_defer_close(pa_ioline *io);
55
56/* Returns true when everything was written */
57bool pa_ioline_is_drained(pa_ioline *io);
58
59/* Detaches from the iochannel and returns it. Data that has already
60 * been read will not be available in the detached iochannel */
61pa_iochannel* pa_ioline_detach_iochannel(pa_ioline *l);
62
63#endif
64