smtp_client_command_callback_t *callback = conn->login_callback;
void *context = conn->login_context;
+ if (conn->state_data.login_reply == NULL) {
+ conn->state_data.login_reply =
+ smtp_reply_clone(conn->state_pool, reply);
+ }
+
conn->login_callback = NULL;
conn->login_context = NULL;
if (conn->closed || conn->failing)
return;
+ /* Clear state data */
+ i_zero(&conn->state_data);
+ p_clear(conn->state_pool);
+
if (connection_client_connect(&conn->conn) < 0) {
smtp_client_connection_connected(&conn->conn, FALSE);
return;
conn->caps.standard = conn->set.forced_capabilities;
conn->cap_pool = pool_alloconly_create(
"smtp client connection capabilities", 128);
+ conn->state_pool = pool_alloconly_create(
+ "smtp client connection state", 256);
if (set != NULL && set->event_parent != NULL)
conn_event = event_create(set->event_parent);
i_free(conn->ips);
pool_unref(&conn->cap_pool);
+ pool_unref(&conn->state_pool);
pool_unref(&conn->pool);
}
struct ssl_iostream *ssl_iostream;
enum smtp_client_connection_state state;
+ pool_t state_pool;
+ struct {
+ struct smtp_reply *login_reply;
+ } state_data;
smtp_client_command_callback_t *login_callback;
void *login_context;