package server import ( "log/slog" "net/http" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" ) // ListenAndServeH2C starts an HTTP server with HTTP/1.1 and unencrypted HTTP/2 support (h2c), // wrapped with OpenTelemetry HTTP handler for tracing and metrics. func ListenAndServeH2C(addr string, handler http.Handler, telemetryName string) error { instrumentedHandler := otelhttp.NewHandler(handler, telemetryName) p := new(http.Protocols) p.SetHTTP1(true) // Use h2c so we can serve HTTP/2 without TLS. p.SetUnencryptedHTTP2(true) s := http.Server{ Addr: addr, Handler: instrumentedHandler, Protocols: p, } slog.Info("Starting server on " + addr) return s.ListenAndServe() }