@@ -31,9 +31,8 @@ type UDPForwarder struct {
3131 udpNat * udpnat.Service [netip.AddrPort ]
3232
3333 // cache
34- cacheProto tcpip.NetworkProtocolNumber
35- cacheID stack.TransportEndpointID
36- cachePacket stack.PacketBufferPtr
34+ cacheProto tcpip.NetworkProtocolNumber
35+ cacheID stack.TransportEndpointID
3736}
3837
3938func 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
5958 sBuffer .Write (view .AsSlice ())
6059 })
6160 f .cacheID = id
62- f .cachePacket = pkt
6361 f .udpNat .NewPacket (
6462 f .ctx ,
6563 upstreamMetadata .Source .AddrPort (),
@@ -76,7 +74,6 @@ func (f *UDPForwarder) newUDPConn(natConn N.PacketConn) N.PacketWriter {
7674 source : f .cacheID .RemoteAddress ,
7775 sourcePort : f .cacheID .RemotePort ,
7876 sourceNetwork : f .cacheProto ,
79- packet : f .cachePacket .IncRef (),
8077 }
8178}
8279
@@ -89,17 +86,6 @@ type UDPBackWriter struct {
8986 packet stack.PacketBufferPtr
9087}
9188
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-
10389func (w * UDPBackWriter ) WritePacket (packetBuffer * buf.Buffer , destination M.Socksaddr ) error {
10490 if ! destination .IsIP () {
10591 return E .Cause (os .ErrInvalid , "invalid destination" )
@@ -164,16 +150,6 @@ func (w *UDPBackWriter) WritePacket(packetBuffer *buf.Buffer, destination M.Sock
164150 return nil
165151}
166152
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-
177153type gRequest struct {
178154 stack * stack.Stack
179155 id stack.TransportEndpointID
@@ -182,9 +158,6 @@ type gRequest struct {
182158
183159type gUDPConn struct {
184160 * gonet.UDPConn
185- access sync.Mutex
186- stack * stack.Stack
187- packet stack.PacketBufferPtr
188161}
189162
190163func (c * gUDPConn ) Read (b []byte ) (n int , err error ) {
@@ -206,27 +179,10 @@ func (c *gUDPConn) Write(b []byte) (n int, err error) {
206179}
207180
208181func (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
216182 return c .UDPConn .Close ()
217183}
218184
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 ) {
230186 if errors .Is (err , syscall .ENETUNREACH ) {
231187 if packet .NetworkProtocolNumber == header .IPv4ProtocolNumber {
232188 return gWriteUnreachable4 (gStack , packet , stack .RejectIPv4WithICMPNetUnreachable )
0 commit comments