@@ -31,9 +31,8 @@ type UDPForwarder struct {
31
31
udpNat * udpnat.Service [netip.AddrPort ]
32
32
33
33
// cache
34
- cacheProto tcpip.NetworkProtocolNumber
35
- cacheID stack.TransportEndpointID
36
- cachePacket stack.PacketBufferPtr
34
+ cacheProto tcpip.NetworkProtocolNumber
35
+ cacheID stack.TransportEndpointID
37
36
}
38
37
39
38
func NewUDPForwarder (ctx context.Context , stack * stack.Stack , handler Handler , udpTimeout int64 ) * UDPForwarder {
@@ -59,7 +58,6 @@ func (f *UDPForwarder) HandlePacket(id stack.TransportEndpointID, pkt stack.Pack
59
58
sBuffer .Write (view .AsSlice ())
60
59
})
61
60
f .cacheID = id
62
- f .cachePacket = pkt
63
61
f .udpNat .NewPacket (
64
62
f .ctx ,
65
63
upstreamMetadata .Source .AddrPort (),
@@ -76,7 +74,6 @@ func (f *UDPForwarder) newUDPConn(natConn N.PacketConn) N.PacketWriter {
76
74
source : f .cacheID .RemoteAddress ,
77
75
sourcePort : f .cacheID .RemotePort ,
78
76
sourceNetwork : f .cacheProto ,
79
- packet : f .cachePacket .IncRef (),
80
77
}
81
78
}
82
79
@@ -89,17 +86,6 @@ type UDPBackWriter struct {
89
86
packet stack.PacketBufferPtr
90
87
}
91
88
92
- func (w * UDPBackWriter ) Close () error {
93
- w .access .Lock ()
94
- defer w .access .Unlock ()
95
- if w .packet == nil {
96
- return os .ErrClosed
97
- }
98
- w .packet .DecRef ()
99
- w .packet = nil
100
- return nil
101
- }
102
-
103
89
func (w * UDPBackWriter ) WritePacket (packetBuffer * buf.Buffer , destination M.Socksaddr ) error {
104
90
if ! destination .IsIP () {
105
91
return E .Cause (os .ErrInvalid , "invalid destination" )
@@ -164,16 +150,6 @@ func (w *UDPBackWriter) WritePacket(packetBuffer *buf.Buffer, destination M.Sock
164
150
return nil
165
151
}
166
152
167
- func (w * UDPBackWriter ) HandshakeFailure (err error ) error {
168
- if w .packet == nil {
169
- return os .ErrClosed
170
- }
171
- err = gWriteUnreachable (w .stack , w .packet , err )
172
- w .packet .DecRef ()
173
- w .packet = nil
174
- return err
175
- }
176
-
177
153
type gRequest struct {
178
154
stack * stack.Stack
179
155
id stack.TransportEndpointID
@@ -182,9 +158,6 @@ type gRequest struct {
182
158
183
159
type gUDPConn struct {
184
160
* gonet.UDPConn
185
- access sync.Mutex
186
- stack * stack.Stack
187
- packet stack.PacketBufferPtr
188
161
}
189
162
190
163
func (c * gUDPConn ) Read (b []byte ) (n int , err error ) {
@@ -206,27 +179,10 @@ func (c *gUDPConn) Write(b []byte) (n int, err error) {
206
179
}
207
180
208
181
func (c * gUDPConn ) Close () error {
209
- c .access .Lock ()
210
- defer c .access .Unlock ()
211
- if c .packet == nil {
212
- return os .ErrClosed
213
- }
214
- c .packet .DecRef ()
215
- c .packet = nil
216
182
return c .UDPConn .Close ()
217
183
}
218
184
219
- func (c * gUDPConn ) HandshakeFailure (err error ) error {
220
- if c .packet == nil {
221
- return os .ErrClosed
222
- }
223
- err = gWriteUnreachable (c .stack , c .packet , err )
224
- c .packet .DecRef ()
225
- c .packet = nil
226
- return err
227
- }
228
-
229
- func gWriteUnreachable (gStack * stack.Stack , packet stack.PacketBufferPtr , err error ) error {
185
+ func gWriteUnreachable (gStack * stack.Stack , packet stack.PacketBufferPtr , err error ) (retErr error ) {
230
186
if errors .Is (err , syscall .ENETUNREACH ) {
231
187
if packet .NetworkProtocolNumber == header .IPv4ProtocolNumber {
232
188
return gWriteUnreachable4 (gStack , packet , stack .RejectIPv4WithICMPNetUnreachable )
0 commit comments