[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet] 05/06: MESSENGER: Make subscriptions not persistent in storage
From: |
gnunet |
Subject: |
[gnunet] 05/06: MESSENGER: Make subscriptions not persistent in storage |
Date: |
Sat, 08 Jun 2024 02:48:25 +0200 |
This is an automated email from the git hooks/post-receive script.
thejackimonster pushed a commit to branch master
in repository gnunet.
commit 6c326ad0a2d79e77daa4e6a7941d8f322ca9e860
Author: TheJackiMonster <thejackimonster@gmail.com>
AuthorDate: Fri Jun 7 20:22:17 2024 +0200
MESSENGER: Make subscriptions not persistent in storage
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
---
src/include/gnunet_messenger_service.h | 4 +-
.../gnunet-service-messenger_message_handle.c | 2 +-
.../gnunet-service-messenger_message_store.c | 48 ++++++++++++++--------
.../gnunet-service-messenger_message_store.h | 12 +++---
.../messenger/gnunet-service-messenger_room.c | 10 +++--
.../messenger/gnunet-service-messenger_room.h | 6 +--
.../gnunet-service-messenger_subscription.c | 2 +-
src/service/messenger/messenger_api_message.c | 23 +++++++++++
src/service/messenger/messenger_api_message.h | 10 +++++
9 files changed, 83 insertions(+), 34 deletions(-)
diff --git a/src/include/gnunet_messenger_service.h
b/src/include/gnunet_messenger_service.h
index 40de7a3ae..ee79c169e 100644
--- a/src/include/gnunet_messenger_service.h
+++ b/src/include/gnunet_messenger_service.h
@@ -44,9 +44,9 @@ extern "C" {
/**
* Version number of GNUnet Messenger API.
*
- * Current version of the Messenger: 0.4
+ * Current version of the Messenger: 0.5
*/
-#define GNUNET_MESSENGER_VERSION 0x00000004
+#define GNUNET_MESSENGER_VERSION 0x00000005
/**
* Identifier of GNUnet MESSENGER Service.
diff --git a/src/service/messenger/gnunet-service-messenger_message_handle.c
b/src/service/messenger/gnunet-service-messenger_message_handle.c
index fe9d2f55a..acda16d7d 100644
--- a/src/service/messenger/gnunet-service-messenger_message_handle.c
+++ b/src/service/messenger/gnunet-service-messenger_message_handle.c
@@ -223,5 +223,5 @@ handle_message_subscribe (struct GNUNET_MESSENGER_SrvRoom
*room,
}
update_subscription_timing (subscription);
- cleanup_srv_room_talk_messages (room, discourse);
+ cleanup_srv_room_discourse_messages (room, discourse);
}
diff --git a/src/service/messenger/gnunet-service-messenger_message_store.c
b/src/service/messenger/gnunet-service-messenger_message_store.c
index fce07d6f2..5e5f7caee 100644
--- a/src/service/messenger/gnunet-service-messenger_message_store.c
+++ b/src/service/messenger/gnunet-service-messenger_message_store.c
@@ -39,7 +39,7 @@ init_message_store (struct GNUNET_MESSENGER_MessageStore
*store)
store->entries = GNUNET_CONTAINER_multihashmap_create (8, GNUNET_NO);
store->messages = GNUNET_CONTAINER_multihashmap_create (8, GNUNET_NO);
store->links = GNUNET_CONTAINER_multihashmap_create (8, GNUNET_NO);
- store->talks = GNUNET_CONTAINER_multihashmap_create (8, GNUNET_NO);
+ store->discourses = GNUNET_CONTAINER_multihashmap_create (8, GNUNET_NO);
store->rewrite_entries = GNUNET_NO;
store->write_links = GNUNET_NO;
@@ -103,13 +103,13 @@ clear_message_store (struct GNUNET_MESSENGER_MessageStore
*store)
iterate_destroy_messages, NULL);
GNUNET_CONTAINER_multihashmap_iterate (store->links, iterate_destroy_links,
NULL);
- GNUNET_CONTAINER_multihashmap_iterate (store->talks,
+ GNUNET_CONTAINER_multihashmap_iterate (store->discourses,
iterate_destroy_messages, NULL);
GNUNET_CONTAINER_multihashmap_destroy (store->entries);
GNUNET_CONTAINER_multihashmap_destroy (store->messages);
GNUNET_CONTAINER_multihashmap_destroy (store->links);
- GNUNET_CONTAINER_multihashmap_destroy (store->talks);
+ GNUNET_CONTAINER_multihashmap_destroy (store->discourses);
}
@@ -469,7 +469,7 @@ contains_store_message (const struct
GNUNET_MESSENGER_MessageStore *store,
hash))
return GNUNET_YES;
- if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains (store->talks,
+ if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains (store->discourses,
hash))
return GNUNET_YES;
@@ -489,7 +489,7 @@ get_store_message (struct GNUNET_MESSENGER_MessageStore
*store,
if (message)
return message;
- message = GNUNET_CONTAINER_multihashmap_get (store->talks, hash);
+ message = GNUNET_CONTAINER_multihashmap_get (store->discourses, hash);
if (message)
return message;
@@ -632,8 +632,8 @@ put_store_message (struct GNUNET_MESSENGER_MessageStore
*store,
struct GNUNET_CONTAINER_MultiHashMap *map = store->messages;
- if (GNUNET_MESSENGER_KIND_TALK == message->header.kind)
- map = store->talks;
+ if (get_message_discourse (message))
+ map = store->discourses;
return GNUNET_CONTAINER_multihashmap_put (map, hash, message,
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
@@ -697,20 +697,26 @@ clear_memory:
}
-struct GNUNET_MESSENGER_CleanupTalkMessages
+struct GNUNET_MESSENGER_CleanupDiscourseMessages
{
struct GNUNET_MESSENGER_ListMessages *list;
+ struct GNUNET_ShortHashCode discourse;
struct GNUNET_TIME_Absolute timestamp;
};
static enum GNUNET_GenericReturnValue
-iterate_flag_for_cleanup_talk_message (void *cls,
- const struct GNUNET_HashCode *key,
- void *value)
+iterate_flag_for_cleanup_discourse_message (void *cls,
+ const struct GNUNET_HashCode *key,
+ void *value)
{
- struct GNUNET_MESSENGER_CleanupTalkMessages *cleanup = cls;
+ struct GNUNET_MESSENGER_CleanupDiscourseMessages *cleanup = cls;
struct GNUNET_MESSENGER_Message *message = value;
+ const struct GNUNET_ShortHashCode *discourse = get_message_discourse
(message);
+
+ if ((! discourse) || (0 != GNUNET_memcmp (discourse, &(cleanup->discourse))))
+ return GNUNET_YES;
+
struct GNUNET_TIME_Absolute timestamp =
GNUNET_TIME_absolute_ntoh (message->header.timestamp);
@@ -724,23 +730,29 @@ iterate_flag_for_cleanup_talk_message (void *cls,
}
void
-cleanup_store_talk_messages_before (struct GNUNET_MESSENGER_MessageStore
*store,
- const struct GNUNET_TIME_Absolute
timestamp)
+cleanup_store_discourse_messages_before (struct GNUNET_MESSENGER_MessageStore
*store,
+ const struct GNUNET_ShortHashCode
*discourse,
+ const struct GNUNET_TIME_Absolute
timestamp)
{
+ GNUNET_assert ((store) && (discourse));
+
struct GNUNET_MESSENGER_ListMessages list;
init_list_messages (&list);
- struct GNUNET_MESSENGER_CleanupTalkMessages cleanup;
+ struct GNUNET_MESSENGER_CleanupDiscourseMessages cleanup;
cleanup.list = &list;
cleanup.timestamp = timestamp;
- GNUNET_CONTAINER_multihashmap_iterate (store->talks,
- iterate_flag_for_cleanup_talk_message,
+ GNUNET_memcpy (&(cleanup.discourse), discourse,
+ sizeof (struct GNUNET_ShortHashCode));
+
+ GNUNET_CONTAINER_multihashmap_iterate (store->discourses,
+
iterate_flag_for_cleanup_discourse_message,
&cleanup);
struct GNUNET_MESSENGER_ListMessage *element;
for (element = list.head; element; element = element->next)
- GNUNET_CONTAINER_multihashmap_remove_all (store->talks, &(element->hash));
+ GNUNET_CONTAINER_multihashmap_remove_all (store->discourses,
&(element->hash));
clear_list_messages (&list);
}
diff --git a/src/service/messenger/gnunet-service-messenger_message_store.h
b/src/service/messenger/gnunet-service-messenger_message_store.h
index 1807bed7e..653040b75 100644
--- a/src/service/messenger/gnunet-service-messenger_message_store.h
+++ b/src/service/messenger/gnunet-service-messenger_message_store.h
@@ -51,7 +51,7 @@ struct GNUNET_MESSENGER_MessageStore
struct GNUNET_CONTAINER_MultiHashMap *entries;
struct GNUNET_CONTAINER_MultiHashMap *messages;
struct GNUNET_CONTAINER_MultiHashMap *links;
- struct GNUNET_CONTAINER_MultiHashMap *talks;
+ struct GNUNET_CONTAINER_MultiHashMap *discourses;
enum GNUNET_GenericReturnValue rewrite_entries;
enum GNUNET_GenericReturnValue write_links;
@@ -166,14 +166,16 @@ delete_store_message (struct
GNUNET_MESSENGER_MessageStore *store,
const struct GNUNET_HashCode *hash);
/**
- * Cleans up and deletes all talk messages existing in the message store
memory before a certain
- * timestamp.
+ * Cleans up and deletes all discourse messages existing in the message store
memory before a
+ * certain timestamp.
*
* @param[in,out] store Message store
+ * @param[in] discourse Hash of discourse
* @param[in] timestamp Timestamp
*/
void
-cleanup_store_talk_messages_before (struct GNUNET_MESSENGER_MessageStore
*store,
- const struct GNUNET_TIME_Absolute
timestamp);
+cleanup_store_discourse_messages_before (struct GNUNET_MESSENGER_MessageStore
*store,
+ const struct GNUNET_ShortHashCode
*discourse,
+ const struct GNUNET_TIME_Absolute
timestamp);
#endif //GNUNET_SERVICE_MESSENGER_MESSAGE_STORE_H
diff --git a/src/service/messenger/gnunet-service-messenger_room.c
b/src/service/messenger/gnunet-service-messenger_room.c
index c69fa55eb..fecf7a545 100644
--- a/src/service/messenger/gnunet-service-messenger_room.c
+++ b/src/service/messenger/gnunet-service-messenger_room.c
@@ -1259,10 +1259,10 @@ iterate_member_for_subscription (void *cls,
}
void
-cleanup_srv_room_talk_messages (struct GNUNET_MESSENGER_SrvRoom *room,
- const struct GNUNET_ShortHashCode *discourse)
+cleanup_srv_room_discourse_messages (struct GNUNET_MESSENGER_SrvRoom *room,
+ const struct GNUNET_ShortHashCode
*discourse)
{
- GNUNET_assert (room);
+ GNUNET_assert ((room) && (discourse));
struct GNUNET_MESSENGER_MemberSubscriptionIteration it;
it.discourse = discourse;
@@ -1276,7 +1276,9 @@ cleanup_srv_room_talk_messages (struct
GNUNET_MESSENGER_SrvRoom *room,
struct GNUNET_MESSENGER_MessageStore *message_store =
get_srv_room_message_store (room);
- cleanup_store_talk_messages_before (message_store, it.start);
+ cleanup_store_discourse_messages_before (message_store,
+ discourse,
+ it.start);
}
diff --git a/src/service/messenger/gnunet-service-messenger_room.h
b/src/service/messenger/gnunet-service-messenger_room.h
index 79c8e5068..5339979b2 100644
--- a/src/service/messenger/gnunet-service-messenger_room.h
+++ b/src/service/messenger/gnunet-service-messenger_room.h
@@ -376,15 +376,15 @@ uint32_t
get_srv_room_connection_flags (const struct GNUNET_MESSENGER_SrvRoom *room);
/**
- * Cleanup talk messages outside of current subscriptions from a specific
<i>discourse</i> of all the
+ * Cleanup discourse messages outside of current subscriptions from a specific
<i>discourse</i> of all the
* members in a given <i>room</i>.
*
* @param[in,out] room Room
* @param[in] discourse Hash of discourse
*/
void
-cleanup_srv_room_talk_messages (struct GNUNET_MESSENGER_SrvRoom *room,
- const struct GNUNET_ShortHashCode *discourse);
+cleanup_srv_room_discourse_messages (struct GNUNET_MESSENGER_SrvRoom *room,
+ const struct GNUNET_ShortHashCode
*discourse);
/**
* Loads the local configuration for a given <i>room</i> of a service which
contains the last messages hash
diff --git a/src/service/messenger/gnunet-service-messenger_subscription.c
b/src/service/messenger/gnunet-service-messenger_subscription.c
index 55aeabb5b..c6759800f 100644
--- a/src/service/messenger/gnunet-service-messenger_subscription.c
+++ b/src/service/messenger/gnunet-service-messenger_subscription.c
@@ -128,7 +128,7 @@ task_subscription_exit (void *cls)
remove_member_subscription (member, subscribtion);
destroy_subscription (subscribtion);
- cleanup_srv_room_talk_messages (room, &discourse);
+ cleanup_srv_room_discourse_messages (room, &discourse);
}
void
diff --git a/src/service/messenger/messenger_api_message.c
b/src/service/messenger/messenger_api_message.c
index 8ff5d76b1..9985340fd 100644
--- a/src/service/messenger/messenger_api_message.c
+++ b/src/service/messenger/messenger_api_message.c
@@ -1322,6 +1322,8 @@ pack_message (struct GNUNET_MESSENGER_Message *message,
enum GNUNET_GenericReturnValue
is_peer_message (const struct GNUNET_MESSENGER_Message *message)
{
+ GNUNET_assert (message);
+
switch (message->header.kind)
{
case GNUNET_MESSENGER_KIND_INFO:
@@ -1339,6 +1341,8 @@ is_peer_message (const struct GNUNET_MESSENGER_Message
*message)
enum GNUNET_GenericReturnValue
is_service_message (const struct GNUNET_MESSENGER_Message *message)
{
+ GNUNET_assert (message);
+
if (GNUNET_YES == is_peer_message (message))
return GNUNET_YES;
@@ -1395,6 +1399,8 @@ is_service_message (const struct GNUNET_MESSENGER_Message
*message)
enum GNUNET_GenericReturnValue
filter_message_sending (const struct GNUNET_MESSENGER_Message *message)
{
+ GNUNET_assert (message);
+
if (GNUNET_YES == is_peer_message (message))
return GNUNET_SYSERR; // Requires signature of peer rather than member!
@@ -1446,3 +1452,20 @@ filter_message_sending (const struct
GNUNET_MESSENGER_Message *message)
return GNUNET_SYSERR;
}
}
+
+
+const struct GNUNET_ShortHashCode*
+get_message_discourse (const struct GNUNET_MESSENGER_Message *message)
+{
+ GNUNET_assert (message);
+
+ switch (message->header.kind)
+ {
+ case GNUNET_MESSENGER_KIND_SUBSCRIBE:
+ return &(message->body.subscribe.discourse);
+ case GNUNET_MESSENGER_KIND_TALK:
+ return &(message->body.talk.discourse);
+ default:
+ return NULL;
+ }
+}
diff --git a/src/service/messenger/messenger_api_message.h
b/src/service/messenger/messenger_api_message.h
index 20b85dc03..ab87381ce 100644
--- a/src/service/messenger/messenger_api_message.h
+++ b/src/service/messenger/messenger_api_message.h
@@ -348,4 +348,14 @@ is_service_message (const struct GNUNET_MESSENGER_Message
*message);
enum GNUNET_GenericReturnValue
filter_message_sending (const struct GNUNET_MESSENGER_Message *message);
+/**
+ * Returns the discourse hash of a message depending on its kind. If a message
contains
+ * a discourse hash it will not be stored locally on peers.
+ *
+ * @param[in] message Message
+ * @return Discourse hash of message or NULL
+ */
+const struct GNUNET_ShortHashCode*
+get_message_discourse (const struct GNUNET_MESSENGER_Message *message);
+
#endif //GNUNET_MESSENGER_API_MESSAGE_H
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [gnunet] branch master updated (3210a2674 -> a3b695db7), gnunet, 2024/06/07
- [gnunet] 02/06: MESSENGER: Keep subscriptions alive automatically via client api, gnunet, 2024/06/07
- [gnunet] 01/06: MESSENGER: Implement timed subscriptions to discourses and filter talk messages, gnunet, 2024/06/07
- [gnunet] 05/06: MESSENGER: Make subscriptions not persistent in storage,
gnunet <=
- [gnunet] 04/06: MESSENGER: Cleanup talk messages of discourse after subscription runs out, gnunet, 2024/06/07
- [gnunet] 06/06: MESSENGER: Add names for new message kinds, gnunet, 2024/06/07
- [gnunet] 03/06: MESSENGER: Cleanup talk messages in room on subscription update, gnunet, 2024/06/07