aboutsummaryrefslogtreecommitdiff
path: root/src/service/messenger/gnunet-service-messenger_operation.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/service/messenger/gnunet-service-messenger_operation.h')
-rw-r--r--src/service/messenger/gnunet-service-messenger_operation.h128
1 files changed, 128 insertions, 0 deletions
diff --git a/src/service/messenger/gnunet-service-messenger_operation.h b/src/service/messenger/gnunet-service-messenger_operation.h
new file mode 100644
index 000000000..26282bea8
--- /dev/null
+++ b/src/service/messenger/gnunet-service-messenger_operation.h
@@ -0,0 +1,128 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2021--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_operation.h
23 * @brief GNUnet MESSENGER service
24 */
25
26#ifndef GNUNET_SERVICE_MESSENGER_OPERATION_H
27#define GNUNET_SERVICE_MESSENGER_OPERATION_H
28
29#include "gnunet_util_lib.h"
30#include "gnunet_scheduler_lib.h"
31#include "gnunet_time_lib.h"
32
33enum GNUNET_MESSENGER_OperationType
34{
35 GNUNET_MESSENGER_OP_REQUEST = 1,
36 GNUNET_MESSENGER_OP_DELETE = 2,
37 GNUNET_MESSENGER_OP_MERGE = 3,
38
39 GNUNET_MESSENGER_OP_UNKNOWN = 0
40};
41
42struct GNUNET_MESSENGER_OperationStore;
43
44struct GNUNET_MESSENGER_Operation
45{
46 enum GNUNET_MESSENGER_OperationType type;
47
48 struct GNUNET_HashCode hash;
49 struct GNUNET_TIME_Absolute timestamp;
50
51 struct GNUNET_MESSENGER_OperationStore *store;
52 struct GNUNET_SCHEDULER_Task *task;
53};
54
55/**
56 * Creates and allocates a new operation under a given <i>hash</i>.
57 *
58 * @param[in] hash Hash of message
59 */
60struct GNUNET_MESSENGER_Operation*
61create_operation (const struct GNUNET_HashCode *hash);
62
63/**
64 * Destroys an operation and frees its memory fully.
65 *
66 * @param[in,out] op Operation
67 */
68void
69destroy_operation (struct GNUNET_MESSENGER_Operation *op);
70
71/**
72 * Loads data from a configuration file at a selected <i>path</i> into
73 * a new allocated and created operation for a specific operation
74 * <i>store</i> if the required information could be read successfully.
75 *
76 * The method will return the new operation and it will be started
77 * automatically to match its timestamp of execution.
78 *
79 * If the method fails to restore any valid operation from the file,
80 * NULL gets returned instead.
81 *
82 * @param[in,out] store Operation store
83 * @param[in] path Path of a configuration file
84 */
85struct GNUNET_MESSENGER_Operation*
86load_operation (struct GNUNET_MESSENGER_OperationStore *store,
87 const char *path);
88
89/**
90 * Saves data from an <i>operation</i> into a configuration file at a
91 * selected <i>path</i> which can be load to restore the operation
92 * completely and continue its process.
93 *
94 * @param[in] op Operation
95 * @param[in] path Path of a configuration file
96 */
97void
98save_operation (const struct GNUNET_MESSENGER_Operation *op,
99 const char *path);
100
101/**
102 * Starts an inactive operation with a given <i>delay</i> in a
103 * specific operation <i>store</i>. The method will replace the
104 * operations type to process it correctly. An operation can't be
105 * started twice, it has to be stopped or fully processed first.
106 *
107 * @param[in,out] op Operation
108 * @param[in] type Type of operation
109 * @param[in,out] store Operation store
110 * @param[in] delay Delay
111 * @return #GNUNET_OK on success, otherwise #GNUNET_SYSERR
112 */
113enum GNUNET_GenericReturnValue
114start_operation (struct GNUNET_MESSENGER_Operation *op,
115 enum GNUNET_MESSENGER_OperationType type,
116 struct GNUNET_MESSENGER_OperationStore *store,
117 struct GNUNET_TIME_Relative delay);
118
119/**
120 * Stops an active operation and resets its type to be
121 * #GNUNET_MESSENGER_OP_UNKNOWN.
122 *
123 * @return #GNUNET_OK on success, otherwise #GNUNET_SYSERR
124 */
125enum GNUNET_GenericReturnValue
126stop_operation (struct GNUNET_MESSENGER_Operation *op);
127
128#endif //GNUNET_SERVICE_MESSENGER_OPERATION_H