Pontarius XMPP 0.1 will implement the client capabilities of RFC 6120: XMPP:
Core and the depending specifications (such as RFC 6122: XMPP: Address
Format), as well as be easily extendable for different XMPP extensions
(such as XEPs and RFCs).
Core and the depending specifications, such as RFC 6122: XMPP: Address
Format, RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2,
RFC 4422: Simple Authentication and Security Layer (SASL), RFC 5280: Internet
X.509 Public Key Infrastructure Certificate and Certificate Revocation List
(CRL) Profile, and Extensible Markup Language (XML) 1.0, among others.
\end_layout
\begin_layout Standard
@ -148,13 +150,14 @@ personal cloud
@@ -148,13 +150,14 @@ personal cloud
\end_inset
solutions on top of Pontarius XMPP, we want Pontarius XMPP to be a general-purp
ose---and de facto---XMPP library for Haskell.
It should be correct, flexible and efficient to work in.
ose---and the de facto---XMPP library for Haskell.
It should be correct and efficient to work in.
\end_layout
\begin_layout Standard
We will not repeat the specifics of the requirements from the RFC 6120:
XMPP Core specification or other specifications in this document.
XMPP Core specification and its depending specifications in this document
unless we see any special reason to.
\end_layout
\begin_layout Subsection
@ -191,6 +194,10 @@ Pontarius A free and open source software project that aims to produce XMPP-base
@@ -191,6 +194,10 @@ Pontarius A free and open source software project that aims to produce XMPP-base
d, uncentralized, and privacy-aware software solutions
Pontarius XMPP 0.1 will be used by XMPP clients to manage presence and messaging
in a uncentralized near-real-time environments.
PX01 will be used by XMPP clients to manage presence and messaging in a
uncentralized near-real-time environments.
For this first milestone of the library, we have chosen to implement only
the XMPP: Core specification, and only the client capabilities of it.
The reason for this is that we want to get the library out quickly, and
@ -268,32 +269,23 @@ Pontarius XMPP 0.1 will be used by XMPP clients to manage presence and messaging
@@ -268,32 +269,23 @@ Pontarius XMPP 0.1 will be used by XMPP clients to manage presence and messaging
\end_layout
\begin_layout Standard
Pontarius XMPP 0.1 is designed to be used with Haskell.
PX01 is designed to be used with Haskell.
\end_layout
\begin_layout Standard
Pontarius XMPP 0.1 must work on GNU/Linux, the main Free Software operating
system.
PX01 must work on GNU/Linux, the main Free Software operating system.
However, due to the platform support and high-level nature of Haskell,
running it on other common operating systems is likely to work as well.
\end_layout
\begin_layout Standard
Pontarius XMPP 0.1 must work with (at least) the (estimated) most popular
free and open source software XMPP server.
\end_layout
\begin_layout Standard
The only software using Pontarius XMPP (that we know of) is the (currently
paused) Pontarius XPMN library, which currently in (very early) development.
However, as mentioned above, the goal for Pontarius XMPP is to serve as
a general-purpose library, so we are trying not to be customizing the library
to be somehow specially tailored for Pontarius XPMN.
PX01 must work with (at least) the (estimated) most popular free and open
source software XMPP server that works with the specifics of our implementation
(such as SCRAM).
\end_layout
\begin_layout Standard
Pontarius XMPP 0.1 depends on the below (free and open source software) Haskell
packages.
PX01 depends on the below (free and open source software) Haskell packages.
I have omitted specification number [...].
I have also omitted the source, as they are all available on Hackage.
Pontarius XMPP 0.1 implements XMPP: Core and allow clients to do roughly
the following: Open a TCP connection to a server, exchange XML information
with the server to configure the (XML) stream, handle stream errors and
encoding issues, have the connection secured by TLS, authenticate using
a SASL mechanism and binding a resource to the stream, as well as sending
and receiving so-called XMPP stanzas, certain
PX01 implements XMPP: Core and allow clients to do roughly the following:
Open a TCP connection to a server, exchange XML information with the server
to configure the (XML) stream, handle stream errors and encoding issues,
have the connection secured by TLS, authenticate using a SASL mechanism
and binding a resource to the stream, as well as sending and receiving
so-called XMPP stanzas, certain
\begin_inset Quotes eld
\end_inset
@ -962,9 +953,9 @@ User characteristics
@@ -962,9 +953,9 @@ User characteristics
\end_layout
\begin_layout Standard
We expect developers using Pontarius XMPP 0.1 to understand the XMPP: Core
specification (and its depending specifications), Haskell, and monads,
including the StateT monad transformer.
We expect developers using PX01 to understand the XMPP: Core specification
(and its depending specifications), Haskell, and monads, including the
StateT monad transformer.
\end_layout
\begin_layout Subsection
@ -984,7 +975,7 @@ Assumptions and dependencies
@@ -984,7 +975,7 @@ Assumptions and dependencies
\begin_layout Standard
We assume that the Glasgow Haskell Compiler (GHC) is available on the system
where Pontarius XMPP 0.1 applications are built.
where PX01 applications are built.
\end_layout
\begin_layout Section
@ -1096,21 +1087,25 @@ REQ-10 The API shall allow for authenticating an opened (possibly TLS secured)
@@ -1096,21 +1087,25 @@ REQ-10 The API shall allow for authenticating an opened (possibly TLS secured)
stream, returning either a success value of the reason for failing.
If the credentials were wrong, the system shall allow the client to make
as many retries as allowed by the server, without restarting the stream.
Resource binding should be taken cared of in this step, and the client
should be able to try to set a resource as well as have one generated by
the server.
\end_layout
\begin_layout Description
REQ-11 The API shall allow for perform resource binding on an authenticated
stream, either by trying to set a specific resource, or have the server
generate one.
\end_layout
\begin_layout Standard
Rationale: Even though most clients wants to do REQ-9, REQ-10, and REQ-11
in one action, some uses of XMPP (such as In-Band Registration) demands
more flexibility.
Rationale: Even though most clients wants to do REQ-8, REQ-9, REQ-10, and
REQ-11 in one action, some uses of XMPP (such as In-Band Registration)
demands more flexibility.
\end_layout
\begin_layout Description
REQ-11 The API shall provide a convenience function for opening a stream,
securing the stream with TLS, and authenticating an XMPP account in one
function call, returning either a success value or the reason for failing.
REQ-12 The API shall provide a convenience function for opening a stream,
securing the stream with TLS, authenticating an XMPP account, and perform
resource binding in one function call, returning either a success value
or the reason for failing.
\end_layout
\begin_layout Standard
@ -1119,16 +1114,16 @@ Rationale: This makes the library easier and more efficient to use for most
@@ -1119,16 +1114,16 @@ Rationale: This makes the library easier and more efficient to use for most
\end_layout
\begin_layout Description
REQ-12 The API shall provide the possibility for clients to close the stream.
REQ-13 The API shall provide the possibility for clients to close the stream.
\end_layout
\begin_layout Description
REQ-13 The API shall provide the possibility for clients to send stream
REQ-14 The API shall provide the possibility for clients to send stream
errors.
\end_layout
\begin_layout Description
REQ-14 The API shall allow a convenient way for
REQ-15 The API shall allow a convenient way for
\begin_inset Quotes eld
\end_inset
@ -1140,22 +1135,22 @@ standard disconnect
@@ -1140,22 +1135,22 @@ standard disconnect
\end_layout
\begin_layout Description
REQ-15 The API shall provide a facility for convenient stanza (message,
REQ-16 The API shall provide a facility for convenient stanza (message,
presence, info/query) creation, eliminating the risk of illegal stanzas
where feasible.
\end_layout
\begin_layout Description
REQ-16 The API shall allow for convenient construction of JabberIDs.
REQ-17 The API shall allow for convenient construction of JabberIDs.
\end_layout
\begin_layout Description
REQ-17 The API shall provide utility functions to check whether or not a
REQ-18 The API shall provide utility functions to check whether or not a
JID is full or bare.
\end_layout
\begin_layout Description
REQ-18 The API shall provide conversion functions to convert from a string
REQ-19 The API shall provide conversion functions to convert from a string
REQ-19 The API shall provide an optional way for clients to receive time-out
REQ-20 The API shall provide an optional way for clients to receive time-out
events on requests made, such as an IQ or connection attempt.
The time-out interval should be customizable.
\end_layout
\begin_layout Description
REQ-20 The library should generate an internal infinite list of unique stanza
REQ-21 The library should generate an internal infinite list of unique stanza
IDs; the API should provide a way for application developers to acquire
any amount of such IDs
\end_layout
\begin_layout Description
REQ-22 The system must offer timeout callbacks to be called if an asynchronous
result is not guaranteed to be produced in a timely fashion.
\end_layout
\begin_layout Description
REQ-23 The system must a convenient API to deal with stanza and stream errors.
\end_layout
\begin_layout Subsection
Performance requirements
\end_layout
@ -1188,18 +1192,18 @@ There is only one XMPP client per instance of the system.
@@ -1188,18 +1192,18 @@ There is only one XMPP client per instance of the system.
\end_layout
\begin_layout Description
REQ-21 Regular desktop computers should be able to run hundreds of Pontarius
REQ-24 Regular desktop computers should be able to run hundreds of Pontarius
XMPP 0.1 clients.
\end_layout
\begin_layout Description
REQ-22 Pontarius XMPP 0.1 should support virtually as many stanzas per second
REQ-25 Pontarius XMPP 0.1 should support virtually as many stanzas per second
as (non-throttled) XMPP servers are able to route.
This goes for both lightweight, heavy and mixed stanzas.
\end_layout
\begin_layout Description
REQ-23 Processing (parsing, generating, and firing the event) a received
REQ-26 Processing (parsing, generating, and firing the event) a received