libgnunetchat

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

commit 9d04b7c3981d1e0d25655dcb047c876dd5b275f6
parent ff5b51e8b00440dcf7ee252451947ce0622fd9c1
Author: Jacki <jacki@thejackimonster.de>
Date:   Sat, 10 Feb 2024 05:55:30 +0100

Fix rejections of invitations

Signed-off-by: Jacki <jacki@thejackimonster.de>

Diffstat:
Msrc/gnunet_chat_context.c | 8++++++++
Msrc/gnunet_chat_context.h | 1+
Msrc/gnunet_chat_context_intern.c | 13+++++++++++++
Msrc/gnunet_chat_handle_intern.c | 16++++++++++------
Msrc/gnunet_chat_invitation.c | 1-
Msrc/gnunet_chat_invitation.h | 1-
Msrc/gnunet_chat_lib.c | 16++++------------
7 files changed, 36 insertions(+), 20 deletions(-)

diff --git a/src/gnunet_chat_context.c b/src/gnunet_chat_context.c @@ -48,6 +48,8 @@ init_new_context (struct GNUNET_CHAT_Context *context, initial_map_size, GNUNET_NO); context->messages = GNUNET_CONTAINER_multihashmap_create( initial_map_size, GNUNET_NO); + context->rejections = GNUNET_CONTAINER_multihashmap_create( + initial_map_size, GNUNET_NO); context->invites = GNUNET_CONTAINER_multihashmap_create( initial_map_size, GNUNET_NO); context->files = GNUNET_CONTAINER_multihashmap_create( @@ -107,6 +109,7 @@ context_destroy (struct GNUNET_CHAT_Context *context) (context->timestamps) && (context->dependencies) && (context->messages) && + (context->rejections) && (context->invites) && (context->files) ); @@ -124,6 +127,10 @@ context_destroy (struct GNUNET_CHAT_Context *context) ); GNUNET_CONTAINER_multihashmap_iterate( + context->rejections, it_destroy_context_rejections, NULL + ); + + GNUNET_CONTAINER_multihashmap_iterate( context->invites, it_destroy_context_invites, NULL ); @@ -132,6 +139,7 @@ context_destroy (struct GNUNET_CHAT_Context *context) GNUNET_CONTAINER_multishortmap_destroy(context->timestamps); GNUNET_CONTAINER_multihashmap_destroy(context->dependencies); GNUNET_CONTAINER_multihashmap_destroy(context->messages); + GNUNET_CONTAINER_multihashmap_destroy(context->rejections); GNUNET_CONTAINER_multihashmap_destroy(context->invites); GNUNET_CONTAINER_multihashmap_destroy(context->files); diff --git a/src/gnunet_chat_context.h b/src/gnunet_chat_context.h @@ -45,6 +45,7 @@ struct GNUNET_CHAT_Context struct GNUNET_CONTAINER_MultiShortmap *timestamps; struct GNUNET_CONTAINER_MultiHashMap *dependencies; struct GNUNET_CONTAINER_MultiHashMap *messages; + struct GNUNET_CONTAINER_MultiHashMap *rejections; struct GNUNET_CONTAINER_MultiHashMap *invites; struct GNUNET_CONTAINER_MultiHashMap *files; diff --git a/src/gnunet_chat_context_intern.c b/src/gnunet_chat_context_intern.c @@ -25,6 +25,7 @@ #include "gnunet_chat_invitation.h" #include "gnunet_chat_message.h" +#include <gnunet/gnunet_common.h> #include <gnunet/gnunet_error_codes.h> #define GNUNET_UNUSED __attribute__ ((unused)) @@ -54,6 +55,18 @@ it_destroy_context_messages (GNUNET_UNUSED void *cls, } int +it_destroy_context_rejections (GNUNET_UNUSED void *cls, + GNUNET_UNUSED const struct GNUNET_HashCode *key, + void *value) +{ + GNUNET_assert(value); + + struct GNUNET_HashCode *hash = value; + GNUNET_free(hash); + return GNUNET_YES; +} + +int it_destroy_context_invites (GNUNET_UNUSED void *cls, GNUNET_UNUSED const struct GNUNET_HashCode *key, void *value) diff --git a/src/gnunet_chat_handle_intern.c b/src/gnunet_chat_handle_intern.c @@ -1004,13 +1004,17 @@ on_handle_message (void *cls, if (msg->body.tag.tag) break; - struct GNUNET_CHAT_Invitation *invitation = GNUNET_CONTAINER_multihashmap_get( - context->invites, &(msg->body.tag.hash) - ); + struct GNUNET_HashCode *rejection = GNUNET_new(struct GNUNET_HashCode); + + if (!rejection) + break; - if (invitation) - GNUNET_memcpy(&(invitation->rejection), hash, - sizeof(invitation->rejection)); + GNUNET_memcpy(rejection, hash, sizeof(struct GNUNET_HashCode)); + + if (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put( + context->rejections, &(msg->body.tag.hash), rejection, + GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE)) + GNUNET_free (rejection); break; } diff --git a/src/gnunet_chat_invitation.c b/src/gnunet_chat_invitation.c @@ -37,7 +37,6 @@ invitation_create_from_message (struct GNUNET_CHAT_Context *context, invitation->context = context; GNUNET_memcpy(&(invitation->hash), hash, sizeof(invitation->hash)); - GNUNET_memcpy(&(invitation->rejection), hash, sizeof(invitation->rejection)); GNUNET_memcpy(&(invitation->key), &(message->key), sizeof(invitation->key)); invitation->door = GNUNET_PEER_intern(&(message->door)); diff --git a/src/gnunet_chat_invitation.h b/src/gnunet_chat_invitation.h @@ -35,7 +35,6 @@ struct GNUNET_CHAT_Invitation struct GNUNET_CHAT_Context *context; struct GNUNET_HashCode hash; - struct GNUNET_HashCode rejection; struct GNUNET_HashCode key; GNUNET_PEER_Id door; diff --git a/src/gnunet_chat_lib.c b/src/gnunet_chat_lib.c @@ -2204,7 +2204,7 @@ GNUNET_CHAT_invitation_is_accepted (const struct GNUNET_CHAT_Invitation *invitat return GNUNET_NO; return GNUNET_CONTAINER_multihashmap_contains( - invitation->context->handle->contexts, + invitation->context->handle->contexts, &(invitation->key) ); } @@ -2218,18 +2218,10 @@ GNUNET_CHAT_invitation_is_rejected (const struct GNUNET_CHAT_Invitation *invitat if (!invitation) return GNUNET_NO; - if (0 == GNUNET_CRYPTO_hash_cmp(&(invitation->hash), &(invitation->rejection))) - return GNUNET_NO; - - const struct GNUNET_CHAT_Message *message = GNUNET_CONTAINER_multihashmap_get( - invitation->context->messages, &(invitation->rejection) + return GNUNET_CONTAINER_multihashmap_contains( + invitation->context->rejections, + &(invitation->hash) ); - - if ((!message) || (!message->msg) || (message->msg->header.kind != GNUNET_MESSENGER_KIND_TAG) || - (message->msg->body.tag.tag)) - return GNUNET_NO; - else - return GNUNET_YES; }