diff options
author | TheJackiMonster <thejackimonster@gmail.com> | 2022-08-13 22:03:29 +0200 |
---|---|---|
committer | TheJackiMonster <thejackimonster@gmail.com> | 2022-08-13 22:03:29 +0200 |
commit | a67bafd0a50710de5fd729dbc5b938ad48580954 (patch) | |
tree | b7f02baeeca9971b1116de441d7aaca6c1bda7ca | |
parent | 9d4878507c13f8b386c71ddec476f97d63f26e8b (diff) |
Make message handling client side more reliable
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-rw-r--r-- | src/gnunet_chat_handle_intern.c | 9 | ||||
-rw-r--r-- | src/gnunet_chat_lib.c | 24 | ||||
-rw-r--r-- | src/gnunet_chat_util.c | 28 | ||||
-rw-r--r-- | src/gnunet_chat_util.h | 13 |
4 files changed, 48 insertions, 26 deletions
diff --git a/src/gnunet_chat_handle_intern.c b/src/gnunet_chat_handle_intern.c index a026617..04afcbc 100644 --- a/src/gnunet_chat_handle_intern.c +++ b/src/gnunet_chat_handle_intern.c @@ -374,7 +374,7 @@ intern_provide_contact_for_member(struct GNUNET_CHAT_Handle *handle, GNUNET_assert((handle) && (handle->contacts)); if (!member) - return GNUNET_OK; + return GNUNET_SYSERR; struct GNUNET_ShortHashCode shorthash; util_shorthash_from_member(member, &shorthash); @@ -584,12 +584,15 @@ on_handle_message (void *cls, (hash)); if ((handle->destruction) || - (GNUNET_OK != handle_request_context_by_room(handle, room)) || - (GNUNET_OK != intern_provide_contact_for_member(handle, sender, NULL))) + (GNUNET_OK != handle_request_context_by_room(handle, room))) return; GNUNET_MESSENGER_get_message(room, &(msg->header.previous)); + if ((GNUNET_CHAT_KIND_UNKNOWN == util_message_kind_from_kind(msg->header.kind)) || + (GNUNET_OK != intern_provide_contact_for_member(handle, sender, NULL))) + return; + struct GNUNET_CHAT_Context *context = GNUNET_CONTAINER_multihashmap_get( handle->contexts, GNUNET_MESSENGER_room_get_key(room) ); diff --git a/src/gnunet_chat_lib.c b/src/gnunet_chat_lib.c index 114f40c..b6911e7 100644 --- a/src/gnunet_chat_lib.c +++ b/src/gnunet_chat_lib.c @@ -1327,29 +1327,7 @@ GNUNET_CHAT_message_get_kind (const struct GNUNET_CHAT_Message *message) if (!(message->msg)) return GNUNET_CHAT_KIND_UNKNOWN; - switch (message->msg->header.kind) - { - case GNUNET_MESSENGER_KIND_JOIN: - return GNUNET_CHAT_KIND_JOIN; - case GNUNET_MESSENGER_KIND_LEAVE: - return GNUNET_CHAT_KIND_LEAVE; - case GNUNET_MESSENGER_KIND_NAME: - case GNUNET_MESSENGER_KIND_KEY: - case GNUNET_MESSENGER_KIND_ID: - return GNUNET_CHAT_KIND_CONTACT; - case GNUNET_MESSENGER_KIND_INVITE: - return GNUNET_CHAT_KIND_INVITATION; - case GNUNET_MESSENGER_KIND_TEXT: - return GNUNET_CHAT_KIND_TEXT; - case GNUNET_MESSENGER_KIND_FILE: - return GNUNET_CHAT_KIND_FILE; - case GNUNET_MESSENGER_KIND_PRIVATE: - return GNUNET_CHAT_KIND_WHISPER; - case GNUNET_MESSENGER_KIND_DELETE: - return GNUNET_CHAT_KIND_DELETION; - default: - return GNUNET_CHAT_KIND_UNKNOWN; - } + return util_message_kind_from_kind(message->msg->header.kind); } diff --git a/src/gnunet_chat_util.c b/src/gnunet_chat_util.c index 26d2985..8a0879b 100644 --- a/src/gnunet_chat_util.c +++ b/src/gnunet_chat_util.c @@ -347,3 +347,31 @@ util_lobby_name (const struct GNUNET_HashCode *hash, GNUNET_free(low); return result; } + +enum GNUNET_CHAT_MessageKind +util_message_kind_from_kind (enum GNUNET_MESSENGER_MessageKind kind) +{ + switch (kind) + { + case GNUNET_MESSENGER_KIND_JOIN: + return GNUNET_CHAT_KIND_JOIN; + case GNUNET_MESSENGER_KIND_LEAVE: + return GNUNET_CHAT_KIND_LEAVE; + case GNUNET_MESSENGER_KIND_NAME: + case GNUNET_MESSENGER_KIND_KEY: + case GNUNET_MESSENGER_KIND_ID: + return GNUNET_CHAT_KIND_CONTACT; + case GNUNET_MESSENGER_KIND_INVITE: + return GNUNET_CHAT_KIND_INVITATION; + case GNUNET_MESSENGER_KIND_TEXT: + return GNUNET_CHAT_KIND_TEXT; + case GNUNET_MESSENGER_KIND_FILE: + return GNUNET_CHAT_KIND_FILE; + case GNUNET_MESSENGER_KIND_PRIVATE: + return GNUNET_CHAT_KIND_WHISPER; + case GNUNET_MESSENGER_KIND_DELETE: + return GNUNET_CHAT_KIND_DELETION; + default: + return GNUNET_CHAT_KIND_UNKNOWN; + } +} diff --git a/src/gnunet_chat_util.h b/src/gnunet_chat_util.h index 8845eab..9229586 100644 --- a/src/gnunet_chat_util.h +++ b/src/gnunet_chat_util.h @@ -32,6 +32,8 @@ #include <gnunet/gnunet_messenger_service.h> #include <gnunet/gnunet_util_lib.h> +#include "gnunet_chat_lib.h" + /** * Enum for the types of chat contexts. */ @@ -185,4 +187,15 @@ int util_lobby_name (const struct GNUNET_HashCode *hash, char **name); +/** + * Return the chat related kind for a messages original kind + * from the service. It will return #GNUNET_CHAT_KIND_UNKNOWN + * in case the message kind is not supported. + * + * @param[in] kind Messenger service message kind + * @return Chat message kind or #GNUNET_CHAT_KIND_UNKNOWN_ + */ +enum GNUNET_CHAT_MessageKind +util_message_kind_from_kind (enum GNUNET_MESSENGER_MessageKind kind); + #endif /* GNUNET_CHAT_UTIL_H_ */ |