ralphm.net

ralphm's blog

Thursday, 24 February 2005

KISS

On old Jabber software...

I'm being plagued by mysterious crashes of Gossip, my currently favourite Jabber client. Somehow, everytime I have used its groupchat stuff, the client becomes unstable. So far, I haven't been able to track it down, unfortunately. The fact that Gossip's main authors, Micke and Richard don't really use groupchat, doesn't help in getting this fixed, either.

Today, however, I remembered that nifty little tool called sjabber, a console groupchat-only Jabber client, written by qmacro. I was curious if it would still run, since this software hadn't been touched since 2001. Would it still adhere to Net::Jabber's API? Would it work with Multi-User Chat conference components? Almost a resounding yes!

Yes, sjabber still runs, even with the latest Net:Jabber. It works with the conferencing component at conference.ik.nu. However, it didn't fully work with the one on conference.jabber.fosdem.org. The difference? The former runs the old conference-v2 module, wheras the latter runs mu-conference. The mu-conference component implements the new Multi-User Chat protocol, and is a bit stricter on what it accepts. It turns out that sjabber wasn't setting the type attribute to groupchat on its outgoing messages and all messages from it were dropped at the component. Incoming messages, as well as presence was handled fine.

This was simple to fix, and now sjabber is working great. Its author, qmacro, was pretty amazed that his first foray into Jabber programming is still humming along nicely. For completeness, here's the fix:

--- sjabber.orig Wed Mar 28 11:04:39 2001
+++ sjabber     Thu Feb 24 10:07:52 2005
@@ -130,7 +130,7 @@
     elsif (length($input) and $config{currentgroup}) {
       my $gc_msg = Net::Jabber::Message->new();
       $gc_msg->SetMessage(
-#       Type    => 'headline', # why did I do this?
+        Type    => 'groupchat',
         To      => groupName($config{currentgroup}).'@'.groupServer($config{currentgroup}),
         Body    => $input,
       );