package main import ( "log" "log/slog" "net/http" "github.com/caddyserver/certmagic" "github.com/okdaichi/gomoqt/moqt" "github.com/okdaichi/gomoqt/quic" ) func main() { certmagic.DefaultACME.Email = "your-email@example.com" certmagic.DefaultACME.Agreed = true tlsConfig, err := certmagic.TLS([]string{"qgo-server.quizer.space"}) if err != nil { log.Fatal(err) } tlsConfig.NextProtos = append([]string{"h3"}, tlsConfig.NextProtos...) server := moqt.Server{ Addr: ":443", TLSConfig: tlsConfig, QUICConfig: &quic.Config{ Allow0RTT: true, EnableDatagrams: true, }, } path := "/relay" http.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) { slog.Info("Incoming WebTransport request") err := server.HandleWebTransport(w, r) if err != nil { slog.Error("WebTransport error", "error", err) } }) moqt.HandleFunc(path, func(w moqt.SetupResponseWriter, r *moqt.SetupRequest) { slog.Info("MoQ setup request received") sess, err := moqt.Accept(w, r, nil) if err != nil { slog.Error("Failed to accept session", "error", err) return } slog.Info("MoQ session established", "remote", sess.RemoteAddr()) go handleSession(sess) }) slog.Info("Server starting on https://localhost:8080") if err := server.ListenAndServe(); err != nil { slog.Error("Server failed", "error", err) } } func handleSession(sess *moqt.Session) { defer sess.Context().Done() for { select {} } }