aboutsummaryrefslogtreecommitdiff
path: root/src/messenger/gnunet-service-messenger_message_kind.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/messenger/gnunet-service-messenger_message_kind.c')
-rw-r--r--src/messenger/gnunet-service-messenger_message_kind.c192
1 files changed, 192 insertions, 0 deletions
diff --git a/src/messenger/gnunet-service-messenger_message_kind.c b/src/messenger/gnunet-service-messenger_message_kind.c
new file mode 100644
index 000000000..9c829fe09
--- /dev/null
+++ b/src/messenger/gnunet-service-messenger_message_kind.c
@@ -0,0 +1,192 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2020 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_message_kind.c
23 * @brief GNUnet MESSENGER service
24 */
25
26#include "gnunet-service-messenger_message_kind.h"
27#include "gnunet-service-messenger_util.h"
28
29struct GNUNET_MESSENGER_Message*
30create_message_info (struct GNUNET_MESSENGER_Ego *ego, struct GNUNET_CONTAINER_MultiShortmap *members)
31{
32 struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_INFO);
33
34 if (!message)
35 return NULL;
36
37 GNUNET_memcpy(&(message->body.info.host_key), &(ego->pub), sizeof(ego->pub));
38
39 if (GNUNET_YES == generate_free_member_id (&(message->body.info.unique_id), members))
40 return message;
41 else
42 {
43 destroy_message (message);
44 return NULL;
45 }
46}
47
48struct GNUNET_MESSENGER_Message*
49create_message_join (struct GNUNET_MESSENGER_Ego *ego)
50{
51 struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_JOIN);
52
53 if (!message)
54 return NULL;
55
56 GNUNET_memcpy(&(message->body.join.key), &(ego->pub), sizeof(ego->pub));
57
58 return message;
59}
60
61struct GNUNET_MESSENGER_Message*
62create_message_leave ()
63{
64 return create_message (GNUNET_MESSENGER_KIND_LEAVE);
65}
66
67struct GNUNET_MESSENGER_Message*
68create_message_name (const char *name)
69{
70 struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_NAME);
71
72 if (!message)
73 return NULL;
74
75 message->body.name.name = GNUNET_strdup(name);
76 return message;
77}
78
79struct GNUNET_MESSENGER_Message*
80create_message_key (const struct GNUNET_IDENTITY_PrivateKey *key)
81{
82 struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_KEY);
83
84 if (!message)
85 return NULL;
86
87 GNUNET_IDENTITY_key_get_public (key, &(message->body.key.key));
88 return message;
89}
90
91struct GNUNET_MESSENGER_Message*
92create_message_peer (const struct GNUNET_MESSENGER_Service *service)
93{
94 struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_PEER);
95
96 if (!message)
97 return NULL;
98
99 if (GNUNET_OK == get_service_peer_identity (service, &(message->body.peer.peer)))
100 return message;
101 else
102 {
103 destroy_message (message);
104 return NULL;
105 }
106}
107
108struct GNUNET_MESSENGER_Message*
109create_message_id (const struct GNUNET_ShortHashCode *unique_id)
110{
111 struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_ID);
112
113 if (!message)
114 return NULL;
115
116 GNUNET_memcpy(&(message->body.id.id), unique_id, sizeof(struct GNUNET_ShortHashCode));
117
118 return message;
119}
120
121struct GNUNET_MESSENGER_Message*
122create_message_miss (const struct GNUNET_PeerIdentity *peer)
123{
124 struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_MISS);
125
126 if (!message)
127 {
128 return NULL;
129 }
130
131 GNUNET_memcpy(&(message->body.miss.peer), peer, sizeof(struct GNUNET_PeerIdentity));
132
133 return message;
134}
135
136struct GNUNET_MESSENGER_Message*
137create_message_merge (const struct GNUNET_HashCode *previous)
138{
139 struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_MERGE);
140
141 if (!message)
142 return NULL;
143
144 GNUNET_memcpy(&(message->body.merge.previous), previous, sizeof(struct GNUNET_HashCode));
145
146 return message;
147}
148
149struct GNUNET_MESSENGER_Message*
150create_message_request (const struct GNUNET_HashCode *hash)
151{
152 struct GNUNET_HashCode zero;
153 memset (&zero, 0, sizeof(zero));
154
155 if (0 == GNUNET_CRYPTO_hash_cmp (hash, &zero))
156 return NULL;
157
158 struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_REQUEST);
159
160 if (!message)
161 return NULL;
162
163 GNUNET_memcpy(&(message->body.request.hash), hash, sizeof(struct GNUNET_HashCode));
164
165 return message;
166}
167
168struct GNUNET_MESSENGER_Message*
169create_message_invite (const struct GNUNET_PeerIdentity *door, const struct GNUNET_HashCode *key)
170{
171 struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_INVITE);
172
173 if (!message)
174 return NULL;
175
176 GNUNET_memcpy(&(message->body.invite.door), door, sizeof(struct GNUNET_PeerIdentity));
177 GNUNET_memcpy(&(message->body.invite.key), key, sizeof(struct GNUNET_HashCode));
178
179 return message;
180}
181
182struct GNUNET_MESSENGER_Message*
183create_message_text (const char *text)
184{
185 struct GNUNET_MESSENGER_Message *message = create_message (GNUNET_MESSENGER_KIND_TEXT);
186
187 if (!message)
188 return NULL;
189
190 message->body.text.text = GNUNET_strdup(text);
191 return message;
192}