From db937c59ca9c1d4679706851e4fefc06bbdbe640 Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Tue, 2 Jan 2024 19:15:38 +0100 Subject: MESSENGER: Implement ticket message Signed-off-by: TheJackiMonster --- src/include/gnunet_messenger_service.h | 21 +++++++++++++++++++++ src/service/messenger/messenger_api_message.c | 14 ++++++++++++++ src/service/messenger/messenger_api_message_kind.c | 18 ++++++++++++++++++ src/service/messenger/messenger_api_message_kind.h | 15 ++++++++++++++- 4 files changed, 67 insertions(+), 1 deletion(-) diff --git a/src/include/gnunet_messenger_service.h b/src/include/gnunet_messenger_service.h index c647272df..ad4151aed 100644 --- a/src/include/gnunet_messenger_service.h +++ b/src/include/gnunet_messenger_service.h @@ -42,6 +42,7 @@ extern "C" { #include "gnunet_common.h" #include "gnunet_configuration_lib.h" #include "gnunet_identity_service.h" +#include "gnunet_reclaim_lib.h" #include "gnunet_scheduler_lib.h" #include "gnunet_time_lib.h" #include "gnunet_util_lib.h" @@ -200,6 +201,11 @@ enum GNUNET_MESSENGER_MessageKind */ GNUNET_MESSENGER_KIND_CONNECTION = 16, + /** + * The ticket kind. The message contains a #GNUNET_MESSENGER_MessageTicket body. + */ + GNUNET_MESSENGER_KIND_TICKET = 17, + /** * The unknown kind. The message contains an unknown body. */ @@ -515,6 +521,20 @@ struct GNUNET_MESSENGER_MessageConnection uint32_t flags; }; +/** + * A ticket message body + * This allows to exchange ticket identifiers with an audience. + * + * Message-body-size: 32 bytes + */ +struct GNUNET_MESSENGER_MessageTicket +{ + /** + * The identifier of a RECLAIM ticket. + */ + struct GNUNET_RECLAIM_Identifier identifier; +}; + /** * The unified body of a #GNUNET_MESSENGER_Message. */ @@ -538,6 +558,7 @@ struct GNUNET_MESSENGER_MessageBody struct GNUNET_MESSENGER_MessagePrivate privacy; struct GNUNET_MESSENGER_MessageDelete deletion; struct GNUNET_MESSENGER_MessageConnection connection; + struct GNUNET_MESSENGER_MessageTicket ticket; }; }; diff --git a/src/service/messenger/messenger_api_message.c b/src/service/messenger/messenger_api_message.c index 51213bce5..486a0e081 100644 --- a/src/service/messenger/messenger_api_message.c +++ b/src/service/messenger/messenger_api_message.c @@ -24,6 +24,7 @@ */ #include "messenger_api_message.h" +#include "gnunet_messenger_service.h" struct GNUNET_MESSENGER_MessageSignature { @@ -244,6 +245,9 @@ get_message_body_kind_size (enum GNUNET_MESSENGER_MessageKind kind) length += member_size (struct GNUNET_MESSENGER_Message, body.connection.amount); length += member_size (struct GNUNET_MESSENGER_Message, body.connection.flags); break; + case GNUNET_MESSENGER_KIND_TICKET: + length += member_size (struct GNUNET_MESSENGER_Message, body.ticket.identifier); + break; default: break; } @@ -497,6 +501,9 @@ encode_message_body (enum GNUNET_MESSENGER_MessageKind kind, encode_step (buffer, offset, &value0); encode_step (buffer, offset, &value1); break; + case GNUNET_MESSENGER_KIND_TICKET: + encode_step (buffer, offset, &(body->ticket.identifier)); + break; default: break; } @@ -686,6 +693,9 @@ decode_message_body (enum GNUNET_MESSENGER_MessageKind *kind, body->connection.amount = GNUNET_be32toh (value0); body->connection.flags = GNUNET_be32toh (value1); break; + case GNUNET_MESSENGER_KIND_TICKET: + decode_step (buffer, offset, &(body->ticket.identifier)); + break; default: *kind = GNUNET_MESSENGER_KIND_UNKNOWN; break; @@ -1119,6 +1129,8 @@ is_service_message (const struct GNUNET_MESSENGER_Message *message) return GNUNET_YES; // Deletion should not apply individually! (inefficieny) case GNUNET_MESSENGER_KIND_CONNECTION: return GNUNET_YES; // Reserved for connection handling only! + case GNUNET_MESSENGER_KIND_TICKET: + return GNUNET_NO; default: return GNUNET_SYSERR; } @@ -1165,6 +1177,8 @@ filter_message_sending (const struct GNUNET_MESSENGER_Message *message) return GNUNET_YES; case GNUNET_MESSENGER_KIND_CONNECTION: return GNUNET_SYSERR; // Reserved for connection handling only! + case GNUNET_MESSENGER_KIND_TICKET: + return GNUNET_YES; default: return GNUNET_SYSERR; } diff --git a/src/service/messenger/messenger_api_message_kind.c b/src/service/messenger/messenger_api_message_kind.c index 7e8fd7a1d..c9cf227a2 100644 --- a/src/service/messenger/messenger_api_message_kind.c +++ b/src/service/messenger/messenger_api_message_kind.c @@ -187,3 +187,21 @@ create_message_delete (const struct GNUNET_HashCode *hash, return message; } + +struct GNUNET_MESSENGER_Message* +create_message_ticket (const struct GNUNET_RECLAIM_Identifier *identifier) +{ + if (! identifier) + return NULL; + + struct GNUNET_MESSENGER_Message *message = create_message ( + GNUNET_MESSENGER_KIND_TICKET); + + if (! message) + return NULL; + + GNUNET_memcpy (&(message->body.ticket.identifier), identifier, + sizeof(struct GNUNET_RECLAIM_Identifier)); + + return message; +} diff --git a/src/service/messenger/messenger_api_message_kind.h b/src/service/messenger/messenger_api_message_kind.h index 01bc9a232..20e3cba83 100644 --- a/src/service/messenger/messenger_api_message_kind.h +++ b/src/service/messenger/messenger_api_message_kind.h @@ -27,6 +27,7 @@ #define GNUNET_SERVICE_MESSENGER_MESSAGE_KIND_H #include "gnunet_messenger_service.h" +#include "gnunet_reclaim_lib.h" #include "gnunet_util_lib.h" #include "gnunet_identity_service.h" #include "gnunet_time_lib.h" @@ -116,7 +117,8 @@ struct GNUNET_MESSENGER_Message* create_message_text (const char *text); /** - * Creates and allocates a new delete message containing the hash of a message to delete after a specific delay. + * Creates and allocates a new delete message containing the hash of a message to delete + * after a specific delay. * (all values are stored as copy) * * @param[in] hash Hash of message @@ -127,4 +129,15 @@ struct GNUNET_MESSENGER_Message* create_message_delete (const struct GNUNET_HashCode *hash, const struct GNUNET_TIME_Relative delay); +/** + * Creates and allocates a new ticket message containing the identifier of a ticket to + * exchange it with a given audience. + * (all values are stored as copy) + * + * @param[in] identifier Identifier of ticket + * @return New message + */ +struct GNUNET_MESSENGER_Message* +create_message_ticket (const struct GNUNET_RECLAIM_Identifier *identifier); + #endif //GNUNET_SERVICE_MESSENGER_MESSAGE_KIND_H -- cgit v1.2.3