Improve bind

This commit is contained in:
世界 2022-08-26 20:47:40 +08:00
parent 185d879182
commit d4ba8fdfac
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
5 changed files with 14 additions and 13 deletions

View file

@ -22,9 +22,9 @@ func BindToInterface(manager BindManager, interfaceName string) Func {
} }
} }
func BindToInterfaceFunc(manager BindManager, interfaceNameFunc func() string) Func { func BindToInterfaceFunc(manager BindManager, interfaceNameFunc func(network, address string) string) Func {
return func(network, address string, conn syscall.RawConn) error { return func(network, address string, conn syscall.RawConn) error {
interfaceName := interfaceNameFunc() interfaceName := interfaceNameFunc(network, address)
if interfaceName == "" { if interfaceName == "" {
return nil return nil
} }
@ -36,9 +36,9 @@ func BindToInterfaceFunc(manager BindManager, interfaceNameFunc func() string) F
} }
} }
func BindToInterfaceIndexFunc(interfaceIndexFunc func() int) Func { func BindToInterfaceIndexFunc(interfaceIndexFunc func(network, address string) int) Func {
return func(network, address string, conn syscall.RawConn) error { return func(network, address string, conn syscall.RawConn) error {
index := interfaceIndexFunc() index := interfaceIndexFunc(network, address)
return bindToInterface(conn, network, index) return bindToInterface(conn, network, index)
} }
} }

View file

@ -16,9 +16,9 @@ func BindToInterface(manager BindManager, interfaceName string) Func {
} }
} }
func BindToInterfaceFunc(manager BindManager, interfaceNameFunc func() string) Func { func BindToInterfaceFunc(manager BindManager, interfaceNameFunc func(network, address string) string) Func {
return func(network, address string, conn syscall.RawConn) error { return func(network, address string, conn syscall.RawConn) error {
interfaceName := interfaceNameFunc() interfaceName := interfaceNameFunc(network, address)
if interfaceName == "" { if interfaceName == "" {
return nil return nil
} }
@ -28,6 +28,6 @@ func BindToInterfaceFunc(manager BindManager, interfaceNameFunc func() string) F
} }
} }
func BindToInterfaceIndexFunc(interfaceIndexFunc func() int) Func { func BindToInterfaceIndexFunc(interfaceIndexFunc func(network, address string) int) Func {
return nil return nil
} }

View file

@ -10,10 +10,10 @@ func BindToInterface(manager BindManager, interfaceName string) Func {
return nil return nil
} }
func BindToInterfaceFunc(manager BindManager, interfaceNameFunc func() string) Func { func BindToInterfaceFunc(manager BindManager, interfaceNameFunc func(network, address string) string) Func {
return nil return nil
} }
func BindToInterfaceIndexFunc(interfaceIndexFunc func() int) Func { func BindToInterfaceIndexFunc(interfaceIndexFunc func(network, address string) int) Func {
return nil return nil
} }

View file

@ -68,9 +68,9 @@ func BindToInterface(manager BindManager, interfaceName string) Func {
} }
} }
func BindToInterfaceFunc(manager BindManager, interfaceNameFunc func() string) Func { func BindToInterfaceFunc(manager BindManager, interfaceNameFunc func(network, address string) string) Func {
return func(network, address string, conn syscall.RawConn) error { return func(network, address string, conn syscall.RawConn) error {
interfaceName := interfaceNameFunc() interfaceName := interfaceNameFunc(network, address)
if interfaceName == "" { if interfaceName == "" {
return nil return nil
} }
@ -82,9 +82,9 @@ func BindToInterfaceFunc(manager BindManager, interfaceNameFunc func() string) F
} }
} }
func BindToInterfaceIndexFunc(interfaceIndexFunc func() int) Func { func BindToInterfaceIndexFunc(interfaceIndexFunc func(network, address string) int) Func {
return func(network, address string, conn syscall.RawConn) error { return func(network, address string, conn syscall.RawConn) error {
index := interfaceIndexFunc() index := interfaceIndexFunc(network, address)
if index == -1 { if index == -1 {
return nil return nil
} }

View file

@ -7,6 +7,7 @@ import (
"net" "net"
"net/http" "net/http"
"strings" "strings"
"github.com/sagernet/sing/common" "github.com/sagernet/sing/common"
"github.com/sagernet/sing/common/auth" "github.com/sagernet/sing/common/auth"
"github.com/sagernet/sing/common/buf" "github.com/sagernet/sing/common/buf"