mirror of
https://github.com/hackdiaz-dev/free-turn-proxy.git
synced 2026-10-12 09:41:53 +02:00
29 lines
786 B
Go
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
|
|
}
|