GNUnet  0.11.x
Data Structures | Functions
gnunet-service-messenger_member_store.c File Reference

GNUnet MESSENGER service. More...

#include "gnunet-service-messenger_member_store.h"
#include "gnunet-service-messenger_member.h"
#include "gnunet-service-messenger_service.h"
#include "gnunet-service-messenger_room.h"
Include dependency graph for gnunet-service-messenger_member_store.c:

Go to the source code of this file.

Data Structures

struct  GNUNET_MESSENGER_ClosureIterateMembers
 

Functions

void init_member_store (struct GNUNET_MESSENGER_MemberStore *store, struct GNUNET_MESSENGER_SrvRoom *room)
 Initializes a member store as fully empty connected to a room. More...
 
static int iterate_destroy_members (void *cls, const struct GNUNET_ShortHashCode *key, void *value)
 
void clear_member_store (struct GNUNET_MESSENGER_MemberStore *store)
 Clears a member store, wipes its content and deallocates its memory. More...
 
struct GNUNET_MESSENGER_ContactStoreget_member_contact_store (struct GNUNET_MESSENGER_MemberStore *store)
 Returns the used contact store of a given member store. More...
 
const struct GNUNET_HashCodeget_member_store_key (const struct GNUNET_MESSENGER_MemberStore *store)
 Returns the shared secret you need to access a room of the store. More...
 
static int callback_scan_for_members (void *cls, const char *filename)
 
static int iterate_load_next_member_sessions (void *cls, const struct GNUNET_ShortHashCode *id, void *value)
 
static int iterate_sync_member_contacts (void *cls, const struct GNUNET_ShortHashCode *id, void *value)
 
void load_member_store (struct GNUNET_MESSENGER_MemberStore *store, const char *directory)
 Loads members from a directory into a member store. More...
 
static int iterate_save_members (void *cls, const struct GNUNET_ShortHashCode *id, void *value)
 
void save_member_store (struct GNUNET_MESSENGER_MemberStore *store, const char *directory)
 Saves members from a member store into a directory. More...
 
struct GNUNET_MESSENGER_Memberget_store_member (const struct GNUNET_MESSENGER_MemberStore *store, const struct GNUNET_ShortHashCode *id)
 Returns the member in a store identified by a given id. More...
 
struct GNUNET_MESSENGER_Memberget_store_member_of (struct GNUNET_MESSENGER_MemberStore *store, const struct GNUNET_MESSENGER_Message *message)
 Returns the member of a store using a sender id of a given message. More...
 
struct GNUNET_MESSENGER_Memberadd_store_member (struct GNUNET_MESSENGER_MemberStore *store, const struct GNUNET_ShortHashCode *id)
 Adds a member to a store under a specific id and returns it on success. More...
 
static int iterate_store_members_it (void *cls, const struct GNUNET_ShortHashCode *key, void *value)
 
int iterate_store_members (struct GNUNET_MESSENGER_MemberStore *store, GNUNET_MESSENGER_MemberIteratorCallback it, void *cls)
 Iterate through all member sessions currently connected to the members of the given member store and call the provided iterator callback with a selected closure. More...
 

Detailed Description

GNUnet MESSENGER service.

Author
Tobias Frisch

Definition in file gnunet-service-messenger_member_store.c.

Function Documentation

◆ init_member_store()

void init_member_store ( struct GNUNET_MESSENGER_MemberStore store,
struct GNUNET_MESSENGER_SrvRoom room 
)

Initializes a member store as fully empty connected to a room.

Parameters
[out]storeMember store
roomRoom

Definition at line 33 of file gnunet-service-messenger_member_store.c.

References GNUNET_assert, GNUNET_CONTAINER_multishortmap_create(), GNUNET_NO, GNUNET_MESSENGER_MemberStore::members, and GNUNET_MESSENGER_MemberStore::room.

Referenced by create_room().

34 {
35  GNUNET_assert ((store) && (room));
36 
37  store->room = room;
39 }
struct GNUNET_CONTAINER_MultiShortmap * members
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
struct GNUNET_CONTAINER_MultiShortmap * GNUNET_CONTAINER_multishortmap_create(unsigned int len, int do_not_copy_keys)
Create a multi peer map (hash map for public keys of peers).
Here is the call graph for this function:
Here is the caller graph for this function:

◆ iterate_destroy_members()

static int iterate_destroy_members ( void *  cls,
const struct GNUNET_ShortHashCode key,
void *  value 
)
static

Definition at line 42 of file gnunet-service-messenger_member_store.c.

References destroy_member(), GNUNET_YES, and value.

Referenced by clear_member_store().

43 {
44  struct GNUNET_MESSENGER_Member *member = value;
45  destroy_member(member);
46  return GNUNET_YES;
47 }
void destroy_member(struct GNUNET_MESSENGER_Member *member)
Destroys a member and frees its memory fully.
static char * value
Value of the record to add/remove.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ clear_member_store()

void clear_member_store ( struct GNUNET_MESSENGER_MemberStore store)

Clears a member store, wipes its content and deallocates its memory.

Parameters

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

References GNUNET_assert, GNUNET_CONTAINER_multishortmap_destroy(), GNUNET_CONTAINER_multishortmap_iterate(), iterate_destroy_members(), and GNUNET_MESSENGER_MemberStore::members.

Referenced by destroy_room().

51 {
52  GNUNET_assert ((store) && (store->members));
53 
56 }
struct GNUNET_CONTAINER_MultiShortmap * members
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
int GNUNET_CONTAINER_multishortmap_iterate(struct GNUNET_CONTAINER_MultiShortmap *map, GNUNET_CONTAINER_ShortmapIterator it, void *it_cls)
Iterate over all entries in the map.
static int iterate_destroy_members(void *cls, const struct GNUNET_ShortHashCode *key, void *value)
void GNUNET_CONTAINER_multishortmap_destroy(struct GNUNET_CONTAINER_MultiShortmap *map)
Destroy a hash map.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_member_contact_store()

struct GNUNET_MESSENGER_ContactStore* get_member_contact_store ( struct GNUNET_MESSENGER_MemberStore store)

Returns the used contact store of a given member store.

Parameters

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

References get_service_contact_store(), GNUNET_assert, GNUNET_MESSENGER_MemberStore::room, and GNUNET_MESSENGER_SrvRoom::service.

Referenced by check_member_session_completion(), create_member_session(), destroy_member_session(), reset_member_session(), and switch_member_session().

61 {
62  GNUNET_assert ((store) && (store->room));
63 
64  struct GNUNET_MESSENGER_SrvRoom *room = store->room;
65 
66  return get_service_contact_store(room->service);
67 }
struct GNUNET_MESSENGER_ContactStore * get_service_contact_store(struct GNUNET_MESSENGER_Service *service)
Returns the used contact store of a given service.
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
struct GNUNET_MESSENGER_Service * service
Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_member_store_key()

const struct GNUNET_HashCode* get_member_store_key ( const struct GNUNET_MESSENGER_MemberStore store)

Returns the shared secret you need to access a room of the store.

Parameters
[in]storeMember store
Returns
Shared secret

Definition at line 70 of file gnunet-service-messenger_member_store.c.

References get_room_key(), GNUNET_assert, and GNUNET_MESSENGER_MemberStore::room.

Referenced by get_member_session_key().

71 {
72  GNUNET_assert (store);
73 
74  return get_room_key((const struct GNUNET_MESSENGER_SrvRoom*) store->room);
75 }
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
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:

◆ callback_scan_for_members()

static int callback_scan_for_members ( void *  cls,
const char *  filename 
)
static

Definition at line 78 of file gnunet-service-messenger_member_store.c.

References DIR_SEPARATOR, GNUNET_asprintf(), GNUNET_DISK_directory_test(), GNUNET_free, GNUNET_OK, GNUNET_YES, and load_member().

Referenced by load_member_store().

79 {
80  struct GNUNET_MESSENGER_MemberStore *store = cls;
81 
83  {
84  char *directory;
85 
86  GNUNET_asprintf (&directory, "%s%c", filename, DIR_SEPARATOR);
87 
88  load_member(store, directory);
89 
90  GNUNET_free(directory);
91  }
92 
93  return GNUNET_OK;
94 }
static char * filename
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
#define DIR_SEPARATOR
Definition: platform.h:164
void load_member(struct GNUNET_MESSENGER_MemberStore *store, const char *directory)
Loads data from a directory into a new allocated and created member of a store if the required inform...
enum GNUNET_GenericReturnValue GNUNET_DISK_directory_test(const char *fil, int is_readable)
Test if fil is a directory and listable.
Definition: disk.c:404
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ iterate_load_next_member_sessions()

static int iterate_load_next_member_sessions ( void *  cls,
const struct GNUNET_ShortHashCode id,
void *  value 
)
static

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

References DIR_SEPARATOR, GNUNET_asprintf(), GNUNET_DISK_directory_test(), GNUNET_free, GNUNET_sh2s(), GNUNET_YES, load_member_next_sessions(), and value.

Referenced by load_member_store().

98 {
99  const char *sync_dir = cls;
100 
101  struct GNUNET_MESSENGER_Member *member = value;
102 
103  if (!member)
104  return GNUNET_YES;
105 
106  char *member_dir;
107  GNUNET_asprintf (&member_dir, "%s%s%c", sync_dir, GNUNET_sh2s(id), DIR_SEPARATOR);
108 
109  if (GNUNET_YES == GNUNET_DISK_directory_test (member_dir, GNUNET_YES))
110  load_member_next_sessions (member, member_dir);
111 
112  GNUNET_free(member_dir);
113  return GNUNET_YES;
114 }
const char * GNUNET_sh2s(const struct GNUNET_ShortHashCode *shc)
Convert a short hash value to a string (for printing debug messages).
void load_member_next_sessions(const struct GNUNET_MESSENGER_Member *member, const char *directory)
Loads data about next sessions from a directory into an empty loaded member which does not contain a ...
static char * value
Value of the record to add/remove.
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
#define DIR_SEPARATOR
Definition: platform.h:164
enum GNUNET_GenericReturnValue GNUNET_DISK_directory_test(const char *fil, int is_readable)
Test if fil is a directory and listable.
Definition: disk.c:404
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ iterate_sync_member_contacts()

static int iterate_sync_member_contacts ( void *  cls,
const struct GNUNET_ShortHashCode id,
void *  value 
)
static

Definition at line 117 of file gnunet-service-messenger_member_store.c.

References GNUNET_YES, sync_member_contacts(), and value.

Referenced by load_member_store().

118 {
119  struct GNUNET_MESSENGER_Member *member = value;
120 
121  if (!member)
122  return GNUNET_YES;
123 
124  sync_member_contacts (member);
125  return GNUNET_YES;
126 }
void sync_member_contacts(struct GNUNET_MESSENGER_Member *member)
Synchronizes contacts between all sessions from a given member and other sessions which are linked to...
static char * value
Value of the record to add/remove.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ load_member_store()

void load_member_store ( struct GNUNET_MESSENGER_MemberStore store,
const char *  directory 
)

Loads members from a directory into a member store.

Parameters
[out]storeMember store
[in]directoryPath to a directory

Definition at line 129 of file gnunet-service-messenger_member_store.c.

References callback_scan_for_members(), DIR_SEPARATOR, GNUNET_asprintf(), GNUNET_assert, GNUNET_CONTAINER_multishortmap_iterate(), GNUNET_DISK_directory_scan(), GNUNET_DISK_directory_test(), GNUNET_free, GNUNET_OK, GNUNET_YES, iterate_load_next_member_sessions(), iterate_sync_member_contacts(), GNUNET_MESSENGER_MemberStore::members, and find_typedefs::scan_dir().

Referenced by load_room().

130 {
131  GNUNET_assert ((store) && (directory));
132 
133  char *scan_dir;
134  GNUNET_asprintf (&scan_dir, "%s%s%c", directory, "members", DIR_SEPARATOR);
135 
138 
141 
142  GNUNET_free(scan_dir);
143 }
struct GNUNET_CONTAINER_MultiShortmap * members
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
int GNUNET_DISK_directory_scan(const char *dir_name, GNUNET_FileNameCallback callback, void *callback_cls)
Scan a directory for files.
Definition: disk.c:794
static int iterate_load_next_member_sessions(void *cls, const struct GNUNET_ShortHashCode *id, 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.
static int iterate_sync_member_contacts(void *cls, const struct GNUNET_ShortHashCode *id, void *value)
static int callback_scan_for_members(void *cls, const char *filename)
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
#define DIR_SEPARATOR
Definition: platform.h:164
enum GNUNET_GenericReturnValue GNUNET_DISK_directory_test(const char *fil, int is_readable)
Test if fil is a directory and listable.
Definition: disk.c:404
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ iterate_save_members()

static int iterate_save_members ( void *  cls,
const struct GNUNET_ShortHashCode id,
void *  value 
)
static

Definition at line 146 of file gnunet-service-messenger_member_store.c.

References DIR_SEPARATOR, GNUNET_asprintf(), GNUNET_DISK_directory_create(), GNUNET_DISK_directory_test(), GNUNET_free, GNUNET_NO, GNUNET_OK, GNUNET_sh2s(), GNUNET_YES, save_member(), and value.

Referenced by save_member_store().

147 {
148  const char *save_dir = cls;
149 
150  struct GNUNET_MESSENGER_Member *member = value;
151 
152  if (!member)
153  return GNUNET_YES;
154 
155  char *member_dir;
156  GNUNET_asprintf (&member_dir, "%s%s%c", save_dir, GNUNET_sh2s(id), DIR_SEPARATOR);
157 
158  if ((GNUNET_YES == GNUNET_DISK_directory_test (member_dir, GNUNET_NO)) ||
159  (GNUNET_OK == GNUNET_DISK_directory_create (member_dir)))
160  save_member(member, member_dir);
161 
162  GNUNET_free(member_dir);
163  return GNUNET_YES;
164 }
const char * GNUNET_sh2s(const struct GNUNET_ShortHashCode *shc)
Convert a short hash value to a string (for printing debug messages).
void save_member(struct GNUNET_MESSENGER_Member *member, const char *directory)
Saves data from a member into a directory which can be load to restore the member completely...
static char * value
Value of the record to add/remove.
enum GNUNET_GenericReturnValue GNUNET_DISK_directory_create(const char *dir)
Implementation of "mkdir -p".
Definition: disk.c:476
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
#define DIR_SEPARATOR
Definition: platform.h:164
enum GNUNET_GenericReturnValue GNUNET_DISK_directory_test(const char *fil, int is_readable)
Test if fil is a directory and listable.
Definition: disk.c:404
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ save_member_store()

void save_member_store ( struct GNUNET_MESSENGER_MemberStore store,
const char *  directory 
)

Saves members from a member store into a directory.

Parameters
[in]storeMember store
[in]directoryPath to a directory

Definition at line 167 of file gnunet-service-messenger_member_store.c.

References DIR_SEPARATOR, GNUNET_asprintf(), GNUNET_assert, GNUNET_CONTAINER_multishortmap_iterate(), GNUNET_DISK_directory_create(), GNUNET_DISK_directory_test(), GNUNET_free, GNUNET_NO, GNUNET_OK, GNUNET_YES, iterate_save_members(), and GNUNET_MESSENGER_MemberStore::members.

Referenced by save_room().

168 {
169  GNUNET_assert ((store) && (directory));
170 
171  char* save_dir;
172  GNUNET_asprintf (&save_dir, "%s%s%c", directory, "members", DIR_SEPARATOR);
173 
174  if ((GNUNET_YES == GNUNET_DISK_directory_test (save_dir, GNUNET_NO)) ||
175  (GNUNET_OK == GNUNET_DISK_directory_create (save_dir)))
177 
178  GNUNET_free(save_dir);
179 }
struct GNUNET_CONTAINER_MultiShortmap * members
static int iterate_save_members(void *cls, const struct GNUNET_ShortHashCode *id, void *value)
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
int GNUNET_CONTAINER_multishortmap_iterate(struct GNUNET_CONTAINER_MultiShortmap *map, GNUNET_CONTAINER_ShortmapIterator it, void *it_cls)
Iterate over all entries in the map.
enum GNUNET_GenericReturnValue GNUNET_DISK_directory_create(const char *dir)
Implementation of "mkdir -p".
Definition: disk.c:476
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
#define DIR_SEPARATOR
Definition: platform.h:164
enum GNUNET_GenericReturnValue GNUNET_DISK_directory_test(const char *fil, int is_readable)
Test if fil is a directory and listable.
Definition: disk.c:404
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_store_member()

struct GNUNET_MESSENGER_Member* get_store_member ( const struct GNUNET_MESSENGER_MemberStore store,
const struct GNUNET_ShortHashCode id 
)

Returns the member in a store identified by a given id.

If the store does not contain a member with the given id, NULL gets returned.

Parameters
[in]storeMember store
[in]idMember id
Returns
Member or NULL

Definition at line 182 of file gnunet-service-messenger_member_store.c.

References GNUNET_assert, GNUNET_CONTAINER_multishortmap_get(), and GNUNET_MESSENGER_MemberStore::members.

Referenced by add_store_member(), get_store_member_of(), handle_get_message(), load_member_session_next(), open_room(), and solve_room_member_collisions().

183 {
184  GNUNET_assert ((store) && (store->members) && (id));
185 
186  return GNUNET_CONTAINER_multishortmap_get (store->members, id);
187 }
struct GNUNET_CONTAINER_MultiShortmap * members
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
void * GNUNET_CONTAINER_multishortmap_get(const struct GNUNET_CONTAINER_MultiShortmap *map, const struct GNUNET_ShortHashCode *key)
Given a key find a value in the map matching the key.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_store_member_of()

struct GNUNET_MESSENGER_Member* get_store_member_of ( struct GNUNET_MESSENGER_MemberStore store,
const struct GNUNET_MESSENGER_Message message 
)

Returns the member of a store using a sender id of a given message.

If the member does not provide a matching session, NULL gets returned.

Parameters

Definition at line 190 of file gnunet-service-messenger_member_store.c.

References add_store_member(), get_store_member(), GNUNET_MESSENGER_KIND_INFO, GNUNET_MESSENGER_KIND_JOIN, GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_MessageHeader::kind, and GNUNET_MESSENGER_MessageHeader::sender_id.

Referenced by callback_found_message(), callback_room_handle_message(), check_room_peer_status(), handle_room_messages(), and recv_message_request().

191 {
192  if ((GNUNET_MESSENGER_KIND_INFO == message->header.kind) ||
193  (GNUNET_MESSENGER_KIND_JOIN == message->header.kind))
194  return add_store_member(store, &(message->header.sender_id));
195  else
196  return get_store_member(store, &(message->header.sender_id));
197 }
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_MESSENGER_Member * add_store_member(struct GNUNET_MESSENGER_MemberStore *store, const struct GNUNET_ShortHashCode *id)
Adds a member to a store under a specific id and returns it on success.
struct GNUNET_MESSENGER_Member * get_store_member(const struct GNUNET_MESSENGER_MemberStore *store, const struct GNUNET_ShortHashCode *id)
Returns the member in a store identified by a given id.
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:

◆ add_store_member()

struct GNUNET_MESSENGER_Member* add_store_member ( struct GNUNET_MESSENGER_MemberStore store,
const struct GNUNET_ShortHashCode id 
)

Adds a member to a store under a specific id and returns it on success.

Parameters

Definition at line 200 of file gnunet-service-messenger_member_store.c.

References create_member(), destroy_member(), get_member_id(), get_store_member(), GNUNET_assert, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST, GNUNET_CONTAINER_multishortmap_put(), GNUNET_OK, and GNUNET_MESSENGER_MemberStore::members.

Referenced by get_store_member_of(), join_room_locally(), load_member(), open_room(), and switch_member_session().

201 {
202  GNUNET_assert ((store) && (store->members));
203 
204  struct GNUNET_MESSENGER_Member *member = id? get_store_member(store, id) : NULL;
205 
206  if (member)
207  return member;
208 
209  member = create_member(store, id);
210 
211  if (!member)
212  return NULL;
213 
214  if (GNUNET_OK != GNUNET_CONTAINER_multishortmap_put (store->members, get_member_id(member), member,
216  {
217  destroy_member(member);
218  return NULL;
219  }
220 
221  return member;
222 }
struct GNUNET_CONTAINER_MultiShortmap * members
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
void destroy_member(struct GNUNET_MESSENGER_Member *member)
Destroys a member and frees its memory fully.
, ' bother checking if a value already exists (faster than GNUNET_CONTAINER_MULTIHASHMAPOPTION_...
struct GNUNET_MESSENGER_Member * create_member(struct GNUNET_MESSENGER_MemberStore *store, const struct GNUNET_ShortHashCode *id)
Creates and allocates a new member of a room with an optionally defined or random id...
int GNUNET_CONTAINER_multishortmap_put(struct GNUNET_CONTAINER_MultiShortmap *map, const struct GNUNET_ShortHashCode *key, void *value, enum GNUNET_CONTAINER_MultiHashMapOption opt)
Store a key-value pair in the map.
struct GNUNET_MESSENGER_Member * get_store_member(const struct GNUNET_MESSENGER_MemberStore *store, const struct GNUNET_ShortHashCode *id)
Returns the member in a store identified by a given id.
const struct GNUNET_ShortHashCode * get_member_id(const struct GNUNET_MESSENGER_Member *member)
Returns the current id of a given member.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ iterate_store_members_it()

static int iterate_store_members_it ( void *  cls,
const struct GNUNET_ShortHashCode key,
void *  value 
)
static

Definition at line 230 of file gnunet-service-messenger_member_store.c.

References GNUNET_MESSENGER_ClosureIterateMembers::cls, GNUNET_MESSENGER_ClosureIterateMembers::it, iterate_member_sessions(), and value.

Referenced by iterate_store_members().

231 {
233  struct GNUNET_MESSENGER_Member *member = value;
234 
235  return iterate_member_sessions(member, iterate->it, iterate->cls);
236 }
static char * value
Value of the record to add/remove.
int iterate_member_sessions(struct GNUNET_MESSENGER_Member *member, GNUNET_MESSENGER_MemberIteratorCallback it, void *cls)
Iterate through all member sessions currently connected to a given member and call the provided itera...
Here is the call graph for this function:
Here is the caller graph for this function:

◆ iterate_store_members()

int iterate_store_members ( struct GNUNET_MESSENGER_MemberStore store,
GNUNET_MESSENGER_MemberIteratorCallback  it,
void *  cls 
)

Iterate through all member sessions currently connected to the members of the given member store and call the provided iterator callback with a selected closure.

The function will return the amount of members it iterated through.

Parameters

Definition at line 239 of file gnunet-service-messenger_member_store.c.

References GNUNET_MESSENGER_ClosureIterateMembers::cls, GNUNET_assert, GNUNET_CONTAINER_multishortmap_iterate(), GNUNET_MESSENGER_ClosureIterateMembers::it, iterate_store_members_it(), and GNUNET_MESSENGER_MemberStore::members.

Referenced by callback_room_handle_message(), join_room_locally(), and recv_message_info().

241 {
242  GNUNET_assert ((store) && (store->members) && (it));
243 
245 
246  iterate.it = it;
247  iterate.cls = cls;
248 
250 }
struct GNUNET_CONTAINER_MultiShortmap * members
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
int GNUNET_CONTAINER_multishortmap_iterate(struct GNUNET_CONTAINER_MultiShortmap *map, GNUNET_CONTAINER_ShortmapIterator it, void *it_cls)
Iterate over all entries in the map.
static int iterate_store_members_it(void *cls, const struct GNUNET_ShortHashCode *key, void *value)
Here is the call graph for this function:
Here is the caller graph for this function: