use the new AckHandlers in the Session

This commit is contained in:
Marten Seemann
2016-04-22 19:05:45 +07:00
parent 063cd4a7bd
commit ed244e95a6

View File

@@ -32,17 +32,16 @@ type Session struct {
unpacker *packetUnpacker
packer *packetPacker
batchMode bool
// TODO: Remove
EntropyReceived ackhandler.EntropyAccumulator
}
// NewSession makes a new session
func NewSession(conn *net.UDPConn, v protocol.VersionNumber, connectionID protocol.ConnectionID, sCfg *handshake.ServerConfig, streamCallback StreamCallback) PacketHandler {
session := &Session{
Connection: conn,
streamCallback: streamCallback,
Streams: make(map[protocol.StreamID]*Stream),
Connection: conn,
streamCallback: streamCallback,
Streams: make(map[protocol.StreamID]*Stream),
outgoingAckHandler: ackhandler.NewOutgoingPacketAckHandler(),
incomingAckHandler: ackhandler.NewIncomingPacketAckHandler(),
}
cryptoStream, _ := session.NewStream(1)
@@ -70,13 +69,8 @@ func (s *Session) HandlePacket(addr *net.UDPAddr, publicHeaderBinary []byte, pub
return err
}
// s.incomingAckHandler.ReceivedPacket(publicHeader.PacketNumber, packet.entropyBit)
// s.SendFrame(s.incomingAckHandler.DequeueAckFrame())
s.EntropyReceived.Add(publicHeader.PacketNumber, packet.entropyBit)
s.SendFrame(&frames.AckFrame{
LargestObserved: publicHeader.PacketNumber,
Entropy: s.EntropyReceived.Get(),
})
s.incomingAckHandler.ReceivedPacket(publicHeader.PacketNumber, packet.entropyBit)
s.SendFrame(s.incomingAckHandler.DequeueAckFrame())
for _, ff := range packet.frames {
var err error
@@ -84,7 +78,8 @@ func (s *Session) HandlePacket(addr *net.UDPAddr, publicHeaderBinary []byte, pub
case *frames.StreamFrame:
err = s.handleStreamFrame(frame)
case *frames.AckFrame:
// s.outgoingAckHandler.ReceivedAck(frame)
err = s.outgoingAckHandler.ReceivedAck(frame)
// ToDo: send right error in ConnectionClose frame
case *frames.ConnectionCloseFrame:
fmt.Printf("%#v\n", frame)
case *frames.StopWaitingFrame:
@@ -150,11 +145,11 @@ func (s *Session) sendPackets() error {
if packet == nil {
return nil
}
// s.outgoingAckHandler.SentPacket(&ackhandler.Packet{
// PacketNumber: packet.number,
// Plaintext: packet.payload,
// EntropyBit: packet.entropyBit,
// })
s.outgoingAckHandler.SentPacket(&ackhandler.Packet{
PacketNumber: packet.number,
Plaintext: packet.payload,
EntropyBit: packet.entropyBit,
})
fmt.Printf("-> Sending packet %d (%d bytes)\n", packet.number, len(packet.raw))
_, err = s.Connection.WriteToUDP(packet.raw, s.CurrentRemoteAddr)
if err != nil {