From 1be78a818542fcd40db1cc8575ef820f68713236 Mon Sep 17 00:00:00 2001 From: ZGaetano Date: Sat, 9 May 2026 16:35:48 -0400 Subject: [PATCH] feat(whip): wire WHIPHandler into HTTP server Config and v3 routes --- http/server.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/http/server.go b/http/server.go index 330a5dd..64dba31 100644 --- a/http/server.go +++ b/http/server.go @@ -87,7 +87,8 @@ type Config struct { Cors CorsConfig RTMP rtmp.Server SRT srt.Server - WebRTC *appwebrtc.Handler + WebRTC *appwebrtc.Handler // WHEP egress handler + WHIP *appwebrtc.WHIPHandler // WHIP ingest handler JWT jwt.JWT Config cfgstore.Store Cache cache.Cacher @@ -126,7 +127,8 @@ type server struct { session *api.SessionHandler widget *api.WidgetHandler resources *api.MetricsHandler - webrtc *appwebrtc.Handler + webrtc *appwebrtc.Handler // WHEP egress + whip *appwebrtc.WHIPHandler // WHIP ingest } middleware struct { @@ -245,6 +247,10 @@ func NewServer(config Config) (Server, error) { s.v3handler.webrtc = config.WebRTC } + if config.WHIP != nil { + s.v3handler.whip = config.WHIP + } + if config.Prometheus != nil { s.handler.prometheus = handler.NewPrometheus( config.Prometheus.HTTPHandler(), @@ -552,12 +558,18 @@ func (s *server) setRoutesV3(v3 *echo.Group) { s.router.GET("/api/v3/widget/process/:id", s.v3handler.widget.Get) } - // v3 WebRTC (WHEP egress). Mounted on the v3 group so JWT auth + // v3 WebRTC WHEP egress. Mounted on the v3 group so JWT auth // covers it in M2; public embed tokens will ship in M3. if s.v3handler.webrtc != nil { s.v3handler.webrtc.Register(v3) } + // v3 WebRTC WHIP ingest. Mounted alongside WHEP on the same v3 + // group — both share JWT auth and live under /api/v3/whip/*. + if s.v3handler.whip != nil { + s.v3handler.whip.Register(v3) + } + // v3 Restreamer if s.v3handler.restream != nil { v3.GET("/skills", s.v3handler.restream.Skills)