From 2925310d67483aca6e055e1ce0593c6463cd6c72 Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Sun, 1 Nov 2020 22:57:28 +0100 Subject: -added core functionality of the messenger service Signed-off-by: TheJackiMonster formatting messenger code Signed-off-by: TheJackiMonster -completed core functionality of messenger service Signed-off-by: TheJackiMonster -code cleanup and reuse Signed-off-by: TheJackiMonster +added structure to memberships of rooms Signed-off-by: TheJackiMonster -implemented member permission checks and deletion of messages Signed-off-by: TheJackiMonster -moved solving requests out of updating last messages (also forward before update) Signed-off-by: TheJackiMonster -reduced complexity of permisson check and changed load/save of rooms Signed-off-by: TheJackiMonster -added save/load for accessed keys and basement peers of a room Signed-off-by: TheJackiMonster -implemented save/load for members with their history and session Signed-off-by: TheJackiMonster -abstracted management of egos and contacts Signed-off-by: TheJackiMonster -fix warning Signed-off-by: TheJackiMonster -abstracted management of members Signed-off-by: TheJackiMonster -fixed and adjusted test case Signed-off-by: TheJackiMonster -separated handling of direct and anonymous contacts Signed-off-by: TheJackiMonster -messenger added member-sessions which fix multiple edge cases, also additional cleanup Signed-off-by: TheJackiMonster -updated docs and fixed memory leak Signed-off-by: TheJackiMonster -changed info messages and added protocol version exchange Signed-off-by: TheJackiMonster -adjusted client api to use contacts from sessions Signed-off-by: TheJackiMonster -added more logging and fixed wrong session usage Signed-off-by: TheJackiMonster -adjusted comm0 test case and removed adding members from checking messages Signed-off-by: TheJackiMonster -fixed test-case for peer exchange Signed-off-by: TheJackiMonster -getting multiple peers connected in test-case with cadet Signed-off-by: TheJackiMonster -fixed wrong assert and added tunnel version check -simplified handling and forwarding Signed-off-by: TheJackiMonster -fixed merging last messages and cycling info messages Signed-off-by: TheJackiMonster -automated adding sessions and members Signed-off-by: TheJackiMonster -corrected use of identity keys and signatures Signed-off-by: TheJackiMonster -adding local joining on entering external room Signed-off-by: TheJackiMonster -fixed test-case comm0 Signed-off-by: TheJackiMonster -added more test-cases with generic setup Signed-off-by: TheJackiMonster -fixed multiple simultaneous channels blocking each other Signed-off-by: TheJackiMonster -making test-cases more precise Signed-off-by: TheJackiMonster -added check of members in test-cases, reduced merge messages Signed-off-by: TheJackiMonster -unified delayed operations: requests, deletions and merges Signed-off-by: TheJackiMonster -finished handling of operations Signed-off-by: TheJackiMonster -fixed member session historystorage, added request permission check and padding for transmission Signed-off-by: TheJackiMonster -improved padding and removed automatic recursive requests Signed-off-by: TheJackiMonster -implemented filter for sending messages and added private messages to API level Signed-off-by: TheJackiMonster -wrong setups fixed with proper ego lookups Signed-off-by: TheJackiMonster -fixed problem with anonymous ego and changed to discrete-level padding Signed-off-by: TheJackiMonster -added links to replace deleted messages, added local deletion and fixed anonymous id changing Signed-off-by: TheJackiMonster -added session completion and removal through completion process Signed-off-by: TheJackiMonster --- src/messenger/gnunet-service-messenger_tunnel.h | 104 +++++++++++++++--------- 1 file changed, 67 insertions(+), 37 deletions(-) (limited to 'src/messenger/gnunet-service-messenger_tunnel.h') diff --git a/src/messenger/gnunet-service-messenger_tunnel.h b/src/messenger/gnunet-service-messenger_tunnel.h index e6efb226d..51c5d32c1 100644 --- a/src/messenger/gnunet-service-messenger_tunnel.h +++ b/src/messenger/gnunet-service-messenger_tunnel.h @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - Copyright (C) 2020 GNUnet e.V. + Copyright (C) 2020--2021 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 @@ -39,17 +39,18 @@ struct GNUNET_MESSENGER_SrvTunnel struct GNUNET_CADET_Channel *channel; GNUNET_PEER_Id peer; - struct GNUNET_ShortHashCode *contact_id; + + uint32_t messenger_version; struct GNUNET_HashCode *peer_message; struct GNUNET_HashCode *last_message; }; /** - * Creates and allocates a tunnel of a room to a specific peer identity. + * Creates and allocates a tunnel of a room to a specific peer identity (called door). * - * @param room Room - * @param door Peer identity + * @param[in/out] room Room + * @param[in] door Peer identity * @return New tunnel */ struct GNUNET_MESSENGER_SrvTunnel* @@ -58,28 +59,27 @@ create_tunnel (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_PeerId /** * Destroys a tunnel and frees its memory fully. * - * @param tunnel + * @param[in/out] tunnel */ void destroy_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel); /** - * Binds a CADET channel to a tunnel on returns GNUNET_YES only if - * the bounds channel was replaced successfully, otherwise GNUNET_NO gets returned. + * Binds a CADET channel to a tunnel and replaces its channel + * the tunnel is currently bound to if necessary. * - * @param tunnel Tunnel - * @param channel CADET channel - * @return GNUNET_YES on success, otherwise GNUNET_NO + * @param[in/out] tunnel Tunnel + * @param[in/out] channel CADET channel */ -int +void bind_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_CADET_Channel *channel); /** * Tries to connect a tunnel by creating a new CADET channel and binding it. - * The function returns GNUNET_YES on success, otherwise GNUNET_NO. + * The function returns #GNUNET_YES on success, otherwise #GNUNET_NO. * - * @param tunnel Tunnel - * @return GNUNET_YES on success, otherwise GNUNET_NO + * @param[in/out] tunnel Tunnel + * @return #GNUNET_YES on success, otherwise #GNUNET_NO */ int connect_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel); @@ -88,7 +88,7 @@ connect_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel); * Disconnects and unbinds a channel from a tunnel. The actual disconnection * will be asynchronous. * - * @param tunnel Tunnel + * @param[in/out] tunnel Tunnel */ void disconnect_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel); @@ -96,46 +96,43 @@ disconnect_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel); /** * Returns the status of a currently bound channel of a tunnel. * - * @param tunnel Tunnel - * @return GNUNET_YES or GNUNET_NO + * @param[in] tunnel Tunnel + * @return #GNUNET_YES or #GNUNET_NO */ int is_tunnel_connected (const struct GNUNET_MESSENGER_SrvTunnel *tunnel); /** * Sends an envelope containing a message with a given hash through - * a tunnel by a given handle. + * a tunnel. * - * @param tunnel Tunnel - * @param handle Handle - * @param env Envelope - * @param message Message - * @param hash Hash of message + * @param[in/out] tunnel Tunnel + * @param[in/out] env Envelope + * @param[in] hash Hash of message */ void -send_tunnel_envelope (struct GNUNET_MESSENGER_SrvTunnel *tunnel, void *handle, struct GNUNET_MQ_Envelope *env, - struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); +send_tunnel_envelope (struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MQ_Envelope *env, + const struct GNUNET_HashCode *hash); /** * Sends a message by packing it automatically into an envelope and passing it * through the tunnel. The used handle will sign the message and * the hash will be calculated and stored. * - * @param tunnel Tunnel - * @param handle Handle - * @param[out] message Message - * @param[out] hash Hash of message + * @param[in/out] tunnel Tunnel + * @param[in/out] handle Handle + * @param[in/out] message Message + * @return #GNUNET_YES on success, GNUNET_NO otherwise */ -void -send_tunnel_message (struct GNUNET_MESSENGER_SrvTunnel *tunnel, void *handle, struct GNUNET_MESSENGER_Message *message, - struct GNUNET_HashCode *hash); +int +send_tunnel_message (struct GNUNET_MESSENGER_SrvTunnel *tunnel, void *handle, struct GNUNET_MESSENGER_Message *message); /** * Forwards a given message with a known hash through a tunnel. * - * @param tunnel Tunnel - * @param message Message - * @param hash Hash of message + * @param[in/out] tunnel Tunnel + * @param[in] message Message + * @param[in] hash Hash of message */ void forward_tunnel_message (struct GNUNET_MESSENGER_SrvTunnel *tunnel, const struct GNUNET_MESSENGER_Message *message, @@ -146,10 +143,43 @@ forward_tunnel_message (struct GNUNET_MESSENGER_SrvTunnel *tunnel, const struct * and matching the tunnels peer identity. If no peer message has been linked to the tunnel * yet, NULL gets returned. * - * @param tunnel Tunnel + * @param[in] tunnel Tunnel * @return Hash of peer message or NULL */ const struct GNUNET_HashCode* get_tunnel_peer_message (const struct GNUNET_MESSENGER_SrvTunnel *tunnel); +/** + * Writes the peer identity of the peer connected via tunnel to this peer into + * the peer parameter. + * + * @param[in] tunnel Tunnel + * @param[out] peer Peer identity + */ +void +get_tunnel_peer_identity (const struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_PeerIdentity *peer); + +/** + * Returns the current messenger version the peer connected via a given tunnel + * has reported to be using if it was compatible during updating. + * + * @see update_tunnel_messenger_version + * + * @param[in] tunnel Tunnel + * @return Version of messenger + */ +uint32_t +get_tunnel_messenger_version (const struct GNUNET_MESSENGER_SrvTunnel *tunnel); + +/** + * Updates the messenger version of the tunnel to a given version if + * it is compatible to the running peer of the service. Depending on success it + * returns #GNUNET_OK or #GNUNET_SYSERR on failure. + * + * @param[in/out] tunnel Tunnel + * @param[in] version Version of messenger + */ +int +update_tunnel_messenger_version (struct GNUNET_MESSENGER_SrvTunnel *tunnel, uint32_t version); + #endif //GNUNET_SERVICE_MESSENGER_TUNNEL_H -- cgit v1.2.3