Browse Source

Merge pull request #29 from jonkri/master

Apply various minor fixes
master
Jon Kristensen 13 years ago
parent
commit
7be237b83a
  1. 34
      README.md
  2. 5
      examples/echoclient/Main.hs
  3. 8
      pontarius-xmpp.cabal
  4. 2
      source/Network/Xmpp/IM/Message.hs
  5. 2
      source/Network/Xmpp/Marshal.hs
  6. 3
      source/Network/Xmpp/Types.hs
  7. 6
      tests/Tests.hs

34
README.md

@ -1,8 +1,13 @@ @@ -1,8 +1,13 @@
Welcome to Pontarius XMPP!
==========================
Pontarius XMPP is an active work in progress to build a Haskell XMPP library
that implements the client capabilities of [RFC 6120](http://tools.ietf.org/html/rfc6120).
Pontarius XMPP is an active work in progress to build a Haskell XMPP client
library that implements the capabilities of [RFC 6120
("XMPP CORE")](http://tools.ietf.org/html/rfc6120), [RFC 6121 ("XMPP
IM")](http://tools.ietf.org/html/rfc6121), and [RFC 6122 ("XMPP
ADDR")](http://tools.ietf.org/html/rfc6122). Pontarius XMPP is part of [the
Pontarius project](http://www.pontarius.org/), an effort to produce free and
open source, uncentralized, and privacy-aware software solutions.
Getting started
---------------
@ -14,6 +19,10 @@ page](http://hackage.haskell.org/package/pontarius-xmpp/). @@ -14,6 +19,10 @@ page](http://hackage.haskell.org/package/pontarius-xmpp/).
_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.
_Note:_ 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*.
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.
@ -36,15 +45,16 @@ When this is done, a <code>Session</code> object can be acquired by calling @@ -36,15 +45,16 @@ When this is done, a <code>Session</code> object can be acquired by calling
result <- session
"example.com"
(Just (\_ -> ( [scramSha1 "username" Nothing "password"])
, Nothing))
def
(Just ([scramSha1 "username" Nothing "password"], Nothing))
The three parameters above are the XMPP server realm, the session configuration
settings (set to the default settings), and a SASL handler (for authentication).
<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 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
@ -58,7 +68,11 @@ doing it could be doing something like this: @@ -58,7 +68,11 @@ doing it could be doing something like this:
Next, let us set our status to Online.
sendPresence (Presence Nothing Nothing Nothing Nothing Nothing []) sess
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:

5
examples/echoclient/Main.hs

@ -20,12 +20,13 @@ main = do @@ -20,12 +20,13 @@ main = do
updateGlobalLogger "Pontarius.Xmpp" $ setLevel DEBUG
result <- session
"example.com"
(Just (\_ -> ( [scramSha1 "username" Nothing "password"])
, Nothing))
def
(Just ([scramSha1 "username" Nothing "password"], Nothing))
sess <- case result of
Right s -> return s
Left e -> error $ "XmppFailure: " ++ (show e)
sendPresence (Presence Nothing Nothing Nothing Nothing Nothing []) sess
sendPresence def sess
forever $ do
msg <- getMessage sess
case answerMessage msg (messagePayload msg) of

8
pontarius-xmpp.cabal

@ -10,11 +10,11 @@ Author: Jon Kristensen, Mahdi Abdinejadi, Philipp Balzarek @@ -10,11 +10,11 @@ Author: Jon Kristensen, Mahdi Abdinejadi, Philipp Balzarek
Maintainer: info@jonkri.com
Stability: alpha
Homepage: https://github.com/pontarius/pontarius-xmpp/
Bug-Reports: mailto:info@jonkri.com
Bug-Reports: https://github.com/pontarius/pontarius-xmpp/issues/
Package-URL: http://www.jonkri.com/releases/pontarius-xmpp-0.2.0.1.tar.gz
Synopsis: An incomplete implementation of RFC 6120 (XMPP: Core)
Description: Pontarius XMPP is a work in progress implementation of
RFC 6120 (XMPP: Core).
Synopsis: An incomplete XMPP client implementation
Description: Pontarius XMPP is a work in progress implementation of RFC 6120
("XMPP CORE"), RFC 6121 ("XMPP IM"), and RFC 6122 ("XMPP ADDR").
Category: Network
Tested-With: GHC ==7.0.4, GHC ==7.4.1

2
source/Network/Xmpp/IM/Message.hs

@ -16,7 +16,7 @@ data MessageBody = MessageBody { bodyLang :: Maybe LangTag @@ -16,7 +16,7 @@ data MessageBody = MessageBody { bodyLang :: Maybe LangTag
, bodyContent :: Text
}
data MessageThread = MessageThread { theadID :: Text
data MessageThread = MessageThread { threadID :: Text
, threadParent :: Maybe Text
}

2
source/Network/Xmpp/Marshal.hs

@ -277,4 +277,4 @@ xpJid :: PU Text Jid @@ -277,4 +277,4 @@ xpJid :: PU Text Jid
xpJid = PU { unpickleTree = \input -> case jidFromText input of
Nothing -> UnpickleError $ ErrorMessage "Could not parse JID."
Just jid -> Result jid Nothing
, pickleTree = \input -> pack $ jidToText input }
, pickleTree = \input -> jidToText input }

3
source/Network/Xmpp/Types.hs

@ -936,9 +936,6 @@ parseJid s = case jidFromText $ Text.pack s of @@ -936,9 +936,6 @@ parseJid s = case jidFromText $ Text.pack s of
Just jid -> jid
Nothing -> error $ "Jid value (" ++ s ++ ") did not validate"
instance IsString Jid where
fromString = fromJust . jidFromText . Text.pack
-- | Converts a Text to a JID.
jidFromText :: Text -> Maybe Jid
jidFromText t = do

6
tests/Tests.hs

@ -28,13 +28,13 @@ import System.Environment @@ -28,13 +28,13 @@ import System.Environment
import System.Log.Logger
testUser1 :: Jid
testUser1 = "echo1@species64739.dyndns.org/bot"
testUser1 = parseJid "echo1@species64739.dyndns.org/bot"
testUser2 :: Jid
testUser2 = "echo2@species64739.dyndns.org/bot"
testUser2 = parseJid "echo2@species64739.dyndns.org/bot"
supervisor :: Jid
supervisor = "uart14@species64739.dyndns.org"
supervisor = parseJid "uart14@species64739.dyndns.org"
config = def{sessionStreamConfiguration
= def{connectionDetails = UseHost "localhost" (PortNumber 5222)}}

Loading…
Cancel
Save