GNUnet 0.22.2
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...
 
void handle_message_subscribe (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 subscribe message to subscribe a member to a discourse. 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 47 of file gnunet-service-messenger_message_handle.c.

51{
52 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Member (%s) joins room (%s).\n",
53 GNUNET_sh2s (&(message->header.sender_id)), GNUNET_h2s (
54 get_srv_room_key (room)));
55
56 if (GNUNET_OK != reset_member_session (session->member, hash))
57 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Resetting member session failed!\n");
58
60 room,
61 &(message->body.join.key),
62 &(message->header.sender_id),
64 );
65}
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_DEBUG
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_ntoh(struct GNUNET_TIME_AbsoluteNBO a)
Convert absolute time from network byte order.
Definition: time.c:741
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_DEBUG, GNUNET_ERROR_TYPE_ERROR, 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 69 of file gnunet-service-messenger_message_handle.c.

73{
74 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Member (%s) leaves room (%s).\n",
75 GNUNET_sh2s (&(message->header.sender_id)), GNUNET_h2s (
76 get_srv_room_key (room)));
77
79}
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_DEBUG, 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 83 of file gnunet-service-messenger_message_handle.c.

87{
88 handle_member_session_switch (session->member, message, hash);
89}
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 93 of file gnunet-service-messenger_message_handle.c.

97{
98 struct GNUNET_MESSENGER_PeerStore *store;
99
100 store = get_srv_room_peer_store (room);
101
102 if (0 == GNUNET_memcmp (session->peer, &(message->body.peer.peer)))
103 update_store_peer (store, &(message->body.peer.peer), GNUNET_YES);
104
106 &(message->body.peer.peer)))
107 add_to_list_tunnels (&(room->basement), &(message->body.peer.peer), hash);
108
109 if (room->peer_message)
111}
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 115 of file gnunet-service-messenger_message_handle.c.

119{
120 handle_member_session_switch (session->member, message, hash);
121
123 room,
125 &(message->body.id.id),
127 );
128}
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 132 of file gnunet-service-messenger_message_handle.c.

136{
137 struct GNUNET_MESSENGER_PeerStore *store;
138 struct GNUNET_MESSENGER_ListTunnel *element;
139
140 store = get_srv_room_peer_store (room);
141
142 if (0 == GNUNET_memcmp (session->peer, &(message->body.miss.peer)))
143 update_store_peer (store, &(message->body.miss.peer), GNUNET_NO);
144
145 element = find_list_tunnels (&(room->basement),
146 &(message->body.miss.peer), NULL);
147
148 if (! element)
149 return;
150
151 remove_from_list_tunnels (&(room->basement), element);
152
153 if (room->peer_message)
155}
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 159 of file gnunet-service-messenger_message_handle.c.

163{
164 struct GNUNET_TIME_Relative delay;
166
167 delay = GNUNET_TIME_relative_ntoh (message->body.deletion.delay);
169
172 action);
173
174 delete_srv_room_message (room, session->member,
175 &(message->body.deletion.hash), delay);
176}
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:630
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:452
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:423
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 180 of file gnunet-service-messenger_message_handle.c.

184{
185 struct GNUNET_MESSENGER_ListTunnel *element;
186
187 element = find_list_tunnels (&(room->basement), session->peer, NULL);
188
189 if (! element)
190 return;
191
192 memcpy (&(element->connection), &(message->body.connection),
193 sizeof (struct GNUNET_MESSENGER_MessageConnection));
194}
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:

◆ handle_message_subscribe()

void handle_message_subscribe ( 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 subscribe message to subscribe a member to a discourse.

(subscribe a member to a discourse)

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

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

202{
203 struct GNUNET_MESSENGER_Member *member;
204 const struct GNUNET_ShortHashCode *discourse;
205 struct GNUNET_MESSENGER_Subscription *subscription;
206
207 member = session->member->member;
208
209 discourse = &(message->body.subscribe.discourse);
210 subscription = get_member_subscription (member, discourse);
211
212 {
215
218
219 if (subscription)
220 update_subscription (subscription,
221 timestamp,
222 duration);
223 else
224 {
225 subscription =
226 create_subscription (room, member, discourse,
227 timestamp,
228 duration);
229
230 if (! subscription)
231 return;
232
233 add_member_subscription (member, subscription);
234 }
235 }
236
237 update_subscription_timing (subscription);
238 cleanup_srv_room_discourse_messages (room, discourse);
239}
static uint64_t timestamp(void)
Get current timestamp.
void add_member_subscription(struct GNUNET_MESSENGER_Member *member, struct GNUNET_MESSENGER_Subscription *subscription)
Adds a given subscription to a member.
struct GNUNET_MESSENGER_Subscription * get_member_subscription(struct GNUNET_MESSENGER_Member *member, const struct GNUNET_ShortHashCode *discourse)
Returns the active subscription of a given member to a selected discourse.
void cleanup_srv_room_discourse_messages(struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_ShortHashCode *discourse)
Cleanup discourse messages outside of current subscriptions from a specific discourse of all the memb...
void update_subscription(struct GNUNET_MESSENGER_Subscription *subscribtion, struct GNUNET_TIME_Absolute timestamp, struct GNUNET_TIME_Relative duration)
void update_subscription_timing(struct GNUNET_MESSENGER_Subscription *subscribtion)
struct GNUNET_MESSENGER_Subscription * create_subscription(struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_Member *member, const struct GNUNET_ShortHashCode *discourse, struct GNUNET_TIME_Absolute timestamp, struct GNUNET_TIME_Relative duration)
static struct GNUNET_TIME_Relative duration
Option '-d': duration of the mapping.
Definition: gnunet-vpn.c:90
struct GNUNET_MESSENGER_MessageSubscribe subscribe
struct GNUNET_TIME_RelativeNBO time
The time window of the subscription.
struct GNUNET_ShortHashCode discourse
The hash of the discourse to subscribe.
A 256-bit hashcode.

References add_member_subscription(), GNUNET_MESSENGER_Message::body, cleanup_srv_room_discourse_messages(), create_subscription(), GNUNET_MESSENGER_MessageSubscribe::discourse, GNUNET_MESSENGER_Subscription::discourse, duration, get_member_subscription(), GNUNET_TIME_absolute_ntoh(), GNUNET_TIME_relative_ntoh(), GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_MemberSession::member, GNUNET_MESSENGER_SenderSession::member, GNUNET_MESSENGER_Subscription::member, GNUNET_MESSENGER_MessageBody::subscribe, GNUNET_MESSENGER_MessageSubscribe::time, GNUNET_MESSENGER_MessageHeader::timestamp, timestamp(), update_subscription(), and update_subscription_timing().

Referenced by callback_room_handle_message().

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