[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet] 05/08: MESSENGER: Implement handling transcript messages
From: |
gnunet |
Subject: |
[gnunet] 05/08: MESSENGER: Implement handling transcript messages |
Date: |
Sat, 20 Jan 2024 10:08:34 +0100 |
This is an automated email from the git hooks/post-receive script.
thejackimonster pushed a commit to branch master
in repository gnunet.
commit 596af28f16de5bd77e847db8704a5bc26e7d369a
Author: TheJackiMonster <thejackimonster@gmail.com>
AuthorDate: Sat Jan 20 01:32:56 2024 +0100
MESSENGER: Implement handling transcript messages
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
---
src/service/messenger/messenger_api.c | 26 ++++++++++++++------
src/service/messenger/messenger_api_message.c | 35 +++++++++++++++++++++++++++
src/service/messenger/messenger_api_message.h | 9 +++++++
3 files changed, 63 insertions(+), 7 deletions(-)
diff --git a/src/service/messenger/messenger_api.c
b/src/service/messenger/messenger_api.c
index 1528d00d2..ea0d6bca5 100644
--- a/src/service/messenger/messenger_api.c
+++ b/src/service/messenger/messenger_api.c
@@ -326,18 +326,30 @@ handle_recv_message (void *cls,
struct GNUNET_MESSENGER_Contact *recipient = NULL;
- if (private_message)
+ if (!private_message)
+ goto skip_recipient;
+
+ const struct GNUNET_CRYPTO_PublicKey *recipient_key;
+
+ if (GNUNET_MESSENGER_KIND_TRANSCRIPT == private_message->header.kind)
{
- const struct GNUNET_CRYPTO_PublicKey *recipient_key;
+ struct GNUNET_MESSENGER_Message *transcript;
- if (GNUNET_MESSENGER_KIND_TRANSCRIPT == private_message->header.kind)
- recipient_key = &(private_message->body.transcript.key);
- else
- recipient_key = get_handle_pubkey(handle);
+ recipient_key = &(private_message->body.transcript.key);
+ transcript = read_transcript_message(private_message);
- recipient = get_store_contact(store, context, recipient_key);
+ if (transcript)
+ {
+ destroy_message(private_message);
+ private_message = transcript;
+ }
}
+ else
+ recipient_key = get_handle_pubkey(handle);
+
+ recipient = get_store_contact(store, context, recipient_key);
+skip_recipient:
contact = handle_room_message (room, contact, private_message ?
private_message : &message, hash, flags);
diff --git a/src/service/messenger/messenger_api_message.c
b/src/service/messenger/messenger_api_message.c
index 181431189..f28921a81 100644
--- a/src/service/messenger/messenger_api_message.c
+++ b/src/service/messenger/messenger_api_message.c
@@ -28,6 +28,7 @@
#include "gnunet_common.h"
#include "gnunet_messenger_service.h"
#include "gnunet_signatures.h"
+#include <stdint.h>
struct GNUNET_MESSENGER_MessageSignature
{
@@ -1092,6 +1093,9 @@ transcribe_message (const struct GNUNET_MESSENGER_Message
*message,
{
GNUNET_assert ((message) && (key));
+ if (GNUNET_YES == is_service_message (message))
+ return NULL;
+
struct GNUNET_MESSENGER_Message *transcript = create_message(
GNUNET_MESSENGER_KIND_TRANSCRIPT);
@@ -1119,6 +1123,37 @@ transcribe_message (const struct
GNUNET_MESSENGER_Message *message,
}
+struct GNUNET_MESSENGER_Message*
+read_transcript_message (const struct GNUNET_MESSENGER_Message *transcript)
+{
+ GNUNET_assert (transcript);
+
+ if (GNUNET_MESSENGER_KIND_TRANSCRIPT != transcript->header.kind)
+ return NULL;
+
+ const uint16_t data_length = transcript->body.transcript.length;
+
+ struct GNUNET_MESSENGER_ShortMessage shortened;
+ if (GNUNET_YES != decode_short_message (&shortened,
+ data_length,
+ transcript->body.transcript.data))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Decoding decrypted message failed!\n");
+
+ return NULL;
+ }
+
+ struct GNUNET_MESSENGER_Message *message = create_message(shortened.kind);
+
+ if (!message)
+ return NULL;
+
+ unfold_short_message(&shortened, message);
+ return message;
+}
+
+
struct GNUNET_MQ_Envelope*
pack_message (struct GNUNET_MESSENGER_Message *message,
struct GNUNET_HashCode *hash,
diff --git a/src/service/messenger/messenger_api_message.h
b/src/service/messenger/messenger_api_message.h
index f2d5a3138..a19eb36ba 100644
--- a/src/service/messenger/messenger_api_message.h
+++ b/src/service/messenger/messenger_api_message.h
@@ -256,6 +256,15 @@ struct GNUNET_MESSENGER_Message*
transcribe_message (const struct GNUNET_MESSENGER_Message *message,
const struct GNUNET_CRYPTO_PublicKey *key);
+/**
+ * Read the original message from a message <i>transcript</i>.
+ *
+ * @param[in] transcript Message transcript
+ * @return Original message
+ */
+struct GNUNET_MESSENGER_Message*
+read_transcript_message (const struct GNUNET_MESSENGER_Message *transcript);
+
typedef void (*GNUNET_MESSENGER_SignFunction)(
const void *cls,
struct GNUNET_MESSENGER_Message *message,
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [gnunet] branch master updated (c24030b2d -> d821d81f7), gnunet, 2024/01/20
- [gnunet] 04/08: MESSENGER: Add recipient to message callback, gnunet, 2024/01/20
- [gnunet] 03/08: MESSENGER: Implement automatic transcription of private messages, gnunet, 2024/01/20
- [gnunet] 02/08: MESSENGER: Add transcript and tag message kinds, gnunet, 2024/01/20
- [gnunet] 01/08: MESSENGER: Cleanup includes in code, gnunet, 2024/01/20
- [gnunet] 06/08: MESSENGER: Store recipient information for each message locally, gnunet, 2024/01/20
- [gnunet] 05/08: MESSENGER: Implement handling transcript messages,
gnunet <=
- [gnunet] 07/08: MESSENGER: Drop transcript when sending private messages to own key, gnunet, 2024/01/20
- [gnunet] 08/08: -adjust log output, gnunet, 2024/01/20