I think I've got Jabber presence tracking in... now I need to think about the API for registering for messages and such.
I think I'm going to take a permissive approach... rather then try to ensure that a given Jabber event goes to just one place, I'll allow multiple things to subscribe to Jabber events.
Also, no matter how I slice it, there are several distinct kinds of events an entity may wish to subscribe to. Some sort of IM client may want to listen to all incoming events. Dizzy's presence montitor just wants to listen to presence messages. I think I'm going to set up a system whereby you can either request a specific type of message, or give the Jabber framework an address of a table to check for message handlers for certain events, like "message" and "presence". If a handler is present, then it will be called, otherwise nothing will happen.