v2ray преди 9 години
родител
ревизия
a2abdc3d2f
променени са 3 файла, в които са добавени 11 реда и са изтрити 10 реда
  1. 1 2
      transport/internet/kcp/connection.go
  2. 4 6
      transport/internet/kcp/kcp.go
  3. 6 2
      transport/internet/kcp/output.go

+ 1 - 2
transport/internet/kcp/connection.go

@@ -69,8 +69,7 @@ func NewConnection(conv uint16, writerCloser io.WriteCloser, local *net.UDPAddr,
 		Authenticator: block,
 		Writer:        writerCloser,
 	}
-	mtu := effectiveConfig.Mtu - uint32(block.HeaderSize()) - headerSize
-	conn.kcp = NewKCP(conv, mtu, effectiveConfig.GetSendingWindowSize(), effectiveConfig.GetReceivingWindowSize(), conn.writeBufferSize, authWriter)
+	conn.kcp = NewKCP(conv, effectiveConfig.GetSendingWindowSize(), effectiveConfig.GetReceivingWindowSize(), conn.writeBufferSize, authWriter)
 	conn.kcp.NoDelay(effectiveConfig.Tti, 2, effectiveConfig.Congestion)
 	conn.kcp.current = conn.Elapsed()
 

+ 4 - 6
transport/internet/kcp/kcp.go

@@ -7,7 +7,6 @@ package kcp
 
 import (
 	"github.com/v2ray/v2ray-core/common/alloc"
-	v2io "github.com/v2ray/v2ray-core/common/io"
 	"github.com/v2ray/v2ray-core/common/log"
 )
 
@@ -46,7 +45,7 @@ type KCP struct {
 	receivingUpdated bool
 	lastPingTime     uint32
 
-	mtu, mss                        uint32
+	mss                             uint32
 	snd_una, snd_nxt, rcv_nxt       uint32
 	rx_rttvar, rx_srtt, rx_rto      uint32
 	snd_wnd, rcv_wnd, rmt_wnd, cwnd uint32
@@ -66,18 +65,17 @@ type KCP struct {
 
 // NewKCP create a new kcp control object, 'conv' must equal in two endpoint
 // from the same connection.
-func NewKCP(conv uint16, mtu uint32, sendingWindowSize uint32, receivingWindowSize uint32, sendingQueueSize uint32, output v2io.Writer) *KCP {
+func NewKCP(conv uint16, sendingWindowSize uint32, receivingWindowSize uint32, sendingQueueSize uint32, output *AuthenticationWriter) *KCP {
 	log.Debug("KCP|Core: creating KCP ", conv)
 	kcp := new(KCP)
 	kcp.conv = conv
 	kcp.snd_wnd = sendingWindowSize
 	kcp.rcv_wnd = receivingWindowSize
 	kcp.rmt_wnd = IKCP_WND_RCV
-	kcp.mtu = mtu
-	kcp.mss = kcp.mtu - DataSegmentOverhead
+	kcp.mss = output.Mtu() - DataSegmentOverhead
 	kcp.rx_rto = IKCP_RTO_DEF
 	kcp.interval = IKCP_INTERVAL
-	kcp.output = NewSegmentWriter(mtu, output)
+	kcp.output = NewSegmentWriter(output)
 	kcp.rcv_buf = NewReceivingWindow(receivingWindowSize)
 	kcp.snd_queue = NewSendingQueue(sendingQueueSize)
 	kcp.rcv_queue = NewReceivingQueue()

+ 6 - 2
transport/internet/kcp/output.go

@@ -15,9 +15,9 @@ type SegmentWriter struct {
 	writer v2io.Writer
 }
 
-func NewSegmentWriter(mtu uint32, writer v2io.Writer) *SegmentWriter {
+func NewSegmentWriter(writer *AuthenticationWriter) *SegmentWriter {
 	return &SegmentWriter{
-		mtu:    mtu,
+		mtu:    writer.Mtu(),
 		writer: writer,
 	}
 }
@@ -68,3 +68,7 @@ func (this *AuthenticationWriter) Write(payload *alloc.Buffer) error {
 }
 
 func (this *AuthenticationWriter) Release() {}
+
+func (this *AuthenticationWriter) Mtu() uint32 {
+	return effectiveConfig.Mtu - uint32(this.Authenticator.HeaderSize())
+}