summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheJackiMonster <thejackimonster@gmail.com>2022-08-13 22:03:29 +0200
committerTheJackiMonster <thejackimonster@gmail.com>2022-08-13 22:03:29 +0200
commita67bafd0a50710de5fd729dbc5b938ad48580954 (patch)
treeb7f02baeeca9971b1116de441d7aaca6c1bda7ca
parent9d4878507c13f8b386c71ddec476f97d63f26e8b (diff)
Make message handling client side more reliable
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-rw-r--r--src/gnunet_chat_handle_intern.c9
-rw-r--r--src/gnunet_chat_lib.c24
-rw-r--r--src/gnunet_chat_util.c28
-rw-r--r--src/gnunet_chat_util.h13
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_ */