packages feed

second-transfer-0.3.0.2: tests/tests-hs-src/compiling_ok.hs

{-# LANGUAGE OverloadedStrings #-}
import SecondTransfer(
	CoherentWorker
	, Footers
	, DataAndConclusion
	, tlsServeWithALPNAndFinishOnRequest
	, http2Attendant
	, FinishRequest(..)
	)
import SecondTransfer.Http2(
	  makeSessionsContext
	, defaultSessionsConfig
	)

import Data.Conduit
import Control.Concurrent         (threadDelay, forkIO)
import Control.Concurrent.MVar    

saysHello :: DataAndConclusion
saysHello = do 
	yield "Hello world!"
	-- No footers
	return []


helloWorldWorker :: CoherentWorker
helloWorldWorker request = return (
	[
		(":status", "200")
	],
	[], -- No pushed streams
	saysHello
	)


-- For this program to work, it should be run from the top of 
-- the developement directory.
main = do 
	sessions_context <- makeSessionsContext defaultSessionsConfig
	finish <- newEmptyMVar
	forkIO $ do 
		threadDelay 1000000
		putMVar finish FinishRequest 
	let 
		http2_attendant = http2Attendant sessions_context helloWorldWorker
	tlsServeWithALPNAndFinishOnRequest
		"tests/support/servercert.pem"   -- Server certificate
		"tests/support/privkey.pem"      -- Certificate private key
		"127.0.0.1"                      -- On which interface to bind
		[
			("h2-14", http2_attendant),  -- Protocols present in the ALPN negotiation
			("h2",    http2_attendant)   -- they may be slightly different, but for this 
			                             -- test it doesn't matter.
		]
		8000
		finish