All checks were successful
Create and publish a Docker image 🚀 / build-and-push-image (push) Successful in 2m10s
71 lines
1.4 KiB
Go
71 lines
1.4 KiB
Go
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 = "serverussnap@outlook.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 {}
|
|
}
|
|
}
|