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

GNUnet MESSENGER service. More...

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

Go to the source code of this file.

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, void *handle)
 Adds a specific handle to the end of the list. More...
 
int remove_list_handle (struct GNUNET_MESSENGER_ListHandles *handles, void *handle)
 Removes the first entry matching with a specific handle from the list and returns GNUNET_YES on success or GNUNET_NO on failure. More...
 
void * find_list_handle_by_member (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.c.

Function Documentation

◆ init_list_handles()

void init_list_handles ( struct GNUNET_MESSENGER_ListHandles handles)

Initializes list of handles as empty list.

Parameters
handlesList of handles

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

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

Referenced by create_service().

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
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
handlesList of handles

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

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().

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 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
struct GNUNET_MESSENGER_ListHandle * tail
void destroy_handle(struct GNUNET_MESSENGER_SrvHandle *handle)
Destroys a handle and frees its memory fully.
struct GNUNET_MESSENGER_ListHandle * head
#define GNUNET_free(ptr)
Wrapper around free.
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,
void *  handle 
)

Adds a specific handle to the end of the list.

Parameters
handlesList of handles
handleHandle

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

References 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().

59 {
61 
62  element->handle = handle;
63 
64  GNUNET_CONTAINER_DLL_insert_tail(handles->head, handles->tail, element);
65 }
struct GNUNET_MESSENGER_ListHandle * tail
#define GNUNET_new(type)
Allocate a struct or union of the given type.
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.
struct GNUNET_MESSENGER_ListHandle * head
Here is the caller graph for this function:

◆ remove_list_handle()

int remove_list_handle ( struct GNUNET_MESSENGER_ListHandles handles,
void *  handle 
)

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

Parameters
handlesList of handles
handleHandle
Returns
GNUNET_YES on success, otherwise GNUNET_NO

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

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

Referenced by remove_service_handle().

69 {
70  struct GNUNET_MESSENGER_ListHandle *element;
71 
72  for (element = handles->head; element; element = element->next)
73  if (element->handle == handle)
74  break;
75 
76  if (!element)
77  return GNUNET_NO;
78 
79  GNUNET_CONTAINER_DLL_remove(handles->head, handles->tail, element);
80  GNUNET_free(element);
81 
82  return GNUNET_YES;
83 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
struct GNUNET_MESSENGER_ListHandle * tail
struct GNUNET_MESSENGER_ListHandle * next
static struct GNUNET_DNS_Handle * handle
Handle to transport service.
struct GNUNET_MESSENGER_ListHandle * head
#define GNUNET_free(ptr)
Wrapper around free.
Here is the caller graph for this function:

◆ find_list_handle_by_member()

void* find_list_handle_by_member ( 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
handlesList of handles
keyCommon key of a room
Returns
First handle which is a current member

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

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

Referenced by close_service_room().

87 {
88  struct GNUNET_MESSENGER_ListHandle *element;
89 
90  for (element = handles->head; element; element = element->next)
91  if (get_handle_member_id ((struct GNUNET_MESSENGER_SrvHandle*) element->handle, key))
92  return element->handle;
93 
94  return NULL;
95 }
struct GNUNET_MESSENGER_ListHandle * next
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.
struct GNUNET_MESSENGER_ListHandle * head
Here is the call graph for this function:
Here is the caller graph for this function: