mirror of
https://github.com/hackdiaz-dev/free-turn-proxy.git
synced 2026-10-12 09:41:53 +02:00
feat(session): реконнект релея без пересоздания туннеля
This commit is contained in:
@@ -250,9 +250,13 @@ func (s *Session) Wake() {
|
||||
}
|
||||
}
|
||||
|
||||
// Рецикл только по факту тишины: сон сам по себе аллокацию не убивает (lifetime 600 c),
|
||||
// а keepalive туннеля идёт через тот же relay и растит Rx. Заодно схлопывает каскад -
|
||||
// гэп-детектор ядра и SCREEN_ON с платформы приходят почти одновременно.
|
||||
func (s *Session) Reconnect() {
|
||||
select {
|
||||
case s.reconnectCh <- struct{}{}:
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Session) watchWake(ctx context.Context) {
|
||||
for {
|
||||
select {
|
||||
@@ -261,10 +265,7 @@ func (s *Session) watchWake(ctx context.Context) {
|
||||
case <-s.wakeCh:
|
||||
}
|
||||
if s.wakeNeedsRecycle(ctx) {
|
||||
select {
|
||||
case s.reconnectCh <- struct{}{}:
|
||||
default:
|
||||
}
|
||||
s.Reconnect()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import (
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/samosvalishe/free-turn-proxy/internal/client/dnsdial"
|
||||
"github.com/samosvalishe/free-turn-proxy/internal/config"
|
||||
"github.com/samosvalishe/free-turn-proxy/internal/provider/vk"
|
||||
"github.com/samosvalishe/free-turn-proxy/internal/session"
|
||||
@@ -155,6 +156,18 @@ func Wake() {
|
||||
}
|
||||
}
|
||||
|
||||
// Reconnect пересоздаёт TURN-аллокации, не трогая туннель и tun-дескриптор.
|
||||
func Reconnect() {
|
||||
if l := current.Load(); l != nil {
|
||||
l.sess.Reconnect()
|
||||
}
|
||||
}
|
||||
|
||||
// SetDNSServers подменяет UDP-резолверы на лету, без перезапуска сессии.
|
||||
func SetDNSServers(servers string) {
|
||||
dnsdial.SetUDPDNSServers(strings.Split(servers, ","))
|
||||
}
|
||||
|
||||
func stopLocked() {
|
||||
l := current.Swap(nil)
|
||||
if l == nil {
|
||||
|
||||
Reference in New Issue
Block a user