packages feed

wai-websockets 1.1.0 → 1.2.0

raw patch · 2 files changed

+51/−42 lines, 2 filesdep ~conduitdep ~transformersdep ~wai

Dependency ranges changed: conduit, transformers, wai, warp, websockets

Files

Network/Wai/Handler/WebSockets.hs view
@@ -7,50 +7,59 @@ import Control.Monad.IO.Class (liftIO) import Data.ByteString (ByteString) import Data.Char (toLower)-import Network.Wai (Request, requestHeaders, rawPathInfo, requestHeaders) import qualified Data.ByteString.Char8 as S import qualified Data.Conduit as C import qualified Data.Enumerator as E-import qualified Data.Enumerator.List as EL+import qualified Network.Wai as Wai+import qualified Network.Wai.Handler.Warp as Warp import qualified Network.WebSockets as WS-import Network.Wai.Handler.Warp (Connection (..))  -- | For use with 'settingsIntercept' from the Warp web server. intercept :: WS.Protocol p           => (WS.Request -> WS.WebSockets p ())-          -> Request-          -> Maybe (C.BufferedSource IO ByteString -> Connection -> C.ResourceT IO ())+          -> Wai.Request+          -> Maybe (C.Source (C.ResourceT IO) ByteString -> Warp.Connection -> C.ResourceT IO ()) intercept = interceptWith WS.defaultWebSocketsOptions  -- | Variation of 'intercept' which allows custom options. interceptWith :: WS.Protocol p               => WS.WebSocketsOptions               -> (WS.Request -> WS.WebSockets p ())-              -> Request-              -> Maybe (C.BufferedSource IO ByteString -> Connection -> C.ResourceT IO ())-interceptWith opts app req = case lookup "upgrade" $ requestHeaders req of+              -> Wai.Request+              -> Maybe (C.Source (C.ResourceT IO) ByteString -> Warp.Connection -> C.ResourceT IO ())+interceptWith opts app req = case lookup "upgrade" $ Wai.requestHeaders req of     Just s         | S.map toLower s == "websocket" -> Just $ runWebSockets opts req' app         | otherwise                      -> Nothing     _                                    -> Nothing   where-    req' = WS.RequestHttpPart (rawPathInfo req) (requestHeaders req)+    req' = WS.RequestHttpPart (Wai.rawPathInfo req) (Wai.requestHeaders req)+        (Wai.isSecure req)  -- | Internal function to run the WebSocket iteratee using the conduit library runWebSockets :: WS.Protocol p               => WS.WebSocketsOptions               -> WS.RequestHttpPart               -> (WS.Request -> WS.WebSockets p ())-              -> C.BufferedSource IO ByteString-              -> Connection+              -> C.Source (C.ResourceT IO) ByteString+              -> Warp.Connection               -> C.ResourceT IO () runWebSockets opts req app source conn = do     step <- liftIO $ E.runIteratee $ WS.runWebSocketsWith opts req app send     source C.$$ C.sinkState (E.returnI step) push close   where-    send  = EL.mapM_ (connSendAll conn)-    close = const $ return ()+    send  = iterConnection conn      push iter bs = do         step <- liftIO $ E.runIteratee $ E.enumList 1 [bs] E.$$ iter         return $ C.StateProcessing $ E.returnI step+    close iter   = do+        _ <- liftIO $ E.runIteratee $ E.enumEOF E.$$ iter+        return ()++iterConnection :: Warp.Connection -> E.Iteratee ByteString IO ()+iterConnection c = E.continue go+  where+    go (E.Chunks []) = E.continue go+    go (E.Chunks cs) = E.tryIO (Warp.connSendMany c cs) >> E.continue go+    go E.EOF         = E.continue go
wai-websockets.cabal view
@@ -1,5 +1,5 @@ Name:                wai-websockets-Version:             1.1.0+Version:             1.2.0 Synopsis:            Provide a bridge betweeen WAI and the websockets package. License:             BSD3 License-file:        LICENSE@@ -17,18 +17,18 @@ flag example  Library-  Build-Depends:     base                          >= 3        && < 5-                   , bytestring                >= 0.9.1.4  && < 0.10-                   , conduit                   >= 0.2-                   , wai                           >= 1.1      && < 1.2-                   , warp                          >= 1.1      && < 1.2-                   , enumerator                >= 0.4.8    && < 0.5-                   , network-enumerator            >= 0.1.2    && < 0.2-                   , blaze-builder                 >= 0.2.1.4  && < 0.4-                   , case-insensitive              >= 0.2-                   , network                   >= 2.2.1.5 && < 2.4-                   , transformers              >= 0.2     && < 0.3-                   , websockets                    >= 0.5.1    && < 0.6+  Build-Depends:     base               >= 3        && < 5+                   , bytestring         >= 0.9.1.4  && < 0.10+                   , conduit            >= 0.4      && < 0.5+                   , wai                >= 1.2      && < 1.3+                   , enumerator         >= 0.4.8    && < 0.5+                   , network-enumerator >= 0.1.2    && < 0.2+                   , blaze-builder      >= 0.2.1.4  && < 0.4+                   , case-insensitive   >= 0.2+                   , network            >= 2.2.1.5  && < 2.4+                   , transformers       >= 0.2      && < 0.4+                   , websockets         >= 0.6      && < 0.7+                   , warp               >= 1.2      && < 1.3   Exposed-modules:   Network.Wai.Handler.WebSockets   ghc-options:       -Wall @@ -37,22 +37,22 @@     buildable: True   else     buildable: False-  Build-Depends:     base >=3 && < 5,-                     conduit,-                     wai-websockets,-                     websockets,-                     network-enumerator,-                     warp,-                     wai,-                     wai-app-static,-                     bytestring,-                     case-insensitive,-                     blaze-builder,-                     enumerator,-                     transformers,-                     network,-                     text,-                     file-embed+  Build-Depends:     base               >= 3 && < 5+                   , conduit+                   , wai-websockets+                   , websockets+                   , network-enumerator+                   , warp+                   , wai+                   , wai-app-static+                   , bytestring+                   , case-insensitive+                   , blaze-builder+                   , enumerator+                   , transformers+                   , network+                   , text+                   , file-embed    ghc-options:       -Wall -threaded   main-is:           server.lhs