Hello everyone, a while ago we had a discussion about the groupchat we had implemented in Nim and in C using the cadet-gtk application. It resulted in a plan for a decentralized chat room (for the start structured in a basic ring topology).
Because we thought it made more sense to implement it in a separate library than rewriting the existing code on multiple ends, that's basically what I did the last months and it's close to finished for testing. https://gitlab.com/gnunet-messenger/libgnunet-messenger The library contains headers to use its functionality on an abstract layer without hassling with the most logic in the background like managing all CADET channels, contacts, public keys and messages. It even provides an automated storage for contacts and messages to load if necessary for viewing in a UI for example. The most improvement is handling private chats between two peers the same as group chats with only two members and that decentralized groups and centralized ones using one host can change into each other. This basically means any member joining into a chatroom can also host it (opening the port for others) and become part of the ring structure. All other members who don't like to share their peer-id with everyone except the one hosting peer they connected to can do so as well. All messages are signed using an ego key you can choose or if none selected you still sign with the common anonymous key. Contacts will be identified by the key they use (name is optional and customizable, member-id belongs to each chatroom and can change if necessary). It was also added that all messages are identified by their hash and refer to the previous message with its hash building a graph. They are even "merge" messages to automatically reduce the leaves of that graph. The latest feature is a message to request messages by hashes your peer missed somehow. This will also get handled automatically to complete the local chatlog. So as long as members don't leave a chatroom forever being the only one knowing about specific messages, others can still get them later without permanent connection. I will probably still change some parts of the abstract API for sending messages and finish example applications but otherwise it is ready to use for everyone interested. I was just thinking if I should make it an actual GNUNET service and working out how to handle multiple applications using the library at once with separate egos. (This would also ease testing.) Do you think this would make sense? Also... when I'm done with last tweaking I will probably start making big changes to the cadet-gtk application or maybe rewriting big parts because it will use the library instead of relying directly to CADET. I was also thinking about adding features from cadet-gtk to the library instead (for example the file-sharing and the search for contacts). Happy Hacking Jacki
signature.asc
Description: This is a digitally signed message part
