add Session.NewStream

This commit is contained in:
Lucas Clemente
2016-04-18 14:01:52 +02:00
parent 07e7708506
commit c7bb7acaf8

View File

@@ -51,8 +51,7 @@ func NewSession(conn *net.UDPConn, v protocol.VersionNumber, connectionID protoc
EntropyHistory: make(map[protocol.PacketNumber]EntropyAccumulator), EntropyHistory: make(map[protocol.PacketNumber]EntropyAccumulator),
} }
cryptoStream := NewStream(session, protocol.StreamID(1)) cryptoStream, _ := session.NewStream(1)
session.Streams[1] = cryptoStream
session.cryptoSetup = handshake.NewCryptoSetup(connectionID, v, sCfg, cryptoStream) session.cryptoSetup = handshake.NewCryptoSetup(connectionID, v, sCfg, cryptoStream)
go session.cryptoSetup.HandleCryptoStream() go session.cryptoSetup.HandleCryptoStream()
@@ -87,10 +86,10 @@ func (s *Session) HandlePacket(addr *net.UDPAddr, publicHeaderBinary []byte, pub
} }
s.EntropyReceived.Add(publicHeader.PacketNumber, privateFlag&0x01 > 0) s.EntropyReceived.Add(publicHeader.PacketNumber, privateFlag&0x01 > 0)
s.SendFrames([]frames.Frame{&frames.AckFrame{ s.SendFrame(&frames.AckFrame{
LargestObserved: publicHeader.PacketNumber, LargestObserved: publicHeader.PacketNumber,
Entropy: s.EntropyReceived.Get(), Entropy: s.EntropyReceived.Get(),
}}) })
// read all frames in the packet // read all frames in the packet
for r.Len() > 0 { for r.Len() > 0 {
@@ -147,8 +146,7 @@ func (s *Session) handleStreamFrame(r *bytes.Reader) error {
stream, newStream := s.Streams[frame.StreamID] stream, newStream := s.Streams[frame.StreamID]
if !newStream { if !newStream {
stream = NewStream(s, frame.StreamID) stream, _ = s.NewStream(frame.StreamID)
s.Streams[frame.StreamID] = stream
} }
err = stream.AddStreamFrame(frame) err = stream.AddStreamFrame(frame)
if err != nil { if err != nil {
@@ -278,3 +276,13 @@ func (s *Session) SendFrame(frame frames.Frame) error {
_, err = s.Connection.WriteToUDP(fullReply.Bytes(), s.CurrentRemoteAddr) _, err = s.Connection.WriteToUDP(fullReply.Bytes(), s.CurrentRemoteAddr)
return err return err
} }
// NewStream creates a new strean open for reading and writing
func (s *Session) NewStream(id protocol.StreamID) (*Stream, error) {
stream := NewStream(s, id)
if s.Streams[id] != nil {
return nil, fmt.Errorf("Session: stream with ID %d already exists", id)
}
s.Streams[id] = stream
return stream, nil
}