Ce WE, j'ai terminé (enfin, ça marche, il ne me reste plus qu'à commenter le code et passer un coup de Valgrind dessus) SlickJab, une librairie en Qt4 qui permet de se connecter à un serveur Jabber, puis d'émettre et de recevoir des messages en utilisant les signaux et slots de Qt4, c'est la classe. Ça donne quelque chose du genre:

...
JabberClient lCli = new JabberClient (<user>, <password>, <server>, <resource>, <QObject parent>);
connect (lCli, SIGNAL(authOk()), this, SLOT(...));
connect (lCli, SIGNAL(authFailed(int pCode, const QString &pMessage)), this, SLOT(...));
connect (lCli, SIGNAL(disconnected()), this, SLOT(...));
connect (lCli, SIGNAL(messageReceived(const QString &pId,const QString &pType, QDomNode pContent)), this, SLOT(handleMessage(...)));
...
lCli->sendRawMessage (<recipient>, <raw type>, <raw data>)....
lCli->sendXmlMessage (<recipient>, <raw type>, <DOM node>)....
...

J'ai testé, ça marche du tonnerre, entre deux programmes utilisant ma librairie, et entre un programme utilisant ma librairie et un client de messagerie instantannée. Je vais donc pouvoir faire du RPC totalement asynchrone en mode connecté, j'ai enfin mon framework de communication, à la fois simple, fonctionnel et fiable. Je dis enfin, car des frameworks, j'en ai testé un sacré paquet, de Corba à Ice, en passant par SOAP sur Http, XML/RPC, etc etc...En parlant SOAP, d'ailleur, je me demande si je n'intègre pas dans mon framework SOAP Over XMPP Jabber Enhancement Proposal 0072, ce ne serait pour moi qu'une modif de mes outils de génération de code (toutes les interfaces de RPC sont définies dans un document XML, et des feuilles XSLT permettent la génération de toute la glue de communication, sans toucher à l'implémentation!)

Cette librairie, je la sortirai sous licence GPL, quand je voudrais donner un petit coup de pouce publicitaire aux produits de ma future boite.