gnunet

Main GNUnet Logic
Log | Files | Refs | Submodules | README | LICENSE

commit a118acdd652d35fc2445370ef7b7b86c510367d5
parent 85ee00ef023f5435c2429deecc8a4a0f7953fa11
Author: TheJackiMonster <thejackimonster@gmail.com>
Date:   Tue,  2 Jan 2024 19:04:40 +0100

MESSENGER: encode/decode connection message

Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>

Diffstat:
Msrc/service/messenger/messenger_api_message.c | 35+++++++++++++++++++++++++++++------
1 file changed, 29 insertions(+), 6 deletions(-)

diff --git a/src/service/messenger/messenger_api_message.c b/src/service/messenger/messenger_api_message.c @@ -240,6 +240,10 @@ get_message_body_kind_size (enum GNUNET_MESSENGER_MessageKind kind) length += member_size (struct GNUNET_MESSENGER_Message, body.deletion.delay); break; + case GNUNET_MESSENGER_KIND_CONNECTION: + length += member_size (struct GNUNET_MESSENGER_Message, body.connection.amount); + length += member_size (struct GNUNET_MESSENGER_Message, body.connection.flags); + break; default: break; } @@ -424,13 +428,13 @@ encode_message_body (enum GNUNET_MESSENGER_MessageKind kind, char *buffer, uint16_t offset) { - uint32_t version; + uint32_t value0, value1; switch (kind) { case GNUNET_MESSENGER_KIND_INFO: - version = GNUNET_htobe32 (body->info.messenger_version); + value0 = GNUNET_htobe32 (body->info.messenger_version); - encode_step (buffer, offset, &version); + encode_step (buffer, offset, &value0); break; case GNUNET_MESSENGER_KIND_JOIN: encode_step_key (buffer, offset, &(body->join.key), length); @@ -486,6 +490,13 @@ encode_message_body (enum GNUNET_MESSENGER_MessageKind kind, encode_step (buffer, offset, &(body->deletion.hash)); encode_step (buffer, offset, &(body->deletion.delay)); break; + case GNUNET_MESSENGER_KIND_CONNECTION: + value0 = GNUNET_htobe32 (body->connection.amount); + value1 = GNUNET_htobe32 (body->connection.flags); + + encode_step (buffer, offset, &value0); + encode_step (buffer, offset, &value1); + break; default: break; } @@ -610,13 +621,13 @@ decode_message_body (enum GNUNET_MESSENGER_MessageKind *kind, length -= padding; - uint32_t version; + uint32_t value0, value1; switch (*kind) { case GNUNET_MESSENGER_KIND_INFO: { - decode_step (buffer, offset, &version); + decode_step (buffer, offset, &value0); - body->info.messenger_version = GNUNET_be32toh (version); + body->info.messenger_version = GNUNET_be32toh (value0); break; } case GNUNET_MESSENGER_KIND_JOIN: { decode_step_key (buffer, offset, &(body->join.key), length); @@ -668,6 +679,13 @@ decode_message_body (enum GNUNET_MESSENGER_MessageKind *kind, decode_step (buffer, offset, &(body->deletion.hash)); decode_step (buffer, offset, &(body->deletion.delay)); break; + case GNUNET_MESSENGER_KIND_CONNECTION: + decode_step (buffer, offset, &value0); + decode_step (buffer, offset, &value1); + + body->connection.amount = GNUNET_be32toh (value0); + body->connection.flags = GNUNET_be32toh (value1); + break; default: *kind = GNUNET_MESSENGER_KIND_UNKNOWN; break; @@ -1053,6 +1071,7 @@ is_peer_message (const struct GNUNET_MESSENGER_Message *message) case GNUNET_MESSENGER_KIND_PEER: case GNUNET_MESSENGER_KIND_MISS: case GNUNET_MESSENGER_KIND_MERGE: + case GNUNET_MESSENGER_KIND_CONNECTION: return GNUNET_YES; default: return GNUNET_NO; @@ -1098,6 +1117,8 @@ is_service_message (const struct GNUNET_MESSENGER_Message *message) return GNUNET_YES; // Prevent duplicate encryption breaking all access! case GNUNET_MESSENGER_KIND_DELETE: return GNUNET_YES; // Deletion should not apply individually! (inefficieny) + case GNUNET_MESSENGER_KIND_CONNECTION: + return GNUNET_YES; // Reserved for connection handling only! default: return GNUNET_SYSERR; } @@ -1142,6 +1163,8 @@ filter_message_sending (const struct GNUNET_MESSENGER_Message *message) return GNUNET_NO; // Use #GNUNET_MESSENGER_send_message(...) with a contact instead! case GNUNET_MESSENGER_KIND_DELETE: return GNUNET_YES; + case GNUNET_MESSENGER_KIND_CONNECTION: + return GNUNET_SYSERR; // Reserved for connection handling only! default: return GNUNET_SYSERR; }