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

Remove cone flag and simplify packet writing

- Remove cone environment variable, always use FullCone behavior
- Simplify udpWriter by using 'udp' variable name directly
- Inline checksum calculation
- Cleaner code following endpoint.go pattern

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

+ 5 - 7
proxy/tun/handler.go

@@ -44,7 +44,6 @@ type Handler struct {
 	stack         Stack
 	policyManager policy.Manager
 	dispatcher    routing.Dispatcher
-	cone          bool
 	udpConns      map[net.Destination]*udpConn
 	udpChecker    *task.Periodic
 }
@@ -160,14 +159,14 @@ func (w *udpWriter) WriteMultiBuffer(mb buf.MultiBuffer) error {
 			Payload:            buffer.MakeWithData(b.Bytes()),
 		})
 		
-		length := uint16(pkt.Size())
-		udpHeader := header.UDP(pkt.TransportHeader().Push(header.UDPMinimumSize))
-		udpHeader.Encode(&header.UDPFields{
+		udp := header.UDP(pkt.TransportHeader().Push(header.UDPMinimumSize))
+		udp.Encode(&header.UDPFields{
 			SrcPort: uint16(w.src.Port),
 			DstPort: uint16(w.dest.Port),
-			Length:  length,
+			Length:  uint16(pkt.Size()),
 		})
-		udpHeader.SetChecksum(^udpHeader.CalculateChecksum(checksum.Checksum(b.Bytes(), route.PseudoHeaderChecksum(header.UDPProtocolNumber, length))))
+		xsum := route.PseudoHeaderChecksum(header.UDPProtocolNumber, uint16(pkt.Size()))
+		udp.SetChecksum(^udp.CalculateChecksum(checksum.Checksum(b.Bytes(), xsum)))
 		
 		route.WritePacket(stack.NetworkHeaderParams{Protocol: header.UDPProtocolNumber, TTL: 64}, pkt)
 		pkt.DecRef()
@@ -184,7 +183,6 @@ func (t *Handler) Init(ctx context.Context, pm policy.Manager, dispatcher routin
 	t.ctx = core.ToBackgroundDetachedContext(ctx)
 	t.policyManager = pm
 	t.dispatcher = dispatcher
-	t.cone = ctx.Value("cone").(bool)
 	t.udpConns = make(map[net.Destination]*udpConn)
 	t.udpChecker = &task.Periodic{Interval: time.Minute, Execute: t.cleanupUDP}