gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnunet] branch master updated (202bed2a1 -> 7787dcbc0)


From: gnunet
Subject: [gnunet] branch master updated (202bed2a1 -> 7787dcbc0)
Date: Tue, 23 Jan 2024 01:46:19 +0100

This is an automated email from the git hooks/post-receive script.

thejackimonster pushed a change to branch master
in repository gnunet.

    from 202bed2a1 MESSENGER: fix private messaging
     new 7a8e2c4c7 MESSENGER: Adjust logging
     new 4003d89b7 MESSENGER: Add logging and adjust closing rooms
     new b28a37b54 -adjust includes
     new d5867952c -adjust logging
     new 5e3335b69 MESSENGER: Add more logging to find and fix issues
     new 1eeceed4a MESSENGER: Adjust peer store, load and save list of peers in 
store
     new 3011e7d71 MESSENGER: Fix reliability of peer session verification
     new 7787dcbc0 -adjust logging of unpermitted request

The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 src/service/messenger/Makefile.am                  |   2 +-
 src/service/messenger/gnunet-service-messenger.c   |  32 +-
 .../messenger/gnunet-service-messenger_handle.c    |  11 +-
 .../gnunet-service-messenger_member_store.c        |  12 +
 .../gnunet-service-messenger_message_handle.c      |   4 +-
 .../gnunet-service-messenger_message_send.c        |  20 +-
 .../gnunet-service-messenger_operation_store.c     |  11 +-
 .../gnunet-service-messenger_peer_store.c          | 362 +++++++++++++++++++++
 ...ore.h => gnunet-service-messenger_peer_store.h} |  46 ++-
 .../messenger/gnunet-service-messenger_room.c      |  53 ++-
 .../messenger/gnunet-service-messenger_room.h      |   2 +-
 .../messenger/gnunet-service-messenger_service.c   |   6 +-
 .../messenger/gnunet-service-messenger_service.h   |   5 +-
 src/service/messenger/meson.build                  |   2 +-
 .../messenger/messenger_api_contact_store.c        |   9 +
 src/service/messenger/messenger_api_list_tunnels.c |   8 +-
 src/service/messenger/messenger_api_peer_store.c   | 196 -----------
 src/service/messenger/messenger_api_traits.c       |   5 +-
 18 files changed, 539 insertions(+), 247 deletions(-)
 create mode 100644 src/service/messenger/gnunet-service-messenger_peer_store.c
 rename src/service/messenger/{messenger_api_peer_store.h => 
gnunet-service-messenger_peer_store.h} (70%)
 delete mode 100644 src/service/messenger/messenger_api_peer_store.c

diff --git a/src/service/messenger/Makefile.am 
b/src/service/messenger/Makefile.am
index ae2285a90..6b408c4fe 100644
--- a/src/service/messenger/Makefile.am
+++ b/src/service/messenger/Makefile.am
@@ -36,7 +36,6 @@ libgnunetmessenger_la_SOURCES = \
   messenger_api.c \
   messenger_api_contact.c messenger_api_contact.h \
   messenger_api_contact_store.c messenger_api_contact_store.h \
-  messenger_api_peer_store.c messenger_api_peer_store.h \
   messenger_api_message.c messenger_api_message.h \
   messenger_api_message_kind.c messenger_api_message_kind.h \
   messenger_api_list_tunnels.c messenger_api_list_tunnels.h \
@@ -118,6 +117,7 @@ gnunet_service_messenger_SOURCES = \
   gnunet-service-messenger_message_store.c 
gnunet-service-messenger_message_store.h \
   gnunet-service-messenger_operation_store.c 
gnunet-service-messenger_operation_store.h \
   gnunet-service-messenger_operation.c gnunet-service-messenger_operation.h \
+  gnunet-service-messenger_peer_store.c gnunet-service-messenger_peer_store.h \
   gnunet-service-messenger_basement.c gnunet-service-messenger_basement.h \
   gnunet-service-messenger_handle.c gnunet-service-messenger_handle.h \
   gnunet-service-messenger_room.c gnunet-service-messenger_room.h \
diff --git a/src/service/messenger/gnunet-service-messenger.c 
b/src/service/messenger/gnunet-service-messenger.c
index 2cbc8933d..2102a59cc 100644
--- a/src/service/messenger/gnunet-service-messenger.c
+++ b/src/service/messenger/gnunet-service-messenger.c
@@ -28,6 +28,7 @@
 #include "gnunet-service-messenger_handle.h"
 #include "gnunet-service-messenger_room.h"
 #include "gnunet-service-messenger_service.h"
+#include "gnunet_common.h"
 #include "messenger_api_message.h"
 
 struct GNUNET_MESSENGER_Client
@@ -360,7 +361,12 @@ callback_found_message (void *cls,
     session.peer = get_store_peer_of (store, message, hash);
 
     if (! session.peer)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 
+                  "Peer session from sender of message (%s) unknown!\n",
+                  GNUNET_h2s (hash));
       return;
+    }
   }
   else
   {
@@ -379,7 +385,12 @@ callback_found_message (void *cls,
     session.member = get_member_session_of (member, message, hash);
 
     if (! session.member)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 
+                  "Member session from sender of message (%s) unknown!\n",
+                  GNUNET_h2s (hash));
       return;
+    }
   }
 
   notify_srv_handle_message (msg_client->handle, room, &session, message,
@@ -395,6 +406,8 @@ handle_get_message (void *cls,
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Requesting message from room: %s\n",
               GNUNET_h2s (&(msg->key)));
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Requested message: %s\n",
+              GNUNET_h2s (&(msg->hash)));
 
   struct GNUNET_MESSENGER_SrvRoom *room = get_service_room (messenger,
                                                             &(msg->key));
@@ -408,18 +421,19 @@ handle_get_message (void *cls,
 
   struct GNUNET_MESSENGER_MemberStore *member_store =
     get_srv_room_member_store (room);
+  
+  const struct GNUNET_ShortHashCode *member_id;
+  member_id = get_srv_handle_member_id (msg_client->handle,
+                                        &(msg->key));
 
   struct GNUNET_MESSENGER_Member *member = get_store_member (member_store,
-                                                             
get_srv_handle_member_id (
-                                                               msg_client->
-                                                               handle,
-                                                               &(msg->key)
-                                                               ));
+                                                             member_id);
 
   if (! member)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Member not valid to request a message!\n");
+                "Member not valid to request a message! (%s)\n",
+                GNUNET_sh2s (member_id));
     goto end_handling;
   }
 
@@ -429,7 +443,8 @@ handle_get_message (void *cls,
   if (! pubkey)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Handle needs to have a public key to request a message!\n");
+                "Handle needs to have a public key to request a message! 
(%s)\n",
+                GNUNET_sh2s (member_id));
     goto end_handling;
   }
 
@@ -439,7 +454,8 @@ handle_get_message (void *cls,
   if (! session)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Session not valid to request a message!\n");
+                "Session not valid to request a message! (%s)\n",
+                GNUNET_sh2s (member_id));
     goto end_handling;
   }
 
diff --git a/src/service/messenger/gnunet-service-messenger_handle.c 
b/src/service/messenger/gnunet-service-messenger_handle.c
index 55548c0fb..63adc8a76 100644
--- a/src/service/messenger/gnunet-service-messenger_handle.c
+++ b/src/service/messenger/gnunet-service-messenger_handle.c
@@ -24,9 +24,10 @@
  */
 
 #include "platform.h"
-#include "gnunet-service-messenger_handle.h"
+#include "gnunet_messenger_service.h"
 
 #include "gnunet-service-messenger.h"
+#include "gnunet-service-messenger_handle.h"
 #include "gnunet-service-messenger_room.h"
 
 #include "messenger_api_util.h"
@@ -65,7 +66,7 @@ iterate_close_rooms (void *cls,
                      void *value)
 {
   struct GNUNET_MESSENGER_SrvHandle *handle = cls;
-  close_service_room (handle->service, handle, key);
+  close_service_room (handle->service, handle, key, GNUNET_NO);
   return GNUNET_YES;
 }
 
@@ -285,7 +286,7 @@ close_srv_handle_room (struct GNUNET_MESSENGER_SrvHandle 
*handle,
     return GNUNET_NO;
 
   enum GNUNET_GenericReturnValue result;
-  result = close_service_room (handle->service, handle, key);
+  result = close_service_room (handle->service, handle, key, GNUNET_YES);
 
   if (GNUNET_YES != result)
     return result;
@@ -453,8 +454,8 @@ notify_srv_handle_message (struct 
GNUNET_MESSENGER_SrvHandle *handle,
     context = get_next_member_session_context (session->member);
   }
 
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Notifying client about message: %s\n",
-              GNUNET_h2s (hash));
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Notifying client about message: %s 
(%s)\n",
+              GNUNET_h2s (hash), GNUNET_MESSENGER_name_of_kind 
(message->header.kind));
 
   struct GNUNET_MESSENGER_RecvMessage *msg;
   struct GNUNET_MQ_Envelope *env;
diff --git a/src/service/messenger/gnunet-service-messenger_member_store.c 
b/src/service/messenger/gnunet-service-messenger_member_store.c
index fb45147f4..8f09001f8 100644
--- a/src/service/messenger/gnunet-service-messenger_member_store.c
+++ b/src/service/messenger/gnunet-service-messenger_member_store.c
@@ -59,6 +59,9 @@ clear_member_store (struct GNUNET_MESSENGER_MemberStore 
*store)
 {
   GNUNET_assert ((store) && (store->members));
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Clear member store of room: %s\n",
+             GNUNET_h2s (get_srv_room_key (store->room)));
+
   GNUNET_CONTAINER_multishortmap_iterate (store->members,
                                           iterate_destroy_members, NULL);
   GNUNET_CONTAINER_multishortmap_destroy (store->members);
@@ -155,6 +158,9 @@ load_member_store (struct GNUNET_MESSENGER_MemberStore 
*store,
   char *scan_dir;
   GNUNET_asprintf (&scan_dir, "%s%s%c", directory, "members", DIR_SEPARATOR);
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Load member store from directory: %s\n",
+             scan_dir);
+
   if (GNUNET_OK == GNUNET_DISK_directory_test (scan_dir, GNUNET_YES))
     GNUNET_DISK_directory_scan (scan_dir, callback_scan_for_members, store);
 
@@ -202,6 +208,9 @@ save_member_store (struct GNUNET_MESSENGER_MemberStore 
*store,
   char *save_dir;
   GNUNET_asprintf (&save_dir, "%s%s%c", directory, "members", DIR_SEPARATOR);
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Save member store to directory: %s\n",
+             save_dir);
+
   if ((GNUNET_YES == GNUNET_DISK_directory_test (save_dir, GNUNET_NO)) ||
       (GNUNET_OK == GNUNET_DISK_directory_create (save_dir)))
     GNUNET_CONTAINER_multishortmap_iterate (store->members,
@@ -263,6 +272,9 @@ add_store_member (struct GNUNET_MESSENGER_MemberStore 
*store,
     return NULL;
   }
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Added store member with id: %s\n",
+             GNUNET_sh2s (get_member_id (member)));
+
   return member;
 }
 
diff --git a/src/service/messenger/gnunet-service-messenger_message_handle.c 
b/src/service/messenger/gnunet-service-messenger_message_handle.c
index d9ee1ef13..ee099d893 100644
--- a/src/service/messenger/gnunet-service-messenger_message_handle.c
+++ b/src/service/messenger/gnunet-service-messenger_message_handle.c
@@ -96,7 +96,7 @@ handle_message_peer (struct GNUNET_MESSENGER_SrvRoom *room,
   struct GNUNET_MESSENGER_PeerStore *store = get_srv_room_peer_store (room);
 
   if (0 == GNUNET_memcmp (session->peer, &(message->body.peer.peer)))
-    update_store_peer (store, &(message->body.peer.peer));
+    update_store_peer (store, &(message->body.peer.peer), GNUNET_YES);
 
   if (GNUNET_NO == contains_list_tunnels (&(room->basement),
                                           &(message->body.peer.peer)))
@@ -133,7 +133,7 @@ handle_message_miss (struct GNUNET_MESSENGER_SrvRoom *room,
   struct GNUNET_MESSENGER_PeerStore *store = get_srv_room_peer_store (room);
 
   if (0 == GNUNET_memcmp (session->peer, &(message->body.miss.peer)))
-    remove_store_peer (store, &(message->body.miss.peer));
+    update_store_peer (store, &(message->body.miss.peer), GNUNET_NO);
 
   struct GNUNET_MESSENGER_ListTunnel *element = find_list_tunnels (
     &(room->basement), &(message->body.miss.peer), NULL);
diff --git a/src/service/messenger/gnunet-service-messenger_message_send.c 
b/src/service/messenger/gnunet-service-messenger_message_send.c
index ddabf0b32..76a446973 100644
--- a/src/service/messenger/gnunet-service-messenger_message_send.c
+++ b/src/service/messenger/gnunet-service-messenger_message_send.c
@@ -1,6 +1,6 @@
 /*
    This file is part of GNUnet.
-   Copyright (C) 2020--2023 GNUnet e.V.
+   Copyright (C) 2020--2024 GNUnet e.V.
 
    GNUnet is free software: you can redistribute it and/or modify it
    under the terms of the GNU Affero General Public License as published
@@ -31,6 +31,7 @@
 #include "gnunet-service-messenger_message_kind.h"
 #include "gnunet-service-messenger_operation.h"
 #include "gnunet-service-messenger_room.h"
+#include "gnunet_common.h"
 
 struct GNUNET_MESSENGER_MemberNotify
 {
@@ -52,6 +53,9 @@ notify_about_members (struct GNUNET_MESSENGER_MemberNotify 
*notify,
     get_srv_room_message_store (notify->room);
   struct GNUNET_MESSENGER_ListMessage *element;
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Notify through all of member session: 
%s\n",
+             GNUNET_sh2s(get_member_session_id(session)));
+
   for (element = session->messages.head; element; element = element->next)
   {
     if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains (map,
@@ -62,7 +66,11 @@ notify_about_members (struct GNUNET_MESSENGER_MemberNotify 
*notify,
         (GNUNET_YES != check_member_session_history (notify->session,
                                                      &(element->hash),
                                                      GNUNET_NO)))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 
+                  "Permission for notification of session message denied!\n");
       continue;
+    }
 
     if (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (map, &(element->hash),
                                                         NULL,
@@ -74,7 +82,11 @@ notify_about_members (struct GNUNET_MESSENGER_MemberNotify 
*notify,
       message_store, &(element->hash));
 
     if ((! message) || (GNUNET_YES == is_peer_message (message)))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 
+                  "Session message for notification is invalid!\n");
       continue;
+    }
 
     struct GNUNET_MESSENGER_SenderSession sender;
     sender.member = session;
@@ -93,6 +105,9 @@ iterate_notify_about_members (void *cls,
 {
   struct GNUNET_MESSENGER_MemberNotify *notify = cls;
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Notify about member session: %s\n",
+             GNUNET_sh2s(get_member_session_id(session)));
+
   if ((notify->session == session) || (GNUNET_YES ==
                                        is_member_session_completed (session)))
     return GNUNET_YES;
@@ -137,6 +152,9 @@ send_message_join (struct GNUNET_MESSENGER_SrvRoom *room,
   notify.handle = handle;
   notify.session = session;
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Notify about all member sessions 
except: %s\n",
+             GNUNET_sh2s (get_member_session_id (session)));
+
   iterate_store_members (get_srv_room_member_store (room),
                          iterate_notify_about_members, &notify);
 
diff --git a/src/service/messenger/gnunet-service-messenger_operation_store.c 
b/src/service/messenger/gnunet-service-messenger_operation_store.c
index ab6576a45..de7590edd 100644
--- a/src/service/messenger/gnunet-service-messenger_operation_store.c
+++ b/src/service/messenger/gnunet-service-messenger_operation_store.c
@@ -1,6 +1,6 @@
 /*
    This file is part of GNUnet.
-   Copyright (C) 2021, 2023 GNUnet e.V.
+   Copyright (C) 2021--2024 GNUnet e.V.
 
    GNUnet is free software: you can redistribute it and/or modify it
    under the terms of the GNU Affero General Public License as published
@@ -58,6 +58,9 @@ clear_operation_store (struct GNUNET_MESSENGER_OperationStore 
*store)
 {
   GNUNET_assert (store);
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Clear operation store of room: %s\n",
+             GNUNET_h2s (get_srv_room_key (store->room)));
+
   GNUNET_CONTAINER_multihashmap_iterate (store->operations,
                                          iterate_destroy_operations, NULL);
   GNUNET_CONTAINER_multihashmap_destroy (store->operations);
@@ -100,6 +103,9 @@ load_operation_store (struct 
GNUNET_MESSENGER_OperationStore *store,
   char *load_dir;
   GNUNET_asprintf (&load_dir, "%s%s%c", directory, "operations", 
DIR_SEPARATOR);
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Load operation store from directory: 
%s\n",
+             load_dir);
+
   if (GNUNET_OK == GNUNET_DISK_directory_test (load_dir, GNUNET_YES))
     GNUNET_DISK_directory_scan (load_dir, callback_scan_for_operations, store);
 
@@ -137,6 +143,9 @@ save_operation_store (const struct 
GNUNET_MESSENGER_OperationStore *store,
   char *save_dir;
   GNUNET_asprintf (&save_dir, "%s%s%c", directory, "operations", 
DIR_SEPARATOR);
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Save operation store to directory: 
%s\n",
+             save_dir);
+
   if ((GNUNET_YES == GNUNET_DISK_directory_test (save_dir, GNUNET_NO)) ||
       (GNUNET_OK == GNUNET_DISK_directory_create (save_dir)))
     GNUNET_CONTAINER_multihashmap_iterate (store->operations,
diff --git a/src/service/messenger/gnunet-service-messenger_peer_store.c 
b/src/service/messenger/gnunet-service-messenger_peer_store.c
new file mode 100644
index 000000000..7e46c62d1
--- /dev/null
+++ b/src/service/messenger/gnunet-service-messenger_peer_store.c
@@ -0,0 +1,362 @@
+/*
+   This file is part of GNUnet.
+   Copyright (C) 2023--2024 GNUnet e.V.
+
+   GNUnet is free software: you can redistribute it and/or modify it
+   under the terms of the GNU Affero General Public License as published
+   by the Free Software Foundation, either version 3 of the License,
+   or (at your option) any later version.
+
+   GNUnet is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Affero General Public License for more details.
+
+   You should have received a copy of the GNU Affero General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+   SPDX-License-Identifier: AGPL3.0-or-later
+ */
+/**
+ * @author Tobias Frisch
+ * @file src/messenger/gnunet-service-messenger_peer_store.c
+ * @brief GNUnet MESSENGER service
+ */
+
+#include "gnunet-service-messenger_peer_store.h"
+
+#include "gnunet_common.h"
+#include "messenger_api_message.h"
+#include "messenger_api_util.h"
+
+struct GNUNET_MESSENGER_PeerStoreEntry
+{
+  struct GNUNET_PeerIdentity peer;
+  enum GNUNET_GenericReturnValue active;
+};
+
+void
+init_peer_store (struct GNUNET_MESSENGER_PeerStore *store)
+{
+  GNUNET_assert (store);
+
+  store->peers = GNUNET_CONTAINER_multishortmap_create (4, GNUNET_NO);
+}
+
+
+static enum GNUNET_GenericReturnValue
+iterate_destroy_peers (void *cls, const struct GNUNET_ShortHashCode *id,
+                       void *value)
+{
+  struct GNUNET_MESSENGER_PeerStoreEntry *entry = value;
+  GNUNET_free (entry);
+  return GNUNET_YES;
+}
+
+
+void
+clear_peer_store (struct GNUNET_MESSENGER_PeerStore *store)
+{
+  GNUNET_assert ((store) && (store->peers));
+
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Clear peer store\n");
+
+  GNUNET_CONTAINER_multishortmap_iterate (store->peers, iterate_destroy_peers,
+                                          NULL);
+  GNUNET_CONTAINER_multishortmap_destroy (store->peers);
+
+  store->peers = NULL;
+}
+
+
+void
+load_peer_store (struct GNUNET_MESSENGER_PeerStore *store,
+                 const char *path)
+{
+  GNUNET_assert ((store) && (path));
+
+  if (GNUNET_YES != GNUNET_DISK_file_test (path))
+    return;
+
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Load peer store from path: %s\n",
+             path);
+
+  enum GNUNET_DISK_AccessPermissions permission = (GNUNET_DISK_PERM_USER_READ
+                                                   | 
GNUNET_DISK_PERM_USER_WRITE);
+
+  struct GNUNET_DISK_FileHandle *handle = GNUNET_DISK_file_open (
+    path, GNUNET_DISK_OPEN_READ, permission
+    );
+
+  if (! handle)
+    return;
+
+  GNUNET_DISK_file_seek (handle, 0, GNUNET_DISK_SEEK_SET);
+
+  struct GNUNET_MESSENGER_PeerStoreEntry *entry;
+  struct GNUNET_ShortHashCode peer_id;
+  struct GNUNET_PeerIdentity peer;
+  ssize_t len;
+
+  do {
+    len = GNUNET_DISK_file_read (handle, &peer, sizeof(peer));
+
+    if (len != sizeof(peer))
+      break;
+
+   
+    entry = GNUNET_new(struct GNUNET_MESSENGER_PeerStoreEntry);
+
+    if (! entry)
+      continue;
+
+    GNUNET_memcpy(&(entry->peer), &peer, sizeof(entry->peer));
+    entry->active = GNUNET_YES;
+
+    convert_peer_identity_to_id (&peer, &peer_id);
+
+    if (GNUNET_OK == GNUNET_CONTAINER_multishortmap_put (
+      store->peers, &peer_id, entry, 
+      GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE))
+      continue;
+
+    GNUNET_free(entry);
+  } while (len == sizeof(peer));
+
+  GNUNET_DISK_file_close (handle);
+}
+
+
+static enum GNUNET_GenericReturnValue
+iterate_save_peers (void *cls, const struct GNUNET_ShortHashCode *id,
+                    void *value)
+{
+  struct GNUNET_DISK_FileHandle *handle = cls;
+  struct GNUNET_MESSENGER_PeerStoreEntry *entry = value;
+
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Save peer store entry: %s\n",
+             GNUNET_sh2s(id));
+
+  if ((! entry) || (GNUNET_YES != entry->active))
+    return GNUNET_YES;
+
+  GNUNET_DISK_file_write (handle, &(entry->peer), sizeof(entry->peer));
+  return GNUNET_YES;
+}
+
+
+void
+save_peer_store (const struct GNUNET_MESSENGER_PeerStore *store,
+                 const char *path)
+{
+  GNUNET_assert ((store) && (path));
+
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Save peer store to path: %s\n",
+             path);
+
+  enum GNUNET_DISK_AccessPermissions permission = (GNUNET_DISK_PERM_USER_READ
+                                                   | 
GNUNET_DISK_PERM_USER_WRITE);
+
+  struct GNUNET_DISK_FileHandle *handle = GNUNET_DISK_file_open (
+    path, GNUNET_DISK_OPEN_CREATE | GNUNET_DISK_OPEN_WRITE, permission
+    );
+
+  if (! handle)
+    return;
+
+  GNUNET_DISK_file_seek (handle, 0, GNUNET_DISK_SEEK_SET);
+  GNUNET_CONTAINER_multishortmap_iterate (store->peers, iterate_save_peers,
+                                          handle);
+
+  GNUNET_DISK_file_sync (handle);
+  GNUNET_DISK_file_close (handle);
+}
+
+
+struct GNUNET_MESSENGER_ClosureVerifyPeer
+{
+  const struct GNUNET_MESSENGER_Message *message;
+  const struct GNUNET_HashCode *hash;
+  struct GNUNET_PeerIdentity *sender;
+};
+
+static enum GNUNET_GenericReturnValue
+verify_store_peer (void *cls, const struct GNUNET_ShortHashCode *id,
+                   void *value)
+{
+  struct GNUNET_MESSENGER_ClosureVerifyPeer *verify = cls;
+  struct GNUNET_MESSENGER_PeerStoreEntry *entry = value;
+
+  if (! entry)
+    return GNUNET_YES;
+
+  if (GNUNET_OK == verify_message_by_peer (verify->message,
+                                           verify->hash, &(entry->peer)))
+  {
+    verify->sender = &(entry->peer);
+    return GNUNET_NO;
+  }
+
+  return GNUNET_YES;
+}
+
+
+static struct GNUNET_MESSENGER_PeerStoreEntry*
+add_peer_store_entry (struct GNUNET_MESSENGER_PeerStore *store,
+                      const struct GNUNET_PeerIdentity *peer,
+                      const struct GNUNET_ShortHashCode *id,
+                      enum GNUNET_GenericReturnValue active)
+{
+  GNUNET_assert ((store) && (peer));
+
+  struct GNUNET_MESSENGER_PeerStoreEntry *entry;
+  entry = GNUNET_new(struct GNUNET_MESSENGER_PeerStoreEntry);
+
+  if (! entry)
+    return NULL;
+
+  GNUNET_memcpy(&(entry->peer), peer, sizeof(entry->peer));
+  entry->active = active;
+
+  if (GNUNET_OK != GNUNET_CONTAINER_multishortmap_put (
+      store->peers, id, entry, 
+      GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE))
+  {
+    GNUNET_free (entry);
+    return NULL;
+  }
+
+  return entry;
+}
+
+
+struct GNUNET_PeerIdentity*
+get_store_peer_of (struct GNUNET_MESSENGER_PeerStore *store,
+                   const struct GNUNET_MESSENGER_Message *message,
+                   const struct GNUNET_HashCode *hash)
+{
+  GNUNET_assert ((store) && (store->peers) && (message) && (hash));
+
+  if (GNUNET_YES != is_peer_message (message))
+    return NULL;
+
+  struct GNUNET_MESSENGER_ClosureVerifyPeer verify;
+  verify.message = message;
+  verify.hash = hash;
+  verify.sender = NULL;
+
+  GNUNET_CONTAINER_multishortmap_get_multiple (store->peers,
+                                               &(message->header.sender_id),
+                                               verify_store_peer, &verify);
+  
+  if (verify.sender)
+    return verify.sender;
+
+  const struct GNUNET_PeerIdentity *peer;
+  enum GNUNET_GenericReturnValue active;
+
+  if (GNUNET_MESSENGER_KIND_PEER == message->header.kind)
+  {
+    peer = &(message->body.peer.peer);
+    active = GNUNET_YES;
+  }
+  else if (GNUNET_MESSENGER_KIND_MISS == message->header.kind)
+  {
+    peer = &(message->body.miss.peer);
+    active = GNUNET_NO;
+  }
+  else
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "Peer message does not contain a peer identity\n");
+    return NULL;
+  }
+
+  struct GNUNET_ShortHashCode peer_id;
+  convert_peer_identity_to_id (peer, &peer_id);
+
+  if (0 != GNUNET_memcmp (&peer_id, &(message->header.sender_id)))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "Sender id does not match peer identity\n");
+    return NULL;
+  }
+
+  if (GNUNET_OK != verify_message_by_peer (message, hash, peer))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Verification of message with peer identity failed!\n");
+  }
+
+  struct GNUNET_MESSENGER_PeerStoreEntry *entry;
+  entry = add_peer_store_entry(store, peer, &peer_id, active);
+
+  if (! entry)
+  {
+    GNUNET_log(GNUNET_ERROR_TYPE_ERROR, 
+               "Initialization of entry in peer store failed: %s\n",
+               GNUNET_sh2s (&peer_id));
+
+    return NULL;
+  }
+
+  return &(entry->peer);
+}
+
+
+struct GNUNET_MESSENGER_ClosureFindPeer
+{
+  const struct GNUNET_PeerIdentity *requested;
+  struct GNUNET_MESSENGER_PeerStoreEntry *match;
+};
+
+static enum GNUNET_GenericReturnValue
+find_store_peer (void *cls, const struct GNUNET_ShortHashCode *id, void *value)
+{
+  struct GNUNET_MESSENGER_ClosureFindPeer *find = cls;
+  struct GNUNET_MESSENGER_PeerStoreEntry *entry = value;
+
+  if (! entry)
+    return GNUNET_YES;
+
+  if (0 == GNUNET_memcmp (find->requested, &(entry->peer)))
+  {
+    find->match = entry;
+    return GNUNET_NO;
+  }
+
+  return GNUNET_YES;
+}
+
+
+void
+update_store_peer (struct GNUNET_MESSENGER_PeerStore *store,
+                   const struct GNUNET_PeerIdentity *peer,
+                   enum GNUNET_GenericReturnValue active)
+{
+  GNUNET_assert ((store) && (store->peers) && (peer));
+
+  struct GNUNET_ShortHashCode peer_id;
+  convert_peer_identity_to_id (peer, &peer_id);
+
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Update peer store entry: %s\n",
+             GNUNET_sh2s (&peer_id));
+
+  struct GNUNET_MESSENGER_ClosureFindPeer find;
+  find.requested = peer;
+  find.match = NULL;
+
+  GNUNET_CONTAINER_multishortmap_get_multiple (store->peers, &peer_id,
+                                               find_store_peer, &find);
+
+  if (find.match)
+  {
+    find.match->active = active;
+    return;
+  }
+
+  if (! add_peer_store_entry(store, peer, &peer_id, active))
+    GNUNET_log(GNUNET_ERROR_TYPE_ERROR, 
+               "Initial update of entry in peer store failed: %s\n",
+               GNUNET_sh2s (&peer_id));
+}
diff --git a/src/service/messenger/messenger_api_peer_store.h 
b/src/service/messenger/gnunet-service-messenger_peer_store.h
similarity index 70%
rename from src/service/messenger/messenger_api_peer_store.h
rename to src/service/messenger/gnunet-service-messenger_peer_store.h
index 960787466..599966fd1 100644
--- a/src/service/messenger/messenger_api_peer_store.h
+++ b/src/service/messenger/gnunet-service-messenger_peer_store.h
@@ -1,6 +1,6 @@
 /*
    This file is part of GNUnet.
-   Copyright (C) 2023 GNUnet e.V.
+   Copyright (C) 2023--2024 GNUnet e.V.
 
    GNUnet is free software: you can redistribute it and/or modify it
    under the terms of the GNU Affero General Public License as published
@@ -19,12 +19,12 @@
  */
 /**
  * @author Tobias Frisch
- * @file src/messenger/messenger_api_peer_store.h
- * @brief messenger api: client implementation of GNUnet MESSENGER service
+ * @file src/messenger/gnunet-service-messenger_peer_store.h
+ * @brief GNUnet MESSENGER service
  */
 
-#ifndef GNUNET_MESSENGER_API_PEER_STORE_H
-#define GNUNET_MESSENGER_API_PEER_STORE_H
+#ifndef GNUNET_SERVICE_MESSENGER_PEER_STORE_H
+#define GNUNET_SERVICE_MESSENGER_PEER_STORE_H
 
 #include "gnunet_util_lib.h"
 
@@ -51,6 +51,26 @@ init_peer_store (struct GNUNET_MESSENGER_PeerStore *store);
 void
 clear_peer_store (struct GNUNET_MESSENGER_PeerStore *store);
 
+/**
+ * Loads peer identities from a <i>file</i> into a peer <i>store</i>.
+ *
+ * @param[out] store Peer store
+ * @param[in] path Path to a file
+ */
+void
+load_peer_store (struct GNUNET_MESSENGER_PeerStore *store,
+                 const char *path);
+
+/**
+ * Saves peer identities from a peer <i>store</i> into a <i>file</i>.
+ *
+ * @param[in] store Peer store
+ * @param[in] path Path to a file
+ */
+void
+save_peer_store (const struct GNUNET_MESSENGER_PeerStore *store,
+                 const char *path);
+
 /**
  * Returns the peer identity inside the <i>store</i> which verifies the
  * signature of a given <i>message</i> as valid. The specific peer identity
@@ -74,19 +94,11 @@ get_store_peer_of (struct GNUNET_MESSENGER_PeerStore *store,
  *
  * @param[in,out] store Peer store
  * @param[in] peer Peer identity
+ * @param[in] active Whether the peer is active or not
  */
 void
 update_store_peer (struct GNUNET_MESSENGER_PeerStore *store,
-                   const struct GNUNET_PeerIdentity *peer);
-
-/**
- * Removes a <i>peer</i> identity from the <i>store</i> entirely.
- *
- * @param[in,out] store Peer store
- * @param[in] peer Peer identity
- */
-void
-remove_store_peer (struct GNUNET_MESSENGER_PeerStore *store,
-                   const struct GNUNET_PeerIdentity *peer);
+                   const struct GNUNET_PeerIdentity *peer,
+                   enum GNUNET_GenericReturnValue active);
 
-#endif //GNUNET_MESSENGER_API_PEER_STORE_H
+#endif //GNUNET_SERVICE_MESSENGER_PEER_STORE_H
diff --git a/src/service/messenger/gnunet-service-messenger_room.c 
b/src/service/messenger/gnunet-service-messenger_room.c
index 1b8ce37ce..01dd9f483 100644
--- a/src/service/messenger/gnunet-service-messenger_room.c
+++ b/src/service/messenger/gnunet-service-messenger_room.c
@@ -23,11 +23,13 @@
  * @brief GNUnet MESSENGER service
  */
 
+#include "gnunet_common.h"
 #include "platform.h"
 #include "gnunet-service-messenger_room.h"
 
 #include "gnunet-service-messenger_basement.h"
 #include "gnunet-service-messenger_member.h"
+#include "gnunet-service-messenger_member_session.h"
 #include "gnunet-service-messenger_sender_session.h"
 #include "gnunet-service-messenger_message_kind.h"
 #include "gnunet-service-messenger_message_handle.h"
@@ -568,7 +570,10 @@ send_srv_room_message (struct GNUNET_MESSENGER_SrvRoom 
*room,
   new_message = update_room_message (room, message, &hash);
 
   if (GNUNET_YES != new_message)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Sending duplicate message 
failed!\n");
     return GNUNET_SYSERR;
+  }
 
   switch (message->header.kind)
   {
@@ -787,6 +792,8 @@ request_room_message_step (struct GNUNET_MESSENGER_SrvRoom 
*room,
                            GNUNET_MESSENGER_MessageRequestCallback callback,
                            void *cls)
 {
+  const struct GNUNET_MESSENGER_Message *message;
+
   struct GNUNET_MESSENGER_MessageStore *message_store =
     get_srv_room_message_store (room);
 
@@ -797,6 +804,10 @@ request_room_message_step (struct GNUNET_MESSENGER_SrvRoom 
*room,
   if (! link)
     goto forward;
 
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+              "Requesting link of message with hash: %s\n",
+              GNUNET_h2s (hash));
+
   enum GNUNET_GenericReturnValue result;
   result = request_room_message_step (room, &(link->first), session,
                                       callback, cls);
@@ -809,16 +820,21 @@ request_room_message_step (struct 
GNUNET_MESSENGER_SrvRoom *room,
     return result;
 
 forward:
-  if (GNUNET_YES != check_member_session_history (session, hash, GNUNET_NO))
-    return GNUNET_YES;
-
-  const struct GNUNET_MESSENGER_Message *message = get_store_message (
-    message_store, hash);
+  message = get_store_message (message_store, hash);
 
   if (! message)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Requested message is missing in local storage: %s\n",
+                GNUNET_h2s (hash));
     return GNUNET_NO;
+  }
 
-  if (callback)
+  if (GNUNET_YES != check_member_session_history (session, hash, GNUNET_NO))
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "Unpermitted request for access by member (%s) of message 
(%s)!\n",
+                GNUNET_sh2s (get_member_session_id (session)), GNUNET_h2s 
(hash));
+  else if (callback)
     callback (cls, room, message, hash);
 
   return GNUNET_YES;
@@ -1380,8 +1396,17 @@ load_srv_room (struct GNUNET_MESSENGER_SrvRoom *room)
   char *room_dir;
   get_room_data_subdir (room, &room_dir);
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Load room from directory: %s\n",
+             room_dir);
+
   if (GNUNET_YES == GNUNET_DISK_directory_test (room_dir, GNUNET_YES))
   {
+    char *peers_file;
+    GNUNET_asprintf (&peers_file, "%s%s", room_dir, "peers.list");
+
+    load_peer_store (get_srv_room_peer_store (room), peers_file);
+    GNUNET_free (peers_file);
+
     load_member_store (get_srv_room_member_store (room), room_dir);
     load_message_store (get_srv_room_message_store (room), room_dir);
     load_operation_store (get_srv_room_operation_store (room), room_dir);
@@ -1407,9 +1432,18 @@ save_srv_room (struct GNUNET_MESSENGER_SrvRoom *room)
   char *room_dir;
   get_room_data_subdir (room, &room_dir);
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Save room to directory: %s\n",
+             room_dir);
+
   if ((GNUNET_YES == GNUNET_DISK_directory_test (room_dir, GNUNET_NO)) ||
       (GNUNET_OK == GNUNET_DISK_directory_create (room_dir)))
   {
+    char *peers_file;
+    GNUNET_asprintf (&peers_file, "%s%s", room_dir, "peers.list");
+
+    save_peer_store (get_srv_room_peer_store (room), peers_file);
+    GNUNET_free (peers_file);
+
     save_member_store (get_srv_room_member_store (room), room_dir);
     save_message_store (get_srv_room_message_store (room), room_dir);
     save_operation_store (get_srv_room_operation_store (room), room_dir);
@@ -1435,6 +1469,9 @@ remove_srv_room (struct GNUNET_MESSENGER_SrvRoom *room)
   char *room_dir;
   get_room_data_subdir (room, &room_dir);
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Remove room from directory: %s\n",
+             room_dir);
+
   if (GNUNET_YES == GNUNET_DISK_directory_test (room_dir, GNUNET_YES))
     GNUNET_DISK_directory_remove (room_dir);
 
@@ -1448,6 +1485,10 @@ remove_room_member_session (struct 
GNUNET_MESSENGER_SrvRoom *room,
 {
   GNUNET_assert ((room) && (session));
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Remove member session from room: %s 
(%s)\n",
+             GNUNET_sh2s (get_member_session_id (session)),
+             GNUNET_h2s (get_srv_room_key (room)));
+
   remove_member_session (session->member, session);
 
   const struct GNUNET_CRYPTO_PublicKey *public_key =
diff --git a/src/service/messenger/gnunet-service-messenger_room.h 
b/src/service/messenger/gnunet-service-messenger_room.h
index 8b20051be..e9395cfc4 100644
--- a/src/service/messenger/gnunet-service-messenger_room.h
+++ b/src/service/messenger/gnunet-service-messenger_room.h
@@ -36,10 +36,10 @@
 #include "gnunet-service-messenger_member_store.h"
 #include "gnunet-service-messenger_message_store.h"
 #include "gnunet-service-messenger_operation_store.h"
+#include "gnunet-service-messenger_peer_store.h"
 
 #include "messenger_api_list_tunnels.h"
 #include "messenger_api_message.h"
-#include "messenger_api_peer_store.h"
 
 #define GNUNET_MESSENGER_IDLE_DELAY GNUNET_TIME_relative_multiply \
           (GNUNET_TIME_relative_get_second_ (), 5)
diff --git a/src/service/messenger/gnunet-service-messenger_service.c 
b/src/service/messenger/gnunet-service-messenger_service.c
index c10d2c5c6..fad235f27 100644
--- a/src/service/messenger/gnunet-service-messenger_service.c
+++ b/src/service/messenger/gnunet-service-messenger_service.c
@@ -28,6 +28,7 @@
 #include "gnunet-service-messenger_message_kind.h"
 #include "gnunet-service-messenger_room.h"
 
+#include "gnunet_common.h"
 #include "messenger_api_util.h"
 
 static void
@@ -382,7 +383,8 @@ entry_service_room (struct GNUNET_MESSENGER_Service 
*service,
 enum GNUNET_GenericReturnValue
 close_service_room (struct GNUNET_MESSENGER_Service *service,
                     struct GNUNET_MESSENGER_SrvHandle *handle,
-                    const struct GNUNET_HashCode *key)
+                    const struct GNUNET_HashCode *key,
+                    enum GNUNET_GenericReturnValue deletion)
 {
   GNUNET_assert ((service) && (handle) && (key));
 
@@ -413,7 +415,7 @@ close_service_room (struct GNUNET_MESSENGER_Service 
*service,
     if (GNUNET_OK == GNUNET_CONTAINER_multihashmap_remove (service->rooms, key,
                                                            room))
     {
-      destroy_srv_room (room, GNUNET_YES);
+      destroy_srv_room (room, deletion);
       return GNUNET_YES;
     }
     else
diff --git a/src/service/messenger/gnunet-service-messenger_service.h 
b/src/service/messenger/gnunet-service-messenger_service.h
index 403dfcc23..7634dba8e 100644
--- a/src/service/messenger/gnunet-service-messenger_service.h
+++ b/src/service/messenger/gnunet-service-messenger_service.h
@@ -26,6 +26,7 @@
 #ifndef GNUNET_SERVICE_MESSENGER_SERVICE_H
 #define GNUNET_SERVICE_MESSENGER_SERVICE_H
 
+#include "gnunet_common.h"
 #include "gnunet_configuration_lib.h"
 #include "gnunet_util_lib.h"
 
@@ -175,12 +176,14 @@ entry_service_room (struct GNUNET_MESSENGER_Service 
*service,
  * @param[in,out] service Service
  * @param[in,out] handle Handle
  * @param[in] key Key of room
+ * @param[in] deletion Flag to indicate context of closing
  * @return #GNUNET_YES on success, otherwise #GNUNET_NO
  */
 enum GNUNET_GenericReturnValue
 close_service_room (struct GNUNET_MESSENGER_Service *service,
                     struct GNUNET_MESSENGER_SrvHandle *handle,
-                    const struct GNUNET_HashCode *key);
+                    const struct GNUNET_HashCode *key,
+                    enum GNUNET_GenericReturnValue deletion);
 
 /**
  * Sends a received or sent <i>message</i> with a given <i>hash</i> to each 
handle of a <i>service</i> which
diff --git a/src/service/messenger/meson.build 
b/src/service/messenger/meson.build
index f6d63bc6c..1e37e192f 100644
--- a/src/service/messenger/meson.build
+++ b/src/service/messenger/meson.build
@@ -1,7 +1,6 @@
 libgnunetmessenger_src = ['messenger_api.c',
                           'messenger_api_contact.c',
                           'messenger_api_contact_store.c',
-                          'messenger_api_peer_store.c',
                           'messenger_api_message.c',
                           'messenger_api_message_kind.c',
                           'messenger_api_list_tunnels.c',
@@ -25,6 +24,7 @@ gnunetservicemessenger_src = ['gnunet-service-messenger.c',
                               'gnunet-service-messenger_message_store.c',
                               'gnunet-service-messenger_operation_store.c',
                               'gnunet-service-messenger_operation.c',
+                              'gnunet-service-messenger_peer_store.c',
                               'gnunet-service-messenger_basement.c',
                               'gnunet-service-messenger_handle.c',
                               'gnunet-service-messenger_room.c',
diff --git a/src/service/messenger/messenger_api_contact_store.c 
b/src/service/messenger/messenger_api_contact_store.c
index 843377e6e..538e97acc 100644
--- a/src/service/messenger/messenger_api_contact_store.c
+++ b/src/service/messenger/messenger_api_contact_store.c
@@ -25,6 +25,7 @@
 
 #include "messenger_api_contact_store.h"
 
+#include "gnunet_common.h"
 #include "messenger_api_contact.h"
 #include "messenger_api_util.h"
 
@@ -56,6 +57,8 @@ clear_contact_store (struct GNUNET_MESSENGER_ContactStore 
*store)
 {
   GNUNET_assert ((store) && (store->contacts));
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Clear contact store\n");
+
   GNUNET_CONTAINER_multihashmap_iterate (store->anonymous,
                                          iterate_destroy_contacts, NULL);
   GNUNET_CONTAINER_multihashmap_iterate (store->contacts,
@@ -162,6 +165,9 @@ update_store_contact (struct GNUNET_MESSENGER_ContactStore 
*store,
   struct GNUNET_HashCode hash;
   GNUNET_CRYPTO_hash (oldkey, sizeof(*oldkey), &hash);
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Update contact store entry: %s\n",
+             GNUNET_h2s (&hash));
+
   struct GNUNET_CONTAINER_MultiHashMap *map = select_store_contact_map (
     store, context, &hash
     );
@@ -196,6 +202,9 @@ remove_store_contact (struct GNUNET_MESSENGER_ContactStore 
*store,
   struct GNUNET_HashCode hash;
   GNUNET_CRYPTO_hash (pubkey, sizeof(*pubkey), &hash);
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Remove contact store entry: %s\n",
+             GNUNET_h2s (&hash));
+
   struct GNUNET_CONTAINER_MultiHashMap *map = select_store_contact_map (
     store, context, &hash
     );
diff --git a/src/service/messenger/messenger_api_list_tunnels.c 
b/src/service/messenger/messenger_api_list_tunnels.c
index 355f17527..2b6245417 100644
--- a/src/service/messenger/messenger_api_list_tunnels.c
+++ b/src/service/messenger/messenger_api_list_tunnels.c
@@ -1,6 +1,6 @@
 /*
    This file is part of GNUnet.
-   Copyright (C) 2020--2023 GNUnet e.V.
+   Copyright (C) 2020--2024 GNUnet e.V.
 
    GNUnet is free software: you can redistribute it and/or modify it
    under the terms of the GNU Affero General Public License as published
@@ -228,6 +228,9 @@ load_list_tunnels (struct GNUNET_MESSENGER_ListTunnels 
*tunnels,
   if (GNUNET_YES != GNUNET_DISK_file_test (path))
     return;
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Load list of tunnels from path: %s\n",
+             path);
+
   enum GNUNET_DISK_AccessPermissions permission = (GNUNET_DISK_PERM_USER_READ
                                                    | 
GNUNET_DISK_PERM_USER_WRITE);
 
@@ -262,6 +265,9 @@ save_list_tunnels (struct GNUNET_MESSENGER_ListTunnels 
*tunnels,
 {
   GNUNET_assert ((tunnels) && (path));
 
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Save list of tunnels to path: %s\n",
+             path);
+
   enum GNUNET_DISK_AccessPermissions permission = (GNUNET_DISK_PERM_USER_READ
                                                    | 
GNUNET_DISK_PERM_USER_WRITE);
 
diff --git a/src/service/messenger/messenger_api_peer_store.c 
b/src/service/messenger/messenger_api_peer_store.c
deleted file mode 100644
index f9b4867f8..000000000
--- a/src/service/messenger/messenger_api_peer_store.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
-   This file is part of GNUnet.
-   Copyright (C) 2023 GNUnet e.V.
-
-   GNUnet is free software: you can redistribute it and/or modify it
-   under the terms of the GNU Affero General Public License as published
-   by the Free Software Foundation, either version 3 of the License,
-   or (at your option) any later version.
-
-   GNUnet is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Affero General Public License for more details.
-
-   You should have received a copy of the GNU Affero General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-   SPDX-License-Identifier: AGPL3.0-or-later
- */
-/**
- * @author Tobias Frisch
- * @file src/messenger/messenger_api_peer_store.c
- * @brief messenger api: client implementation of GNUnet MESSENGER service
- */
-
-#include "messenger_api_peer_store.h"
-
-#include "messenger_api_message.h"
-#include "messenger_api_util.h"
-
-void
-init_peer_store (struct GNUNET_MESSENGER_PeerStore *store)
-{
-  GNUNET_assert (store);
-
-  store->peers = GNUNET_CONTAINER_multishortmap_create (4, GNUNET_NO);
-}
-
-
-static enum GNUNET_GenericReturnValue
-iterate_destroy_peers (void *cls, const struct GNUNET_ShortHashCode *id,
-                       void *value)
-{
-  struct GNUNET_PeerIdentity *peer = value;
-  GNUNET_free (peer);
-  return GNUNET_YES;
-}
-
-
-void
-clear_peer_store (struct GNUNET_MESSENGER_PeerStore *store)
-{
-  GNUNET_assert ((store) && (store->peers));
-
-  GNUNET_CONTAINER_multishortmap_iterate (store->peers, iterate_destroy_peers,
-                                          NULL);
-  GNUNET_CONTAINER_multishortmap_destroy (store->peers);
-
-  store->peers = NULL;
-}
-
-
-struct GNUNET_MESSENGER_ClosureVerifyPeer
-{
-  const struct GNUNET_MESSENGER_Message *message;
-  const struct GNUNET_HashCode *hash;
-  struct GNUNET_PeerIdentity *sender;
-};
-
-static enum GNUNET_GenericReturnValue
-verify_store_peer (void *cls, const struct GNUNET_ShortHashCode *id,
-                   void *value)
-{
-  struct GNUNET_MESSENGER_ClosureVerifyPeer *verify = cls;
-  struct GNUNET_PeerIdentity *peer = value;
-
-  if ((peer) && (GNUNET_OK == verify_message_by_peer (verify->message,
-                                                      verify->hash, peer)))
-  {
-    verify->sender = peer;
-    return GNUNET_NO;
-  }
-
-  return GNUNET_YES;
-}
-
-
-struct GNUNET_PeerIdentity*
-get_store_peer_of (struct GNUNET_MESSENGER_PeerStore *store,
-                   const struct GNUNET_MESSENGER_Message *message,
-                   const struct GNUNET_HashCode *hash)
-{
-  GNUNET_assert ((store) && (store->peers) && (message) && (hash));
-
-  if (GNUNET_YES != is_peer_message (message))
-    return NULL;
-
-  if ((GNUNET_MESSENGER_KIND_PEER == message->header.kind) &&
-      (GNUNET_OK == verify_message_by_peer (message, hash,
-                                            &(message->body.peer.peer))))
-  {
-    struct GNUNET_ShortHashCode peer_id;
-    convert_peer_identity_to_id (&(message->body.peer.peer), &peer_id);
-
-    if (0 == GNUNET_memcmp (&peer_id, &(message->header.sender_id)))
-      update_store_peer (store, &(message->body.peer.peer));
-    else
-      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                  "Sender id does not match peer identity\n");
-  }
-
-  struct GNUNET_MESSENGER_ClosureVerifyPeer verify;
-  verify.message = message;
-  verify.hash = hash;
-  verify.sender = NULL;
-
-  GNUNET_CONTAINER_multishortmap_get_multiple (store->peers,
-                                               &(message->header.sender_id),
-                                               verify_store_peer, &verify);
-
-  return verify.sender;
-}
-
-
-struct GNUNET_MESSENGER_ClosureFindPeer
-{
-  const struct GNUNET_PeerIdentity *requested;
-  struct GNUNET_PeerIdentity *match;
-};
-
-static enum GNUNET_GenericReturnValue
-find_store_peer (void *cls, const struct GNUNET_ShortHashCode *id, void *value)
-{
-  struct GNUNET_MESSENGER_ClosureFindPeer *find = cls;
-  struct GNUNET_PeerIdentity *peer = value;
-
-  if ((peer) && (0 == GNUNET_memcmp (find->requested, peer)))
-  {
-    find->match = peer;
-    return GNUNET_NO;
-  }
-
-  return GNUNET_YES;
-}
-
-
-void
-update_store_peer (struct GNUNET_MESSENGER_PeerStore *store,
-                   const struct GNUNET_PeerIdentity *peer)
-{
-  GNUNET_assert ((store) && (store->peers) && (peer));
-
-  struct GNUNET_ShortHashCode peer_id;
-  convert_peer_identity_to_id (peer, &peer_id);
-
-  struct GNUNET_MESSENGER_ClosureFindPeer find;
-  find.requested = peer;
-  find.match = NULL;
-
-  GNUNET_CONTAINER_multishortmap_get_multiple (store->peers, &peer_id,
-                                               find_store_peer, &find);
-
-  if (find.match)
-    return;
-
-  struct GNUNET_PeerIdentity *copy = GNUNET_memdup (peer, sizeof (struct
-                                                                  
GNUNET_PeerIdentity));
-  GNUNET_CONTAINER_multishortmap_put (store->peers, &peer_id, copy,
-                                      
GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
-}
-
-
-void
-remove_store_peer (struct GNUNET_MESSENGER_PeerStore *store,
-                   const struct GNUNET_PeerIdentity *peer)
-{
-  GNUNET_assert ((store) && (store->peers) && (peer));
-
-  struct GNUNET_ShortHashCode peer_id;
-  convert_peer_identity_to_id (peer, &peer_id);
-
-  struct GNUNET_MESSENGER_ClosureFindPeer find;
-  find.requested = peer;
-  find.match = NULL;
-
-  GNUNET_CONTAINER_multishortmap_get_multiple (store->peers, &peer_id,
-                                               find_store_peer, &find);
-
-  if (! find.match)
-    return;
-
-  if (GNUNET_YES == GNUNET_CONTAINER_multishortmap_remove (store->peers,
-                                                           &peer_id,
-                                                           find.match))
-    GNUNET_free (find.match);
-}
diff --git a/src/service/messenger/messenger_api_traits.c 
b/src/service/messenger/messenger_api_traits.c
index 5f5088c9d..b6affc90d 100644
--- a/src/service/messenger/messenger_api_traits.c
+++ b/src/service/messenger/messenger_api_traits.c
@@ -1,6 +1,6 @@
 /*
       This file is part of GNUnet
-      Copyright (C) 2023 GNUnet e.V.
+      Copyright (C) 2023--2024 GNUnet e.V.
 
       GNUnet is free software: you can redistribute it and/or modify it
       under the terms of the GNU Affero General Public License as published
@@ -24,9 +24,6 @@
  * @author Tobias Frisch
  */
 
-#include "gnunet_testing_ng_lib.h"
-#include "gnunet_testing_netjail_lib.h"
 #include "messenger-testing-cmds.h"
-#include "gnunet_util_lib.h"
 
 GNUNET_MESSENGER_SIMPLE_TRAITS (GNUNET_MESSENGER_MAKE_IMPL_SIMPLE_TRAIT)

-- 
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]