Просмотр исходного кода

Complete inbound context and wrap reader with timeout

- Add CanSpliceCopy=1 to UDP inbound (matching HandleConnection)
- Call session.SubContextFromMuxInbound for proper context
- Wrap reader with buf.TimeoutWrapperReader for timeout handling
- Ensures HandleUDPPacket has complete inbound info like HandleConnection

Co-authored-by: RPRX <[email protected]>
copilot-swe-agent[bot] 5 месяцев назад
Родитель
Сommit
a3bf179fe7
1 измененных файлов с 6 добавлено и 4 удалено
  1. 6 4
      proxy/tun/handler.go

+ 6 - 4
proxy/tun/handler.go

@@ -110,13 +110,15 @@ func (t *Handler) HandleUDPPacket(id stack.TransportEndpointID, pkt *stack.Packe
 			}()
 
 			inbound := &session.Inbound{
-				Name:   "tun",
-				Source: src,
-				User:   &protocol.MemoryUser{Level: t.config.UserLevel},
+				Name:          "tun",
+				Source:        src,
+				CanSpliceCopy: 1,
+				User:          &protocol.MemoryUser{Level: t.config.UserLevel},
 			}
 			ctx = session.ContextWithInbound(c.ContextWithID(ctx, session.NewID()), inbound)
+			ctx = session.SubContextFromMuxInbound(ctx)
 			link := &transport.Link{
-				Reader: conn.reader,
+				Reader: &buf.TimeoutWrapperReader{Reader: conn.reader},
 				Writer: &udpWriter{stack: ipStack, src: dest, dest: src},
 			}
 			t.dispatcher.DispatchLink(ctx, dest, link)