GNUnet  0.11.x
Functions
gnunet-service-messenger_message_recv.h File Reference

GNUnet MESSENGER service. More...

#include "platform.h"
#include "gnunet_crypto_lib.h"
#include "gnunet-service-messenger_tunnel.h"
#include "messenger_api_message.h"
Include dependency graph for gnunet-service-messenger_message_recv.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void recv_message_info (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received info message to change the current member id to the one generated by the host connected to. More...
 
void recv_message_join (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received join message to forward all member information to the new member if the message was the direct reaction to a previous info message from this peer. More...
 
void recv_message_leave (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received leave message. More...
 
void recv_message_name (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received name message. More...
 
void recv_message_key (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received key message. More...
 
void recv_message_peer (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received peer message to link it to its origin tunnel if the peer identity matches. More...
 
void recv_message_id (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received id message to change the tunnels linked member id if necessary. More...
 
void recv_message_miss (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received miss message. More...
 
void recv_message_request (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 Handles a received request message by checking for the requested message and forwarding it back if the message was found. More...
 

Detailed Description

GNUnet MESSENGER service.

Author
Tobias Frisch

Definition in file gnunet-service-messenger_message_recv.h.

Function Documentation

◆ recv_message_info()

void recv_message_info ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_SrvTunnel tunnel,
struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received info message to change the current member id to the one generated by the host connected to.

(all current tunnels will be informed about the id change)

Parameters
roomRoom of the message
tunnelReceiving connection
messageINFO-Message
hashHash of the message

Definition at line 30 of file gnunet-service-messenger_message_recv.c.

References GNUNET_MESSENGER_Message::body, change_room_host_id(), GNUNET_MESSENGER_SrvTunnel::contact_id, create_message_id(), create_message_join(), destroy_message(), GNUNET_MESSENGER_SrvHandle::ego, get_room_host_id(), GNUNET_CONTAINER_multishortmap_contains(), GNUNET_memcmp, GNUNET_memcpy, GNUNET_new, GNUNET_NO, GNUNET_YES, GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_SrvRoom::host, GNUNET_MESSENGER_MessageBody::info, GNUNET_MESSENGER_SrvRoom::members, send_room_message_ext(), send_tunnel_message(), GNUNET_MESSENGER_MessageHeader::sender_id, switch_room_member_id(), and GNUNET_MESSENGER_MessageInfo::unique_id.

Referenced by callback_room_recv().

32 {
33  int conflict = GNUNET_CONTAINER_multishortmap_contains (room->members, &(message->body.info.unique_id));
34 
35  if (GNUNET_NO == conflict)
36  {
37  struct GNUNET_MESSENGER_Message *sync_message = create_message_id (&(message->body.info.unique_id));
38  struct GNUNET_HashCode sync_hash;
39 
40  send_room_message_ext (room, room->host, sync_message, &sync_hash, tunnel);
41  destroy_message (sync_message);
42 
43  switch_room_member_id (room, get_room_host_id (room), &(message->body.info.unique_id), NULL);
44 
45  change_room_host_id (room, &(message->body.info.unique_id));
46  }
47 
48  if (!tunnel->contact_id)
49  tunnel->contact_id = GNUNET_new(struct GNUNET_ShortHashCode);
50 
51  GNUNET_memcpy(tunnel->contact_id, &(message->header.sender_id), sizeof(struct GNUNET_ShortHashCode));
52 
53  struct GNUNET_ShortHashCode original_id;
54 
55  if (GNUNET_YES == conflict)
56  {
57  GNUNET_memcpy(&original_id, get_room_host_id (room), sizeof(struct GNUNET_ShortHashCode));
58 
59  change_room_host_id (room, &(message->body.info.unique_id));
60  }
61 
62  {
63  struct GNUNET_MESSENGER_Message *join_message = create_message_join (room->host->ego);
64  struct GNUNET_HashCode join_hash;
65 
66  send_tunnel_message (tunnel, room->host, join_message, &join_hash);
67  destroy_message (join_message);
68  }
69 
70  if ((GNUNET_YES == conflict) && (0 != GNUNET_memcmp(&original_id, get_room_host_id (room))))
71  {
72  struct GNUNET_MESSENGER_Message *sync_message = create_message_id (&original_id);
73  struct GNUNET_HashCode sync_hash;
74 
75  send_tunnel_message (tunnel, room->host, sync_message, &sync_hash);
76  destroy_message (sync_message);
77  }
78 }
struct GNUNET_MESSENGER_MessageHeader header
Header.
void destroy_message(struct GNUNET_MESSENGER_Message *message)
Destroys a message and frees its memory fully.
struct GNUNET_ShortHashCode sender_id
The senders id inside of the room the message was sent in.
struct GNUNET_ShortHashCode unique_id
The new unique id for the receiver in a room.
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
#define GNUNET_new(type)
Allocate a struct or union of the given type.
A 256-bit hashcode.
struct GNUNET_MESSENGER_Ego * ego
const struct GNUNET_ShortHashCode * get_room_host_id(const struct GNUNET_MESSENGER_SrvRoom *room)
Returns the member id of the member representing the handle currently hosting this room...
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.
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.
void send_tunnel_message(struct GNUNET_MESSENGER_SrvTunnel *tunnel, void *handle, struct GNUNET_MESSENGER_Message *message, struct GNUNET_HashCode *hash)
Sends a message by packing it automatically into an envelope and passing it through the tunnel...
A 512-bit hashcode.
void switch_room_member_id(struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_ShortHashCode *old_id, const struct GNUNET_ShortHashCode *new_id, const struct GNUNET_HashCode *hash)
Changes an id of a current member from an old id to a new one and adds optionally the hash of an id m...
struct GNUNET_MESSENGER_SrvHandle * host
struct GNUNET_CONTAINER_MultiShortmap * members
struct GNUNET_MESSENGER_MessageInfo info
void send_room_message_ext(struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, struct GNUNET_MESSENGER_Message *message, struct GNUNET_HashCode *hash, struct GNUNET_MESSENGER_SrvTunnel *tunnel)
Sends a message from a given handle into a room excluding one specific tunnel.
#define GNUNET_memcmp(a, b)
Compare memory in a and b, where both must be of the same pointer type.
struct GNUNET_ShortHashCode * contact_id
int GNUNET_CONTAINER_multishortmap_contains(const struct GNUNET_CONTAINER_MultiShortmap *map, const struct GNUNET_ShortHashCode *key)
Check if the map contains any value under the given key (including values that are NULL)...
void change_room_host_id(struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_ShortHashCode *unique_id)
Changes the member id of the member representing the handle currently hosting this room...
Here is the call graph for this function:
Here is the caller graph for this function:

◆ recv_message_join()

void recv_message_join ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_SrvTunnel tunnel,
struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received join message to forward all member information to the new member if the message was the direct reaction to a previous info message from this peer.

Parameters
roomRoom of the message
tunnelReceiving connection
messageJOIN-Message
hashHash of the message

Definition at line 109 of file gnunet-service-messenger_message_recv.c.

References GNUNET_MESSENGER_SrvTunnel::contact_id, find_room_tunnel_to(), get_room_host_id(), get_room_message(), GNUNET_CONTAINER_multishortmap_iterate(), GNUNET_memcmp, GNUNET_MESSENGER_KIND_INFO, GNUNET_NO, handle_message_join(), GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_SrvRoom::host, iterate_send_member_infos(), GNUNET_MESSENGER_MessageHeader::kind, GNUNET_MESSENGER_SrvRoom::member_infos, GNUNET_MESSENGER_MessageHeader::previous, GNUNET_MESSENGER_MemberInfoSpread::room, GNUNET_MESSENGER_MessageHeader::sender_id, and GNUNET_MESSENGER_MemberInfoSpread::tunnel.

Referenced by callback_room_recv().

111 {
112  const struct GNUNET_MESSENGER_Message *info_msg = get_room_message (room, room->host, &(message->header.previous),
113  GNUNET_NO);
114 
115  if ((info_msg) && (0 == GNUNET_memcmp(&(info_msg->header.sender_id), get_room_host_id (room)))
116  && (GNUNET_MESSENGER_KIND_INFO == info_msg->header.kind))
117  {
118  struct GNUNET_MESSENGER_MemberInfoSpread spread;
119 
120  spread.room = room;
121 
122  if ((tunnel) && (tunnel->contact_id) && (0 == GNUNET_memcmp(tunnel->contact_id, &(message->header.sender_id))))
123  spread.tunnel = tunnel;
124  else
125  spread.tunnel = find_room_tunnel_to (room, &(message->header.sender_id));
126 
127  if (spread.tunnel)
129  }
130 
131  handle_message_join (room, tunnel, message, hash);
132 }
struct GNUNET_MESSENGER_MessageHeader header
Header.
struct GNUNET_ShortHashCode sender_id
The senders id inside of the room the message was sent in.
struct GNUNET_CONTAINER_MultiShortmap * member_infos
const struct GNUNET_ShortHashCode * get_room_host_id(const struct GNUNET_MESSENGER_SrvRoom *room)
Returns the member id of the member representing the handle currently hosting this room...
static int iterate_send_member_infos(void *cls, const struct GNUNET_ShortHashCode *key, void *value)
int GNUNET_CONTAINER_multishortmap_iterate(struct GNUNET_CONTAINER_MultiShortmap *map, GNUNET_CONTAINER_ShortmapIterator it, void *it_cls)
Iterate over all entries in the map.
struct GNUNET_HashCode previous
The hash of the previous message from the senders perspective.
struct GNUNET_MESSENGER_SrvHandle * host
#define GNUNET_memcmp(a, b)
Compare memory in a and b, where both must be of the same pointer type.
const struct GNUNET_MESSENGER_Message * get_room_message(struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *hash, int request)
Returns a message from a room identified by a given hash.
void handle_message_join(struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
Handles a received or sent join message to make changes of current member information.
struct GNUNET_ShortHashCode * contact_id
struct GNUNET_MESSENGER_SrvTunnel * find_room_tunnel_to(struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_ShortHashCode *contact_id)
Returns a tunnel granting a direct connection to a specific member in a room.
enum GNUNET_MESSENGER_MessageKind kind
The kind of the message.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ recv_message_leave()

void recv_message_leave ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_SrvTunnel tunnel,
struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received leave message.

See also
handle_message_leave()
Parameters
roomRoom of the message
tunnelReceiving connection
messageLEAVE-Message
hashHash of the message

Definition at line 135 of file gnunet-service-messenger_message_recv.c.

References handle_message_leave().

Referenced by callback_room_recv().

137 {
138  handle_message_leave (room, tunnel, message, hash);
139 }
void handle_message_leave(struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
Handles a received or sent leave message to make changes of current member information.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ recv_message_name()

void recv_message_name ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_SrvTunnel tunnel,
struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received name message.

See also
handle_message_name()
Parameters
roomRoom of the message
tunnelReceiving connection
messageNAME-Message
hashHash of the message

Definition at line 142 of file gnunet-service-messenger_message_recv.c.

References handle_message_name().

Referenced by callback_room_recv().

144 {
145  handle_message_name (room, tunnel, message, hash);
146 }
void handle_message_name(struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
Handles a received or sent name message to rename a current member.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ recv_message_key()

void recv_message_key ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_SrvTunnel tunnel,
struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received key message.

See also
handle_message_key()
Parameters
roomRoom of the message
tunnelReceiving connection
messageKEY-Message
hashHash of the message

Definition at line 149 of file gnunet-service-messenger_message_recv.c.

References handle_message_key().

Referenced by callback_room_recv().

151 {
152  handle_message_key (room, tunnel, message, hash);
153 }
void handle_message_key(struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, 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 accor...
Here is the call graph for this function:
Here is the caller graph for this function:

◆ recv_message_peer()

void recv_message_peer ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_SrvTunnel tunnel,
struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received peer message to link it to its origin tunnel if the peer identity matches.

(the peer message and the member id can potentially be linked to the tunnel)

TODO: This handling will only check the one given tunnel!

Parameters
roomRoom of the message
tunnelReceiving connection
messagePEER-Message
hashHash of the message

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

References GNUNET_MESSENGER_Message::body, GNUNET_MESSENGER_SrvTunnel::contact_id, GNUNET_memcmp, GNUNET_memcpy, GNUNET_new, GNUNET_PEER_resolve(), handle_message_peer(), GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_SrvTunnel::peer, GNUNET_MESSENGER_MessagePeer::peer, GNUNET_MESSENGER_MessageBody::peer, GNUNET_MESSENGER_SrvTunnel::peer_message, and GNUNET_MESSENGER_MessageHeader::sender_id.

Referenced by callback_room_recv().

158 {
159  struct GNUNET_PeerIdentity peer;
160  GNUNET_PEER_resolve (tunnel->peer, &peer);
161 
162  if (0 == GNUNET_memcmp(&peer, &(message->body.peer.peer)))
163  {
164  if (!tunnel->peer_message)
165  tunnel->peer_message = GNUNET_new(struct GNUNET_HashCode);
166 
167  GNUNET_memcpy(tunnel->peer_message, hash, sizeof(struct GNUNET_HashCode));
168 
169  if (!tunnel->contact_id)
170  tunnel->contact_id = GNUNET_new(struct GNUNET_ShortHashCode);
171 
172  GNUNET_memcpy(tunnel->contact_id, &(message->header.sender_id), sizeof(struct GNUNET_ShortHashCode));
173  }
174 
175  handle_message_peer (room, tunnel, message, hash);
176 }
struct GNUNET_PeerIdentity peer
The peer identity of the sender opening a room.
struct GNUNET_MESSENGER_MessageHeader header
Header.
struct GNUNET_ShortHashCode sender_id
The senders id inside of the room the message was sent in.
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
#define GNUNET_new(type)
Allocate a struct or union of the given type.
void handle_message_peer(struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, 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.
void GNUNET_PEER_resolve(GNUNET_PEER_Id id, struct GNUNET_PeerIdentity *pid)
Convert an interned PID to a normal peer identity.
Definition: peer.c:225
A 256-bit hashcode.
struct GNUNET_MESSENGER_MessageBody body
Body.
A 512-bit hashcode.
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.
struct GNUNET_MESSENGER_MessagePeer peer
#define GNUNET_memcmp(a, b)
Compare memory in a and b, where both must be of the same pointer type.
The identity of the host (wraps the signing key of the peer).
struct GNUNET_ShortHashCode * contact_id
Here is the call graph for this function:
Here is the caller graph for this function:

◆ recv_message_id()

void recv_message_id ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_SrvTunnel tunnel,
struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received id message to change the tunnels linked member id if necessary.

(the tunnels linked member id will be changed if the sender id is matching)

TODO: This handling will only check the one given tunnel!

Parameters
roomRoom of the message
tunnelReceiving connection
messageID-Message
hashHash of the message

Definition at line 179 of file gnunet-service-messenger_message_recv.c.

References GNUNET_MESSENGER_Message::body, GNUNET_MESSENGER_SrvTunnel::contact_id, GNUNET_memcmp, GNUNET_memcpy, handle_message_id(), GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_MessageId::id, GNUNET_MESSENGER_MessageBody::id, and GNUNET_MESSENGER_MessageHeader::sender_id.

Referenced by callback_room_recv().

181 {
182  if ((tunnel->contact_id) && (0 == GNUNET_memcmp(tunnel->contact_id, &(message->header.sender_id))))
183  GNUNET_memcpy(tunnel->contact_id, &(message->body.id.id), sizeof(struct GNUNET_ShortHashCode));
184 
185  handle_message_id (room, tunnel, message, hash);
186 }
struct GNUNET_MESSENGER_MessageHeader header
Header.
struct GNUNET_ShortHashCode sender_id
The senders id inside of the room the message was sent in.
void handle_message_id(struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
Handles a received or sent id message to change a members id.
struct GNUNET_ShortHashCode id
The new id which will replace the senders id in a room.
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
A 256-bit hashcode.
struct GNUNET_MESSENGER_MessageBody body
Body.
#define GNUNET_memcmp(a, b)
Compare memory in a and b, where both must be of the same pointer type.
struct GNUNET_ShortHashCode * contact_id
struct GNUNET_MESSENGER_MessageId id
Here is the call graph for this function:
Here is the caller graph for this function:

◆ recv_message_miss()

void recv_message_miss ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_SrvTunnel tunnel,
struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received miss message.

See also
handle_message_miss()
Parameters
roomRoom of the message
tunnelReceiving connection
messageMISS-Message
hashHash of the message

Definition at line 189 of file gnunet-service-messenger_message_recv.c.

References handle_message_miss().

Referenced by callback_room_recv().

191 {
192  handle_message_miss (room, tunnel, message, hash);
193 }
void handle_message_miss(struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvTunnel *tunnel, 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.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ recv_message_request()

void recv_message_request ( struct GNUNET_MESSENGER_SrvRoom room,
struct GNUNET_MESSENGER_SrvTunnel tunnel,
struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Handles a received request message by checking for the requested message and forwarding it back if the message was found.

(this can also cause this peer to send a new request instead of only forwarding the received one)

TODO: Requests can cause exponentially more requests!

Parameters
roomRoom of the message
tunnelReceiving connection
messageREQUEST-Message
hashHash of the message

Definition at line 196 of file gnunet-service-messenger_message_recv.c.

References GNUNET_MESSENGER_Message::body, forward_tunnel_message(), get_room_message(), GNUNET_NO, GNUNET_MESSENGER_MessageRequest::hash, GNUNET_MESSENGER_SrvRoom::host, msg, and GNUNET_MESSENGER_MessageBody::request.

Referenced by callback_room_recv().

198 {
199  const struct GNUNET_MESSENGER_Message *msg = get_room_message (room, room->host, &(message->body.request.hash),
200  GNUNET_NO);
201 
202  if (msg)
203  forward_tunnel_message (tunnel, msg, &(message->body.request.hash));
204 }
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
struct GNUNET_HashCode hash
The hash of the requested message.
struct GNUNET_MESSENGER_MessageRequest request
struct GNUNET_MESSENGER_MessageBody body
Body.
struct GNUNET_MESSENGER_SrvHandle * host
const struct GNUNET_MESSENGER_Message * get_room_message(struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *hash, int request)
Returns a message from a room identified by a given hash.
void forward_tunnel_message(struct GNUNET_MESSENGER_SrvTunnel *tunnel, const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
Forwards a given message with a known hash through a tunnel.
Here is the call graph for this function:
Here is the caller graph for this function: