mirror of https://github.com/v2ray/v2ray-core
Fix receiving update
parent
313b3c1db0
commit
71c9bd678c
|
@ -183,6 +183,7 @@ func (kcp *KCP) DumpReceivingBuf() {
|
||||||
kcp.rcv_queue = append(kcp.rcv_queue, seg)
|
kcp.rcv_queue = append(kcp.rcv_queue, seg)
|
||||||
kcp.rcv_buf.Advance()
|
kcp.rcv_buf.Advance()
|
||||||
kcp.rcv_nxt++
|
kcp.rcv_nxt++
|
||||||
|
kcp.receivingUpdated = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -288,8 +289,9 @@ func (kcp *KCP) HandleReceivingNext(receivingNext uint32) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (kcp *KCP) HandleSendingNext(sendingNext uint32) {
|
func (kcp *KCP) HandleSendingNext(sendingNext uint32) {
|
||||||
kcp.acklist.Clear(sendingNext)
|
if kcp.acklist.Clear(sendingNext) {
|
||||||
kcp.receivingUpdated = true
|
kcp.receivingUpdated = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (kcp *KCP) parse_data(newseg *DataSegment) {
|
func (kcp *KCP) parse_data(newseg *DataSegment) {
|
||||||
|
@ -325,6 +327,7 @@ func (kcp *KCP) Input(data []byte) int {
|
||||||
kcp.HandleOption(seg.Opt)
|
kcp.HandleOption(seg.Opt)
|
||||||
kcp.HandleSendingNext(seg.SendingNext)
|
kcp.HandleSendingNext(seg.SendingNext)
|
||||||
kcp.acklist.Add(seg.Number, seg.Timestamp)
|
kcp.acklist.Add(seg.Number, seg.Timestamp)
|
||||||
|
kcp.receivingUpdated = true
|
||||||
kcp.parse_data(seg)
|
kcp.parse_data(seg)
|
||||||
kcp.lastPayloadTime = kcp.current
|
kcp.lastPayloadTime = kcp.current
|
||||||
case *ACKSegment:
|
case *ACKSegment:
|
||||||
|
@ -407,6 +410,7 @@ func (kcp *KCP) flush() {
|
||||||
lost := false
|
lost := false
|
||||||
|
|
||||||
// flush acknowledges
|
// flush acknowledges
|
||||||
|
//if kcp.receivingUpdated {
|
||||||
ackSeg := kcp.acklist.AsSegment()
|
ackSeg := kcp.acklist.AsSegment()
|
||||||
if ackSeg != nil {
|
if ackSeg != nil {
|
||||||
ackSeg.Conv = kcp.conv
|
ackSeg.Conv = kcp.conv
|
||||||
|
@ -415,6 +419,7 @@ func (kcp *KCP) flush() {
|
||||||
kcp.output.Write(ackSeg)
|
kcp.output.Write(ackSeg)
|
||||||
kcp.receivingUpdated = false
|
kcp.receivingUpdated = false
|
||||||
}
|
}
|
||||||
|
//}
|
||||||
|
|
||||||
// calculate window size
|
// calculate window size
|
||||||
cwnd := _imin_(kcp.snd_una+kcp.snd_wnd, kcp.rmt_wnd)
|
cwnd := _imin_(kcp.snd_una+kcp.snd_wnd, kcp.rmt_wnd)
|
||||||
|
|
|
@ -59,7 +59,7 @@ func (this *ACKList) Add(number uint32, timestamp uint32) {
|
||||||
this.numbers = append(this.numbers, number)
|
this.numbers = append(this.numbers, number)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *ACKList) Clear(una uint32) {
|
func (this *ACKList) Clear(una uint32) bool {
|
||||||
count := 0
|
count := 0
|
||||||
for i := 0; i < len(this.numbers); i++ {
|
for i := 0; i < len(this.numbers); i++ {
|
||||||
if this.numbers[i] >= una {
|
if this.numbers[i] >= una {
|
||||||
|
@ -70,8 +70,12 @@ func (this *ACKList) Clear(una uint32) {
|
||||||
count++
|
count++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.numbers = this.numbers[:count]
|
if count < len(this.numbers) {
|
||||||
this.timestamps = this.timestamps[:count]
|
this.numbers = this.numbers[:count]
|
||||||
|
this.timestamps = this.timestamps[:count]
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *ACKList) AsSegment() *ACKSegment {
|
func (this *ACKList) AsSegment() *ACKSegment {
|
||||||
|
|
Loading…
Reference in New Issue