From b3bc1d0b9cfd8a8c921ac01a82da60daef73a6a1 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Tue, 24 Apr 2007 17:27:49 +0000 Subject: [PATCH] Fixed nickname setting with 1.3 protocol version. Ignore error notify for local client entry. --- lib/silcclient/client.c | 6 ++---- lib/silcclient/client_connect.c | 5 ++++- lib/silcclient/client_entry.c | 2 ++ lib/silcclient/client_notify.c | 2 +- lib/silcclient/client_register.c | 11 +++++++++-- 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/silcclient/client.c b/lib/silcclient/client.c index 37f757fe..af995497 100644 --- a/lib/silcclient/client.c +++ b/lib/silcclient/client.c @@ -22,9 +22,6 @@ #include "silcclient.h" #include "client_internal.h" -/************************** Types and definitions ***************************/ - - /************************ Static utility functions **************************/ /* Connection machine FSM destructor. This will finish the thread where @@ -42,7 +39,8 @@ static void silc_client_connection_destructor(SilcFSM fsm, /* Delete connection */ silc_client_del_connection(conn->client, conn); - /* Finish the thread were this machine was running */ + /* Finish the thread were this machine was running. Its destructor is the + silc_client_connection_finished. */ silc_fsm_finish(thread); } diff --git a/lib/silcclient/client_connect.c b/lib/silcclient/client_connect.c index 765eba24..ee8eb611 100644 --- a/lib/silcclient/client_connect.c +++ b/lib/silcclient/client_connect.c @@ -260,6 +260,8 @@ static void silc_client_rekey_completion(SilcSKE ske, conn->remote_host, silc_ske_map_status(status)); + silc_ske_free(conn->internal->ske); + conn->internal->ske = NULL; silc_fsm_finish(fsm); return; } @@ -790,5 +792,6 @@ SILC_FSM_STATE(silc_client_st_rekey) SILC_FSM_CALL(conn->internal->op = silc_ske_rekey_responder( conn->internal->ske, conn->stream, - conn->internal->rekey)); + conn->internal->rekey, + NULL)); } diff --git a/lib/silcclient/client_entry.c b/lib/silcclient/client_entry.c index b799d82d..0835408a 100644 --- a/lib/silcclient/client_entry.c +++ b/lib/silcclient/client_entry.c @@ -157,6 +157,8 @@ SilcDList silc_client_get_clients_local_ext(SilcClient client, return NULL; } + SILC_LOG_DEBUG(("Found %d clients", silc_dlist_count(clients))); + silc_dlist_start(clients); return clients; } diff --git a/lib/silcclient/client_notify.c b/lib/silcclient/client_notify.c index 07d2589a..12d22a8b 100644 --- a/lib/silcclient/client_notify.c +++ b/lib/silcclient/client_notify.c @@ -1492,7 +1492,7 @@ SILC_FSM_STATE(silc_client_notify_error) if (!silc_argument_get_decoded(args, 2, SILC_ARGUMENT_ID, &id, NULL)) goto out; client_entry = silc_client_get_client_by_id(client, conn, &id.u.client_id); - if (client_entry) { + if (client_entry && client_entry != conn->local_entry) { silc_client_remove_from_channels(client, conn, client_entry); silc_client_del_client(client, conn, client_entry); silc_client_unref_client(client, conn, client_entry); diff --git a/lib/silcclient/client_register.c b/lib/silcclient/client_register.c index b021abc6..9bf29987 100644 --- a/lib/silcclient/client_register.c +++ b/lib/silcclient/client_register.c @@ -78,6 +78,7 @@ SILC_FSM_STATE(silc_client_new_id) SilcClientConnection conn = fsm_context; SilcClient client = conn->client; SilcPacket packet = state_context; + char *nick; SilcID id; if (conn->local_id) @@ -92,9 +93,15 @@ SILC_FSM_STATE(silc_client_new_id) SILC_LOG_DEBUG(("New ID %s", silc_id_render(&id.u.client_id, SILC_ID_CLIENT))); + /* From SILC protocol version 1.3, nickname is in NEW_CLIENT packet */ + if (conn->internal->remote_version >= 13) + nick = (conn->internal->params.nickname ? + conn->internal->params.nickname : client->username); + else + nick = client->username; + /* Create local client entry */ - conn->local_entry = silc_client_add_client(client, conn, - client->username, + conn->local_entry = silc_client_add_client(client, conn, nick, client->username, client->realname, &id.u.client_id, 0); -- 2.24.0