This frees smtp_server_connection_start() for general use.
smtp_server_connection_create(struct smtp_server *server,
int fd_in, int fd_out,
const struct ip_addr *remote_ip, in_port_t remote_port,
- const struct smtp_server_settings *set,
+ bool ssl_start, const struct smtp_server_settings *set,
const struct smtp_server_callbacks *callbacks, void *context)
{
struct smtp_server_connection *conn;
connection_init_server(server->conn_list,
&conn->conn, name, fd_in, fd_out);
+ conn->ssl_start = ssl_start;
+ if (ssl_start)
+ conn->set.capabilities &= ~SMTP_CAPABILITY_STARTTLS;
+
/* halt input until started */
smtp_server_connection_input_halt(conn);
}
}
-void smtp_server_connection_start(struct smtp_server_connection *conn,
- bool ssl_start)
+void smtp_server_connection_start(struct smtp_server_connection *conn)
{
conn->raw_input = conn->conn.input;
conn->raw_output = conn->conn.output;
smtp_server_connection_timeout_start(conn);
smtp_server_connection_input_resume(conn);
- conn->ssl_start = ssl_start;
- if (ssl_start)
- conn->set.capabilities &= ~SMTP_CAPABILITY_STARTTLS;
- else
+ if (!conn->ssl_start)
smtp_server_connection_ready(conn);
}
smtp_server_connection_create(struct smtp_server *server,
int fd_in, int fd_out,
const struct ip_addr *remote_ip, in_port_t remote_port,
- const struct smtp_server_settings *set,
+ bool ssl_start, const struct smtp_server_settings *set,
const struct smtp_server_callbacks *callbacks, void *context)
ATTR_NULL(4, 6, 8);
struct smtp_server_connection *
/* Start the connection. Establishes SSL layer immediately if instructed,
and sends the greeting once the connection is ready for commands. */
-void smtp_server_connection_start(struct smtp_server_connection *conn,
- bool ssl_start);
+void smtp_server_connection_start(struct smtp_server_connection *conn);
/* Start the connection with state and data from login service */
void smtp_server_connection_login(struct smtp_server_connection *conn,
const char *username, const char *helo,
client->pool = pool;
client->smtp_conn = smtp_server_connection_create(smtp_server,
- fd, fd, NULL, 0, NULL, &server_callbacks, client);
- smtp_server_connection_start(client->smtp_conn, FALSE);
+ fd, fd, NULL, 0, FALSE, NULL, &server_callbacks, client);
+ smtp_server_connection_start(client->smtp_conn);
DLLIST_PREPEND(&clients, client);
}
server_callbacks.conn_destroy = server_connection_destroy;
conn = smtp_server_connection_create(smtp_server, fd, fd,
- NULL, 0, NULL, &server_callbacks, sconn);
- smtp_server_connection_start(conn, FALSE);
+ NULL, 0, FALSE, NULL, &server_callbacks, sconn);
+ smtp_server_connection_start(conn);
}
/* */
client->conn = smtp_server_connection_create
(lmtp_server, fd_in, fd_out,
&conn->remote_ip, conn->remote_port,
- &lmtp_set, &lmtp_callbacks, client);
+ conn->ssl, &lmtp_set, &lmtp_callbacks, client);
DLLIST_PREPEND(&clients, client);
clients_count++;
- smtp_server_connection_start(client->conn, conn->ssl);
+ smtp_server_connection_start(client->conn);
i_info("Connect from %s", client_remote_id(client));
refresh_proctitle();
return client;
struct submission_client *subm_client =
container_of(client, struct submission_client, common);
- smtp_server_connection_start(subm_client->conn, FALSE);
+ smtp_server_connection_start(subm_client->conn);
}
static void
client->conn = smtp_server_connection_create(smtp_server,
fd_in, fd_out, user->conn.remote_ip, user->conn.remote_port,
- &smtp_set, &smtp_callbacks, client);
+ FALSE, &smtp_set, &smtp_callbacks, client);
client_proxy_create(client, set);