projects
/
silc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Nickname formatting/parsing rewrite.
[silc.git]
/
lib
/
silcclient
/
client_register.c
diff --git
a/lib/silcclient/client_register.c
b/lib/silcclient/client_register.c
index c5f4cfc95dbe5a61ce4912ab631beb7e53d0c4e5..f029c480079c3fcabb022d257229329e7fc90bce 100644
(file)
--- a/
lib/silcclient/client_register.c
+++ b/
lib/silcclient/client_register.c
@@
-144,7
+144,7
@@
SILC_FSM_STATE(silc_client_new_id)
out:
/** Packet processed */
silc_packet_free(packet);
out:
/** Packet processed */
silc_packet_free(packet);
-
return
SILC_FSM_FINISH;
+ SILC_FSM_FINISH;
}
}
@@
-170,14
+170,14
@@
SILC_FSM_STATE(silc_client_st_register)
SILC_STR_END)) {
/** Error sending packet */
silc_fsm_next(fsm, silc_client_st_register_error);
SILC_STR_END)) {
/** Error sending packet */
silc_fsm_next(fsm, silc_client_st_register_error);
-
return
SILC_FSM_CONTINUE;
+ SILC_FSM_CONTINUE;
}
/** Wait for new ID */
conn->internal->registering = TRUE;
silc_fsm_next_later(fsm, silc_client_st_register_complete,
conn->internal->retry_timer, 0);
}
/** Wait for new ID */
conn->internal->registering = TRUE;
silc_fsm_next_later(fsm, silc_client_st_register_complete,
conn->internal->retry_timer, 0);
-
return
SILC_FSM_WAIT;
+ SILC_FSM_WAIT;
}
/* Wait for NEW_ID packet to arrive */
}
/* Wait for NEW_ID packet to arrive */
@@
-190,7
+190,7
@@
SILC_FSM_STATE(silc_client_st_register_complete)
if (conn->internal->disconnected) {
/** Disconnected */
silc_fsm_next(fsm, silc_client_st_register_error);
if (conn->internal->disconnected) {
/** Disconnected */
silc_fsm_next(fsm, silc_client_st_register_error);
-
return
SILC_FSM_CONTINUE;
+ SILC_FSM_CONTINUE;
}
if (!conn->local_id) {
}
if (!conn->local_id) {
@@
-200,7
+200,7
@@
SILC_FSM_STATE(silc_client_st_register_complete)
conn->internal->retry_count = 0;
conn->internal->retry_timer = SILC_CLIENT_RETRY_MIN;
silc_fsm_next(fsm, silc_client_st_register_error);
conn->internal->retry_count = 0;
conn->internal->retry_timer = SILC_CLIENT_RETRY_MIN;
silc_fsm_next(fsm, silc_client_st_register_error);
-
return
SILC_FSM_CONTINUE;
+ SILC_FSM_CONTINUE;
}
/** Resend registering packet */
}
/** Resend registering packet */
@@
-209,7
+209,7
@@
SILC_FSM_STATE(silc_client_st_register_complete)
SILC_CLIENT_RETRY_MUL) +
(silc_rng_get_rn16(client->rng) %
SILC_CLIENT_RETRY_RAND));
SILC_CLIENT_RETRY_MUL) +
(silc_rng_get_rn16(client->rng) %
SILC_CLIENT_RETRY_RAND));
-
return
SILC_FSM_CONTINUE;
+ SILC_FSM_CONTINUE;
}
SILC_LOG_DEBUG(("Registered to network"));
}
SILC_LOG_DEBUG(("Registered to network"));
@@
-243,7
+243,7
@@
SILC_FSM_STATE(silc_client_st_register_complete)
silc_schedule_task_del_by_all(conn->internal->schedule, 0,
silc_client_connect_timeout, conn);
silc_schedule_task_del_by_all(conn->internal->schedule, 0,
silc_client_connect_timeout, conn);
-
return
SILC_FSM_FINISH;
+ SILC_FSM_FINISH;
}
/* Error registering to network */
}
/* Error registering to network */
@@
-258,7
+258,7
@@
SILC_FSM_STATE(silc_client_st_register_error)
/* Signal to close connection */
if (!conn->internal->disconnected) {
conn->internal->disconnected = TRUE;
/* 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 */
}
/* Call connect callback */
@@
-270,7
+270,7
@@
SILC_FSM_STATE(silc_client_st_register_error)
silc_schedule_task_del_by_all(conn->internal->schedule, 0,
silc_client_connect_timeout, conn);
silc_schedule_task_del_by_all(conn->internal->schedule, 0,
silc_client_connect_timeout, conn);
-
return
SILC_FSM_FINISH;
+ SILC_FSM_FINISH;
}
/************************* Resume detached session **************************/
}
/************************* Resume detached session **************************/
@@
-294,7
+294,7
@@
SILC_FSM_STATE(silc_client_st_resume)
if (!resume) {
/** Out of memory */
silc_fsm_next(fsm, silc_client_st_resume_error);
if (!resume) {
/** Out of memory */
silc_fsm_next(fsm, silc_client_st_resume_error);
-
return
SILC_FSM_CONTINUE;
+ SILC_FSM_CONTINUE;
}
silc_fsm_set_state_context(fsm, resume);
}
silc_fsm_set_state_context(fsm, resume);
@@
-316,7
+316,7
@@
SILC_FSM_STATE(silc_client_st_resume)
/** Malformed detach data */
SILC_LOG_DEBUG(("Malformed detachment data"));
silc_fsm_next(fsm, silc_client_st_resume_error);
/** Malformed detach data */
SILC_LOG_DEBUG(("Malformed detachment data"));
silc_fsm_next(fsm, silc_client_st_resume_error);
-
return
SILC_FSM_CONTINUE;
+ SILC_FSM_CONTINUE;
}
if (!silc_id_str2id(id, id_len, SILC_ID_CLIENT, &client_id,
}
if (!silc_id_str2id(id, id_len, SILC_ID_CLIENT, &client_id,
@@
-324,7
+324,7
@@
SILC_FSM_STATE(silc_client_st_resume)
/** Malformed ID */
SILC_LOG_DEBUG(("Malformed ID"));
silc_fsm_next(fsm, silc_client_st_resume_error);
/** Malformed ID */
SILC_LOG_DEBUG(("Malformed ID"));
silc_fsm_next(fsm, silc_client_st_resume_error);
-
return
SILC_FSM_CONTINUE;
+ SILC_FSM_CONTINUE;
}
/* Generate authentication data that server will verify */
}
/* Generate authentication data that server will verify */
@@
-336,7
+336,7
@@
SILC_FSM_STATE(silc_client_st_resume)
if (!auth) {
/** Out of memory */
silc_fsm_next(fsm, silc_client_st_resume_error);
if (!auth) {
/** Out of memory */
silc_fsm_next(fsm, silc_client_st_resume_error);
-
return
SILC_FSM_CONTINUE;
+ SILC_FSM_CONTINUE;
}
/* Send RESUME_CLIENT packet to resume to network */
}
/* Send RESUME_CLIENT packet to resume to network */
@@
-349,13
+349,13
@@
SILC_FSM_STATE(silc_client_st_resume)
/** Error sending packet */
SILC_LOG_DEBUG(("Error sending packet"));
silc_fsm_next(fsm, silc_client_st_resume_error);
/** Error sending packet */
SILC_LOG_DEBUG(("Error sending packet"));
silc_fsm_next(fsm, silc_client_st_resume_error);
-
return
SILC_FSM_CONTINUE;
+ SILC_FSM_CONTINUE;
}
/** Wait for new ID */
conn->internal->registering = TRUE;
silc_fsm_next_later(fsm, silc_client_st_resume_resolve_channels, 15, 0);
}
/** Wait for new ID */
conn->internal->registering = TRUE;
silc_fsm_next_later(fsm, silc_client_st_resume_resolve_channels, 15, 0);
-
return
SILC_FSM_WAIT;
+ SILC_FSM_WAIT;
}
/* Resolve the old session information, user mode and joined channels. */
}
/* Resolve the old session information, user mode and joined channels. */
@@
-372,16
+372,19
@@
SILC_FSM_STATE(silc_client_st_resume_resolve_channels)
if (conn->internal->disconnected) {
/** Disconnected */
silc_fsm_next(fsm, silc_client_st_resume_error);
if (conn->internal->disconnected) {
/** Disconnected */
silc_fsm_next(fsm, silc_client_st_resume_error);
-
return
SILC_FSM_CONTINUE;
+ SILC_FSM_CONTINUE;
}
if (!conn->local_id) {
/** Timeout, ID not received */
conn->internal->registering = FALSE;
silc_fsm_next(fsm, silc_client_st_resume_error);
}
if (!conn->local_id) {
/** Timeout, ID not received */
conn->internal->registering = FALSE;
silc_fsm_next(fsm, silc_client_st_resume_error);
-
return
SILC_FSM_CONTINUE;
+ 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);
/* Change our nickname */
silc_client_change_nickname(client, conn, conn->local_entry,
resume->nickname, NULL, NULL, 0);
@@
-393,6
+396,9
@@
SILC_FSM_STATE(silc_client_st_resume_resolve_channels)
1, 1, silc_buffer_data(conn->internal->local_idp),
silc_buffer_len(conn->internal->local_idp));
1, 1, silc_buffer_data(conn->internal->local_idp),
silc_buffer_len(conn->internal->local_idp));
+ if (!resume->channel_count)
+ 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++) {
/* 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++) {
@@
-447,9
+453,7
@@
SILC_FSM_STATE(silc_client_st_resume_resolve_channels)
silc_free(res_argv_lens);
silc_free(res_argv_types);
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_WAIT;
}
/* Resolve joined channel modes, users and topics. */
}
/* Resolve joined channel modes, users and topics. */
@@
-467,7
+471,7
@@
SILC_FSM_STATE(silc_client_st_resume_resolve_cmodes)
if (conn->internal->disconnected) {
/** Disconnected */
silc_fsm_next(fsm, silc_client_st_resume_error);
if (conn->internal->disconnected) {
/** Disconnected */
silc_fsm_next(fsm, silc_client_st_resume_error);
-
return
SILC_FSM_CONTINUE;
+ SILC_FSM_CONTINUE;
}
SILC_LOG_DEBUG(("Resolving channel details"));
}
SILC_LOG_DEBUG(("Resolving channel details"));
@@
-476,7
+480,7
@@
SILC_FSM_STATE(silc_client_st_resume_resolve_cmodes)
silc_fsm_next(fsm, silc_client_st_resume_completed);
if (!silc_idcache_get_all(conn->internal->channel_cache, &channels))
silc_fsm_next(fsm, silc_client_st_resume_completed);
if (!silc_idcache_get_all(conn->internal->channel_cache, &channels))
-
return SILC_FSM_CONTINUE
;
+
SILC_FSM_YIELD
;
/* Resolve channels' mode, users and topic */
resume->channel_count = silc_list_count(channels) * 3;
/* Resolve channels' mode, users and topic */
resume->channel_count = silc_list_count(channels) * 3;
@@
-502,7
+506,7
@@
SILC_FSM_STATE(silc_client_st_resume_resolve_cmodes)
silc_buffer_free(idp);
}
silc_buffer_free(idp);
}
-
return
SILC_FSM_WAIT;
+ SILC_FSM_WAIT;
}
/* Resuming completed */
}
/* Resuming completed */
@@
-519,13
+523,13
@@
SILC_FSM_STATE(silc_client_st_resume_completed)
if (conn->internal->disconnected) {
/** Disconnected */
silc_fsm_next(fsm, silc_client_st_resume_error);
if (conn->internal->disconnected) {
/** Disconnected */
silc_fsm_next(fsm, silc_client_st_resume_error);
-
return
SILC_FSM_CONTINUE;
+ SILC_FSM_CONTINUE;
}
if (resume->channel_count > 0) {
resume->channel_count--;
if (resume->channel_count)
}
if (resume->channel_count > 0) {
resume->channel_count--;
if (resume->channel_count)
-
return
SILC_FSM_WAIT;
+ SILC_FSM_WAIT;
}
SILC_LOG_DEBUG(("Resuming completed"));
}
SILC_LOG_DEBUG(("Resuming completed"));
@@
-548,6
+552,11
@@
SILC_FSM_STATE(silc_client_st_resume_completed)
conn->callback(client, conn, SILC_CLIENT_CONN_SUCCESS_RESUME, 0, NULL,
conn->callback_context);
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,
/* Call NICK command reply. */
silc_client_resume_command_callback(client, conn, SILC_COMMAND_NICK,
conn->local_entry,
@@
-582,7
+591,7
@@
SILC_FSM_STATE(silc_client_st_resume_completed)
silc_free(resume->nickname);
silc_free(resume);
silc_free(resume->nickname);
silc_free(resume);
-
return
SILC_FSM_FINISH;
+ SILC_FSM_FINISH;
}
/* Error resuming to network */
}
/* Error resuming to network */
@@
-598,7
+607,7
@@
SILC_FSM_STATE(silc_client_st_resume_error)
silc_free(resume->nickname);
silc_free(resume);
}
silc_free(resume->nickname);
silc_free(resume);
}
-
return
SILC_FSM_FINISH;
+ SILC_FSM_FINISH;
}
SILC_LOG_DEBUG(("Error resuming to network"));
}
SILC_LOG_DEBUG(("Error resuming to network"));
@@
-606,7
+615,7
@@
SILC_FSM_STATE(silc_client_st_resume_error)
/* Signal to close connection */
if (!conn->internal->disconnected) {
conn->internal->disconnected = TRUE;
/* 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 */
}
/* Call connect callback */
@@
-623,7
+632,7
@@
SILC_FSM_STATE(silc_client_st_resume_error)
silc_free(resume);
}
silc_free(resume);
}
-
return
SILC_FSM_FINISH;
+ SILC_FSM_FINISH;
}
/* Generates the session detachment data. This data can be used later
}
/* Generates the session detachment data. This data can be used later