Skip to content

Latest commit

 

History

History
90 lines (56 loc) · 2.28 KB

README.markdown

File metadata and controls

90 lines (56 loc) · 2.28 KB

Natter

Natter is an XMPP erlang library. It currently only supports IQ stanzas and has no support for messages, roster, and just enough presence support to be able to connect.

Building Natter

If you've built erlang from source, then do the following:

autoreconf --install
./configure
make
sudo make install

This will install natter at: /usr/local/lib/erlang/lib/

If you are using Ubuntu and installed erlang via apt-get:

autoreconf --install
./configure --prefix=/usr/
make
sudo make install

This will install natter at: /usr/lib/erlang/lib/

Getting Started

Connecting

Config = [{host, "localhost"}, {user, "foo"}, {password, "bar"}, {resource, "foobar"}].
{ok, Cn} = natter_connection:start_link(Config).

Receiving XMPP Messages

An exchange routes packets to interested processes. A process can tell natter that he is interested in hearing all messages that come in (default_exchange) or that he is interested in hearing messages that go to a particular JID.

Default Exchange

Config = [{host, "localhost"}, {user, "foo"}, {password, "bar"}, {resource, "foobar"}].
{ok, Cn} = natter_connection:start_link(Config).
natter_connection:register_default_exchange(self(), Cn).

Specific Exchange

Config = [{host, "localhost"}, {user, "foo"}, {password, "bar"}, {resource, "foobar"}].
{ok, Cn} = natter_connection:start_link(Config).
natter_connection:register_exchange(Cn, "iq", "bar@localhost", self()).

Internals

3 main modules:

  • natter_connection: public API. Runs as a supervisor.

  • natter_packetizer: responsible for dealing with all network traffic. Reads in incoming XML and finds out when you have a complete packet. It then sends the packet to the dispatcher.

  • natter_dispatcher: figures out where packets should go.

XML Parsing is done using an erlang wrapper around libexpat. Inspired by Jabberlang. Faster than xmerl.

XML is parsed into a tuple:

{xmlelement, “iq”, Attrs, Subels}

TODO

  • Move away from plain-text authentication

  • Support for presence

  • Support for message stanzas

  • Support for rosters

Resources/Links

Kevin Smith presents Natter at the Erlang Factory