mirror of
https://github.com/openlibrecommunity/olcrtc.git
synced 2026-06-01 22:18:52 +02:00
refactor: introduce typed per-transport options
transport.Config used to carry a flat union of video+vp8+sei tuning fields that every transport ignored except its own. Replace with an opaque transport.Options marker interface and per-transport Options structs (videochannel.Options, vp8channel.Options, seichannel.Options). Datachannel keeps an unset Options. link.Config gains TransportOptions and drops the 16 transport-specific fields. server.Config and client.Config follow suit. session.Config is left untouched in this commit — buildTransportOptions packs its existing flat fields into the typed Options bundle before calling server/client (session.Config is rebuilt in a later commit when YAML config moves to typed sections). Tests that synthesized link/server/client/transport configs are updated to pass typed Options bundles. The shared e2eTransportOptions helper replaces three copies of the flat field bundle in e2e/tunnel_test.go. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+43
-35
@@ -19,6 +19,8 @@ import (
|
||||
"github.com/openlibrecommunity/olcrtc/internal/logger"
|
||||
"github.com/openlibrecommunity/olcrtc/internal/protect"
|
||||
|
||||
"github.com/openlibrecommunity/olcrtc/internal/transport/vp8channel"
|
||||
|
||||
_ "golang.org/x/mobile/bind" // ensure gomobile bind is available
|
||||
_ "google.golang.org/genproto/protobuf/field_mask" // keep gomobile on post-split genproto modules
|
||||
)
|
||||
@@ -241,17 +243,19 @@ func Check(
|
||||
doneCh <- runClientWithReady(
|
||||
ctx,
|
||||
client.Config{
|
||||
Link: defaultLink,
|
||||
Transport: transportName,
|
||||
Carrier: carrierName,
|
||||
RoomURL: buildRoomURL(carrierName, roomID),
|
||||
KeyHex: keyHex,
|
||||
DeviceID: clientID,
|
||||
LocalAddr: fmt.Sprintf("127.0.0.1:%d", socksPort),
|
||||
DNSServer: defaultDNSServer,
|
||||
VP8FPS: clampAtLeastOne(vp8FPS, 120),
|
||||
VP8BatchSize: clampAtLeastOne(vp8BatchSize, 64),
|
||||
Liveness: livenessConfig(cfg),
|
||||
Link: defaultLink,
|
||||
Transport: transportName,
|
||||
Carrier: carrierName,
|
||||
RoomURL: buildRoomURL(carrierName, roomID),
|
||||
KeyHex: keyHex,
|
||||
DeviceID: clientID,
|
||||
LocalAddr: fmt.Sprintf("127.0.0.1:%d", socksPort),
|
||||
DNSServer: defaultDNSServer,
|
||||
TransportOptions: vp8channel.Options{
|
||||
FPS: clampAtLeastOne(vp8FPS, 120),
|
||||
BatchSize: clampAtLeastOne(vp8BatchSize, 64),
|
||||
},
|
||||
Liveness: livenessConfig(cfg),
|
||||
},
|
||||
func() {
|
||||
readyOnce.Do(func() {
|
||||
@@ -330,17 +334,19 @@ func Ping(
|
||||
doneCh <- runClientWithReady(
|
||||
ctx,
|
||||
client.Config{
|
||||
Link: defaultLink,
|
||||
Transport: transportName,
|
||||
Carrier: carrierName,
|
||||
RoomURL: buildRoomURL(carrierName, roomID),
|
||||
KeyHex: keyHex,
|
||||
DeviceID: clientID,
|
||||
LocalAddr: fmt.Sprintf("127.0.0.1:%d", socksPort),
|
||||
DNSServer: defaultDNSServer,
|
||||
VP8FPS: clampAtLeastOne(vp8FPS, 120),
|
||||
VP8BatchSize: clampAtLeastOne(vp8BatchSize, 64),
|
||||
Liveness: livenessConfig(cfg),
|
||||
Link: defaultLink,
|
||||
Transport: transportName,
|
||||
Carrier: carrierName,
|
||||
RoomURL: buildRoomURL(carrierName, roomID),
|
||||
KeyHex: keyHex,
|
||||
DeviceID: clientID,
|
||||
LocalAddr: fmt.Sprintf("127.0.0.1:%d", socksPort),
|
||||
DNSServer: defaultDNSServer,
|
||||
TransportOptions: vp8channel.Options{
|
||||
FPS: clampAtLeastOne(vp8FPS, 120),
|
||||
BatchSize: clampAtLeastOne(vp8BatchSize, 64),
|
||||
},
|
||||
Liveness: livenessConfig(cfg),
|
||||
},
|
||||
func() {
|
||||
readyOnce.Do(func() {
|
||||
@@ -576,19 +582,21 @@ func startWithConfig(
|
||||
err := runClientWithReady(
|
||||
ctx,
|
||||
client.Config{
|
||||
Link: cfg.link,
|
||||
Transport: cfg.transport,
|
||||
Carrier: carrierName,
|
||||
RoomURL: roomURL,
|
||||
KeyHex: keyHex,
|
||||
DeviceID: clientID,
|
||||
LocalAddr: fmt.Sprintf("127.0.0.1:%d", socksPort),
|
||||
DNSServer: cfg.dnsServer,
|
||||
SOCKSUser: socksUser,
|
||||
SOCKSPass: socksPass,
|
||||
VP8FPS: cfg.vp8FPS,
|
||||
VP8BatchSize: cfg.vp8BatchSize,
|
||||
Liveness: livenessConfig(cfg),
|
||||
Link: cfg.link,
|
||||
Transport: cfg.transport,
|
||||
Carrier: carrierName,
|
||||
RoomURL: roomURL,
|
||||
KeyHex: keyHex,
|
||||
DeviceID: clientID,
|
||||
LocalAddr: fmt.Sprintf("127.0.0.1:%d", socksPort),
|
||||
DNSServer: cfg.dnsServer,
|
||||
SOCKSUser: socksUser,
|
||||
SOCKSPass: socksPass,
|
||||
TransportOptions: vp8channel.Options{
|
||||
FPS: cfg.vp8FPS,
|
||||
BatchSize: cfg.vp8BatchSize,
|
||||
},
|
||||
Liveness: livenessConfig(cfg),
|
||||
},
|
||||
func() {
|
||||
readyOnce.Do(func() {
|
||||
|
||||
@@ -13,6 +13,7 @@ import (
|
||||
"github.com/openlibrecommunity/olcrtc/internal/control"
|
||||
"github.com/openlibrecommunity/olcrtc/internal/logger"
|
||||
"github.com/openlibrecommunity/olcrtc/internal/protect"
|
||||
"github.com/openlibrecommunity/olcrtc/internal/transport/vp8channel"
|
||||
)
|
||||
|
||||
type testProtector struct {
|
||||
@@ -176,9 +177,10 @@ func TestStartWithInjectedRunnerLifecycle(t *testing.T) {
|
||||
SetLivenessOptions(2500, 750, 4)
|
||||
|
||||
runClientWithReady = func(ctx context.Context, cfg client.Config, onReady func()) error {
|
||||
opts, _ := cfg.TransportOptions.(vp8channel.Options)
|
||||
if cfg.Link != defaultLink || cfg.Transport != dataTransport || cfg.Carrier != carrierJazz ||
|
||||
cfg.RoomURL != "any" || cfg.DeviceID != "client" || cfg.LocalAddr != "127.0.0.1:1080" ||
|
||||
cfg.DNSServer != defaultDNSServer || cfg.VP8FPS != 60 || cfg.VP8BatchSize != 8 ||
|
||||
cfg.DNSServer != defaultDNSServer || opts.FPS != 60 || opts.BatchSize != 8 ||
|
||||
cfg.Liveness.Interval != 2500*time.Millisecond ||
|
||||
cfg.Liveness.Timeout != 750*time.Millisecond ||
|
||||
cfg.Liveness.Failures != 4 {
|
||||
@@ -186,7 +188,7 @@ func TestStartWithInjectedRunnerLifecycle(t *testing.T) {
|
||||
"RunWithReady args mismatch: link=%q transport=%q carrier=%q room=%q client=%q "+
|
||||
"local=%q dns=%q vp8=%d/%d liveness=%+v",
|
||||
cfg.Link, cfg.Transport, cfg.Carrier, cfg.RoomURL, cfg.DeviceID,
|
||||
cfg.LocalAddr, cfg.DNSServer, cfg.VP8FPS, cfg.VP8BatchSize, cfg.Liveness,
|
||||
cfg.LocalAddr, cfg.DNSServer, opts.FPS, opts.BatchSize, cfg.Liveness,
|
||||
)
|
||||
}
|
||||
onReady()
|
||||
@@ -240,12 +242,13 @@ func TestStartUsesDefaultsAndCheckWithInjectedRunner(t *testing.T) {
|
||||
|
||||
SetLivenessOptions(3000, 1000, 5)
|
||||
runClientWithReady = func(ctx context.Context, cfg client.Config, onReady func()) error {
|
||||
if cfg.Transport != dataTransport || cfg.VP8FPS != 1 || cfg.VP8BatchSize != 64 ||
|
||||
opts, _ := cfg.TransportOptions.(vp8channel.Options)
|
||||
if cfg.Transport != dataTransport || opts.FPS != 1 || opts.BatchSize != 64 ||
|
||||
cfg.Liveness.Interval != 3000*time.Millisecond ||
|
||||
cfg.Liveness.Timeout != time.Second ||
|
||||
cfg.Liveness.Failures != 5 {
|
||||
t.Fatalf("Check args mismatch: transport=%q vp8=%d/%d liveness=%+v",
|
||||
cfg.Transport, cfg.VP8FPS, cfg.VP8BatchSize, cfg.Liveness)
|
||||
cfg.Transport, opts.FPS, opts.BatchSize, cfg.Liveness)
|
||||
}
|
||||
onReady()
|
||||
<-ctx.Done()
|
||||
|
||||
Reference in New Issue
Block a user