[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet] 02/08: MESSENGER: Add transcript and tag message kinds
From: |
gnunet |
Subject: |
[gnunet] 02/08: MESSENGER: Add transcript and tag message kinds |
Date: |
Sat, 20 Jan 2024 10:08:31 +0100 |
This is an automated email from the git hooks/post-receive script.
thejackimonster pushed a commit to branch master
in repository gnunet.
commit 63cf392a58f9e18e659df727a4fa052d38f62bf5
Author: TheJackiMonster <thejackimonster@gmail.com>
AuthorDate: Fri Jan 19 22:57:32 2024 +0100
MESSENGER: Add transcript and tag message kinds
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
---
src/include/gnunet_messenger_service.h | 60 +++++++++++++++++
src/service/messenger/messenger_api.c | 12 +++-
src/service/messenger/messenger_api_message.c | 93 +++++++++++++++++++++++----
3 files changed, 152 insertions(+), 13 deletions(-)
diff --git a/src/include/gnunet_messenger_service.h
b/src/include/gnunet_messenger_service.h
index 5457e8ddb..497a430c2 100644
--- a/src/include/gnunet_messenger_service.h
+++ b/src/include/gnunet_messenger_service.h
@@ -207,6 +207,16 @@ enum GNUNET_MESSENGER_MessageKind
*/
GNUNET_MESSENGER_KIND_TICKET = 17,
+ /**
+ * The transcript kind. The message contains a
#GNUNET_MESSENGER_MessageTranscript body.
+ */
+ GNUNET_MESSENGER_KIND_TRANSCRIPT = 18,
+
+ /**
+ * The tag kind. The message contains a #GNUNET_MESSENGER_MessageTag body.
+ */
+ GNUNET_MESSENGER_KIND_TAG = 19,
+
/**
* The unknown kind. The message contains an unknown body.
*/
@@ -536,6 +546,54 @@ struct GNUNET_MESSENGER_MessageTicket
struct GNUNET_RECLAIM_Identifier identifier;
};
+/**
+ * A transcript message body
+ * This allows reading the content of a sent private message.
+ *
+ * Message-body-size: 68+
+ */
+struct GNUNET_MESSENGER_MessageTranscript
+{
+ /**
+ * The hash of the original message.
+ */
+ struct GNUNET_HashCode hash;
+
+ /**
+ * The key from the recipient of the original message.
+ */
+ struct GNUNET_CRYPTO_PublicKey key;
+
+ /**
+ * The length of the transcribed message.
+ */
+ uint16_t length;
+
+ /**
+ * The data of the transcribed message.
+ */
+ char *data;
+};
+
+/**
+ * A tag message body
+ * This allows tagging a message with a custom tag.
+ *
+ * Message-body-size: 32+
+ */
+struct GNUNET_MESSENGER_MessageTag
+{
+ /**
+ * The hash of the message to tag.
+ */
+ struct GNUNET_HashCode hash;
+
+ /**
+ * The custom tag.
+ */
+ char *tag;
+};
+
/**
* The unified body of a #GNUNET_MESSENGER_Message.
*/
@@ -560,6 +618,8 @@ struct GNUNET_MESSENGER_MessageBody
struct GNUNET_MESSENGER_MessageDelete deletion;
struct GNUNET_MESSENGER_MessageConnection connection;
struct GNUNET_MESSENGER_MessageTicket ticket;
+ struct GNUNET_MESSENGER_MessageTranscript transcript;
+ struct GNUNET_MESSENGER_MessageTag tag;
};
};
diff --git a/src/service/messenger/messenger_api.c
b/src/service/messenger/messenger_api.c
index 7fd873211..9f31ebb00 100644
--- a/src/service/messenger/messenger_api.c
+++ b/src/service/messenger/messenger_api.c
@@ -1,6 +1,6 @@
/*
This file is part of GNUnet.
- Copyright (C) 2020--2023 GNUnet e.V.
+ Copyright (C) 2020--2024 GNUnet e.V.
GNUnet is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published
@@ -24,7 +24,7 @@
*/
#include "gnunet_common.h"
-#include "gnunet_identity_service.h"
+#include "gnunet_core_service.h"
#include "gnunet_messenger_service.h"
#include "gnunet-service-messenger.h"
@@ -72,6 +72,14 @@ GNUNET_MESSENGER_name_of_kind (enum
GNUNET_MESSENGER_MessageKind kind)
return "PRIVATE";
case GNUNET_MESSENGER_KIND_DELETE:
return "DELETE";
+ case GNUNET_MESSENGER_KIND_CONNECTION:
+ return "CONNECTION";
+ case GNUNET_MESSENGER_KIND_TICKET:
+ return "TICKET";
+ case GNUNET_MESSENGER_KIND_TRANSCRIPT:
+ return "TRANSCRIPT";
+ case GNUNET_MESSENGER_KIND_TAG:
+ return "TAG";
default:
return "UNKNOWN";
}
diff --git a/src/service/messenger/messenger_api_message.c
b/src/service/messenger/messenger_api_message.c
index bfab00c02..c7762d925 100644
--- a/src/service/messenger/messenger_api_message.c
+++ b/src/service/messenger/messenger_api_message.c
@@ -63,6 +63,13 @@ create_message (enum GNUNET_MESSENGER_MessageKind kind)
message->body.privacy.length = 0;
message->body.privacy.data = NULL;
break;
+ case GNUNET_MESSENGER_KIND_TRANSCRIPT:
+ message->body.transcript.length = 0;
+ message->body.transcript.data = NULL;
+ break;
+ case GNUNET_MESSENGER_KIND_TAG:
+ message->body.tag.tag = NULL;
+ break;
default:
break;
}
@@ -97,11 +104,21 @@ copy_message (const struct GNUNET_MESSENGER_Message
*message)
copy->body.privacy.length) : NULL;
if (copy->body.privacy.data)
- {
GNUNET_memcpy (copy->body.privacy.data, message->body.privacy.data,
copy->body.privacy.length);
- }
+ break;
+ case GNUNET_MESSENGER_KIND_TRANSCRIPT:
+ copy->body.transcript.data = copy->body.transcript.length ? GNUNET_malloc (
+ copy->body.transcript.length) : NULL;
+
+ if (copy->body.transcript.data)
+ GNUNET_memcpy (copy->body.transcript.data, message->body.transcript.data,
+ copy->body.transcript.length);
+
+ break;
+ case GNUNET_MESSENGER_KIND_TAG:
+ copy->body.tag.tag = GNUNET_strdup (message->body.tag.tag);
break;
default:
break;
@@ -118,10 +135,12 @@ destroy_message_body (enum GNUNET_MESSENGER_MessageKind
kind,
switch (kind)
{
case GNUNET_MESSENGER_KIND_NAME:
- GNUNET_free (body->name.name);
+ if (body->name.name)
+ GNUNET_free (body->name.name);
break;
case GNUNET_MESSENGER_KIND_TEXT:
- GNUNET_free (body->text.text);
+ if (body->text.text)
+ GNUNET_free (body->text.text);
break;
case GNUNET_MESSENGER_KIND_FILE:
GNUNET_free (body->file.uri);
@@ -129,6 +148,13 @@ destroy_message_body (enum GNUNET_MESSENGER_MessageKind
kind,
case GNUNET_MESSENGER_KIND_PRIVATE:
GNUNET_free (body->privacy.data);
break;
+ case GNUNET_MESSENGER_KIND_TRANSCRIPT:
+ GNUNET_free (body->transcript.data);
+ break;
+ case GNUNET_MESSENGER_KIND_TAG:
+ if (body->tag.tag)
+ GNUNET_free (body->tag.tag);
+ break;
default:
break;
}
@@ -228,8 +254,6 @@ get_message_body_kind_size (enum
GNUNET_MESSENGER_MessageKind kind)
length += member_size (struct GNUNET_MESSENGER_Message, body.invite.door);
length += member_size (struct GNUNET_MESSENGER_Message, body.invite.key);
break;
- case GNUNET_MESSENGER_KIND_TEXT:
- break;
case GNUNET_MESSENGER_KIND_FILE:
length += member_size (struct GNUNET_MESSENGER_Message, body.file.key);
length += member_size (struct GNUNET_MESSENGER_Message, body.file.hash);
@@ -250,6 +274,12 @@ get_message_body_kind_size (enum
GNUNET_MESSENGER_MessageKind kind)
case GNUNET_MESSENGER_KIND_TICKET:
length += member_size (struct GNUNET_MESSENGER_Message,
body.ticket.identifier);
break;
+ case GNUNET_MESSENGER_KIND_TRANSCRIPT:
+ length += member_size (struct GNUNET_MESSENGER_Message,
body.transcript.hash);
+ break;
+ case GNUNET_MESSENGER_KIND_TAG:
+ length += member_size (struct GNUNET_MESSENGER_Message, body.tag.hash);
+ break;
default:
break;
}
@@ -297,7 +327,7 @@ get_message_body_size (enum GNUNET_MESSENGER_MessageKind
kind,
length += GNUNET_CRYPTO_public_key_get_length (&(body->key.key));
break;
case GNUNET_MESSENGER_KIND_TEXT:
- length += strlen (body->text.text);
+ length += (body->text.text ? strlen (body->text.text) : 0);
break;
case GNUNET_MESSENGER_KIND_FILE:
length += strlen (body->file.uri);
@@ -305,6 +335,13 @@ get_message_body_size (enum GNUNET_MESSENGER_MessageKind
kind,
case GNUNET_MESSENGER_KIND_PRIVATE:
length += body->privacy.length;
break;
+ case GNUNET_MESSENGER_KIND_TRANSCRIPT:
+ length += GNUNET_CRYPTO_public_key_get_length (&(body->transcript.key));
+ length += body->transcript.length;
+ break;
+ case GNUNET_MESSENGER_KIND_TAG:
+ length += (body->tag.tag ? strlen (body->tag.tag) : 0);
+ break;
default:
break;
}
@@ -449,7 +486,7 @@ encode_message_body (enum GNUNET_MESSENGER_MessageKind kind,
if (body->name.name)
encode_step_ext (buffer, offset, body->name.name, min (length - offset,
strlen (
-
body->name.name)));
+
body->name.name)));
break;
case GNUNET_MESSENGER_KIND_KEY:
encode_step_key (buffer, offset, &(body->key.key), length);
@@ -474,9 +511,10 @@ encode_message_body (enum GNUNET_MESSENGER_MessageKind
kind,
encode_step (buffer, offset, &(body->invite.key));
break;
case GNUNET_MESSENGER_KIND_TEXT:
- encode_step_ext (buffer, offset, body->text.text, min (length - offset,
- strlen (
-
body->text.text)));
+ if (body->text.text)
+ encode_step_ext (buffer, offset, body->text.text, min (length - offset,
+ strlen (
+
body->text.text)));
break;
case GNUNET_MESSENGER_KIND_FILE:
encode_step (buffer, offset, &(body->file.key));
@@ -506,6 +544,20 @@ encode_message_body (enum GNUNET_MESSENGER_MessageKind
kind,
case GNUNET_MESSENGER_KIND_TICKET:
encode_step (buffer, offset, &(body->ticket.identifier));
break;
+ case GNUNET_MESSENGER_KIND_TRANSCRIPT:
+ encode_step (buffer, offset, &(body->transcript.hash));
+ encode_step_key (buffer, offset, &(body->transcript.key), length);
+ encode_step_ext (buffer, offset, body->transcript.data, min (length -
offset,
+
body->transcript.
+ length));
+ break;
+ case GNUNET_MESSENGER_KIND_TAG:
+ encode_step (buffer, offset, &(body->tag.hash));
+ if (body->tag.tag)
+ encode_step_ext (buffer, offset, body->tag.tag, min (length - offset,
+ strlen (
+ body->tag.tag)));
+ break;
default:
break;
}
@@ -698,6 +750,17 @@ decode_message_body (enum GNUNET_MESSENGER_MessageKind
*kind,
case GNUNET_MESSENGER_KIND_TICKET:
decode_step (buffer, offset, &(body->ticket.identifier));
break;
+ case GNUNET_MESSENGER_KIND_TRANSCRIPT:
+ decode_step (buffer, offset, &(body->transcript.hash));
+ decode_step_key (buffer, offset, &(body->transcript.key), length);
+
+ body->transcript.length = (length - offset);
+ decode_step_malloc (buffer, offset, body->transcript.data, length -
offset, 0);
+ break;
+ case GNUNET_MESSENGER_KIND_TAG:
+ decode_step (buffer, offset, &(body->tag.hash));
+ decode_step_malloc (buffer, offset, body->tag.tag, length - offset, 1);
+ break;
default:
*kind = GNUNET_MESSENGER_KIND_UNKNOWN;
break;
@@ -1133,6 +1196,10 @@ is_service_message (const struct
GNUNET_MESSENGER_Message *message)
return GNUNET_YES; // Reserved for connection handling only!
case GNUNET_MESSENGER_KIND_TICKET:
return GNUNET_NO;
+ case GNUNET_MESSENGER_KIND_TRANSCRIPT:
+ return GNUNET_YES; // Allow access to self encrypted messages!
+ case GNUNET_MESSENGER_KIND_TAG:
+ return GNUNET_NO;
default:
return GNUNET_SYSERR;
}
@@ -1180,6 +1247,10 @@ filter_message_sending (const struct
GNUNET_MESSENGER_Message *message)
case GNUNET_MESSENGER_KIND_CONNECTION:
return GNUNET_SYSERR; // Reserved for connection handling only!
case GNUNET_MESSENGER_KIND_TICKET:
+ return GNUNET_NO; // Use #GNUNET_MESSENGER_send_ticket(...) instead!
+ case GNUNET_MESSENGER_KIND_TRANSCRIPT:
+ return GNUNET_NO; // Use #GNUNET_MESSENGER_send_message(...) with a
contact instead!
+ case GNUNET_MESSENGER_KIND_TAG:
return GNUNET_YES;
default:
return GNUNET_SYSERR;
--
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 <=
- [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, 2024/01/20
- [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