GNUnet  0.11.x
gnunet-service-messenger_message_kind.c
Go to the documentation of this file.
1 /*
2  This file is part of GNUnet.
3  Copyright (C) 2020--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  */
27 
28 #include "messenger_api_util.h"
29 
32 {
33  if (!ego)
34  return NULL;
35 
37 
38  if (!message)
39  return NULL;
40 
41  GNUNET_memcpy(&(message->body.info.host_key), &(ego->pub), sizeof(ego->pub));
42 
44 
45  return message;
46 }
47 
50 {
51  if (!ego)
52  return NULL;
53 
55 
56  if (!message)
57  return NULL;
58 
59  GNUNET_memcpy(&(message->body.join.key), &(ego->pub), sizeof(ego->pub));
60 
61  return message;
62 }
63 
66 {
68 }
69 
72 {
73  if (!name)
74  return NULL;
75 
77 
78  if (!message)
79  return NULL;
80 
81  message->body.name.name = GNUNET_strdup(name);
82  return message;
83 }
84 
87 {
88  if (!key)
89  return NULL;
90 
92 
93  if (!message)
94  return NULL;
95 
96  GNUNET_IDENTITY_key_get_public (key, &(message->body.key.key));
97  return message;
98 }
99 
102 {
103  if (!service)
104  return NULL;
105 
107 
108  if (!message)
109  return NULL;
110 
111  if (GNUNET_OK == get_service_peer_identity (service, &(message->body.peer.peer)))
112  return message;
113  else
114  {
115  destroy_message (message);
116  return NULL;
117  }
118 }
119 
121 create_message_id (const struct GNUNET_ShortHashCode *unique_id)
122 {
123  if (!unique_id)
124  return NULL;
125 
127 
128  if (!message)
129  return NULL;
130 
131  GNUNET_memcpy(&(message->body.id.id), unique_id, sizeof(struct GNUNET_ShortHashCode));
132 
133  return message;
134 }
135 
138 {
139  if (!peer)
140  return NULL;
141 
143 
144  if (!message)
145  {
146  return NULL;
147  }
148 
149  GNUNET_memcpy(&(message->body.miss.peer), peer, sizeof(struct GNUNET_PeerIdentity));
150 
151  return message;
152 }
153 
155 create_message_merge (const struct GNUNET_HashCode *previous)
156 {
157  if (!previous)
158  return NULL;
159 
161 
162  if (!message)
163  return NULL;
164 
165  GNUNET_memcpy(&(message->body.merge.previous), previous, sizeof(struct GNUNET_HashCode));
166 
167  return message;
168 }
169 
172 {
173  if (!hash)
174  return NULL;
175 
176  struct GNUNET_HashCode zero;
177  memset (&zero, 0, sizeof(zero));
178 
179  if (0 == GNUNET_CRYPTO_hash_cmp (hash, &zero))
180  return NULL;
181 
183 
184  if (!message)
185  return NULL;
186 
187  GNUNET_memcpy(&(message->body.request.hash), hash, sizeof(struct GNUNET_HashCode));
188 
189  return message;
190 }
191 
194 {
195  if ((!door) || (!key))
196  return NULL;
197 
199 
200  if (!message)
201  return NULL;
202 
203  GNUNET_memcpy(&(message->body.invite.door), door, sizeof(struct GNUNET_PeerIdentity));
204  GNUNET_memcpy(&(message->body.invite.key), key, sizeof(struct GNUNET_HashCode));
205 
206  return message;
207 }
208 
210 create_message_text (const char *text)
211 {
212  if (!text)
213  return NULL;
214 
216 
217  if (!message)
218  return NULL;
219 
220  message->body.text.text = GNUNET_strdup(text);
221  return message;
222 }
223 
226 {
227  if (!hash)
228  return NULL;
229 
231 
232  if (!message)
233  return NULL;
234 
235  GNUNET_memcpy(&(message->body.deletion.hash), hash, sizeof(struct GNUNET_HashCode));
236  message->body.deletion.delay = GNUNET_TIME_relative_hton (delay);
237 
238  return message;
239 }
struct GNUNET_PeerIdentity peer
The peer identity of the sender opening a room.
struct GNUNET_PeerIdentity door
The peer identity of an open door to a room.
struct GNUNET_PeerIdentity peer
The peer identity of a disconnected door to a room.
static struct GNUNET_SERVICE_Handle * service
Handle to our service instance.
GNUnet MESSENGER service.
void destroy_message(struct GNUNET_MESSENGER_Message *message)
Destroys a message and frees its memory fully.
int get_service_peer_identity(const struct GNUNET_MESSENGER_Service *service, struct GNUNET_PeerIdentity *peer)
Tries to write the peer identity of the peer running a service on to the peer parameter.
struct GNUNET_IDENTITY_PublicKey host_key
The senders key to verify its signatures.
struct GNUNET_ShortHashCode id
The new id which will replace the senders id in a room.
struct GNUNET_MESSENGER_MessageText text
struct GNUNET_HashCode hash
The hash of the requested message.
struct GNUNET_MESSENGER_MessageKey key
uint32_t messenger_version
The version of GNUnet Messenger API.
A private key for an identity as per LSD0001.
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
#define GNUNET_MESSENGER_VERSION
Version number of GNUnet Messenger API.
struct GNUNET_MESSENGER_Message * create_message(enum GNUNET_MESSENGER_MessageKind kind)
Creates and allocates a new message with a specific kind.
char * text
The containing text.
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
struct GNUNET_HashCode hash
The hash of the message to delete.
A 256-bit hashcode.
struct GNUNET_MESSENGER_MessageRequest request
struct GNUNET_IDENTITY_PublicKey key
The senders public key to verify its signatures.
struct GNUNET_MESSENGER_Message * create_message_text(const char *text)
Creates and allocates a new text message containing a string representing text.
struct GNUNET_MESSENGER_Message * create_message_request(const struct GNUNET_HashCode *hash)
Creates and allocates a new request message containing the hash of a missing message.
struct GNUNET_MESSENGER_MessageInvite invite
struct GNUNET_IDENTITY_PublicKey pub
struct GNUNET_IDENTITY_PublicKey key
The new public key which replaces the current senders public key.
struct GNUNET_MESSENGER_MessageDelete deletion
struct GNUNET_HashCode previous
The hash of a second previous message.
struct GNUNET_MESSENGER_MessageMiss miss
struct GNUNET_MESSENGER_Message * create_message_info(const struct GNUNET_MESSENGER_Ego *ego)
Creates and allocates a new info message containing the hosts EGO public key and a newly generated un...
struct GNUNET_MESSENGER_MessageBody body
Body.
enum GNUNET_GenericReturnValue GNUNET_IDENTITY_key_get_public(const struct GNUNET_IDENTITY_PrivateKey *privkey, struct GNUNET_IDENTITY_PublicKey *key)
Retrieves the public key representation of a private key.
Definition: identity_api.c:175
struct GNUNET_MESSENGER_Message * create_message_merge(const struct GNUNET_HashCode *previous)
Creates and allocates a new merge message containing the hash of a second previous message besides th...
struct GNUNET_MESSENGER_Message * create_message_id(const struct GNUNET_ShortHashCode *unique_id)
Creates and allocates a new id message containing the unique member id to change to.
struct GNUNET_MESSENGER_MessageMerge merge
struct GNUNET_MESSENGER_Message * create_message_name(const char *name)
Creates and allocates a new name message containing the name to change to.
A 512-bit hashcode.
messenger api: client implementation of GNUnet MESSENGER service
struct GNUNET_MESSENGER_MessageName name
struct GNUNET_MESSENGER_Message * create_message_delete(const struct GNUNET_HashCode *hash, const struct GNUNET_TIME_Relative delay)
Creates and allocates a new delete message containing the hash of a message to delete after a specifi...
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.
struct GNUNET_HashCode key
The key used in the DHT.
struct GNUNET_TIME_RelativeNBO GNUNET_TIME_relative_hton(struct GNUNET_TIME_Relative a)
Convert relative time to network byte order.
Definition: time.c:444
struct GNUNET_MESSENGER_MessageInfo info
struct GNUNET_MESSENGER_Message * create_message_join(const struct GNUNET_MESSENGER_Ego *ego)
Creates and allocates a new join message containing the clients EGO public key.
struct GNUNET_MESSENGER_MessagePeer peer
struct GNUNET_MESSENGER_Message * create_message_miss(const struct GNUNET_PeerIdentity *peer)
Creates and allocates a new miss message containing the missing peer identity.
static struct GNUNET_TIME_Relative delay
When should dkg communication start?
struct GNUNET_MESSENGER_Message * create_message_leave()
Creates and allocates a new leave message.
struct GNUNET_MESSENGER_Message * create_message_invite(const struct GNUNET_PeerIdentity *door, const struct GNUNET_HashCode *key)
Creates and allocates a new invite message containing the peer identity of an entrance peer to a room...
struct GNUNET_MESSENGER_Message * create_message_peer(const struct GNUNET_MESSENGER_Service *service)
Creates and allocates a new peer message containing a services peer identity.
The identity of the host (wraps the signing key of the peer).
const char * name
int GNUNET_CRYPTO_hash_cmp(const struct GNUNET_HashCode *h1, const struct GNUNET_HashCode *h2)
Compare function for HashCodes, producing a total ordering of all hashcodes.
Definition: crypto_hash.c:201
char * name
The new name which replaces the current senders name.
struct GNUNET_HashCode key
The hash identifying the port of the room.
struct GNUNET_MESSENGER_MessageJoin join
struct GNUNET_MESSENGER_MessageId id
struct GNUNET_MESSENGER_Message * create_message_key(const struct GNUNET_IDENTITY_PrivateKey *key)
Creates and allocates a new key message containing the public key to change to derived from its priva...
Time for relative time used by GNUnet, in microseconds.
struct GNUNET_TIME_RelativeNBO delay
The delay of the delete operation to get processed.