-- |
-- Module:      $Header$
--
-- Maintainer:  info@jonkri.com
-- Stability:   unstable
-- Portability: portable
--
-- This module allows for low-level access to Pontarius XMPP. Generally, the
-- "Network.Xmpp" module should be used instead.
--
-- The 'Stream' object provides the most low-level access to the XMPP
-- stream: a simple and single-threaded interface which exposes the conduit
-- 'Event' source, as well as the input and output byte streams. Custom stateful
-- 'Stream' functions can be executed using 'withStream'.
--
-- The TLS, SASL, and 'Session' functionalities of Pontarius XMPP are built on
-- top of this API.

module Network.Xmpp.Internal
  ( -- * Stream
    Stream(..)
  , StreamConfiguration(..)
  , StreamState(..)
  , StreamHandle(..)
  , StreamFeatures(..)
  , openStream
  , withStream
    -- * TLS
  , tls
  , TlsBehaviour(..)
    -- * Auth
  , SaslHandler
  , auth
    -- * Stanzas
  , Stanza(..)
  , pushStanza
  , pullStanza
  , writeStanza
    -- ** IQ
  , pushIQ
  , iqError
  , iqResult
  , associatedErrorType
    -- * Plugins
  , Plugin
  , Plugin'(..)
  , Annotation(..)
  , connectTls
 )
       where

import Network.Xmpp.Concurrent.Basic
import Network.Xmpp.Concurrent.Types
import Network.Xmpp.Sasl
import Network.Xmpp.Sasl.Types
import Network.Xmpp.Stanza
import Network.Xmpp.Stream
import Network.Xmpp.Tls
import Network.Xmpp.Types