mirror of
https://github.com/v2fly/v2ray-core.git
synced 2024-11-07 10:47:48 -05:00
42 lines
1.2 KiB
Go
42 lines
1.2 KiB
Go
package quic
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/lucas-clemente/quic-go/internal/flowcontrol"
|
|
"github.com/lucas-clemente/quic-go/internal/protocol"
|
|
"github.com/lucas-clemente/quic-go/internal/wire"
|
|
)
|
|
|
|
type cryptoStream interface {
|
|
StreamID() protocol.StreamID
|
|
io.Reader
|
|
io.Writer
|
|
handleStreamFrame(*wire.StreamFrame) error
|
|
popStreamFrame(protocol.ByteCount) (*wire.StreamFrame, bool)
|
|
closeForShutdown(error)
|
|
setReadOffset(protocol.ByteCount)
|
|
// methods needed for flow control
|
|
getWindowUpdate() protocol.ByteCount
|
|
handleMaxStreamDataFrame(*wire.MaxStreamDataFrame)
|
|
}
|
|
|
|
type cryptoStreamImpl struct {
|
|
*stream
|
|
}
|
|
|
|
var _ cryptoStream = &cryptoStreamImpl{}
|
|
|
|
func newCryptoStream(sender streamSender, flowController flowcontrol.StreamFlowController, version protocol.VersionNumber) cryptoStream {
|
|
str := newStream(version.CryptoStreamID(), sender, flowController, version)
|
|
return &cryptoStreamImpl{str}
|
|
}
|
|
|
|
// SetReadOffset sets the read offset.
|
|
// It is only needed for the crypto stream.
|
|
// It must not be called concurrently with any other stream methods, especially Read and Write.
|
|
func (s *cryptoStreamImpl) setReadOffset(offset protocol.ByteCount) {
|
|
s.receiveStream.readOffset = offset
|
|
s.receiveStream.frameQueue.readPos = offset
|
|
}
|