close the connection on an MapAccess error in SentPacketHandler

This commit is contained in:
Marten Seemann
2016-04-27 11:34:35 +07:00
parent 3f6b228d07
commit 160db13bdb
2 changed files with 7 additions and 4 deletions

View File

@@ -12,11 +12,12 @@ var (
ErrDuplicateOrOutOfOrderAck = errors.New("SentPacketHandler: Duplicate or out-of-order ACK")
// ErrEntropy occurs when an ACK with incorrect entropy is received
ErrEntropy = errors.New("SentPacketHandler: Wrong entropy")
// ErrMapAccess occurs when a NACK contains invalid NACK ranges
ErrMapAccess = errors.New("SentPacketHandler: Packet does not exist in PacketHistory")
)
var (
errAckForUnsentPacket = errors.New("SentPacketHandler: Received ACK for an unsent package")
errMapAccess = errors.New("SentPacketHandler: Packet does not exist in PacketHistory")
retransmissionThreshold = uint8(3)
)
@@ -46,7 +47,7 @@ func (h *sentPacketHandler) ackPacket(packetNumber protocol.PacketNumber) {
func (h *sentPacketHandler) nackPacket(packetNumber protocol.PacketNumber) error {
packet, ok := h.packetHistory[packetNumber]
if !ok {
return errMapAccess
return ErrMapAccess
}
packet.MissingReports++
@@ -92,7 +93,7 @@ func (h *sentPacketHandler) SentPacket(packet *Packet) error {
func (h *sentPacketHandler) calculateExpectedEntropy(ackFrame *frames.AckFrame) (EntropyAccumulator, error) {
packet, ok := h.packetHistory[ackFrame.LargestObserved]
if !ok {
return 0, errMapAccess
return 0, ErrMapAccess
}
expectedEntropy := packet.Entropy
@@ -109,7 +110,7 @@ func (h *sentPacketHandler) calculateExpectedEntropy(ackFrame *frames.AckFrame)
if i >= nackRange.FirstPacketNumber && i <= nackRange.LastPacketNumber {
packet, ok := h.packetHistory[i]
if !ok {
return 0, errMapAccess
return 0, ErrMapAccess
}
expectedEntropy.Substract(i, packet.EntropyBit)
}

View File

@@ -91,6 +91,8 @@ func (s *Session) Run() {
// Can happen e.g. when packets thought missing arrive late
case ackhandler.ErrDuplicateOrOutOfOrderAck:
// Can happen when RST_STREAMs arrive early or late (?)
case ackhandler.ErrMapAccess:
s.Close(err) // TODO: sent correct error code here
case errRstStreamOnInvalidStream:
fmt.Printf("Ignoring error in session: %s\n", err.Error())
default: