From 81447ed392e57f822e09cf648cb16732a3e3773f Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sat, 19 Jun 2004 19:27:47 +0000 Subject: cli protocol git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@28 fefdeb5f-60dc-0310-8127-8f9354f1896f --- src/protocol-cli.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/protocol-cli.c (limited to 'src/protocol-cli.c') diff --git a/src/protocol-cli.c b/src/protocol-cli.c new file mode 100644 index 00000000..c0c93d98 --- /dev/null +++ b/src/protocol-cli.c @@ -0,0 +1,59 @@ +#include +#include + +#include "protocol-cli.h" +#include "cli.h" + +struct protocol_cli { + struct core *core; + struct socket_server*server; + struct idxset *connections; +}; + +static void cli_eof_cb(struct cli*c, void*userdata) { + struct protocol_cli *p = userdata; + assert(c && p); + + idxset_remove_by_data(p->connections, c, NULL); + cli_free(c); +} + +static void on_connection(struct socket_server*s, struct iochannel *io, void *userdata) { + struct protocol_cli *p = userdata; + struct cli *c; + assert(s && io && p); + + c = cli_new(p->core, io); + assert(c); + cli_set_eof_callback(c, cli_eof_cb, p); + + idxset_put(p->connections, c, NULL); +} + +struct protocol_cli* protocol_cli_new(struct core *core, struct socket_server *server) { + struct protocol_cli* p; + assert(core && server); + + p = malloc(sizeof(struct protocol_cli)); + assert(p); + p->core = core; + p->server = server; + p->connections = idxset_new(NULL, NULL); + + socket_server_set_callback(p->server, on_connection, p); + + return p; +} + +static void free_connection(void *p, void *userdata) { + assert(p); + cli_free(p); +} + +void protocol_cli_free(struct protocol_cli *p) { + assert(p); + + idxset_free(p->connections, free_connection, NULL); + socket_server_free(p->server); + free(p); +} -- cgit