diff options
author | TheJackiMonster <thejackimonster@gmail.com> | 2020-11-01 22:57:28 +0100 |
---|---|---|
committer | TheJackiMonster <thejackimonster@gmail.com> | 2021-03-06 01:30:37 +0100 |
commit | 2925310d67483aca6e055e1ce0593c6463cd6c72 (patch) | |
tree | 2cc8aacafc25563cdccde2eee9a90f9ca257d405 /src/messenger/gnunet-service-messenger_tunnel.h | |
parent | 82b864a64679b0a735201724907cdf2b7e4e16c3 (diff) | |
download | gnunet-2925310d67483aca6e055e1ce0593c6463cd6c72.tar.gz gnunet-2925310d67483aca6e055e1ce0593c6463cd6c72.zip |
-added core functionality of the messenger service
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
formatting messenger code
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-completed core functionality of messenger service
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-code cleanup and reuse
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
+added structure to memberships of rooms
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-implemented member permission checks and deletion of messages
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-moved solving requests out of updating last messages (also forward before update)
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-reduced complexity of permisson check and changed load/save of rooms
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-added save/load for accessed keys and basement peers of a room
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-implemented save/load for members with their history and session
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-abstracted management of egos and contacts
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-fix warning
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-abstracted management of members
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-fixed and adjusted test case
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-separated handling of direct and anonymous contacts
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-messenger added member-sessions which fix multiple edge cases, also additional cleanup
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-updated docs and fixed memory leak
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-changed info messages and added protocol version exchange
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-adjusted client api to use contacts from sessions
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-added more logging and fixed wrong session usage
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-adjusted comm0 test case and removed adding members from checking messages
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-fixed test-case for peer exchange
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-getting multiple peers connected in test-case with cadet
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-fixed wrong assert and added tunnel version check
-simplified handling and forwarding
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-fixed merging last messages and cycling info messages
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-automated adding sessions and members
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-corrected use of identity keys and signatures
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-adding local joining on entering external room
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-fixed test-case comm0
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-added more test-cases with generic setup
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-fixed multiple simultaneous channels blocking each other
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-making test-cases more precise
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-added check of members in test-cases, reduced merge messages
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-unified delayed operations: requests, deletions and merges
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-finished handling of operations
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-fixed member session historystorage, added request permission check and padding for transmission
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-improved padding and removed automatic recursive requests
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-implemented filter for sending messages and added private messages to API level
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-wrong setups fixed with proper ego lookups
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-fixed problem with anonymous ego and changed to discrete-level padding
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-added links to replace deleted messages, added local deletion and fixed anonymous id changing
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-added session completion and removal through completion process
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
Diffstat (limited to 'src/messenger/gnunet-service-messenger_tunnel.h')
-rw-r--r-- | src/messenger/gnunet-service-messenger_tunnel.h | 104 |
1 files changed, 67 insertions, 37 deletions
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 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of GNUnet. | 2 | This file is part of GNUnet. |
3 | Copyright (C) 2020 GNUnet e.V. | 3 | Copyright (C) 2020--2021 GNUnet e.V. |
4 | 4 | ||
5 | GNUnet is free software: you can redistribute it and/or modify it | 5 | GNUnet is free software: you can redistribute it and/or modify it |
6 | under the terms of the GNU Affero General Public License as published | 6 | under the terms of the GNU Affero General Public License as published |
@@ -39,17 +39,18 @@ struct GNUNET_MESSENGER_SrvTunnel | |||
39 | struct GNUNET_CADET_Channel *channel; | 39 | struct GNUNET_CADET_Channel *channel; |
40 | 40 | ||
41 | GNUNET_PEER_Id peer; | 41 | GNUNET_PEER_Id peer; |
42 | struct GNUNET_ShortHashCode *contact_id; | 42 | |
43 | uint32_t messenger_version; | ||
43 | 44 | ||
44 | struct GNUNET_HashCode *peer_message; | 45 | struct GNUNET_HashCode *peer_message; |
45 | struct GNUNET_HashCode *last_message; | 46 | struct GNUNET_HashCode *last_message; |
46 | }; | 47 | }; |
47 | 48 | ||
48 | /** | 49 | /** |
49 | * Creates and allocates a tunnel of a <i>room</i> to a specific peer identity. | 50 | * Creates and allocates a tunnel of a <i>room</i> to a specific peer identity (called <i>door</i>). |
50 | * | 51 | * |
51 | * @param room Room | 52 | * @param[in/out] room Room |
52 | * @param door Peer identity | 53 | * @param[in] door Peer identity |
53 | * @return New tunnel | 54 | * @return New tunnel |
54 | */ | 55 | */ |
55 | struct GNUNET_MESSENGER_SrvTunnel* | 56 | struct GNUNET_MESSENGER_SrvTunnel* |
@@ -58,28 +59,27 @@ create_tunnel (struct GNUNET_MESSENGER_SrvRoom *room, const struct GNUNET_PeerId | |||
58 | /** | 59 | /** |
59 | * Destroys a <i>tunnel</i> and frees its memory fully. | 60 | * Destroys a <i>tunnel</i> and frees its memory fully. |
60 | * | 61 | * |
61 | * @param tunnel | 62 | * @param[in/out] tunnel |
62 | */ | 63 | */ |
63 | void | 64 | void |
64 | destroy_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel); | 65 | destroy_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel); |
65 | 66 | ||
66 | /** | 67 | /** |
67 | * Binds a CADET <i>channel</i> to a <i>tunnel</i> on returns GNUNET_YES only if | 68 | * Binds a CADET <i>channel</i> to a <i>tunnel</i> and replaces its channel |
68 | * the bounds channel was replaced successfully, otherwise GNUNET_NO gets returned. | 69 | * the tunnel is currently bound to if necessary. |
69 | * | 70 | * |
70 | * @param tunnel Tunnel | 71 | * @param[in/out] tunnel Tunnel |
71 | * @param channel CADET channel | 72 | * @param[in/out] channel CADET channel |
72 | * @return GNUNET_YES on success, otherwise GNUNET_NO | ||
73 | */ | 73 | */ |
74 | int | 74 | void |
75 | bind_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_CADET_Channel *channel); | 75 | bind_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_CADET_Channel *channel); |
76 | 76 | ||
77 | /** | 77 | /** |
78 | * Tries to connect a <i>tunnel</i> by creating a new CADET channel and binding it. | 78 | * Tries to connect a <i>tunnel</i> by creating a new CADET channel and binding it. |
79 | * The function returns GNUNET_YES on success, otherwise GNUNET_NO. | 79 | * The function returns #GNUNET_YES on success, otherwise #GNUNET_NO. |
80 | * | 80 | * |
81 | * @param tunnel Tunnel | 81 | * @param[in/out] tunnel Tunnel |
82 | * @return GNUNET_YES on success, otherwise GNUNET_NO | 82 | * @return #GNUNET_YES on success, otherwise #GNUNET_NO |
83 | */ | 83 | */ |
84 | int | 84 | int |
85 | connect_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel); | 85 | connect_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel); |
@@ -88,7 +88,7 @@ connect_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel); | |||
88 | * Disconnects and unbinds a channel from a <i>tunnel</i>. The actual disconnection | 88 | * Disconnects and unbinds a channel from a <i>tunnel</i>. The actual disconnection |
89 | * will be asynchronous. | 89 | * will be asynchronous. |
90 | * | 90 | * |
91 | * @param tunnel Tunnel | 91 | * @param[in/out] tunnel Tunnel |
92 | */ | 92 | */ |
93 | void | 93 | void |
94 | disconnect_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel); | 94 | disconnect_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel); |
@@ -96,46 +96,43 @@ disconnect_tunnel (struct GNUNET_MESSENGER_SrvTunnel *tunnel); | |||
96 | /** | 96 | /** |
97 | * Returns the status of a currently bound channel of a <i>tunnel</i>. | 97 | * Returns the status of a currently bound channel of a <i>tunnel</i>. |
98 | * | 98 | * |
99 | * @param tunnel Tunnel | 99 | * @param[in] tunnel Tunnel |
100 | * @return GNUNET_YES or GNUNET_NO | 100 | * @return #GNUNET_YES or #GNUNET_NO |
101 | */ | 101 | */ |
102 | int | 102 | int |
103 | is_tunnel_connected (const struct GNUNET_MESSENGER_SrvTunnel *tunnel); | 103 | is_tunnel_connected (const struct GNUNET_MESSENGER_SrvTunnel *tunnel); |
104 | 104 | ||
105 | /** | 105 | /** |
106 | * Sends an envelope containing a <i>message</i> with a given <i>hash</i> through | 106 | * Sends an envelope containing a <i>message</i> with a given <i>hash</i> through |
107 | * a <i>tunnel</i> by a given <i>handle</i>. | 107 | * a <i>tunnel</i>. |
108 | * | 108 | * |
109 | * @param tunnel Tunnel | 109 | * @param[in/out] tunnel Tunnel |
110 | * @param handle Handle | 110 | * @param[in/out] env Envelope |
111 | * @param env Envelope | 111 | * @param[in] hash Hash of message |
112 | * @param message Message | ||
113 | * @param hash Hash of message | ||
114 | */ | 112 | */ |
115 | void | 113 | void |
116 | send_tunnel_envelope (struct GNUNET_MESSENGER_SrvTunnel *tunnel, void *handle, struct GNUNET_MQ_Envelope *env, | 114 | send_tunnel_envelope (struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_MQ_Envelope *env, |
117 | struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash); | 115 | const struct GNUNET_HashCode *hash); |
118 | 116 | ||
119 | /** | 117 | /** |
120 | * Sends a <i>message</i> by packing it automatically into an envelope and passing it | 118 | * Sends a <i>message</i> by packing it automatically into an envelope and passing it |
121 | * through the <i>tunnel</i>. The used <i>handle</i> will sign the message and | 119 | * through the <i>tunnel</i>. The used <i>handle</i> will sign the message and |
122 | * the <i>hash</i> will be calculated and stored. | 120 | * the <i>hash</i> will be calculated and stored. |
123 | * | 121 | * |
124 | * @param tunnel Tunnel | 122 | * @param[in/out] tunnel Tunnel |
125 | * @param handle Handle | 123 | * @param[in/out] handle Handle |
126 | * @param[out] message Message | 124 | * @param[in/out] message Message |
127 | * @param[out] hash Hash of message | 125 | * @return #GNUNET_YES on success, GNUNET_NO otherwise |
128 | */ | 126 | */ |
129 | void | 127 | int |
130 | send_tunnel_message (struct GNUNET_MESSENGER_SrvTunnel *tunnel, void *handle, struct GNUNET_MESSENGER_Message *message, | 128 | send_tunnel_message (struct GNUNET_MESSENGER_SrvTunnel *tunnel, void *handle, struct GNUNET_MESSENGER_Message *message); |
131 | struct GNUNET_HashCode *hash); | ||
132 | 129 | ||
133 | /** | 130 | /** |
134 | * Forwards a given <i>message</i> with a known <i>hash</i> through a <i>tunnel</i>. | 131 | * Forwards a given <i>message</i> with a known <i>hash</i> through a <i>tunnel</i>. |
135 | * | 132 | * |
136 | * @param tunnel Tunnel | 133 | * @param[in/out] tunnel Tunnel |
137 | * @param message Message | 134 | * @param[in] message Message |
138 | * @param hash Hash of message | 135 | * @param[in] hash Hash of message |
139 | */ | 136 | */ |
140 | void | 137 | void |
141 | forward_tunnel_message (struct GNUNET_MESSENGER_SrvTunnel *tunnel, const struct GNUNET_MESSENGER_Message *message, | 138 | 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 | |||
146 | * and matching the tunnels peer identity. If no peer message has been linked to the tunnel | 143 | * and matching the tunnels peer identity. If no peer message has been linked to the tunnel |
147 | * yet, NULL gets returned. | 144 | * yet, NULL gets returned. |
148 | * | 145 | * |
149 | * @param tunnel Tunnel | 146 | * @param[in] tunnel Tunnel |
150 | * @return Hash of peer message or NULL | 147 | * @return Hash of peer message or NULL |
151 | */ | 148 | */ |
152 | const struct GNUNET_HashCode* | 149 | const struct GNUNET_HashCode* |
153 | get_tunnel_peer_message (const struct GNUNET_MESSENGER_SrvTunnel *tunnel); | 150 | get_tunnel_peer_message (const struct GNUNET_MESSENGER_SrvTunnel *tunnel); |
154 | 151 | ||
152 | /** | ||
153 | * Writes the peer identity of the peer connected via <i>tunnel</i> to this peer into | ||
154 | * the <i>peer</i> parameter. | ||
155 | * | ||
156 | * @param[in] tunnel Tunnel | ||
157 | * @param[out] peer Peer identity | ||
158 | */ | ||
159 | void | ||
160 | get_tunnel_peer_identity (const struct GNUNET_MESSENGER_SrvTunnel *tunnel, struct GNUNET_PeerIdentity *peer); | ||
161 | |||
162 | /** | ||
163 | * Returns the current messenger version the peer connected via a given <i>tunnel</i> | ||
164 | * has reported to be using if it was compatible during updating. | ||
165 | * | ||
166 | * @see update_tunnel_messenger_version | ||
167 | * | ||
168 | * @param[in] tunnel Tunnel | ||
169 | * @return Version of messenger | ||
170 | */ | ||
171 | uint32_t | ||
172 | get_tunnel_messenger_version (const struct GNUNET_MESSENGER_SrvTunnel *tunnel); | ||
173 | |||
174 | /** | ||
175 | * Updates the messenger version of the <i>tunnel</i> to a given <i>version</i> if | ||
176 | * it is compatible to the running peer of the service. Depending on success it | ||
177 | * returns #GNUNET_OK or #GNUNET_SYSERR on failure. | ||
178 | * | ||
179 | * @param[in/out] tunnel Tunnel | ||
180 | * @param[in] version Version of messenger | ||
181 | */ | ||
182 | int | ||
183 | update_tunnel_messenger_version (struct GNUNET_MESSENGER_SrvTunnel *tunnel, uint32_t version); | ||
184 | |||
155 | #endif //GNUNET_SERVICE_MESSENGER_TUNNEL_H | 185 | #endif //GNUNET_SERVICE_MESSENGER_TUNNEL_H |