{-# LANGUAGE CPP #-}
module Network.Wai.Handler.Warp.HTTP2.File where
import Network.HTTP2.Server
import Network.Wai.Handler.Warp.Types
#ifdef WINDOWS
pReadMaker :: InternalInfo -> PositionReadMaker
pReadMaker _ = defaultPositionReadMaker
#else
import Network.Wai.Handler.Warp.FdCache
import Network.Wai.Handler.Warp.SendFile (positionRead)
pReadMaker :: InternalInfo -> PositionReadMaker
pReadMaker ii path = do
(mfd, refresh) <- getFd ii path
case mfd of
Just fd -> return (pread fd, Refresher refresh)
Nothing -> do
fd <- openFile path
return (pread fd, Closer $ closeFile fd)
where
pread :: Fd -> PositionRead
pread fd off bytes buf = fromIntegral <$> positionRead fd buf bytes' off'
where
bytes' = fromIntegral bytes
off' = fromIntegral off
#endif