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:
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;
}