The Chat Core code used by Thunderbird has some abstractions to deal with the differences between protocols (e.g. IRC vs. XMPP).
Protocols are implemented in chat core using JavaScript.
Protocols must implement the proper interfaces and be registered with the category manager in order to be found. Protocols need to implement the prplI* interfaces (this can mostly be done using jsProtoHelper). The minimum set of interfaces to implement are:
- imXPCOMUtils: Additional XPCOM utilities.
- JavaScript socket: Simplified socket code.
- jsProtoHelper: Includes basic JavaScript implementations of the interfaces and some helper code.
- XML HTTP Request helper: Simplified HTTP request code
The code for the JavaScript protocols we ship by default is here.
- IRC: A full implementation, including private chats and MUCs, etc.
- JavaScript Test Protocol: An extremely simple example meant to serve as test code for the interfaces.
- Matrix: An implementation that heavily depends on an external SDK.
- XMPP: A full implementation, including private chats and MUCs, etc. There are also other protocols which inherit and customize XMPP:
- There are also some stub implementations for protocols that Thunderbird used to support, but no longer does. These exist purely for the icons to show up and for a nice error message to appear when the account tries to connect.
This lists the protocol plugins that the core service knows about. You can copy the code (as it is), paste it in the error console (linebreaks will automatically be ignored) and press "Enter" to run it.
Components.utils.import("resource:///modules/imServices.jsm");
let protocols = Services.core.getProtocols();
let result = "";
for (let p of protocols) {
let proto = p.QueryInterface(Components.interfaces.prplIProtocol);
result += proto.name + "\t\t" + proto.id + "\n";
}
Services.console.logStringMessage(result);