GNUnet  0.11.x
Functions
gnunet-service-messenger_message_handle.c File Reference

GNUnet MESSENGER service. More...

#include "gnunet-service-messenger_message_handle.h"
Include dependency graph for gnunet-service-messenger_message_handle.c:

Go to the source code of this file.

Functions

static void handle_session_switch (struct GNUNET_MESSENGER_MemberSession *session, const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 
void handle_message_join (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_MemberSession *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_MemberSession *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_name (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_MemberSession *session, const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received or sent name message to rename a current member. More...
 
void handle_message_key (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_MemberSession *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_MemberSession *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_MemberSession *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_MemberSession *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_MemberSession *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...
 

Detailed Description

GNUnet MESSENGER service.

Author
Tobias Frisch

Definition in file gnunet-service-messenger_message_handle.c.

Function Documentation

◆ handle_session_switch()

static void handle_session_switch ( struct GNUNET_MESSENGER_MemberSession session,
const struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)
static

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

References add_member_session(), GNUNET_MESSENGER_MemberSession::member, GNUNET_MESSENGER_MemberSession::next, and switch_member_session().

Referenced by handle_message_id(), and handle_message_key().

31 {
32  struct GNUNET_MESSENGER_MemberSession *next = switch_member_session(session, message, hash);
33 
34  if (next != session)
35  add_member_session(next->member, next);
36 }
struct GNUNET_MESSENGER_MemberSession * next
void add_member_session(struct GNUNET_MESSENGER_Member *member, struct GNUNET_MESSENGER_MemberSession *session)
Adds a given member session to its member.
struct GNUNET_MESSENGER_MemberSession * switch_member_session(struct GNUNET_MESSENGER_MemberSession *session, const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
Creates and allocates a new member session closing and replacing a given other session of the same me...
Here is the call graph for this function:
Here is the caller graph for this function:

◆ handle_message_join()

void handle_message_join ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_MemberSession 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

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

References get_room_key(), GNUNET_ERROR_TYPE_ERROR, GNUNET_ERROR_TYPE_INFO, GNUNET_h2s(), GNUNET_log, GNUNET_OK, GNUNET_sh2s(), GNUNET_MESSENGER_Message::header, reset_member_session(), and GNUNET_MESSENGER_MessageHeader::sender_id.

Referenced by callback_room_handle_message().

41 {
42  GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Member (%s) joins room (%s).\n",
43  GNUNET_sh2s (&(message->header.sender_id)), GNUNET_h2s(get_room_key(room)));
44 
45  if (GNUNET_OK != reset_member_session(session, hash))
46  GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Resetting member session failed!\n");
47 }
struct GNUNET_MESSENGER_MessageHeader header
Header.
const char * GNUNET_sh2s(const struct GNUNET_ShortHashCode *shc)
Convert a short hash value to a string (for printing debug messages).
struct GNUNET_ShortHashCode sender_id
The senders id inside of the room the message was sent in.
const char * GNUNET_h2s(const struct GNUNET_HashCode *hc)
Convert a hash value to a string (for printing debug messages).
int 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.
#define GNUNET_log(kind,...)
const struct GNUNET_HashCode * get_room_key(const struct GNUNET_MESSENGER_SrvRoom *room)
Returns the shared secret you need to access a room.
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_MemberSession 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

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

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

Referenced by callback_room_handle_message().

52 {
53  GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Member (%s) leaves room (%s).\n",
54  GNUNET_sh2s (&(message->header.sender_id)), GNUNET_h2s(get_room_key(room)));
55 
56  close_member_session(session);
57 }
struct GNUNET_MESSENGER_MessageHeader header
Header.
const char * GNUNET_sh2s(const struct GNUNET_ShortHashCode *shc)
Convert a short hash value to a string (for printing debug messages).
struct GNUNET_ShortHashCode sender_id
The senders id inside of the room the message was sent in.
const char * GNUNET_h2s(const struct GNUNET_HashCode *hc)
Convert a hash value to a string (for printing debug messages).
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...
#define GNUNET_log(kind,...)
const struct GNUNET_HashCode * get_room_key(const struct GNUNET_MESSENGER_SrvRoom *room)
Returns the shared secret you need to access a room.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ handle_message_name()

void handle_message_name ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_MemberSession session,
const struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received or sent name message to rename a current member.

(change name of matching member)

Parameters

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

References GNUNET_MESSENGER_Message::body, get_member_session_contact(), GNUNET_MESSENGER_MessageName::name, GNUNET_MESSENGER_MessageBody::name, and set_contact_name().

Referenced by callback_room_handle_message().

62 {
63  struct GNUNET_MESSENGER_Contact *contact = get_member_session_contact(session);
64 
65  if (!contact)
66  return;
67 
68  set_contact_name (contact, message->body.name.name);
69 }
struct GNUNET_MESSENGER_Contact * get_member_session_contact(struct GNUNET_MESSENGER_MemberSession *session)
Retruns the contact which is connected to a given member session.
struct GNUNET_MESSENGER_MessageBody body
Body.
struct GNUNET_MESSENGER_MessageName name
char * name
The new name which replaces the current senders name.
void set_contact_name(struct GNUNET_MESSENGER_Contact *contact, const char *name)
Changes the current name of a given contact by copying it from the parameter name.
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_MemberSession 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

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

References handle_session_switch().

Referenced by callback_room_handle_message().

74 {
75  handle_session_switch (session, message, hash);
76 }
static void handle_session_switch(struct GNUNET_MESSENGER_MemberSession *session, const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
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_MemberSession 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

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

References add_to_list_tunnels(), GNUNET_MESSENGER_SrvRoom::basement, GNUNET_MESSENGER_Message::body, contains_list_tunnels(), GNUNET_NO, GNUNET_MESSENGER_MessagePeer::peer, GNUNET_MESSENGER_MessageBody::peer, GNUNET_MESSENGER_SrvRoom::peer_message, and rebuild_room_basement_structure().

Referenced by callback_room_handle_message().

81 {
82  if (GNUNET_NO == contains_list_tunnels (&(room->basement), &(message->body.peer.peer)))
83  add_to_list_tunnels (&(room->basement), &(message->body.peer.peer));
84 
85  if (room->peer_message)
87 }
struct GNUNET_PeerIdentity peer
The peer identity of the sender opening a room.
int 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...
void add_to_list_tunnels(struct GNUNET_MESSENGER_ListTunnels *tunnels, const struct GNUNET_PeerIdentity *peer)
Adds a specific peer from a tunnel to the end of the list.
struct GNUNET_HashCode * peer_message
struct GNUNET_MESSENGER_MessageBody body
Body.
struct GNUNET_MESSENGER_MessagePeer peer
void rebuild_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_ListTunnels basement
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_MemberSession 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

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

References handle_session_switch().

Referenced by callback_room_handle_message().

92 {
93  handle_session_switch (session, message, hash);
94 }
static void handle_session_switch(struct GNUNET_MESSENGER_MemberSession *session, const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
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_MemberSession 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

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

References GNUNET_MESSENGER_SrvRoom::basement, GNUNET_MESSENGER_Message::body, find_list_tunnels(), GNUNET_MESSENGER_MessagePeer::peer, GNUNET_MESSENGER_MessageBody::peer, GNUNET_MESSENGER_SrvRoom::peer_message, rebuild_room_basement_structure(), and remove_from_list_tunnels().

Referenced by callback_room_handle_message().

99 {
100  struct GNUNET_MESSENGER_ListTunnel *element = find_list_tunnels (&(room->basement), &(message->body.peer.peer), NULL);
101 
102  if (!element)
103  return;
104 
105  remove_from_list_tunnels (&(room->basement), element);
106 
107  if (room->peer_message)
109 }
struct GNUNET_PeerIdentity peer
The peer identity of the sender opening a room.
struct GNUNET_HashCode * peer_message
struct GNUNET_MESSENGER_MessageBody body
Body.
struct GNUNET_MESSENGER_MessagePeer peer
void rebuild_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_ListTunnels basement
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...
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_MemberSession 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

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

References GNUNET_MESSENGER_Message::body, GNUNET_MESSENGER_MessageDelete::delay, GNUNET_MESSENGER_MessageBody::delete, delete_room_message(), 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, and GNUNET_MESSENGER_MessageHeader::timestamp.

Referenced by callback_room_handle_message().

114 {
117 
118  action = GNUNET_TIME_absolute_add (action, delay);
120 
121  delete_room_message (room, session, &(message->body.delete.hash), delay);
122 }
struct GNUNET_MESSENGER_MessageHeader header
Header.
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_ntoh(struct GNUNET_TIME_AbsoluteNBO a)
Convert absolute time from network byte order.
Definition: time.c:673
struct GNUNET_TIME_AbsoluteNBO timestamp
The timestamp of the message.
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:395
struct GNUNET_MESSENGER_MessageDelete delete
struct GNUNET_HashCode hash
The hash of the message to delete.
struct GNUNET_MESSENGER_MessageBody body
Body.
struct GNUNET_TIME_Relative GNUNET_TIME_relative_ntoh(struct GNUNET_TIME_RelativeNBO a)
Convert relative time from network byte order.
Definition: time.c:641
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get(void)
Get the current time.
Definition: time.c:118
int delete_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...
static struct GNUNET_TIME_Relative delay
When should dkg communication start?
Time for absolute times used by GNUnet, in microseconds.
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:354
Time for relative time used by GNUnet, in microseconds.
struct GNUNET_TIME_RelativeNBO delay
The delay of the delete operation to get processed.
Here is the call graph for this function:
Here is the caller graph for this function: