Version 0.9.2 released

This is a bugfix release:

  • Only send a single DISCONNECT command when using -l in the pub client.
  • Set QoS=1 on PUBREL commands to meet protocol spec.
  • Don't leak sockets on connection failure in the library.
  • Install man pages when building under cmake.
  • Fix crash bug on malformed CONNECT message.
  • Clients are now rejected if their socket peer name cannot be obtained on connection.
  • Fix a number of potential problems caused when a client with a duplicate id connects.
  • Install mosquitto.conf under cmake.

Thanks to Mark Hindess, Joshua Lock, Adam Rudd and Ben Davenport for their help.

The source code is available as always on the download page. Binaries will appear shortly.

MQTT on Android

Dale Lane has written an enormous blog post [Using MQTT in Android Mobile Applications in which he talks about a lot of the points you are likely to want to consider if you're writing MQTT applications for Android. There's lots of useful information and he even includes a complete source code implementation.

Version 0.9.1 released

This is a bugfix release.

  • Add missing code for parsing the bind_address configuration option.
  • Fix missing include when compiling with tcp-wrappers support.
  • Add linker version script for C library to control exported functions.

Source code is on the download page, binary packages will follow on later.

Version 0.9 released

This is a features release. It is probably the most significant change for mosquitto so far.

The important change is the removal of the sqlite dependency, along with the associated pcre and sqlite3-pcre dependencies. This results in better performance both in terms of messages handled per second and memory usage. Optional support for importing existing persistent databases in sqlite3 format is provided, with the option compiled in by default. This will be set to not be compiled by default in 0.10 and then removed in 0.11.

This release also provides support for the recently updated MQTT v3.1 spec - most notably offering username/password authentication support. The client library and clients have full v3.1 support. The broker is fully compatible with v3.1, but doesn't provide any mechanism for controlling username/password control. This will come in 0.10.

One goal of mosquitto is to be a drop in replacement for the IBM rsmb broker. Another goal is to do more than rsmb :) I'm still working on the first goal, but this release helps with the second as mosquitto now has IPv6 support, which isn't supported in rsmb.

A detailed list of changes is given below:

  • Client and message data is now stored in memory with custom routines rather than a sqlite database. This removes the dependencies on sqlite, pcre and sqlite3-pcre. It also means that the persistent database format has had to be reimplemented in a custom format. Optional support for importing old sqlite databases is provided.
  • Added IPv6 support for mosquitto and the clients.
  • Provide username and password support for the clients and client libraries. This is part of the new MQTT v3.1 spec.
  • The broker supports the username and password connection flags, but will not do anything with the username and password.
  • Python callback functions now optionally take an extra argument which will return the user object passed to the Mosquitto() constructor, or the calling python object itself if nothing was given to Mosquitto().
  • Remove the mosquitto command line option -i interface.
  • Remove the mosquitto.conf "interface" variable.
  • Add support for the listener config variable (replaces the interface variable)
  • Add support for the bind_address config variable.
  • Change the port config variable behaviour to match that of rsmb (applies to the default listener only, can be given just once).
  • Fix QoS 2 protocol compliance - stop sending duplicate messages and handle timeouts correctly. Fixes bug #598290.
  • Set retain flag correctly for outgoing messages. It should only be set for messages sent in response to a subscribe command (ie. stale data).
  • Fix bug in returning correct CONNACK result to on_connect client callback.
  • Don't send client will if it is disconnected for exceeding its keepalive timer.
  • Fix client library unsubscribe function incorrectly sending a SUBSCRIBE command when it should be UNSUBSCRIBE.
  • Fix max_inflight_messages and max_queued_messages operation. These parameters now apply only to QoS 1 and 2 messages and are used regardless of the client connection state.
  • mosquitto.conf now installed to /etc/mosquitto/mosquitto.conf instead of /etc/mosquitto.conf. The /etc/mosquitto/ directory will be used for password and access control files in the future.
  • Give the compile time option of using 32-bit integers for the database IDs instead of 64-bit integers. This is useful where htobe64()/be64toh() are not available or for embedded systems for example.
  • The DUP bit is now set correctly when resending PUBREL messages.
  • A port to Windows native has been partially completed. This currently drops a number of features, including the ability to change configuration parameters and persistent storage.

See the download page for the update. Debian and Ubuntu users should note that the package libmosquitto0-python has been renamed python-mosquitto to comply with Debian naming policies. The Debian packages aren't yet ready.

Distro packaging

Starting with version 0.9, I plan on getting mosquitto packaged in the major Linux distributions. By this I mean Debian, Fedora, openSUSE and Ubuntu.  This is my understanding of the current state of play of those distributions. Feel free to correct me!

  • Debian is currently in freeze for the Squeeze release. Mosquitto will have to go into Squeeze+1, although it can still be uploaded to Unstable.
  • Fedora 14 has just been released, Fedora 15 will have feature freeze on the 8th of February.
  • openSUSE 11.4 will have feature freeze at the start of December.
  • Ubuntu 11.04 has its Debian import freeze on the 30th of December and feature freeze on 24th of February.

The plan is therefore to release 0.9 around the 14th of November and aim to be packaged for Debian unstable before 30th of December and openSUSE before the start of December, with packaging for Fedora 15 coming at some point later. If packaging for Debian unstable isn't possible before the Ubuntu import freeze, then package for Ubuntu separately.

If you can help out with the packaging process for any of the above, I'd love to hear from you. If your distribution isn't included and you'd like it to be, get in touch as well and we'll see what's possible.

Finally, this won't stop me producing Ubuntu PPA or openSUSE build service packaged binaries for those that prefer to stay at the cutting edge.