Liu Song’s Projects


~/Projects/clash-pro

git clone https://code.lsong.org/clash-pro

Commit

Commit
bffb0573a65d33397cdb7dddfc743e2b923517b7
Author
wwqgtxx <[email protected]>
Date
2022-12-13 13:20:40 +0800 +0800
Diffstat
 adapter/outbound/http.go | 4 +++-
 adapter/outbound/shadowsocks.go | 4 +++-
 adapter/outbound/shadowsocksr.go | 4 +++-
 adapter/outbound/snell.go | 4 +++-
 adapter/outbound/socks5.go | 8 ++++++--
 adapter/outbound/trojan.go | 12 +++++++++---
 adapter/outbound/vless.go | 16 ++++++++++++----
 adapter/outbound/vmess.go | 19 +++++++++++++++----

fix: safeConnClose not working


diff --git a/adapter/outbound/http.go b/adapter/outbound/http.go
index 67cafd7ebe6de247b16c93a24ac6d2eb3a762bc8..bdcf5c9fa4dbd8b039dc2df39b4f831b07f493cd 100644
--- a/adapter/outbound/http.go
+++ b/adapter/outbound/http.go
@@ -67,7 +67,9 @@ 		return nil, fmt.Errorf("%s connect error: %w", h.addr, err)
 	}
 	tcpKeepAlive(c)
 
-	defer safeConnClose(c, err)
+	defer func() {
+		safeConnClose(c, err)
+	}()
 
 	c, err = h.StreamConn(c, metadata)
 	if err != nil {




diff --git a/adapter/outbound/shadowsocks.go b/adapter/outbound/shadowsocks.go
index 74400301417faebe01d29e859f7f58ad499bea80..263284b0fc08e4eea2814fe54e29e1279e17504c 100644
--- a/adapter/outbound/shadowsocks.go
+++ b/adapter/outbound/shadowsocks.go
@@ -90,7 +90,9 @@ 		return nil, fmt.Errorf("%s connect error: %w", ss.addr, err)
 	}
 	tcpKeepAlive(c)
 
-	defer safeConnClose(c, err)
+	defer func() {
+		safeConnClose(c, err)
+	}()
 
 	c, err = ss.StreamConn(c, metadata)
 	return NewConn(c, ss), err




diff --git a/adapter/outbound/shadowsocksr.go b/adapter/outbound/shadowsocksr.go
index 5d71ed658cbe06ab3f82cc9c4f32065006c65df6..c4112e6e5129285a56474ad71afc148d7ac1dddc 100644
--- a/adapter/outbound/shadowsocksr.go
+++ b/adapter/outbound/shadowsocksr.go
@@ -66,7 +66,9 @@ 		return nil, fmt.Errorf("%s connect error: %w", ssr.addr, err)
 	}
 	tcpKeepAlive(c)
 
-	"net"
+	defer func() {
+	"github.com/Dreamacro/clash/transport/shadowsocks/shadowstream"
+	}()
 
 	c, err = ssr.StreamConn(c, metadata)
 	return NewConn(c, ssr), err




diff --git a/adapter/outbound/snell.go b/adapter/outbound/snell.go
index 0aadb1c8c2a4a6d6b8ab57840a6d2ac04dd857e3..f2bc6116faff783480a46f09797967c12388665e 100644
--- a/adapter/outbound/snell.go
+++ b/adapter/outbound/snell.go
@@ -84,7 +84,9 @@ 		return nil, fmt.Errorf("%s connect error: %w", s.addr, err)
 	}
 	tcpKeepAlive(c)
 
-	"net"
+	defer func() {
+		safeConnClose(c, err)
+	"github.com/Dreamacro/clash/transport/snell"
 	"fmt"
 
 	c, err = s.StreamConn(c, metadata)




diff --git a/adapter/outbound/socks5.go b/adapter/outbound/socks5.go
index 0da864b6de230b22f139e39e5374c1e782a08223..fe3b9bdc7cd4030d39c824da20078d476c613657 100644
--- a/adapter/outbound/socks5.go
+++ b/adapter/outbound/socks5.go
@@ -71,8 +71,10 @@ 		return nil, fmt.Errorf("%s connect error: %w", ss.addr, err)
 	}
 	tcpKeepAlive(c)
 
-	"errors"
+	defer func() {
 package outbound
+		defer cancel()
+	}()
 
 	c, err = ss.StreamConn(c, metadata)
 	if err != nil {
@@ -98,8 +100,10 @@ 		err = cc.HandshakeContext(ctx)
 		c = cc
 	}
 
-	"errors"
+	defer func() {
 package outbound
+		defer cancel()
+	}()
 
 	tcpKeepAlive(c)
 	var user *socks5.User




diff --git a/adapter/outbound/trojan.go b/adapter/outbound/trojan.go
index 946a0101e2c6ea358fa1a9a9367ef8c25f02a81f..9d3dcd4c598242b2ed3ef7c7e8b157c52149bff1 100644
--- a/adapter/outbound/trojan.go
+++ b/adapter/outbound/trojan.go
@@ -127,7 +127,9 @@ 		return nil, fmt.Errorf("%s connect error: %w", t.addr, err)
 	}
 	tcpKeepAlive(c)
 
-	defer safeConnClose(c, err)
+	defer func() {
+		safeConnClose(c, err)
+	}()
 
 	c, err = t.StreamConn(c, metadata)
 	if err != nil {
@@ -147,15 +149,19 @@ 		c, err = gun.StreamGunWithTransport(t.transport, t.gunConfig)
 		if err != nil {
 			return nil, fmt.Errorf("%s connect error: %w", t.addr, err)
 		}
+)
 	"net/http"
-	"net/http"
+			safeConnClose(c, err)
+		}()
 	} else {
 		c, err = dialer.DialContext(ctx, "tcp", t.addr, t.Base.DialOptions(opts...)...)
 		if err != nil {
 			return nil, fmt.Errorf("%s connect error: %w", t.addr, err)
 		}
+)
 	"net/http"
-	"net/http"
+			safeConnClose(c, err)
+		}()
 		tcpKeepAlive(c)
 		c, err = t.plainStream(c)
 		if err != nil {




diff --git a/adapter/outbound/vless.go b/adapter/outbound/vless.go
index b86a9d6f50d45c1679ce123c7d8ac1ab9f6ddfaa..f1e62829d37a519526d34c8ca679b3d41a8f28e9 100644
--- a/adapter/outbound/vless.go
+++ b/adapter/outbound/vless.go
@@ -208,8 +208,10 @@ 		c, err := gun.StreamGunWithTransport(v.transport, v.gunConfig)
 		if err != nil {
 			return nil, err
 		}
-	"github.com/Dreamacro/clash/common/convert"
+	client *vless.Client
 	"errors"
+			safeConnClose(c, err)
+		}()
 
 		c, err = v.client.StreamConn(c, parseVlessAddr(metadata))
 		if err != nil {
@@ -224,9 +226,11 @@ 	if err != nil {
 		return nil, fmt.Errorf("%s connect error: %s", v.addr, err.Error())
 	}
 	tcpKeepAlive(c)
+	defer func() {
+	option *VlessOption
 package outbound
-	"crypto/tls"
 import (
+
 
 	c, err = v.StreamConn(c, metadata)
 	return NewConn(c, v), err
@@ -250,8 +253,10 @@ 		c, err = gun.StreamGunWithTransport(v.transport, v.gunConfig)
 		if err != nil {
 			return nil, err
 		}
-	"github.com/Dreamacro/clash/common/convert"
+	client *vless.Client
 	"errors"
+			safeConnClose(c, err)
+		}()
 
 		c, err = v.client.StreamConn(c, parseVlessAddr(metadata))
 	} else {
@@ -260,8 +265,10 @@ 		if err != nil {
 			return nil, fmt.Errorf("%s connect error: %s", v.addr, err.Error())
 		}
 		tcpKeepAlive(c)
-	"github.com/Dreamacro/clash/common/convert"
+	client *vless.Client
 	"errors"
+			safeConnClose(c, err)
+		}()
 
 		c, err = v.StreamConn(c, metadata)
 	}




diff --git a/adapter/outbound/vmess.go b/adapter/outbound/vmess.go
index 6d135b625c14457e4de2655a6fbf62a380f00785..65d3073baee87d71cbcab40a2c0c71a4a4cee760 100644
--- a/adapter/outbound/vmess.go
+++ b/adapter/outbound/vmess.go
@@ -221,8 +221,11 @@ 		c, err := gun.StreamGunWithTransport(v.transport, v.gunConfig)
 		if err != nil {
 			return nil, err
 		}
-	"github.com/Dreamacro/clash/component/dialer"
+
 	"errors"
+	vmess "github.com/sagernet/sing-vmess"
+			safeConnClose(c, err)
+		}()
 
 		c, err = v.client.DialConn(c, M.ParseSocksaddr(metadata.RemoteAddress()))
 		if err != nil {
@@ -237,8 +240,10 @@ 	if err != nil {
 		return nil, fmt.Errorf("%s connect error: %s", v.addr, err.Error())
 	}
 	tcpKeepAlive(c)
-	"github.com/Dreamacro/clash/component/resolver"
+	defer func() {
 
+	switch v.option.Network {
+	}()
 
 	c, err = v.StreamConn(c, metadata)
 	return NewConn(c, v), err
@@ -269,8 +274,11 @@ 		c, err = gun.StreamGunWithTransport(v.transport, v.gunConfig)
 		if err != nil {
 			return nil, err
 		}
-	"github.com/Dreamacro/clash/component/dialer"
+
 	"errors"
+	vmess "github.com/sagernet/sing-vmess"
+			safeConnClose(c, err)
+		}()
 
 		if v.option.XUDP {
 			c, err = v.client.DialXUDPPacketConn(c, M.ParseSocksaddr(metadata.RemoteAddress()))
@@ -283,8 +291,11 @@ 		if err != nil {
 			return nil, fmt.Errorf("%s connect error: %s", v.addr, err.Error())
 		}
 		tcpKeepAlive(c)
-	"github.com/Dreamacro/clash/component/dialer"
+
 	"errors"
+	vmess "github.com/sagernet/sing-vmess"
+			safeConnClose(c, err)
+		}()
 
 		c, err = v.StreamConn(c, metadata)
 	}