ipc-client.c revision 83942ac160cdfb922c3a2f29ddfae2a13ebf8b5d
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen/* Copyright (c) 2011 Dovecot authors, see the included COPYING file */
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenstatic void ipc_client_disconnect(struct ipc_client *client);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenstatic void ipc_client_input_line(struct ipc_client *client, const char *line)
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen unsigned int count;
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen i_error("IPC proxy sent unexpected input: %s", line);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen switch (*line++) {
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen i_error("IPC proxy sent invalid input: %s", line);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen cmds[0].callback(state, line, cmds[0].context);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenstatic void ipc_client_input(struct ipc_client *client)
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen while ((line = i_stream_next_line(client->input)) != NULL)
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenstatic int ipc_client_connect(struct ipc_client *client)
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen i_error("connect(%s) failed: %m", client->path);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen client->io = io_add(client->fd, IO_READ, ipc_client_input, client);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen client->input = i_stream_create_fd(client->fd, (size_t)-1, FALSE);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen client->output = o_stream_create_fd(client->fd, (size_t)-1, FALSE);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenstatic void ipc_client_disconnect(struct ipc_client *client)
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen i_error("close(%s) failed: %m", client->path);
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenvoid ipc_client_deinit(struct ipc_client **_client)
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainenvoid ipc_client_cmd(struct ipc_client *client, const char *cmd,
83942ac160cdfb922c3a2f29ddfae2a13ebf8b5dTimo Sirainen ipc_client_callback_t *callback, void *context)