aboutsummaryrefslogtreecommitdiff
path: root/src/service/messenger/gnunet-service-messenger_member_store.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/service/messenger/gnunet-service-messenger_member_store.h')
-rw-r--r--src/service/messenger/gnunet-service-messenger_member_store.h158
1 files changed, 158 insertions, 0 deletions
diff --git a/src/service/messenger/gnunet-service-messenger_member_store.h b/src/service/messenger/gnunet-service-messenger_member_store.h
new file mode 100644
index 000000000..181593e6b
--- /dev/null
+++ b/src/service/messenger/gnunet-service-messenger_member_store.h
@@ -0,0 +1,158 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2020--2024 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20/**
21 * @author Tobias Frisch
22 * @file src/messenger/gnunet-service-messenger_member_store.h
23 * @brief GNUnet MESSENGER service
24 */
25
26#ifndef GNUNET_SERVICE_MESSENGER_MEMBER_STORE_H
27#define GNUNET_SERVICE_MESSENGER_MEMBER_STORE_H
28
29#include "gnunet_util_lib.h"
30
31#include "gnunet_messenger_service.h"
32
33struct GNUNET_MESSENGER_SrvRoom;
34
35struct GNUNET_MESSENGER_Member;
36struct GNUNET_MESSENGER_MemberSession;
37
38struct GNUNET_MESSENGER_MemberStore
39{
40 struct GNUNET_MESSENGER_SrvRoom *room;
41
42 struct GNUNET_CONTAINER_MultiShortmap *members;
43};
44
45typedef enum GNUNET_GenericReturnValue (*GNUNET_MESSENGER_MemberIteratorCallback) (
46 void *cls,
47 const struct GNUNET_CRYPTO_PublicKey *public_key,
48 struct GNUNET_MESSENGER_MemberSession *session);
49
50/**
51 * Initializes a member <i>store</i> as fully empty connected to a <i>room</i>.
52 *
53 * @param[out] store Member store
54 * @param room Room
55 */
56void
57init_member_store (struct GNUNET_MESSENGER_MemberStore *store,
58 struct GNUNET_MESSENGER_SrvRoom *room);
59
60/**
61 * Clears a member <i>store</i>, wipes its content and deallocates its memory.
62 *
63 * @param[in,out] store Member store
64 */
65void
66clear_member_store (struct GNUNET_MESSENGER_MemberStore *store);
67
68/**
69 * Returns the used contact store of a given member <i>store</i>.
70 *
71 * @param[in,out] store Member store
72 * @return Contact store
73 */
74struct GNUNET_MESSENGER_ContactStore*
75get_member_contact_store (struct GNUNET_MESSENGER_MemberStore *store);
76
77/**
78 * Returns the shared secret you need to access a room of the <i>store</i>.
79 *
80 * @param[in] store Member store
81 * @return Shared secret
82 */
83const struct GNUNET_HashCode*
84get_member_store_key (const struct GNUNET_MESSENGER_MemberStore *store);
85
86/**
87 * Loads members from a directory into a member <i>store</i>.
88 *
89 * @param[out] store Member store
90 * @param[in] directory Path to a directory
91 */
92void
93load_member_store (struct GNUNET_MESSENGER_MemberStore *store,
94 const char *directory);
95
96/**
97 * Saves members from a member <i>store</i> into a directory.
98 *
99 * @param[in] store Member store
100 * @param[in] directory Path to a directory
101 */
102void
103save_member_store (struct GNUNET_MESSENGER_MemberStore *store,
104 const char *directory);
105
106/**
107 * Returns the member in a <i>store</i> identified by a given <i>id</i>. If the <i>store</i>
108 * does not contain a member with the given <i>id</i>, NULL gets returned.
109 *
110 * @param[in] store Member store
111 * @param[in] id Member id
112 * @return Member or NULL
113 */
114struct GNUNET_MESSENGER_Member*
115get_store_member (const struct GNUNET_MESSENGER_MemberStore *store,
116 const struct GNUNET_ShortHashCode *id);
117
118/**
119 * Returns the member of a <i>store</i> using a sender id of a given <i>message</i>.
120 *
121 * If the message is a peer message or the member does not provide a matching session,
122 * NULL gets returned.
123 *
124 * @param[in,out] store Member store
125 * @param[in] message Message
126 * @return Member or NULL
127 */
128struct GNUNET_MESSENGER_Member*
129get_store_member_of (struct GNUNET_MESSENGER_MemberStore *store,
130 const struct GNUNET_MESSENGER_Message *message);
131
132/**
133 * Adds a member to a <i>store</i> under a specific <i>id</i> and returns it on success.
134 *
135 * @param[in,out] store Member store
136 * @param[in] id Member id
137 * @return Member or NULL
138 */
139struct GNUNET_MESSENGER_Member*
140add_store_member (struct GNUNET_MESSENGER_MemberStore *store,
141 const struct GNUNET_ShortHashCode *id);
142
143/**
144 * Iterate through all member sessions currently connected to the members of the given
145 * member <i>store</i> and call the provided iterator callback with a selected closure.
146 * The function will return the amount of members it iterated through.
147 *
148 * @param[in,out] store Member store
149 * @param[in] it Iterator callback
150 * @param[in,out] cls Closure
151 * @return Amount of members iterated through
152 */
153int
154iterate_store_members (struct GNUNET_MESSENGER_MemberStore *store,
155 GNUNET_MESSENGER_MemberIteratorCallback it,
156 void *cls);
157
158#endif //GNUNET_SERVICE_MESSENGER_MEMBER_STORE_H