The pontarius-xmpp package

[Tags: bsd3, library]

Pontarius XMPP is a work in progress implementation of RFC 6120 (XMPP CORE), RFC 6121 (XMPP IM), and RFC 6122 (XMPP ADDR). While in alpha, Pontarius XMPP works quite well and fulfills most requirements of the RFCs.


[Skip to ReadMe]

Properties

Versions0.0.2.0, 0.0.3.0, 0.0.4.0, 0.0.5.0, 0.0.6.0, 0.0.7.0, 0.1.0.0, 0.1.0.1, 0.1.0.2, 0.2.0.0, 0.2.0.1, 0.3.0.0, 0.3.0.1, 0.3.0.2, 0.3.0.3, 0.4.0.0, 0.4.0.1, 0.4.0.2, 0.4.1.0, 0.4.2.0, 0.4.2.1, 0.4.2.2
Change logNone available
Dependenciesattoparsec (>=0.10.0.3), base (>4 && <5), base64-bytestring (>=0.1.0.0), binary (>=0.4.1), bytestring (>=0.9.1.9), conduit (>=1.0.1), containers (>=0.4.0.0), crypto-api (>=0.9), crypto-random (>=0.0.5), cryptohash (>=0.6.1), cryptohash-cryptoapi (>=0.1), data-default (>=0.2), dns (>=0.3.0), hslogger (>=1.1.0), iproute (>=1.2.4), lifted-base (>=0.1.0.1), mtl (>=2.0.0.0), network (>=2.3.1.0), pureMD5 (>=2.1.2.1), random (>=1.0.0.0), resourcet (>=0.3.0), split (>=0.1.2.3), stm (>=2.1.2.1), stringprep (>=1.0), template-haskell (>=2.5), text (>=0.11.1.5), tls (>=1.1.3), tls-extra (>=0.6.0), transformers (>=0.2.2.0), void (>=0.5.5), xml-conduit (>=1.1.0.7), xml-picklers (>=0.3.3), xml-types (>=0.3.1) [details]
LicenseBSD3
CopyrightDmitry Astapov, Pierre Kovalev, Mahdi Abdinejadi, Jon Kristensen, IETF Trust, Philipp Balzarek
AuthorJon Kristensen, Philipp Balzarek
Maintainerinfo@jonkri.com
Stabilityalpha
CategoryNetwork
Home pagehttps://github.com/pontarius/pontarius-xmpp/
Bug trackerhttps://github.com/pontarius/pontarius-xmpp/issues/
Source repositoryhead: git clone git://github.com/pontarius/pontarius-xmpp.git
this: git clone git://github.com/pontarius/pontarius-xmpp.git(tag 0.3.0.3)
UploadedWed Jan 29 17:15:40 UTC 2014 by JonKristensen
DistributionsNixOS:0.4.2.1
Downloads2699 total (225 in last 30 days)
Votes
0 []
StatusDocs available [build log]
Successful builds reported [all 1 reports]

Modules

[Index]

Flags

NameDescriptionDefault
with-thEnable Template Haskell supportEnabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainers' corner

For package maintainers and hackage trustees

Readme for pontarius-xmpp-0.3.0.3

Welcome to Pontarius XMPP!

Pontarius XMPP is an active work in progress to build a Haskell XMPP client library that implements the capabilities of RFC 6120 ("XMPP CORE"), RFC 6121 ("XMPP IM"), and RFC 6122 ("XMPP ADDR"). Pontarius XMPP is part of the Pontarius project, an effort to produce free and open source, uncentralized, and privacy-aware software solutions.

While in alpha, Pontarius XMPP works quite well and fulfills most requirements of the RFCs.

Prerequisites

Pontarius XMPP requires GHC 7.0, or later.

You will need the ICU Unicode library and it's header files in order to be able to build Pontarius XMPP. On Debian, you will need to install the libicu-dev package. In Fedora, the package is called libicu-devel.

Note to users of GHC 7.0 and GHC 7.2: You will need cabal-install, version 0.14.0 or higher, or the build will fail with an "unrecognized option: --disable-benchmarks" error. The versions 1.16.0 and higher might not build on your system; if so, install 0.14.0 with "cabal install cabal-install-0.14.0".

Note to users of GHC 7.2.1: Due to a bug, recent versions of the binary package wont build without running "ghc-pkg trust base".

Note to users of GHC 7.0.1: You will want to configure your Cabal environment (including cabal-install) for version 0.9.2.1 of bytestring.

Getting started

The latest release of Pontarius XMPP, as well as its module API pages, can always be found at the Pontarius XMPP Hackage page.

Note: Pontarius XMPP is still in its Alpha phase. Pontarius XMPP is not yet feature-complete, it may contain bugs, and its API may change between versions.

The first thing to do is to import the modules that we are going to use. We are also using the OverloadedStrings LANGUAGE pragma in order to be able to type <code>Text</code> values like strings.

{-# LANGUAGE OverloadedStrings #-}

import Network.Xmpp

import Control.Monad
import Data.Default
import System.Log.Logger

Pontarius XMPP supports hslogger logging. Start by enabling console logging.

updateGlobalLogger "Pontarius.Xmpp" $ setLevel DEBUG

When this is done, a <code>Session</code> object can be acquired by calling <code>session</code>. This object will be used for interacting with the library.

result <- session
             "example.com"
              (Just (\_ -> ( [scramSha1 "username" Nothing "password"])
                           , Nothing))
              def

The three parameters above are the XMPP server realm, a SASL handler (for authentication), and the session configuration settings (set to the default settings). <code>session</code> will perform the necessary DNS queries to find the address of the realm, connect, establish the XMPP stream, attempt to secure the stream with TLS, authenticate, establish a concurrent interface for interacting with the stream, and return the <code>Session</code> object.

The return type of <code>session</code> is <code>IO (Either XmppFailure Session)</code>. As <code>XmppFailure</code> is an <code>Control.Monad.Error</code> instance, you can utilize the <code>ErrorT</code> monad transformer for error handling. A more simple way of doing it could be doing something like this:

sess <- case result of
            Right s -> return s
            Left e -> error $ "XmppFailure: " ++ (show e)

Next, let us set our status to Online.

sendPresence def sess

Here, <code>def</code> refers to the default <code>Presence</code> value, which is the same as <code>Presence Nothing Nothing Nothing Nothing Available []</code>.

Now, let's say that we want to receive all message stanzas, and echo the stanzas back to the recipient. This can be done like so:

forever $ do
    msg <- getMessage sess
    case answerMessage msg (messagePayload msg) of
        Just answer -> sendMessage answer sess
        Nothing -> putStrLn "Received message with no sender."

You don't need to worry about escaping your <code>Text</code> values - Pontarius XMPP (or rather, xml-picklers) will take care of that for you.

Additional XMPP threads can be created using <code>dupSession</code> and <code>forkIO</code>.

For a public domain example of a simple Pontarius XMPP (Cabal) project, refer to the examples/echoclient directory.

More information

Feel free to contact Jon Kristensen if you have any questions or comments.