summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheJackiMonster <thejackimonster@gmail.com>2022-03-19 19:59:53 +0100
committerTheJackiMonster <thejackimonster@gmail.com>2022-03-20 14:13:57 +0100
commiteec5d26ea19d234de7abe167ab42785620f1bd55 (patch)
tree8882376c104835d564c48c40cdcd27b906df1074
parent69176480c5ff9faad872d2aad68a5780c2f364b5 (diff)
Add sending read receipts
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-rw-r--r--include/gnunet_chat_lib.h12
-rw-r--r--src/gnunet_chat_lib.c45
2 files changed, 57 insertions, 0 deletions
diff --git a/include/gnunet_chat_lib.h b/include/gnunet_chat_lib.h
index 6610f59..a434381 100644
--- a/include/gnunet_chat_lib.h
+++ b/include/gnunet_chat_lib.h
@@ -814,6 +814,18 @@ GNUNET_CHAT_context_send_text (struct GNUNET_CHAT_Context *context,
const char *text);
/**
+ * Sends a read receipt depending on a selected <i>message</i> into a given
+ * chat <i>context</i>.
+ *
+ * @param[in,out] context Chat context
+ * @param[in] message Message (optional)
+ * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure
+ */
+int
+GNUNET_CHAT_context_send_read_receipt (struct GNUNET_CHAT_Context *context,
+ const struct GNUNET_CHAT_Message *message);
+
+/**
* Uploads a local file specified via its <i>path</i> using symmetric encryption
* and shares the regarding information to download and decrypt it in a given
* chat <i>context</i>.
diff --git a/src/gnunet_chat_lib.c b/src/gnunet_chat_lib.c
index 2632fb5..e11c92d 100644
--- a/src/gnunet_chat_lib.c
+++ b/src/gnunet_chat_lib.c
@@ -925,6 +925,51 @@ GNUNET_CHAT_context_send_text (struct GNUNET_CHAT_Context *context,
}
+int
+GNUNET_CHAT_context_send_read_receipt (struct GNUNET_CHAT_Context *context,
+ const struct GNUNET_CHAT_Message *message)
+{
+ if ((!context) || (!(context->room)))
+ return GNUNET_SYSERR;
+
+ char zero = '\0';
+ struct GNUNET_MESSENGER_Message msg;
+ msg.header.kind = GNUNET_MESSENGER_KIND_TEXT;
+ msg.body.text.text = &zero;
+
+ const struct GNUNET_MESSENGER_Contact *receiver = NULL;
+
+ if (!message)
+ goto skip_filter;
+
+ if (GNUNET_CHAT_FLAG_NONE != message->flag)
+ return GNUNET_SYSERR;
+
+ if (message->flags & GNUNET_MESSENGER_FLAG_SENT)
+ return GNUNET_OK;
+
+ if (message->flags & GNUNET_MESSENGER_FLAG_PRIVATE)
+ {
+ receiver = GNUNET_MESSENGER_get_sender(context->room, &(message->hash));
+
+ if (!receiver)
+ return GNUNET_SYSERR;
+ }
+
+ if ((!(message->msg)) ||
+ (GNUNET_MESSENGER_KIND_TEXT != message->msg->header.kind))
+ goto skip_filter;
+
+ if ((!(message->msg->body.text.text)) ||
+ (!(message->msg->body.text.text[0])))
+ return GNUNET_SYSERR;
+
+skip_filter:
+ GNUNET_MESSENGER_send_message(context->room, &msg, receiver);
+ return GNUNET_OK;
+}
+
+
struct GNUNET_CHAT_File*
GNUNET_CHAT_context_send_file (struct GNUNET_CHAT_Context *context,
const char *path,