/* Signal to close connection */
if (!conn->internal->disconnected) {
conn->internal->disconnected = TRUE;
- SILC_FSM_SEMA_POST(&conn->internal->wait_event);
+ SILC_FSM_EVENT_SIGNAL(&conn->internal->wait_event);
}
/* Call connect callback */
return SILC_FSM_CONTINUE;
}
+ /** Wait for channels */
+ silc_fsm_next(fsm, silc_client_st_resume_resolve_cmodes);
+
/* Change our nickname */
silc_client_change_nickname(client, conn, conn->local_entry,
resume->nickname, NULL, NULL, 0);
1, 1, silc_buffer_data(conn->internal->local_idp),
silc_buffer_len(conn->internal->local_idp));
+ if (!resume->channel_count)
+ return SILC_FSM_YIELD;
+
/* Send IDENTIFY command for all channels we know about. These are the
channels we've joined to according our detachment data. */
for (i = 0; i < resume->channel_count; i++) {
silc_free(res_argv_lens);
silc_free(res_argv_types);
- /** Wait for channels */
- silc_fsm_next(fsm, silc_client_st_resume_resolve_cmodes);
return SILC_FSM_WAIT;
}
silc_fsm_next(fsm, silc_client_st_resume_completed);
if (!silc_idcache_get_all(conn->internal->channel_cache, &channels))
- return SILC_FSM_CONTINUE;
+ return SILC_FSM_YIELD;
/* Resolve channels' mode, users and topic */
resume->channel_count = silc_list_count(channels) * 3;
conn->callback(client, conn, SILC_CLIENT_CONN_SUCCESS_RESUME, 0, NULL,
conn->callback_context);
+ /* Call UMODE command reply. */
+ if (conn->local_entry->mode)
+ silc_client_resume_command_callback(client, conn, SILC_COMMAND_UMODE,
+ conn->local_entry->mode);
+
/* Call NICK command reply. */
silc_client_resume_command_callback(client, conn, SILC_COMMAND_NICK,
conn->local_entry,
const char *cipher, *hmac;
channel = entry->context;
- cipher = (channel->internal.channel_key ?
- silc_cipher_get_name(channel->internal.channel_key) : NULL);
+ cipher = (channel->internal.send_key ?
+ silc_cipher_get_name(channel->internal.send_key) : NULL);
hmac = (channel->internal.hmac ?
silc_hmac_get_name(channel->internal.hmac) : NULL);
silc_hash_table_list(channel->user_list, &htl);
/* Signal to close connection */
if (!conn->internal->disconnected) {
conn->internal->disconnected = TRUE;
- SILC_FSM_SEMA_POST(&conn->internal->wait_event);
+ SILC_FSM_EVENT_SIGNAL(&conn->internal->wait_event);
}
/* Call connect callback */