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

Fix usages of wireguard listener

世界 5 месяцев назад
Родитель
Сommit
987899f94a
2 измененных файлов с 12 добавлено и 2 удалено
  1. 11 1
      common/dialer/default.go
  2. 1 1
      transport/wireguard/endpoint.go

+ 11 - 1
common/dialer/default.go

@@ -333,7 +333,17 @@ func (d *DefaultDialer) ListenSerialInterfacePacket(ctx context.Context, destina
 }
 
 func (d *DefaultDialer) ListenPacketCompat(network, address string) (net.PacketConn, error) {
-	return d.udpListener.ListenPacket(context.Background(), network, address)
+	udpListener := d.udpListener
+	udpListener.Control = control.Append(udpListener.Control, func(network, address string, conn syscall.RawConn) error {
+		for _, wgControlFn := range WgControlFns {
+			err := wgControlFn(network, address, conn)
+			if err != nil {
+				return err
+			}
+		}
+		return nil
+	})
+	return udpListener.ListenPacket(context.Background(), network, address)
 }
 
 func trackConn(conn net.Conn, err error) (net.Conn, error) {

+ 1 - 1
transport/wireguard/endpoint.go

@@ -141,7 +141,7 @@ func (e *Endpoint) Start(resolve bool) error {
 		return nil
 	}
 	var bind conn.Bind
-	wgListener, isWgListener := e.options.Dialer.(conn.Listener)
+	wgListener, isWgListener := common.Cast[conn.Listener](e.options.Dialer)
 	if isWgListener {
 		bind = conn.NewStdNetBind(wgListener)
 	} else {