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 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  */
28 
31 {
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 
50 {
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 
63 {
65 }
66 
69 {
71 
72  if (!message)
73  return NULL;
74 
75  message->body.name.name = GNUNET_strdup(name);
76  return message;
77 }
78 
81 {
83 
84  if (!message)
85  return NULL;
86 
87  GNUNET_IDENTITY_key_get_public (key, &(message->body.key.key));
88  return message;
89 }
90 
93 {
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 
109 create_message_id (const struct GNUNET_ShortHashCode *unique_id)
110 {
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 
123 {
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 
137 create_message_merge (const struct GNUNET_HashCode *previous)
138 {
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 
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 
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 
170 {
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 
183 create_message_text (const char *text)
184 {
186 
187  if (!message)
188  return NULL;
189 
190  message->body.text.text = GNUNET_strdup(text);
191  return message;
192 }
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.
struct GNUNET_ShortHashCode unique_id
The new unique id for the receiver in a room.
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
A private key for an identity as per LSD0001.
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
struct GNUNET_MESSENGER_Message * create_message_info(struct GNUNET_MESSENGER_Ego *ego, struct GNUNET_CONTAINER_MultiShortmap *members)
Creates and allocates a new info message containing the hosts public key and a newly generated unique...
struct GNUNET_MESSENGER_Message * create_message(enum GNUNET_MESSENGER_MessageKind kind)
Creates and allocates a new message with a specific kind.
GNUnet MESSENGER service.
char * text
The containing text.
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
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_HashCode previous
The hash of a second previous message.
struct GNUNET_MESSENGER_MessageMiss miss
struct GNUNET_MESSENGER_MessageBody body
Body.
struct GNUNET_MESSENGER_Message * create_message_join(struct GNUNET_MESSENGER_Ego *ego)
Creates and allocates a new join message containing the clients public key.
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.
struct GNUNET_MESSENGER_MessageName name
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.
struct GNUNET_HashCode key
The key used in the DHT.
Internal representation of the hash map.
struct GNUNET_MESSENGER_MessageInfo info
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.
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:311
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
int generate_free_member_id(struct GNUNET_ShortHashCode *id, const struct GNUNET_CONTAINER_MultiShortmap *members)
Tries to generate an unused member id and store it into the id parameter.
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...