@@ -3,31 +3,17 @@ package outbound
3
3
import (
4
4
"bytes"
5
5
"context"
6
- "crypto/tls"
7
6
"fmt"
8
7
"net"
9
8
"net/netip"
10
9
"regexp"
11
10
"strconv"
12
- "sync"
13
11
14
12
"github.com/metacubex/mihomo/component/resolver"
15
13
C "github.com/metacubex/mihomo/constant"
16
14
"github.com/metacubex/mihomo/transport/socks5"
17
15
)
18
16
19
- var (
20
- globalClientSessionCache tls.ClientSessionCache
21
- once sync.Once
22
- )
23
-
24
- func getClientSessionCache () tls.ClientSessionCache {
25
- once .Do (func () {
26
- globalClientSessionCache = tls .NewLRUClientSessionCache (128 )
27
- })
28
- return globalClientSessionCache
29
- }
30
-
31
17
func serializesSocksAddr (metadata * C.Metadata ) []byte {
32
18
var buf [][]byte
33
19
addrType := metadata .AddrType ()
@@ -49,67 +35,21 @@ func serializesSocksAddr(metadata *C.Metadata) []byte {
49
35
return bytes .Join (buf , nil )
50
36
}
51
37
52
- func resolveUDPAddr (ctx context.Context , network , address string ) (* net.UDPAddr , error ) {
53
- host , port , err := net .SplitHostPort (address )
54
- if err != nil {
55
- return nil , err
56
- }
57
-
58
- ip , err := resolver .ResolveIPWithResolver (ctx , host , resolver .ProxyServerHostResolver )
59
- if err != nil {
60
- return nil , err
61
- }
62
- return net .ResolveUDPAddr (network , net .JoinHostPort (ip .String (), port ))
63
- }
64
-
65
- func resolveUDPAddrWithPrefer (ctx context.Context , network , address string , prefer C.DNSPrefer ) (* net.UDPAddr , error ) {
38
+ func resolveUDPAddr (ctx context.Context , network , address string , prefer C.DNSPrefer ) (* net.UDPAddr , error ) {
66
39
host , port , err := net .SplitHostPort (address )
67
40
if err != nil {
68
41
return nil , err
69
42
}
70
43
var ip netip.Addr
71
- var fallback netip.Addr
72
44
switch prefer {
73
45
case C .IPv4Only :
74
46
ip , err = resolver .ResolveIPv4WithResolver (ctx , host , resolver .ProxyServerHostResolver )
75
47
case C .IPv6Only :
76
48
ip , err = resolver .ResolveIPv6WithResolver (ctx , host , resolver .ProxyServerHostResolver )
77
49
case C .IPv6Prefer :
78
- var ips []netip.Addr
79
- ips , err = resolver .LookupIPWithResolver (ctx , host , resolver .ProxyServerHostResolver )
80
- if err == nil {
81
- for _ , addr := range ips {
82
- if addr .Is6 () {
83
- ip = addr
84
- break
85
- } else {
86
- if ! fallback .IsValid () {
87
- fallback = addr
88
- }
89
- }
90
- }
91
- }
50
+ ip , err = resolver .ResolveIPPrefer6WithResolver (ctx , host , resolver .ProxyServerHostResolver )
92
51
default :
93
- // C.IPv4Prefer, C.DualStack and other
94
- var ips []netip.Addr
95
- ips , err = resolver .LookupIPWithResolver (ctx , host , resolver .ProxyServerHostResolver )
96
- if err == nil {
97
- for _ , addr := range ips {
98
- if addr .Is4 () {
99
- ip = addr
100
- break
101
- } else {
102
- if ! fallback .IsValid () {
103
- fallback = addr
104
- }
105
- }
106
- }
107
-
108
- }
109
- }
110
-
111
- if ! ip .IsValid () && fallback .IsValid () {
112
- ip = fallback
52
+ ip , err = resolver .ResolveIPWithResolver (ctx , host , resolver .ProxyServerHostResolver )
113
53
}
114
54
115
55
if err != nil {
0 commit comments