module Network.IHttp.Simple
(
HttpConfig(..),
defHttpConfig,
getRequest,
getResponse,
httpRequest
)
where
import Control.ContStuff
import Data.ByteString (ByteString)
import Data.Enumerator as E
import Data.Enumerator.NetLines
import Network.IHttp.Request
import Network.IHttp.Response
import Network.IHttp.Types
import System.IO
data HttpConfig =
HttpConfig {
httpMaxLine :: Int,
httpMaxHeaderContent :: Int,
httpMaxHeaders :: Int,
httpTimeout :: Int
}
defHttpConfig :: HttpConfig
defHttpConfig =
HttpConfig { httpMaxLine = 1024,
httpMaxHeaderContent = 8192,
httpMaxHeaders = 128,
httpTimeout = 30000 }
getRequest :: Monad m => HttpConfig -> Iteratee ByteString m Request
getRequest cfg =
joinI $ netLinesEmpty (httpMaxLine cfg) $$
request (httpMaxHeaderContent cfg) (httpMaxHeaders cfg)
getResponse :: Monad m => HttpConfig -> Iteratee ByteString m Response
getResponse cfg =
joinI $ netLinesEmpty (httpMaxLine cfg) $$
response (httpMaxHeaderContent cfg) (httpMaxHeaders cfg)
httpRequest ::
MonadIO m =>
HttpConfig -> Handle -> Request -> Iteratee ByteString m Response
httpRequest cfg h req = do
tryIO . run_ $ enumRequest req $$ iterHandleTimeout (httpTimeout cfg) h
getResponse cfg