mirror of
https://github.com/openlibrecommunity/olcrtc.git
synced 2026-06-02 06:23:37 +02:00
refactor: remove link layer
internal/link and internal/link/direct were a single-implementation abstraction layer where directLink mechanically proxied every method to transport.Transport — only Features() lived above transport.Transport, and even that was a Features() alias. Six layers of plumbing for zero behavioural value. Drop the layer entirely: - muxconn.Conn now takes a transport.Transport directly. - server.Server and client.Client store transport.Transport, call transport.New, and expose Features() through transport.Transport's built-in method. - server.Config and client.Config lose their Link string field. - session.Config loses Link + validateLink + ErrLinkRequired/ErrUnsupportedLink. - config.File and config.Profile lose the link YAML key. - pkg/olcrtc/tunnel.Config loses Link. - mobile drops defaultLink, SetLink, and mobileConfig.link. Two e2e tests that exercised link.New directly are renamed to call transport.New (TestTransportCreatesAllProviderTransportCombinations and TestTransportConnectsFastProviderTransportMatrix); behaviour is unchanged. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -24,16 +24,16 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/openlibrecommunity/olcrtc/internal/crypto"
|
||||
"github.com/openlibrecommunity/olcrtc/internal/link"
|
||||
"github.com/openlibrecommunity/olcrtc/internal/logger"
|
||||
"github.com/openlibrecommunity/olcrtc/internal/transport"
|
||||
)
|
||||
|
||||
// ErrClosed is returned from Read/Write after the conn has been closed.
|
||||
var ErrClosed = errors.New("muxconn: closed")
|
||||
|
||||
// Conn is an io.ReadWriteCloser over a link.Link with optional AEAD wrapping.
|
||||
// Conn is an io.ReadWriteCloser over a [transport.Transport] with optional AEAD wrapping.
|
||||
type Conn struct {
|
||||
ln link.Link
|
||||
ln transport.Transport
|
||||
cipher *crypto.Cipher
|
||||
|
||||
mu sync.Mutex
|
||||
@@ -42,9 +42,9 @@ type Conn struct {
|
||||
closed bool
|
||||
}
|
||||
|
||||
// New wires a Conn over the given link. Push must be set as the link's OnData
|
||||
// callback before this conn is used.
|
||||
func New(ln link.Link, cipher *crypto.Cipher) *Conn {
|
||||
// New wires a Conn over the given transport. Push must be set as the
|
||||
// transport's OnData callback before this conn is used.
|
||||
func New(ln transport.Transport, cipher *crypto.Cipher) *Conn {
|
||||
c := &Conn{ln: ln, cipher: cipher}
|
||||
c.cond = sync.NewCond(&c.mu)
|
||||
return c
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"time"
|
||||
|
||||
cryptopkg "github.com/openlibrecommunity/olcrtc/internal/crypto"
|
||||
"github.com/openlibrecommunity/olcrtc/internal/transport"
|
||||
)
|
||||
|
||||
var errMuxBoom = errors.New("boom")
|
||||
@@ -22,12 +23,13 @@ type stubLink struct {
|
||||
canSendFn func() bool
|
||||
}
|
||||
|
||||
func (s *stubLink) Connect(context.Context) error { return nil }
|
||||
func (s *stubLink) Close() error { return nil }
|
||||
func (s *stubLink) SetReconnectCallback(func()) {}
|
||||
func (s *stubLink) SetShouldReconnect(func() bool) {}
|
||||
func (s *stubLink) SetEndedCallback(func(string)) {}
|
||||
func (s *stubLink) WatchConnection(context.Context) {}
|
||||
func (s *stubLink) Connect(context.Context) error { return nil }
|
||||
func (s *stubLink) Close() error { return nil }
|
||||
func (s *stubLink) SetReconnectCallback(func()) {}
|
||||
func (s *stubLink) SetShouldReconnect(func() bool) {}
|
||||
func (s *stubLink) SetEndedCallback(func(string)) {}
|
||||
func (s *stubLink) WatchConnection(context.Context) {}
|
||||
func (s *stubLink) Features() transport.Features { return transport.Features{} }
|
||||
func (s *stubLink) Send(data []byte) error {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
|
||||
Reference in New Issue
Block a user