[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet] 06/08: MESSENGER: Adjust peer store, load and save list of peer
From: |
gnunet |
Subject: |
[gnunet] 06/08: MESSENGER: Adjust peer store, load and save list of peers in store |
Date: |
Tue, 23 Jan 2024 01:46:25 +0100 |
This is an automated email from the git hooks/post-receive script.
thejackimonster pushed a commit to branch master
in repository gnunet.
commit 1eeceed4a3426e162db556e56910b1c0175e0fc1
Author: TheJackiMonster <thejackimonster@gmail.com>
AuthorDate: Mon Jan 22 23:30:40 2024 +0100
MESSENGER: Adjust peer store, load and save list of peers in store
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
---
src/service/messenger/Makefile.am | 2 +-
.../gnunet-service-messenger_message_handle.c | 2 +-
...ore.c => gnunet-service-messenger_peer_store.c} | 106 +++++++++++++++++++--
...ore.h => gnunet-service-messenger_peer_store.h} | 36 +++++--
.../messenger/gnunet-service-messenger_room.c | 12 +++
.../messenger/gnunet-service-messenger_room.h | 2 +-
src/service/messenger/meson.build | 2 +-
src/service/messenger/messenger_api_list_tunnels.c | 8 +-
8 files changed, 151 insertions(+), 19 deletions(-)
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_message_handle.c
b/src/service/messenger/gnunet-service-messenger_message_handle.c
index d9ee1ef13..e1f15235d 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_NO);
if (GNUNET_NO == contains_list_tunnels (&(room->basement),
&(message->body.peer.peer)))
diff --git a/src/service/messenger/messenger_api_peer_store.c
b/src/service/messenger/gnunet-service-messenger_peer_store.c
similarity index 66%
rename from src/service/messenger/messenger_api_peer_store.c
rename to src/service/messenger/gnunet-service-messenger_peer_store.c
index 8d8d4dbee..4d7b49db6 100644
--- a/src/service/messenger/messenger_api_peer_store.c
+++ b/src/service/messenger/gnunet-service-messenger_peer_store.c
@@ -19,12 +19,13 @@
*/
/**
* @author Tobias Frisch
- * @file src/messenger/messenger_api_peer_store.c
- * @brief messenger api: client implementation of GNUnet MESSENGER service
+ * @file src/messenger/gnunet-service-messenger_peer_store.c
+ * @brief GNUnet MESSENGER service
*/
-#include "messenger_api_peer_store.h"
+#include "gnunet-service-messenger_peer_store.h"
+#include "gnunet_common.h"
#include "messenger_api_message.h"
#include "messenger_api_util.h"
@@ -62,6 +63,92 @@ clear_peer_store (struct GNUNET_MESSENGER_PeerStore *store)
}
+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_PeerIdentity peer;
+ ssize_t len;
+
+ do {
+ len = GNUNET_DISK_file_read (handle, &peer, sizeof(peer));
+
+ if (len != sizeof(peer))
+ break;
+
+ update_store_peer (store, &peer, GNUNET_YES);
+ } 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_PeerIdentity *peer = value;
+
+ GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Save peer store entry: %s\n",
+ GNUNET_sh2s(id));
+
+ if (! peer)
+ return GNUNET_YES;
+
+ GNUNET_DISK_file_write (handle, peer, sizeof(*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;
@@ -105,7 +192,7 @@ get_store_peer_of (struct GNUNET_MESSENGER_PeerStore *store,
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));
+ update_store_peer (store, &(message->body.peer.peer), GNUNET_NO);
else
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"Sender id does not match peer identity\n");
@@ -148,15 +235,20 @@ find_store_peer (void *cls, const struct
GNUNET_ShortHashCode *id, void *value)
void
update_store_peer (struct GNUNET_MESSENGER_PeerStore *store,
- const struct GNUNET_PeerIdentity *peer)
+ const struct GNUNET_PeerIdentity *peer,
+ enum GNUNET_GenericReturnValue loading)
{
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));
+ if (GNUNET_YES == loading)
+ GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Load peer store entry: %s\n",
+ GNUNET_sh2s (&peer_id));
+ else
+ GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Update peer store entry: %s\n",
+ GNUNET_sh2s (&peer_id));
struct GNUNET_MESSENGER_ClosureFindPeer find;
find.requested = peer;
diff --git a/src/service/messenger/messenger_api_peer_store.h
b/src/service/messenger/gnunet-service-messenger_peer_store.h
similarity index 72%
rename from src/service/messenger/messenger_api_peer_store.h
rename to src/service/messenger/gnunet-service-messenger_peer_store.h
index 960787466..7f914abfe 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,10 +94,12 @@ get_store_peer_of (struct GNUNET_MESSENGER_PeerStore *store,
*
* @param[in,out] store Peer store
* @param[in] peer Peer identity
+ * @param[in] loading Loading flag
*/
void
update_store_peer (struct GNUNET_MESSENGER_PeerStore *store,
- const struct GNUNET_PeerIdentity *peer);
+ const struct GNUNET_PeerIdentity *peer,
+ enum GNUNET_GenericReturnValue loading);
/**
* Removes a <i>peer</i> identity from the <i>store</i> entirely.
@@ -89,4 +111,4 @@ void
remove_store_peer (struct GNUNET_MESSENGER_PeerStore *store,
const struct GNUNET_PeerIdentity *peer);
-#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 2d898eadd..288ea06d0 100644
--- a/src/service/messenger/gnunet-service-messenger_room.c
+++ b/src/service/messenger/gnunet-service-messenger_room.c
@@ -1400,6 +1400,12 @@ load_srv_room (struct GNUNET_MESSENGER_SrvRoom *room)
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);
@@ -1431,6 +1437,12 @@ save_srv_room (struct GNUNET_MESSENGER_SrvRoom *room)
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);
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/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_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);
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [gnunet] branch master updated (202bed2a1 -> 7787dcbc0), gnunet, 2024/01/22
- [gnunet] 01/08: MESSENGER: Adjust logging, gnunet, 2024/01/22
- [gnunet] 02/08: MESSENGER: Add logging and adjust closing rooms, gnunet, 2024/01/22
- [gnunet] 03/08: -adjust includes, gnunet, 2024/01/22
- [gnunet] 04/08: -adjust logging, gnunet, 2024/01/22
- [gnunet] 05/08: MESSENGER: Add more logging to find and fix issues, gnunet, 2024/01/22
- [gnunet] 08/08: -adjust logging of unpermitted request, gnunet, 2024/01/22
- [gnunet] 07/08: MESSENGER: Fix reliability of peer session verification, gnunet, 2024/01/22
- [gnunet] 06/08: MESSENGER: Adjust peer store, load and save list of peers in store,
gnunet <=