mirror of
https://github.com/SagerNet/sing-box.git
synced 2024-11-29 03:51:31 +00:00
Fix missing nil check for URLTest
This commit is contained in:
parent
082e3fb8df
commit
76a295a660
|
@ -43,6 +43,7 @@ func NewURLTest(ctx context.Context, router adapter.Router, logger log.ContextLo
|
||||||
outbound := &URLTest{
|
outbound := &URLTest{
|
||||||
myOutboundAdapter: myOutboundAdapter{
|
myOutboundAdapter: myOutboundAdapter{
|
||||||
protocol: C.TypeURLTest,
|
protocol: C.TypeURLTest,
|
||||||
|
network: []string{N.NetworkTCP, N.NetworkUDP},
|
||||||
router: router,
|
router: router,
|
||||||
logger: logger,
|
logger: logger,
|
||||||
tag: tag,
|
tag: tag,
|
||||||
|
@ -61,13 +62,6 @@ func NewURLTest(ctx context.Context, router adapter.Router, logger log.ContextLo
|
||||||
return outbound, nil
|
return outbound, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *URLTest) Network() []string {
|
|
||||||
if s.group == nil {
|
|
||||||
return []string{N.NetworkTCP, N.NetworkUDP}
|
|
||||||
}
|
|
||||||
return s.group.Select(N.NetworkTCP).Network()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *URLTest) Start() error {
|
func (s *URLTest) Start() error {
|
||||||
outbounds := make([]adapter.Outbound, 0, len(s.tags))
|
outbounds := make([]adapter.Outbound, 0, len(s.tags))
|
||||||
for i, tag := range s.tags {
|
for i, tag := range s.tags {
|
||||||
|
@ -93,7 +87,12 @@ func (s *URLTest) Close() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *URLTest) Now() string {
|
func (s *URLTest) Now() string {
|
||||||
return s.group.Select(N.NetworkTCP).Tag()
|
if s.group.selectedOutboundTCP != nil {
|
||||||
|
return s.group.selectedOutboundTCP.Tag()
|
||||||
|
} else if s.group.selectedOutboundUDP != nil {
|
||||||
|
return s.group.selectedOutboundUDP.Tag()
|
||||||
|
}
|
||||||
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *URLTest) All() []string {
|
func (s *URLTest) All() []string {
|
||||||
|
@ -111,6 +110,9 @@ func (s *URLTest) CheckOutbounds() {
|
||||||
func (s *URLTest) DialContext(ctx context.Context, network string, destination M.Socksaddr) (net.Conn, error) {
|
func (s *URLTest) DialContext(ctx context.Context, network string, destination M.Socksaddr) (net.Conn, error) {
|
||||||
s.group.Touch()
|
s.group.Touch()
|
||||||
outbound := s.group.Select(network)
|
outbound := s.group.Select(network)
|
||||||
|
if outbound == nil {
|
||||||
|
return nil, E.New("missing supported outbound")
|
||||||
|
}
|
||||||
conn, err := outbound.DialContext(ctx, network, destination)
|
conn, err := outbound.DialContext(ctx, network, destination)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return s.group.interruptGroup.NewConn(conn, interrupt.IsExternalConnectionFromContext(ctx)), nil
|
return s.group.interruptGroup.NewConn(conn, interrupt.IsExternalConnectionFromContext(ctx)), nil
|
||||||
|
@ -123,6 +125,9 @@ func (s *URLTest) DialContext(ctx context.Context, network string, destination M
|
||||||
func (s *URLTest) ListenPacket(ctx context.Context, destination M.Socksaddr) (net.PacketConn, error) {
|
func (s *URLTest) ListenPacket(ctx context.Context, destination M.Socksaddr) (net.PacketConn, error) {
|
||||||
s.group.Touch()
|
s.group.Touch()
|
||||||
outbound := s.group.Select(N.NetworkUDP)
|
outbound := s.group.Select(N.NetworkUDP)
|
||||||
|
if outbound == nil {
|
||||||
|
return nil, E.New("missing supported outbound")
|
||||||
|
}
|
||||||
conn, err := outbound.ListenPacket(ctx, destination)
|
conn, err := outbound.ListenPacket(ctx, destination)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return s.group.interruptGroup.NewPacketConn(conn, interrupt.IsExternalConnectionFromContext(ctx)), nil
|
return s.group.interruptGroup.NewPacketConn(conn, interrupt.IsExternalConnectionFromContext(ctx)), nil
|
||||||
|
@ -346,12 +351,12 @@ func (g *URLTestGroup) urlTest(ctx context.Context, force bool) (map[string]uint
|
||||||
func (g *URLTestGroup) performUpdateCheck() {
|
func (g *URLTestGroup) performUpdateCheck() {
|
||||||
outbound := g.Select(N.NetworkTCP)
|
outbound := g.Select(N.NetworkTCP)
|
||||||
var updated bool
|
var updated bool
|
||||||
if outbound != g.selectedOutboundTCP {
|
if outbound != nil && outbound != g.selectedOutboundTCP {
|
||||||
g.selectedOutboundTCP = outbound
|
g.selectedOutboundTCP = outbound
|
||||||
updated = true
|
updated = true
|
||||||
}
|
}
|
||||||
outbound = g.Select(N.NetworkUDP)
|
outbound = g.Select(N.NetworkUDP)
|
||||||
if outbound != g.selectedOutboundUDP {
|
if outbound != nil && outbound != g.selectedOutboundUDP {
|
||||||
g.selectedOutboundUDP = outbound
|
g.selectedOutboundUDP = outbound
|
||||||
updated = true
|
updated = true
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue