Loudmouth with SASL support

I received a nice patch for Loudmouth last week from the guys at Collabora. It adds SASL support and XMPP 1.0 stream setup, this is something that have been lacking in Loudmouth for quite some time.

Spent the weekend going through the patch and make some changes to it and finally got it merged into my development branch. The patch also included support for doing SRV record lookups when trying to connect so that I only have to give my JID instead of JID, server and port. This is currently not supported by Gossip but I hope it can be added soon.

Next up will be to add support for TLS negotiation and some internal refactoring that I have been considering.

Transports in Loudmouth 2

As I’ve mentioned in another post I’ve done some redesign in Loudmouth 2.

One big change is introducing transports (subclasses of LmcTransport), these are only responsible for the I/O and is a layer between the session (LmcSession) and the underlying protocol used to transmit the data.

Those that have looked at LmConnection in Loudmouth 1 knows that it’s a mess of session state handling and socket handling. The new design will make the session code responsible only for negotiating the stream and keeping a state on the current session. It expects to always be able to write to a transport until it gets the disconnected-signal (buffering is done in the transport layer).

Proxies are implemented as transport subclasses and Http- and Socks-proxies are subclasses of LmcTcpTransport. They will do the same thing as the tcp transport but when the socket to the proxy server is connected, they will negotiate with the proxy server (authenticate and send information about the XMPP server). When the tunnel through the proxy server is setup, the proxy transport will emit the connect-result signal.

One last nice bit is that it will now be possible for application developers to develop their own transports outside of Loudmouth and then hook it into LmcSession.

Loudmouth 2, Getting There

I haven’t blogged much about the development I’m doing on Loudmouth. I started hacking Loudmouth some three-four years ago to for the fun of implementing Jabber (before it was turned into a standard named XMPP).

While Loudmouth sure served it’s purpose it has been getting more and more complex to extend, I’ve also kept the API stable on the 1.X branch. In order to make the design fit better with the current needs I’ve chosen to break the API for Loudmouth 2 and do quite a large redesign. One big change for users of Loudmouth is that I have decided to make certain derivable objects use GObject.

In Loudmouth 2, it will be much easier to extend the library with application specific extension, for example make Loudmouth use a Unix socket transport layer for using XMPP for IPC or add an extension to implement a certain XEP (XMPP Extension Proposal).

Loudmouth will also be split into Loudmouth Core and Loudmouth Extended (two separate libraries within the same source tarball). Where Loudmouth Core will give approximately the same functionality and API level as Loudmouth 1 and Loudmouth Extended will be a higher level API.

I hope to be able to post some documents on the new design up on Imendio Developer Pages soon.

« Previous PageNext Page »

Close
E-mail It