libgnunetchat

library for GNUnet Messenger
Log | Files | Refs | README | LICENSE

commit 807dec8e802737fb46d015c48a7859a6ec504f74
parent f57863e8ddbf60a034071101ba6af40eee5a4797
Author: TheJackiMonster <thejackimonster@gmail.com>
Date:   Fri, 18 Feb 2022 21:05:21 +0100

Handle deletions of accounts properly

Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>

Diffstat:
Msrc/gnunet_chat_handle_intern.c | 43+++++++++++++++++++++++++++++--------------
1 file changed, 29 insertions(+), 14 deletions(-)

diff --git a/src/gnunet_chat_handle_intern.c b/src/gnunet_chat_handle_intern.c @@ -206,7 +206,7 @@ on_handle_gnunet_identity(void *cls, { struct GNUNET_CHAT_Handle* handle = cls; - if ((!name) || (!ego)) + if (!ego) goto send_refresh; struct GNUNET_CHAT_InternalAccounts *accounts = handle->accounts_head; @@ -216,16 +216,29 @@ on_handle_gnunet_identity(void *cls, if (!(accounts->account)) goto skip_account; - if ((accounts->account->name) && - (0 == strcmp(accounts->account->name, name))) + if (ego != accounts->account->ego) + goto check_matching_name; + + if (name) + util_set_name_field(name, &(accounts->account->name)); + else { - accounts->account->ego = ego; - goto send_refresh; + account_destroy(accounts->account); + + GNUNET_CONTAINER_DLL_remove( + handle->accounts_head, + handle->accounts_tail, + accounts + ); } - if (ego == accounts->account->ego) + goto send_refresh; + +check_matching_name: + if ((accounts->account->name) && (name) && + (0 == strcmp(accounts->account->name, name))) { - util_set_name_field(name, &(accounts->account->name)); + accounts->account->ego = ego; goto send_refresh; } @@ -379,14 +392,13 @@ on_handle_message_callback(void *cls) { struct GNUNET_CHAT_Message *message = (struct GNUNET_CHAT_Message*) cls; - if ((!message) || (!(message->msg))) - return; + GNUNET_assert((message) && + (message->msg) && + (message->context) && + (message->context->handle)); struct GNUNET_CHAT_Context *context = message->context; - if (!context) - return; - switch (message->msg->header.kind) { case GNUNET_MESSENGER_KIND_DELETE: @@ -405,7 +417,7 @@ on_handle_message_callback(void *cls) struct GNUNET_CHAT_Handle *handle = context->handle; - if ((!handle) || (!(handle->msg_cb))) + if (!(handle->msg_cb)) return; handle->msg_cb(handle->msg_cls, context, message); @@ -535,7 +547,10 @@ on_handle_message (void *cls, ); task = GNUNET_SCHEDULER_add_delayed( - delay, + GNUNET_TIME_absolute_get_difference( + GNUNET_TIME_absolute_get(), + GNUNET_TIME_absolute_add(timestamp, delay) + ), on_handle_message_callback, message );