diff --git a/app/proxyman/outbound/handler.go b/app/proxyman/outbound/handler.go index 3c3c6918..eaa1b0b2 100644 --- a/app/proxyman/outbound/handler.go +++ b/app/proxyman/outbound/handler.go @@ -317,8 +317,12 @@ func (h *Handler) Dial(ctx context.Context, dest net.Destination) (stat.Connecti conn, err := internet.Dial(ctx, dest, h.streamSettings) conn = h.getStatCouterConnection(conn) outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds)-1] - ob.Conn = conn + if outbounds != nil { + ob := outbounds[len(outbounds)-1] + ob.Conn = conn + } else { + // for Vision's pre-connect + } return conn, err } diff --git a/proxy/vless/outbound/outbound.go b/proxy/vless/outbound/outbound.go index add9ece0..fc44ed57 100644 --- a/proxy/vless/outbound/outbound.go +++ b/proxy/vless/outbound/outbound.go @@ -176,6 +176,8 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte } defer conn.Close() + ob.Conn = conn // for Vision's pre-connect + iConn := conn if statConn, ok := iConn.(*stat.CounterConnection); ok { iConn = statConn.Connection