gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]