aboutsummaryrefslogtreecommitdiff
path: root/src/messenger/gnunet-service-messenger_member_session.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/messenger/gnunet-service-messenger_member_session.h')
-rw-r--r--src/messenger/gnunet-service-messenger_member_session.h288
1 files changed, 0 insertions, 288 deletions
diff --git a/src/messenger/gnunet-service-messenger_member_session.h b/src/messenger/gnunet-service-messenger_member_session.h
deleted file mode 100644
index bf4d10f67..000000000
--- a/src/messenger/gnunet-service-messenger_member_session.h
+++ /dev/null
@@ -1,288 +0,0 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2021 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_session.h
23 * @brief GNUnet MESSENGER service
24 */
25
26#ifndef GNUNET_SERVICE_MESSENGER_MEMBER_SESSION_H
27#define GNUNET_SERVICE_MESSENGER_MEMBER_SESSION_H
28
29#include "platform.h"
30#include "gnunet_crypto_lib.h"
31#include "gnunet_container_lib.h"
32#include "gnunet_identity_service.h"
33#include "gnunet_time_lib.h"
34
35#include "gnunet-service-messenger_member.h"
36
37#include "messenger_api_contact.h"
38
39struct GNUNET_MESSENGER_MemberSession {
40 struct GNUNET_MESSENGER_Member *member;
41
42 struct GNUNET_IDENTITY_PublicKey public_key;
43 struct GNUNET_HashCode context;
44
45 struct GNUNET_MESSENGER_Contact *contact;
46
47 struct GNUNET_CONTAINER_MultiHashMap *history;
48 struct GNUNET_MESSENGER_ListMessages messages;
49
50 struct GNUNET_MESSENGER_MemberSession* prev;
51 struct GNUNET_MESSENGER_MemberSession* next;
52
53 struct GNUNET_TIME_Absolute start;
54
55 int closed;
56 int completed;
57};
58
59/**
60 * Creates and allocates a new member session of a <i>member</i> with a given
61 * public key.
62 *
63 * If the creation fails, NULL gets returned.
64 *
65 * @param[in/out] member Member
66 * @param[in] pubkey Public key of EGO
67 * @return New member session
68 */
69struct GNUNET_MESSENGER_MemberSession*
70create_member_session (struct GNUNET_MESSENGER_Member *member,
71 const struct GNUNET_IDENTITY_PublicKey *pubkey);
72
73/**
74 * Creates and allocates a new member session closing and replacing a given
75 * other <i>session</i> of the same member. The new session could have significant
76 * changes to the members public key or its member id depending on the used
77 * <i>message</i> to switch session. The new session will be linked to the old
78 * one.
79 *
80 * @param[in/out] session Old member session
81 * @param[in] message Message
82 * @param[in] hash Hash of message
83 * @return New member session
84 */
85struct GNUNET_MESSENGER_MemberSession*
86switch_member_session (struct GNUNET_MESSENGER_MemberSession *session,
87 const struct GNUNET_MESSENGER_Message *message,
88 const struct GNUNET_HashCode *hash);
89
90/**
91 * Destroys a member session and frees its memory fully.
92 *
93 * @param[in/out] session Member session
94 */
95void
96destroy_member_session(struct GNUNET_MESSENGER_MemberSession* session);
97
98/**
99 * Resets a given member <i>session</i> which re-opens a member
100 * session for new usage. Every connection to other sessions will be
101 * be dropped. The member sessions messages will be cleared but old
102 * history from uncompleted sessions however can be reused!
103 *
104 * @param[in/out] session Member session
105 * @param[in] hash Hash of initial message (JOIN message!)
106 * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise
107 */
108int
109reset_member_session (struct GNUNET_MESSENGER_MemberSession* session,
110 const struct GNUNET_HashCode *hash);
111
112/**
113 * Closes a given member <i>session</i> which opens the request
114 * for completion of the given member session.
115 *
116 * Closing a session may complete a session and can't be used without
117 * a reset! ( @see #reset_member_session() )
118 *
119 * @param[in/out] session Member session
120 */
121void
122close_member_session (struct GNUNET_MESSENGER_MemberSession* session);
123
124/**
125 * Returns if the given member <i>session</i> has been closed.
126 *
127 * @param[in] session Member session
128 * @return #GNUNET_YES or #GNUNET_NO
129 */
130int
131is_member_session_closed (const struct GNUNET_MESSENGER_MemberSession* session);
132
133/**
134 * Returns if the given member <i>session</i> has been completed.
135 *
136 * A completed member session can't verify any message as its own and
137 * it won't add any message to its history.
138 *
139 * @param[in] session Member session
140 * @return #GNUNET_YES or #GNUNET_NO
141 */
142int
143is_member_session_completed (const struct GNUNET_MESSENGER_MemberSession* session);
144
145/**
146 * Returns the timestamp of the member <i>session</i>'s start.
147 *
148 * @param[in] session Member session
149 * @return Absolute timestamp
150 */
151struct GNUNET_TIME_Absolute
152get_member_session_start (const struct GNUNET_MESSENGER_MemberSession* session);
153
154/**
155 * Returns the key of the room a given member <i>session</i> belongs to.
156 *
157 * @param[in] session Member session
158 * @return Key of room
159 */
160const struct GNUNET_HashCode*
161get_member_session_key (const struct GNUNET_MESSENGER_MemberSession* session);
162
163/**
164 * Returns the member id of a given member <i>session</i>.
165 *
166 * @param[in] session Member session
167 * @return Member id
168 */
169const struct GNUNET_ShortHashCode*
170get_member_session_id (const struct GNUNET_MESSENGER_MemberSession* session);
171
172/**
173 * Returns the public key from an EGO of a given member <i>session</i>.
174 *
175 * @param[in] session Member session
176 * @return Public key of EGO
177 */
178const struct GNUNET_IDENTITY_PublicKey*
179get_member_session_public_key (const struct GNUNET_MESSENGER_MemberSession* session);
180
181/**
182 * Returns the member context of a given member <i>session</i>.
183 *
184 * @param[in] session Member session
185 * @return Member context as hash
186 */
187const struct GNUNET_HashCode*
188get_member_session_context (const struct GNUNET_MESSENGER_MemberSession* session);
189
190/**
191 * Returns the contact which is connected to a given member <i>session</i>.
192 *
193 * @param[in] session Member session
194 * @return Contact
195 */
196struct GNUNET_MESSENGER_Contact*
197get_member_session_contact (struct GNUNET_MESSENGER_MemberSession* session);
198
199/**
200 * Verifies a given member <i>session</i> as sender of a selected <i>message</i> and
201 * its <i>hash</i>. The function returns #GNUNET_OK if the message session is verified
202 * as sender, otherwise #GNUNET_SYSERR.
203 *
204 * @see #is_member_session_completed() for verification.
205 *
206 * @param[in] session Member session
207 * @param[in] message Message
208 * @param[in] hash Hash of message
209 * @return #GNUNET_OK on success, otherwise #GNUNET_SYSERR
210 */
211int
212verify_member_session_as_sender (const struct GNUNET_MESSENGER_MemberSession *session,
213 const struct GNUNET_MESSENGER_Message *message,
214 const struct GNUNET_HashCode *hash);
215
216/**
217 * Checks the history of a <i>session</i> for a specific message which is identified
218 * by its <i>hash</i> and if the <i>ownership</i> flag is set, if the message is
219 * owned by the sessions contact.
220 *
221 * @param[in] session Member session
222 * @param[in] hash Hash of message
223 * @param[in] ownership Ownership flag
224 * @return #GNUNET_YES if found, otherwise #GNUNET_NO
225 */
226int
227check_member_session_history (const struct GNUNET_MESSENGER_MemberSession *session,
228 const struct GNUNET_HashCode *hash, int ownership);
229
230/**
231 * Adds a given <i>message</i> to the history of a <i>session</i> using the messages
232 * <i>hash</i>. The ownership will be set automatically.
233 *
234 * @see #is_member_session_completed() for updating a history.
235 *
236 * @param[in/out] session Member session
237 * @param[in] message Message
238 * @param[in] hash Hash of message
239 */
240void
241update_member_session_history (struct GNUNET_MESSENGER_MemberSession *session,
242 const struct GNUNET_MESSENGER_Message *message,
243 const struct GNUNET_HashCode *hash);
244
245/**
246 * Removes a message from the history of a <i>session</i> using the messages
247 * <i>hash</i>.
248 *
249 * @param[in/out] session Member session
250 * @param[in] hash Hash of message
251 */
252void
253clear_member_session_history (struct GNUNET_MESSENGER_MemberSession *session,
254 const struct GNUNET_HashCode *hash);
255
256/**
257 * Loads data from a <i>directory</i> into a new allocated and created member
258 * session of a <i>member</i> if the required information can be read from the
259 * content of the given directory.
260 *
261 * @param[out] member Member
262 * @param[in] directory Path to a directory
263 */
264void
265load_member_session (struct GNUNET_MESSENGER_Member *member, const char *directory);
266
267/**
268 * Loads the connection from one <i>session</i> to another through the
269 * next attribute. Necessary information will be loaded from a configuration
270 * file inside of a given <i>directory</i>.
271 *
272 * @param[in/out] session Member session
273 * @param[in] directory Path to a directory
274 */
275void
276load_member_session_next (struct GNUNET_MESSENGER_MemberSession *session, const char *directory);
277
278/**
279 * Saves data from a member <i>session</i> into a <i>directory</i> which can be
280 * load to restore the member session completely.
281 *
282 * @param[in] session Member session
283 * @param[in] directory Path to a directory
284 */
285void
286save_member_session (struct GNUNET_MESSENGER_MemberSession *session, const char *directory);
287
288#endif //GNUNET_SERVICE_MESSENGER_MEMBER_SESSION_H