# Semana 13: TLS, QUIC y CDNs. Se usa dentro del contenedor del curso.
#
#   make              compila sni_peek y crea los certificados de la clase
#   make test         corre las pruebas (test_*.py): levanta las dos topologías, una tras otra, y
#                     siempre destruye lo que levantó. Las pruebas del laboratorio usan lab/ y se
#                     saltan hasta que lo completen; las que necesitan Internet se saltan sin red
#   make up           levanta la red c - mb - s (net/net.clab.yml)
#   make up-cdn       levanta la CDN mínima (cdn/cdn.clab.yml)
#   make down         destruye las dos topologías y sus redes de Docker
#   make clean        lo anterior, y borra binarios, certificados, segmentos y capturas

CC = gcc
CFLAGS = -Wall -Wextra -std=c17 -D_DEFAULT_SOURCE -O2 -g
LDFLAGS = -static

.PHONY: all test up up-cdn down clean

all: bin/sni_peek build/pki/selfsigned.crt
	@mkdir -p captures

bin/%: %.c
	@mkdir -p bin
	$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)

build/pki/selfsigned.crt: pki.sh
	sh pki.sh build/pki

test: all
	@status=0; PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -p 'test_*.py' -v || status=$$?; \
	  $(MAKE) --no-print-directory down; exit $$status

up: all
	cd net && containerlab deploy -t net.clab.yml --reconfigure

up-cdn:
	cd cdn && containerlab deploy -t cdn.clab.yml --reconfigure

down:
	@cd net && containerlab destroy -t net.clab.yml --cleanup >/dev/null 2>&1 || true
	@cd cdn && containerlab destroy -t cdn.clab.yml --cleanup >/dev/null 2>&1 || true
	@docker network rm redes-w13-net >/dev/null 2>&1 || true
	@docker network rm redes-w13-cdn >/dev/null 2>&1 || true

clean: down
	rm -rf bin build captures __pycache__ net/clab-w13-net cdn/clab-w13-cdn
