request->verify_callback = callback;
auth_request_ref(auth_request);
- imapc_client_login(request->client, passdb_imap_login_callback,
- request);
+ imapc_client_set_login_callback(request->client, passdb_imap_login_callback, request);
+ imapc_client_login(request->client);
}
static struct passdb_module *
array_foreach(&client->conns, connp) {
imapc_connection_ioloop_changed((*connp)->conn);
- imapc_connection_connect((*connp)->conn, NULL, NULL);
+ if (imapc_connection_get_state((*connp)->conn) == IMAPC_CONNECTION_STATE_DISCONNECTED)
+ imapc_connection_connect((*connp)->conn, client->login_callback,
+ client->login_context);
}
if (io_loop_is_running(client->ioloop))
void imapc_client_run(struct imapc_client *client)
{
+ i_assert(client->login_callback != NULL);
imapc_client_run_pre(client);
imapc_client_run_post(client);
}
}
-void imapc_client_login(struct imapc_client *client,
- imapc_command_callback_t *callback, void *context)
+void imapc_client_login(struct imapc_client *client)
{
struct imapc_client_connection *conn;
+ i_assert(client->login_callback);
i_assert(array_count(&client->conns) == 0);
conn = imapc_client_add_connection(client);
- imapc_connection_connect(conn->conn, callback, context);
+ imapc_connection_connect(conn->conn,
+ client->login_callback, client->login_context);
}
struct imapc_logout_ctx {
imapc_client_set_login_callback(struct imapc_client *client,
imapc_command_callback_t *callback, void *context);
/* Explicitly login to server (also done automatically). */
-void imapc_client_login(struct imapc_client *client,
- imapc_command_callback_t *callback, void *context);
+void imapc_client_login(struct imapc_client *client);
/* Send a LOGOUT and wait for disconnection. */
void imapc_client_logout(struct imapc_client *client);
static void imapc_storage_client_login(struct imapc_storage_client *client,
struct mail_user *user, const char *host)
{
- imapc_client_login(client->client, imapc_storage_client_login_callback, client);
+ imapc_client_login(client->client);
if (!user->namespaces_created) {
/* we're still initializing the user. wait for the
login to finish, so we can fail the user creation
client->client = imapc_client_init(&set);
imapc_client_register_untagged(client->client,
imapc_storage_client_untagged_cb, client);
+
+ imapc_client_set_login_callback(client->client, imapc_storage_client_login_callback, client);
+
if ((ns->flags & NAMESPACE_FLAG_LIST_PREFIX) != 0 &&
(imapc_set->parsed_features & IMAPC_FEATURE_DELAY_LOGIN) == 0) {
/* start logging in immediately */