messenger api: client and service implementation of GNUnet MESSENGER service More...
Go to the source code of this file.
Data Structures | |
struct | GNUNET_MESSENGER_MessageSignature |
struct | GNUNET_MESSENGER_ShortMessage |
Macros | |
#define | member_size(type, member) sizeof(((type*) NULL)->member) |
#define | max(x, y) (x > y? x : y) |
#define | min(x, y) (x < y? x : y) |
#define | encode_step_ext(dst, offset, src, size) |
#define | encode_step(dst, offset, src) |
#define | encode_step_key(dst, offset, src, length) |
#define | encode_step_signature(dst, offset, src, length) |
#define | decode_step_ext(src, offset, dst, size) |
#define | decode_step(src, offset, dst) |
#define | decode_step_malloc(src, offset, dst, size, zero) |
#define | decode_step_key(src, offset, dst, length) |
Typedefs | |
typedef uint32_t | kind_t |
Functions | |
struct GNUNET_MESSENGER_Message * | create_message (enum GNUNET_MESSENGER_MessageKind kind) |
Creates and allocates a new message with a specific kind. More... | |
struct GNUNET_MESSENGER_Message * | copy_message (const struct GNUNET_MESSENGER_Message *message) |
Creates and allocates a copy of a given message. More... | |
static void | destroy_message_body (enum GNUNET_MESSENGER_MessageKind kind, struct GNUNET_MESSENGER_MessageBody *body) |
void | cleanup_message (struct GNUNET_MESSENGER_Message *message) |
Frees the messages body memory. More... | |
void | destroy_message (struct GNUNET_MESSENGER_Message *message) |
Destroys a message and frees its memory fully. More... | |
int | is_message_session_bound (const struct GNUNET_MESSENGER_Message *message) |
Returns if the message should be bound to a member session. More... | |
static void | fold_short_message (const struct GNUNET_MESSENGER_Message *message, struct GNUNET_MESSENGER_ShortMessage *shortened) |
static void | unfold_short_message (struct GNUNET_MESSENGER_ShortMessage *shortened, struct GNUNET_MESSENGER_Message *message) |
static uint16_t | get_message_body_kind_size (enum GNUNET_MESSENGER_MessageKind kind) |
uint16_t | get_message_kind_size (enum GNUNET_MESSENGER_MessageKind kind, int include_header) |
Returns the minimal size in bytes to encode a message of a specific kind. More... | |
static uint16_t | get_message_body_size (enum GNUNET_MESSENGER_MessageKind kind, const struct GNUNET_MESSENGER_MessageBody *body) |
uint16_t | get_message_size (const struct GNUNET_MESSENGER_Message *message, int include_header) |
Returns the exact size in bytes to encode a given message. More... | |
static uint16_t | get_short_message_size (const struct GNUNET_MESSENGER_ShortMessage *message, int include_body) |
static uint16_t | calc_usual_padding () |
static uint16_t | calc_padded_length (uint16_t length) |
static void | encode_message_body (enum GNUNET_MESSENGER_MessageKind kind, const struct GNUNET_MESSENGER_MessageBody *body, uint16_t length, char *buffer, uint16_t offset) |
void | encode_message (const struct GNUNET_MESSENGER_Message *message, uint16_t length, char *buffer, int include_header) |
Encodes a given message into a buffer of a maximal length in bytes. More... | |
static void | encode_short_message (const struct GNUNET_MESSENGER_ShortMessage *message, uint16_t length, char *buffer) |
static uint16_t | decode_message_body (enum GNUNET_MESSENGER_MessageKind *kind, struct GNUNET_MESSENGER_MessageBody *body, uint16_t length, const char *buffer, uint16_t offset) |
int | decode_message (struct GNUNET_MESSENGER_Message *message, uint16_t length, const char *buffer, int include_header, uint16_t *padding) |
Decodes a message from a given buffer of a maximal length in bytes. More... | |
static int | decode_short_message (struct GNUNET_MESSENGER_ShortMessage *message, uint16_t length, const char *buffer) |
void | hash_message (const struct GNUNET_MESSENGER_Message *message, uint16_t length, const char *buffer, struct GNUNET_HashCode *hash) |
Calculates a hash of a given buffer with a length in bytes from a message. More... | |
void | sign_message (struct GNUNET_MESSENGER_Message *message, uint16_t length, char *buffer, const struct GNUNET_HashCode *hash, const struct GNUNET_MESSENGER_Ego *ego) |
Signs the hash of a message with a given ego and writes the signature into the buffer as well. More... | |
int | verify_message (const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash, const struct GNUNET_IDENTITY_PublicKey *key) |
Verifies the signature of a given message and its hash with a specific public key. More... | |
int | encrypt_message (struct GNUNET_MESSENGER_Message *message, const struct GNUNET_IDENTITY_PublicKey *key) |
Encrypts a message using a given public key and replaces its body and kind with the now private encrypted message. More... | |
int | decrypt_message (struct GNUNET_MESSENGER_Message *message, const struct GNUNET_IDENTITY_PrivateKey *key) |
Decrypts a private message using a given private key and replaces its body and kind with the inner encrypted message. More... | |
struct GNUNET_MQ_Envelope * | pack_message (struct GNUNET_MESSENGER_Message *message, struct GNUNET_HashCode *hash, const struct GNUNET_MESSENGER_Ego *ego, int mode) |
Encodes the message to pack it into a newly allocated envelope if mode is equal to GNUNET_MESSENGER_PACK_MODE_ENVELOPE. More... | |
int | filter_message_sending (const struct GNUNET_MESSENGER_Message *message) |
Returns if a specific kind of message should be sent by a client. More... | |
messenger api: client and service implementation of GNUnet MESSENGER service
Definition in file messenger_api_message.c.
Definition at line 182 of file messenger_api_message.c.
#define max | ( | x, | |
y | |||
) | (x > y? x : y) |
Definition at line 336 of file messenger_api_message.c.
#define min | ( | x, | |
y | |||
) | (x < y? x : y) |
Definition at line 364 of file messenger_api_message.c.
#define encode_step_ext | ( | dst, | |
offset, | |||
src, | |||
size | |||
) |
#define encode_step | ( | dst, | |
offset, | |||
src | |||
) |
Definition at line 371 of file messenger_api_message.c.
#define encode_step_key | ( | dst, | |
offset, | |||
src, | |||
length | |||
) |
Definition at line 375 of file messenger_api_message.c.
#define encode_step_signature | ( | dst, | |
offset, | |||
src, | |||
length | |||
) |
Definition at line 385 of file messenger_api_message.c.
#define decode_step_ext | ( | src, | |
offset, | |||
dst, | |||
size | |||
) |
Definition at line 527 of file messenger_api_message.c.
#define decode_step | ( | src, | |
offset, | |||
dst | |||
) |
Definition at line 532 of file messenger_api_message.c.
Definition at line 536 of file messenger_api_message.c.
#define decode_step_key | ( | src, | |
offset, | |||
dst, | |||
length | |||
) |
Definition at line 542 of file messenger_api_message.c.
typedef uint32_t kind_t |
Definition at line 234 of file messenger_api_message.c.
struct GNUNET_MESSENGER_Message* create_message | ( | enum GNUNET_MESSENGER_MessageKind | kind | ) |
Creates and allocates a new message with a specific kind.
[in] | kind | Kind of message |
Definition at line 42 of file messenger_api_message.c.
References GNUNET_MESSENGER_Message::body, GNUNET_MESSENGER_MessagePrivate::data, GNUNET_MESSENGER_MessageBody::file, GNUNET_MESSENGER_KIND_FILE, GNUNET_MESSENGER_KIND_NAME, GNUNET_MESSENGER_KIND_PRIVATE, GNUNET_MESSENGER_KIND_TEXT, GNUNET_new, GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_MessageHeader::kind, GNUNET_MESSENGER_MessagePrivate::length, GNUNET_MESSENGER_MessageName::name, GNUNET_MESSENGER_MessageBody::name, GNUNET_MESSENGER_MessageBody::privacy, GNUNET_MESSENGER_MessageText::text, GNUNET_MESSENGER_MessageBody::text, and GNUNET_MESSENGER_MessageFile::uri.
Referenced by create_message_delete(), create_message_id(), create_message_info(), create_message_invite(), create_message_join(), create_message_key(), create_message_leave(), create_message_merge(), create_message_miss(), create_message_name(), create_message_peer(), create_message_request(), create_message_text(), and get_store_message().
struct GNUNET_MESSENGER_Message* copy_message | ( | const struct GNUNET_MESSENGER_Message * | message | ) |
Creates and allocates a copy of a given message.
[in] | message | Message |
Definition at line 71 of file messenger_api_message.c.
References GNUNET_MESSENGER_Message::body, GNUNET_MESSENGER_MessagePrivate::data, GNUNET_MESSENGER_MessageBody::file, GNUNET_assert, GNUNET_malloc, GNUNET_memcpy, GNUNET_MESSENGER_KIND_FILE, GNUNET_MESSENGER_KIND_NAME, GNUNET_MESSENGER_KIND_PRIVATE, GNUNET_MESSENGER_KIND_TEXT, GNUNET_new, GNUNET_strdup, GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_MessageHeader::kind, GNUNET_MESSENGER_MessagePrivate::length, GNUNET_MESSENGER_MessageName::name, GNUNET_MESSENGER_MessageBody::name, GNUNET_MESSENGER_MessageBody::privacy, GNUNET_MESSENGER_MessageText::text, GNUNET_MESSENGER_MessageBody::text, and GNUNET_MESSENGER_MessageFile::uri.
Referenced by forward_tunnel_message(), handle_room_message(), handle_tunnel_message(), notify_srv_handle_message(), and send_srv_handle_message().
|
static |
Definition at line 107 of file messenger_api_message.c.
References GNUNET_MESSENGER_Message::body, GNUNET_MESSENGER_MessagePrivate::data, GNUNET_MESSENGER_MessageBody::file, GNUNET_free, GNUNET_MESSENGER_KIND_FILE, GNUNET_MESSENGER_KIND_NAME, GNUNET_MESSENGER_KIND_PRIVATE, GNUNET_MESSENGER_KIND_TEXT, GNUNET_MESSENGER_MessageName::name, GNUNET_MESSENGER_MessageBody::name, GNUNET_MESSENGER_MessageBody::privacy, GNUNET_MESSENGER_MessageText::text, GNUNET_MESSENGER_MessageBody::text, and GNUNET_MESSENGER_MessageFile::uri.
Referenced by cleanup_message(), destroy_message(), encrypt_message(), and unfold_short_message().
void cleanup_message | ( | struct GNUNET_MESSENGER_Message * | message | ) |
Frees the messages body memory.
[in,out] | message | Message |
Definition at line 130 of file messenger_api_message.c.
References GNUNET_MESSENGER_Message::body, destroy_message_body(), GNUNET_assert, GNUNET_MESSENGER_Message::header, and GNUNET_MESSENGER_MessageHeader::kind.
Referenced by check_recv_message(), check_send_message(), handle_recv_message(), handle_send_message(), and handle_tunnel_message().
void destroy_message | ( | struct GNUNET_MESSENGER_Message * | message | ) |
Destroys a message and frees its memory fully.
[in,out] | message | Message |
Definition at line 138 of file messenger_api_message.c.
References GNUNET_MESSENGER_Message::body, destroy_message_body(), GNUNET_assert, GNUNET_free, GNUNET_MESSENGER_Message::header, and GNUNET_MESSENGER_MessageHeader::kind.
Referenced by callback_set_handle_name(), create_message_peer(), forward_tunnel_message(), get_store_message(), handle_delete_message(), handle_room_message(), iterate_destroy_message(), iterate_destroy_messages(), notify_srv_handle_message(), send_tunnel_message(), set_srv_handle_ego(), and update_room_message().
int is_message_session_bound | ( | const struct GNUNET_MESSENGER_Message * | message | ) |
Returns if the message should be bound to a member session.
[in] | message | Message |
Definition at line 148 of file messenger_api_message.c.
References GNUNET_assert, GNUNET_MESSENGER_KIND_ID, GNUNET_MESSENGER_KIND_JOIN, GNUNET_MESSENGER_KIND_KEY, GNUNET_MESSENGER_KIND_LEAVE, GNUNET_MESSENGER_KIND_NAME, GNUNET_NO, GNUNET_YES, GNUNET_MESSENGER_Message::header, and GNUNET_MESSENGER_MessageHeader::kind.
Referenced by send_srv_room_message(), and update_member_session_history().
|
static |
Definition at line 163 of file messenger_api_message.c.
References GNUNET_MESSENGER_Message::body, GNUNET_MESSENGER_ShortMessage::body, GNUNET_memcpy, GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_MessageHeader::kind, and GNUNET_MESSENGER_ShortMessage::kind.
Referenced by encrypt_message().
|
static |
Definition at line 172 of file messenger_api_message.c.
References GNUNET_MESSENGER_Message::body, GNUNET_MESSENGER_ShortMessage::body, destroy_message_body(), GNUNET_memcpy, GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_MessageHeader::kind, and GNUNET_MESSENGER_ShortMessage::kind.
Referenced by decrypt_message(), and encrypt_message().
|
static |
Definition at line 185 of file messenger_api_message.c.
References GNUNET_MESSENGER_Message::body, GNUNET_MESSENGER_MessageDelete::delay, GNUNET_MESSENGER_MessageBody::deletion, GNUNET_MESSENGER_MessageInvite::door, GNUNET_MESSENGER_MessageBody::file, GNUNET_MESSENGER_KIND_DELETE, GNUNET_MESSENGER_KIND_FILE, GNUNET_MESSENGER_KIND_ID, GNUNET_MESSENGER_KIND_INFO, GNUNET_MESSENGER_KIND_INVITE, GNUNET_MESSENGER_KIND_MERGE, GNUNET_MESSENGER_KIND_MISS, GNUNET_MESSENGER_KIND_PEER, GNUNET_MESSENGER_KIND_PRIVATE, GNUNET_MESSENGER_KIND_REQUEST, GNUNET_MESSENGER_KIND_TEXT, GNUNET_MESSENGER_MessageRequest::hash, GNUNET_MESSENGER_MessageFile::hash, GNUNET_MESSENGER_MessageDelete::hash, GNUNET_MESSENGER_MessageId::id, GNUNET_MESSENGER_MessageBody::id, GNUNET_MESSENGER_MessageBody::info, GNUNET_MESSENGER_MessageBody::invite, GNUNET_MESSENGER_MessageInvite::key, GNUNET_MESSENGER_MessageFile::key, GNUNET_MESSENGER_MessagePrivate::key, member_size, GNUNET_MESSENGER_MessageBody::merge, GNUNET_MESSENGER_MessageInfo::messenger_version, GNUNET_MESSENGER_MessageBody::miss, GNUNET_MESSENGER_MessageFile::name, GNUNET_MESSENGER_MessagePeer::peer, GNUNET_MESSENGER_MessageMiss::peer, GNUNET_MESSENGER_MessageBody::peer, GNUNET_MESSENGER_MessageMerge::previous, GNUNET_MESSENGER_MessageBody::privacy, and GNUNET_MESSENGER_MessageBody::request.
Referenced by get_message_kind_size(), and get_short_message_size().
uint16_t get_message_kind_size | ( | enum GNUNET_MESSENGER_MessageKind | kind, |
int | include_header | ||
) |
Returns the minimal size in bytes to encode a message of a specific kind.
[in] | kind | Kind of message |
[in] | include_header | Flag to include header |
Definition at line 237 of file messenger_api_message.c.
References get_message_body_kind_size(), GNUNET_YES, GNUNET_MESSENGER_Message::header, member_size, GNUNET_MESSENGER_MessageHeader::previous, GNUNET_MESSENGER_MessageHeader::sender_id, and GNUNET_MESSENGER_MessageHeader::timestamp.
Referenced by calc_usual_padding(), check_recv_message(), check_send_message(), check_tunnel_message(), decode_message(), get_message_size(), and get_store_message().
|
static |
Definition at line 255 of file messenger_api_message.c.
References GNUNET_MESSENGER_Message::body, GNUNET_MESSENGER_MessageBody::file, GNUNET_IDENTITY_public_key_get_length(), GNUNET_MESSENGER_KIND_FILE, GNUNET_MESSENGER_KIND_INFO, GNUNET_MESSENGER_KIND_JOIN, GNUNET_MESSENGER_KIND_KEY, GNUNET_MESSENGER_KIND_NAME, GNUNET_MESSENGER_KIND_PRIVATE, GNUNET_MESSENGER_KIND_TEXT, GNUNET_MESSENGER_MessageInfo::host_key, GNUNET_MESSENGER_MessageBody::info, GNUNET_MESSENGER_MessageBody::join, GNUNET_MESSENGER_MessageJoin::key, GNUNET_MESSENGER_MessageKey::key, GNUNET_MESSENGER_MessageBody::key, GNUNET_MESSENGER_MessagePrivate::length, GNUNET_MESSENGER_MessageName::name, GNUNET_MESSENGER_MessageBody::name, GNUNET_MESSENGER_MessageBody::privacy, GNUNET_MESSENGER_MessageText::text, GNUNET_MESSENGER_MessageBody::text, and GNUNET_MESSENGER_MessageFile::uri.
Referenced by get_message_size(), and get_short_message_size().
uint16_t get_message_size | ( | const struct GNUNET_MESSENGER_Message * | message, |
int | include_header | ||
) |
Returns the exact size in bytes to encode a given message.
[in] | message | Message |
[in] | include_header | Flag to include header |
Definition at line 291 of file messenger_api_message.c.
References GNUNET_MESSENGER_Message::body, get_message_body_size(), get_message_kind_size(), GNUNET_assert, GNUNET_IDENTITY_signature_get_length(), GNUNET_YES, GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_MessageHeader::kind, and GNUNET_MESSENGER_MessageHeader::signature.
Referenced by GNUNET_MESSENGER_send_message(), iterate_save_messages(), notify_srv_handle_message(), and pack_message().
|
static |
Definition at line 308 of file messenger_api_message.c.
References GNUNET_MESSENGER_ShortMessage::body, get_message_body_kind_size(), get_message_body_size(), GNUNET_YES, and GNUNET_MESSENGER_ShortMessage::kind.
Referenced by decode_short_message(), and encrypt_message().
|
static |
Definition at line 321 of file messenger_api_message.c.
References get_message_kind_size(), GNUNET_MESSENGER_KIND_MAX, GNUNET_MESSENGER_PADDING_MIN, and GNUNET_YES.
Referenced by calc_padded_length().
|
static |
Definition at line 339 of file messenger_api_message.c.
References calc_usual_padding(), GNUNET_MESSENGER_MAX_MESSAGE_SIZE, GNUNET_MESSENGER_PADDING_LEVEL0, GNUNET_MESSENGER_PADDING_LEVEL1, GNUNET_MESSENGER_PADDING_LEVEL2, GNUNET_MESSENGER_PADDING_MIN, and max.
Referenced by encrypt_message(), and pack_message().
|
static |
Definition at line 396 of file messenger_api_message.c.
References GNUNET_MESSENGER_MessagePrivate::data, GNUNET_MESSENGER_MessageDelete::delay, GNUNET_MESSENGER_MessageBody::deletion, GNUNET_MESSENGER_MessageInvite::door, encode_step, encode_step_ext, encode_step_key, GNUNET_MESSENGER_MessageBody::file, GNUNET_assert, GNUNET_CRYPTO_QUALITY_WEAK, GNUNET_CRYPTO_random_block(), GNUNET_htobe32, GNUNET_memcpy, GNUNET_MESSENGER_KIND_DELETE, GNUNET_MESSENGER_KIND_FILE, GNUNET_MESSENGER_KIND_ID, GNUNET_MESSENGER_KIND_INFO, GNUNET_MESSENGER_KIND_INVITE, GNUNET_MESSENGER_KIND_JOIN, GNUNET_MESSENGER_KIND_KEY, GNUNET_MESSENGER_KIND_MERGE, GNUNET_MESSENGER_KIND_MISS, GNUNET_MESSENGER_KIND_NAME, GNUNET_MESSENGER_KIND_PEER, GNUNET_MESSENGER_KIND_PRIVATE, GNUNET_MESSENGER_KIND_REQUEST, GNUNET_MESSENGER_KIND_TEXT, GNUNET_MESSENGER_MessageRequest::hash, GNUNET_MESSENGER_MessageFile::hash, GNUNET_MESSENGER_MessageDelete::hash, GNUNET_MESSENGER_MessageInfo::host_key, GNUNET_MESSENGER_MessageId::id, GNUNET_MESSENGER_MessageBody::id, GNUNET_MESSENGER_MessageBody::info, GNUNET_MESSENGER_MessageBody::invite, GNUNET_MESSENGER_MessageBody::join, GNUNET_MESSENGER_MessageJoin::key, GNUNET_MESSENGER_MessageKey::key, GNUNET_MESSENGER_MessageInvite::key, GNUNET_MESSENGER_MessageFile::key, GNUNET_MESSENGER_MessagePrivate::key, GNUNET_MESSENGER_MessageBody::key, GNUNET_MESSENGER_MessagePrivate::length, GNUNET_MESSENGER_MessageBody::merge, GNUNET_MESSENGER_MessageInfo::messenger_version, min, GNUNET_MESSENGER_MessageBody::miss, GNUNET_MESSENGER_MessageName::name, GNUNET_MESSENGER_MessageFile::name, GNUNET_MESSENGER_MessageBody::name, GNUNET_MESSENGER_MessagePeer::peer, GNUNET_MESSENGER_MessageMiss::peer, GNUNET_MESSENGER_MessageBody::peer, GNUNET_MESSENGER_MessageMerge::previous, GNUNET_MESSENGER_MessageBody::privacy, GNUNET_MESSENGER_MessageBody::request, GNUNET_MESSENGER_MessageText::text, GNUNET_MESSENGER_MessageBody::text, and GNUNET_MESSENGER_MessageFile::uri.
Referenced by encode_message(), and encode_short_message().
void encode_message | ( | const struct GNUNET_MESSENGER_Message * | message, |
uint16_t | length, | ||
char * | buffer, | ||
int | include_header | ||
) |
Encodes a given message into a buffer of a maximal length in bytes.
[in] | message | Message |
[in] | length | Maximal length to encode |
[out] | buffer | Buffer |
[in] | include_header | Flag to include header |
Definition at line 478 of file messenger_api_message.c.
References GNUNET_MESSENGER_Message::body, encode_message_body(), encode_step, encode_step_signature, GNUNET_assert, GNUNET_htobe32, GNUNET_YES, GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_MessageHeader::kind, GNUNET_MESSENGER_MessageHeader::previous, GNUNET_MESSENGER_MessageHeader::sender_id, GNUNET_MESSENGER_MessageHeader::signature, and GNUNET_MESSENGER_MessageHeader::timestamp.
Referenced by GNUNET_MESSENGER_send_message(), iterate_save_messages(), notify_srv_handle_message(), and pack_message().
|
static |
Definition at line 505 of file messenger_api_message.c.
References GNUNET_MESSENGER_ShortMessage::body, encode_message_body(), encode_step, GNUNET_CRYPTO_hash(), GNUNET_htobe32, GNUNET_memcpy, and GNUNET_MESSENGER_ShortMessage::kind.
Referenced by encrypt_message().
|
static |
Definition at line 555 of file messenger_api_message.c.
References GNUNET_MESSENGER_MessagePrivate::data, decode_step, decode_step_ext, decode_step_key, decode_step_malloc, GNUNET_MESSENGER_MessageDelete::delay, GNUNET_MESSENGER_MessageBody::deletion, GNUNET_MESSENGER_MessageInvite::door, GNUNET_MESSENGER_MessageBody::file, GNUNET_be32toh, GNUNET_memcpy, GNUNET_MESSENGER_KIND_DELETE, GNUNET_MESSENGER_KIND_FILE, GNUNET_MESSENGER_KIND_ID, GNUNET_MESSENGER_KIND_INFO, GNUNET_MESSENGER_KIND_INVITE, GNUNET_MESSENGER_KIND_JOIN, GNUNET_MESSENGER_KIND_KEY, GNUNET_MESSENGER_KIND_MERGE, GNUNET_MESSENGER_KIND_MISS, GNUNET_MESSENGER_KIND_NAME, GNUNET_MESSENGER_KIND_PEER, GNUNET_MESSENGER_KIND_PRIVATE, GNUNET_MESSENGER_KIND_REQUEST, GNUNET_MESSENGER_KIND_TEXT, GNUNET_MESSENGER_KIND_UNKNOWN, GNUNET_MESSENGER_MessageRequest::hash, GNUNET_MESSENGER_MessageFile::hash, GNUNET_MESSENGER_MessageDelete::hash, GNUNET_MESSENGER_MessageInfo::host_key, GNUNET_MESSENGER_MessageId::id, GNUNET_MESSENGER_MessageBody::id, GNUNET_MESSENGER_MessageBody::info, GNUNET_MESSENGER_MessageBody::invite, GNUNET_MESSENGER_MessageBody::join, GNUNET_MESSENGER_MessageJoin::key, GNUNET_MESSENGER_MessageInvite::key, GNUNET_MESSENGER_MessageKey::key, GNUNET_MESSENGER_MessageFile::key, GNUNET_MESSENGER_MessagePrivate::key, GNUNET_MESSENGER_MessageBody::key, GNUNET_MESSENGER_MessagePrivate::length, GNUNET_MESSENGER_MessageBody::merge, GNUNET_MESSENGER_MessageInfo::messenger_version, GNUNET_MESSENGER_MessageBody::miss, GNUNET_MESSENGER_MessageName::name, GNUNET_MESSENGER_MessageFile::name, GNUNET_MESSENGER_MessageBody::name, GNUNET_MESSENGER_MessageMiss::peer, GNUNET_MESSENGER_MessagePeer::peer, GNUNET_MESSENGER_MessageBody::peer, GNUNET_MESSENGER_MessageMerge::previous, GNUNET_MESSENGER_MessageBody::privacy, GNUNET_MESSENGER_MessageBody::request, GNUNET_MESSENGER_MessageText::text, GNUNET_MESSENGER_MessageBody::text, and GNUNET_MESSENGER_MessageFile::uri.
Referenced by decode_message(), and decode_short_message().
int decode_message | ( | struct GNUNET_MESSENGER_Message * | message, |
uint16_t | length, | ||
const char * | buffer, | ||
int | include_header, | ||
uint16_t * | padding | ||
) |
Decodes a message from a given buffer of a maximal length in bytes.
If the buffer is too small for a message of its decoded kind the function fails with resulting GNUNET_NO after decoding only the messages header.
On success the function returns GNUNET_YES.
[out] | message | Message |
[in] | length | Maximal length to decode |
[in] | buffer | Buffer |
[in] | include_header | Flag to include header |
[out] | padding | Padding |
Definition at line 643 of file messenger_api_message.c.
References GNUNET_MESSENGER_Message::body, decode_message_body(), decode_step, get_message_kind_size(), GNUNET_assert, GNUNET_be32toh, GNUNET_IDENTITY_read_signature_from_buffer(), GNUNET_MESSENGER_KIND_UNKNOWN, GNUNET_NO, GNUNET_YES, GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_MessageHeader::kind, GNUNET_MESSENGER_MessageHeader::previous, result, GNUNET_MESSENGER_MessageHeader::sender_id, GNUNET_MESSENGER_MessageHeader::signature, and GNUNET_MESSENGER_MessageHeader::timestamp.
Referenced by check_recv_message(), check_send_message(), check_tunnel_message(), get_store_message(), handle_recv_message(), handle_send_message(), and handle_tunnel_message().
|
static |
Definition at line 699 of file messenger_api_message.c.
References GNUNET_MESSENGER_ShortMessage::body, decode_message_body(), decode_step, get_short_message_size(), GNUNET_be32toh, GNUNET_CRYPTO_hash(), GNUNET_CRYPTO_hash_cmp(), GNUNET_memcpy, GNUNET_MESSENGER_KIND_UNKNOWN, GNUNET_NO, GNUNET_YES, and GNUNET_MESSENGER_ShortMessage::kind.
Referenced by decrypt_message().
void hash_message | ( | const struct GNUNET_MESSENGER_Message * | message, |
uint16_t | length, | ||
const char * | buffer, | ||
struct GNUNET_HashCode * | hash | ||
) |
Calculates a hash of a given buffer with a length in bytes from a message.
[in] | message | Message |
[in] | length | Length of buffer |
[in] | buffer | Buffer |
[out] | hash | Hash |
Definition at line 738 of file messenger_api_message.c.
References GNUNET_assert, GNUNET_CRYPTO_hash(), GNUNET_IDENTITY_signature_get_length(), GNUNET_MESSENGER_Message::header, and GNUNET_MESSENGER_MessageHeader::signature.
Referenced by check_tunnel_message(), get_store_message(), handle_tunnel_message(), and pack_message().
void sign_message | ( | struct GNUNET_MESSENGER_Message * | message, |
uint16_t | length, | ||
char * | buffer, | ||
const struct GNUNET_HashCode * | hash, | ||
const struct GNUNET_MESSENGER_Ego * | ego | ||
) |
Signs the hash of a message with a given ego and writes the signature into the buffer as well.
[in,out] | message | Message |
[in] | length | Length of buffer |
[out] | buffer | Buffer |
[in] | hash | Hash of message |
[in] | ego | EGO |
Definition at line 753 of file messenger_api_message.c.
References encode_step_signature, GNUNET_assert, GNUNET_IDENTITY_sign, GNUNET_memcpy, GNUNET_SIGNATURE_PURPOSE_CHAT_MESSAGE, GNUNET_MESSENGER_MessageSignature::hash, GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_Ego::priv, GNUNET_CRYPTO_EccSignaturePurpose::purpose, GNUNET_MESSENGER_MessageSignature::purpose, GNUNET_MESSENGER_MessageHeader::signature, and GNUNET_CRYPTO_EccSignaturePurpose::size.
Referenced by pack_message().
int verify_message | ( | const struct GNUNET_MESSENGER_Message * | message, |
const struct GNUNET_HashCode * | hash, | ||
const struct GNUNET_IDENTITY_PublicKey * | key | ||
) |
Verifies the signature of a given message and its hash with a specific public key.
The function returns GNUNET_OK if the signature was valid, otherwise GNUNET_SYSERR.
[in] | message | Message |
[in] | hash | Hash of message |
[in] | key | Public key of EGO |
Definition at line 774 of file messenger_api_message.c.
References GNUNET_assert, GNUNET_IDENTITY_signature_verify, GNUNET_memcpy, GNUNET_SIGNATURE_PURPOSE_CHAT_MESSAGE, GNUNET_SYSERR, GNUNET_MESSENGER_MessageSignature::hash, GNUNET_MESSENGER_Message::header, key, GNUNET_CRYPTO_EccSignaturePurpose::purpose, GNUNET_MESSENGER_MessageSignature::purpose, GNUNET_MESSENGER_MessageHeader::signature, GNUNET_CRYPTO_EccSignaturePurpose::size, and GNUNET_IDENTITY_Signature::type.
Referenced by verify_member_session_as_sender().
int encrypt_message | ( | struct GNUNET_MESSENGER_Message * | message, |
const struct GNUNET_IDENTITY_PublicKey * | key | ||
) |
Encrypts a message using a given public key and replaces its body and kind with the now private encrypted message.
The function returns GNUNET_YES if the operation succeeded, otherwise GNUNET_NO.
[in,out] | message | Message |
[in] | key | Public key of EGO |
Definition at line 795 of file messenger_api_message.c.
References GNUNET_MESSENGER_Message::body, GNUNET_MESSENGER_ShortMessage::body, calc_padded_length(), GNUNET_MESSENGER_MessagePrivate::data, destroy_message_body(), encode_short_message(), fold_short_message(), get_short_message_size(), GNUNET_assert, GNUNET_ERROR_TYPE_WARNING, GNUNET_IDENTITY_encrypt(), GNUNET_log, GNUNET_malloc, GNUNET_MESSENGER_KIND_PRIVATE, GNUNET_NO, GNUNET_YES, GNUNET_MESSENGER_Message::header, key, GNUNET_MESSENGER_MessagePrivate::key, GNUNET_MESSENGER_MessageHeader::kind, GNUNET_MESSENGER_ShortMessage::kind, GNUNET_MESSENGER_MessagePrivate::length, GNUNET_MESSENGER_MessageBody::privacy, and unfold_short_message().
Referenced by handle_send_message().
int decrypt_message | ( | struct GNUNET_MESSENGER_Message * | message, |
const struct GNUNET_IDENTITY_PrivateKey * | key | ||
) |
Decrypts a private message using a given private key and replaces its body and kind with the inner encrypted message.
The function returns GNUNET_YES if the operation succeeded, otherwise GNUNET_NO.
[in,out] | message | Message |
[in] | key | Private key of EGO |
Definition at line 830 of file messenger_api_message.c.
References GNUNET_MESSENGER_Message::body, GNUNET_MESSENGER_MessagePrivate::data, decode_short_message(), GNUNET_assert, GNUNET_ERROR_TYPE_WARNING, GNUNET_IDENTITY_decrypt(), GNUNET_log, GNUNET_NO, GNUNET_YES, key, GNUNET_MESSENGER_MessagePrivate::key, GNUNET_MESSENGER_MessagePrivate::length, GNUNET_MESSENGER_MessageBody::privacy, and unfold_short_message().
Referenced by notify_srv_handle_message().
struct GNUNET_MQ_Envelope* pack_message | ( | struct GNUNET_MESSENGER_Message * | message, |
struct GNUNET_HashCode * | hash, | ||
const struct GNUNET_MESSENGER_Ego * | ego, | ||
int | mode | ||
) |
Encodes the message to pack it into a newly allocated envelope if mode is equal to GNUNET_MESSENGER_PACK_MODE_ENVELOPE.
Independent of the mode the message will be hashed if hash is not NULL and it will be signed if the ego is not NULL.
[out] | message | Message |
[out] | hash | Hash of message |
[in] | ego | EGO to sign |
[in] | mode | Mode of packing |
Definition at line 859 of file messenger_api_message.c.
References calc_padded_length(), encode_message(), env, get_message_size(), GNUNET_assert, GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_log, GNUNET_malloc, GNUNET_MESSAGE_TYPE_CADET_CLI, GNUNET_MESSENGER_PACK_MODE_ENVELOPE, GNUNET_MQ_msg_extra, GNUNET_sh2s(), GNUNET_YES, hash_message(), GNUNET_MESSENGER_Message::header, GNUNET_MESSENGER_MessageHeader::kind, mode, GNUNET_MESSENGER_Ego::priv, GNUNET_MESSENGER_MessageHeader::sender_id, sign_message(), GNUNET_MESSENGER_MessageHeader::signature, GNUNET_IDENTITY_PrivateKey::type, and GNUNET_IDENTITY_Signature::type.
Referenced by forward_tunnel_message(), iterate_send_room_message(), and pack_srv_room_message().
int filter_message_sending | ( | const struct GNUNET_MESSENGER_Message * | message | ) |
Returns if a specific kind of message should be sent by a client.
The function returns GNUNET_YES or GNUNET_NO for recommendations and GNUNET_SYSERR for specific kinds of messages which should not be sent manually at all.
[in] | message | Message |
Definition at line 910 of file messenger_api_message.c.
Referenced by check_send_message(), and GNUNET_MESSENGER_send_message().