, sometimes spelled JabberLib
, and also called jlib
, allows Tcl
programs to connect to other jabber
agents. It originated in the zABBER
project, and was later forked into Coccinella
. The original was subsequently also forked into Tkabber
. Later, the original was forked yet again into tkchat
, leaving no less than four branches of the original jabberlib.
Other than jabber UI clients, it can be used for powerful application messaging, like YAMI
See Also edit
- mailing list for zABBER and the original jabberlib
, this seems to be the only jabber library available, and like too many other open-source projects, documentation is not present.
As the Coccinella fork is the most-recently and most-actively updated fork, it is now the de-facto "standard" jabberlib. Its description is as follows:
One of the core parts in the Coccinella is the JabberLib, written in Tcl. In order to serve other Tcl developers, it is downloadable here as a separate archive. It's already included in the Coccinella distribution. It hides all of the XML stuff that the Jabber protocol uses. Some test files are included to get you started. No docs available, except a brief summary of commands in the prefix header of each source file.
Included is also a patched TclXML
package that is needed for XML parsing in Tcl.vkvalli
Directory containing jabberlib in Tkabber : jabberlib-tclxml
The difficult part to understand from the code are how to register callbacks for receiving messages.
Hint: grep for uplevel
users, use tcllib
The examples code:
For receiving msg aspect, rssbot is more useful.
Flow of events on receiving message:
There is a TCP transport in transports file. I think that seems to be the code for socket receive. It calls jlib::inmsg.jlib::inmsg
It seems the calling application needs to define client:message
which is the callback procedure for receive.
The above flow of calling cannot explicitly seen from the code. During jlib:connect
, wrapper object is created and stored in some global array. Wrapper object creation takes the commands for parse as one of its argument. jlib::parse
is passed as an argument during wrapper:new. Hence it is invoked during wrapper:parse