GNUnet  0.19.5
gnunet-service-messenger_message_kind.c File Reference

GNUnet MESSENGER service. More...

Include dependency graph for gnunet-service-messenger_message_kind.c:

Go to the source code of this file.

Functions

struct GNUNET_MESSENGER_Messagecreate_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 unique member id. More...
 
struct GNUNET_MESSENGER_Messagecreate_message_join (const struct GNUNET_MESSENGER_Ego *ego)
 Creates and allocates a new join message containing the clients EGO public key. More...
 
struct GNUNET_MESSENGER_Messagecreate_message_leave ()
 Creates and allocates a new leave message. More...
 
struct GNUNET_MESSENGER_Messagecreate_message_name (const char *name)
 Creates and allocates a new name message containing the name to change to. More...
 
struct GNUNET_MESSENGER_Messagecreate_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 private counterpart. More...
 
struct GNUNET_MESSENGER_Messagecreate_message_peer (const struct GNUNET_MESSENGER_Service *service)
 Creates and allocates a new peer message containing a services peer identity. More...
 
struct GNUNET_MESSENGER_Messagecreate_message_id (const struct GNUNET_ShortHashCode *unique_id)
 Creates and allocates a new id message containing the unique member id to change to. More...
 
struct GNUNET_MESSENGER_Messagecreate_message_miss (const struct GNUNET_PeerIdentity *peer)
 Creates and allocates a new miss message containing the missing peer identity. More...
 
struct GNUNET_MESSENGER_Messagecreate_message_merge (const struct GNUNET_HashCode *previous)
 Creates and allocates a new merge message containing the hash of a second previous message besides the regular previous message mentioned in a messages header. More...
 
struct GNUNET_MESSENGER_Messagecreate_message_request (const struct GNUNET_HashCode *hash)
 Creates and allocates a new request message containing the hash of a missing message. More...
 
struct GNUNET_MESSENGER_Messagecreate_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 using a given key as shared secret for communication. More...
 
struct GNUNET_MESSENGER_Messagecreate_message_text (const char *text)
 Creates and allocates a new text message containing a string representing text. More...
 
struct GNUNET_MESSENGER_Messagecreate_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 specific delay. More...
 

Detailed Description

GNUnet MESSENGER service.

Author
Tobias Frisch

Definition in file gnunet-service-messenger_message_kind.c.

Function Documentation

◆ create_message_info()

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 unique member id.

(all values are stored as copy)

Parameters
[in]egoEGO of the host
[in]membersMap of all assigned member ids
Returns
New message

Definition at line 32 of file gnunet-service-messenger_message_kind.c.

33 {
34  if (!ego)
35  return NULL;
36 
38 
39  if (!message)
40  return NULL;
41 
42  GNUNET_memcpy(&(message->body.info.host_key), &(ego->pub), sizeof(ego->pub));
43 
45 
46  return message;
47 }
#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.
@ GNUNET_MESSENGER_KIND_INFO
The info kind.
struct GNUNET_MESSENGER_Message * create_message(enum GNUNET_MESSENGER_MessageKind kind)
Creates and allocates a new message with a specific kind.
struct GNUNET_IDENTITY_PublicKey pub
struct GNUNET_MESSENGER_MessageInfo info
uint32_t messenger_version
The version of GNUnet Messenger API.
struct GNUNET_IDENTITY_PublicKey host_key
The senders key to verify its signatures.
struct GNUNET_MESSENGER_MessageBody body
Body.

References GNUNET_MESSENGER_Message::body, create_message(), GNUNET_memcpy, GNUNET_MESSENGER_KIND_INFO, GNUNET_MESSENGER_VERSION, GNUNET_MESSENGER_MessageInfo::host_key, GNUNET_MESSENGER_MessageBody::info, GNUNET_MESSENGER_MessageInfo::messenger_version, and GNUNET_MESSENGER_Ego::pub.

Referenced by recv_message_info(), and send_room_info().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ create_message_join()

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.

(all values are stored as copy)

Parameters
[in]egoEGO of the client
Returns
New message

Definition at line 50 of file gnunet-service-messenger_message_kind.c.

51 {
52  if (!ego)
53  return NULL;
54 
56 
57  if (!message)
58  return NULL;
59 
60  GNUNET_memcpy(&(message->body.join.key), &(ego->pub), sizeof(ego->pub));
61 
62  return message;
63 }
@ GNUNET_MESSENGER_KIND_JOIN
The join kind.
struct GNUNET_MESSENGER_MessageJoin join
struct GNUNET_IDENTITY_PublicKey key
The senders public key to verify its signatures.

References GNUNET_MESSENGER_Message::body, create_message(), GNUNET_memcpy, GNUNET_MESSENGER_KIND_JOIN, GNUNET_MESSENGER_MessageBody::join, GNUNET_MESSENGER_MessageJoin::key, and GNUNET_MESSENGER_Ego::pub.

Referenced by join_room().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ create_message_leave()

struct GNUNET_MESSENGER_Message* create_message_leave ( )

Creates and allocates a new leave message.

Returns
New message

Definition at line 66 of file gnunet-service-messenger_message_kind.c.

67 {
69 }
@ GNUNET_MESSENGER_KIND_LEAVE
The leave kind.

References create_message(), and GNUNET_MESSENGER_KIND_LEAVE.

Referenced by close_service_room().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ create_message_name()

struct GNUNET_MESSENGER_Message* create_message_name ( const char *  name)

Creates and allocates a new name message containing the name to change to.

(all values are stored as copy)

Parameters
[in]nameNew name
Returns
New message

Definition at line 72 of file gnunet-service-messenger_message_kind.c.

73 {
74  if (!name)
75  return NULL;
76 
78 
79  if (!message)
80  return NULL;
81 
82  message->body.name.name = GNUNET_strdup(name);
83  return message;
84 }
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
@ GNUNET_MESSENGER_KIND_NAME
The name kind.
const char * name
struct GNUNET_MESSENGER_MessageName name
char * name
The new name which replaces the current senders name.

References GNUNET_MESSENGER_Message::body, create_message(), GNUNET_MESSENGER_KIND_NAME, GNUNET_strdup, name, GNUNET_MESSENGER_MessageName::name, and GNUNET_MESSENGER_MessageBody::name.

Referenced by callback_set_handle_name().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ create_message_key()

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 private counterpart.

(all values are stored as copy)

Parameters
[in]keyPrivate key of EGO
Returns
New message

Definition at line 87 of file gnunet-service-messenger_message_kind.c.

88 {
89  if (!key)
90  return NULL;
91 
93 
94  if (!message)
95  return NULL;
96 
98  return message;
99 }
struct GNUNET_HashCode key
The key used in the DHT.
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:179
@ GNUNET_MESSENGER_KIND_KEY
The key kind.
struct GNUNET_MESSENGER_MessageKey key
struct GNUNET_IDENTITY_PublicKey key
The new public key which replaces the current senders public key.

References GNUNET_MESSENGER_Message::body, create_message(), GNUNET_IDENTITY_key_get_public(), GNUNET_MESSENGER_KIND_KEY, key, GNUNET_MESSENGER_MessageKey::key, and GNUNET_MESSENGER_MessageBody::key.

Referenced by set_srv_handle_ego().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ create_message_peer()

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.

(all values are stored as copy)

Parameters
[in]serviceService
Returns
New message

Definition at line 102 of file gnunet-service-messenger_message_kind.c.

103 {
104  if (!service)
105  return NULL;
106 
108 
109  if (!message)
110  return NULL;
111 
113  return message;
114  else
115  {
116  destroy_message (message);
117  return NULL;
118  }
119 }
static struct GNUNET_SERVICE_Handle * service
Handle to our service instance.
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.
@ GNUNET_OK
@ GNUNET_MESSENGER_KIND_PEER
The peer kind.
void destroy_message(struct GNUNET_MESSENGER_Message *message)
Destroys a message and frees its memory fully.
struct GNUNET_MESSENGER_MessagePeer peer
struct GNUNET_PeerIdentity peer
The peer identity of the sender opening a room.

References GNUNET_MESSENGER_Message::body, create_message(), destroy_message(), get_service_peer_identity(), GNUNET_MESSENGER_KIND_PEER, GNUNET_OK, GNUNET_MESSENGER_MessagePeer::peer, GNUNET_MESSENGER_MessageBody::peer, and service.

Referenced by check_srv_room_peer_status(), and open_srv_room().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ create_message_id()

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.

(all values are stored as copy)

Parameters
[in]unique_idUnique member id
Returns
New message

Definition at line 122 of file gnunet-service-messenger_message_kind.c.

123 {
124  if (!unique_id)
125  return NULL;
126 
128 
129  if (!message)
130  return NULL;
131 
132  GNUNET_memcpy(&(message->body.id.id), unique_id, sizeof(struct GNUNET_ShortHashCode));
133 
134  return message;
135 }
@ GNUNET_MESSENGER_KIND_ID
The id kind.
struct GNUNET_MESSENGER_MessageId id
struct GNUNET_ShortHashCode id
The new id which will replace the senders id in a room.
A 256-bit hashcode.

References GNUNET_MESSENGER_Message::body, create_message(), GNUNET_memcpy, GNUNET_MESSENGER_KIND_ID, GNUNET_MESSENGER_MessageId::id, and GNUNET_MESSENGER_MessageBody::id.

Referenced by solve_srv_room_member_collisions().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ create_message_miss()

struct GNUNET_MESSENGER_Message* create_message_miss ( const struct GNUNET_PeerIdentity peer)

Creates and allocates a new miss message containing the missing peer identity.

(all values are stored as copy)

Parameters
[in]peerMissing peer identity
Returns
New message

Definition at line 138 of file gnunet-service-messenger_message_kind.c.

139 {
140  if (!peer)
141  return NULL;
142 
144 
145  if (!message)
146  {
147  return NULL;
148  }
149 
150  GNUNET_memcpy(&(message->body.miss.peer), peer, sizeof(struct GNUNET_PeerIdentity));
151 
152  return message;
153 }
@ GNUNET_MESSENGER_KIND_MISS
The miss kind.
struct GNUNET_MESSENGER_MessageMiss miss
struct GNUNET_PeerIdentity peer
The peer identity of a disconnected door to a room.
The identity of the host (wraps the signing key of the peer).
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.

References GNUNET_MESSENGER_Message::body, create_message(), GNUNET_memcpy, GNUNET_MESSENGER_KIND_MISS, GNUNET_MESSENGER_MessageBody::miss, GNUNET_MESSENGER_MessageMiss::peer, and peer.

Referenced by callback_room_disconnect().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ create_message_merge()

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 the regular previous message mentioned in a messages header.

(all values are stored as copy)

Parameters
[in]previousHash of message
Returns
New message

Definition at line 156 of file gnunet-service-messenger_message_kind.c.

157 {
158  if (!previous)
159  return NULL;
160 
162 
163  if (!message)
164  return NULL;
165 
166  GNUNET_memcpy(&(message->body.merge.previous), previous, sizeof(struct GNUNET_HashCode));
167 
168  return message;
169 }
@ GNUNET_MESSENGER_KIND_MERGE
The merge kind.
A 512-bit hashcode.
struct GNUNET_MESSENGER_MessageMerge merge
struct GNUNET_HashCode previous
The hash of a second previous message.

References GNUNET_MESSENGER_Message::body, create_message(), GNUNET_memcpy, GNUNET_MESSENGER_KIND_MERGE, GNUNET_MESSENGER_MessageBody::merge, and GNUNET_MESSENGER_MessageMerge::previous.

Referenced by callback_room_merge(), and merge_srv_room_last_messages().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ create_message_request()

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.

(all values are stored as copy)

Parameters
[in]hashHash of message
Returns
New message

Definition at line 172 of file gnunet-service-messenger_message_kind.c.

173 {
174  if (!hash)
175  return NULL;
176 
177  struct GNUNET_HashCode zero;
178  memset (&zero, 0, sizeof(zero));
179 
180  if (0 == GNUNET_CRYPTO_hash_cmp (hash, &zero))
181  return NULL;
182 
184 
185  if (!message)
186  return NULL;
187 
188  GNUNET_memcpy(&(message->body.request.hash), hash, sizeof(struct GNUNET_HashCode));
189 
190  return message;
191 }
static const struct GNUNET_IDENTITY_PrivateKey zero
Public key of all zeros.
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:221
@ GNUNET_MESSENGER_KIND_REQUEST
The request kind.
struct GNUNET_MESSENGER_MessageRequest request
struct GNUNET_HashCode hash
The hash of the requested message.

References GNUNET_MESSENGER_Message::body, create_message(), GNUNET_CRYPTO_hash_cmp(), GNUNET_memcpy, GNUNET_MESSENGER_KIND_REQUEST, GNUNET_MESSENGER_MessageRequest::hash, GNUNET_MESSENGER_MessageBody::request, and zero.

Referenced by callback_found_message().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ create_message_invite()

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 using a given key as shared secret for communication.

(all values are stored as copy)

Parameters
[in]doorPeer identity
[in]keyShared secret of a room
Returns
New message

Definition at line 194 of file gnunet-service-messenger_message_kind.c.

196 {
197  if ((!door) || (!key))
198  return NULL;
199 
201 
202  if (!message)
203  return NULL;
204 
205  GNUNET_memcpy(&(message->body.invite.door), door, sizeof(struct GNUNET_PeerIdentity));
206  GNUNET_memcpy(&(message->body.invite.key), key, sizeof(struct GNUNET_HashCode));
207 
208  return message;
209 }
@ GNUNET_MESSENGER_KIND_INVITE
The invite kind.
struct GNUNET_MESSENGER_MessageInvite invite
struct GNUNET_HashCode key
The hash identifying the port of the room.
struct GNUNET_PeerIdentity door
The peer identity of an open door to a room.

References GNUNET_MESSENGER_Message::body, create_message(), GNUNET_MESSENGER_MessageInvite::door, GNUNET_memcpy, GNUNET_MESSENGER_KIND_INVITE, GNUNET_MESSENGER_MessageBody::invite, key, and GNUNET_MESSENGER_MessageInvite::key.

Here is the call graph for this function:

◆ create_message_text()

struct GNUNET_MESSENGER_Message* create_message_text ( const char *  text)

Creates and allocates a new text message containing a string representing text.

(all values are stored as copy)

Parameters
[in]textText
Returns
New message

Definition at line 212 of file gnunet-service-messenger_message_kind.c.

213 {
214  if (!text)
215  return NULL;
216 
218 
219  if (!message)
220  return NULL;
221 
222  message->body.text.text = GNUNET_strdup(text);
223  return message;
224 }
@ GNUNET_MESSENGER_KIND_TEXT
The text kind.
struct GNUNET_MESSENGER_MessageText text
char * text
The containing text.

References GNUNET_MESSENGER_Message::body, create_message(), GNUNET_MESSENGER_KIND_TEXT, GNUNET_strdup, GNUNET_MESSENGER_MessageText::text, and GNUNET_MESSENGER_MessageBody::text.

Here is the call graph for this function:

◆ create_message_delete()

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 specific delay.

(all values are stored as copy)

Parameters
[in]hashHash of message
[in]delayDelay of deletion
Returns
New message

Definition at line 227 of file gnunet-service-messenger_message_kind.c.

229 {
230  if (!hash)
231  return NULL;
232 
234 
235  if (!message)
236  return NULL;
237 
238  GNUNET_memcpy(&(message->body.deletion.hash), hash, sizeof(struct GNUNET_HashCode));
240 
241  return message;
242 }
static struct GNUNET_TIME_Relative delay
When should dkg communication start?
@ GNUNET_MESSENGER_KIND_DELETE
The delete kind.
struct GNUNET_TIME_RelativeNBO GNUNET_TIME_relative_hton(struct GNUNET_TIME_Relative a)
Convert relative time to network byte order.
Definition: time.c:618
struct GNUNET_MESSENGER_MessageDelete deletion
struct GNUNET_HashCode hash
The hash of the message to delete.
struct GNUNET_TIME_RelativeNBO delay
The delay of the delete operation to get processed.

References GNUNET_MESSENGER_Message::body, create_message(), GNUNET_MESSENGER_MessageDelete::delay, delay, GNUNET_MESSENGER_MessageBody::deletion, GNUNET_memcpy, GNUNET_MESSENGER_KIND_DELETE, GNUNET_TIME_relative_hton(), and GNUNET_MESSENGER_MessageDelete::hash.

Here is the call graph for this function: