From c0a8bb502d3d97155f78d711cb1f185a3d9141e9 Mon Sep 17 00:00:00 2001
From: Philipp Balzarek
Date: Wed, 16 Sep 2015 17:19:30 +0200
Subject: [PATCH] pickle pre-approval stream feature
---
source/Network/Xmpp/Marshal.hs | 11 ++++++++---
source/Network/Xmpp/Types.hs | 1 +
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/source/Network/Xmpp/Marshal.hs b/source/Network/Xmpp/Marshal.hs
index 69d778d..6f96b38 100644
--- a/source/Network/Xmpp/Marshal.hs
+++ b/source/Network/Xmpp/Marshal.hs
@@ -350,18 +350,21 @@ xpStream = xpElemAttrs
-- Pickler/Unpickler for the stream features - TLS, SASL, and the rest.
xpStreamFeatures :: PU [Node] StreamFeatures
xpStreamFeatures = ("xpStreamFeatures","") > xpWrap
- (\(tls, sasl, ver, rest) -> StreamFeatures tls (mbl sasl) ver rest)
- (\(StreamFeatures tls sasl ver rest) -> (tls, lmb sasl, ver, rest))
+ (\(tls, sasl, ver, preAppr, rest)
+ -> StreamFeatures tls (mbl sasl) ver preAppr rest)
+ (\(StreamFeatures tls sasl ver preAppr rest)
+ -> (tls, lmb sasl, ver, preAppr, rest))
(xpElemNodes
(Name
"features"
(Just "http://etherx.jabber.org/streams")
(Just "stream")
)
- (xp4Tuple
+ (xp5Tuple
(xpOption pickleTlsFeature)
(xpOption pickleSaslFeature)
(xpOption pickleRosterVer)
+ picklePreApproval
(xpAll xpElemVerbatim)
)
)
@@ -377,6 +380,8 @@ xpStreamFeatures = ("xpStreamFeatures","") > xpWrap
"{urn:ietf:params:xml:ns:xmpp-sasl}mechanism" (xpContent xpId))
pickleRosterVer = xpElemNodes "{urn:xmpp:features:rosterver}ver" $
xpElemExists "{urn:xmpp:features:rosterver}optional"
+ picklePreApproval = xpElemExists "{urn:xmpp:features:pre-approval}sub"
+
xpJid :: PU Text Jid
xpJid = ("xpJid", "") >
diff --git a/source/Network/Xmpp/Types.hs b/source/Network/Xmpp/Types.hs
index c3c72a1..0a61cf7 100644
--- a/source/Network/Xmpp/Types.hs
+++ b/source/Network/Xmpp/Types.hs
@@ -728,6 +728,7 @@ data StreamFeatures = StreamFeatures
-- when the server sends the
-- non-standard "optional" element
-- (observed with prosody).
+ , streamSubPreApproval :: !Bool -- ^ Does the server support pre-approval
, streamOtherFeatures :: ![Element] -- TODO: All feature elements instead?
} deriving (Eq, Show)