# This config tries to involve the various possible combinations of connection
# handshakes, on the accept side and on the connect side. It also produces logs
# indicating the handshake time.
#
# May be tested with tcploop as the server, both for TCP and HTTP mode :
#    - accept new connection
#    - pause 100ms
#    - send what looks like an HTTP response
#    - wait 500ms and close
#
# Starting log server (mainly to check timers) :
#    $ socat udp-recvfrom:5514,fork -
#
# Starting server :
#    $ tcploop 8000 L N A W P100 S:"HTTP/1.0 200 OK\r\nConnection: close\r\n\r\n" P500
#
# Testing all combinations with server-speaks-first (tcp) :
#    $ nc 0 8007
#
# Testing all combinations with client-speaks-first (tcp) :
#    $ (printf "GET / HTTP/1.0\r\n\r\n";sleep 1) | nc 0 8007
#
# Testing all combinations with client-speaks-first after pause (tcp) :
#    $ (usleep 0.05 ; printf "GET / HTTP/1.0\r\n\r\n";sleep 1) | nc 0 8007
#
# Testing all combinations with client-speaks-first (http) :
#    $ (printf "GET / HTTP/1.0\r\n\r\n";sleep 1) | nc 0 8017
#
# Testing all combinations with client-speaks-first after pause (http) :
#    $ (usleep 0.05 ; printf "GET / HTTP/1.0\r\n\r\n";sleep 1) | nc 0 8017
#
# Same tests must be redone after surrounding connect() in tcp_connect_server()
# with fcntl(fd, F_SETFL, 0) and fcntl(fd, F_SETFL, O_NONBLOCK) for sycnhronous
# connect().

global
	stats socket /tmp/sock1 level admin
	stats timeout 1h
	ssl-server-verify none
	tune.ssl.default-dh-param 2048
	log 127.0.0.1:5514 local0 debug debug

#################################################################
## TCP instances connect to port 8000 and listen to 8001..8007
#################################################################
defaults TCP
	timeout client 5s
	timeout server 4s
	timeout connect 3s
	log global
	log-format "%ci:%cp %ft %b/%s h=%Th/w=%Tw/c=%Tc/t=%Tt %ST %B %tsc %ac/%fc/%bc/%sc/%rc %sq/%bq %hr %hs"

# connects to port local 8000
listen tcp-none-in-none-out
	bind :8001
	server s 127.0.0.1:8000

# takes ssl+pp on input, nothing on output
listen tcp-sslpp-in-none-out
	bind :8002 ssl crt rsa2048.pem accept-proxy
	server s 127.0.0.1:8001

# takes nothing on input, sends ssl+pp
listen tcp-none-in-sslpp-out
	bind :8003
	server s 127.0.0.1:8002 ssl send-proxy-v2

# takes pp on input, nothing on output
listen tcp-pp-in-none-out
	bind :8004 accept-proxy
	server s 127.0.0.1:8003

# takes nothing on input, sends pp
listen tcp-none-in-pp-out
	bind :8005
	server s 127.0.0.1:8004 send-proxy-v2

# takes ssl on input, sends nothing
listen tcp-ssl-in-none-out
	bind :8006 ssl crt rsa2048.pem
	server s 127.0.0.1:8005

# takes nothing on input, sends ssl
listen tcp-none-in-ssl-out
	bind :8007
	server s 127.0.0.1:8006 ssl


#################################################################
## HTTP instances also connect to port 8000 but they listen to
## 8011..8017
#################################################################

defaults HTTP
	timeout client 5s
	timeout server 4s
	timeout connect 3s
	mode http
	log global
	log-format "%ci:%cp [%tr] %ft %b/%s h=%Th/i=%Ti/R=%TR/w=%Tw/c=%Tc/r=%Tr/a=%Ta/t=%Tt %ST %B %CC %CS %tsc %ac/%fc/%bc/%sc/%rc %sq/%bq %hr %hs %{+Q}r"

# connects to port local 8000
listen http-none-in-none-out
	bind :8011
	server s 127.0.0.1:8000

# takes ssl+pp on input, nothing on output
listen http-sslpp-in-none-out
	bind :8012 ssl crt rsa2048.pem accept-proxy
	server s 127.0.0.1:8011

# takes nothing on input, sends ssl+pp
listen http-none-in-sslpp-out
	bind :8013
	server s 127.0.0.1:8012 ssl send-proxy-v2

# takes pp on input, nothing on output
listen http-pp-in-none-out
	bind :8014 accept-proxy
	server s 127.0.0.1:8013

# takes nothing on input, sends pp
listen http-none-in-pp-out
	bind :8015
	server s 127.0.0.1:8014 send-proxy-v2

# takes ssl on input, sends nothing
listen http-ssl-in-none-out
	bind :8016 ssl crt rsa2048.pem
	server s 127.0.0.1:8015

# takes nothing on input, sends ssl
listen http-none-in-ssl-out
	bind :8017
	server s 127.0.0.1:8016 ssl
