client.c revision 02c335c23bf5fa225a467c19f2c063fb0dc7b8c3
8c294c1cd4d721818a59684cf7f2b36123f79163Stephen Gallagher/* Copyright (c) 2011-2016 Dovecot authors, see the included COPYING file */
8b1f525acd20f36c836e827de3c251088961c5d9Stephen Gallagher#define CLIENT_MAX_SIMULTANEOUS_ITER_COUNT 1000
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher if (client->iter_count % CLIENT_MAX_SIMULTANEOUS_ITER_COUNT == 0)
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher if (o_stream_get_buffer_used_size(client->output) < OUTBUF_THROTTLE_SIZE)
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher return o_stream_get_buffer_used_size(client->output) >= OUTBUF_THROTTLE_SIZE;
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagherclient_handle_request(struct client *client, const char *const *args,
af4ffe1001adcc0a96897e426d26444f07af9aa1Benjamin Franzke return client_export(client, args, error_r);
2a552e43581c74f51205c7141ec9f6e9542509f8Stephen Gallagherstatic const char *const*
1a59af8245f183f22d87d067a90197d8e2ea958dJakub Hrozek const char *line;
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher unsigned int i;
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher args = p_strsplit(pool_datastack_create(), line, "\t");
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher return (void *)args;
59744cff6edb106ae799b2321cb8731edadf409aStephen Gallagher i_error("BUG: Stats client sent too much data");
bc13c352ba9c2877f1e9bc62e55ad60fc000a55dJakub Hrozek while ((args = client_read_next_line(client)) != NULL) {
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher ret = client_handle_request(client, args, &error);
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher i_error("Stats client input error: %s", error);
054b5d4bb98973698f74d66b14ccd14394b53f10Lukas Slebodnik o_stream_set_flush_pending(client->output, TRUE);
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagherstatic int client_output(struct client *client)
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallaghervoid client_enable_io(struct client *client)
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher client->io = io_add(client->fd, IO_READ, client_input, client);
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher client->to_pending = timeout_add(0, client_input, client);
9e80079370ff3b943832adc3c5ef430e64be0a0cJakub Hrozek client->io = io_add(fd, IO_READ, client_input, client);
e7311aec8d691e5427317442387af1bc8fff3742Jan Cholasta client->input = i_stream_create_fd(fd, MAX_INBUF_SIZE, FALSE);
e7311aec8d691e5427317442387af1bc8fff3742Jan Cholasta client->output = o_stream_create_fd(fd, (size_t)-1, FALSE);
e7311aec8d691e5427317442387af1bc8fff3742Jan Cholasta o_stream_set_no_error_handling(client->output, TRUE);
cb4d5b588e704114b7090678752d33512baa718eJakub Hrozek o_stream_set_flush_callback(client->output, client_output, client);
cb4d5b588e704114b7090678752d33512baa718eJakub Hrozek client->cmd_pool = pool_alloconly_create("cmd pool", 1024);
f3a25949de81f80c136bb073e4a8f504b080c20cJakub Hrozekstatic void client_unref_iters(struct client *client)
5484044ea7bb632b915f706685fce509f6eacc48Jakub Hrozek mail_session_unref(&client->mail_session_iter);