diff --git a/app/proxyman/inbound/worker.go b/app/proxyman/inbound/worker.go index 94df0ddd..0d4ae494 100644 --- a/app/proxyman/inbound/worker.go +++ b/app/proxyman/inbound/worker.go @@ -423,17 +423,6 @@ func (w *dsWorker) callback(conn internet.Connection) { sid := session.NewID() ctx = session.ContextWithID(ctx, sid) - ctx = session.ContextWithInbound(ctx, &session.Inbound{ - Source: net.DestinationFromAddr(conn.RemoteAddr()), - Gateway: net.UnixDestination(w.address), - Tag: w.tag, - }) - content := new(session.Content) - if w.sniffingConfig != nil { - content.SniffingRequest.Enabled = w.sniffingConfig.Enabled - content.SniffingRequest.OverrideDestinationForProtocol = w.sniffingConfig.DestinationOverride - } - ctx = session.ContextWithContent(ctx, content) if w.uplinkCounter != nil || w.downlinkCounter != nil { conn = &internet.StatCouterConnection{ Connection: conn, @@ -441,6 +430,20 @@ func (w *dsWorker) callback(conn internet.Connection) { WriteCounter: w.downlinkCounter, } } + ctx = session.ContextWithInbound(ctx, &session.Inbound{ + Source: net.DestinationFromAddr(conn.RemoteAddr()), + Gateway: net.UnixDestination(w.address), + Tag: w.tag, + Conn: conn, + }) + + content := new(session.Content) + if w.sniffingConfig != nil { + content.SniffingRequest.Enabled = w.sniffingConfig.Enabled + content.SniffingRequest.OverrideDestinationForProtocol = w.sniffingConfig.DestinationOverride + } + ctx = session.ContextWithContent(ctx, content) + if err := w.proxy.Process(ctx, net.Network_UNIX, conn, w.dispatcher); err != nil { newError("connection ends").Base(err).WriteToLog(session.ExportIDToError(ctx)) } diff --git a/proxy/vless/encoding/encoding.go b/proxy/vless/encoding/encoding.go index 04b84955..cfa3914d 100644 --- a/proxy/vless/encoding/encoding.go +++ b/proxy/vless/encoding/encoding.go @@ -185,7 +185,7 @@ func ReadV(reader buf.Reader, writer buf.Writer, timer signal.ActivityUpdater, c if conn.DirectIn { conn.DirectIn = false if sctx != nil { - if inbound := session.InboundFromContext(sctx); inbound != nil { + if inbound := session.InboundFromContext(sctx); inbound != nil && inbound.Conn != nil { iConn := inbound.Conn statConn, ok := iConn.(*internet.StatCouterConnection) if ok { @@ -208,7 +208,7 @@ func ReadV(reader buf.Reader, writer buf.Writer, timer signal.ActivityUpdater, c panic("XTLS Splice: not TCP inbound") } } else { - panic("XTLS Splice: nil inbound") + //panic("XTLS Splice: nil inbound or nil inbound.Conn") } } reader = buf.NewReadVReader(conn.Connection, rawConn)