GNUnet 0.21.1
gnunet-service-messenger_message_handle.h File Reference
Include dependency graph for gnunet-service-messenger_message_handle.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void handle_message_join (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SenderSession *session, const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received or sent join message to make changes of current member information. More...
 
void handle_message_leave (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SenderSession *session, const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received or sent leave message to make changes of current member information. More...
 
void handle_message_key (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SenderSession *session, const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received or sent key message to change the key of a member and rearrange the contacts accordingly. More...
 
void handle_message_peer (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SenderSession *session, const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received or sent peer message to make changes of the basement in the room. More...
 
void handle_message_id (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SenderSession *session, const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received or sent id message to change a members id. More...
 
void handle_message_miss (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SenderSession *session, const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received or sent miss message to drop a peer from the basement in the room. More...
 
void handle_message_delete (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SenderSession *session, const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received or sent delete message to delete a specific message from the store. More...
 
void handle_message_connection (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SenderSession *session, const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received or sent connection message to update connection information about a peer. More...
 

Function Documentation

◆ handle_message_join()

void handle_message_join ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_SenderSession session,
const struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received or sent join message to make changes of current member information.

(add matching member and clear member info)

Parameters
[in,out]roomRoom of the message
[in,out]sessionSender session
[in]messageJOIN-Message
[in]hashHash of the message

Definition at line 45 of file gnunet-service-messenger_message_handle.c.

49{
50 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Member (%s) joins room (%s).\n",
51 GNUNET_sh2s (&(message->header.sender_id)), GNUNET_h2s (
52 get_srv_room_key (room)));
53
54 if (GNUNET_OK != reset_member_session (session->member, hash))
55 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Resetting member session failed!\n");
56
58 room,
59 &(message->body.join.key),
60 &(message->header.sender_id),
62 );
63}
enum GNUNET_GenericReturnValue reset_member_session(struct GNUNET_MESSENGER_MemberSession *session, const struct GNUNET_HashCode *hash)
Resets a given member session which re-opens a member session for new usage.
void solve_srv_room_member_collisions(struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_CRYPTO_PublicKey *public_key, const struct GNUNET_ShortHashCode *member_id, struct GNUNET_TIME_Absolute timestamp)
Checks for potential collisions with member ids and solves them changing active handles ids if they u...
const struct GNUNET_HashCode * get_srv_room_key(const struct GNUNET_MESSENGER_SrvRoom *room)
Returns the shared secret you need to access a room.
#define GNUNET_log(kind,...)
@ GNUNET_OK
const char * GNUNET_sh2s(const struct GNUNET_ShortHashCode *shc)
Convert a short hash value to a string (for printing debug messages).
const char * GNUNET_h2s(const struct GNUNET_HashCode *hc)
Convert a hash value to a string (for printing debug messages).
@ GNUNET_ERROR_TYPE_ERROR
@ GNUNET_ERROR_TYPE_INFO
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_ntoh(struct GNUNET_TIME_AbsoluteNBO a)
Convert absolute time from network byte order.
Definition: time.c:737
struct GNUNET_MESSENGER_MessageJoin join
struct GNUNET_TIME_AbsoluteNBO timestamp
The timestamp of the message.
struct GNUNET_ShortHashCode sender_id
The senders id inside of the room the message was sent in.
struct GNUNET_CRYPTO_PublicKey key
The senders public key to verify its signatures.
struct GNUNET_MESSENGER_MessageHeader header
Header.
struct GNUNET_MESSENGER_MessageBody body
Body.
struct GNUNET_MESSENGER_MemberSession * member

References GNUNET_MESSENGER_Message::body, get_srv_room_key(), GNUNET_ERROR_TYPE_ERROR, GNUNET_ERROR_TYPE_INFO, GNUNET_h2s(), GNUNET_log, GNUNET_OK, GNUNET_sh2s(), GNUNET_TIME_absolute_ntoh(), GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_MessageBody::join, GNUNET_MESSENGER_MessageJoin::key, GNUNET_MESSENGER_SenderSession::member, reset_member_session(), GNUNET_MESSENGER_MessageHeader::sender_id, solve_srv_room_member_collisions(), and GNUNET_MESSENGER_MessageHeader::timestamp.

Referenced by callback_room_handle_message().

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

◆ handle_message_leave()

void handle_message_leave ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_SenderSession session,
const struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received or sent leave message to make changes of current member information.

(remove matching member and clear member info)

Parameters
[in,out]roomRoom of the message
[in,out]sessionSender session
[in]messageLEAVE-Message
[in]hashHash of the message

Definition at line 67 of file gnunet-service-messenger_message_handle.c.

71{
72 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Member (%s) leaves room (%s).\n",
73 GNUNET_sh2s (&(message->header.sender_id)), GNUNET_h2s (
74 get_srv_room_key (room)));
75
77}
void close_member_session(struct GNUNET_MESSENGER_MemberSession *session)
Closes a given member session which opens the request for completion of the given member session.

References close_member_session(), get_srv_room_key(), GNUNET_ERROR_TYPE_INFO, GNUNET_h2s(), GNUNET_log, GNUNET_sh2s(), GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_SenderSession::member, and GNUNET_MESSENGER_MessageHeader::sender_id.

Referenced by callback_room_handle_message().

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

◆ handle_message_key()

void handle_message_key ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_SenderSession session,
const struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received or sent key message to change the key of a member and rearrange the contacts accordingly.

(move the member in the contacts and change its key)

Parameters
[in,out]roomRoom of the message
[in,out]sessionSender session
[in]messageKEY-Message
[in]hashHash of the message

Definition at line 81 of file gnunet-service-messenger_message_handle.c.

85{
86 handle_member_session_switch (session->member, message, hash);
87}
static void handle_member_session_switch(struct GNUNET_MESSENGER_MemberSession *session, const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)

References handle_member_session_switch(), and GNUNET_MESSENGER_SenderSession::member.

Referenced by callback_room_handle_message().

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

◆ handle_message_peer()

void handle_message_peer ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_SenderSession session,
const struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received or sent peer message to make changes of the basement in the room.

(add a new peer to the basement and restructure connections based on updated list of peers)

Parameters
[in,out]roomRoom of the message
[in,out]sessionSender session
[in]messagePEER-Message
[in]hashHash of the message

Definition at line 91 of file gnunet-service-messenger_message_handle.c.

95{
97
98 if (0 == GNUNET_memcmp (session->peer, &(message->body.peer.peer)))
99 update_store_peer (store, &(message->body.peer.peer), GNUNET_YES);
100
102 &(message->body.peer.peer)))
103 add_to_list_tunnels (&(room->basement), &(message->body.peer.peer), hash);
104
105 if (room->peer_message)
107}
void update_store_peer(struct GNUNET_MESSENGER_PeerStore *store, const struct GNUNET_PeerIdentity *peer, enum GNUNET_GenericReturnValue active)
Adds a peer identity to the store if necessary.
void rebuild_srv_room_basement_structure(struct GNUNET_MESSENGER_SrvRoom *room)
Rebuilds the decentralized structure for a room by ensuring all required connections are made dependi...
struct GNUNET_MESSENGER_PeerStore * get_srv_room_peer_store(struct GNUNET_MESSENGER_SrvRoom *room)
Returns the used peer store of a given room.
#define GNUNET_memcmp(a, b)
Compare memory in a and b, where both must be of the same pointer type.
@ GNUNET_YES
@ GNUNET_NO
void add_to_list_tunnels(struct GNUNET_MESSENGER_ListTunnels *tunnels, const struct GNUNET_PeerIdentity *peer, const struct GNUNET_HashCode *hash)
Adds a specific peer from a tunnel to the end of the list.
enum GNUNET_GenericReturnValue contains_list_tunnels(struct GNUNET_MESSENGER_ListTunnels *tunnels, const struct GNUNET_PeerIdentity *peer)
Tests linearly if the list of tunnels peer identities contains a specific peer identity and returns G...
struct GNUNET_MESSENGER_MessagePeer peer
struct GNUNET_PeerIdentity peer
The peer identity of the sender opening a room.
struct GNUNET_HashCode * peer_message
struct GNUNET_MESSENGER_ListTunnels basement

References add_to_list_tunnels(), GNUNET_MESSENGER_SrvRoom::basement, GNUNET_MESSENGER_Message::body, contains_list_tunnels(), get_srv_room_peer_store(), GNUNET_memcmp, GNUNET_NO, GNUNET_YES, GNUNET_MESSENGER_MessagePeer::peer, GNUNET_MESSENGER_MessageBody::peer, GNUNET_MESSENGER_SenderSession::peer, GNUNET_MESSENGER_SrvRoom::peer_message, rebuild_srv_room_basement_structure(), and update_store_peer().

Referenced by callback_room_handle_message().

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

◆ handle_message_id()

void handle_message_id ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_SenderSession session,
const struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received or sent id message to change a members id.

(change id of matching member)

Parameters
[in,out]roomRoom of the message
[in,out]sessionSender session
[in]messageID-Message
[in]hashHash of the message

Definition at line 111 of file gnunet-service-messenger_message_handle.c.

115{
116 handle_member_session_switch (session->member, message, hash);
117
119 room,
121 &(message->body.id.id),
123 );
124}
const struct GNUNET_CRYPTO_PublicKey * get_member_session_public_key(const struct GNUNET_MESSENGER_MemberSession *session)
Returns the public key of a given member session.
struct GNUNET_MESSENGER_MessageId id
struct GNUNET_ShortHashCode id
The new id which will replace the senders id in a room.

References GNUNET_MESSENGER_Message::body, get_member_session_public_key(), GNUNET_TIME_absolute_ntoh(), handle_member_session_switch(), GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_MessageId::id, GNUNET_MESSENGER_MessageBody::id, GNUNET_MESSENGER_SenderSession::member, solve_srv_room_member_collisions(), and GNUNET_MESSENGER_MessageHeader::timestamp.

Referenced by callback_room_handle_message().

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

◆ handle_message_miss()

void handle_message_miss ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_SenderSession session,
const struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received or sent miss message to drop a peer from the basement in the room.

(remove a peer from the basement and restructure connections based on updated list of peers)

Parameters
[in,out]roomRoom of the message
[in,out]sessionSender session
[in]messageMISS-Message
[in]hashHash of the message

Definition at line 128 of file gnunet-service-messenger_message_handle.c.

132{
134
135 if (0 == GNUNET_memcmp (session->peer, &(message->body.miss.peer)))
136 update_store_peer (store, &(message->body.miss.peer), GNUNET_NO);
137
139 &(room->basement), &(message->body.miss.peer), NULL);
140
141 if (! element)
142 return;
143
144 remove_from_list_tunnels (&(room->basement), element);
145
146 if (room->peer_message)
148}
struct GNUNET_MESSENGER_ListTunnel * find_list_tunnels(struct GNUNET_MESSENGER_ListTunnels *tunnels, const struct GNUNET_PeerIdentity *peer, size_t *index)
Searches linearly through the list of tunnels peer identities for matching a specific peer identity a...
struct GNUNET_MESSENGER_ListTunnel * remove_from_list_tunnels(struct GNUNET_MESSENGER_ListTunnels *tunnels, struct GNUNET_MESSENGER_ListTunnel *element)
Removes a specific element from the list of tunnels peer identities and returns the next element in t...
struct GNUNET_MESSENGER_MessageMiss miss
struct GNUNET_PeerIdentity peer
The peer identity of a disconnected door to a room.

References GNUNET_MESSENGER_SrvRoom::basement, GNUNET_MESSENGER_Message::body, find_list_tunnels(), get_srv_room_peer_store(), GNUNET_memcmp, GNUNET_NO, GNUNET_MESSENGER_MessageBody::miss, GNUNET_MESSENGER_MessageMiss::peer, GNUNET_MESSENGER_SenderSession::peer, GNUNET_MESSENGER_SrvRoom::peer_message, rebuild_srv_room_basement_structure(), remove_from_list_tunnels(), and update_store_peer().

Referenced by callback_room_handle_message().

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

◆ handle_message_delete()

void handle_message_delete ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_SenderSession session,
const struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received or sent delete message to delete a specific message from the store.

(remove a message from the store of a room under a given delay)

Parameters
[in,out]roomRoom of the message
[in,out]sessionSender session
[in]messageDELETE-Message
[in]hashHash of the message

Definition at line 152 of file gnunet-service-messenger_message_handle.c.

156{
158 message->body.deletion.delay);
160 message->header.timestamp);
161
164 action);
165
166 delete_srv_room_message (room, session->member,
167 &(message->body.deletion.hash), delay);
168}
enum GNUNET_GenericReturnValue delete_srv_room_message(struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_MemberSession *session, const struct GNUNET_HashCode *hash, const struct GNUNET_TIME_Relative delay)
Deletes a message from the room with a given hash in a specific delay if the provided member by its s...
struct GNUNET_TIME_Relative GNUNET_TIME_relative_ntoh(struct GNUNET_TIME_RelativeNBO a)
Convert relative time from network byte order.
Definition: time.c:628
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get(void)
Get the current time.
Definition: time.c:111
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_add(struct GNUNET_TIME_Absolute start, struct GNUNET_TIME_Relative duration)
Add a given relative duration to the given start time.
Definition: time.c:450
struct GNUNET_TIME_Relative GNUNET_TIME_absolute_get_difference(struct GNUNET_TIME_Absolute start, struct GNUNET_TIME_Absolute end)
Compute the time difference between the given start and end times.
Definition: time.c:421
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.
Time for absolute times used by GNUnet, in microseconds.
Time for relative time used by GNUnet, in microseconds.

References consensus-simulation::action, GNUNET_MESSENGER_Message::body, GNUNET_MESSENGER_MessageDelete::delay, delete_srv_room_message(), GNUNET_MESSENGER_MessageBody::deletion, GNUNET_TIME_absolute_add(), GNUNET_TIME_absolute_get(), GNUNET_TIME_absolute_get_difference(), GNUNET_TIME_absolute_ntoh(), GNUNET_TIME_relative_ntoh(), GNUNET_MESSENGER_MessageDelete::hash, GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_SenderSession::member, and GNUNET_MESSENGER_MessageHeader::timestamp.

Referenced by callback_room_handle_message().

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

◆ handle_message_connection()

void handle_message_connection ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_SenderSession session,
const struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received or sent connection message to update connection information about a peer.

(update a peer in the basement)

Parameters
[in,out]roomRoom of the message
[in,out]sessionSender session
[in]messageDELETE-Message
[in]hashHash of the message

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

176{
178 &(room->basement), session->peer, NULL);
179
180 if (! element)
181 return;
182
183 memcpy (&(element->connection), &(message->body.connection),
184 sizeof (struct GNUNET_MESSENGER_MessageConnection));
185}
struct GNUNET_MESSENGER_MessageConnection connection
struct GNUNET_MESSENGER_MessageConnection connection
A connection message body This allows to tell others about connection information about a peer.

References GNUNET_MESSENGER_SrvRoom::basement, GNUNET_MESSENGER_Message::body, GNUNET_MESSENGER_MessageBody::connection, GNUNET_MESSENGER_ListTunnel::connection, find_list_tunnels(), and GNUNET_MESSENGER_SenderSession::peer.

Referenced by callback_room_handle_message().

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