GNUnet 0.21.2
gnunet-service-messenger_message_state.c File Reference
Include dependency graph for gnunet-service-messenger_message_state.c:

Go to the source code of this file.

Functions

void init_message_state (struct GNUNET_MESSENGER_MessageState *state)
 
void clear_message_state (struct GNUNET_MESSENGER_MessageState *state)
 
void get_message_state_chain_hash (const struct GNUNET_MESSENGER_MessageState *state, struct GNUNET_HashCode *hash)
 
const struct GNUNET_HashCodeget_message_state_merge_hash (const struct GNUNET_MESSENGER_MessageState *state)
 
void update_message_state (struct GNUNET_MESSENGER_MessageState *state, enum GNUNET_GenericReturnValue requested, const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash)
 
void load_message_state (struct GNUNET_MESSENGER_MessageState *state, const char *path)
 
void save_message_state (const struct GNUNET_MESSENGER_MessageState *state, const char *path)
 

Function Documentation

◆ init_message_state()

void init_message_state ( struct GNUNET_MESSENGER_MessageState state)

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

32{
34
35 init_list_messages (&(state->last_messages));
36}
enum State state
current state of profiling
void init_list_messages(struct GNUNET_MESSENGER_ListMessages *messages)
Initializes list of message hashes as empty list.
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.

References GNUNET_assert, init_list_messages(), and state.

Referenced by create_srv_room(), and create_tunnel().

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

◆ clear_message_state()

void clear_message_state ( struct GNUNET_MESSENGER_MessageState state)

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

41{
43
44 clear_list_messages (&(state->last_messages));
45}
void clear_list_messages(struct GNUNET_MESSENGER_ListMessages *messages)
Clears the list of message hashes.

References clear_list_messages(), GNUNET_assert, and state.

Referenced by destroy_srv_room(), and destroy_tunnel().

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

◆ get_message_state_chain_hash()

void get_message_state_chain_hash ( const struct GNUNET_MESSENGER_MessageState state,
struct GNUNET_HashCode hash 
)

Definition at line 49 of file gnunet-service-messenger_message_state.c.

51{
52 GNUNET_assert ((state) && (hash));
53
54 if (state->last_messages.head)
55 GNUNET_memcpy (hash, &(state->last_messages.head->hash), sizeof(*hash));
56 else
57 memset (hash, 0, sizeof(*hash));
58}
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.

References GNUNET_assert, GNUNET_memcpy, and state.

Referenced by pack_srv_room_message(), and sync_srv_handle_messages().

Here is the caller graph for this function:

◆ get_message_state_merge_hash()

const struct GNUNET_HashCode * get_message_state_merge_hash ( const struct GNUNET_MESSENGER_MessageState state)

Definition at line 62 of file gnunet-service-messenger_message_state.c.

63{
65
66 if (state->last_messages.head == state->last_messages.tail)
67 return NULL;
68
69 return &(state->last_messages.tail->hash);
70}

References GNUNET_assert, and state.

Referenced by idle_request_room_messages(), and merge_srv_room_last_messages().

Here is the caller graph for this function:

◆ update_message_state()

void update_message_state ( struct GNUNET_MESSENGER_MessageState state,
enum GNUNET_GenericReturnValue  requested,
const struct GNUNET_MESSENGER_Message message,
const struct GNUNET_HashCode hash 
)

Definition at line 74 of file gnunet-service-messenger_message_state.c.

78{
79 GNUNET_assert ((state) && (message) && (hash));
80
81 if ((GNUNET_YES == requested) ||
84 (get_message_discourse (message)))
85 return;
86
88 remove_from_list_messages (&(state->last_messages),
89 &(message->body.merge.previous));
90 remove_from_list_messages (&(state->last_messages),
91 &(message->header.previous));
92
93 add_to_list_messages (&(state->last_messages), hash);
94}
void remove_from_list_messages(struct GNUNET_MESSENGER_ListMessages *messages, const struct GNUNET_HashCode *hash)
Removes the first entry with a matching hash from the list.
void add_to_list_messages(struct GNUNET_MESSENGER_ListMessages *messages, const struct GNUNET_HashCode *hash)
Adds a specific hash from a message to the end of the list.
@ GNUNET_YES
@ GNUNET_MESSENGER_KIND_INFO
The info kind.
@ GNUNET_MESSENGER_KIND_REQUEST
The request kind.
@ GNUNET_MESSENGER_KIND_MERGE
The merge kind.
const struct GNUNET_ShortHashCode * get_message_discourse(const struct GNUNET_MESSENGER_Message *message)
Returns the discourse hash of a message depending on its kind.
struct GNUNET_MESSENGER_MessageMerge merge
struct GNUNET_HashCode previous
The hash of the previous message from the senders perspective.
enum GNUNET_MESSENGER_MessageKind kind
The kind of the message.
struct GNUNET_HashCode previous
The hash of a second previous message.
struct GNUNET_MESSENGER_MessageHeader header
Header.
struct GNUNET_MESSENGER_MessageBody body
Body.

References add_to_list_messages(), GNUNET_MESSENGER_Message::body, get_message_discourse(), GNUNET_assert, GNUNET_MESSENGER_KIND_INFO, GNUNET_MESSENGER_KIND_MERGE, GNUNET_MESSENGER_KIND_REQUEST, GNUNET_YES, GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_MessageHeader::kind, GNUNET_MESSENGER_MessageBody::merge, GNUNET_MESSENGER_MessageHeader::previous, GNUNET_MESSENGER_MessageMerge::previous, remove_from_list_messages(), and state.

Referenced by update_room_message(), and update_tunnel_last_message().

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

◆ load_message_state()

void load_message_state ( struct GNUNET_MESSENGER_MessageState state,
const char *  path 
)

Definition at line 98 of file gnunet-service-messenger_message_state.c.

100{
101 GNUNET_assert ((state) && (path));
102
103 char *last_messages_file;
104 GNUNET_asprintf (&last_messages_file, "%s%s", path, "last_messages.list");
105
106 load_list_messages (&(state->last_messages), last_messages_file);
107 GNUNET_free (last_messages_file);
108}
void load_list_messages(struct GNUNET_MESSENGER_ListMessages *messages, const char *path)
Loads the list of message hashes from a file under a given path.
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
#define GNUNET_free(ptr)
Wrapper around free.

References GNUNET_asprintf(), GNUNET_assert, GNUNET_free, load_list_messages(), and state.

Referenced by load_srv_room().

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

◆ save_message_state()

void save_message_state ( const struct GNUNET_MESSENGER_MessageState state,
const char *  path 
)

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

114{
115 GNUNET_assert ((state) && (path));
116
117 char *last_messages_file;
118 GNUNET_asprintf (&last_messages_file, "%s%s", path, "last_messages.list");
119
120 save_list_messages (&(state->last_messages), last_messages_file);
121 GNUNET_free (last_messages_file);
122}
void save_list_messages(const struct GNUNET_MESSENGER_ListMessages *messages, const char *path)
Saves the list of message hashes to a file under a given path.

References GNUNET_asprintf(), GNUNET_assert, GNUNET_free, save_list_messages(), and state.

Referenced by save_srv_room().

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