瀏覽代碼

Adjust Splice panic strategy

RPRX 4 年之前
父節點
當前提交
0d772cd800
共有 2 個文件被更改,包括 12 次插入9 次删除
  1. 10 7
      app/proxyman/inbound/worker.go
  2. 2 2
      proxy/vless/encoding/encoding.go

+ 10 - 7
app/proxyman/inbound/worker.go

@@ -423,24 +423,27 @@ func (w *dsWorker) callback(conn internet.Connection) {
 	sid := session.NewID()
 	ctx = session.ContextWithID(ctx, sid)
 
+	if w.uplinkCounter != nil || w.downlinkCounter != nil {
+		conn = &internet.StatCouterConnection{
+			Connection:   conn,
+			ReadCounter:  w.uplinkCounter,
+			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 w.uplinkCounter != nil || w.downlinkCounter != nil {
-		conn = &internet.StatCouterConnection{
-			Connection:   conn,
-			ReadCounter:  w.uplinkCounter,
-			WriteCounter: w.downlinkCounter,
-		}
-	}
+
 	if err := w.proxy.Process(ctx, net.Network_UNIX, conn, w.dispatcher); err != nil {
 		newError("connection ends").Base(err).WriteToLog(session.ExportIDToError(ctx))
 	}

+ 2 - 2
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)