packages feed

warp 1.3.4.1 → 1.3.4.2

raw patch · 6 files changed

+22/−25 lines, 6 files

Files

Network/Wai/Handler/Warp/FdCache.hs view
@@ -114,7 +114,7 @@     getFd' Nothing = do         ent@(FdEntry _ fd mst) <- newFdEntry path         update mfc (insert key ent)-        return $ (fd, refresh mst)+        return (fd, refresh mst)     getFd' (Just (FdEntry _ fd mst)) = do         refresh mst-        return $ (fd, refresh mst)+        return (fd, refresh mst)
Network/Wai/Handler/Warp/Response.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE BangPatterns #-} {-# LANGUAGE CPP #-}  module Network.Wai.Handler.Warp.Response (@@ -51,18 +50,18 @@      sendResponse' (Right (lengthyHeaders, cl))       | hasBody s req = liftIO $ do+          lheader <- composeHeader version s lengthyHeaders           connSendFile conn path beg end (T.tickle th) [lheader] cleaner           T.tickle th           return isPersist       | otherwise = liftIO $ do-          connSendAll conn $ composeHeader version s hs+          composeHeader version s hs >>= connSendAll conn           T.tickle th           return isPersist -- FIXME isKeepAlive?       where         (beg,end) = case mpart of             Nothing  -> (0,cl)             Just prt -> (filePartOffset prt, filePartByteCount prt)-        lheader = composeHeader version s lengthyHeaders         version = httpVersion req         (isPersist,_) = infoFromRequest req @@ -75,21 +74,21 @@  sendResponse cleaner req conn (ResponseBuilder s hs b)   | hasBody s req = liftIO $ do+      header <- composeHeaderBuilder version s hs needsChunked+      let body+            | needsChunked = header `mappend` chunkedTransferEncoding b+                                    `mappend` chunkedTransferTerminator+            | otherwise    = header `mappend` b       flip toByteStringIO body $ \bs -> do           connSendAll conn bs           T.tickle th       return isKeepAlive   | otherwise = liftIO $ do-      connSendAll conn $ composeHeader version s hs+      composeHeader version s hs >>= connSendAll conn       T.tickle th       return isPersist   where     th = threadHandle cleaner-    header = composeHeaderBuilder version s hs needsChunked-    body-      | needsChunked = header `mappend` chunkedTransferEncoding b-                              `mappend` chunkedTransferTerminator-      | otherwise    = header `mappend` b     version = httpVersion req     reqinfo@(isPersist,_) = infoFromRequest req     (isKeepAlive, needsChunked) = infoFromResponse hs reqinfo@@ -98,16 +97,16 @@  sendResponse cleaner req conn (ResponseSource s hs bodyFlush)   | hasBody s req = do+      header <- liftIO $ composeHeaderBuilder version s hs needsChunked       let src = CL.sourceList [header] `mappend` cbody       src $$ builderToByteString =$ connSink conn th       return isKeepAlive   | otherwise = liftIO $ do-      connSendAll conn $ composeHeader version s hs+      composeHeader version s hs >>= connSendAll conn       T.tickle th       return isPersist   where     th = threadHandle cleaner-    header = composeHeaderBuilder version s hs needsChunked     body = mapOutput (\x -> case x of                     Flush -> flush                     Chunk builder -> builder) bodyFlush@@ -205,11 +204,11 @@  ---------------------------------------------------------------- -composeHeader :: H.HttpVersion -> H.Status -> H.ResponseHeaders -> ByteString+composeHeader :: H.HttpVersion -> H.Status -> H.ResponseHeaders -> IO ByteString composeHeader version s hs = RH.composeHeader version s (addServerHeader hs) -composeHeaderBuilder :: H.HttpVersion -> H.Status -> H.ResponseHeaders -> Bool -> Builder+composeHeaderBuilder :: H.HttpVersion -> H.Status -> H.ResponseHeaders -> Bool -> IO Builder composeHeaderBuilder ver s hs True =-    fromByteString $ composeHeader ver s (addEncodingHeader hs)+    fromByteString <$> composeHeader ver s (addEncodingHeader hs) composeHeaderBuilder ver s hs False =-    fromByteString $ composeHeader ver s hs+    fromByteString <$> composeHeader ver s hs
Network/Wai/Handler/Warp/ResponseHeader.hs view
@@ -6,7 +6,7 @@ import Control.Monad import Data.ByteString (ByteString) import qualified Data.ByteString as S-import Data.ByteString.Internal (ByteString(..), unsafeCreate, memcpy)+import Data.ByteString.Internal (ByteString(..), create, memcpy) import qualified Data.CaseInsensitive as CI import Data.List (foldl') import Data.Word (Word8)@@ -17,8 +17,8 @@  ---------------------------------------------------------------- -composeHeader :: H.HttpVersion -> H.Status -> H.ResponseHeaders -> ByteString-composeHeader !httpversion !status !responseHeaders = unsafeCreate len $ \ptr -> do+composeHeader :: H.HttpVersion -> H.Status -> H.ResponseHeaders -> IO ByteString+composeHeader !httpversion !status !responseHeaders = create len $ \ptr -> do     ptr1 <- copyStatus ptr httpversion status     ptr2 <- copyHeaders ptr1 responseHeaders     void $ copyCRLF ptr2
Network/Wai/Handler/Warp/Run.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE CPP #-}  module Network.Wai.Handler.Warp.Run where @@ -154,7 +153,7 @@                     restore $ serveConnection set cleaner port app conn addr                     cleanup                 cleanup = connClose conn >> T.cancel th >> onClose-            handle onE $ (serve `onException` cleanup)+            handle onE (serve `onException` cleanup)   where     -- FIXME: only IOEception is caught. What about other exceptions?     getConnLoop = getConn `catch` \(e :: IOException) -> do
Network/Wai/Handler/Warp/Timeout.hs view
@@ -14,8 +14,7 @@  import Control.Concurrent (forkIO, threadDelay, myThreadId, killThread) import qualified Control.Exception as E-import Control.Monad (forever)-import Control.Monad (void)+import Control.Monad (forever, void) import qualified Data.IORef as I import System.IO.Unsafe (unsafePerformIO) 
warp.cabal view
@@ -1,5 +1,5 @@ Name:                warp-Version:             1.3.4.1+Version:             1.3.4.2 Synopsis:            A fast, light-weight web server for WAI applications. License:             MIT License-file:        LICENSE