GNUnet  0.11.x
Data Structures | Functions
gnunet-service-messenger_list_handles.h File Reference

GNUnet MESSENGER service. More...

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

Go to the source code of this file.

Data Structures

struct  GNUNET_MESSENGER_ListHandle
 
struct  GNUNET_MESSENGER_ListHandles
 

Functions

void init_list_handles (struct GNUNET_MESSENGER_ListHandles *handles)
 Initializes list of handles as empty list. More...
 
void clear_list_handles (struct GNUNET_MESSENGER_ListHandles *handles)
 Destroys remaining handles and clears the list. More...
 
void add_list_handle (struct GNUNET_MESSENGER_ListHandles *handles, struct GNUNET_MESSENGER_SrvHandle *handle)
 Adds a specific handle to the end of the list. More...
 
int remove_list_handle (struct GNUNET_MESSENGER_ListHandles *handles, struct GNUNET_MESSENGER_SrvHandle *handle)
 Removes the first entry matching with a specific handle from the list of handles and returns GNUNET_YES on success or GNUNET_NO on failure. More...
 
struct GNUNET_MESSENGER_SrvHandlefind_list_handle_by_member (const struct GNUNET_MESSENGER_ListHandles *handles, const struct GNUNET_HashCode *key)
 Searches linearly through the list of handles for members of a specific room which is identified by a given key. More...
 

Detailed Description

GNUnet MESSENGER service.

Author
Tobias Frisch

Definition in file gnunet-service-messenger_list_handles.h.

Function Documentation

◆ init_list_handles()

void init_list_handles ( struct GNUNET_MESSENGER_ListHandles handles)

Initializes list of handles as empty list.

Parameters
[out]handlesList of handles

Definition at line 31 of file gnunet-service-messenger_list_handles.c.

32 {
33  GNUNET_assert(handles);
34 
35  handles->head = NULL;
36  handles->tail = NULL;
37 }
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
struct GNUNET_MESSENGER_ListHandle * tail
struct GNUNET_MESSENGER_ListHandle * head

References GNUNET_assert, GNUNET_MESSENGER_ListHandles::head, and GNUNET_MESSENGER_ListHandles::tail.

Referenced by create_service().

Here is the caller graph for this function:

◆ clear_list_handles()

void clear_list_handles ( struct GNUNET_MESSENGER_ListHandles handles)

Destroys remaining handles and clears the list.

Parameters
[in/out]handles List of handles

Definition at line 40 of file gnunet-service-messenger_list_handles.c.

41 {
42  GNUNET_assert(handles);
43 
44  while (handles->head)
45  {
46  struct GNUNET_MESSENGER_ListHandle *element = handles->head;
47 
48  GNUNET_CONTAINER_DLL_remove(handles->head, handles->tail, element);
49  destroy_handle (element->handle);
50  GNUNET_free(element);
51  }
52 
53  handles->head = NULL;
54  handles->tail = NULL;
55 }
void destroy_handle(struct GNUNET_MESSENGER_SrvHandle *handle)
Destroys a handle and frees its memory fully.
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
#define GNUNET_free(ptr)
Wrapper around free.
struct GNUNET_MESSENGER_SrvHandle * handle

References destroy_handle(), GNUNET_assert, GNUNET_CONTAINER_DLL_remove, GNUNET_free, GNUNET_MESSENGER_ListHandle::handle, GNUNET_MESSENGER_ListHandles::head, and GNUNET_MESSENGER_ListHandles::tail.

Referenced by destroy_service().

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

◆ add_list_handle()

void add_list_handle ( struct GNUNET_MESSENGER_ListHandles handles,
struct GNUNET_MESSENGER_SrvHandle handle 
)

Adds a specific handle to the end of the list.

Parameters
[in/out]handles List of handles
[in/out]handle Handle

Definition at line 58 of file gnunet-service-messenger_list_handles.c.

60 {
61  GNUNET_assert((handles) && (handle));
62 
64 
65  element->handle = handle;
66 
67  GNUNET_CONTAINER_DLL_insert_tail(handles->head, handles->tail, element);
68 }
static struct GNUNET_DNS_Handle * handle
Handle to transport service.
#define GNUNET_CONTAINER_DLL_insert_tail(head, tail, element)
Insert an element at the tail of a DLL.
#define GNUNET_new(type)
Allocate a struct or union of the given type.

References GNUNET_assert, GNUNET_CONTAINER_DLL_insert_tail, GNUNET_new, handle, GNUNET_MESSENGER_ListHandle::handle, GNUNET_MESSENGER_ListHandles::head, and GNUNET_MESSENGER_ListHandles::tail.

Referenced by add_service_handle().

Here is the caller graph for this function:

◆ remove_list_handle()

int remove_list_handle ( struct GNUNET_MESSENGER_ListHandles handles,
struct GNUNET_MESSENGER_SrvHandle handle 
)

Removes the first entry matching with a specific handle from the list of handles and returns GNUNET_YES on success or GNUNET_NO on failure.

Parameters
[in/out]handles List of handles
[in/out]handle Handle
Returns
GNUNET_YES on success, otherwise GNUNET_NO

Definition at line 71 of file gnunet-service-messenger_list_handles.c.

73 {
74  GNUNET_assert((handles) && (handle));
75 
76  struct GNUNET_MESSENGER_ListHandle *element;
77 
78  for (element = handles->head; element; element = element->next)
79  if (element->handle == handle)
80  break;
81 
82  if (!element)
83  return GNUNET_NO;
84 
85  GNUNET_CONTAINER_DLL_remove(handles->head, handles->tail, element);
86  GNUNET_free(element);
87 
88  return GNUNET_YES;
89 }
@ GNUNET_YES
Definition: gnunet_common.h:97
@ GNUNET_NO
Definition: gnunet_common.h:94
struct GNUNET_MESSENGER_ListHandle * next

References GNUNET_assert, GNUNET_CONTAINER_DLL_remove, GNUNET_free, GNUNET_NO, GNUNET_YES, handle, GNUNET_MESSENGER_ListHandle::handle, GNUNET_MESSENGER_ListHandles::head, GNUNET_MESSENGER_ListHandle::next, and GNUNET_MESSENGER_ListHandles::tail.

Referenced by remove_service_handle().

Here is the caller graph for this function:

◆ find_list_handle_by_member()

struct GNUNET_MESSENGER_SrvHandle* find_list_handle_by_member ( const struct GNUNET_MESSENGER_ListHandles handles,
const struct GNUNET_HashCode key 
)

Searches linearly through the list of handles for members of a specific room which is identified by a given key.

If no handle is found which is a current member, NULL gets returned.

Parameters
[in]handlesList of handles
[in]keyCommon key of a room
Returns
First handle which is a current member

Definition at line 92 of file gnunet-service-messenger_list_handles.c.

94 {
95  GNUNET_assert((handles) && (key));
96 
97  struct GNUNET_MESSENGER_ListHandle *element;
98 
99  for (element = handles->head; element; element = element->next)
100  if (get_handle_member_id ((struct GNUNET_MESSENGER_SrvHandle*) element->handle, key))
101  return element->handle;
102 
103  return NULL;
104 }
struct GNUNET_HashCode key
The key used in the DHT.
const struct GNUNET_ShortHashCode * get_handle_member_id(const struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key)
Returns the member id of a given handle in a specific room.

References get_handle_member_id(), GNUNET_assert, GNUNET_MESSENGER_ListHandle::handle, GNUNET_MESSENGER_ListHandles::head, key, and GNUNET_MESSENGER_ListHandle::next.

Referenced by close_service_room().

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