mirror of
https://github.com/openlibrecommunity/olcrtc.git
synced 2026-06-07 04:49:43 +00:00
Break CLI backwards compatibility as planned for refactor/universal-carrier: - Drop -carrier flag; add -auth (auth provider name), -engine (engine name for -auth none), -url and -token (SFU endpoint + access token for direct/none auth mode). - session.Config.Carrier → Auth + Engine + URL + Token. - session.Gen() is now generic: auth.Get(cfg.Auth).(auth.RoomCreator) replaces the hard-coded switch on carrier names. - Register a "none" carrier in builtin (registerDirect) that bypasses auth and connects directly to any engine with caller-supplied URL+Token. - auth/telemost.Provider.Issue now accepts a raw room-ID hash in addition to a full https://telemost.yandex.ru/j/<id> URL. - Plumb Engine/URL/Token from session.Config through server.Run, client.Run/RunWithReady, bringUpLink, link.Config, transport.Config, and carrier.Config so the "none" carrier has access to them end-to-end. - Update all tests and mobile.go call sites. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
80 lines
2.2 KiB
Go
80 lines
2.2 KiB
Go
// Package carrier exposes carrier-oriented registration and construction APIs.
|
|
package carrier
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
)
|
|
|
|
var (
|
|
// ErrCarrierNotFound is returned when a requested carrier is not registered.
|
|
ErrCarrierNotFound = errors.New("carrier not found")
|
|
// ErrByteStreamUnsupported is returned when a carrier cannot provide a byte stream.
|
|
ErrByteStreamUnsupported = errors.New("carrier does not support byte stream")
|
|
// ErrVideoTrackUnsupported is returned when a carrier cannot exchange video tracks.
|
|
ErrVideoTrackUnsupported = errors.New("carrier does not support video tracks")
|
|
)
|
|
|
|
// Capabilities describes the transport primitives a carrier can expose.
|
|
type Capabilities struct {
|
|
ByteStream bool
|
|
VideoTrack bool
|
|
}
|
|
|
|
// Session is the carrier-level runtime handle.
|
|
type Session interface {
|
|
Capabilities() Capabilities
|
|
}
|
|
|
|
// ByteStreamCapable is implemented by carriers that can expose a byte stream.
|
|
type ByteStreamCapable interface {
|
|
OpenByteStream() (ByteStream, error)
|
|
}
|
|
|
|
// VideoTrackCapable is implemented by carriers that can exchange video tracks.
|
|
type VideoTrackCapable interface {
|
|
OpenVideoTrack() (VideoTrack, error)
|
|
}
|
|
|
|
// Config holds carrier configuration.
|
|
type Config struct {
|
|
RoomURL string
|
|
Name string
|
|
OnData func([]byte)
|
|
DNSServer string
|
|
ProxyAddr string
|
|
ProxyPort int
|
|
// URL, Token, and Engine are used by the "none" auth carrier (direct engine access).
|
|
URL string
|
|
Token string
|
|
Engine string
|
|
}
|
|
|
|
// Factory creates a new carrier session.
|
|
type Factory func(ctx context.Context, cfg Config) (Session, error)
|
|
|
|
var registry = make(map[string]Factory) //nolint:gochecknoglobals // package-level state intentional
|
|
|
|
// Register adds a carrier factory to the registry.
|
|
func Register(name string, factory Factory) {
|
|
registry[name] = factory
|
|
}
|
|
|
|
// New creates a carrier session by name.
|
|
func New(ctx context.Context, name string, cfg Config) (Session, error) {
|
|
factory, ok := registry[name]
|
|
if !ok {
|
|
return nil, ErrCarrierNotFound
|
|
}
|
|
return factory(ctx, cfg)
|
|
}
|
|
|
|
// Available returns a list of registered carriers.
|
|
func Available() []string {
|
|
names := make([]string, 0, len(registry))
|
|
for name := range registry {
|
|
names = append(names, name)
|
|
}
|
|
return names
|
|
}
|