mirror of
https://github.com/DeBrosOfficial/orama.git
synced 2026-03-17 06:23:00 +00:00
- Add signaling package with message types and structures for SFU communication. - Implement client and server message serialization/deserialization tests. - Enhance systemd manager to handle SFU and TURN services, including start/stop logic. - Create TURN server configuration and main server logic with HMAC-SHA1 authentication. - Add tests for TURN server credential generation and validation. - Define systemd service files for SFU and TURN services.
52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
package webrtc
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/DeBrosOfficial/network/pkg/logging"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// RoomsHandler handles GET /v1/webrtc/rooms (list rooms)
|
|
// and GET /v1/webrtc/rooms?room_id=X (get specific room)
|
|
// Proxies to the local SFU's health endpoint for room data.
|
|
func (h *WebRTCHandlers) RoomsHandler(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method != http.MethodGet {
|
|
writeError(w, http.StatusMethodNotAllowed, "method not allowed")
|
|
return
|
|
}
|
|
|
|
ns := resolveNamespaceFromRequest(r)
|
|
if ns == "" {
|
|
writeError(w, http.StatusForbidden, "namespace not resolved")
|
|
return
|
|
}
|
|
|
|
if h.sfuPort <= 0 {
|
|
writeError(w, http.StatusServiceUnavailable, "SFU not configured")
|
|
return
|
|
}
|
|
|
|
// Proxy to SFU health endpoint which returns room count
|
|
targetURL := fmt.Sprintf("http://127.0.0.1:%d/health", h.sfuPort)
|
|
|
|
client := &http.Client{Timeout: 5 * time.Second}
|
|
resp, err := client.Get(targetURL)
|
|
if err != nil {
|
|
h.logger.ComponentWarn(logging.ComponentGeneral, "SFU health check failed",
|
|
zap.String("namespace", ns),
|
|
zap.Error(err),
|
|
)
|
|
writeError(w, http.StatusServiceUnavailable, "SFU unavailable")
|
|
return
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.WriteHeader(resp.StatusCode)
|
|
io.Copy(w, resp.Body)
|
|
}
|