Files
free-turn-proxy/internal/netctl/netctl.go
T
2026-09-07 02:37:53 +03:00

29 lines
786 B
Go

// Package netctl предоставляет глобальный Control-хук для сокетов (VpnService.protect).
package netctl
import (
"sync/atomic"
"syscall"
)
type ControlFunc func(network, address string, c syscall.RawConn) error
var control atomic.Pointer[ControlFunc]
// SetControl регистрирует функцию защиты сокетов хоста (nil - no-op).
func SetControl(fn ControlFunc) {
if fn == nil {
control.Store(nil)
return
}
control.Store(&fn)
}
// Apply вызывается из net.Dialer и net.ListenConfig для защиты создаваемых сокетов.
func Apply(network, address string, c syscall.RawConn) error {
if fn := control.Load(); fn != nil {
return (*fn)(network, address, c)
}
return nil
}