connection.c revision cb3ab2fd5668700a89b274a43595cfbfa1616e4b
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi/* Copyright (c) 2013-2015 Dovecot authors, see the included COPYING file */
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomistatic void connection_idle_timeout(struct connection *conn)
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi conn->disconnect_reason = CONNECTION_DISCONNECT_IDLE_TIMEOUT;
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomistatic void connection_connect_timeout(struct connection *conn)
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi conn->disconnect_reason = CONNECTION_DISCONNECT_CONNECT_TIMEOUT;
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomivoid connection_input_default(struct connection *conn)
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi const char *line;
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi case 0: /* allow calling this function for buffered input */
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi while (!input->closed && (line = i_stream_next_line(input)) != NULL) {
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi conn->disconnect_reason = CONNECTION_DISCONNECT_DEINIT;
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomiint connection_verify_version(struct connection *conn,
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi const char *const *args)
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi /* VERSION <tab> service_name <tab> major version <tab> minor version */
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi i_error("%s didn't reply with a valid VERSION line",
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi if (strcmp(args[1], conn->list->set.service_name_in) != 0) {
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi if (recv_major_version != conn->list->set.major_version) {
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi "but we support only %u (mixed old and new binaries?)",
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomiint connection_input_line_default(struct connection *conn, const char *line)
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi const char *const *args;
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomistatic void connection_init_streams(struct connection *conn)
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi const struct connection_settings *set = &conn->list->set;
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi conn->io = io_add_istream(conn->input, *conn->list->v.input, conn);
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi conn->io = io_add(conn->fd_in, IO_READ, *conn->list->v.input, conn);
32c2612514a404ebc226f32bb88f28d76ceb1db1Aki Tuomi o_stream_set_no_error_handling(conn->output, TRUE);
if (success)
if (!success) {
int fd;
i_unreached();
errno = 0;
struct connection_list *
return list;