From 1f3a18f2eff2f22d7ff41c7252431c817e70b40d Mon Sep 17 00:00:00 2001
From: Philipp Balzarek
Date: Mon, 6 May 2013 14:49:42 +0200
Subject: [PATCH] change pullStanza to not block the stream add debugging
information for outgoing stanzas over TLS cleanup in Xmpp.Concurrent.Threads
---
source/Network/Xmpp/Concurrent/Threads.hs | 25 ++++++++++-------------
source/Network/Xmpp/Stream.hs | 2 +-
source/Network/Xmpp/Tls.hs | 4 +++-
3 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/source/Network/Xmpp/Concurrent/Threads.hs b/source/Network/Xmpp/Concurrent/Threads.hs
index 5c0b03b..7a73a09 100644
--- a/source/Network/Xmpp/Concurrent/Threads.hs
+++ b/source/Network/Xmpp/Concurrent/Threads.hs
@@ -78,20 +78,17 @@ startThreadsWith :: (Stanza -> IO ())
TMVar Stream,
ThreadId))
startThreadsWith stanzaHandler eh con = do
- rd <- withStream' (gets $ streamSend . streamHandle >>= \d -> return $ Right d) con
- case rd of
- Left e -> return $ Left e
- Right read' -> do
- writeLock <- newTMVarIO read'
- conS <- newTMVarIO con
- -- lw <- forkIO $ writeWorker outC writeLock
- cp <- forkIO $ connPersist writeLock
- rdw <- forkIO $ readWorker stanzaHandler (noCon eh) conS
- return $ Right ( killConnection writeLock [rdw, cp]
- , writeLock
- , conS
- , rdw
- )
+ read' <- withStream' (gets $ streamSend . streamHandle) con
+ writeLock <- newTMVarIO read'
+ conS <- newTMVarIO con
+ -- lw <- forkIO $ writeWorker outC writeLock
+ cp <- forkIO $ connPersist writeLock
+ rdw <- forkIO $ readWorker stanzaHandler (noCon eh) conS
+ return $ Right ( killConnection writeLock [rdw, cp]
+ , writeLock
+ , conS
+ , rdw
+ )
where
killConnection writeLock threads = liftIO $ do
_ <- atomically $ takeTMVar writeLock -- Should we put it back?
diff --git a/source/Network/Xmpp/Stream.hs b/source/Network/Xmpp/Stream.hs
index b760483..bbd5790 100644
--- a/source/Network/Xmpp/Stream.hs
+++ b/source/Network/Xmpp/Stream.hs
@@ -429,7 +429,7 @@ pullUnpickle p = do
-- | Pulls a stanza (or stream error) from the stream.
pullStanza :: Stream -> IO (Either XmppFailure Stanza)
-pullStanza = withStream $ do
+pullStanza = withStream' $ do
res <- pullUnpickle xpStreamStanza
case res of
Left e -> return $ Left e
diff --git a/source/Network/Xmpp/Tls.hs b/source/Network/Xmpp/Tls.hs
index f9f1745..75ea5dc 100644
--- a/source/Network/Xmpp/Tls.hs
+++ b/source/Network/Xmpp/Tls.hs
@@ -134,7 +134,9 @@ tlsinit params backend = do
readWithBuffer <- liftIO $ mkReadBuffer (recvData con)
return ( src
, snk
- , \s -> sendData con $ BL.fromChunks [s]
+ , \s -> do
+ liftIO $ debugM "Pontarius.Xmpp.TLS" ("out :" ++ BSC8.unpack s)
+ sendData con $ BL.fromChunks [s]
, liftIO . readWithBuffer
, con
)