From c77530c3dbb3744e0e3406ea60e0c62300637fa7 Mon Sep 17 00:00:00 2001 From: zarazaex59 Date: Tue, 7 Apr 2026 01:32:37 +0300 Subject: [PATCH] feat(telemost): Implement multiplexer reset and send function updates on reconnect --- internal/client/client.go | 8 ++++++++ internal/mux/mux.go | 15 +++++++++++++++ internal/server/server.go | 8 ++++++++ 3 files changed, 31 insertions(+) diff --git a/internal/client/client.go b/internal/client/client.go index a9b4901..79be2fe 100644 --- a/internal/client/client.go +++ b/internal/client/client.go @@ -66,6 +66,14 @@ func Run(roomURL, keyHex string, socksPort int) error { peer.SetReconnectCallback(func(dc *webrtc.DataChannel) { log.Println("Updating DataChannel after reconnect") + c.mux.Reset() + c.mux.UpdateSendFunc(func(frame []byte) error { + encrypted, err := c.cipher.Encrypt(frame) + if err != nil { + return err + } + return dc.Send(encrypted) + }) }) log.Println("Connecting to Telemost...") diff --git a/internal/mux/mux.go b/internal/mux/mux.go index a6debe1..be017e7 100644 --- a/internal/mux/mux.go +++ b/internal/mux/mux.go @@ -151,3 +151,18 @@ func (m *Multiplexer) GetStreams() []uint16 { } return sids } + +func (m *Multiplexer) Reset() { + m.mu.Lock() + defer m.mu.Unlock() + + m.streams = make(map[uint16]*Stream) + m.nextID = 1 +} + +func (m *Multiplexer) UpdateSendFunc(onSend func([]byte) error) { + m.mu.Lock() + defer m.mu.Unlock() + + m.onSend = onSend +} diff --git a/internal/server/server.go b/internal/server/server.go index 56ce235..a99d4d8 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -73,6 +73,14 @@ func Run(roomURL, keyHex string) error { peer.SetReconnectCallback(func(dc *webrtc.DataChannel) { log.Println("Updating DataChannel after reconnect") + s.mux.Reset() + s.mux.UpdateSendFunc(func(frame []byte) error { + encrypted, err := s.cipher.Encrypt(frame) + if err != nil { + return err + } + return dc.Send(encrypted) + }) }) log.Println("Connecting to Telemost...")