{-# LANGUAGE CPP #-} module Network.Wai.Handler.Warp.SendFile where import
Data.ByteString
(ByteString) import Network.Sendfile import
Network.Socket
(Socket) import qualified
Network.Wai.Handler.Warp.FdCache
as F import Network.Wai.Handler.Warp.Types
defaultSendFile
::
Socket
->
FilePath
->
Integer
->
Integer
->
IO
()
-> [
ByteString
] ->
IO
()
defaultSendFile
s
path
off
len
act
hdr
=
sendfileWithHeader
s
path
(
PartOfFile
off
len
)
act
hdr
#if SENDFILEFD
setSendFile
::
Connection
->
Maybe
F.MutableFdCache
->
Connection
setSendFile
conn
Nothing
=
conn
setSendFile
conn
(
Just
fdcs
) = case
connSendFileOverride
conn
of
NotOverride
->
conn
Override
s
->
conn { connSendFile = sendFile fdcs s }
sendFile
::
F.MutableFdCache
->
Socket
->
FilePath
->
Integer
->
Integer
->
IO
()
-> [
ByteString
] ->
IO
()
sendFile
fdcs
s
path
off
len
act
hdr
= do (
fd
,
fresher
) <-
F.getFd
fdcs
path
sendfileFdWithHeader
s
fd
(
PartOfFile
off
len
) (
act
>>
fresher
)
hdr
#else
setSendFile
::
Connection
->
Maybe
F.MutableFdCache
->
Connection
setSendFile
conn
_ =
conn
#endif