I just released biboumi 3.0.
This release include two big changes.
Database support for persistant configuration
Biboumi can now optionally be compiled against LiteSQL (also a C++ project, depends on sqlite3-devel and builds with cmake), which adds the possibility for each user to configure many things.
Using an ad-hoc command named configure, you can now obtain a data-form with all the available configurable options, and fill it as you wish. Each user (bare JID) can store a different configuration for each server, and one for each channel.
You can for example configure, for each server, the receiving encoding, a password (to be used to connect to the server, this is not related to NickServ or any such nickname service), a command sent to the server after each connection (in which you can send a message to NickServ to automatically identify), the list of ports to try (with or without TLS), your username and realname (these weird things that don’t make any sense outside the IRC world), whether you want to verify the TLS certificate or not, and a trusted SHA-1 fingerprint (to be able to connect against self-signed certificate).
It’s also possible to be more specific, and configure a channel (instead of a whole IRC server). But this time, this only lets you customize the receiving encoding.
To use this feature, you need to list the ad-hoc commands on a specific JID, for example if you want to configure things for Freenode:
- List the commands on firstname.lastname@example.org (with poezio it’s done with the /ad-hoc command)
- Choose the configure command (actually it's the only available command at the moment)
- Fill the various values. For example if you want to forbid the connection without TLS, just remove all the ports from the Ports list, and only leave values is the TLS ports one.
- Finally send the data-form.
- The configuration is immediately applied and you can connect to the server immediately, biboumi will only try to use the ports you specified, with a TLS connection.
This feature is an implementation of what is called multi-session nick in the XEP 0045.
In effect, a user can join one IRC channel from multiple XMPP clients behind one single nick. For example if you are idling in some channel, with your nick Sandra using your desktop client, you can now join that same channel with that same nick from your mobile client (as long as you connect with the same JID of course). You don’t need to have Sandra, Sandra_mobile and Sandra_work connected at the same time.
All the messages and presences will be forwarded identically to all the resources behind the nick, so all the clients will see the exact same conversation, list of users etc. If you receive a private message, the message will also be forwarded to every connected resource.
If one of the resources disconnects from the IRC server, the nick stays connected as long as at least one resource remains.
For the future
For the next version (4.0), I intend to implement these new features:
Store received messages in the database, to be able to send them back to the user, when requested, as an history (through message archive management, or when joining a channel behind a multi-session nick)
Let the user configure a “lingering time”, during which the nickname stays connected to an IRC channel, storing the messages into the database.
With these two features, biboumi could replace “bouncers” (like znc), because the user would be able to entirely disconnect all their clients, and still be able to idle on some channels, and to get the full history when the connect back on the IRC server.