packages feed

snap-server-0.2.11: test/testserver/Main.hs

{-# LANGUAGE OverloadedStrings #-}
module Main where

import           Control.Concurrent

import           Snap.Iteratee
import           Snap.Types
import           Snap.Http.Server
import           Snap.Util.FileServe

{-

/pong
/fileserve
/echo
pipelined POST requests
slowloris attack / timeout test

-}

pongHandler :: Snap ()
pongHandler = modifyResponse $ setResponseBody (enumBS "PONG") .
                              setContentType "text/plain" .
                              setContentLength 4

echoHandler :: Snap ()
echoHandler = do
    req <- getRequest
    writeBS $ rqPathInfo req

responseHandler = do
    code <- getParam "code"
    case code of
        Nothing   -> undefined
        Just code -> f code
  where
    f "300" = undefined
    f "304" = undefined

handlers :: Snap ()
handlers =
    route [ ("pong", pongHandler)
          , ("echo", echoHandler)
          , ("fileserve", fileServe "static")
          , ("respcode/:code", responseHandler)
          ]

main :: IO ()
main = do
    m <- newEmptyMVar

    forkIO $ go m
    takeMVar m

    return ()

  where
    go m = do
        httpServe "*" 3000 "localhost" Nothing Nothing handlers 
        putMVar m ()