@@ -21,54 +21,41 @@ import (
21
21
var ErrInvalidPacket = E .New ("socks5: invalid packet" )
22
22
23
23
type AssociatePacketConn struct {
24
- N.NetPacketConn
24
+ N.AbstractConn
25
+ conn N.ExtendedConn
25
26
remoteAddr M.Socksaddr
26
27
underlying net.Conn
27
28
}
28
29
29
- func NewAssociatePacketConn (conn net.PacketConn , remoteAddr M.Socksaddr , underlying net.Conn ) * AssociatePacketConn {
30
+ func NewAssociatePacketConn (conn net.Conn , remoteAddr M.Socksaddr , underlying net.Conn ) * AssociatePacketConn {
30
31
return & AssociatePacketConn {
31
- NetPacketConn : bufio .NewPacketConn (conn ),
32
- remoteAddr : remoteAddr ,
33
- underlying : underlying ,
32
+ AbstractConn : conn ,
33
+ conn : bufio .NewExtendedConn (conn ),
34
+ remoteAddr : remoteAddr ,
35
+ underlying : underlying ,
34
36
}
35
37
}
36
38
37
- // Deprecated: NewAssociatePacketConn(bufio.NewUnbindPacketConn(conn), remoteAddr, underlying) instead.
38
- func NewAssociateConn (conn net.Conn , remoteAddr M.Socksaddr , underlying net.Conn ) * AssociatePacketConn {
39
- return & AssociatePacketConn {
40
- NetPacketConn : bufio .NewUnbindPacketConn (conn ),
41
- remoteAddr : remoteAddr ,
42
- underlying : underlying ,
43
- }
44
- }
45
-
46
- func (c * AssociatePacketConn ) RemoteAddr () net.Addr {
47
- return c .remoteAddr .UDPAddr ()
48
- }
49
-
50
- //warn:unsafe
51
39
func (c * AssociatePacketConn ) ReadFrom (p []byte ) (n int , addr net.Addr , err error ) {
52
- n , addr , err = c .NetPacketConn . ReadFrom (p )
40
+ n , err = c .conn . Read (p )
53
41
if err != nil {
54
42
return
55
43
}
56
44
if n < 3 {
57
45
return 0 , nil , ErrInvalidPacket
58
46
}
59
- c .remoteAddr = M .SocksaddrFromNet (addr )
60
47
reader := bytes .NewReader (p [3 :n ])
61
48
destination , err := M .SocksaddrSerializer .ReadAddrPort (reader )
62
49
if err != nil {
63
50
return
64
51
}
52
+ c .remoteAddr = destination
65
53
addr = destination .UDPAddr ()
66
54
index := 3 + int (reader .Size ()) - reader .Len ()
67
55
n = copy (p , p [index :n ])
68
56
return
69
57
}
70
58
71
- //warn:unsafe
72
59
func (c * AssociatePacketConn ) WriteTo (p []byte , addr net.Addr ) (n int , err error ) {
73
60
destination := M .SocksaddrFromNet (addr )
74
61
buffer := buf .NewSize (3 + M .SocksaddrSerializer .AddrPortLen (destination ) + len (p ))
@@ -82,32 +69,23 @@ func (c *AssociatePacketConn) WriteTo(p []byte, addr net.Addr) (n int, err error
82
69
if err != nil {
83
70
return
84
71
}
85
- return bufio .WritePacketBuffer (c .NetPacketConn , buffer , c .remoteAddr )
86
- }
87
-
88
- func (c * AssociatePacketConn ) Read (b []byte ) (n int , err error ) {
89
- n , _ , err = c .ReadFrom (b )
90
- return
91
- }
92
-
93
- func (c * AssociatePacketConn ) Write (b []byte ) (n int , err error ) {
94
- return c .WriteTo (b , c .remoteAddr )
72
+ return c .conn .Write (buffer .Bytes ())
95
73
}
96
74
97
75
func (c * AssociatePacketConn ) ReadPacket (buffer * buf.Buffer ) (destination M.Socksaddr , err error ) {
98
- destination , err = c .NetPacketConn . ReadPacket (buffer )
76
+ err = c .conn . ReadBuffer (buffer )
99
77
if err != nil {
100
- return M. Socksaddr {}, err
78
+ return
101
79
}
102
80
if buffer .Len () < 3 {
103
81
return M.Socksaddr {}, ErrInvalidPacket
104
82
}
105
- c .remoteAddr = destination
106
83
buffer .Advance (3 )
107
84
destination , err = M .SocksaddrSerializer .ReadAddrPort (buffer )
108
85
if err != nil {
109
86
return
110
87
}
88
+ c .remoteAddr = destination
111
89
return destination .Unwrap (), nil
112
90
}
113
91
@@ -118,11 +96,24 @@ func (c *AssociatePacketConn) WritePacket(buffer *buf.Buffer, destination M.Sock
118
96
if err != nil {
119
97
return err
120
98
}
121
- return common .Error (bufio .WritePacketBuffer (c .NetPacketConn , buffer , c .remoteAddr ))
99
+ return c .conn .WriteBuffer (buffer )
100
+ }
101
+
102
+ func (c * AssociatePacketConn ) Read (b []byte ) (n int , err error ) {
103
+ n , _ , err = c .ReadFrom (b )
104
+ return
105
+ }
106
+
107
+ func (c * AssociatePacketConn ) Write (b []byte ) (n int , err error ) {
108
+ return c .WriteTo (b , c .remoteAddr )
109
+ }
110
+
111
+ func (c * AssociatePacketConn ) RemoteAddr () net.Addr {
112
+ return c .remoteAddr .UDPAddr ()
122
113
}
123
114
124
115
func (c * AssociatePacketConn ) Upstream () any {
125
- return c .NetPacketConn
116
+ return c .conn
126
117
}
127
118
128
119
func (c * AssociatePacketConn ) FrontHeadroom () int {
@@ -131,7 +122,7 @@ func (c *AssociatePacketConn) FrontHeadroom() int {
131
122
132
123
func (c * AssociatePacketConn ) Close () error {
133
124
return common .Close (
134
- c .NetPacketConn ,
125
+ c .conn ,
135
126
c .underlying ,
136
127
)
137
128
}
0 commit comments